84 size_t num_reports = buffer[1];
85 if (num_reports > 3) {
91 vrpn_uint8 *bufptr = &buffer[2];
95 vrpn_uint16 report_index =
96 vrpn_unbuffer_from_little_endian<vrpn_uint16, vrpn_uint8>(bufptr);
101 vrpn_unbuffer_from_little_endian<vrpn_uint16, vrpn_uint8>(bufptr);
104 const double temperature_scale = 0.01;
105 vrpn_uint16 temperature =
106 vrpn_unbuffer_from_little_endian<vrpn_uint16, vrpn_uint8>(bufptr);
107 channel[0] = temperature * temperature_scale;
111 vrpn_uint8 *magnetometer_ptr = &buffer[56];
112 vrpn_int16 magnetometer_raw[3];
113 for (
size_t i = 0; i < 3; i++) {
114 magnetometer_raw[i] =
115 vrpn_unbuffer_from_little_endian<vrpn_int16, vrpn_uint8>(
120 const double magnetometer_scale = 0.0001;
121 channel[8] = -magnetometer_raw[0] * magnetometer_scale;
122 channel[9] = -magnetometer_raw[1] * magnetometer_scale;
123 channel[10] = -magnetometer_raw[2] * magnetometer_scale;
127 for (
size_t i = 0; i < num_reports; i++) {
128 vrpn_int32 accelerometer_raw[3];
129 vrpn_int32 gyroscope_raw[3];
139 const double accelerometer_scale = 0.0001;
140 const double gyroscope_scale = 0.0001;
142 static_cast<double>(accelerometer_raw[0]) * accelerometer_scale;
144 static_cast<double>(accelerometer_raw[1]) * accelerometer_scale;
146 static_cast<double>(accelerometer_raw[2]) * accelerometer_scale;
148 channel[5] =
static_cast<double>(gyroscope_raw[0]) * gyroscope_scale;
149 channel[6] =
static_cast<double>(gyroscope_raw[1]) * gyroscope_scale;
150 channel[7] =
static_cast<double>(gyroscope_raw[2]) * gyroscope_scale;
virtual void report_changes(vrpn_uint32 class_of_service=vrpn_CONNECTION_LOW_LATENCY, const struct timeval time=vrpn_ANALOG_NOW)
Send a report only if something has changed (for servers) Optionally, tell what time to stamp the val...