added advert and message response

This commit is contained in:
Ben Menking
2026-05-29 12:37:37 -04:00
parent a115223a9f
commit 3b34c242ba
3 changed files with 56 additions and 37 deletions
+27 -37
View File
@@ -3,6 +3,7 @@
namespace Menking\Meshcore;
use Exception;
use Menking\Meshcore\Model\AdvertResponse;
use Menking\Meshcore\Model\BinaryResponse;
use Menking\Meshcore\Model\ChannelResponse;
use Menking\Meshcore\Model\CodeSentResponse;
@@ -12,6 +13,7 @@ use Menking\Meshcore\Model\ErrorResponse;
use Menking\Meshcore\Model\LoginResponse;
use Menking\Meshcore\Model\LogReceiveResponse;
use Menking\Meshcore\Model\BatteryStorageResponse;
use Menking\Meshcore\Model\MessageResponse;
class CoreParser {
/**
@@ -70,33 +72,25 @@ class CoreParser {
}
protected static function parseMsg(string $payload): mixed {
$idx = 0;
$m = new MessageResponse();
$data = [
'code'=>ord($payload[$idx])
];
$idx = 0;
$m->code = ord($payload[$idx]);
$idx++;
if( ord($payload[0]) == CoreProtocol::RESP_CODE_CHANNEL_MSG_RECV_V3 ) {
$alt = [
'snr'=>unpack('V', substr($payload, 1, 4))[1],
'reserved1'=>0,
'reserved2'=>0
];
$data = array_merge($data, $alt);
if( $m->code == CoreProtocol::RESP_CODE_CHANNEL_MSG_RECV_V3 ) {
$m->snr = unpack('V', substr($payload, 1, 4))[1] / 4;
$idx = 5;
}
$remains = [
'channel_idx'=>ord($payload[$idx]),
'path_len'=>ord($payload[$idx+1]),
'type'=>ord($payload[$idx+2]),
'timestamp'=>unpack('V', substr($payload, $idx+3, 4))[1],
'message'=>substr($payload, $idx+7)
];
$m->channel_idx = ord($payload[$idx]);
$m->path_len = ord($payload[$idx+1]);
$m->type = ord($payload[$idx+2]);
$m->timestamp = unpack('V', substr($payload, $idx+3, 4))[1];
$m->message = substr($payload, $idx+7);
return array_merge($data, $remains);
return $m;
}
/**
@@ -105,27 +99,23 @@ class CoreParser {
* @return mixed
*/
protected static function parseAdvert(string $payload): mixed {
$data = [
'code'=>ord($payload[0]),
'pub_key'=>base64_encode(substr($payload, 1, CoreProtocol::PUB_KEY_SIZE))
];
$m = new AdvertResponse();
$m->code = ord($payload[0]);
$m->pub_key = base64_encode(substr($payload, 1, CoreProtocol::PUB_KEY_SIZE));
if( strlen($payload) > CoreProtocol::PUB_KEY_SIZE ) {
$new_data = [
'type'=>ord($payload[33]),
'flags'=>ord($payload[34]),
'out_path'=>substr($payload, 35, CoreProtocol::MAX_PATH_SIZE),
'name'=>substr($payload, 99, 32),
'last_advert_time'=>unpack('V', substr($payload, 203, 4))[1],
'lat'=>unpack('V', substr($payload, 207, 4))[1],
'lon'=>unpack('V', substr($payload, 211, 4))[1],
'last_mod'=>unpack('V', substr($payload, 215, 4))[1],
];
$data = array_merge($data, $new_data);
$m->type = ord($payload[33]);
$m->flags = ord($payload[34]);
$m->out_path = substr($payload, 35, CoreProtocol::MAX_PATH_SIZE);
$m->name = substr($payload, 99, 32);
$m->last_advert_time = unpack('V', substr($payload, 203, 4))[1];
$m->lat = unpack('V', substr($payload, 207, 4))[1];
$m->lon = unpack('V', substr($payload, 211, 4))[1];
$m->last_mod = unpack('V', substr($payload, 215, 4))[1];
}
return $data;
return $m;
}
/**
+16
View File
@@ -0,0 +1,16 @@
<?php
namespace Menking\Meshcore\Model;
class AdvertResponse extends Response {
public int $code;
public string $pub_key;
public int $type;
public int $flags;
public string $out_path;
public string $name;
public int $last_advert_time;
public int $lat;
public int $lon;
public int $last_mod;
}
+13
View File
@@ -0,0 +1,13 @@
<?php
namespace Menking\Meshcore\Model;
class MessageResponse extends Response {
public int $code;
public int $snr;
public int $channel_idx;
public int $path_len;
public int $type;
public int $timestamp;
public string $message;
}