Public Access
The 16-byte clear header (hops away, channel hash, relay node), the EU_868 presets and their frequency slots, and the channel hash, all checked against Meshtastic's source. Captures are pcap with LoRaTap v0, read back with TShark 4.2.5; packet RSSI is plain dBm, as Wireshark reads it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EhqxQ49eCju4CzKYNjZzwT
29 lines
755 B
C++
29 lines
755 B
C++
#include "meshtastic_header.h"
|
|
|
|
#include <cstdio>
|
|
|
|
namespace roro::meshtastic {
|
|
|
|
static uint32_t le32(const uint8_t* p) { return p[0] | p[1] << 8 | p[2] << 16 | static_cast<uint32_t>(p[3]) << 24; }
|
|
|
|
bool parseHeader(const uint8_t* data, size_t len, PacketHeader& out) {
|
|
if (!data || len < kHeaderSize) return false;
|
|
out.to = le32(data);
|
|
out.from = le32(data + 4);
|
|
out.id = le32(data + 8);
|
|
out.flags = data[12];
|
|
out.channelHash = data[13];
|
|
out.nextHop = data[14];
|
|
out.relayNode = data[15];
|
|
return true;
|
|
}
|
|
|
|
std::string nodeId(uint32_t node) {
|
|
if (node == kBroadcast) return "all";
|
|
char s[10];
|
|
std::snprintf(s, sizeof s, "!%08x", static_cast<unsigned>(node));
|
|
return s;
|
|
}
|
|
|
|
} // namespace roro::meshtastic
|