mirror of
https://github.com/Genaker/LoraSA.git
synced 2026-07-06 18:01:25 +02:00
Send heading + scan result
This commit is contained in:
+5
-1
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user