diff --git a/.gitignore b/.gitignore index fbed619c..6fa0f2a8 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,4 @@ src/board/mod.rs __pycache__/ .hypothesis/ -corpus/generated/ +examples/meshcore/corpus/generated/ diff --git a/examples/meshcore/README.md b/examples/meshcore/README.md new file mode 100644 index 00000000..e8613dba --- /dev/null +++ b/examples/meshcore/README.md @@ -0,0 +1,26 @@ +# MeshCore Example + +This is a **protocol implementation** built on top of DongLoRa. The DongLoRa +firmware itself is protocol-agnostic — it just gives you a LoRa radio pipe. +MeshCore is one of many possible protocols you can run over it. + +## What's here + +- **meshcore_rx.py** — MeshCore packet decoder, Watchman mesh health reporter +- **channels.csv** — 276 known MeshCore channels (Public + hashtag channels) +- **corpus/** — Test vectors for MeshCore packet decoders + +## Usage + +```sh +uv run examples/meshcore/meshcore_rx.py [PORT] +``` + +Connects to a DongLoRa device, configures the radio for the MeshCore +frequency/modulation, and decodes received packets in real time. + +## Running the test corpus + +```sh +uv run examples/meshcore/corpus/validate.py +``` diff --git a/tools/channels.csv b/examples/meshcore/channels.csv similarity index 100% rename from tools/channels.csv rename to examples/meshcore/channels.csv diff --git a/corpus/build_hand.py b/examples/meshcore/corpus/build_hand.py similarity index 100% rename from corpus/build_hand.py rename to examples/meshcore/corpus/build_hand.py diff --git a/corpus/generate.py b/examples/meshcore/corpus/generate.py similarity index 100% rename from corpus/generate.py rename to examples/meshcore/corpus/generate.py diff --git a/corpus/hand/ack_basic.json b/examples/meshcore/corpus/hand/ack_basic.json similarity index 100% rename from corpus/hand/ack_basic.json rename to examples/meshcore/corpus/hand/ack_basic.json diff --git a/corpus/hand/ack_with_path.json b/examples/meshcore/corpus/hand/ack_with_path.json similarity index 100% rename from corpus/hand/ack_with_path.json rename to examples/meshcore/corpus/hand/ack_with_path.json diff --git a/corpus/hand/advert_basic.json b/examples/meshcore/corpus/hand/advert_basic.json similarity index 100% rename from corpus/hand/advert_basic.json rename to examples/meshcore/corpus/hand/advert_basic.json diff --git a/corpus/hand/advert_emoji_name.json b/examples/meshcore/corpus/hand/advert_emoji_name.json similarity index 100% rename from corpus/hand/advert_emoji_name.json rename to examples/meshcore/corpus/hand/advert_emoji_name.json diff --git a/corpus/hand/advert_feat_flags_as_name.json b/examples/meshcore/corpus/hand/advert_feat_flags_as_name.json similarity index 100% rename from corpus/hand/advert_feat_flags_as_name.json rename to examples/meshcore/corpus/hand/advert_feat_flags_as_name.json diff --git a/corpus/hand/advert_location.json b/examples/meshcore/corpus/hand/advert_location.json similarity index 100% rename from corpus/hand/advert_location.json rename to examples/meshcore/corpus/hand/advert_location.json diff --git a/corpus/hand/advert_no_appdata.json b/examples/meshcore/corpus/hand/advert_no_appdata.json similarity index 100% rename from corpus/hand/advert_no_appdata.json rename to examples/meshcore/corpus/hand/advert_no_appdata.json diff --git a/corpus/hand/advert_sensor.json b/examples/meshcore/corpus/hand/advert_sensor.json similarity index 100% rename from corpus/hand/advert_sensor.json rename to examples/meshcore/corpus/hand/advert_sensor.json diff --git a/corpus/hand/advert_truncated.json b/examples/meshcore/corpus/hand/advert_truncated.json similarity index 100% rename from corpus/hand/advert_truncated.json rename to examples/meshcore/corpus/hand/advert_truncated.json diff --git a/corpus/hand/advert_with_path.json b/examples/meshcore/corpus/hand/advert_with_path.json similarity index 100% rename from corpus/hand/advert_with_path.json rename to examples/meshcore/corpus/hand/advert_with_path.json diff --git a/corpus/hand/anon_req_tc_fallback.json b/examples/meshcore/corpus/hand/anon_req_tc_fallback.json similarity index 100% rename from corpus/hand/anon_req_tc_fallback.json rename to examples/meshcore/corpus/hand/anon_req_tc_fallback.json diff --git a/corpus/hand/bad_path_len.json b/examples/meshcore/corpus/hand/bad_path_len.json similarity index 100% rename from corpus/hand/bad_path_len.json rename to examples/meshcore/corpus/hand/bad_path_len.json diff --git a/corpus/hand/control_discover_req.json b/examples/meshcore/corpus/hand/control_discover_req.json similarity index 100% rename from corpus/hand/control_discover_req.json rename to examples/meshcore/corpus/hand/control_discover_req.json diff --git a/corpus/hand/empty_packet.json b/examples/meshcore/corpus/hand/empty_packet.json similarity index 100% rename from corpus/hand/empty_packet.json rename to examples/meshcore/corpus/hand/empty_packet.json diff --git a/corpus/hand/grp_txt_basic.json b/examples/meshcore/corpus/hand/grp_txt_basic.json similarity index 100% rename from corpus/hand/grp_txt_basic.json rename to examples/meshcore/corpus/hand/grp_txt_basic.json diff --git a/corpus/hand/multipart_ack.json b/examples/meshcore/corpus/hand/multipart_ack.json similarity index 100% rename from corpus/hand/multipart_ack.json rename to examples/meshcore/corpus/hand/multipart_ack.json diff --git a/corpus/hand/noise_packet.json b/examples/meshcore/corpus/hand/noise_packet.json similarity index 100% rename from corpus/hand/noise_packet.json rename to examples/meshcore/corpus/hand/noise_packet.json diff --git a/corpus/hand/path_3byte_hash.json b/examples/meshcore/corpus/hand/path_3byte_hash.json similarity index 100% rename from corpus/hand/path_3byte_hash.json rename to examples/meshcore/corpus/hand/path_3byte_hash.json diff --git a/corpus/hand/path_4byte_hash.json b/examples/meshcore/corpus/hand/path_4byte_hash.json similarity index 100% rename from corpus/hand/path_4byte_hash.json rename to examples/meshcore/corpus/hand/path_4byte_hash.json diff --git a/corpus/hand/req_transport_direct.json b/examples/meshcore/corpus/hand/req_transport_direct.json similarity index 100% rename from corpus/hand/req_transport_direct.json rename to examples/meshcore/corpus/hand/req_transport_direct.json diff --git a/corpus/hand/response_corrupted_pathlen_1.json b/examples/meshcore/corpus/hand/response_corrupted_pathlen_1.json similarity index 100% rename from corpus/hand/response_corrupted_pathlen_1.json rename to examples/meshcore/corpus/hand/response_corrupted_pathlen_1.json diff --git a/corpus/hand/response_corrupted_pathlen_2.json b/examples/meshcore/corpus/hand/response_corrupted_pathlen_2.json similarity index 100% rename from corpus/hand/response_corrupted_pathlen_2.json rename to examples/meshcore/corpus/hand/response_corrupted_pathlen_2.json diff --git a/corpus/hand/response_valid_1hop.json b/examples/meshcore/corpus/hand/response_valid_1hop.json similarity index 100% rename from corpus/hand/response_valid_1hop.json rename to examples/meshcore/corpus/hand/response_valid_1hop.json diff --git a/corpus/hand/response_valid_2hop.json b/examples/meshcore/corpus/hand/response_valid_2hop.json similarity index 100% rename from corpus/hand/response_valid_2hop.json rename to examples/meshcore/corpus/hand/response_valid_2hop.json diff --git a/corpus/hand/too_short.json b/examples/meshcore/corpus/hand/too_short.json similarity index 100% rename from corpus/hand/too_short.json rename to examples/meshcore/corpus/hand/too_short.json diff --git a/corpus/hand/trace_basic.json b/examples/meshcore/corpus/hand/trace_basic.json similarity index 100% rename from corpus/hand/trace_basic.json rename to examples/meshcore/corpus/hand/trace_basic.json diff --git a/corpus/hand/txt_msg_direct_2b_hash.json b/examples/meshcore/corpus/hand/txt_msg_direct_2b_hash.json similarity index 100% rename from corpus/hand/txt_msg_direct_2b_hash.json rename to examples/meshcore/corpus/hand/txt_msg_direct_2b_hash.json diff --git a/corpus/hand/txt_msg_flood_with_loops.json b/examples/meshcore/corpus/hand/txt_msg_flood_with_loops.json similarity index 100% rename from corpus/hand/txt_msg_flood_with_loops.json rename to examples/meshcore/corpus/hand/txt_msg_flood_with_loops.json diff --git a/corpus/schema.json b/examples/meshcore/corpus/schema.json similarity index 100% rename from corpus/schema.json rename to examples/meshcore/corpus/schema.json diff --git a/corpus/validate.py b/examples/meshcore/corpus/validate.py similarity index 98% rename from corpus/validate.py rename to examples/meshcore/corpus/validate.py index 80742076..192ac580 100755 --- a/corpus/validate.py +++ b/examples/meshcore/corpus/validate.py @@ -12,8 +12,8 @@ from pathlib import Path import jsonschema -# Add tools/ to path so we can import the decoder -sys.path.insert(0, str(Path(__file__).parent.parent / "tools")) +# Add meshcore/ directory to path so we can import the decoder +sys.path.insert(0, str(Path(__file__).parent.parent)) from meshcore_rx import decode_meshcore_packet # noqa: E402 CORPUS_DIR = Path(__file__).parent diff --git a/tools/meshcore_rx.py b/examples/meshcore/meshcore_rx.py similarity index 100% rename from tools/meshcore_rx.py rename to examples/meshcore/meshcore_rx.py