static BYTE read_joystick(joystick_descriptor_t *joy) { /* read buttons */ BYTE joy_bits = read_button(joy, HID_FIRE, 16) | read_button(joy, HID_ALT_FIRE, 16) | read_button(joy, HID_LEFT, 4) | read_button(joy, HID_RIGHT, 8) | read_button(joy, HID_UP, 1) | read_button(joy, HID_DOWN, 2) | read_auto_button(joy, HID_AUTO_FIRE, 16) | read_auto_button(joy, HID_AUTO_ALT_FIRE, 16); /* axis */ joy_bits |= read_axis(joy, HID_X_AXIS, 4, 8) | read_axis(joy, HID_Y_AXIS, 1, 2); /* hat switch */ joy_bits |= read_hat_switch(joy); return joy_bits; }
/// \method z() /// Get the z-axis value. STATIC mp_obj_t pyb_accel_z(mp_obj_t self_in) { return read_axis(MMA_REG_Z); }
void MAG3110::read() { this->x = read_axis('x'); this->y = read_axis('y'); this->z = read_axis('z'); }
void *spacenav_thread(void *data){ LOG("Input device: attemting to open %s\n", mConfig->device.c_str()); int fd = open(mConfig->device.c_str(), O_RDONLY); if(fd <= 0){ LOG("No input device found\n"); pthread_exit(NULL); } int states[MAX_AXIS]; for(int i=0;i<MAX_AXIS;i++){ states[i] = 0; } while(true){ int axis = 0; int val = read_axis(fd, &axis); //LOG("%d: %d\n", axis, val); if(axis < 0 || axis >= MAX_AXIS){ continue; } if(val > 1024){ continue; //TODO: better solution! } int thresh = mConfig->thresh[axis]; //Positive if(val >= thresh && states[axis] == 0){ states[axis] = 1; on_axis_down(axis, 0); } if(val < thresh && states[axis] == 1){ states[axis] = 0; on_axis_up(axis, 0); } //Negative if(val <= -thresh && states[axis] == 0){ states[axis] = -1; on_axis_down(axis, 1); } if(val > -thresh && states[axis] == -1){ states[axis] = 0; on_axis_up(axis, 1); } SDL_Delay(1); } }