39 void writeByte(
unsigned char regAddr,
unsigned char regByte,
40 unsigned int verbose) {
48 printf(
"\r\nREG[0x%02X] < 0x%02X\t", regAddr, regByte);
61 unsigned char regByte,
unsigned int verbose) {
65 printf(
"\r\nREG[0x%02X(W%01d)] < 0x%02X\t", regAddr, winNumber, regByte);
75 unsigned short read16(
unsigned char regAddr,
unsigned int verbose) {
76 short rxData[] = {0x00, 0x00};
90 printf(
"REG[0x%02X] > 0x%02X%02X\t", regAddr, rxData[0], rxData[1]);
92 return (rxData[0] << 8 | rxData[1]);
102 unsigned int verbose) {
105 unsigned short rxData = 0x0000;
106 rxData =
read16(regAddr, 0);
108 printf(
"REG[0x%02X(W%01d)] > 0x%04X\t", regAddr, winNumber, rxData);
154 unsigned char regAddr) {
158 int retryCount = 50000;
162 if (retryCount == 0) {
163 printf(
"Retry exceeded waiting for DRDY\n");
173 for (i = 0; i < readLen; i++) {
174 signed int tmp =
spiTransfer(regAddr + (2 * (i + 1)));
175 sensorReadData[i] = (tmp << 8) +
spiTransfer(0x00);
203 unsigned int readLen) {
207 int retryCount = 50000;
211 if (retryCount == 0) {
212 printf(
"Retry exceeded waiting for DRDY\n");
222 for (i = 0; i < readLen; i++) {
224 sensorReadData[i] = (tmp << 8) +
spiTransfer(0x00);
249 unsigned short ndflags =
rxdata[idx];
290 int gyro_y = (
rxdata[idx + 2] << 8 * 2) +
rxdata[idx + 3];
291 int gyro_z = (
rxdata[idx + 4] << 8 * 2) +
rxdata[idx + 5];
298 short gyro_x =
rxdata[idx];
299 short gyro_y =
rxdata[idx + 1];
300 short gyro_z =
rxdata[idx + 2];
312 int accel_y = (
rxdata[idx + 2] << 8 * 2) +
rxdata[idx + 3];
313 int accel_z = (
rxdata[idx + 4] << 8 * 2) +
rxdata[idx + 5];
320 short accel_x =
rxdata[idx];
321 short accel_y =
rxdata[idx + 1];
322 short accel_z =
rxdata[idx + 2];
335 int gyro_delta_x = (
rxdata[idx] << 8 * 2) +
rxdata[idx + 1];
336 int gyro_delta_y = (
rxdata[idx + 2] << 8 * 2) +
rxdata[idx + 3];
337 int gyro_delta_z = (
rxdata[idx + 4] << 8 * 2) +
rxdata[idx + 5];
344 short gyro_delta_x =
rxdata[idx];
345 short gyro_delta_y =
rxdata[idx + 1];
346 short gyro_delta_z =
rxdata[idx + 2];
358 int accel_delta_x = (
rxdata[idx] << 8 * 2) +
rxdata[idx + 1];
359 int accel_delta_y = (
rxdata[idx + 2] << 8 * 2) +
rxdata[idx + 3];
360 int accel_delta_z = (
rxdata[idx + 4] << 8 * 2) +
rxdata[idx + 5];
367 short accel_delta_x =
rxdata[idx];
368 short accel_delta_y =
rxdata[idx + 1];
369 short accel_delta_z =
rxdata[idx + 2];
381 int qtn1 = (
rxdata[idx + 2] << 8 * 2) +
rxdata[idx + 3];
382 int qtn2 = (
rxdata[idx + 4] << 8 * 2) +
rxdata[idx + 5];
383 int qtn3 = (
rxdata[idx + 6] << 8 * 2) +
rxdata[idx + 7];
384 data->
qtn0 = (double)qtn0 * esensor->
qtn_sf / 65536;
385 data->
qtn1 = (
double)qtn1 * esensor->
qtn_sf / 65536;
386 data->
qtn2 = (double)qtn2 * esensor->
qtn_sf / 65536;
387 data->
qtn3 = (
double)qtn3 * esensor->
qtn_sf / 65536;
392 short qtn1 =
rxdata[idx + 1];
393 short qtn2 =
rxdata[idx + 2];
394 short qtn3 =
rxdata[idx + 3];
407 int ang2 = (
rxdata[idx + 2] << 8 * 2) +
rxdata[idx + 3];
408 int ang3 = (
rxdata[idx + 4] << 8 * 2) +
rxdata[idx + 5];
416 short ang2 =
rxdata[idx + 1];
417 short ang3 =
rxdata[idx + 2];
426 unsigned short gpio =
rxdata[idx];
455 int retryCount = 50000;
459 if (retryCount == 0) {
471 unsigned short calc_checksum = 0;
472 for (
unsigned int i = 0; i < data_length - 1; i++) {
473 calc_checksum +=
rxdata[i];
475 unsigned short epson_checksum =
rxdata[data_length - 1];
477 if (calc_checksum != epson_checksum) {
478 printf(
"checksum failed\n");