fix: parse CRSF battery as big-endian per protocol spec
CRSF battery frame is big-endian: voltage(u16 BE 0.1V), current(u16 BE 0.1A), capacity(u24 BE mAh), remaining(u8 %). Previous code read little-endian with wrong byte count (7 vs 8) and wrong scaling (/1000 vs /10), producing 9.98V for a 1S battery.
This commit is contained in:
+3
-3
@@ -174,8 +174,8 @@ static void dashboard_update(dashboard_t* d, cel_telemetry const* telem,
|
||||
break;
|
||||
case CEL_TELEM_BATTERY:
|
||||
d->has_batt = 1;
|
||||
d->batt_v = telem->data.battery.voltage_mv / 1000.0f;
|
||||
d->batt_a = telem->data.battery.current_ma / 1000.0f;
|
||||
d->batt_v = telem->data.battery.voltage_x10 / 10.0f;
|
||||
d->batt_a = telem->data.battery.current_x10 / 10.0f;
|
||||
d->batt_mah = telem->data.battery.capacity_mah;
|
||||
d->batt_pct = telem->data.battery.remaining_pct;
|
||||
d->batt_t = now;
|
||||
@@ -286,7 +286,7 @@ static void render_dashboard(dashboard_t const* d,
|
||||
if (d->batt_v > 3.0f) ansi_green(); else ansi_red();
|
||||
printf("%.2fV ", d->batt_v);
|
||||
ansi_reset();
|
||||
printf("%.1fA %dmah %d%%", d->batt_a, d->batt_mah, d->batt_pct);
|
||||
printf("%.1fA %umah %d%%", d->batt_a, d->batt_mah, d->batt_pct);
|
||||
print_age(now, d->batt_t);
|
||||
} else {
|
||||
ansi_dim(); printf("waiting..."); ansi_reset();
|
||||
|
||||
Reference in New Issue
Block a user