@@ -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
225226void 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