more implementation
This commit is contained in:
@@ -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]),
|
||||
|
||||
Reference in New Issue
Block a user