int freenect_set_led(freenect_device *dev, freenect_led_options option) { int ret; uint8_t empty[0x1]; ret = fnusb_control(&dev->usb_motor, 0x40, 0x06, (uint16_t)option, 0x0, empty, 0x0); return ret; }
int freenect_update_tilt_state(freenect_device *dev) { freenect_context *ctx = dev->parent; #ifdef BUILD_AUDIO //if we have motor control via audio and fw is uploaded - call the alt function if( dev->motor_control_with_audio_enabled ){ return update_tilt_state_alt(dev); } #endif if(!(ctx->enabled_subdevices & FREENECT_DEVICE_MOTOR)) return 0; uint8_t buf[10]; uint16_t ux, uy, uz; int ret = fnusb_control(&dev->usb_motor, 0xC0, 0x32, 0x0, 0x0, buf, 10); if (ret != 10) { FN_ERROR("Error in accelerometer reading, libusb_control_transfer returned %d\n", ret); return ret < 0 ? ret : -1; } ux = ((uint16_t)buf[2] << 8) | buf[3]; uy = ((uint16_t)buf[4] << 8) | buf[5]; uz = ((uint16_t)buf[6] << 8) | buf[7]; dev->raw_state.accelerometer_x = (int16_t)ux; dev->raw_state.accelerometer_y = (int16_t)uy; dev->raw_state.accelerometer_z = (int16_t)uz; dev->raw_state.tilt_angle = (int8_t)buf[8]; dev->raw_state.tilt_status = (freenect_tilt_status_code)buf[9]; return ret; }
int freenect_set_tilt_in_degrees(freenect_device *dev, double angle) { int ret; uint8_t empty[0x1]; angle = (((angle<MIN_TILT_ANGLE)?MIN_TILT_ANGLE:angle)>MAX_TILT_ANGLE)?MAX_TILT_ANGLE:((angle<MIN_TILT_ANGLE)?MIN_TILT_ANGLE:angle); angle = angle * 2; ret = fnusb_control(&dev->usb_motor, 0x40, 0x31, (uint16_t)angle, 0x0, empty, 0x0); return ret; }
int freenect_set_led(freenect_device *dev, freenect_led_options option) { freenect_context *ctx = dev->parent; //if we have motor control via audio and fw is uploaded - call the alt function if( dev->motor_control_with_audio_enabled ) { return freenect_set_led_alt(dev, option); } if(!(ctx->enabled_subdevices & FREENECT_DEVICE_MOTOR)) return 0; int ret; uint8_t empty[0x1]; ret = fnusb_control(&dev->usb_motor, 0x40, 0x06, (uint16_t)option, 0x0, empty, 0x0); return ret; }
int freenect_set_tilt_degs(freenect_device *dev, double angle) { freenect_context *ctx = dev->parent; //if we have motor control via audio and fw is uploaded - call the alt function if( dev->motor_control_with_audio_enabled ) { return freenect_set_tilt_degs_alt(dev, angle); } if(!(ctx->enabled_subdevices & FREENECT_DEVICE_MOTOR)) return 0; int ret; uint8_t empty[0x1]; angle = (angle<MIN_TILT_ANGLE) ? MIN_TILT_ANGLE : ((angle>MAX_TILT_ANGLE) ? MAX_TILT_ANGLE : angle); angle = angle * 2; ret = fnusb_control(&dev->usb_motor, 0x40, 0x31, (int16_t)angle, 0x0, empty, 0x0); return ret; }
int freenect_update_tilt_state(freenect_device *dev) { freenect_context *ctx = dev->parent; uint8_t buf[10]; uint16_t ux, uy, uz; int ret = fnusb_control(&dev->usb_motor, 0xC0, 0x32, 0x0, 0x0, buf, 10); if (ret != 10) { FN_ERROR("Error in accelerometer reading, libusb_control_transfer returned %d\n", ret); return ret < 0 ? ret : -1; } ux = ((uint16_t)buf[2] << 8) | buf[3]; uy = ((uint16_t)buf[4] << 8) | buf[5]; uz = ((uint16_t)buf[6] << 8) | buf[7]; dev->raw_state.accelerometer_x = (int16_t)ux; dev->raw_state.accelerometer_y = (int16_t)uy; dev->raw_state.accelerometer_z = (int16_t)uz; dev->raw_state.tilt_angle = (int8_t)buf[8]; dev->raw_state.tilt_status = (freenect_tilt_status_code)buf[9]; return ret; }