better handling of responses
This commit is contained in:
+17
-8
@@ -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];
|
||||
|
||||
Reference in New Issue
Block a user