mirror of
https://github.com/Genaker/LoraSA.git
synced 2026-03-28 17:42:59 +01:00
Send heading + scan result
This commit is contained in:
@@ -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);
|
||||
|
||||
38
src/main.cpp
38
src/main.cpp
@@ -1149,6 +1149,8 @@ void eventListenerForReport(void *arg, Event &e)
|
||||
if (e.epoch != frequency_scan_result.last_epoch)
|
||||
{
|
||||
frequency_scan_result.dump.sz = 0;
|
||||
frequency_scan_result.dump.heading_min = -999;
|
||||
frequency_scan_result.dump.heading_max = -999;
|
||||
}
|
||||
|
||||
if (frequency_scan_result.dump.sz >= frequency_scan_result.readings_sz)
|
||||
@@ -1196,6 +1198,29 @@ void eventListenerForReport(void *arg, Event &e)
|
||||
frequency_scan_result.rssi = e.detected.rssi;
|
||||
}
|
||||
|
||||
HeadingSensor *sensor = &droneHeading;
|
||||
if (compass != NULL && compass->lastRead() > sensor->lastRead())
|
||||
{
|
||||
sensor = compass;
|
||||
}
|
||||
|
||||
if (sensor->lastRead() > -1)
|
||||
{
|
||||
int16_t heading = sensor->heading();
|
||||
if (frequency_scan_result.dump.heading_min == -999)
|
||||
{
|
||||
frequency_scan_result.dump.heading_min = heading;
|
||||
frequency_scan_result.dump.heading_max = heading;
|
||||
}
|
||||
else
|
||||
{
|
||||
frequency_scan_result.dump.heading_min =
|
||||
min(frequency_scan_result.dump.heading_min, heading);
|
||||
frequency_scan_result.dump.heading_max =
|
||||
min(frequency_scan_result.dump.heading_max, heading);
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2072,7 +2097,8 @@ void routeMessage(RoutedMessage &m)
|
||||
}
|
||||
|
||||
if (m.message->type == MessageType::SCAN_RESULT ||
|
||||
m.message->type == MessageType::SCAN_MAX_RESULT)
|
||||
m.message->type == MessageType::SCAN_MAX_RESULT ||
|
||||
m.message->type == MessageType::SCAN_HEADING_MAX)
|
||||
{
|
||||
m.to.host = 1;
|
||||
return;
|
||||
@@ -2266,6 +2292,7 @@ void sendMessage(RoutedMessage &m)
|
||||
break;
|
||||
case SCAN_RESULT:
|
||||
case SCAN_MAX_RESULT:
|
||||
case SCAN_HEADING_MAX:
|
||||
if (config.is_host)
|
||||
{
|
||||
#ifdef DISPLAY_RAW_SCAN
|
||||
@@ -3411,6 +3438,8 @@ void reportScan()
|
||||
Message m;
|
||||
m.type = SCAN_RESULT;
|
||||
m.payload.dump.sz = 0;
|
||||
m.payload.dump.rssis2 = NULL;
|
||||
m.payload.dump.heading_min = -999;
|
||||
|
||||
if (config.detection_strategy.equalsIgnoreCase("RSSI"))
|
||||
{
|
||||
@@ -3428,6 +3457,13 @@ void reportScan()
|
||||
{
|
||||
m.type = SCAN_MAX_RESULT;
|
||||
|
||||
m.payload.dump.heading_min = frequency_scan_result.dump.heading_min;
|
||||
m.payload.dump.heading_max = frequency_scan_result.dump.heading_max;
|
||||
if (m.payload.dump.heading_min > -999)
|
||||
{
|
||||
m.type = SCAN_HEADING_MAX;
|
||||
}
|
||||
|
||||
size_t sz = config.scan_ranges_sz;
|
||||
m.payload.dump.sz = sz;
|
||||
m.payload.dump.freqs_khz = new uint32_t[sz];
|
||||
|
||||
Reference in New Issue
Block a user