more implementation

This commit is contained in:
Ben Menking
2026-05-10 15:27:51 -04:00
parent d053f7e3eb
commit 9eeb383ee4
7 changed files with 293 additions and 18 deletions
+69
View File
@@ -46,7 +46,14 @@ class CoreParser {
return self::parseBatteryAndStorage($payload);
case CoreProtocol::RESP_CODE_NO_MORE_MESSAGES:
return (object)['code'=>CoreProtocol::RESP_CODE_NO_MORE_MESSAGES];
case CoreProtocol::RESP_CODE_ADVERT_PATH:
return self::parseAdvertPathResponse($payload);
case CoreProtocol::RESP_CODE_STATS:
return self::parseCodeStatusResponse($payload);
case CoreProtocol::RESP_CODE_DEVICE_INFO:
return self::parseDeviceInfoResponse($payload);
default:
echo "Unparsed response: " . \Menking\Meshcore\Util\Debug::hexDump($payload) . "\n";
return $payload;
}
}
@@ -284,6 +291,68 @@ class CoreParser {
return $info;
}
public static function parseAdvertPathResponse(string $payload) {
$info = [
'code'=>ord($payload[0]),
'received_timestamp'=>unpack('V', substr($payload, 1, 4))[1],
'path_len'=>ord($payload[5]),
'path'=>substr($payload, 6, ord($payload[5]))
];
return $info;
}
public static function parseCodeStatusResponse(string $payload) {
$info = [
'code'=>ord($payload[0]),
'type'=>ord($payload[1]),
];
switch($info['type']) {
case CoreProtocol::STATS_TYPE_CORE:
$info['battery_mv'] = unpack('v', substr($payload, 2, 2))[1];
$info['uptime_secs'] = unpack('V', substr($payload, 4, 4))[1];
$info['err_flags'] = unpack('v', substr($payload, 8, 2))[1];
$info['queue_len'] = ord($payload[10]);
break;
case CoreProtocol::STATS_TYPE_RADIO:
$info['noise_floor'] = unpack('v', substr($payload, 2, 2))[1];
$info['last_rssi'] = (ord($payload[4]) >= 128) ? (ord($payload[4]) - 256): ord($payload[4]);
$info['last_snr'] = ord($payload[5]);
$info['tx_air_secs'] = unpack('V', substr($payload, 6, 4))[1];
$info['rx_air_secs'] = unpack('V', substr($payload, 10, 4))[1];
break;
case CoreProtocol::STATS_TYPE_PACKETS:
$info['recv'] = unpack('V', substr($payload, 2, 4))[1];
$info['sent'] = unpack('V', substr($payload, 6, 4))[1];
$info['n_sent_flood'] = unpack('V', substr($payload, 10, 4))[1];
$info['n_sent_direct'] = unpack('V', substr($payload, 14, 4))[1];
$info['n_recv_flood'] = unpack('V', substr($payload, 18, 4))[1];
$info['n_recv_direct'] = unpack('V', substr($payload, 22, 4))[1];
$info['n_rec_errors'] = unpack('V', substr($payload, 26, 4))[1];
break;
}
return $info;
}
public static function parseDeviceInfoResponse(string $payload) {
$info = [
'code'=>ord($payload[0]),
'fw_ver_code'=>ord($payload[1]),
'max_contacts'=>ord($payload[2]) * 2,
'max_group_channels'=>ord($payload[3]),
'ble_pin'=>unpack('V', substr($payload, 4, 4))[1],
'fw_build_date'=>trim(substr($payload, 8, 12)),
'manufacturer_name'=>trim(substr($payload, 20, 40)),
'fw_version'=>trim(substr($payload, 60, 20)),
'client_repeat'=>ord($payload[80]),
'path_hash_mode'=>ord($payload[81])
];
return $info;
}
public static function parseMessage(string $payload) {
$data = [
'code'=>ord($payload[0]),