Merge pull request #2213 from meshtastic/repeater-role

Start of repeater role with in firmware
This commit is contained in:
Ben Meadors 2023-01-28 11:44:28 -06:00 committed by GitHub
commit 9d2fbec511
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 46 additions and 33 deletions

View File

@ -190,7 +190,6 @@ bool GPS::setupGPS()
// Switch to Vehicle Mode, since SoftRF enables Aviation < 2g // Switch to Vehicle Mode, since SoftRF enables Aviation < 2g
_serial_gps->write("$PCAS11,3*1E\r\n"); _serial_gps->write("$PCAS11,3*1E\r\n");
delay(250); delay(250);
} else if (gnssModel == GNSS_MODEL_UBLOX) { } else if (gnssModel == GNSS_MODEL_UBLOX) {
/* /*
@ -429,6 +428,10 @@ void GPS::publishUpdate()
int32_t GPS::runOnce() int32_t GPS::runOnce()
{ {
// Repeaters have no need for GPS
if (config.device.role == meshtastic_Config_DeviceConfig_Role_REPEATER)
disable();
if (whileIdle()) { if (whileIdle()) {
// if we have received valid NMEA claim we are connected // if we have received valid NMEA claim we are connected
setConnected(); setConnected();

View File

@ -310,6 +310,10 @@ void setup()
// but we need to do this after main cpu iniot (esp32setup), because we need the random seed set // but we need to do this after main cpu iniot (esp32setup), because we need the random seed set
nodeDB.init(); nodeDB.init();
// If we're taking on the repeater role, use flood router
if (config.device.role == meshtastic_Config_DeviceConfig_Role_REPEATER)
router = new FloodingRouter();
playStartMelody(); playStartMelody();
// fixed screen override? // fixed screen override?

View File

@ -367,7 +367,6 @@ meshtastic_Routing_Error perhapsEncode(meshtastic_MeshPacket *p)
{ {
// If the packet is not yet encrypted, do so now // If the packet is not yet encrypted, do so now
if (p->which_payload_variant == meshtastic_MeshPacket_decoded_tag) { if (p->which_payload_variant == meshtastic_MeshPacket_decoded_tag) {
size_t numbytes = pb_encode_to_bytes(bytes, sizeof(bytes), &meshtastic_Data_msg, &p->decoded); size_t numbytes = pb_encode_to_bytes(bytes, sizeof(bytes), &meshtastic_Data_msg, &p->decoded);
// Only allow encryption on the text message app. // Only allow encryption on the text message app.

View File

@ -73,9 +73,6 @@ class Router : protected concurrency::OSThread
*/ */
void enqueueReceivedMessage(meshtastic_MeshPacket *p); void enqueueReceivedMessage(meshtastic_MeshPacket *p);
protected:
friend class RoutingModule;
/** /**
* Send a packet on a suitable interface. This routine will * Send a packet on a suitable interface. This routine will
* later free() the packet to pool. This routine is not allowed to stall. * later free() the packet to pool. This routine is not allowed to stall.
@ -85,6 +82,9 @@ class Router : protected concurrency::OSThread
*/ */
virtual ErrorCode send(meshtastic_MeshPacket *p); virtual ErrorCode send(meshtastic_MeshPacket *p);
protected:
friend class RoutingModule;
/** /**
* Should this incoming filter be dropped? * Should this incoming filter be dropped?
* *

View File

@ -33,6 +33,7 @@
*/ */
void setupModules() void setupModules()
{ {
if (config.device.role != meshtastic_Config_DeviceConfig_Role_REPEATER) {
#if HAS_BUTTON #if HAS_BUTTON
inputBroker = new InputBroker(); inputBroker = new InputBroker();
#endif #endif
@ -78,6 +79,10 @@ void setupModules()
externalNotificationModule = new ExternalNotificationModule(); externalNotificationModule = new ExternalNotificationModule();
#endif #endif
// NOTE! This module must be added LAST because it likes to check for replies from other modules and avoid sending extra acks // NOTE! This module must be added LAST because it likes to check for replies from other modules and avoid sending extra
// acks
} else {
adminModule = new AdminModule();
}
routingModule = new RoutingModule(); routingModule = new RoutingModule();
} }

View File

@ -24,6 +24,8 @@ bool RoutingModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, mesh
meshtastic_MeshPacket *RoutingModule::allocReply() meshtastic_MeshPacket *RoutingModule::allocReply()
{ {
if (config.device.role == meshtastic_Config_DeviceConfig_Role_REPEATER)
return NULL;
assert(currentRequest); assert(currentRequest);
// We only consider making replies if the request was a legit routing packet (not just something we were sniffing) // We only consider making replies if the request was a legit routing packet (not just something we were sniffing)