10pad_t *
pad_open(
unsigned int port,
unsigned int slot,
unsigned int mode,
unsigned int lock)
15 pad->buffer = (
char*)memalign(64,256);
16 pad->buttons = (
struct padButtonStatus*)malloc(
sizeof(
struct padButtonStatus));
28 if (mtapGetConnection(port))
60 pad->type = PAD_TYPE_DIGITAL;
72 padPortOpen(pad->port,pad->slot,pad->buffer);
90 if (pad->actuator != NULL)
95 padPortClose(pad->port,pad->slot);
106 pad->state = padGetState(pad->port, pad->slot);
112void pad_print_state(
pad_t* pad)
115 char stateString[16];
117 padStateInt2String(pad->state,stateString);
118 printf(
"Pad(%d,%d) state is: %s\n",pad->port,pad->slot,stateString);
127 if (pad->state != pad->last_state)
130 pad_print_state(pad);
132 pad->last_state = pad->state;
136 if (pad->state == PAD_STATE_STABLE)
return;
137 if (pad->state == PAD_STATE_ERROR)
return;
138 if (pad->state == PAD_STATE_DISCONN)
return;
139 if (pad->state == PAD_STATE_FINDCTP1)
return;
148 pad->num_modes = padInfoMode(pad->port,pad->slot,PAD_MODETABLE,-1);
150 return pad->num_modes;
154void pad_print_supported_modes(
pad_t *pad)
159 printf(
"The device has %d modes\n", modes);
167 for (i = 0; i < modes; i++)
169 printf(
"%d ", padInfoMode(0, 0, PAD_MODETABLE, i));
183 if (pad->num_modes < 0)
188 if ((pad->num_modes == 0) && (type == PAD_TYPE_DIGITAL))
193 for (i = 0; i < pad->num_modes; i++)
195 if (padInfoMode(pad->port,pad->slot,PAD_MODETABLE,i) == type)
209 pad->type = padInfoMode(pad->port,pad->slot,PAD_MODECURID,0);
220 if (lock == PAD_MMODE_LOCK)
226 pad->lock = PAD_MMODE_UNLOCK;
229 if ((mode == PAD_MMODE_DUALSHOCK) || (mode == PAD_TYPE_DUALSHOCK))
233 status = padSetMainMode(pad->port,pad->slot,pad->mode,pad->lock);
238 pad->mode = PAD_MMODE_DUALSHOCK;
245 status = padSetMainMode(pad->port,pad->slot,pad->mode,pad->lock);
250 pad->mode = PAD_MMODE_DIGITAL;
264 if(padInfoPressMode(pad->port,pad->slot))
267 pad->sensitivity = 1;
272 pad->sensitivity = 0;
278 padEnterPressMode(pad->port,pad->slot);
282 padExitPressMode(pad->port,pad->slot);
291 if (pad->actuator == NULL)
294 if (padInfoAct(pad->port, pad->slot, -1, 0))
296 if (padInfoMode(pad->port,pad->slot,PAD_MODECUREXID,0))
309 pad->actuator->small = 0;
310 pad->actuator->large = 0x00;
312 pad->actuator->status[0] = 0;
313 pad->actuator->status[1] = 1;
314 pad->actuator->status[2] = 0xFF;
315 pad->actuator->status[3] = 0xFF;
316 pad->actuator->status[4] = 0xFF;
317 pad->actuator->status[5] = 0xFF;
321 padSetActAlign(pad->port,pad->slot,pad->actuator->status);
331 pad->actuator->small = small;
335 pad->actuator->small = 0x01;
338 pad->actuator->large = large;
340 pad->actuator->status[0] = pad->actuator->small;
341 pad->actuator->status[1] = pad->actuator->large;
343 padSetActDirect(pad->port,pad->slot,pad->actuator->status);