LoRa Scanner: a MeshCore preset, and its packets read

- MeshCore joins the presets (EU/UK Narrow: 869.618 MHz, 62.5 kHz, SF8,
  CR 4/8, sync 0x12), after the Meshtastic ones so stored choices keep
  their number; `lora preset MeshCore` on the console
- lib/meshcore reads what MeshCore sends in clear: header, path, and a
  node's advert (name, kind, key, position)
- the list row, the details, a Capture's viewer and the console echo read
  a packet by the sync word it was received on
- the bandwidth is printed as 62.5, not 62

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0162FokPdvY2KsS4NBfwyWPk
This commit is contained in:
2026-10-09 20:30:29 +02:00
co-authored by Claude Opus 5.5
parent 861a60b73d
commit 8ba41f72b6
23 changed files with 622 additions and 62 deletions
+27
View File
@@ -0,0 +1,27 @@
#pragma once
#include <cstddef>
#include <cstdint>
#include "packet_view.h"
namespace roro::lora {
// What the LoRa Scanner can be told to listen to by name: the Meshtastic presets allowed in
// EU_868, LongFast (the default) first, then MeshCore's EU/UK (Narrow). The order is kept: the
// chosen one is stored by its number.
struct ScanPreset {
const char* name;
uint32_t frequencyHz;
float bwKHz;
uint8_t sf, cr, syncWord;
uint16_t preamble;
Protocol protocol;
};
size_t scanPresetCount();
ScanPreset scanPreset(size_t i); // i < scanPresetCount()
// By name, whatever its case. False when there is none.
bool findScanPreset(const char* name, ScanPreset& out);
} // namespace roro::lora