예제 #1
0
파일: tilt.c 프로젝트: Aharobot/mrpt
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;
}
예제 #2
0
파일: tilt.c 프로젝트: Nick22Lp/libfreenect
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;
}
예제 #3
0
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;

}
예제 #4
0
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;
}
예제 #5
0
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;
}
예제 #6
0
파일: tilt.c 프로젝트: Aharobot/mrpt
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;
}