Skip to content

Commit 3f8fddc

Browse files
committed
more verbose debugging
1 parent 53a004c commit 3f8fddc

File tree

1 file changed

+34
-6
lines changed

1 file changed

+34
-6
lines changed

src/hid.c

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -221,8 +221,15 @@ K_THREAD_DEFINE(usb_init_thread_id, 256, usb_init_thread, NULL, NULL, NULL, 6, 0
221221
//|255 |id |addr |resv |
222222

223223
#include "util.h"
224+
// last valid data
224225
static float last_q_trackers[256][4] = {0};
226+
static uint32_t last_v_trackers[256] = {0};
227+
static uint8_t last_p_trackers[256] = {0};
225228
static int last_valid_trackers[256] = {0};
229+
// last received data
230+
static float cur_q_trackers[256][4] = {0};
231+
static uint32_t cur_v_trackers[256] = {0};
232+
static uint8_t cur_p_trackers[256] = {0};
226233

227234
void hid_write_packet_n(uint8_t *data, uint8_t rssi)
228235
{
@@ -250,24 +257,45 @@ void hid_write_packet_n(uint8_t *data, uint8_t rssi)
250257
q_iem(v, q);
251258
}
252259
float *last_q = last_q_trackers[data[1]];
253-
float mag = q_diff_mag(q, last_q);
254-
if (mag > 0.5f && mag < 6.28f - 0.5f)
260+
uint32_t *last_v = &last_v_trackers[data[1]];
261+
uint8_t *last_p = &last_p_trackers[data[1]];
262+
float *cur_q = cur_q_trackers[data[1]];
263+
uint32_t *cur_v = &cur_v_trackers[data[1]];
264+
uint8_t *cur_p = &cur_p_trackers[data[1]];
265+
float mag = q_diff_mag(q, last_q); // difference between last valid
266+
float mag_cur = q_diff_mag(q, cur_q); // difference between last received
267+
bool mag_invalid = mag > 0.5f && mag < 6.28f - 0.5f; // possibly invalid rotation
268+
bool mag_cur_invalid = mag_cur > 0.5f && mag_cur < 6.28f - 0.5f; // possibly inconsistent rotation
269+
if (mag_invalid)
255270
{
256-
LOG_ERR("Abnormal rotation for %012llX, ID %d, packet ID %d, mag: %.2f rad, last valid: %d", stored_tracker_addr[data[1]], data[1], data[0], (double)mag, last_valid_trackers[data[1]]);
257-
printk("quat: %5.2f %5.2f %5.2f %5.2f\n", (double)q[0], (double)q[1], (double)q[2], (double)q[3]);
258-
printk("last: %5.2f %5.2f %5.2f %5.2f\n", (double)last_q[0], (double)last_q[1], (double)last_q[2], (double)last_q[3]);
271+
// HWID, ID, packet type, rotation difference (rad), last valid packet
272+
LOG_ERR("Abnormal rot. %012llX i%d p%d m%.2f/%.2f v%d", stored_tracker_addr[data[1]], data[1], data[0], (double)mag, (double)mag_cur, last_valid_trackers[data[1]]);
273+
// decoded quat, packet type, q_buf
274+
printk("a: %5.2f %5.2f %5.2f %5.2f p%d:%08lX\n", (double)q[0], (double)q[1], (double)q[2], (double)q[3], data[0], *q_buf);
275+
printk("b: %5.2f %5.2f %5.2f %5.2f p%d:%08lX\n", (double)cur_q[0], (double)cur_q[1], (double)cur_q[2], (double)cur_q[3], *cur_p, *cur_v);
276+
printk("c: %5.2f %5.2f %5.2f %5.2f p%d:%08lX\n", (double)last_q[0], (double)last_q[1], (double)last_q[2], (double)last_q[3], *last_p, *last_v);
259277
last_valid_trackers[data[1]]++;
260-
if (last_valid_trackers[data[1]] > 2) // reset last_q
278+
memcpy(cur_q, q, sizeof(q));
279+
*cur_v = *q_buf;
280+
*cur_p = data[0];
281+
if (!mag_cur_invalid && last_valid_trackers[data[1]] > 2) // reset last_q
261282
{
262283
LOG_WRN("Reset rotation for %012llX, ID %d", stored_tracker_addr[data[1]], data[1]);
263284
last_valid_trackers[data[1]] = 0;
264285
memcpy(last_q, q, sizeof(q));
286+
*last_v = *q_buf;
287+
*last_p = data[0];
265288
return;
266289
}
267290
return;
268291
}
269292
last_valid_trackers[data[1]] = 0;
293+
memcpy(cur_q, q, sizeof(q));
294+
*cur_v = *q_buf;
295+
*cur_p = data[0];
270296
memcpy(last_q, q, sizeof(q));
297+
*last_v = *q_buf;
298+
*last_p = data[0];
271299
}
272300

273301
memcpy(&report.data, data, 16); // all data can be passed through

0 commit comments

Comments
 (0)