Added CodeStatus models
This commit is contained in:
+67
-52
@@ -15,6 +15,9 @@ use Menking\Meshcore\Model\ErrorResponse;
|
||||
use Menking\Meshcore\Model\LoginResponse;
|
||||
use Menking\Meshcore\Model\LogReceiveResponse;
|
||||
use Menking\Meshcore\Model\BatteryStorageResponse;
|
||||
use Menking\Meshcore\Model\CodeStatusTypeCoreResponse;
|
||||
use Menking\Meshcore\Model\CodeStatusTypePacketResponse;
|
||||
use Menking\Meshcore\Model\CodeStatusTypeRadioResponse;
|
||||
use Menking\Meshcore\Model\ContactResponse;
|
||||
use Menking\Meshcore\Model\ContactsFullResponse;
|
||||
use Menking\Meshcore\Model\MessageResponse;
|
||||
@@ -376,57 +379,74 @@ class CoreParser {
|
||||
return $m;
|
||||
}
|
||||
|
||||
public static function parseCodeStatusResponse(string $payload) {
|
||||
$info = [
|
||||
'code'=>ord($payload[0]),
|
||||
'type'=>ord($payload[1]),
|
||||
];
|
||||
/**
|
||||
*
|
||||
* @param string $payload
|
||||
* @return CodeStatusTypeCoreResponse|CodeStatusTypeRadioResponse|CodeStatusTypePacketResponse
|
||||
*/
|
||||
public static function parseCodeStatusResponse(string $payload): CodeStatusTypeCoreResponse|CodeStatusTypeRadioResponse|CodeStatusTypePacketResponse {
|
||||
$m = null;
|
||||
|
||||
switch($info['type']) {
|
||||
switch(ord($payload[1])) {
|
||||
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]);
|
||||
$m = new CodeStatusTypeCoreResponse();
|
||||
$m->code = ord($payload[0]);
|
||||
$m->battery_mv = unpack('v', substr($payload, 2, 2))[1];
|
||||
$m->uptime_secs = unpack('V', substr($payload, 4, 4))[1];
|
||||
$m->err_flags = unpack('v', substr($payload, 8, 2))[1];
|
||||
$m->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];
|
||||
$m = new CodeStatusTypeRadioResponse();
|
||||
$m->code = ord($payload[0]);
|
||||
$m->noise_floor = unpack('v', substr($payload, 2, 2))[1];
|
||||
$m->last_rssi = (ord($payload[4]) >= 128) ? (ord($payload[4]) - 256): ord($payload[4]);
|
||||
$m->last_snr = ord($payload[5]);;
|
||||
$m->tx_air_secs = unpack('V', substr($payload, 6, 4))[1];
|
||||
$m->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];
|
||||
$m = new CodeStatusTypePacketResponse();
|
||||
$m->code = ord($payload[0]);
|
||||
$m->recv = unpack('V', substr($payload, 2, 4))[1];
|
||||
$m->sent = unpack('V', substr($payload, 6, 4))[1];
|
||||
$m->n_sent_flood = unpack('V', substr($payload, 10, 4))[1];
|
||||
$m->n_sent_direct = unpack('V', substr($payload, 14, 4))[1];
|
||||
$m->n_recv_flood = unpack('V', substr($payload, 18, 4))[1];
|
||||
$m->n_recv_direct = unpack('V', substr($payload, 22, 4))[1];
|
||||
$m->n_recv_errors = unpack('V', substr($payload, 26, 4))[1];
|
||||
break;
|
||||
}
|
||||
|
||||
return $info;
|
||||
return $m;
|
||||
}
|
||||
|
||||
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])
|
||||
];
|
||||
/**
|
||||
*
|
||||
* @param string $payload
|
||||
* @return DeviceInfoResponse
|
||||
*/
|
||||
public static function parseDeviceInfoResponse(string $payload): DeviceInfoResponse {
|
||||
$m = new DeviceInfoResponse();
|
||||
$m->code = ord($payload[0]);
|
||||
$m->firmware_version = ord($payload[1]);
|
||||
$m->max_contacts_raw = ord($payload[2]) * 2;
|
||||
$m->max_channels = ord($payload[3]);
|
||||
$m->ble_pin = unpack('V', substr($payload, 4, 4))[1];
|
||||
$m->firmware_build = trim(substr($payload, 8, 12));
|
||||
$m->model = trim(substr($payload, 20, 40));
|
||||
$m->version =trim(substr($payload, 60, 20));
|
||||
$m->client_repeat_enabled = ord($payload[80]);
|
||||
$m->path_hash_mode = ord($payload[81]);
|
||||
|
||||
return $info;
|
||||
return $m;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string $payload
|
||||
* @return ChannelResponse
|
||||
*/
|
||||
public static function parseChannelInfoResponse(string $payload): ChannelResponse {
|
||||
$m = new ChannelResponse();
|
||||
|
||||
@@ -438,21 +458,11 @@ class CoreParser {
|
||||
return $m;
|
||||
}
|
||||
|
||||
/*
|
||||
public static function parseMessage(string $payload) {
|
||||
$data = [
|
||||
'code'=>ord($payload[0]),
|
||||
'channel_idx'=>ord($payload[1]),
|
||||
'path_len'=>ord($payload[2]),
|
||||
'type'=>ord($payload[3]),
|
||||
'timestamp'=>date('r', unpack('V', substr($payload, 4, 4))[1]),
|
||||
'message'=>substr($payload, 8, strlen($payload))
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
* @param mixed $str
|
||||
* @return null|string
|
||||
*/
|
||||
public static function readCstring($str) {
|
||||
$x = strpos($str, "\0");
|
||||
|
||||
@@ -464,6 +474,11 @@ class CoreParser {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string $pubkey
|
||||
* @return string
|
||||
*/
|
||||
public static function formatPublicKey(string $pubkey): string {
|
||||
return bin2hex($pubkey);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace Menking\Meshcore\Model;
|
||||
|
||||
class CodeStatusTypeCoreResponse extends Response {
|
||||
public int $code;
|
||||
public int $battery_mv;
|
||||
public int $uptime_secs;
|
||||
public int $err_flags;
|
||||
public int $queue_len;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace Menking\Meshcore\Model;
|
||||
|
||||
class CodeStatusTypePacketResponse extends Response {
|
||||
public int $code;
|
||||
public int $recv;
|
||||
public int $sent;
|
||||
public int $n_sent_flood;
|
||||
public int $n_sent_direct;
|
||||
public int $n_recv_flood;
|
||||
public int $n_recv_direct;
|
||||
public int $n_recv_errors;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace Menking\Meshcore\Model;
|
||||
|
||||
class CodeStatusTypeRadioResponse extends Response {
|
||||
public int $code;
|
||||
public int $noise_floor;
|
||||
public int $last_rssi;
|
||||
public int $last_snr;
|
||||
public int $tx_air_secs;
|
||||
public int $rx_air_secs;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user