void STJoystick::Sys_Update() { int i; #if SDL_INPUT_LINUXEV if ( joystick_data->hwdata->is_hid ) EV_HandleEvents(this->joystick_data); else #endif JS_HandleEvents(this->joystick_data); /* Deliver ball motion updates */ for ( i=0; i<joystick_data->nballs; ++i ) { int xrel, yrel; xrel = joystick_data->hwdata->balls[i].axis[0]; yrel = joystick_data->hwdata->balls[i].axis[1]; if ( xrel || yrel ) { joystick_data->hwdata->balls[i].axis[0] = 0; joystick_data->hwdata->balls[i].axis[1] = 0; joystick_data->balls[i].dx = xrel; joystick_data->balls[i].dy = yrel; } } }
void SDL_SYS_JoystickUpdate(SDL_Joystick * joystick) { int i; #if SDL_INPUT_LINUXEV if (joystick->hwdata->is_hid) EV_HandleEvents(joystick); else #endif JS_HandleEvents(joystick); /* Deliver ball motion updates */ for (i = 0; i < joystick->nballs; ++i) { int xrel, yrel; xrel = joystick->hwdata->balls[i].axis[0]; yrel = joystick->hwdata->balls[i].axis[1]; if (xrel || yrel) { joystick->hwdata->balls[i].axis[0] = 0; joystick->hwdata->balls[i].axis[1] = 0; SDL_PrivateJoystickBall(joystick, (Uint8) i, xrel, yrel); } } }
static __inline__ void EV_HandleEvents(SDL_Joystick *joystick) { struct input_event events[32]; int i, len; int code; #ifndef NO_LOGICAL_JOYSTICKS if (SDL_joylist[joystick->index].fname == NULL) { SDL_joylist_head(i, joystick->index); return EV_HandleEvents(SDL_joylist[i].joy); } #endif while ((len=read(joystick->hwdata->fd, events, (sizeof events))) > 0) { len /= sizeof(events[0]); for ( i=0; i<len; ++i ) { code = events[i].code; switch (events[i].type) { case EV_KEY: if ( code >= BTN_MISC ) { code -= BTN_MISC; #ifndef NO_LOGICAL_JOYSTICKS if (!LogicalJoystickButton(joystick, joystick->hwdata->key_map[code], events[i].value)) #endif SDL_PrivateJoystickButton(joystick, joystick->hwdata->key_map[code], events[i].value); } break; case EV_ABS: switch (code) { case ABS_HAT0X: case ABS_HAT0Y: case ABS_HAT1X: case ABS_HAT1Y: case ABS_HAT2X: case ABS_HAT2Y: case ABS_HAT3X: case ABS_HAT3Y: code -= ABS_HAT0X; HandleHat(joystick, code/2, code%2, events[i].value); break; default: events[i].value = EV_AxisCorrect(joystick, code, events[i].value); #ifndef NO_LOGICAL_JOYSTICKS if (!LogicalJoystickAxis(joystick, joystick->hwdata->abs_map[code], events[i].value)) #endif SDL_PrivateJoystickAxis(joystick, joystick->hwdata->abs_map[code], events[i].value); break; } break; case EV_REL: switch (code) { case REL_X: case REL_Y: code -= REL_X; HandleBall(joystick, code/2, code%2, events[i].value); break; default: break; } break; default: break; } } } }