mirror of
https://github.com/mikecarper/MeshCore.git
synced 2026-08-28 11:34:58 +00:00
deploy: 64f9942001
This commit is contained in:
@@ -16,8 +16,8 @@
|
||||
|
||||
|
||||
|
||||
<link rel="icon" href="/meshcore/assets/images/favicon.png">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.6">
|
||||
<link rel="icon" href="/MeshCore/assets/images/favicon.png">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
|
||||
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/meshcore/assets/stylesheets/main.484c7ddc.min.css">
|
||||
<link rel="stylesheet" href="/MeshCore/assets/stylesheets/main.ec1eaa64.min.css">
|
||||
|
||||
|
||||
|
||||
@@ -44,9 +44,11 @@
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/meshcore/_stylesheets/extra.css">
|
||||
<link rel="stylesheet" href="/MeshCore/_stylesheets/extra.css">
|
||||
|
||||
<script>__md_scope=new URL("/meshcore/",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||||
<link rel="stylesheet" href="/MeshCore/_stylesheets/telemetry_decoder.css">
|
||||
|
||||
<script>__md_scope=new URL("/MeshCore/",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||||
|
||||
|
||||
|
||||
@@ -75,9 +77,9 @@
|
||||
|
||||
<header class="md-header md-header--shadow" data-md-component="header">
|
||||
<nav class="md-header__inner md-grid" aria-label="Header">
|
||||
<a href="/meshcore/." title="MeshCore Docs" class="md-header__button md-logo" aria-label="MeshCore Docs" data-md-component="logo">
|
||||
<a href="/MeshCore/." title="MeshCore Docs" class="md-header__button md-logo" aria-label="MeshCore Docs" data-md-component="logo">
|
||||
|
||||
<img src="/meshcore/_assets/meshcore.svg" alt="logo">
|
||||
<img src="/MeshCore/_assets/meshcore.svg" alt="logo">
|
||||
|
||||
</a>
|
||||
<label class="md-header__button md-icon" for="__drawer">
|
||||
@@ -150,13 +152,13 @@
|
||||
|
||||
|
||||
<div class="md-header__source">
|
||||
<a href="https://github.com/meshcore-dev/meshcore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
meshcore-dev/meshcore
|
||||
mikecarper/MeshCore
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -186,22 +188,22 @@
|
||||
|
||||
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
|
||||
<label class="md-nav__title" for="__drawer">
|
||||
<a href="/meshcore/." title="MeshCore Docs" class="md-nav__button md-logo" aria-label="MeshCore Docs" data-md-component="logo">
|
||||
<a href="/MeshCore/." title="MeshCore Docs" class="md-nav__button md-logo" aria-label="MeshCore Docs" data-md-component="logo">
|
||||
|
||||
<img src="/meshcore/_assets/meshcore.svg" alt="logo">
|
||||
<img src="/MeshCore/_assets/meshcore.svg" alt="logo">
|
||||
|
||||
</a>
|
||||
MeshCore Docs
|
||||
</label>
|
||||
|
||||
<div class="md-nav__source">
|
||||
<a href="https://github.com/meshcore-dev/meshcore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
meshcore-dev/meshcore
|
||||
mikecarper/MeshCore
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -215,7 +217,7 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/meshcore/." class="md-nav__link">
|
||||
<a href="/MeshCore/." class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
@@ -242,7 +244,88 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/meshcore/cli_commands/" class="md-nav__link">
|
||||
<a href="/MeshCore/WiFi/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
WiFi and MQTT by Firmware Type
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/MeshCore/cli_build_matrix/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
CLI Availability by Firmware Build
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/MeshCore/cli_command_availability/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
CLI Command Availability Matrix
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/MeshCore/cli_commands/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
@@ -269,7 +352,7 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/meshcore/companion_protocol/" class="md-nav__link">
|
||||
<a href="/MeshCore/companion_protocol/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
@@ -296,7 +379,7 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/meshcore/docs/" class="md-nav__link">
|
||||
<a href="/MeshCore/docs/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
@@ -323,7 +406,7 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/meshcore/faq/" class="md-nav__link">
|
||||
<a href="/MeshCore/faq/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
@@ -350,7 +433,88 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/meshcore/kiss_modem_protocol/" class="md-nav__link">
|
||||
<a href="/MeshCore/flood_filtering/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Repeater Flood Filtering and Moderation
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/MeshCore/gps_tracking/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
GPS Tracking
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/MeshCore/halo_keymind_settings/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Halo and Keymind Branch Settings
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/MeshCore/kiss_modem_protocol/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
@@ -377,7 +541,7 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/meshcore/nrf52_power_management/" class="md-nav__link">
|
||||
<a href="/MeshCore/nrf52_power_management/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
@@ -404,7 +568,7 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/meshcore/number_allocations/" class="md-nav__link">
|
||||
<a href="/MeshCore/number_allocations/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
@@ -431,7 +595,115 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/meshcore/packet_format/" class="md-nav__link">
|
||||
<a href="/MeshCore/ota_easy/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Easy firmware updates over LoRa
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/MeshCore/ota_meshtower_v2_sdcard/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
MeshTower V2 microSD LoRa OTA
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/MeshCore/ota_protocol/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
MeshCore OTA - .mota container & LoRa protocol
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/MeshCore/ota_user_guide/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Updating your node over the air (OTA) - user guide
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/MeshCore/packet_format/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
@@ -458,7 +730,7 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/meshcore/payloads/" class="md-nav__link">
|
||||
<a href="/MeshCore/payloads/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
@@ -485,7 +757,7 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/meshcore/qr_codes/" class="md-nav__link">
|
||||
<a href="/MeshCore/qr_codes/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
@@ -512,7 +784,7 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/meshcore/stats_binary_frames/" class="md-nav__link">
|
||||
<a href="/MeshCore/stats_binary_frames/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
@@ -539,7 +811,34 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/meshcore/terminal_chat_cli/" class="md-nav__link">
|
||||
<a href="/MeshCore/telemetry_decoder/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Telemetry history decoder
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="/MeshCore/terminal_chat_cli/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
@@ -626,10 +925,12 @@
|
||||
|
||||
|
||||
|
||||
<script id="__config" type="application/json">{"annotate": null, "base": "/meshcore/", "features": ["content.action.edit", "content.code.copy", "search.highlight", "search.suggest"], "search": "/meshcore/assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
||||
<script id="__config" type="application/json">{"annotate": null, "base": "/MeshCore/", "features": ["content.action.edit", "content.code.copy", "search.highlight", "search.suggest"], "search": "/MeshCore/assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
||||
|
||||
|
||||
<script src="/meshcore/assets/javascripts/bundle.79ae519e.min.js"></script>
|
||||
<script src="/MeshCore/assets/javascripts/bundle.d7400e89.min.js"></script>
|
||||
|
||||
<script src="/MeshCore/_javascript/telemetry_decoder.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
+1722
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,660 @@
|
||||
(function (global) {
|
||||
"use strict";
|
||||
|
||||
const TYPE_TEMPERATURE = 0x11;
|
||||
const TYPE_VOLTAGE = 0x12;
|
||||
const TYPE_GPS = 0x13;
|
||||
const METERS_PER_DEGREE = 111320;
|
||||
const DEGREES_TO_RADIANS = Math.PI / 180;
|
||||
|
||||
const EXAMPLES = Object.freeze({
|
||||
temperature: Object.freeze({
|
||||
label: "Temperature example",
|
||||
command: "get telemetry.temp",
|
||||
reply:
|
||||
"> EUDUcWoeMAVZVVVVUVVVVVXVVQACTJlSwEyZMmTJkuXKkyZEeNFARIcOFChQoUOHDiRY0aPI/ypUuXMmTA==",
|
||||
}),
|
||||
voltage: Object.freeze({
|
||||
label: "Voltage example",
|
||||
command: "get telemetry.volt",
|
||||
reply:
|
||||
"> EkDUcWoeMAAB5+bl5eTj4uLh4ODf3t7d3Nvb2tnZ2NfX1tXU1NPS0tHQ0M/Ozc3My8vKycnI/w==",
|
||||
}),
|
||||
gps: Object.freeze({
|
||||
label: "GPS example",
|
||||
command: "get telemetry.gps",
|
||||
reply:
|
||||
"> EwB9cmoeGIChAxwAR0i3AgAAAAAAAAAAAAAAAAKAAAAAAIAAAAD/9ABAAX/+AAgAYAAAB//wAD/+gAAAA/+wAP/8ABwAEAEABgAAAA//gAX/7AAv/3/8AAf/oAF//QAYACAAgAc=",
|
||||
}),
|
||||
});
|
||||
|
||||
class TelemetryDecodeError extends Error {
|
||||
constructor(message) {
|
||||
super(message);
|
||||
this.name = "TelemetryDecodeError";
|
||||
}
|
||||
}
|
||||
|
||||
function extractBase64(input) {
|
||||
if (typeof input !== "string" || input.trim() === "") {
|
||||
throw new TelemetryDecodeError("Paste a telemetry reply or Base64 payload first.");
|
||||
}
|
||||
|
||||
let text = input.trim();
|
||||
if (text.length > 4096) {
|
||||
throw new TelemetryDecodeError("The pasted value is too large to be a telemetry page.");
|
||||
}
|
||||
|
||||
const replyLine = text
|
||||
.split(/\r?\n/)
|
||||
.map((line) => line.trim())
|
||||
.find((line) => /^>\s*[A-Za-z0-9+/]+={0,2}$/.test(line));
|
||||
|
||||
if (replyLine) {
|
||||
text = replyLine.replace(/^>\s*/, "");
|
||||
} else {
|
||||
text = text
|
||||
.replace(/^```(?:text)?\s*/i, "")
|
||||
.replace(/```\s*$/, "")
|
||||
.trim()
|
||||
.replace(/^>\s*/, "")
|
||||
.replace(/\s+/g, "");
|
||||
}
|
||||
|
||||
if (text === "") {
|
||||
throw new TelemetryDecodeError("The telemetry reply does not contain Base64 data.");
|
||||
}
|
||||
if (text.length % 4 !== 0) {
|
||||
throw new TelemetryDecodeError("Base64 length is invalid; copy the complete padded reply.");
|
||||
}
|
||||
const validBase64 = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;
|
||||
if (!validBase64.test(text)) {
|
||||
throw new TelemetryDecodeError("The reply is not valid standard padded Base64.");
|
||||
}
|
||||
return text;
|
||||
}
|
||||
|
||||
function base64ToBytes(encoded) {
|
||||
let binary;
|
||||
try {
|
||||
if (typeof global.atob === "function") {
|
||||
binary = global.atob(encoded);
|
||||
} else if (typeof Buffer !== "undefined") {
|
||||
return Uint8Array.from(Buffer.from(encoded, "base64"));
|
||||
} else {
|
||||
throw new Error("No Base64 decoder is available");
|
||||
}
|
||||
} catch (_error) {
|
||||
throw new TelemetryDecodeError("The Base64 payload could not be decoded.");
|
||||
}
|
||||
|
||||
const bytes = new Uint8Array(binary.length);
|
||||
for (let index = 0; index < binary.length; index += 1) {
|
||||
bytes[index] = binary.charCodeAt(index);
|
||||
}
|
||||
return bytes;
|
||||
}
|
||||
|
||||
function uint32LE(bytes, offset) {
|
||||
return (
|
||||
bytes[offset] |
|
||||
(bytes[offset + 1] << 8) |
|
||||
(bytes[offset + 2] << 16) |
|
||||
(bytes[offset + 3] << 24)
|
||||
) >>> 0;
|
||||
}
|
||||
|
||||
function int32LE(bytes, offset) {
|
||||
const value = uint32LE(bytes, offset);
|
||||
return value > 0x7fffffff ? value - 0x100000000 : value;
|
||||
}
|
||||
|
||||
function readPackedBits(bytes, byteOffset, bitOffset, width) {
|
||||
let value = 0;
|
||||
const firstBit = byteOffset * 8 + bitOffset;
|
||||
for (let bit = 0; bit < width; bit += 1) {
|
||||
const absoluteBit = firstBit + bit;
|
||||
value =
|
||||
(value << 1) |
|
||||
((bytes[Math.floor(absoluteBit / 8)] >> (7 - (absoluteBit % 8))) & 1);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
function signed14(value) {
|
||||
return value & 0x2000 ? value - 0x4000 : value;
|
||||
}
|
||||
|
||||
function decodeHeader(bytes) {
|
||||
if (bytes.length < 7) {
|
||||
throw new TelemetryDecodeError("Telemetry payload is shorter than its seven-byte header.");
|
||||
}
|
||||
const header = {
|
||||
typeCode: bytes[0],
|
||||
firstEpoch: uint32LE(bytes, 1),
|
||||
intervalMinutes: bytes[5],
|
||||
count: bytes[6],
|
||||
byteLength: bytes.length,
|
||||
};
|
||||
if (header.intervalMinutes === 0) {
|
||||
throw new TelemetryDecodeError("Telemetry sample interval cannot be zero.");
|
||||
}
|
||||
if (header.count === 0) {
|
||||
throw new TelemetryDecodeError("Telemetry sample count cannot be zero.");
|
||||
}
|
||||
return header;
|
||||
}
|
||||
|
||||
function assertLength(bytes, expected, label) {
|
||||
if (bytes.length !== expected) {
|
||||
throw new TelemetryDecodeError(
|
||||
`${label} payload should be ${expected} bytes for this sample count; received ${bytes.length}.`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function sampleEpoch(header, index) {
|
||||
return header.firstEpoch + index * header.intervalMinutes * 60;
|
||||
}
|
||||
|
||||
function decodeTemperature(bytes, header) {
|
||||
const statusBytes = Math.ceil((header.count * 2) / 8);
|
||||
const valueBytes = Math.ceil((header.count * 7) / 8);
|
||||
assertLength(bytes, 7 + statusBytes + valueBytes, "Temperature");
|
||||
|
||||
const rows = [];
|
||||
for (let index = 0; index < header.count; index += 1) {
|
||||
const statusCode = readPackedBits(bytes, 7, index * 2, 2);
|
||||
const rawCode = readPackedBits(bytes, 7 + statusBytes, index * 7, 7);
|
||||
let status;
|
||||
let valueC = null;
|
||||
if (statusCode === 0) {
|
||||
status = "Missing";
|
||||
} else if (statusCode === 1) {
|
||||
status = "Value";
|
||||
valueC = rawCode - 50;
|
||||
} else if (statusCode === 2) {
|
||||
status = "Below range";
|
||||
} else {
|
||||
status = "Above range";
|
||||
}
|
||||
rows.push({
|
||||
index,
|
||||
epoch: sampleEpoch(header, index),
|
||||
status,
|
||||
statusCode,
|
||||
rawCode,
|
||||
valueC,
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
...header,
|
||||
kind: "temperature",
|
||||
label: "Temperature",
|
||||
rows,
|
||||
warnings: [],
|
||||
};
|
||||
}
|
||||
|
||||
function decodeVoltage(bytes, header) {
|
||||
assertLength(bytes, 7 + header.count, "Voltage");
|
||||
|
||||
const rows = [];
|
||||
for (let index = 0; index < header.count; index += 1) {
|
||||
const rawCode = bytes[7 + index];
|
||||
let status;
|
||||
let millivolts = null;
|
||||
if (rawCode === 0) {
|
||||
status = "Missing";
|
||||
} else if (rawCode === 1) {
|
||||
status = "Below range";
|
||||
} else if (rawCode === 255) {
|
||||
status = "Above range";
|
||||
} else {
|
||||
status = "Value";
|
||||
millivolts = 1880 + (rawCode - 2) * 10;
|
||||
}
|
||||
rows.push({
|
||||
index,
|
||||
epoch: sampleEpoch(header, index),
|
||||
status,
|
||||
rawCode,
|
||||
millivolts,
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
...header,
|
||||
kind: "voltage",
|
||||
label: "Battery voltage",
|
||||
rows,
|
||||
warnings: [],
|
||||
};
|
||||
}
|
||||
|
||||
function decodeGps(bytes, header) {
|
||||
if (bytes.length < 17) {
|
||||
throw new TelemetryDecodeError("GPS payload is shorter than its 17-byte header.");
|
||||
}
|
||||
const dataBytes = Math.ceil((header.count * 28) / 8);
|
||||
assertLength(bytes, 17 + dataBytes, "GPS");
|
||||
|
||||
const originLatE7 = int32LE(bytes, 7);
|
||||
const originLonE7 = int32LE(bytes, 11);
|
||||
const originIndex = bytes[15];
|
||||
const flags = bytes[16];
|
||||
if (originIndex !== 0xff && originIndex >= header.count) {
|
||||
throw new TelemetryDecodeError(
|
||||
`GPS origin index ${originIndex} is outside the ${header.count}-sample page.`
|
||||
);
|
||||
}
|
||||
|
||||
const warnings = [];
|
||||
if (flags & 0x01) {
|
||||
warnings.push(
|
||||
"At least one GPS differential was clipped to the signed 14-bit range; positions after it may be less accurate."
|
||||
);
|
||||
}
|
||||
if (flags & 0xfe) {
|
||||
warnings.push(`GPS flags contain unknown bits: 0x${flags.toString(16).padStart(2, "0")}.`);
|
||||
}
|
||||
if (originIndex !== 0xff) {
|
||||
warnings.push(
|
||||
"A 0 m / 0 m GPS differential after the origin is ambiguous: it can mean an unchanged fix, movement under the 10 m resolution, or no fix."
|
||||
);
|
||||
}
|
||||
if (
|
||||
originIndex !== 0xff &&
|
||||
(originLatE7 < -900000000 ||
|
||||
originLatE7 > 900000000 ||
|
||||
originLonE7 < -1800000000 ||
|
||||
originLonE7 > 1800000000)
|
||||
) {
|
||||
warnings.push("The GPS origin is outside the valid latitude/longitude range.");
|
||||
}
|
||||
|
||||
let referenceLat = originLatE7 / 10000000;
|
||||
let referenceLon = originLonE7 / 10000000;
|
||||
let unexpectedPreOriginDelta = false;
|
||||
const rows = [];
|
||||
|
||||
for (let index = 0; index < header.count; index += 1) {
|
||||
const bitOffset = index * 28;
|
||||
const northUnits = signed14(readPackedBits(bytes, 17, bitOffset, 14));
|
||||
const eastUnits = signed14(readPackedBits(bytes, 17, bitOffset + 14, 14));
|
||||
const northMeters = northUnits * 10;
|
||||
const eastMeters = eastUnits * 10;
|
||||
let latitude = null;
|
||||
let longitude = null;
|
||||
let status;
|
||||
let ambiguous = false;
|
||||
let possiblyClipped = false;
|
||||
|
||||
if (originIndex === 0xff) {
|
||||
status = "No fix";
|
||||
if (northUnits !== 0 || eastUnits !== 0) unexpectedPreOriginDelta = true;
|
||||
} else if (index < originIndex) {
|
||||
status = "No fix";
|
||||
if (northUnits !== 0 || eastUnits !== 0) unexpectedPreOriginDelta = true;
|
||||
} else if (index === originIndex) {
|
||||
status = "Origin fix";
|
||||
latitude = referenceLat;
|
||||
longitude = referenceLon;
|
||||
if (northUnits !== 0 || eastUnits !== 0) {
|
||||
warnings.push("The GPS origin row contains a non-zero differential.");
|
||||
}
|
||||
} else if (northUnits === 0 && eastUnits === 0) {
|
||||
status = "Unchanged / no fix";
|
||||
ambiguous = true;
|
||||
} else {
|
||||
referenceLat += northMeters / METERS_PER_DEGREE;
|
||||
const longitudeScale =
|
||||
METERS_PER_DEGREE * Math.cos(referenceLat * DEGREES_TO_RADIANS);
|
||||
if (Math.abs(longitudeScale) > 0.001) {
|
||||
referenceLon += eastMeters / longitudeScale;
|
||||
}
|
||||
latitude = referenceLat;
|
||||
longitude = referenceLon;
|
||||
possiblyClipped =
|
||||
Boolean(flags & 0x01) &&
|
||||
[northUnits, eastUnits].some((value) => value === -8192 || value === 8191);
|
||||
status = possiblyClipped ? "Fix (clipped delta)" : "Fix";
|
||||
}
|
||||
|
||||
rows.push({
|
||||
index,
|
||||
epoch: sampleEpoch(header, index),
|
||||
status,
|
||||
latitude,
|
||||
longitude,
|
||||
northMeters,
|
||||
eastMeters,
|
||||
ambiguous,
|
||||
possiblyClipped,
|
||||
});
|
||||
}
|
||||
|
||||
if (unexpectedPreOriginDelta) {
|
||||
warnings.push("A no-fix row contains a non-zero GPS differential.");
|
||||
}
|
||||
|
||||
return {
|
||||
...header,
|
||||
kind: "gps",
|
||||
label: "GPS",
|
||||
originLatE7,
|
||||
originLonE7,
|
||||
originIndex,
|
||||
flags,
|
||||
rows,
|
||||
warnings,
|
||||
};
|
||||
}
|
||||
|
||||
function decodeTelemetry(input) {
|
||||
const encoded = extractBase64(input);
|
||||
const bytes = base64ToBytes(encoded);
|
||||
if (bytes.length === 0) {
|
||||
throw new TelemetryDecodeError("The Base64 payload decoded to zero bytes.");
|
||||
}
|
||||
|
||||
const header = decodeHeader(bytes);
|
||||
let decoded;
|
||||
if (header.typeCode === TYPE_TEMPERATURE) {
|
||||
decoded = decodeTemperature(bytes, header);
|
||||
} else if (header.typeCode === TYPE_VOLTAGE) {
|
||||
decoded = decodeVoltage(bytes, header);
|
||||
} else if (header.typeCode === TYPE_GPS) {
|
||||
decoded = decodeGps(bytes, header);
|
||||
} else {
|
||||
throw new TelemetryDecodeError(
|
||||
`Unsupported telemetry type 0x${header.typeCode.toString(16).padStart(2, "0")}; expected 0x11, 0x12, or 0x13.`
|
||||
);
|
||||
}
|
||||
decoded.encoded = encoded;
|
||||
return decoded;
|
||||
}
|
||||
|
||||
function timestampText(epoch, localTime) {
|
||||
const date = new Date(epoch * 1000);
|
||||
if (!Number.isFinite(date.getTime())) return "Invalid timestamp";
|
||||
if (!localTime) return date.toISOString().replace(".000Z", "Z");
|
||||
return new Intl.DateTimeFormat(undefined, {
|
||||
year: "numeric",
|
||||
month: "2-digit",
|
||||
day: "2-digit",
|
||||
hour: "2-digit",
|
||||
minute: "2-digit",
|
||||
second: "2-digit",
|
||||
timeZoneName: "short",
|
||||
}).format(date);
|
||||
}
|
||||
|
||||
function tableModel(decoded, localTime) {
|
||||
const localZone =
|
||||
(Intl.DateTimeFormat().resolvedOptions() || {}).timeZone || "browser local";
|
||||
const timestampHeader = localTime ? `Timestamp (${localZone})` : "Timestamp (UTC)";
|
||||
|
||||
if (decoded.kind === "temperature") {
|
||||
return {
|
||||
headers: ["#", timestampHeader, "Status", "Temperature", "Raw status/code"],
|
||||
rows: decoded.rows.map((row) => ({
|
||||
muted: row.status === "Missing",
|
||||
values: [
|
||||
row.index + 1,
|
||||
timestampText(row.epoch, localTime),
|
||||
row.status,
|
||||
row.status === "Below range"
|
||||
? "< -50 °C"
|
||||
: row.status === "Above range"
|
||||
? "> 77 °C"
|
||||
: row.valueC === null
|
||||
? "—"
|
||||
: `${row.valueC} °C`,
|
||||
`${row.statusCode} / ${row.rawCode}`,
|
||||
],
|
||||
})),
|
||||
};
|
||||
}
|
||||
|
||||
if (decoded.kind === "voltage") {
|
||||
return {
|
||||
headers: ["#", timestampHeader, "Status", "Battery voltage", "Raw code"],
|
||||
rows: decoded.rows.map((row) => ({
|
||||
muted: row.status === "Missing",
|
||||
values: [
|
||||
row.index + 1,
|
||||
timestampText(row.epoch, localTime),
|
||||
row.status,
|
||||
row.status === "Below range"
|
||||
? "< 1.88 V"
|
||||
: row.status === "Above range"
|
||||
? "> 4.40 V"
|
||||
: row.millivolts === null
|
||||
? "—"
|
||||
: `${(row.millivolts / 1000).toFixed(2)} V`,
|
||||
row.rawCode,
|
||||
],
|
||||
})),
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
headers: [
|
||||
"#",
|
||||
timestampHeader,
|
||||
"Status",
|
||||
"Latitude",
|
||||
"Longitude",
|
||||
"North Δ",
|
||||
"East Δ",
|
||||
],
|
||||
rows: decoded.rows.map((row) => ({
|
||||
muted: row.status === "No fix" || row.ambiguous,
|
||||
values: [
|
||||
row.index + 1,
|
||||
timestampText(row.epoch, localTime),
|
||||
row.status,
|
||||
row.latitude === null ? "—" : row.latitude.toFixed(7),
|
||||
row.longitude === null ? "—" : row.longitude.toFixed(7),
|
||||
`${row.northMeters} m`,
|
||||
`${row.eastMeters} m`,
|
||||
],
|
||||
})),
|
||||
};
|
||||
}
|
||||
|
||||
function summaryItems(decoded, localTime) {
|
||||
const lastEpoch = sampleEpoch(decoded, decoded.count - 1);
|
||||
const items = [
|
||||
["Payload", `${decoded.label} (0x${decoded.typeCode.toString(16)})`],
|
||||
["Samples", String(decoded.count)],
|
||||
["Interval", `${decoded.intervalMinutes} minutes`],
|
||||
["First sample", timestampText(decoded.firstEpoch, localTime)],
|
||||
["Last sample", timestampText(lastEpoch, localTime)],
|
||||
["Decoded size", `${decoded.byteLength} bytes`],
|
||||
];
|
||||
if (decoded.kind === "gps") {
|
||||
items.push([
|
||||
"Origin",
|
||||
decoded.originIndex === 0xff
|
||||
? "No fix on page"
|
||||
: `row ${decoded.originIndex + 1}: ${(decoded.originLatE7 / 1e7).toFixed(7)}, ${(decoded.originLonE7 / 1e7).toFixed(7)}`,
|
||||
]);
|
||||
items.push(["GPS flags", `0x${decoded.flags.toString(16).padStart(2, "0")}`]);
|
||||
}
|
||||
return items;
|
||||
}
|
||||
|
||||
function csvCell(value) {
|
||||
const text = String(value);
|
||||
return /[",\r\n]/.test(text) ? `"${text.replace(/"/g, '""')}"` : text;
|
||||
}
|
||||
|
||||
function modelToCsv(model) {
|
||||
return [model.headers, ...model.rows.map((row) => row.values)]
|
||||
.map((row) => row.map(csvCell).join(","))
|
||||
.join("\r\n");
|
||||
}
|
||||
|
||||
function appendCell(row, tagName, value) {
|
||||
const cell = document.createElement(tagName);
|
||||
cell.textContent = String(value);
|
||||
row.appendChild(cell);
|
||||
}
|
||||
|
||||
function initializeDecoder() {
|
||||
const root = document.querySelector("[data-telemetry-decoder]");
|
||||
if (!root) return;
|
||||
|
||||
const input = root.querySelector("[data-role='input']");
|
||||
const decodeButton = root.querySelector("[data-role='decode']");
|
||||
const clearButton = root.querySelector("[data-role='clear']");
|
||||
const downloadButton = root.querySelector("[data-role='download']");
|
||||
const localTime = root.querySelector("[data-role='local-time']");
|
||||
const errorBox = root.querySelector("[data-role='error']");
|
||||
const results = root.querySelector("[data-role='results']");
|
||||
const resultTitle = root.querySelector("[data-role='result-title']");
|
||||
const summary = root.querySelector("[data-role='summary']");
|
||||
const warningBox = root.querySelector("[data-role='warnings']");
|
||||
const warningList = root.querySelector("[data-role='warning-list']");
|
||||
const table = root.querySelector("[data-role='table']");
|
||||
let current = null;
|
||||
|
||||
root.querySelectorAll("[data-example-reply]").forEach((element) => {
|
||||
const example = EXAMPLES[element.getAttribute("data-example-reply")];
|
||||
if (example) element.textContent = example.reply;
|
||||
});
|
||||
|
||||
function hideError() {
|
||||
errorBox.hidden = true;
|
||||
errorBox.textContent = "";
|
||||
}
|
||||
|
||||
function showError(error) {
|
||||
current = null;
|
||||
results.hidden = true;
|
||||
errorBox.textContent = error instanceof Error ? error.message : String(error);
|
||||
errorBox.hidden = false;
|
||||
}
|
||||
|
||||
function render() {
|
||||
if (!current) return;
|
||||
const useLocalTime = localTime.checked;
|
||||
const model = tableModel(current, useLocalTime);
|
||||
resultTitle.textContent = `${current.label} telemetry`;
|
||||
|
||||
summary.replaceChildren();
|
||||
summaryItems(current, useLocalTime).forEach(([term, description]) => {
|
||||
const item = document.createElement("div");
|
||||
const dt = document.createElement("dt");
|
||||
const dd = document.createElement("dd");
|
||||
dt.textContent = term;
|
||||
dd.textContent = description;
|
||||
item.append(dt, dd);
|
||||
summary.appendChild(item);
|
||||
});
|
||||
|
||||
warningList.replaceChildren();
|
||||
current.warnings.forEach((warning) => {
|
||||
const item = document.createElement("li");
|
||||
item.textContent = warning;
|
||||
warningList.appendChild(item);
|
||||
});
|
||||
warningBox.hidden = current.warnings.length === 0;
|
||||
|
||||
table.replaceChildren();
|
||||
const head = document.createElement("thead");
|
||||
const headRow = document.createElement("tr");
|
||||
model.headers.forEach((header) => appendCell(headRow, "th", header));
|
||||
head.appendChild(headRow);
|
||||
table.appendChild(head);
|
||||
|
||||
const body = document.createElement("tbody");
|
||||
model.rows.forEach((modelRow) => {
|
||||
const row = document.createElement("tr");
|
||||
if (modelRow.muted) row.classList.add("telemetry-row-muted");
|
||||
modelRow.values.forEach((value) => appendCell(row, "td", value));
|
||||
body.appendChild(row);
|
||||
});
|
||||
table.appendChild(body);
|
||||
results.hidden = false;
|
||||
}
|
||||
|
||||
function decodeInput() {
|
||||
hideError();
|
||||
try {
|
||||
current = decodeTelemetry(input.value);
|
||||
render();
|
||||
} catch (error) {
|
||||
showError(error);
|
||||
}
|
||||
}
|
||||
|
||||
decodeButton.addEventListener("click", decodeInput);
|
||||
clearButton.addEventListener("click", () => {
|
||||
input.value = "";
|
||||
current = null;
|
||||
results.hidden = true;
|
||||
hideError();
|
||||
input.focus();
|
||||
});
|
||||
localTime.addEventListener("change", render);
|
||||
input.addEventListener("keydown", (event) => {
|
||||
if (event.key === "Enter" && (event.ctrlKey || event.metaKey)) {
|
||||
event.preventDefault();
|
||||
decodeInput();
|
||||
}
|
||||
});
|
||||
|
||||
root.querySelectorAll("[data-telemetry-example]").forEach((button) => {
|
||||
button.addEventListener("click", () => {
|
||||
const example = EXAMPLES[button.getAttribute("data-telemetry-example")];
|
||||
if (!example) return;
|
||||
input.value = example.reply;
|
||||
decodeInput();
|
||||
});
|
||||
});
|
||||
|
||||
downloadButton.addEventListener("click", () => {
|
||||
if (!current) return;
|
||||
const csv = modelToCsv(tableModel(current, localTime.checked));
|
||||
const blob = new Blob([csv], { type: "text/csv;charset=utf-8" });
|
||||
const url = URL.createObjectURL(blob);
|
||||
const link = document.createElement("a");
|
||||
link.href = url;
|
||||
link.download = `meshcore-telemetry-${current.kind}.csv`;
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
link.remove();
|
||||
URL.revokeObjectURL(url);
|
||||
});
|
||||
|
||||
const requestedExample = new URLSearchParams(global.location.search).get("example");
|
||||
if (requestedExample && EXAMPLES[requestedExample]) {
|
||||
input.value = EXAMPLES[requestedExample].reply;
|
||||
decodeInput();
|
||||
}
|
||||
}
|
||||
|
||||
const api = Object.freeze({
|
||||
EXAMPLES,
|
||||
TelemetryDecodeError,
|
||||
decodeTelemetry,
|
||||
extractBase64,
|
||||
tableModel,
|
||||
modelToCsv,
|
||||
});
|
||||
|
||||
global.MeshCoreTelemetryDecoder = api;
|
||||
if (typeof module === "object" && module.exports) module.exports = api;
|
||||
|
||||
if (typeof document !== "undefined") {
|
||||
if (document.readyState === "loading") {
|
||||
document.addEventListener("DOMContentLoaded", initializeDecoder, { once: true });
|
||||
} else {
|
||||
initializeDecoder();
|
||||
}
|
||||
}
|
||||
})(typeof globalThis !== "undefined" ? globalThis : this);
|
||||
@@ -0,0 +1,243 @@
|
||||
.telemetry-tool {
|
||||
--telemetry-border: color-mix(in srgb, var(--md-default-fg-color) 18%, transparent);
|
||||
--telemetry-soft-bg: color-mix(in srgb, var(--md-default-fg-color) 5%, transparent);
|
||||
--telemetry-accent-bg: color-mix(in srgb, var(--md-primary-fg-color) 12%, transparent);
|
||||
margin: 1.5rem 0;
|
||||
padding: 1rem;
|
||||
border: 1px solid var(--telemetry-border);
|
||||
border-radius: 0.65rem;
|
||||
background: var(--md-default-bg-color);
|
||||
box-shadow: 0 0.15rem 0.6rem color-mix(in srgb, #000 10%, transparent);
|
||||
}
|
||||
|
||||
.telemetry-tool [hidden] {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.telemetry-tool label {
|
||||
display: block;
|
||||
margin-bottom: 0.35rem;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.telemetry-tool textarea {
|
||||
display: block;
|
||||
width: 100%;
|
||||
min-height: 8rem;
|
||||
box-sizing: border-box;
|
||||
resize: vertical;
|
||||
padding: 0.8rem;
|
||||
border: 1px solid var(--telemetry-border);
|
||||
border-radius: 0.4rem;
|
||||
color: var(--md-code-fg-color);
|
||||
background: var(--md-code-bg-color);
|
||||
font: 0.82rem/1.55 var(--md-code-font-family);
|
||||
overflow-wrap: anywhere;
|
||||
}
|
||||
|
||||
.telemetry-tool textarea:focus-visible,
|
||||
.telemetry-tool button:focus-visible,
|
||||
.telemetry-tool input:focus-visible {
|
||||
outline: 0.15rem solid var(--md-accent-fg-color);
|
||||
outline-offset: 0.12rem;
|
||||
}
|
||||
|
||||
.telemetry-tool-help {
|
||||
margin: 0.4rem 0 0;
|
||||
color: color-mix(in srgb, var(--md-default-fg-color) 70%, transparent);
|
||||
font-size: 0.82rem;
|
||||
}
|
||||
|
||||
.telemetry-actions,
|
||||
.telemetry-examples {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.55rem;
|
||||
align-items: center;
|
||||
margin-top: 0.8rem;
|
||||
}
|
||||
|
||||
.telemetry-tool button {
|
||||
appearance: none;
|
||||
min-height: 2.25rem;
|
||||
padding: 0.42rem 0.75rem;
|
||||
border: 1px solid var(--telemetry-border);
|
||||
border-radius: 0.35rem;
|
||||
color: var(--md-default-fg-color);
|
||||
background: var(--telemetry-soft-bg);
|
||||
font: inherit;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.telemetry-tool button:hover {
|
||||
border-color: var(--md-primary-fg-color);
|
||||
background: var(--telemetry-accent-bg);
|
||||
}
|
||||
|
||||
.telemetry-tool .telemetry-primary-action {
|
||||
border-color: var(--md-primary-fg-color);
|
||||
color: var(--md-primary-bg-color);
|
||||
background: var(--md-primary-fg-color);
|
||||
}
|
||||
|
||||
.telemetry-tool .telemetry-primary-action:hover {
|
||||
filter: brightness(1.12);
|
||||
background: var(--md-primary-fg-color);
|
||||
}
|
||||
|
||||
.telemetry-local-time {
|
||||
display: inline-flex !important;
|
||||
gap: 0.4rem;
|
||||
align-items: center;
|
||||
margin: 0 0 0 auto !important;
|
||||
font-size: 0.82rem;
|
||||
font-weight: 500 !important;
|
||||
}
|
||||
|
||||
.telemetry-local-time input {
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.telemetry-error,
|
||||
.telemetry-warnings {
|
||||
margin-top: 1rem;
|
||||
padding: 0.75rem 0.9rem;
|
||||
border-left: 0.25rem solid;
|
||||
border-radius: 0.25rem;
|
||||
}
|
||||
|
||||
.telemetry-error {
|
||||
border-color: #d32f2f;
|
||||
color: color-mix(in srgb, #d32f2f 82%, var(--md-default-fg-color));
|
||||
background: color-mix(in srgb, #d32f2f 10%, transparent);
|
||||
}
|
||||
|
||||
.telemetry-warnings {
|
||||
border-color: #ed9b00;
|
||||
background: color-mix(in srgb, #ed9b00 11%, transparent);
|
||||
}
|
||||
|
||||
.telemetry-warnings strong {
|
||||
display: block;
|
||||
margin-bottom: 0.25rem;
|
||||
}
|
||||
|
||||
.telemetry-warnings ul {
|
||||
margin: 0.25rem 0 0 1rem;
|
||||
}
|
||||
|
||||
.telemetry-results {
|
||||
margin-top: 1.35rem;
|
||||
padding-top: 0.25rem;
|
||||
border-top: 1px solid var(--telemetry-border);
|
||||
}
|
||||
|
||||
.telemetry-results-header {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.75rem;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.telemetry-results-header h2 {
|
||||
margin: 0.8rem 0 0 !important;
|
||||
}
|
||||
|
||||
.telemetry-summary {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
|
||||
gap: 0.65rem;
|
||||
margin: 1rem 0;
|
||||
}
|
||||
|
||||
.telemetry-summary > div {
|
||||
min-width: 0;
|
||||
padding: 0.65rem 0.75rem;
|
||||
border: 1px solid var(--telemetry-border);
|
||||
border-radius: 0.4rem;
|
||||
background: var(--telemetry-soft-bg);
|
||||
}
|
||||
|
||||
.telemetry-summary dt {
|
||||
color: color-mix(in srgb, var(--md-default-fg-color) 70%, transparent);
|
||||
font-size: 0.72rem;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.025em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.telemetry-summary dd {
|
||||
margin: 0.2rem 0 0;
|
||||
overflow-wrap: anywhere;
|
||||
font-size: 0.88rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.telemetry-table-wrap {
|
||||
max-height: 35rem;
|
||||
overflow: auto;
|
||||
border: 1px solid var(--telemetry-border);
|
||||
border-radius: 0.4rem;
|
||||
}
|
||||
|
||||
.telemetry-tool .telemetry-table {
|
||||
display: table;
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
border-collapse: collapse;
|
||||
white-space: nowrap;
|
||||
font-variant-numeric: tabular-nums;
|
||||
}
|
||||
|
||||
.telemetry-tool .telemetry-table th,
|
||||
.telemetry-tool .telemetry-table td {
|
||||
padding: 0.5rem 0.65rem;
|
||||
border-bottom: 1px solid var(--telemetry-border);
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.telemetry-tool .telemetry-table th {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 1;
|
||||
color: var(--md-default-fg-color);
|
||||
background: var(--md-default-bg-color);
|
||||
}
|
||||
|
||||
.telemetry-tool .telemetry-table tbody tr:last-child td {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
.telemetry-tool .telemetry-table tbody tr:nth-child(even) {
|
||||
background: var(--telemetry-soft-bg);
|
||||
}
|
||||
|
||||
.telemetry-tool .telemetry-row-muted td {
|
||||
color: color-mix(in srgb, var(--md-default-fg-color) 55%, transparent);
|
||||
}
|
||||
|
||||
.telemetry-example-replies code {
|
||||
display: block;
|
||||
overflow-wrap: anywhere;
|
||||
word-break: break-all;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
@media (max-width: 44rem) {
|
||||
.telemetry-tool {
|
||||
padding: 0.75rem;
|
||||
}
|
||||
|
||||
.telemetry-local-time {
|
||||
width: 100%;
|
||||
margin-left: 0 !important;
|
||||
}
|
||||
|
||||
.telemetry-tool button {
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
}
|
||||
+2
-2
File diff suppressed because one or more lines are too long
+2
-2
File diff suppressed because one or more lines are too long
-1
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+3112
-48
File diff suppressed because it is too large
Load Diff
+341
-40
@@ -10,7 +10,7 @@
|
||||
|
||||
|
||||
|
||||
<link rel="canonical" href="https://meshcore-dev.github.io/meshcore/companion_protocol/">
|
||||
<link rel="canonical" href="https://mikecarper.github.io/MeshCore/companion_protocol/">
|
||||
|
||||
|
||||
<link rel="prev" href="../cli_commands/">
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
|
||||
<link rel="icon" href="../assets/images/favicon.png">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.6">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
|
||||
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.484c7ddc.min.css">
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.ec1eaa64.min.css">
|
||||
|
||||
|
||||
|
||||
@@ -52,6 +52,8 @@
|
||||
|
||||
<link rel="stylesheet" href="../_stylesheets/extra.css">
|
||||
|
||||
<link rel="stylesheet" href="../_stylesheets/telemetry_decoder.css">
|
||||
|
||||
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||||
|
||||
|
||||
@@ -161,13 +163,13 @@
|
||||
|
||||
|
||||
<div class="md-header__source">
|
||||
<a href="https://github.com/meshcore-dev/meshcore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
meshcore-dev/meshcore
|
||||
mikecarper/MeshCore
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -206,13 +208,13 @@
|
||||
</label>
|
||||
|
||||
<div class="md-nav__source">
|
||||
<a href="https://github.com/meshcore-dev/meshcore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
meshcore-dev/meshcore
|
||||
mikecarper/MeshCore
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -252,6 +254,87 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../WiFi/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
WiFi and MQTT by Firmware Type
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_build_matrix/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
CLI Availability by Firmware Build
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_command_availability/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
CLI Command Availability Matrix
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_commands/" class="md-nav__link">
|
||||
|
||||
@@ -972,6 +1055,87 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../flood_filtering/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Repeater Flood Filtering and Moderation
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../gps_tracking/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
GPS Tracking
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../halo_keymind_settings/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Halo and Keymind Branch Settings
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../kiss_modem_protocol/" class="md-nav__link">
|
||||
|
||||
@@ -1053,6 +1217,114 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_easy/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Easy firmware updates over LoRa
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_meshtower_v2_sdcard/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
MeshTower V2 microSD LoRa OTA
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_protocol/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
MeshCore OTA - .mota container & LoRa protocol
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_user_guide/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Updating your node over the air (OTA) - user guide
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../packet_format/" class="md-nav__link">
|
||||
|
||||
@@ -1161,6 +1433,33 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../telemetry_decoder/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Telemetry history decoder
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../terminal_chat_cli/" class="md-nav__link">
|
||||
|
||||
@@ -1790,7 +2089,7 @@
|
||||
|
||||
|
||||
|
||||
<a href="https://github.com/meshcore-dev/meshcore/edit/main/docs/companion_protocol.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
|
||||
<a href="https://github.com/mikecarper/MeshCore/edit/keymindCascade/docs/companion_protocol.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg>
|
||||
</a>
|
||||
@@ -1841,8 +2140,8 @@
|
||||
<p>MeshCore Companion devices expose a BLE service with the following UUIDs:</p>
|
||||
<ul>
|
||||
<li><strong>Service UUID</strong>: <code>6E400001-B5A3-F393-E0A9-E50E24DCCA9E</code></li>
|
||||
<li><strong>RX Characteristic</strong> (App → Firmware): <code>6E400002-B5A3-F393-E0A9-E50E24DCCA9E</code></li>
|
||||
<li><strong>TX Characteristic</strong> (Firmware → App): <code>6E400003-B5A3-F393-E0A9-E50E24DCCA9E</code></li>
|
||||
<li><strong>RX Characteristic</strong> (App -> Firmware): <code>6E400002-B5A3-F393-E0A9-E50E24DCCA9E</code></li>
|
||||
<li><strong>TX Characteristic</strong> (Firmware -> App): <code>6E400003-B5A3-F393-E0A9-E50E24DCCA9E</code></li>
|
||||
</ul>
|
||||
<h3 id="connection-steps">Connection Steps</h3>
|
||||
<ol>
|
||||
@@ -1937,7 +2236,7 @@
|
||||
<li>Send one command at a time</li>
|
||||
<li>Wait for a response before sending another command</li>
|
||||
<li>Use a timeout (typically 5 seconds)</li>
|
||||
<li>Match response to command by type (e.g: <code>CMD_GET_CHANNEL</code> → <code>RESP_CODE_CHANNEL_INFO</code>)</li>
|
||||
<li>Match response to command by type (e.g: <code>CMD_GET_CHANNEL</code> -> <code>RESP_CODE_CHANNEL_INFO</code>)</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ol>
|
||||
@@ -2045,7 +2344,7 @@ Bytes 7+: Message Text (UTF-8, variable length)
|
||||
<p><strong>Response</strong>: <code>PACKET_MSG_SENT</code> (0x06) on success</p>
|
||||
<hr />
|
||||
<h3 id="6-send-channel-data-datagram">6. Send Channel Data Datagram</h3>
|
||||
<p><strong>Purpose</strong>: Send a binary datagram to a channel. Unlike channel text messages, datagrams carry no built-in sender identity and no timestamp — applications needing either must encode them inside the binary payload.</p>
|
||||
<p><strong>Purpose</strong>: Send a binary datagram to a channel. Unlike channel text messages, datagrams carry no built-in sender identity and no timestamp - applications needing either must encode them inside the binary payload.</p>
|
||||
<p><strong>Command Format</strong>:</p>
|
||||
<pre><code>Byte 0: 0x3E
|
||||
Byte 1: Channel Index (0-7)
|
||||
@@ -2060,17 +2359,17 @@ Remaining bytes: Binary payload (variable length)
|
||||
<p><strong>Data Type / Transport Mapping</strong>:
|
||||
- <code>0x0000</code> (<code>DATA_TYPE_RESERVED</code>) is invalid and rejected with <code>PACKET_ERROR</code>.
|
||||
- <code>0xFFFF</code> (<code>DATA_TYPE_DEV</code>) is the developer namespace for experimenting and developing apps.
|
||||
- Values <code>0x0001</code>–<code>0xFFFE</code> are available for registered application/community namespaces. See the <a href="#registered-data_type-values">Registered data_type values</a> table below.</p>
|
||||
- Values <code>0x0001</code>-<code>0xFFFE</code> are available for registered application/community namespaces. See the <a href="#registered-data_type-values">Registered data_type values</a> table below.</p>
|
||||
<p><strong>Limits</strong>:
|
||||
- Maximum payload length is <code>MAX_CHANNEL_DATA_LENGTH = MAX_FRAME_SIZE - 9 = 163</code> bytes.
|
||||
- Larger payloads are rejected with <code>PACKET_ERROR</code> (<code>ERR_CODE_ILLEGAL_ARG</code>).</p>
|
||||
<p><strong>Response</strong>: <code>PACKET_OK</code> (0x00) on success, or <code>PACKET_ERROR</code> (0x01) with one of:
|
||||
- <code>ERR_CODE_NOT_FOUND</code> (2) — unknown <code>channel_idx</code>
|
||||
- <code>ERR_CODE_ILLEGAL_ARG</code> (6) — invalid <code>path_len</code>, reserved <code>data_type</code> (<code>0x0000</code>), or payload larger than <code>MAX_CHANNEL_DATA_LENGTH</code>
|
||||
- <code>ERR_CODE_TABLE_FULL</code> (3) — outbound send queue is full; retry later</p>
|
||||
- <code>ERR_CODE_NOT_FOUND</code> (2) - unknown <code>channel_idx</code>
|
||||
- <code>ERR_CODE_ILLEGAL_ARG</code> (6) - invalid <code>path_len</code>, reserved <code>data_type</code> (<code>0x0000</code>), or payload larger than <code>MAX_CHANNEL_DATA_LENGTH</code>
|
||||
- <code>ERR_CODE_TABLE_FULL</code> (3) - outbound send queue is full; retry later</p>
|
||||
<p><strong>Inbound datagrams</strong> are delivered to the host via <code>RESP_CODE_CHANNEL_DATA_RECV</code> (0x1B); see <a href="#receive-channel-data-datagram">Receive Channel Data Datagram</a>.</p>
|
||||
<h4 id="registered-data_type-values">Registered <code>data_type</code> values</h4>
|
||||
<p><code>data_type</code> is an <strong>application identifier</strong>, not a payload-format identifier. Each registered value identifies an application that owns its own internal payload schemas. The firmware does not inspect payload contents — <code>data_type</code> is transported opaquely.</p>
|
||||
<p><code>data_type</code> is an <strong>application identifier</strong>, not a payload-format identifier. Each registered value identifies an application that owns its own internal payload schemas. The firmware does not inspect payload contents - <code>data_type</code> is transported opaquely.</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -2086,18 +2385,18 @@ Remaining bytes: Binary payload (variable length)
|
||||
<td>Reserved; invalid on send</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0x0001 – 0x00FF</td>
|
||||
<td>—</td>
|
||||
<td>0x0001 - 0x00FF</td>
|
||||
<td>-</td>
|
||||
<td>Reserved for internal use</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0x0100 – 0xFEFF</td>
|
||||
<td>—</td>
|
||||
<td>0x0100 - 0xFEFF</td>
|
||||
<td>-</td>
|
||||
<td>Registered application namespaces (see <a href="../number_allocations/">number_allocations.md</a>)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0xFF00 – 0xFFFE</td>
|
||||
<td>—</td>
|
||||
<td>0xFF00 - 0xFFFE</td>
|
||||
<td>-</td>
|
||||
<td>Testing/development; no registration required</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -2113,7 +2412,7 @@ Remaining bytes: Binary payload (variable length)
|
||||
<p>Inbound group datagrams (radio-level <code>PAYLOAD_TYPE_GRP_DATA</code>, 0x06) are forwarded to the host as <code>RESP_CODE_CHANNEL_DATA_RECV</code> notifications.</p>
|
||||
<p><strong>Frame Format</strong> (<code>RESP_CODE_CHANNEL_DATA_RECV</code>, 0x1B):</p>
|
||||
<pre><code>Byte 0: 0x1B (packet type)
|
||||
Byte 1: SNR (signed int8, scaled ×4 — divide by 4.0 to recover dB)
|
||||
Byte 1: SNR (signed int8, scaled x4 - divide by 4.0 to recover dB)
|
||||
Bytes 2-3: Reserved (clients MUST ignore)
|
||||
Byte 4: Channel Index (0-7)
|
||||
Byte 5: Path Length (actual path length when flooded, otherwise 0xFF for direct)
|
||||
@@ -2121,21 +2420,21 @@ Bytes 6-7: Data Type (uint16 little-endian)
|
||||
Byte 8: Data Length
|
||||
Bytes 9 .. 8+data_len: Payload
|
||||
</code></pre>
|
||||
<p><strong>Path bytes are not forwarded</strong>: Only <code>path_len</code> is reported in the receive frame — the path itself is not copied to the host. There are no path bytes between byte 5 and the data_type field at bytes 6–7, regardless of <code>path_len</code>.</p>
|
||||
<p><strong>Path bytes are not forwarded</strong>: Only <code>path_len</code> is reported in the receive frame - the path itself is not copied to the host. There are no path bytes between byte 5 and the data_type field at bytes 6-7, regardless of <code>path_len</code>.</p>
|
||||
<p><strong>Path Length semantics differ between send and receive</strong>:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Direction</th>
|
||||
<th><code>path_len = 0xFF</code></th>
|
||||
<th><code>path_len ≠ 0xFF</code></th>
|
||||
<th><code>path_len != 0xFF</code></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Send</td>
|
||||
<td>Flood the network</td>
|
||||
<td>Direct route; the encoded path follows (low 6 bits = hash count, top 2 bits + 1 = hash size; on-wire byte count = <code>hash_count × hash_size</code>)</td>
|
||||
<td>Direct route; the encoded path follows (low 6 bits = hash count, top 2 bits + 1 = hash size; on-wire byte count = <code>hash_count x hash_size</code>)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Receive</td>
|
||||
@@ -2144,7 +2443,7 @@ Bytes 9 .. 8+data_len: Payload
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>In other words, the meaning of <code>0xFF</code> is inverted between the two directions, and on receive the field carries metadata only — never a routable path. <code>path_len</code> is an encoded byte (see <code>Packet::isValidPathLen</code> / <code>Packet::writePath</code> in <code>src/Packet.cpp</code>), not a raw byte count.</p>
|
||||
<p>In other words, the meaning of <code>0xFF</code> is inverted between the two directions, and on receive the field carries metadata only - never a routable path. <code>path_len</code> is an encoded byte (see <code>Packet::isValidPathLen</code> / <code>Packet::writePath</code> in <code>src/Packet.cpp</code>), not a raw byte count.</p>
|
||||
<p><strong>Note</strong>: The device may also emit <code>PACKET_MESSAGES_WAITING</code> (0x83) to notify the host that datagrams are queued; poll with <code>CMD_SYNC_NEXT_MESSAGE</code> (0x0A) to retrieve them.</p>
|
||||
<p><strong>Parsing Pseudocode</strong>:</p>
|
||||
<pre><code class="language-python">def parse_channel_data_recv(data):
|
||||
@@ -2369,8 +2668,8 @@ Bytes 11+: Message Text (UTF-8)
|
||||
<h3 id="terminology">Terminology</h3>
|
||||
<p>This document uses a spec-level naming convention (<code>PACKET_*</code>) for bytes the firmware sends back to the host. In the firmware source these same values are split across two <code>#define</code> families by purpose:</p>
|
||||
<ul>
|
||||
<li><code>RESP_CODE_*</code> — direct replies to a command (e.g. <code>RESP_CODE_CHANNEL_DATA_RECV</code> = <code>PACKET_CHANNEL_DATA_RECV</code> = 0x1B).</li>
|
||||
<li><code>PUSH_CODE_*</code> — asynchronous notifications not tied to a specific command (e.g. <code>PUSH_CODE_MSG_WAITING</code> = <code>PACKET_MESSAGES_WAITING</code> = 0x83).</li>
|
||||
<li><code>RESP_CODE_*</code> - direct replies to a command (e.g. <code>RESP_CODE_CHANNEL_DATA_RECV</code> = <code>PACKET_CHANNEL_DATA_RECV</code> = 0x1B).</li>
|
||||
<li><code>PUSH_CODE_*</code> - asynchronous notifications not tied to a specific command (e.g. <code>PUSH_CODE_MSG_WAITING</code> = <code>PACKET_MESSAGES_WAITING</code> = 0x83).</li>
|
||||
</ul>
|
||||
<p>Byte values are authoritative; names are aliases. When reading firmware source, <code>RESP_CODE_X</code> / <code>PUSH_CODE_X</code> correspond to this doc's <code>PACKET_X</code> of the same numeric value.</p>
|
||||
<h3 id="packet-types">Packet Types</h3>
|
||||
@@ -2654,7 +2953,7 @@ Bytes 1-6: ACK Code (6 bytes, hex)
|
||||
<tr>
|
||||
<td>3</td>
|
||||
<td><code>ERR_CODE_TABLE_FULL</code></td>
|
||||
<td>Internal queue or table is full — retry later</td>
|
||||
<td>Internal queue or table is full - retry later</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>4</td>
|
||||
@@ -2706,14 +3005,14 @@ Bytes 1-6: ACK Code (6 bytes, hex)
|
||||
<li>
|
||||
<p>Match responses to commands by expected packet type:</p>
|
||||
<ul>
|
||||
<li><code>APP_START</code> → <code>PACKET_SELF_INFO</code></li>
|
||||
<li><code>DEVICE_QUERY</code> → <code>PACKET_DEVICE_INFO</code></li>
|
||||
<li><code>GET_CHANNEL</code> → <code>PACKET_CHANNEL_INFO</code></li>
|
||||
<li><code>SET_CHANNEL</code> → <code>PACKET_OK</code> or <code>PACKET_ERROR</code></li>
|
||||
<li><code>SEND_CHANNEL_MESSAGE</code> → <code>PACKET_MSG_SENT</code></li>
|
||||
<li><code>GET_MESSAGE</code> → <code>PACKET_CHANNEL_MSG_RECV</code>, <code>PACKET_CONTACT_MSG_RECV</code>, <code>PACKET_CHANNEL_DATA_RECV</code>, or <code>PACKET_NO_MORE_MSGS</code></li>
|
||||
<li><code>SEND_CHANNEL_DATA</code> → <code>PACKET_OK</code> or <code>PACKET_ERROR</code></li>
|
||||
<li><code>GET_BATTERY</code> → <code>PACKET_BATTERY</code></li>
|
||||
<li><code>APP_START</code> -> <code>PACKET_SELF_INFO</code></li>
|
||||
<li><code>DEVICE_QUERY</code> -> <code>PACKET_DEVICE_INFO</code></li>
|
||||
<li><code>GET_CHANNEL</code> -> <code>PACKET_CHANNEL_INFO</code></li>
|
||||
<li><code>SET_CHANNEL</code> -> <code>PACKET_OK</code> or <code>PACKET_ERROR</code></li>
|
||||
<li><code>SEND_CHANNEL_MESSAGE</code> -> <code>PACKET_MSG_SENT</code></li>
|
||||
<li><code>GET_MESSAGE</code> -> <code>PACKET_CHANNEL_MSG_RECV</code>, <code>PACKET_CONTACT_MSG_RECV</code>, <code>PACKET_CHANNEL_DATA_RECV</code>, or <code>PACKET_NO_MORE_MSGS</code></li>
|
||||
<li><code>SEND_CHANNEL_DATA</code> -> <code>PACKET_OK</code> or <code>PACKET_ERROR</code></li>
|
||||
<li><code>GET_BATTERY</code> -> <code>PACKET_BATTERY</code></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
@@ -2901,7 +3200,9 @@ response = wait_for_response(PACKET_MSG_SENT)
|
||||
<script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["content.action.edit", "content.code.copy", "search.highlight", "search.suggest"], "search": "../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
||||
|
||||
|
||||
<script src="../assets/javascripts/bundle.79ae519e.min.js"></script>
|
||||
<script src="../assets/javascripts/bundle.d7400e89.min.js"></script>
|
||||
|
||||
<script src="../_javascript/telemetry_decoder.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
+310
-9
@@ -10,7 +10,7 @@
|
||||
|
||||
|
||||
|
||||
<link rel="canonical" href="https://meshcore-dev.github.io/meshcore/docs/">
|
||||
<link rel="canonical" href="https://mikecarper.github.io/MeshCore/docs/">
|
||||
|
||||
|
||||
<link rel="prev" href="../companion_protocol/">
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
|
||||
<link rel="icon" href="../assets/images/favicon.png">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.6">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
|
||||
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.484c7ddc.min.css">
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.ec1eaa64.min.css">
|
||||
|
||||
|
||||
|
||||
@@ -52,6 +52,8 @@
|
||||
|
||||
<link rel="stylesheet" href="../_stylesheets/extra.css">
|
||||
|
||||
<link rel="stylesheet" href="../_stylesheets/telemetry_decoder.css">
|
||||
|
||||
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||||
|
||||
|
||||
@@ -161,13 +163,13 @@
|
||||
|
||||
|
||||
<div class="md-header__source">
|
||||
<a href="https://github.com/meshcore-dev/meshcore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
meshcore-dev/meshcore
|
||||
mikecarper/MeshCore
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -206,13 +208,13 @@
|
||||
</label>
|
||||
|
||||
<div class="md-nav__source">
|
||||
<a href="https://github.com/meshcore-dev/meshcore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
meshcore-dev/meshcore
|
||||
mikecarper/MeshCore
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -252,6 +254,87 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../WiFi/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
WiFi and MQTT by Firmware Type
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_build_matrix/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
CLI Availability by Firmware Build
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_command_availability/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
CLI Command Availability Matrix
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_commands/" class="md-nav__link">
|
||||
|
||||
@@ -418,6 +501,87 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../flood_filtering/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Repeater Flood Filtering and Moderation
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../gps_tracking/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
GPS Tracking
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../halo_keymind_settings/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Halo and Keymind Branch Settings
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../kiss_modem_protocol/" class="md-nav__link">
|
||||
|
||||
@@ -499,6 +663,114 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_easy/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Easy firmware updates over LoRa
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_meshtower_v2_sdcard/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
MeshTower V2 microSD LoRa OTA
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_protocol/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
MeshCore OTA - .mota container & LoRa protocol
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_user_guide/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Updating your node over the air (OTA) - user guide
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../packet_format/" class="md-nav__link">
|
||||
|
||||
@@ -607,6 +879,33 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../telemetry_decoder/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Telemetry history decoder
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../terminal_chat_cli/" class="md-nav__link">
|
||||
|
||||
@@ -682,7 +981,7 @@
|
||||
|
||||
|
||||
|
||||
<a href="https://github.com/meshcore-dev/meshcore/edit/main/docs/docs.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
|
||||
<a href="https://github.com/mikecarper/MeshCore/edit/keymindCascade/docs/docs.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg>
|
||||
</a>
|
||||
@@ -752,7 +1051,9 @@ pip install mkdocs-material
|
||||
<script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["content.action.edit", "content.code.copy", "search.highlight", "search.suggest"], "search": "../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
||||
|
||||
|
||||
<script src="../assets/javascripts/bundle.79ae519e.min.js"></script>
|
||||
<script src="../assets/javascripts/bundle.d7400e89.min.js"></script>
|
||||
|
||||
<script src="../_javascript/telemetry_decoder.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
+391
-26
@@ -10,20 +10,20 @@
|
||||
|
||||
|
||||
|
||||
<link rel="canonical" href="https://meshcore-dev.github.io/meshcore/faq/">
|
||||
<link rel="canonical" href="https://mikecarper.github.io/MeshCore/faq/">
|
||||
|
||||
|
||||
<link rel="prev" href="../docs/">
|
||||
|
||||
|
||||
<link rel="next" href="../kiss_modem_protocol/">
|
||||
<link rel="next" href="../flood_filtering/">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="icon" href="../assets/images/favicon.png">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.6">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
|
||||
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.484c7ddc.min.css">
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.ec1eaa64.min.css">
|
||||
|
||||
|
||||
|
||||
@@ -52,6 +52,8 @@
|
||||
|
||||
<link rel="stylesheet" href="../_stylesheets/extra.css">
|
||||
|
||||
<link rel="stylesheet" href="../_stylesheets/telemetry_decoder.css">
|
||||
|
||||
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||||
|
||||
|
||||
@@ -161,13 +163,13 @@
|
||||
|
||||
|
||||
<div class="md-header__source">
|
||||
<a href="https://github.com/meshcore-dev/meshcore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
meshcore-dev/meshcore
|
||||
mikecarper/MeshCore
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -206,13 +208,13 @@
|
||||
</label>
|
||||
|
||||
<div class="md-nav__source">
|
||||
<a href="https://github.com/meshcore-dev/meshcore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
meshcore-dev/meshcore
|
||||
mikecarper/MeshCore
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -252,6 +254,87 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../WiFi/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
WiFi and MQTT by Firmware Type
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_build_matrix/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
CLI Availability by Firmware Build
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_command_availability/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
CLI Command Availability Matrix
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_commands/" class="md-nav__link">
|
||||
|
||||
@@ -1320,6 +1403,17 @@
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#78-q-how-do-i-use-ethernet-with-a-rak4631" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
7.8. Q: How do I use Ethernet with a RAK4631?
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
@@ -1341,6 +1435,87 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../flood_filtering/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Repeater Flood Filtering and Moderation
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../gps_tracking/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
GPS Tracking
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../halo_keymind_settings/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Halo and Keymind Branch Settings
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../kiss_modem_protocol/" class="md-nav__link">
|
||||
|
||||
@@ -1422,6 +1597,114 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_easy/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Easy firmware updates over LoRa
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_meshtower_v2_sdcard/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
MeshTower V2 microSD LoRa OTA
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_protocol/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
MeshCore OTA - .mota container & LoRa protocol
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_user_guide/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Updating your node over the air (OTA) - user guide
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../packet_format/" class="md-nav__link">
|
||||
|
||||
@@ -1530,6 +1813,33 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../telemetry_decoder/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Telemetry history decoder
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../terminal_chat_cli/" class="md-nav__link">
|
||||
|
||||
@@ -2504,6 +2814,17 @@
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#78-q-how-do-i-use-ethernet-with-a-rak4631" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
7.8. Q: How do I use Ethernet with a RAK4631?
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
@@ -2528,7 +2849,7 @@
|
||||
|
||||
|
||||
|
||||
<a href="https://github.com/meshcore-dev/meshcore/edit/main/docs/faq.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
|
||||
<a href="https://github.com/mikecarper/MeshCore/edit/keymindCascade/docs/faq.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg>
|
||||
</a>
|
||||
@@ -2636,6 +2957,7 @@
|
||||
<li><a href="#75-q-what-is-the-format-of-a-contact-or-channel-qr-code">7.5. Q: What is the format of a contact or channel QR code?</a></li>
|
||||
<li><a href="#76-q-how-do-i-connect-to-the-companion-via-wi-fi-eg-using-a-heltec-v3">7.6. Q: How do I connect to the companion via Wi-Fi, e.g. using a Heltec V3?</a></li>
|
||||
<li><a href="#77-q-i-have-a-station-g2-or-a-heltec-v4-or-an-ikoka-stick-or-a-radio-with-an-ebyte-e22-900m30s-or-an-ebyte-e22-900m33s-module-what-should-their-transmit-power-be-set-to">7.7. Q: I have a Station G2, or a Heltec V4, or an Ikoka Stick, or a radio with an EByte E22-900M30S or an EByte E22-900M33S module, what should their transmit power be set to?</a></li>
|
||||
<li><a href="#78-q-how-do-i-use-ethernet-with-a-rak4631">7.8. Q: How do I use Ethernet with a RAK4631?</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -2789,15 +3111,15 @@ The original MeshCore protocol design uses the first byte of a repeater's public
|
||||
<h3 id="394-q-what-does-the-cli-command-pathhashmode-do-on-a-repeater">3.9.4. Q: <strong>What does the CLI command <code>path.hash.mode</code> do on a repeater?</strong></h3>
|
||||
<p>This CLI command <code>path.hash.mode</code> <em>only</em> controls the path hash size used in a repeater's own advert broadcasts. It does <strong>NOT</strong> affect which packets the repeater forwards. A repeater with firmware 1.14+ always forward 1-, 2-, and 3-byte packets regardless of this setting.</p>
|
||||
<p>Usage: <code>set path.hash.mode {0|1|2}</code>:</p>
|
||||
<pre><code>┌────────────────┬───────────────────────┐
|
||||
│ path.hash.mode │ Advert path hash size │
|
||||
├────────────────┼───────────────────────┤
|
||||
│ 0 │ 1 byte (default) │
|
||||
├────────────────┼───────────────────────┤
|
||||
│ 1 │ 2 bytes │
|
||||
├────────────────┼───────────────────────┤
|
||||
│ 2 │ 3 bytes │
|
||||
└────────────────┴───────────────────────┘
|
||||
<pre><code>+----------------+-----------------------+
|
||||
| path.hash.mode | Advert path hash size |
|
||||
+----------------+-----------------------+
|
||||
| 0 | 1 byte (default) |
|
||||
+----------------+-----------------------+
|
||||
| 1 | 2 bytes |
|
||||
+----------------+-----------------------+
|
||||
| 2 | 3 bytes |
|
||||
+----------------+-----------------------+
|
||||
</code></pre>
|
||||
<p>It is safe to set your 1.14+ repeaters to mode 1 or 2.</p>
|
||||
<h3 id="395-q-why-use-2-or-3-byte-path-hash-for-adverts">3.9.5. Q: <strong>Why use 2- or 3-byte path hash for adverts?</strong></h3>
|
||||
@@ -2898,7 +3220,7 @@ Unlock page: <a href="https://buymeacoffee.com/ripplebiz/e/249834">https://buyme
|
||||
4/8</p>
|
||||
<p>For example, if the code rate is 5/7, for every 5 bits of useful information, the coder generates a total of 7 bits of data, of which 2 bits are redundant.</p>
|
||||
<p>Making the bandwidth 2x wider (from BW125 to BW250) allows you to send 2x more bytes in the same time. Making the spreading factor 1 step lower (from SF10 to SF9) allows you to send 2x more bytes in the same time.</p>
|
||||
<p>Lowering the spreading factor makes it more difficult for the gateway to receive a transmission, as it will be more sensitive to noise. You could compare this to two people talking in a noisy place (a bar for example). If you’re far from each other, you have to talk slow (SF10), but if you’re close, you can talk faster (SF7)</p>
|
||||
<p>Lowering the spreading factor makes it more difficult for the gateway to receive a transmission, as it will be more sensitive to noise. You could compare this to two people talking in a noisy place (a bar for example). If you're far from each other, you have to talk slow (SF10), but if you're close, you can talk faster (SF7)</p>
|
||||
<p>So, it's a balancing act between speed of the transmission and resistance to noise.
|
||||
The Things Network is mainly focused on LoRaWAN, but the LoRa low-level stuff still checks out for any LoRa project</p>
|
||||
<h3 id="52-q-do-meshcore-clients-repeat">5.2. Q: Do MeshCore clients repeat?</h3>
|
||||
@@ -3162,10 +3484,12 @@ Below are the instructions to flash firmware onto a supported LoRa device using
|
||||
<li>From the MeshCore app, log in remotely to the repeater you want to update with admin privileges.</li>
|
||||
<li>Go to the Command Line tab, type <code>start ota</code> and hit enter.</li>
|
||||
<li>You should see <code>OK</code> to confirm the repeater device is now in OTA mode.</li>
|
||||
<li>The command <code>start ota</code> on an ESP32-based device starts a Wi-Fi hotspot named <code>MeshCore OTA</code>.</li>
|
||||
<li>From your phone or computer connect to the 'MeshCore OTA' hotspot.</li>
|
||||
<li>From a browser, go to <a href="http://192.168.4.1/update">http://192.168.4.1/update</a> and upload the non-merged bin from the flasher.</li>
|
||||
<li>If the ESP32 is not already joined to Wi-Fi, <code>start ota</code> starts an open hotspot named <code>MeshCore-OTA</code> at <code>192.168.4.1</code>. If it is already joined, the command reports and uses its router-assigned address instead.</li>
|
||||
<li>From your phone or computer, connect to the <code>MeshCore-OTA</code> hotspot when one was started.</li>
|
||||
<li>Open the URL reported by <code>start ota</code> and upload the non-merged bin from the flasher. When the device started <code>MeshCore-OTA</code>, the URL is <a href="http://192.168.4.1/update">http://192.168.4.1/update</a>.</li>
|
||||
</ol>
|
||||
<p>On an MQTT observer, stop WebConfig before running <code>start ota</code>; both servers use
|
||||
HTTP port 80. Likewise, stop the OTA uploader before running <code>start webconfig</code>.</p>
|
||||
<h3 id="73-q-is-there-a-way-to-lower-the-chance-of-a-failed-ota-device-firmware-update-dfu">7.3. Q: Is there a way to lower the chance of a failed OTA device firmware update (DFU)?</h3>
|
||||
<p><strong>A:</strong> Yes, developer <code>che aporeps</code> has an enhanced OTA DFU bootloader for nRF52 based devices. With this bootloader, if it detects that the application firmware is invalid, it falls back to OTA DFU mode so you can attempt to flash again to recover. This bootloader has other changes to make the OTA DFU process more fault tolerant.</p>
|
||||
<p>Refer to <a href="https://github.com/oltaco/Adafruit_nRF52_Bootloader_OTAFIX">https://github.com/oltaco/Adafruit_nRF52_Bootloader_OTAFIX</a> for the latest information.</p>
|
||||
@@ -3195,12 +3519,31 @@ Below are the instructions to flash firmware onto a supported LoRa device using
|
||||
</ul>
|
||||
<h3 id="76-q-how-do-i-connect-to-the-companion-via-wi-fi-eg-using-a-heltec-v3">7.6. Q: How do I connect to the companion via Wi-Fi, e.g. using a Heltec V3?</h3>
|
||||
<p><strong>A:</strong>
|
||||
Wi-Fi firmware requires you to compile it yourself, as you need to set the Wi-Fi SSID and password.
|
||||
Edit WIFI_SSID and WIFI_PWD in <code>./variants/heltec_v3/platformio.ini</code> and then flash it to your device.</p>
|
||||
Flash an ESP32 companion Wi-Fi build. Its shared WebUI is enabled by default. If
|
||||
it has no saved Wi-Fi configuration, it starts an open <code>MeshCore-Setup-XXXX</code>
|
||||
access point. Join it and browse to <a href="http://192.168.4.1/">http://192.168.4.1/</a>. The wizard configures
|
||||
WiFi, node identity, and radio settings; MQTT companion builds add an MQTT step
|
||||
and MQTT tab, while non-MQTT companions remove those controls. After saving,
|
||||
the page and device screen show the station IP assigned by your router.</p>
|
||||
<p>If a saved network remains unreachable for two minutes, the setup AP starts as
|
||||
a fallback. If the original network returns, the companion closes that recovery
|
||||
portal and resumes normal LAN operation.</p>
|
||||
<p>The setup AP always uses <code>192.168.4.1</code>; the companion's station IP is assigned by DHCP and can be different. A real <code>WIFI_SSID</code> and <code>WIFI_PWD</code> can still be supplied at compile time as initial defaults, but they are no longer required.</p>
|
||||
<p>On the LAN, the WebUI remains available at the companion's station IP and the
|
||||
companion protocol remains available on TCP port <code>5000</code>. Companion builds do not
|
||||
have an admin CLI password, so this configuration page trusts the local LAN; do
|
||||
not put the companion on an untrusted WiFi network.</p>
|
||||
<p>ESP32 repeater and room-server builds use the same page, but keep it off by
|
||||
default. Run <code>set webui on</code> from the admin CLI, open the reported LAN URL, and
|
||||
sign in with the admin password; <code>get webui</code> reports its current address. Their
|
||||
MQTT observer variants expose the MQTT controls, while ordinary builds do not.
|
||||
The two 4 MB
|
||||
<code>LilyGo_TLora_V2_1_1_6_*_observer_mqtt</code> builds retain CLI-only configuration so
|
||||
their flash can keep two app slots for LoRa OTA.</p>
|
||||
<h3 id="77-q-i-have-a-station-g2-or-a-heltec-v4-or-an-ikoka-stick-or-a-radio-with-an-ebyte-e22-900m30s-or-an-ebyte-e22-900m33s-module-what-should-their-transmit-power-be-set-to">7.7. Q: I have a Station G2, or a Heltec V4, or an Ikoka Stick, or a radio with an EByte E22-900M30S or an EByte E22-900M33S module, what should their transmit power be set to?</h3>
|
||||
<p><strong>A:</strong>
|
||||
For companion radios, you can set these radios' transmit power in the smartphone app. For repeater and room server radios, you can set their transmit power using the command line command <code>set tx</code>. You can get their current value using command line command <code>get tx</code></p>
|
||||
<p>⚠️ <strong>WARNING: Set these values at your own risk. Incorrect power settings can permanently damage your radio hardware.</strong></p>
|
||||
<p>[WARN] <strong>WARNING: Set these values at your own risk. Incorrect power settings can permanently damage your radio hardware.</strong></p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -3277,6 +3620,26 @@ For companion radios, you can set these radios' transmit power in the smartphone
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr />
|
||||
<h3 id="78-q-how-do-i-use-ethernet-with-a-rak4631">7.8. Q: How do I use Ethernet with a RAK4631?</h3>
|
||||
<p><strong>A:</strong>
|
||||
MeshCore supports Ethernet on RAK4631 boards using the <a href="https://docs.rakwireless.com/product-categories/wisblock/rak13800/datasheet/">RAK13800</a> WisBlock Ethernet module (based on the W5100S chip).</p>
|
||||
<p><strong>Hardware required:</strong>
|
||||
- RAK4631 WisBlock Core
|
||||
- RAK19007 or RAK19018 WisBlock Base Board (with an available IO slot)
|
||||
- RAK13800 WisBlock Ethernet module
|
||||
- Ethernet cable connected to a network with a DHCP server</p>
|
||||
<p><strong>Firmware:</strong>
|
||||
Flash one of the Ethernet-enabled firmware variants:
|
||||
- <code>RAK_4631_repeater_ethernet</code> - Repeater with Ethernet CLI access
|
||||
- <code>RAK_4631_room_server_ethernet</code> - Room server with Ethernet CLI access
|
||||
- <code>RAK_4631_companion_radio_ethernet</code> - Companion radio over Ethernet (replaces BLE)</p>
|
||||
<p><strong>Connecting:</strong>
|
||||
- The device obtains an IP address via DHCP automatically on boot.
|
||||
- For repeaters and room servers, connect to the device on TCP port 23 using any TCP client (e.g. <code>nc <ip> 23</code> or PuTTY in raw mode). This gives you the same CLI available over serial/USB.
|
||||
- For companion radio firmware, the Ethernet interface replaces BLE as the transport to companion apps. Connect on TCP port 5000 (same as the WiFi companion radio).
|
||||
- Use the <code>eth.status</code> CLI command to check connection status and see the assigned IP address.</p>
|
||||
<hr />
|
||||
|
||||
|
||||
|
||||
@@ -3329,7 +3692,9 @@ For companion radios, you can set these radios' transmit power in the smartphone
|
||||
<script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["content.action.edit", "content.code.copy", "search.highlight", "search.suggest"], "search": "../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
||||
|
||||
|
||||
<script src="../assets/javascripts/bundle.79ae519e.min.js"></script>
|
||||
<script src="../assets/javascripts/bundle.d7400e89.min.js"></script>
|
||||
|
||||
<script src="../_javascript/telemetry_decoder.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+316
-10
@@ -10,18 +10,18 @@
|
||||
|
||||
|
||||
|
||||
<link rel="canonical" href="https://meshcore-dev.github.io/meshcore/">
|
||||
<link rel="canonical" href="https://mikecarper.github.io/MeshCore/">
|
||||
|
||||
|
||||
|
||||
<link rel="next" href="cli_commands/">
|
||||
<link rel="next" href="WiFi/">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="icon" href="assets/images/favicon.png">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.6">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
|
||||
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="assets/stylesheets/main.484c7ddc.min.css">
|
||||
<link rel="stylesheet" href="assets/stylesheets/main.ec1eaa64.min.css">
|
||||
|
||||
|
||||
|
||||
@@ -50,6 +50,8 @@
|
||||
|
||||
<link rel="stylesheet" href="_stylesheets/extra.css">
|
||||
|
||||
<link rel="stylesheet" href="_stylesheets/telemetry_decoder.css">
|
||||
|
||||
<script>__md_scope=new URL(".",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||||
|
||||
|
||||
@@ -159,13 +161,13 @@
|
||||
|
||||
|
||||
<div class="md-header__source">
|
||||
<a href="https://github.com/meshcore-dev/meshcore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
meshcore-dev/meshcore
|
||||
mikecarper/MeshCore
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -204,13 +206,13 @@
|
||||
</label>
|
||||
|
||||
<div class="md-nav__source">
|
||||
<a href="https://github.com/meshcore-dev/meshcore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
meshcore-dev/meshcore
|
||||
mikecarper/MeshCore
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -260,6 +262,87 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="WiFi/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
WiFi and MQTT by Firmware Type
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="cli_build_matrix/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
CLI Availability by Firmware Build
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="cli_command_availability/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
CLI Command Availability Matrix
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="cli_commands/" class="md-nav__link">
|
||||
|
||||
@@ -368,6 +451,87 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="flood_filtering/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Repeater Flood Filtering and Moderation
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="gps_tracking/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
GPS Tracking
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="halo_keymind_settings/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Halo and Keymind Branch Settings
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="kiss_modem_protocol/" class="md-nav__link">
|
||||
|
||||
@@ -449,6 +613,114 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="ota_easy/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Easy firmware updates over LoRa
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="ota_meshtower_v2_sdcard/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
MeshTower V2 microSD LoRa OTA
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="ota_protocol/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
MeshCore OTA - .mota container & LoRa protocol
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="ota_user_guide/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Updating your node over the air (OTA) - user guide
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="packet_format/" class="md-nav__link">
|
||||
|
||||
@@ -557,6 +829,33 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="telemetry_decoder/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Telemetry history decoder
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="terminal_chat_cli/" class="md-nav__link">
|
||||
|
||||
@@ -613,7 +912,7 @@
|
||||
|
||||
|
||||
|
||||
<a href="https://github.com/meshcore-dev/meshcore/edit/main/docs/index.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
|
||||
<a href="https://github.com/mikecarper/MeshCore/edit/keymindCascade/docs/index.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg>
|
||||
</a>
|
||||
@@ -627,6 +926,11 @@
|
||||
<ul>
|
||||
<li><a href="faq/">Frequently Asked Questions</a></li>
|
||||
<li><a href="cli_commands/">CLI Commands</a></li>
|
||||
<li><a href="telemetry_decoder/">Telemetry History Decoder</a></li>
|
||||
<li><a href="cli_build_matrix/">CLI Availability by Firmware Build</a></li>
|
||||
<li><a href="ota_easy/">Easy LoRa OTA: ESP32 full images and nRF52 deltas</a></li>
|
||||
<li><a href="ota_meshtower_v2_sdcard/">MeshTower V2 microSD self-updates</a></li>
|
||||
<li><a href="gps_tracking/">GPS Tracking</a></li>
|
||||
<li><a href="companion_protocol/">Companion Protocol</a></li>
|
||||
<li><a href="packet_format/">Packet Format</a></li>
|
||||
<li><a href="qr_codes/">QR Codes</a></li>
|
||||
@@ -687,7 +991,9 @@
|
||||
<script id="__config" type="application/json">{"annotate": null, "base": ".", "features": ["content.action.edit", "content.code.copy", "search.highlight", "search.suggest"], "search": "assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
||||
|
||||
|
||||
<script src="assets/javascripts/bundle.79ae519e.min.js"></script>
|
||||
<script src="assets/javascripts/bundle.d7400e89.min.js"></script>
|
||||
|
||||
<script src="_javascript/telemetry_decoder.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
+350
-24
@@ -10,10 +10,10 @@
|
||||
|
||||
|
||||
|
||||
<link rel="canonical" href="https://meshcore-dev.github.io/meshcore/kiss_modem_protocol/">
|
||||
<link rel="canonical" href="https://mikecarper.github.io/MeshCore/kiss_modem_protocol/">
|
||||
|
||||
|
||||
<link rel="prev" href="../faq/">
|
||||
<link rel="prev" href="../halo_keymind_settings/">
|
||||
|
||||
|
||||
<link rel="next" href="../nrf52_power_management/">
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
|
||||
<link rel="icon" href="../assets/images/favicon.png">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.6">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
|
||||
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.484c7ddc.min.css">
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.ec1eaa64.min.css">
|
||||
|
||||
|
||||
|
||||
@@ -52,6 +52,8 @@
|
||||
|
||||
<link rel="stylesheet" href="../_stylesheets/extra.css">
|
||||
|
||||
<link rel="stylesheet" href="../_stylesheets/telemetry_decoder.css">
|
||||
|
||||
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||||
|
||||
|
||||
@@ -161,13 +163,13 @@
|
||||
|
||||
|
||||
<div class="md-header__source">
|
||||
<a href="https://github.com/meshcore-dev/meshcore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
meshcore-dev/meshcore
|
||||
mikecarper/MeshCore
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -206,13 +208,13 @@
|
||||
</label>
|
||||
|
||||
<div class="md-nav__source">
|
||||
<a href="https://github.com/meshcore-dev/meshcore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
meshcore-dev/meshcore
|
||||
mikecarper/MeshCore
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -252,6 +254,87 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../WiFi/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
WiFi and MQTT by Firmware Type
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_build_matrix/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
CLI Availability by Firmware Build
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_command_availability/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
CLI Command Availability Matrix
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_commands/" class="md-nav__link">
|
||||
|
||||
@@ -358,6 +441,87 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../flood_filtering/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Repeater Flood Filtering and Moderation
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../gps_tracking/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
GPS Tracking
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../halo_keymind_settings/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Halo and Keymind Branch Settings
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -491,6 +655,17 @@
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#host-output-backpressure" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
Host Output Backpressure
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
@@ -820,6 +995,114 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_easy/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Easy firmware updates over LoRa
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_meshtower_v2_sdcard/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
MeshTower V2 microSD LoRa OTA
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_protocol/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
MeshCore OTA - .mota container & LoRa protocol
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_user_guide/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Updating your node over the air (OTA) - user guide
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../packet_format/" class="md-nav__link">
|
||||
|
||||
@@ -928,6 +1211,33 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../telemetry_decoder/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Telemetry history decoder
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../terminal_chat_cli/" class="md-nav__link">
|
||||
|
||||
@@ -1046,6 +1356,17 @@
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#host-output-backpressure" class="md-nav__link">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
Host Output Backpressure
|
||||
|
||||
</span>
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
@@ -1324,7 +1645,7 @@
|
||||
|
||||
|
||||
|
||||
<a href="https://github.com/meshcore-dev/meshcore/edit/main/docs/kiss_modem_protocol.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
|
||||
<a href="https://github.com/mikecarper/MeshCore/edit/keymindCascade/docs/kiss_modem_protocol.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg>
|
||||
</a>
|
||||
@@ -1369,10 +1690,10 @@
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<pre><code>┌──────┬───────────┬──────────────┬──────┐
|
||||
│ FEND │ Type Byte │ Data (escaped)│ FEND │
|
||||
│ 0xC0 │ 1 byte │ 0-510 bytes │ 0xC0 │
|
||||
└──────┴───────────┴──────────────┴──────┘
|
||||
<pre><code>+------+-----------+--------------+------+
|
||||
| FEND | Type Byte | Data (escaped)| FEND |
|
||||
| 0xC0 | 1 byte | 0-510 bytes | 0xC0 |
|
||||
+------+-----------+--------------+------+
|
||||
</code></pre>
|
||||
<h3 id="type-byte">Type Byte</h3>
|
||||
<p>The type byte is split into two nibbles:</p>
|
||||
@@ -1414,7 +1735,7 @@
|
||||
<td>Data</td>
|
||||
<td><code>0x00</code></td>
|
||||
<td>Raw packet</td>
|
||||
<td>Queue packet for transmission</td>
|
||||
<td>Queue packet for transmission (one pending at a time)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>TXDELAY</td>
|
||||
@@ -1480,6 +1801,9 @@
|
||||
</tbody>
|
||||
</table>
|
||||
<p>Data frames carry raw packet data only, with no metadata prepended. The Data command payload is limited to 255 bytes to match the MeshCore maximum transmission unit (MAX_TRANS_UNIT); frames larger than 255 bytes are silently dropped. The KISS specification recommends at least 1024 bytes for general-purpose TNCs; this modem is intended for MeshCore packets only, whose protocol MTU is 255 bytes.</p>
|
||||
<p>Only one packet may be pending for radio transmission at a time. If the host sends a second Data frame before the first has completed, the modem responds with Error (0xF1) and TxBusy (0x07).</p>
|
||||
<h3 id="host-output-backpressure">Host Output Backpressure</h3>
|
||||
<p>Outbound frames are encoded into a 2-slot queue and flushed when serial output space is available; <code>loop()</code> never blocks on writes. Radio TX state advances independently of host read speed. TxDone is retained until it can be queued. If the outbound queue is full, the modem responds with Error (0xF1) and TxBusy (0x07). Hosts should read serial promptly to avoid delayed responses.</p>
|
||||
<h3 id="csma-behavior">CSMA Behavior</h3>
|
||||
<p>The TNC implements p-persistent CSMA for half-duplex operation:</p>
|
||||
<ol>
|
||||
@@ -1492,10 +1816,10 @@
|
||||
<h2 id="sethardware-extensions-0x06">SetHardware Extensions (0x06)</h2>
|
||||
<p>MeshCore-specific functionality uses the standard KISS SetHardware command. The first byte of SetHardware data is a sub-command. Standard KISS clients ignore these frames.</p>
|
||||
<h3 id="frame-format_1">Frame Format</h3>
|
||||
<pre><code>┌──────┬──────┬─────────────┬──────────────┬──────┐
|
||||
│ FEND │ 0x06 │ Sub-command │ Data (escaped)│ FEND │
|
||||
│ 0xC0 │ │ 1 byte │ variable │ 0xC0 │
|
||||
└──────┴──────┴─────────────┴──────────────┴──────┘
|
||||
<pre><code>+------+------+-------------+--------------+------+
|
||||
| FEND | 0x06 | Sub-command | Data (escaped)| FEND |
|
||||
| 0xC0 | | 1 byte | variable | 0xC0 |
|
||||
+------+------+-------------+--------------+------+
|
||||
</code></pre>
|
||||
<h3 id="request-sub-commands-host-to-tnc">Request Sub-commands (Host to TNC)</h3>
|
||||
<table>
|
||||
@@ -1825,14 +2149,14 @@
|
||||
<tr>
|
||||
<td>TxBusy</td>
|
||||
<td><code>0x07</code></td>
|
||||
<td>Transmit busy</td>
|
||||
<td>Radio TX busy, or host output queue full</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="unsolicited-events">Unsolicited Events</h3>
|
||||
<p>The TNC sends these SetHardware frames without a preceding request:</p>
|
||||
<p><strong>TxDone (0xF8)</strong>: Sent after a packet has been transmitted. Contains a single byte: 0x01 for success, 0x00 for failure.</p>
|
||||
<p><strong>RxMeta (0xF9)</strong>: Sent immediately after each standard data frame (type 0x00) with metadata for the received packet. Contains SNR (1 byte, signed, value x4 for 0.25 dB precision) followed by RSSI (1 byte, signed, dBm). Enabled by default; can be toggled with SetSignalReport. Standard KISS clients ignore this frame.</p>
|
||||
<p><strong>TxDone (0xF8)</strong>: Sent after radio transmission completes. Contains a single byte: 0x01 for success, 0x00 for failure. Delivery to the host may be delayed under serial backpressure but is not dropped.</p>
|
||||
<p><strong>RxMeta (0xF9)</strong>: Sent after each standard data frame (type 0x00) with SNR (1 byte, signed, value x4) and RSSI (1 byte, signed, dBm). Queued with the data frame; omitted if the data frame cannot be queued. Enabled by default; toggle with SetSignalReport. Standard KISS clients ignore this frame.</p>
|
||||
<h2 id="data-formats">Data Formats</h2>
|
||||
<h3 id="radio-parameters-setradio-radio-response">Radio Parameters (SetRadio / Radio response)</h3>
|
||||
<p>All values little-endian.</p>
|
||||
@@ -2008,7 +2332,7 @@
|
||||
<tr>
|
||||
<td>Temperature</td>
|
||||
<td>2 bytes</td>
|
||||
<td>int16_t, tenths of °C (e.g., 253 = 25.3°C)</td>
|
||||
<td>int16_t, tenths of degC (e.g., 253 = 25.3degC)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -2091,7 +2415,7 @@
|
||||
</table>
|
||||
<h2 id="notes">Notes</h2>
|
||||
<ul>
|
||||
<li>Data payload limit (255 bytes) matches MeshCore MAX_TRANS_UNIT; no change needed for KISS “1024+ recommended” (that applies to general TNCs, not MeshCore)</li>
|
||||
<li>Data payload limit (255 bytes) matches MeshCore MAX_TRANS_UNIT; no change needed for KISS "1024+ recommended" (that applies to general TNCs, not MeshCore)</li>
|
||||
<li>Modem generates identity on first boot (stored in flash)</li>
|
||||
<li>All multi-byte values are little-endian unless stated otherwise</li>
|
||||
<li>SNR values in RxMeta are multiplied by 4 for 0.25 dB precision</li>
|
||||
@@ -2151,7 +2475,9 @@
|
||||
<script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["content.action.edit", "content.code.copy", "search.highlight", "search.suggest"], "search": "../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
||||
|
||||
|
||||
<script src="../assets/javascripts/bundle.79ae519e.min.js"></script>
|
||||
<script src="../assets/javascripts/bundle.d7400e89.min.js"></script>
|
||||
|
||||
<script src="../_javascript/telemetry_decoder.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
|
||||
|
||||
<link rel="canonical" href="https://meshcore-dev.github.io/meshcore/nrf52_power_management/">
|
||||
<link rel="canonical" href="https://mikecarper.github.io/MeshCore/nrf52_power_management/">
|
||||
|
||||
|
||||
<link rel="prev" href="../kiss_modem_protocol/">
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
|
||||
<link rel="icon" href="../assets/images/favicon.png">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.6">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
|
||||
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.484c7ddc.min.css">
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.ec1eaa64.min.css">
|
||||
|
||||
|
||||
|
||||
@@ -52,6 +52,8 @@
|
||||
|
||||
<link rel="stylesheet" href="../_stylesheets/extra.css">
|
||||
|
||||
<link rel="stylesheet" href="../_stylesheets/telemetry_decoder.css">
|
||||
|
||||
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||||
|
||||
|
||||
@@ -161,13 +163,13 @@
|
||||
|
||||
|
||||
<div class="md-header__source">
|
||||
<a href="https://github.com/meshcore-dev/meshcore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
meshcore-dev/meshcore
|
||||
mikecarper/MeshCore
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -206,13 +208,13 @@
|
||||
</label>
|
||||
|
||||
<div class="md-nav__source">
|
||||
<a href="https://github.com/meshcore-dev/meshcore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
meshcore-dev/meshcore
|
||||
mikecarper/MeshCore
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -252,6 +254,87 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../WiFi/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
WiFi and MQTT by Firmware Type
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_build_matrix/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
CLI Availability by Firmware Build
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_command_availability/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
CLI Command Availability Matrix
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_commands/" class="md-nav__link">
|
||||
|
||||
@@ -360,6 +443,87 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../flood_filtering/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Repeater Flood Filtering and Moderation
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../gps_tracking/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
GPS Tracking
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../halo_keymind_settings/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Halo and Keymind Branch Settings
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../kiss_modem_protocol/" class="md-nav__link">
|
||||
|
||||
@@ -687,6 +851,114 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_easy/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Easy firmware updates over LoRa
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_meshtower_v2_sdcard/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
MeshTower V2 microSD LoRa OTA
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_protocol/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
MeshCore OTA - .mota container & LoRa protocol
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_user_guide/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Updating your node over the air (OTA) - user guide
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../packet_format/" class="md-nav__link">
|
||||
|
||||
@@ -795,6 +1067,33 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../telemetry_decoder/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Telemetry history decoder
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../terminal_chat_cli/" class="md-nav__link">
|
||||
|
||||
@@ -1058,7 +1357,7 @@
|
||||
|
||||
|
||||
|
||||
<a href="https://github.com/meshcore-dev/meshcore/edit/main/docs/nrf52_power_management.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
|
||||
<a href="https://github.com/mikecarper/MeshCore/edit/keymindCascade/docs/nrf52_power_management.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg>
|
||||
</a>
|
||||
@@ -1082,6 +1381,9 @@
|
||||
<li>Configures the nRF52's Low Power Comparator (LPCOMP) before entering SYSTEMOFF</li>
|
||||
<li>Enables USB VBUS detection so external power can wake the device</li>
|
||||
<li>Device automatically wakes when battery voltage rises above recovery threshold or when VBUS is detected</li>
|
||||
<li>Uses no LPCOMP hysteresis; on divided battery inputs the additional 50 mV
|
||||
comparator hysteresis can move the effective battery wake point by several
|
||||
hundred millivolts and strand an otherwise charged node</li>
|
||||
</ul>
|
||||
<h3 id="early-boot-register-capture">Early Boot Register Capture</h3>
|
||||
<ul>
|
||||
@@ -1126,7 +1428,7 @@
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Board</th>
|
||||
<th>Board family</th>
|
||||
<th>Implemented</th>
|
||||
<th>LPCOMP wake</th>
|
||||
<th>VBUS wake</th>
|
||||
@@ -1140,24 +1442,36 @@
|
||||
<td>Yes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>RAK4631 (<code>rak4631</code>)</td>
|
||||
<td>SenseCAP Solar</td>
|
||||
<td>Yes</td>
|
||||
<td>Yes</td>
|
||||
<td>Yes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Heltec T114 (<code>heltec_t114</code>)</td>
|
||||
<td>RAK4631 / RAK3401</td>
|
||||
<td>Yes</td>
|
||||
<td>Yes</td>
|
||||
<td>Yes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>GAT562 Mesh Watch13</td>
|
||||
<td>GAT562 30S / EVB Pro / Tracker Pro / Watch13</td>
|
||||
<td>Yes</td>
|
||||
<td>Yes</td>
|
||||
<td>Yes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Heltec T096 / T114 / T1 / Tower V2</td>
|
||||
<td>Yes</td>
|
||||
<td>Yes</td>
|
||||
<td>Yes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Muzi Works R1 Neo</td>
|
||||
<td>Partial</td>
|
||||
<td>Inactive</td>
|
||||
<td>Inactive</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Promicro nRF52840</td>
|
||||
<td>No</td>
|
||||
<td>No</td>
|
||||
@@ -1176,43 +1490,25 @@
|
||||
<td>No</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>LilyGo T-Echo / T-Echo Lite</td>
|
||||
<td>LilyGo T-Echo / T-Echo Lite / T-Impulse Plus</td>
|
||||
<td>No</td>
|
||||
<td>No</td>
|
||||
<td>No</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SenseCAP Solar</td>
|
||||
<td>Yes</td>
|
||||
<td>Yes</td>
|
||||
<td>Yes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>WIO Tracker L1 / L1 E-Ink</td>
|
||||
<td>WIO Tracker L1 / L1 E-Ink / WM1110</td>
|
||||
<td>No</td>
|
||||
<td>No</td>
|
||||
<td>No</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>WIO WM1110</td>
|
||||
<td>Mesh Pocket / Meshtiny / Nano G2 Ultra</td>
|
||||
<td>No</td>
|
||||
<td>No</td>
|
||||
<td>No</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Mesh Pocket</td>
|
||||
<td>No</td>
|
||||
<td>No</td>
|
||||
<td>No</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Nano G2 Ultra</td>
|
||||
<td>No</td>
|
||||
<td>No</td>
|
||||
<td>No</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ThinkNode M1/M3/M6</td>
|
||||
<td>ThinkNode M1 / M3 / M6</td>
|
||||
<td>No</td>
|
||||
<td>No</td>
|
||||
<td>No</td>
|
||||
@@ -1224,19 +1520,13 @@
|
||||
<td>No</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Ikoka Nano/Stick/Handheld (nRF)</td>
|
||||
<td>Ikoka Nano / Stick / Handheld (nRF)</td>
|
||||
<td>No</td>
|
||||
<td>No</td>
|
||||
<td>No</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Keepteen LT1</td>
|
||||
<td>No</td>
|
||||
<td>No</td>
|
||||
<td>No</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Minewsemi ME25LS01</td>
|
||||
<td>Keepteen LT1 / Minewsemi ME25LS01</td>
|
||||
<td>No</td>
|
||||
<td>No</td>
|
||||
<td>No</td>
|
||||
@@ -1245,7 +1535,11 @@
|
||||
</table>
|
||||
<p>Notes:
|
||||
- "Implemented" reflects Phase 1 (boot lockout + shutdown reason capture).
|
||||
- User power-off on Heltec T114 does not enable LPCOMP wake.
|
||||
- R1 Neo has the integration compiled, but its board configuration deliberately
|
||||
sets <code>PWRMGT_VOLTAGE_BOOTLOCK</code> to <code>0</code>; automatic protective shutdown and its
|
||||
voltage/VBUS recovery wake are therefore inactive.
|
||||
- User power-off does not enable LPCOMP wake; voltage recovery is armed only
|
||||
for boot protection and automated low-voltage shutdown.
|
||||
- VBUS detection is used to skip boot lockout on external power, and VBUS wake is configured alongside LPCOMP when supported hardware exposes VBUS to the nRF52.</p>
|
||||
<h2 id="technical-details">Technical Details</h2>
|
||||
<h3 id="architecture">Architecture</h3>
|
||||
@@ -1314,7 +1608,7 @@
|
||||
- Monitor the specified AIN channel (0-7 corresponding to P0.02-P0.05, P0.28-P0.31)
|
||||
- Compare against VDD fraction reference (REFSEL: 0-6=1/8..7/8, 7=ARef, 8-15=1/16..15/16)
|
||||
- Detect UP events (voltage rising above threshold)
|
||||
- Use 50mV hysteresis for noise immunity
|
||||
- Use no hysteresis so the configured recovery threshold is not widened by the battery divider
|
||||
- Wake the device from SYSTEMOFF when triggered</p>
|
||||
<p>VBUS wake is enabled via the POWER peripheral USBDETECTED event whenever <code>configureVoltageWake()</code> is used. This requires USB VBUS to be routed to the nRF52 (typical on nRF52840 boards with native USB).</p>
|
||||
<p><strong>LPCOMP Reference Selection (PWRMGT_LPCOMP_REFSEL)</strong>:</p>
|
||||
@@ -1427,7 +1721,7 @@
|
||||
</tbody>
|
||||
</table>
|
||||
<p><strong>Important</strong>: For boards with a voltage divider on the battery sense pin, LPCOMP measures the divided voltage. Use:
|
||||
<code>VBAT_threshold ≈ (VDD * fraction) * divider_scale</code>, where <code>divider_scale = (Rtop + Rbottom) / Rbottom</code> (e.g., 2.0 for 1M/1M, 2.5 for 1.5M/1M, 3.0 for XIAO).</p>
|
||||
<code>VBAT_threshold ~ (VDD * fraction) * divider_scale</code>, where <code>divider_scale = (Rtop + Rbottom) / Rbottom</code> (e.g., 2.0 for 1M/1M, 2.5 for 1.5M/1M, 3.0 for XIAO).</p>
|
||||
<h3 id="softdevice-compatibility">SoftDevice Compatibility</h3>
|
||||
<p>The power management code checks whether SoftDevice is enabled and uses the appropriate API:
|
||||
- When SD enabled: <code>sd_power_*</code> functions
|
||||
@@ -1538,7 +1832,9 @@ DEBUG: PWRMGT: LPCOMP wake configured (AIN7, ref=3/8 VDD)
|
||||
<script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["content.action.edit", "content.code.copy", "search.highlight", "search.suggest"], "search": "../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
||||
|
||||
|
||||
<script src="../assets/javascripts/bundle.79ae519e.min.js"></script>
|
||||
<script src="../assets/javascripts/bundle.d7400e89.min.js"></script>
|
||||
|
||||
<script src="../_javascript/telemetry_decoder.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
+318
-12
@@ -10,20 +10,20 @@
|
||||
|
||||
|
||||
|
||||
<link rel="canonical" href="https://meshcore-dev.github.io/meshcore/number_allocations/">
|
||||
<link rel="canonical" href="https://mikecarper.github.io/MeshCore/number_allocations/">
|
||||
|
||||
|
||||
<link rel="prev" href="../nrf52_power_management/">
|
||||
|
||||
|
||||
<link rel="next" href="../packet_format/">
|
||||
<link rel="next" href="../ota_easy/">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="icon" href="../assets/images/favicon.png">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.6">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
|
||||
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.484c7ddc.min.css">
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.ec1eaa64.min.css">
|
||||
|
||||
|
||||
|
||||
@@ -52,6 +52,8 @@
|
||||
|
||||
<link rel="stylesheet" href="../_stylesheets/extra.css">
|
||||
|
||||
<link rel="stylesheet" href="../_stylesheets/telemetry_decoder.css">
|
||||
|
||||
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||||
|
||||
|
||||
@@ -161,13 +163,13 @@
|
||||
|
||||
|
||||
<div class="md-header__source">
|
||||
<a href="https://github.com/meshcore-dev/meshcore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
meshcore-dev/meshcore
|
||||
mikecarper/MeshCore
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -206,13 +208,13 @@
|
||||
</label>
|
||||
|
||||
<div class="md-nav__source">
|
||||
<a href="https://github.com/meshcore-dev/meshcore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
meshcore-dev/meshcore
|
||||
mikecarper/MeshCore
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -252,6 +254,87 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../WiFi/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
WiFi and MQTT by Firmware Type
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_build_matrix/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
CLI Availability by Firmware Build
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_command_availability/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
CLI Command Availability Matrix
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_commands/" class="md-nav__link">
|
||||
|
||||
@@ -360,6 +443,87 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../flood_filtering/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Repeater Flood Filtering and Moderation
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../gps_tracking/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
GPS Tracking
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../halo_keymind_settings/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Halo and Keymind Branch Settings
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../kiss_modem_protocol/" class="md-nav__link">
|
||||
|
||||
@@ -451,6 +615,114 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_easy/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Easy firmware updates over LoRa
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_meshtower_v2_sdcard/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
MeshTower V2 microSD LoRa OTA
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_protocol/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
MeshCore OTA - .mota container & LoRa protocol
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_user_guide/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Updating your node over the air (OTA) - user guide
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../packet_format/" class="md-nav__link">
|
||||
|
||||
@@ -559,6 +831,33 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../telemetry_decoder/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Telemetry history decoder
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../terminal_chat_cli/" class="md-nav__link">
|
||||
|
||||
@@ -615,7 +914,7 @@
|
||||
|
||||
|
||||
|
||||
<a href="https://github.com/meshcore-dev/meshcore/edit/main/docs/number_allocations.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
|
||||
<a href="https://github.com/mikecarper/MeshCore/edit/keymindCascade/docs/number_allocations.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg>
|
||||
</a>
|
||||
@@ -647,12 +946,17 @@
|
||||
<tr>
|
||||
<td>0100</td>
|
||||
<td>MeshCore Open</td>
|
||||
<td>zsylvester@monitormx.com — https://github.com/zjs81/meshcore-open</td>
|
||||
<td>zsylvester@monitormx.com - https://github.com/zjs81/meshcore-open</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0110 - 011F</td>
|
||||
<td>Ripple</td>
|
||||
<td>ripple_biz@protonmail.com — https://buymeacoffee.com/ripplebiz</td>
|
||||
<td>ripple_biz@protonmail.com - https://buymeacoffee.com/ripplebiz</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>0120</td>
|
||||
<td>MCO Advanced</td>
|
||||
<td>most.original.address@gmail.com - https://hdden.ru/MCOa/</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>FF00 - FFFF</td>
|
||||
@@ -714,7 +1018,9 @@
|
||||
<script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["content.action.edit", "content.code.copy", "search.highlight", "search.suggest"], "search": "../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
||||
|
||||
|
||||
<script src="../assets/javascripts/bundle.79ae519e.min.js"></script>
|
||||
<script src="../assets/javascripts/bundle.d7400e89.min.js"></script>
|
||||
|
||||
<script src="../_javascript/telemetry_decoder.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
+1667
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+311
-10
@@ -10,10 +10,10 @@
|
||||
|
||||
|
||||
|
||||
<link rel="canonical" href="https://meshcore-dev.github.io/meshcore/packet_format/">
|
||||
<link rel="canonical" href="https://mikecarper.github.io/MeshCore/packet_format/">
|
||||
|
||||
|
||||
<link rel="prev" href="../number_allocations/">
|
||||
<link rel="prev" href="../ota_user_guide/">
|
||||
|
||||
|
||||
<link rel="next" href="../payloads/">
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
|
||||
<link rel="icon" href="../assets/images/favicon.png">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.6">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
|
||||
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.484c7ddc.min.css">
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.ec1eaa64.min.css">
|
||||
|
||||
|
||||
|
||||
@@ -52,6 +52,8 @@
|
||||
|
||||
<link rel="stylesheet" href="../_stylesheets/extra.css">
|
||||
|
||||
<link rel="stylesheet" href="../_stylesheets/telemetry_decoder.css">
|
||||
|
||||
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||||
|
||||
|
||||
@@ -161,13 +163,13 @@
|
||||
|
||||
|
||||
<div class="md-header__source">
|
||||
<a href="https://github.com/meshcore-dev/meshcore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
meshcore-dev/meshcore
|
||||
mikecarper/MeshCore
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -206,13 +208,13 @@
|
||||
</label>
|
||||
|
||||
<div class="md-nav__source">
|
||||
<a href="https://github.com/meshcore-dev/meshcore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
meshcore-dev/meshcore
|
||||
mikecarper/MeshCore
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -252,6 +254,87 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../WiFi/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
WiFi and MQTT by Firmware Type
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_build_matrix/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
CLI Availability by Firmware Build
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_command_availability/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
CLI Command Availability Matrix
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_commands/" class="md-nav__link">
|
||||
|
||||
@@ -360,6 +443,87 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../flood_filtering/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Repeater Flood Filtering and Moderation
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../gps_tracking/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
GPS Tracking
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../halo_keymind_settings/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Halo and Keymind Branch Settings
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../kiss_modem_protocol/" class="md-nav__link">
|
||||
|
||||
@@ -439,6 +603,114 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_easy/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Easy firmware updates over LoRa
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_meshtower_v2_sdcard/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
MeshTower V2 microSD LoRa OTA
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_protocol/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
MeshCore OTA - .mota container & LoRa protocol
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_user_guide/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Updating your node over the air (OTA) - user guide
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -679,6 +951,33 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../telemetry_decoder/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Telemetry history decoder
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../terminal_chat_cli/" class="md-nav__link">
|
||||
|
||||
@@ -826,7 +1125,7 @@
|
||||
|
||||
|
||||
|
||||
<a href="https://github.com/meshcore-dev/meshcore/edit/main/docs/packet_format.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
|
||||
<a href="https://github.com/mikecarper/MeshCore/edit/keymindCascade/docs/packet_format.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg>
|
||||
</a>
|
||||
@@ -1257,7 +1556,9 @@
|
||||
<script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["content.action.edit", "content.code.copy", "search.highlight", "search.suggest"], "search": "../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
||||
|
||||
|
||||
<script src="../assets/javascripts/bundle.79ae519e.min.js"></script>
|
||||
<script src="../assets/javascripts/bundle.d7400e89.min.js"></script>
|
||||
|
||||
<script src="../_javascript/telemetry_decoder.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
+956
-35
File diff suppressed because it is too large
Load Diff
+315
-10
@@ -10,7 +10,7 @@
|
||||
|
||||
|
||||
|
||||
<link rel="canonical" href="https://meshcore-dev.github.io/meshcore/qr_codes/">
|
||||
<link rel="canonical" href="https://mikecarper.github.io/MeshCore/qr_codes/">
|
||||
|
||||
|
||||
<link rel="prev" href="../payloads/">
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
|
||||
<link rel="icon" href="../assets/images/favicon.png">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.6">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
|
||||
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.484c7ddc.min.css">
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.ec1eaa64.min.css">
|
||||
|
||||
|
||||
|
||||
@@ -52,6 +52,8 @@
|
||||
|
||||
<link rel="stylesheet" href="../_stylesheets/extra.css">
|
||||
|
||||
<link rel="stylesheet" href="../_stylesheets/telemetry_decoder.css">
|
||||
|
||||
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||||
|
||||
|
||||
@@ -161,13 +163,13 @@
|
||||
|
||||
|
||||
<div class="md-header__source">
|
||||
<a href="https://github.com/meshcore-dev/meshcore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
meshcore-dev/meshcore
|
||||
mikecarper/MeshCore
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -206,13 +208,13 @@
|
||||
</label>
|
||||
|
||||
<div class="md-nav__source">
|
||||
<a href="https://github.com/meshcore-dev/meshcore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
meshcore-dev/meshcore
|
||||
mikecarper/MeshCore
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -252,6 +254,87 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../WiFi/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
WiFi and MQTT by Firmware Type
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_build_matrix/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
CLI Availability by Firmware Build
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_command_availability/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
CLI Command Availability Matrix
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_commands/" class="md-nav__link">
|
||||
|
||||
@@ -360,6 +443,87 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../flood_filtering/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Repeater Flood Filtering and Moderation
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../gps_tracking/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
GPS Tracking
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../halo_keymind_settings/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Halo and Keymind Branch Settings
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../kiss_modem_protocol/" class="md-nav__link">
|
||||
|
||||
@@ -441,6 +605,114 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_easy/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Easy firmware updates over LoRa
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_meshtower_v2_sdcard/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
MeshTower V2 microSD LoRa OTA
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_protocol/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
MeshCore OTA - .mota container & LoRa protocol
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_user_guide/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Updating your node over the air (OTA) - user guide
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../packet_format/" class="md-nav__link">
|
||||
|
||||
@@ -618,6 +890,33 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../telemetry_decoder/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Telemetry history decoder
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../terminal_chat_cli/" class="md-nav__link">
|
||||
|
||||
@@ -704,7 +1003,7 @@
|
||||
|
||||
|
||||
|
||||
<a href="https://github.com/meshcore-dev/meshcore/edit/main/docs/qr_codes.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
|
||||
<a href="https://github.com/mikecarper/MeshCore/edit/keymindCascade/docs/qr_codes.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg>
|
||||
</a>
|
||||
@@ -720,8 +1019,12 @@
|
||||
</code></pre>
|
||||
<p><strong>Parameters</strong>:</p>
|
||||
<ul>
|
||||
<li><code>name</code>: Channel name (URL-encoded if needed)</li>
|
||||
<li><code>name</code>: Channel name (URL-encoded)</li>
|
||||
<li><code>secret</code>: 16-byte secret represented as 32 hex characters</li>
|
||||
<li><code>region_scope</code>: Region Scope (optional, URL-encoded if provided)<ul>
|
||||
<li>Supported by MeshCore App v1.47.0+</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="add-contact">Add Contact</h2>
|
||||
<p><strong>Example URL</strong>:</p>
|
||||
@@ -791,7 +1094,9 @@
|
||||
<script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["content.action.edit", "content.code.copy", "search.highlight", "search.suggest"], "search": "../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
||||
|
||||
|
||||
<script src="../assets/javascripts/bundle.79ae519e.min.js"></script>
|
||||
<script src="../assets/javascripts/bundle.d7400e89.min.js"></script>
|
||||
|
||||
<script src="../_javascript/telemetry_decoder.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
File diff suppressed because one or more lines are too long
+70
-26
@@ -1,55 +1,99 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url>
|
||||
<loc>https://meshcore-dev.github.io/meshcore/</loc>
|
||||
<lastmod>2026-06-15</lastmod>
|
||||
<loc>https://mikecarper.github.io/MeshCore/</loc>
|
||||
<lastmod>2026-08-06</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://meshcore-dev.github.io/meshcore/cli_commands/</loc>
|
||||
<lastmod>2026-06-15</lastmod>
|
||||
<loc>https://mikecarper.github.io/MeshCore/WiFi/</loc>
|
||||
<lastmod>2026-08-06</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://meshcore-dev.github.io/meshcore/companion_protocol/</loc>
|
||||
<lastmod>2026-06-15</lastmod>
|
||||
<loc>https://mikecarper.github.io/MeshCore/cli_build_matrix/</loc>
|
||||
<lastmod>2026-08-06</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://meshcore-dev.github.io/meshcore/docs/</loc>
|
||||
<lastmod>2026-06-15</lastmod>
|
||||
<loc>https://mikecarper.github.io/MeshCore/cli_command_availability/</loc>
|
||||
<lastmod>2026-08-06</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://meshcore-dev.github.io/meshcore/faq/</loc>
|
||||
<lastmod>2026-06-15</lastmod>
|
||||
<loc>https://mikecarper.github.io/MeshCore/cli_commands/</loc>
|
||||
<lastmod>2026-08-06</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://meshcore-dev.github.io/meshcore/kiss_modem_protocol/</loc>
|
||||
<lastmod>2026-06-15</lastmod>
|
||||
<loc>https://mikecarper.github.io/MeshCore/companion_protocol/</loc>
|
||||
<lastmod>2026-08-06</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://meshcore-dev.github.io/meshcore/nrf52_power_management/</loc>
|
||||
<lastmod>2026-06-15</lastmod>
|
||||
<loc>https://mikecarper.github.io/MeshCore/docs/</loc>
|
||||
<lastmod>2026-08-06</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://meshcore-dev.github.io/meshcore/number_allocations/</loc>
|
||||
<lastmod>2026-06-15</lastmod>
|
||||
<loc>https://mikecarper.github.io/MeshCore/faq/</loc>
|
||||
<lastmod>2026-08-06</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://meshcore-dev.github.io/meshcore/packet_format/</loc>
|
||||
<lastmod>2026-06-15</lastmod>
|
||||
<loc>https://mikecarper.github.io/MeshCore/flood_filtering/</loc>
|
||||
<lastmod>2026-08-06</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://meshcore-dev.github.io/meshcore/payloads/</loc>
|
||||
<lastmod>2026-06-15</lastmod>
|
||||
<loc>https://mikecarper.github.io/MeshCore/gps_tracking/</loc>
|
||||
<lastmod>2026-08-06</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://meshcore-dev.github.io/meshcore/qr_codes/</loc>
|
||||
<lastmod>2026-06-15</lastmod>
|
||||
<loc>https://mikecarper.github.io/MeshCore/halo_keymind_settings/</loc>
|
||||
<lastmod>2026-08-06</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://meshcore-dev.github.io/meshcore/stats_binary_frames/</loc>
|
||||
<lastmod>2026-06-15</lastmod>
|
||||
<loc>https://mikecarper.github.io/MeshCore/kiss_modem_protocol/</loc>
|
||||
<lastmod>2026-08-06</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://meshcore-dev.github.io/meshcore/terminal_chat_cli/</loc>
|
||||
<lastmod>2026-06-15</lastmod>
|
||||
<loc>https://mikecarper.github.io/MeshCore/nrf52_power_management/</loc>
|
||||
<lastmod>2026-08-06</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://mikecarper.github.io/MeshCore/number_allocations/</loc>
|
||||
<lastmod>2026-08-06</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://mikecarper.github.io/MeshCore/ota_easy/</loc>
|
||||
<lastmod>2026-08-06</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://mikecarper.github.io/MeshCore/ota_meshtower_v2_sdcard/</loc>
|
||||
<lastmod>2026-08-06</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://mikecarper.github.io/MeshCore/ota_protocol/</loc>
|
||||
<lastmod>2026-08-06</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://mikecarper.github.io/MeshCore/ota_user_guide/</loc>
|
||||
<lastmod>2026-08-06</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://mikecarper.github.io/MeshCore/packet_format/</loc>
|
||||
<lastmod>2026-08-06</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://mikecarper.github.io/MeshCore/payloads/</loc>
|
||||
<lastmod>2026-08-06</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://mikecarper.github.io/MeshCore/qr_codes/</loc>
|
||||
<lastmod>2026-08-06</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://mikecarper.github.io/MeshCore/stats_binary_frames/</loc>
|
||||
<lastmod>2026-08-06</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://mikecarper.github.io/MeshCore/telemetry_decoder/</loc>
|
||||
<lastmod>2026-08-06</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://mikecarper.github.io/MeshCore/terminal_chat_cli/</loc>
|
||||
<lastmod>2026-08-06</lastmod>
|
||||
</url>
|
||||
</urlset>
|
||||
Binary file not shown.
+312
-11
@@ -10,20 +10,20 @@
|
||||
|
||||
|
||||
|
||||
<link rel="canonical" href="https://meshcore-dev.github.io/meshcore/stats_binary_frames/">
|
||||
<link rel="canonical" href="https://mikecarper.github.io/MeshCore/stats_binary_frames/">
|
||||
|
||||
|
||||
<link rel="prev" href="../qr_codes/">
|
||||
|
||||
|
||||
<link rel="next" href="../terminal_chat_cli/">
|
||||
<link rel="next" href="../telemetry_decoder/">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="icon" href="../assets/images/favicon.png">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.6">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
|
||||
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.484c7ddc.min.css">
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.ec1eaa64.min.css">
|
||||
|
||||
|
||||
|
||||
@@ -52,6 +52,8 @@
|
||||
|
||||
<link rel="stylesheet" href="../_stylesheets/extra.css">
|
||||
|
||||
<link rel="stylesheet" href="../_stylesheets/telemetry_decoder.css">
|
||||
|
||||
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||||
|
||||
|
||||
@@ -161,13 +163,13 @@
|
||||
|
||||
|
||||
<div class="md-header__source">
|
||||
<a href="https://github.com/meshcore-dev/meshcore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
meshcore-dev/meshcore
|
||||
mikecarper/MeshCore
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -206,13 +208,13 @@
|
||||
</label>
|
||||
|
||||
<div class="md-nav__source">
|
||||
<a href="https://github.com/meshcore-dev/meshcore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
meshcore-dev/meshcore
|
||||
mikecarper/MeshCore
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -252,6 +254,87 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../WiFi/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
WiFi and MQTT by Firmware Type
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_build_matrix/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
CLI Availability by Firmware Build
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_command_availability/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
CLI Command Availability Matrix
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_commands/" class="md-nav__link">
|
||||
|
||||
@@ -360,6 +443,87 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../flood_filtering/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Repeater Flood Filtering and Moderation
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../gps_tracking/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
GPS Tracking
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../halo_keymind_settings/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Halo and Keymind Branch Settings
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../kiss_modem_protocol/" class="md-nav__link">
|
||||
|
||||
@@ -441,6 +605,114 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_easy/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Easy firmware updates over LoRa
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_meshtower_v2_sdcard/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
MeshTower V2 microSD LoRa OTA
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_protocol/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
MeshCore OTA - .mota container & LoRa protocol
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_user_guide/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Updating your node over the air (OTA) - user guide
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../packet_format/" class="md-nav__link">
|
||||
|
||||
@@ -802,6 +1074,33 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../telemetry_decoder/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Telemetry history decoder
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../terminal_chat_cli/" class="md-nav__link">
|
||||
|
||||
@@ -1072,7 +1371,7 @@
|
||||
|
||||
|
||||
|
||||
<a href="https://github.com/meshcore-dev/meshcore/edit/main/docs/stats_binary_frames.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
|
||||
<a href="https://github.com/mikecarper/MeshCore/edit/keymindCascade/docs/stats_binary_frames.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg>
|
||||
</a>
|
||||
@@ -1383,7 +1682,7 @@
|
||||
<li>Counters are cumulative from boot and may wrap.</li>
|
||||
<li><code>recv = flood_rx + direct_rx</code></li>
|
||||
<li><code>sent = flood_tx + direct_tx</code></li>
|
||||
<li>Clients should accept frame length ≥ 26; if length ≥ 30, parse <code>recv_errors</code> at offset 26.</li>
|
||||
<li>Clients should accept frame length >= 26; if length >= 30, parse <code>recv_errors</code> at offset 26.</li>
|
||||
</ul>
|
||||
<h3 id="example-structure-cc_2">Example Structure (C/C++)</h3>
|
||||
<pre><code class="language-c">struct StatsPackets {
|
||||
@@ -1628,7 +1927,9 @@ function parseStatsPackets(buffer: ArrayBuffer): StatsPackets {
|
||||
<script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["content.action.edit", "content.code.copy", "search.highlight", "search.suggest"], "search": "../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
||||
|
||||
|
||||
<script src="../assets/javascripts/bundle.79ae519e.min.js"></script>
|
||||
<script src="../assets/javascripts/bundle.d7400e89.min.js"></script>
|
||||
|
||||
<script src="../_javascript/telemetry_decoder.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+312
-11
@@ -10,10 +10,10 @@
|
||||
|
||||
|
||||
|
||||
<link rel="canonical" href="https://meshcore-dev.github.io/meshcore/terminal_chat_cli/">
|
||||
<link rel="canonical" href="https://mikecarper.github.io/MeshCore/terminal_chat_cli/">
|
||||
|
||||
|
||||
<link rel="prev" href="../stats_binary_frames/">
|
||||
<link rel="prev" href="../telemetry_decoder/">
|
||||
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
|
||||
<link rel="icon" href="../assets/images/favicon.png">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.6">
|
||||
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7">
|
||||
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.484c7ddc.min.css">
|
||||
<link rel="stylesheet" href="../assets/stylesheets/main.ec1eaa64.min.css">
|
||||
|
||||
|
||||
|
||||
@@ -50,6 +50,8 @@
|
||||
|
||||
<link rel="stylesheet" href="../_stylesheets/extra.css">
|
||||
|
||||
<link rel="stylesheet" href="../_stylesheets/telemetry_decoder.css">
|
||||
|
||||
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
|
||||
|
||||
|
||||
@@ -159,13 +161,13 @@
|
||||
|
||||
|
||||
<div class="md-header__source">
|
||||
<a href="https://github.com/meshcore-dev/meshcore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
meshcore-dev/meshcore
|
||||
mikecarper/MeshCore
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -204,13 +206,13 @@
|
||||
</label>
|
||||
|
||||
<div class="md-nav__source">
|
||||
<a href="https://github.com/meshcore-dev/meshcore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<a href="https://github.com/mikecarper/MeshCore/" title="Go to repository" class="md-source" data-md-component="source">
|
||||
<div class="md-source__icon md-icon">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
|
||||
</div>
|
||||
<div class="md-source__repository">
|
||||
meshcore-dev/meshcore
|
||||
mikecarper/MeshCore
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
@@ -250,6 +252,87 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../WiFi/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
WiFi and MQTT by Firmware Type
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_build_matrix/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
CLI Availability by Firmware Build
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_command_availability/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
CLI Command Availability Matrix
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../cli_commands/" class="md-nav__link">
|
||||
|
||||
@@ -358,6 +441,87 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../flood_filtering/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Repeater Flood Filtering and Moderation
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../gps_tracking/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
GPS Tracking
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../halo_keymind_settings/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Halo and Keymind Branch Settings
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../kiss_modem_protocol/" class="md-nav__link">
|
||||
|
||||
@@ -439,6 +603,114 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_easy/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Easy firmware updates over LoRa
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_meshtower_v2_sdcard/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
MeshTower V2 microSD LoRa OTA
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_protocol/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
MeshCore OTA - .mota container & LoRa protocol
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../ota_user_guide/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Updating your node over the air (OTA) - user guide
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../packet_format/" class="md-nav__link">
|
||||
|
||||
@@ -545,6 +817,33 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../telemetry_decoder/" class="md-nav__link">
|
||||
|
||||
|
||||
|
||||
<span class="md-ellipsis">
|
||||
|
||||
|
||||
Telemetry history decoder
|
||||
|
||||
|
||||
|
||||
</span>
|
||||
|
||||
|
||||
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -613,7 +912,7 @@
|
||||
|
||||
|
||||
|
||||
<a href="https://github.com/meshcore-dev/meshcore/edit/main/docs/terminal_chat_cli.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
|
||||
<a href="https://github.com/mikecarper/MeshCore/edit/keymindCascade/docs/terminal_chat_cli.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg>
|
||||
</a>
|
||||
@@ -643,7 +942,7 @@
|
||||
<p>Sets the transmit duty cycle limit (1-100%). Example: <code>set dutycycle 10</code> for 10%.</p>
|
||||
<pre><code>set af {air-time-factor}
|
||||
</code></pre>
|
||||
<p>Sets the transmit air-time-factor. Deprecated — use <code>set dutycycle</code> instead.</p>
|
||||
<p>Sets the transmit air-time-factor. Deprecated - use <code>set dutycycle</code> instead.</p>
|
||||
<pre><code>time {epoch-secs}
|
||||
</code></pre>
|
||||
<p>Set the device clock using UNIX epoch seconds. Example: time 1738242833</p>
|
||||
@@ -732,7 +1031,9 @@
|
||||
<script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["content.action.edit", "content.code.copy", "search.highlight", "search.suggest"], "search": "../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
|
||||
|
||||
|
||||
<script src="../assets/javascripts/bundle.79ae519e.min.js"></script>
|
||||
<script src="../assets/javascripts/bundle.d7400e89.min.js"></script>
|
||||
|
||||
<script src="../_javascript/telemetry_decoder.js"></script>
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
Reference in New Issue
Block a user