Skip to content

Commit b6a99e9

Browse files
committed
hid wait for valid packets
1 parent 6466a0a commit b6a99e9

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

src/hid.c

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

222222
#include "util.h"
223-
static float last_q_trackers[256][4] = {0};
223+
static float last_q_trackers[256] = {0};
224+
static int last_valid_trackers[256] = {0};
224225

225226
void hid_write_packet_n(uint8_t *data, uint8_t rssi)
226227
{
@@ -247,20 +248,24 @@ void hid_write_packet_n(uint8_t *data, uint8_t rssi)
247248
v[i] = v[i] * 2 - 1;
248249
q_iem(v, q);
249250
}
250-
float *last_q = last_q_trackers[data[1]];
251+
float *last_q = &last_q_trackers[data[1]];
251252
float mag = q_diff_mag(q, last_q);
252253
if (mag > 0.5f && mag < 6.28f - 0.5f)
253254
{
254-
LOG_ERR("Detected abnormal rotation");
255-
LOG_INF("Tracker ID: %d", data[1]);
256-
LOG_INF("Tracker address: %012llX", stored_tracker_addr[data[1]]);
257-
LOG_INF("Packet ID: %d", data[0]);
258-
LOG_INF("q: %.2f %.2f %.2f %.2f", (double)q[0], (double)q[1], (double)q[2], (double)q[3]);
259-
LOG_INF("last_q: %.2f %.2f %.2f %.2f", (double)last_q[0], (double)last_q[1], (double)last_q[2], (double)last_q[3]);
260-
LOG_INF("Magnitude: %.2f rad", (double)mag);
261-
memcpy(last_q, q, sizeof(q));
255+
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]]);
256+
printk("quat: %5.2f %5.2f %5.2f %5.2f\n", (double)q[0], (double)q[1], (double)q[2], (double)q[3]);
257+
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]);
258+
last_valid_trackers[data[1]]++;
259+
if (last_valid_trackers[data[1]] > 2) // reset last_q
260+
{
261+
LOG_WRN("Reset rotation for %012llX, ID %d", stored_tracker_addr[data[1]], data[1]);
262+
last_valid_trackers[data[1]] = 0;
263+
memcpy(last_q, q, sizeof(q));
264+
return;
265+
}
262266
return;
263267
}
268+
last_valid_trackers[data[1]] = 0;
264269
memcpy(last_q, q, sizeof(q));
265270
}
266271

0 commit comments

Comments
 (0)