diff --git a/src/mesh/RadioInterface.cpp b/src/mesh/RadioInterface.cpp index 4b31b319a..2e44b0ada 100644 --- a/src/mesh/RadioInterface.cpp +++ b/src/mesh/RadioInterface.cpp @@ -110,6 +110,8 @@ const RegionInfo regions[] = { const RegionInfo *myRegion; +static uint8_t bytes[MAX_RHPACKETLEN]; + void initRegion() { const RegionInfo *r = regions; @@ -163,17 +165,19 @@ uint32_t RadioInterface::getPacketTime(uint32_t pl) uint32_t RadioInterface::getPacketTime(MeshPacket *p) { - assert(p->which_payload_variant == MeshPacket_encrypted_tag); // It should have already been encoded by now - uint32_t pl = p->encrypted.size + sizeof(PacketHeader); - + uint32_t pl = 0; + if(p->which_payload_variant == MeshPacket_encrypted_tag) { + pl = p->encrypted.size + sizeof(PacketHeader); + } else { + size_t numbytes = pb_encode_to_bytes(bytes, sizeof(bytes), &Data_msg, &p->decoded); + pl = numbytes + sizeof(PacketHeader); + } return getPacketTime(pl); } /** The delay to use for retransmitting dropped packets */ uint32_t RadioInterface::getRetransmissionMsec(const MeshPacket *p) { - assert(slotTimeMsec); // Better be non zero - static uint8_t bytes[MAX_RHPACKETLEN]; size_t numbytes = pb_encode_to_bytes(bytes, sizeof(bytes), &Data_msg, &p->decoded); uint32_t packetAirtime = getPacketTime(numbytes + sizeof(PacketHeader)); // Make sure enough time has elapsed for this packet to be sent and an ACK is received. @@ -270,9 +274,6 @@ void printPacket(const char *prefix, const MeshPacket *p) RadioInterface::RadioInterface() { assert(sizeof(PacketHeader) == 16); // make sure the compiler did what we expected - - // Can't print strings this early - serial not setup yet - // LOG_DEBUG("Set meshradio defaults name=%s\n", channelSettings.name); } bool RadioInterface::reconfigure() @@ -383,7 +384,7 @@ void RadioInterface::applyModemConfig() cr = 8; sf = 10; break; - case Config_LoRaConfig_ModemPreset_LONG_FAST: + default: // Config_LoRaConfig_ModemPreset_LONG_FAST is default. Gracefully use this is preset is something illegal. bw = (myRegion->wideLora) ? 812.5 : 250; cr = 8; sf = 11; @@ -398,8 +399,6 @@ void RadioInterface::applyModemConfig() cr = 8; sf = 12; break; - default: - assert(0); // Unknown enum } } else { sf = loraConfig.spread_factor; @@ -421,7 +420,6 @@ void RadioInterface::applyModemConfig() } power = loraConfig.tx_power; - assert(myRegion); // Should have been found in init if ((power == 0) || ((power > myRegion->powerLimit) && !devicestate.owner.is_licensed)) power = myRegion->powerLimit; @@ -501,7 +499,10 @@ size_t RadioInterface::beginSending(MeshPacket *p) h->to = p->to; h->id = p->id; h->channel = p->channel; - assert(p->hop_limit <= HOP_MAX); + if (p->hop_limit > HOP_MAX) { + LOG_WARN("hop limit %d is too high, setting to %d\n", p->hop_limit, HOP_MAX); + p->hop_limit = HOP_MAX; + } h->flags = p->hop_limit | (p->want_ack ? PACKET_FLAGS_WANT_ACK_MASK : 0); // if the sender nodenum is zero, that means uninitialized diff --git a/src/mesh/RadioLibInterface.cpp b/src/mesh/RadioLibInterface.cpp index 81a4d803e..eb17dbe37 100644 --- a/src/mesh/RadioLibInterface.cpp +++ b/src/mesh/RadioLibInterface.cpp @@ -372,7 +372,6 @@ QueueStatus RadioLibInterface::getQueueStatus() printPacket("Lora RX", mp); - // xmitMsec = getPacketTime(mp); airTime->logAirtime(RX_LOG, xmitMsec); deliverToReceiver(mp); diff --git a/src/mesh/Router.cpp b/src/mesh/Router.cpp index 0f34010ec..69ac1d5c9 100644 --- a/src/mesh/Router.cpp +++ b/src/mesh/Router.cpp @@ -39,6 +39,8 @@ static MemoryDynamic staticPool; Allocator &packetPool = staticPool; +static uint8_t bytes[MAX_RHPACKETLEN]; + /** * Constructor * @@ -94,8 +96,7 @@ PacketId generatePacketId() static uint32_t i; // Note: trying to keep this in noinit didn't help for working across reboots static bool didInit = false; - assert(sizeof(PacketId) == 4 || sizeof(PacketId) == 1); // only supported values - uint32_t numPacketId = sizeof(PacketId) == 1 ? UINT8_MAX : UINT32_MAX; // 0 is consider invalid + uint32_t numPacketId = UINT32_MAX; if (!didInit) { didInit = true; @@ -191,7 +192,11 @@ void printBytes(const char *label, const uint8_t *p, size_t numbytes) */ ErrorCode Router::send(MeshPacket *p) { - assert(p->to != nodeDB.getNodeNum()); // should have already been handled by sendLocal + if (p->to == nodeDB.getNodeNum()) { + LOG_ERROR("BUG! send() called with packet destined for local node!\n"); + packetPool.release(p); + return Routing_Error_BAD_REQUEST; + } // should have already been handled by sendLocal // Abort sending if we are violating the duty cycle if (!config.lora.override_duty_cycle && myRegion->dutyCycle != 100) { @@ -286,7 +291,6 @@ bool Router::cancelSending(NodeNum from, PacketId id) */ void Router::sniffReceived(const MeshPacket *p, const Routing *c) { - LOG_DEBUG("FIXME-update-db Sniffing packet\n"); // FIXME, update nodedb here for any packet that passes through us } @@ -305,7 +309,6 @@ bool perhapsDecode(MeshPacket *p) // Try to use this hash/channel pair if (channels.decryptForHash(chIndex, p->channel)) { // Try to decrypt the packet if we can - static uint8_t bytes[MAX_RHPACKETLEN]; size_t rawSize = p->encrypted.size; assert(rawSize <= sizeof(bytes)); memcpy(bytes, p->encrypted.bytes, @@ -325,14 +328,6 @@ bool perhapsDecode(MeshPacket *p) p->which_payload_variant = MeshPacket_decoded_tag; // change type to decoded p->channel = chIndex; // change to store the index instead of the hash - /* - if (p->decoded.portnum == PortNum_TEXT_MESSAGE_APP) { - LOG_DEBUG("\n\n** TEXT_MESSAGE_APP\n"); - } else if (p->decoded.portnum == PortNum_TEXT_MESSAGE_COMPRESSED_APP) { - LOG_DEBUG("\n\n** PortNum_TEXT_MESSAGE_COMPRESSED_APP\n"); - } - */ - // Decompress if needed. jm if (p->decoded.portnum == PortNum_TEXT_MESSAGE_COMPRESSED_APP) { // Decompress the payload @@ -368,7 +363,6 @@ Routing_Error perhapsEncode(MeshPacket *p) { // If the packet is not yet encrypted, do so now if (p->which_payload_variant == MeshPacket_decoded_tag) { - static uint8_t bytes[MAX_RHPACKETLEN]; // we have to use a scratch buffer because a union size_t numbytes = pb_encode_to_bytes(bytes, sizeof(bytes), &Data_msg, &p->decoded);