| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- #include "triton.h"
- PuckInput g_in[NSLOT];
- // Triton report 0x47 carries a 16-bit IMU clock in 32-us units. Unwrap it
- // per RF bond slot so translated modes receive the same monotonic microsecond
- // source clock shared with 0x42/0x45 reports.
- static uint16_t g_triton47LastTick[NSLOT] = {};
- static uint32_t g_triton47TimestampUs[NSLOT] = {};
- static uint8_t g_triton47TimestampValid[NSLOT] = {};
- uint32_t tritonTimestamp47Us(uint8_t slot, uint16_t timestamp32us)
- {
- if (slot >= NSLOT)
- return (uint32_t)timestamp32us * 32u;
- if (!g_triton47TimestampValid[slot]) {
- g_triton47TimestampValid[slot] = 1;
- g_triton47LastTick[slot] = timestamp32us;
- g_triton47TimestampUs[slot] = (uint32_t)timestamp32us * 32u;
- return g_triton47TimestampUs[slot];
- }
- uint16_t delta = (uint16_t)(timestamp32us - g_triton47LastTick[slot]);
- g_triton47LastTick[slot] = timestamp32us;
- g_triton47TimestampUs[slot] += (uint32_t)delta * 32u;
- return g_triton47TimestampUs[slot];
- }
- void tritonTimestamp47Reset(uint8_t slot)
- {
- if (slot >= NSLOT)
- return;
- g_triton47LastTick[slot] = 0;
- g_triton47TimestampUs[slot] = 0;
- g_triton47TimestampValid[slot] = 0;
- }
- void imuFrom45(const uint8_t *r, int16_t *ax, int16_t *ay, int16_t *az,
- int16_t *gx, int16_t *gy, int16_t *gz)
- {
- *ax = s16off(r, 32);
- *ay = s16off(r, 34);
- *az = s16off(r, 36);
- *gx = s16off(r, 38);
- *gy = s16off(r, 40);
- *gz = s16off(r, 42);
- }
|