better handling of responses

This commit is contained in:
Ben Menking
2026-06-04 10:25:41 -04:00
parent 4debe9f045
commit ce871fead2
7 changed files with 192 additions and 183 deletions
+17 -8
View File
@@ -15,14 +15,13 @@ 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\CodeStatusResponse;
use Menking\Meshcore\Model\ContactResponse;
use Menking\Meshcore\Model\ContactsFullResponse;
use Menking\Meshcore\Model\MessageResponse;
use Menking\Meshcore\Model\MessagesWaitingResponse;
use Menking\Meshcore\Model\NoMoreMessagesResponse;
use Menking\Meshcore\Model\OkResponse;
class CoreParser {
/**
@@ -33,7 +32,7 @@ class CoreParser {
public static function parseResponse(string $payload): mixed {
switch(ord($payload[0])) {
case CoreProtocol::RESP_CODE_OK:
return true;
return self::parseOk($payload);
case CoreProtocol::RESP_CODE_ERR:
//throw new \Exception("Protocol error: " . CoreProtocol::getErrorText(ord($payload[1])));
return self::parseError($payload);
@@ -82,6 +81,13 @@ class CoreParser {
}
}
protected static function parseOk(string $payload): OkResponse {
$m = new OkResponse();
$m->code = ord($payload[0]);
return $m;
}
protected static function parseMsg(string $payload): mixed {
$m = new MessageResponse();
@@ -384,21 +390,23 @@ class CoreParser {
* @param string $payload
* @return CodeStatusTypeCoreResponse|CodeStatusTypeRadioResponse|CodeStatusTypePacketResponse
*/
protected static function parseCodeStatusResponse(string $payload): CodeStatusTypeCoreResponse|CodeStatusTypeRadioResponse|CodeStatusTypePacketResponse {
protected static function parseCodeStatusResponse(string $payload): CodeStatusResponse {
$m = null;
switch(ord($payload[1])) {
case CoreProtocol::STATS_TYPE_CORE:
$m = new CodeStatusTypeCoreResponse();
$m = new CodeStatusResponse();
$m->code = ord($payload[0]);
$m->type = CodeStatusResponse::RESP_CORE;
$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:
$m = new CodeStatusTypeRadioResponse();
$m = new CodeStatusResponse();
$m->code = ord($payload[0]);
$m->type = CodeStatusResponse::RESP_RADIO;
$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]);;
@@ -406,8 +414,9 @@ class CoreParser {
$m->rx_air_secs = unpack('V', substr($payload, 10, 4))[1];
break;
case CoreProtocol::STATS_TYPE_PACKETS:
$m = new CodeStatusTypePacketResponse();
$m = new CodeStatusResponse();
$m->code = ord($payload[0]);
$m->type = CodeStatusResponse::RESP_PACKET;
$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];