Send heading + scan result

This commit is contained in:
Sassa NF
2025-04-13 14:16:45 +01:00
parent 9c0a3f4ebf
commit 726a5e797f
4 changed files with 98 additions and 2 deletions
+5 -1
View File
@@ -432,12 +432,16 @@ String _wrap_str(String v)
Message::~Message()
{
if (type == SCAN_RESULT || type == SCAN_MAX_RESULT)
if (type == SCAN_RESULT || type == SCAN_MAX_RESULT || type == SCAN_HEADING_MAX)
{
if (payload.dump.sz > 0)
{
delete[] payload.dump.freqs_khz;
delete[] payload.dump.rssis;
if (payload.dump.rssis2)
{
delete[] payload.dump.rssis2;
}
payload.dump.sz = 0;
}
+3
View File
@@ -20,6 +20,7 @@ enum MessageType
SCAN,
SCAN_RESULT,
SCAN_MAX_RESULT,
SCAN_HEADING_MAX,
CONFIG_TASK,
HEADING,
_MAX_MESSAGE_TYPE = HEADING
@@ -53,6 +54,8 @@ struct ScanTaskResult
int16_t *rssis;
int16_t *rssis2;
int16_t prssi;
int16_t heading_min;
int16_t heading_max;
};
struct ConfigTask
+53
View File
@@ -144,6 +144,32 @@ uint8_t *_serialize_scan_max_result(Message &m, size_t &p, uint8_t *msg)
return msg;
}
uint8_t *_serialize_scan_heading_max(Message &m, size_t &p, uint8_t *msg)
{
if (m.type != SCAN_HEADING_MAX)
{
return NULL;
}
size_t written = 0;
written = _write(msg, p, 0, (uint8_t *)&m.payload.dump.heading_min, 2);
written = _write(msg, p, written, (uint8_t *)&m.payload.dump.heading_max, 2);
uint8_t *sub_msg = msg + written;
p -= written;
m.type = SCAN_MAX_RESULT;
sub_msg = _serialize_scan_max_result(m, p, sub_msg);
p += written;
m.type = SCAN_HEADING_MAX;
if (sub_msg == NULL)
{
msg = NULL;
}
return msg;
}
uint8_t *_serialize_config_task(Message &m, size_t &p, uint8_t *msg)
{
if (m.type != CONFIG_TASK)
@@ -201,6 +227,10 @@ int16_t RadioComms::send(Message &m)
{
msg = _serialize_scan_max_result(m, p, msg_buf);
}
else if (m.type == MessageType::SCAN_HEADING_MAX)
{
msg = _serialize_scan_heading_max(m, p, msg_buf);
}
else if (m.type == MessageType::CONFIG_TASK)
{
msg = _serialize_config_task(m, p, msg_buf);
@@ -301,6 +331,7 @@ Message *_deserialize_scan_max_result(size_t len, size_t &p, uint8_t *packet)
message->payload.dump.sz = dump_sz;
message->payload.dump.freqs_khz = freqs;
message->payload.dump.rssis = rssis;
message->payload.dump.rssis2 = NULL;
uint32_t scale = 0;
p = _read(packet, len, p, (uint8_t *)&scale);
@@ -318,6 +349,24 @@ Message *_deserialize_scan_max_result(size_t len, size_t &p, uint8_t *packet)
return message;
}
Message *_deserialize_scan_heading_max(size_t len, size_t &p, uint8_t *packet)
{
int16_t heading_min = -999;
int16_t heading_max = 0;
p = _read(packet, len, p, (uint8_t *)&heading_min, 2);
p = _read(packet, len, p, (uint8_t *)&heading_max, 2);
Message *message = _deserialize_scan_max_result(len, p, packet);
if (message != NULL)
{
message->type = SCAN_HEADING_MAX;
message->payload.dump.heading_min = heading_min;
message->payload.dump.heading_max = heading_max;
}
return message;
}
Message *_deserialize_config_task(size_t len, size_t &p, uint8_t *packet)
{
Message *message = new Message();
@@ -439,6 +488,10 @@ Message *RadioComms::receive(uint16_t timeout_ms)
{
message = _deserialize_scan_max_result(len, p, packet);
}
else if (b == SCAN_HEADING_MAX)
{
message = _deserialize_scan_heading_max(len, p, packet);
}
else if (b == CONFIG_TASK)
{
message = _deserialize_config_task(len, p, packet);