split out parseDevStatusAck & test it

This commit is contained in:
David Ventura
2024-07-01 16:03:53 +02:00
parent f85248bc6a
commit 8f19d215ba
2 changed files with 44 additions and 10 deletions
+24 -8
View File
@@ -42,7 +42,7 @@ export const makeP2pRdy = (dev: DevSerial): DataView => {
return create_P2pRdy(outbuf);
};
const swVerToString = (swver: number): string => {
export const swVerToString = (swver: number): string => {
return (
((swver >> 24) & 255).toString() +
"." +
@@ -53,6 +53,25 @@ const swVerToString = (swver: number): string => {
(swver & 255).toString()
);
};
export type DevStatus = {
charging: boolean;
battery_mV: number;
dbm: number;
swver: string;
};
export const parseDevStatusAck = (dv: DataView): DevStatus => {
const charging = dv.add(0x28).readU32LE() & 1; // 0x14000101 v 0x14000100
const power = dv.add(0x18).readU16LE(); // '3730' or '3765', milliVolts
const dbm = dv.add(0x24).readU8() - 0x100; // 0xbf - 0x100 = -65dbm .. constant??
const n_swver = dv.add(0x14).readU32LE();
const swver = swVerToString(n_swver);
return {
charging: charging > 0,
battery_mV: power,
dbm,
swver,
};
};
export const createResponseForControlCommand = (session: Session, dv: DataView): DataView[] => {
const start_type = dv.add(8).readU16(); // 0xa11 on control; data starts here on DATA pkt
const cmd_id = dv.add(10).readU16(); // 0x1120
@@ -83,16 +102,13 @@ export const createResponseForControlCommand = (session: Session, dv: DataView):
case ControlCommands.DevStatusAck:
// ParseDevStatus -> offset relevant?
const charging = dv.add(0x28).readU32LE() & 1 ? "" : "not "; // 0x14000101 v 0x14000100
const power = dv.add(0x18).readU16LE(); // '3730' or '3765', milliVolts
const dbm = dv.add(0x24).readU8() - 0x100; // 0xbf - 0x100 = -65dbm .. constant??
const n_swver = dv.add(0x14).readU32LE();
const swver = swVerToString(n_swver);
const status = parseDevStatusAck(dv);
// > -50 = excellent, -50 to -60 good, -60 to -70 fair, <-70 weak
logger.info(
`Camera ${session.devName}: sw: ${swver}, ${charging}charging, battery at ${power / 1000}V, Wifi ${dbm} dBm`,
`Camera ${session.devName}: sw: ${status.swver}, ${status.charging ? "" : "not "}charging, battery at ${
status.battery_mV
}mV, Wifi ${status.dbm} dBm`,
);
return [];