diff --git a/firmware/src/main.cpp b/firmware/src/main.cpp index cc6e935..fc5f083 100644 --- a/firmware/src/main.cpp +++ b/firmware/src/main.cpp @@ -499,8 +499,14 @@ static void sendReticulumAnnounce() { uint8_t sig[64]; ed25519_sign(sig, signed_data, sl, rnsEdPub, rnsEdPrv); - uint8_t pkt[2 + 16 + 1 + 64 + 10 + 10 + 64 + 32]; size_t p = 0; - pkt[p++] = 0x01; // flags: HEADER_1|BROADCAST|SINGLE|ANNOUNCE + uint8_t pkt[1 + 2 + 16 + 1 + 64 + 10 + 10 + 64 + 32]; size_t p = 0; + // RNode on-air framing: every LoRa frame starts with a 1-byte RNode header + // (RNode_Firmware transmit(): `random(256) & 0xF0`, split-flag clear for a + // single packet). RNode RX reads+strips it before handing the packet to RNS, + // so we must prepend it or the real RNS packet arrives shifted and fails to + // validate. Low nibble 0 = not a split packet. + pkt[p++] = 0x00; // RNode header (single, non-split) + pkt[p++] = 0x01; // RNS flags: HEADER_1|BROADCAST|SINGLE|ANNOUNCE pkt[p++] = 0x00; // hops memcpy(pkt + p, rnsDestHash, 16); p += 16; pkt[p++] = 0x00; // context = NONE