Compare commits

..

No commits in common. "master" and "v2.3.3" have entirely different histories.

60 changed files with 803 additions and 6465 deletions

View file

@ -10,21 +10,3 @@
- [ ] All top level messages commented - [ ] All top level messages commented
- [ ] All enum members have unique descriptions - [ ] All enum members have unique descriptions
### New Hardware Model Acceptance Policy
Due to limited availability and ongoing support, new Hardware Models will only be accepted from [Meshtastic Backers and Partners](https://meshtastic.com/). The Meshtastic team reserves the right to make exceptions to this policy.
#### Alternative for Community Contributors
You are welcome to use one of the existing DIY hardware models in your PlatformIO environment and create a pull request in the firmware project. Please note the following conditions:
- The device will **not** be officially supported by the core Meshtastic team.
- The device will **not** appear in the [Web Flasher](https://flasher.meshtastic.org/) or Github release assets.
- You will be responsible for ongoing maintenance and support.
- Community-contributed / DIY hardware models are considered experimental and will likely have limited or no testing.
#### Getting Official Support
To have your hardware model officially supported and included in the Meshtastic ecosystem, consider becoming a Meshtastic Backer or Partner. Visit [meshtastic.com](https://meshtastic.com/) for more information about partnership opportunities.

View file

@ -16,9 +16,12 @@ jobs:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Push to schema registry - name: Setup Buf
uses: bufbuild/buf-action@v1.2.0 uses: bufbuild/buf-setup-action@v1.26.1
with: with:
github_token: ${{ github.token }} github_token: ${{ github.token }}
token: ${{ secrets.BUF_TOKEN }}
push: true - name: Push to schema registry
uses: bufbuild/buf-push-action@v1.1.1
with:
buf_token: ${{ secrets.BUF_TOKEN }}

View file

@ -50,7 +50,7 @@ jobs:
echo "NEW_VERSION=v$MAJOR.$MINOR.$PATCH" >> $GITHUB_OUTPUT echo "NEW_VERSION=v$MAJOR.$MINOR.$PATCH" >> $GITHUB_OUTPUT
- name: Create release - name: Create release
uses: ncipollo/release-action@v1 uses: ncipollo/release-action@v1.13.0
with: with:
name: Meshtastic Protobufs ${{ steps.version.outputs.NEW_VERSION }} name: Meshtastic Protobufs ${{ steps.version.outputs.NEW_VERSION }}
tag: ${{ steps.version.outputs.NEW_VERSION }} tag: ${{ steps.version.outputs.NEW_VERSION }}
@ -58,14 +58,14 @@ jobs:
token: ${{ github.token }} token: ${{ github.token }}
- name: Setup Buf - name: Setup Buf
uses: bufbuild/buf-action@v1.2.0 uses: bufbuild/buf-setup-action@v1.26.1
with: with:
github_token: ${{ github.token }} github_token: ${{ github.token }}
token: ${{ secrets.BUF_TOKEN }}
setup_only: true
- name: Push to schema registry - name: Push to schema registry
env: # uses: bufbuild/buf-push-action@v1
BUF_TOKEN: ${{ secrets.BUF_TOKEN }} # with:
# buf_token: ${{ secrets.BUF_TOKEN }}
run: | run: |
export BUF_TOKEN=${{ secrets.BUF_TOKEN }}
buf push --tag ${{ steps.version.outputs.NEW_VERSION }} buf push --tag ${{ steps.version.outputs.NEW_VERSION }}

View file

@ -1,263 +1,30 @@
name: Publish to JSR & NPM name: Push new version to schema registry
permissions:
contents: read
on: on:
push: push:
tags: tags:
- "v*" - "**"
workflow_dispatch:
inputs:
version:
description: "Version to publish (e.g. v1.2.3). Used when manually dispatching."
required: false
type: string
dry_run:
description: "Dry run mode - generate artifacts without publishing"
required: false
type: boolean
default: false
permissions:
contents: write
id-token: write
jobs: jobs:
codegen: push_to_registry:
runs-on: ubuntu-24.04 runs-on: ubuntu-latest
outputs:
version: ${{ steps.version.outputs.VERSION }}
tag: ${{ steps.version.outputs.TAG }}
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Determine version
id: version
run: |
set -euo pipefail
if [ "${{ github.ref_type }}" = "tag" ]; then
TAG="${{ github.ref_name }}"
elif [ -n "${{ inputs.version || '' }}" ]; then
TAG="${{ inputs.version }}"
else
echo "No tag ref and no 'version' input. Provide a tag (push a tag) or pass inputs.version." >&2
exit 1
fi
VERSION="${TAG#v}"
echo "VERSION=$VERSION" >> "$GITHUB_OUTPUT"
echo "TAG=$TAG" >> "$GITHUB_OUTPUT"
echo "Resolved VERSION=$VERSION, TAG=$TAG"
- name: Setup Buf
uses: bufbuild/buf-setup-action@main
with:
github_token: ${{ github.token }}
- name: Generate protobuf code
run: buf generate
- name: Move generated files to lib root
run: |
set -euo pipefail
src_dir="packages/ts/lib/meshtastic"
dest_dir="packages/ts/lib"
if [ ! -d "$src_dir" ]; then
echo "Expected source directory '$src_dir' does not exist. 'buf generate' may have failed or changed its output paths." >&2
exit 1
fi
if ! compgen -G "$src_dir"/*_pb.ts > /dev/null; then
echo "No '*_pb.ts' files found in '$src_dir'. 'buf generate' may have produced no TypeScript files or changed their naming." >&2
exit 1
fi
mv "$src_dir"/*_pb.ts "$dest_dir"/
- name: Show generated files
run: |
echo "=== packages/ts contents ==="
ls -la packages/ts/
echo "=== packages/ts/lib contents ==="
ls -la packages/ts/lib/ || echo "lib folder not found"
- name: Set package versions
run: |
set -euo pipefail
VERSION="${{ steps.version.outputs.VERSION }}"
for f in packages/ts/deno.json packages/ts/package.json; do
test -f "$f" || { echo "Missing $f" >&2; exit 1; }
sed -i "s/__PACKAGE_VERSION__/${VERSION}/g" "$f"
done
- name: Copy license & README
run: cp LICENSE README.md packages/ts/
- name: Upload TypeScript code
uses: actions/upload-artifact@v4
with:
name: ts_code
path: packages/ts
build-typescript:
runs-on: ubuntu-24.04
needs: codegen
steps:
- name: Download TypeScript code
uses: actions/download-artifact@v4
with:
name: ts_code
- name: Show downloaded files
run: |
echo "=== Working directory ==="
pwd
echo "=== Contents ==="
ls -la
echo "=== lib/ contents ==="
ls -la lib/ || echo "lib folder not found"
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
- name: Install dependencies
run: npm install
- name: Build with tsdown
run: npm run build
- name: Show build output
run: |
echo "=== Build output ==="
ls -la
ls -la dist/
- name: Upload built NPM package
uses: actions/upload-artifact@v4
with:
name: npm_package
path: |
dist/
package.json
LICENSE
README.md
- name: Upload JSR package
uses: actions/upload-artifact@v4
with:
name: jsr_package
path: |
lib/
mod.ts
deno.json
LICENSE
README.md
create-release-zips:
runs-on: ubuntu-24.04
needs: [codegen, build-typescript]
steps:
- name: Download NPM package
uses: actions/download-artifact@v4
with:
name: npm_package
path: npm_package
- name: Download JSR package
uses: actions/download-artifact@v4
with:
name: jsr_package
path: jsr_package
- name: Create zip archives
run: |
cd npm_package && zip -r ../meshtastic-protobufs-npm.zip . && cd ..
cd jsr_package && zip -r ../meshtastic-protobufs-jsr.zip . && cd ..
- name: Upload release zips
uses: actions/upload-artifact@v4
with:
name: release_zips
path: |
meshtastic-protobufs-npm.zip
meshtastic-protobufs-jsr.zip
upload-release-assets:
runs-on: ubuntu-24.04
needs: [codegen, create-release-zips]
if: ${{ !inputs.dry_run }}
steps:
- name: Download release zips
uses: actions/download-artifact@v4
with:
name: release_zips
- name: Upload assets to GitHub release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ needs.codegen.outputs.tag }}
files: |
meshtastic-protobufs-npm.zip
meshtastic-protobufs-jsr.zip
push-buf-registry:
runs-on: ubuntu-24.04
needs: codegen
if: ${{ !inputs.dry_run }}
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Setup Buf - name: Setup Buf
uses: bufbuild/buf-setup-action@main uses: bufbuild/buf-setup-action@v1.26.1
with: with:
github_token: ${{ github.token }} github_token: ${{ github.token }}
- name: Push to schema registry - name: Push to schema registry
env: # uses: bufbuild/buf-push-action@v1
BUF_TOKEN: ${{ secrets.BUF_TOKEN }} # with:
run: buf push --tag ${{ needs.codegen.outputs.tag }} # buf_token: ${{ secrets.BUF_TOKEN }}
run: |
publish-npm: export BUF_TOKEN=${{ secrets.BUF_TOKEN }}
runs-on: ubuntu-24.04 buf push --tag ${{ github.ref_name }}
needs: [codegen, build-typescript]
if: ${{ !inputs.dry_run }}
steps:
- name: Download NPM package
uses: actions/download-artifact@v4
with:
name: npm_package
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
registry-url: "https://registry.npmjs.org"
- name: Publish to NPM
run: npm publish --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
publish-jsr:
runs-on: ubuntu-24.04
needs: [codegen, build-typescript]
if: ${{ !inputs.dry_run }}
permissions:
contents: read
id-token: write
steps:
- name: Download JSR package
uses: actions/download-artifact@v4
with:
name: jsr_package
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
- name: Publish to JSR
run: npx jsr publish

View file

@ -2,7 +2,6 @@ name: pull-request
permissions: permissions:
contents: read contents: read
pull-requests: write
on: pull_request on: pull_request
jobs: jobs:
@ -13,11 +12,16 @@ jobs:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Buf PR Checks - name: Setup Buf
uses: bufbuild/buf-action@v1.2.0 uses: bufbuild/buf-setup-action@v1.26.1
with: with:
github_token: ${{ github.token }} github_token: ${{ github.token }}
token: ${{ secrets.BUF_TOKEN }}
format: true - name: Lint
lint: true uses: bufbuild/buf-lint-action@v1.0.3
breaking: true
- name: Push to schema registry
uses: bufbuild/buf-push-action@v1.1.1
with:
buf_token: ${{ secrets.BUF_TOKEN }}
draft: ${{ github.ref_name != 'master'}}

5
.gitignore vendored
View file

@ -1,5 +0,0 @@
.DS_Store
# Generated protobuf files
packages/ts/lib/
.bin/

8
.trunk/.gitignore vendored Normal file
View file

@ -0,0 +1,8 @@
*out
*logs
*actions
*notifications
*tools
plugins
user_trunk.yaml
user.yaml

View file

@ -0,0 +1,10 @@
# Autoformatter friendly markdownlint config (all formatting rules disabled)
default: true
blank_lines: false
bullet: false
html: false
indentation: false
line_length: false
spaces: false
url: false
whitespace: false

View file

@ -0,0 +1,10 @@
rules:
quoted-strings:
required: only-when-needed
extra-allowed: ["{|}"]
empty-values:
forbid-in-block-mappings: true
forbid-in-flow-mappings: true
key-duplicates: {}
octal-values:
forbid-implicit-octal: true

33
.trunk/trunk.yaml Normal file
View file

@ -0,0 +1,33 @@
version: 0.1
cli:
version: 1.16.2
plugins:
sources:
- id: trunk
ref: v1.2.5
uri: https://github.com/trunk-io/plugins
lint:
enabled:
- checkov@2.4.9
- trivy@0.45.1
- trufflehog@3.57.0
- yamllint@1.32.0
- buf-lint@1.26.1
- buf-breaking@1.26.1
- actionlint@1.6.26
- markdownlint@0.37.0
- prettier@3.0.3
- gitleaks@8.18.0
- git-diff-check
runtimes:
enabled:
- python@3.10.8
- go@1.21.0
- node@18.12.1
actions:
disabled:
- trunk-announce
- trunk-check-pre-push
- trunk-fmt-pre-commit
enabled:
- trunk-upgrade-available

View file

@ -1,3 +1,3 @@
{ {
"recommendations": ["pbkit.vscode-pbkit", "bufbuild.vscode-buf"] "recommendations": ["trunk.io", "pbkit.vscode-pbkit", "bufbuild.vscode-buf"]
} }

View file

@ -1,4 +1,4 @@
{ {
"editor.formatOnSave": true, "editor.formatOnSave": true,
"editor.defaultFormatter": "pbkit.vscode-pbkit" "editor.defaultFormatter": "trunk.io"
} }

View file

@ -1,5 +0,0 @@
version: v2
plugins:
- remote: buf.build/bufbuild/es:v2.1.0
out: packages/ts/lib
opt: target=ts,import_extension=.ts

View file

@ -1,23 +1,14 @@
version: v2 version: v1
modules: name: buf.build/meshtastic/protobufs
- path: . deps: []
name: buf.build/meshtastic/protobufs build:
excludes: excludes: []
- .trunk/ breaking:
- meshtastic/device_only/ use:
lint: - FILE
use: lint:
- MINIMAL ignore_only:
except: PACKAGE_DEFINED:
- PACKAGE_NO_IMPORT_CYCLE - nanopb.proto
ignore_only: use:
PACKAGE_DEFINED: - MINIMAL
- nanopb.proto
disallow_comment_ignores: true
breaking:
use:
- FILE
except:
- EXTENSION_NO_DELETE
- FIELD_SAME_DEFAULT

View file

@ -1,14 +1,5 @@
*AdminMessage.payload_variant anonymous_oneof:true *AdminMessage.payload_variant anonymous_oneof:true
*AdminMessage.session_passkey max_size:8
*AdminMessage.OTAEvent.ota_hash max_size:32
*AdminMessage.InputEvent.event_code int_size:8
*AdminMessage.InputEvent.kb_char int_size:8
*AdminMessage.InputEvent.touch_x int_size:16
*AdminMessage.InputEvent.touch_y int_size:16
*AdminMessage.set_canned_message_module_messages max_size:201 *AdminMessage.set_canned_message_module_messages max_size:201
*AdminMessage.get_canned_message_module_messages_response max_size:201 *AdminMessage.get_canned_message_module_messages_response max_size:201
*AdminMessage.delete_file_request max_size:201 *AdminMessage.delete_file_request max_size:201
@ -17,5 +8,5 @@
*AdminMessage.get_ringtone_response max_size:231 *AdminMessage.get_ringtone_response max_size:231
*HamParameters.call_sign max_size:8 *HamParameters.call_sign max_size:8
*HamParameters.short_name max_size:5 *HamParameters.short_name max_size:6
*NodeRemoteHardwarePinsResponse.node_remote_hardware_pins max_count:16 *NodeRemoteHardwarePinsResponse.node_remote_hardware_pins max_count:16

View file

@ -2,18 +2,16 @@ syntax = "proto3";
package meshtastic; package meshtastic;
/* trunk-ignore(buf-lint/COMPILE) */
import "meshtastic/channel.proto"; import "meshtastic/channel.proto";
import "meshtastic/config.proto"; import "meshtastic/config.proto";
import "meshtastic/connection_status.proto"; import "meshtastic/connection_status.proto";
import "meshtastic/device_ui.proto";
import "meshtastic/mesh.proto"; import "meshtastic/mesh.proto";
import "meshtastic/module_config.proto"; import "meshtastic/module_config.proto";
option csharp_namespace = "Meshtastic.Protobufs"; option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated"; option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "AdminProtos"; option java_outer_classname = "AdminProtos";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
/* /*
@ -22,13 +20,6 @@ option swift_prefix = "";
* (Prior to 1.2 these operations were done via special ToRadio operations) * (Prior to 1.2 these operations were done via special ToRadio operations)
*/ */
message AdminMessage { message AdminMessage {
/*
* The node generates this key and sends it with any get_x_response packets.
* The client MUST include the same key with any set_x commands. Key expires after 300 seconds.
* Prevents replay attacks for admin messages.
*/
bytes session_passkey = 101;
/* /*
* TODO: REPLACE * TODO: REPLACE
*/ */
@ -67,21 +58,6 @@ message AdminMessage {
* TODO: REPLACE * TODO: REPLACE
*/ */
BLUETOOTH_CONFIG = 6; BLUETOOTH_CONFIG = 6;
/*
* TODO: REPLACE
*/
SECURITY_CONFIG = 7;
/*
* Session key config
*/
SESSIONKEY_CONFIG = 8;
/*
* device-ui config
*/
DEVICEUI_CONFIG = 9;
} }
/* /*
@ -152,72 +128,6 @@ message AdminMessage {
* TODO: REPLACE * TODO: REPLACE
*/ */
PAXCOUNTER_CONFIG = 12; PAXCOUNTER_CONFIG = 12;
/*
* TODO: REPLACE
*/
STATUSMESSAGE_CONFIG = 13;
/*
* Traffic management module config
*/
TRAFFICMANAGEMENT_CONFIG = 14;
/*
* TAK module config
*/
TAK_CONFIG = 15;
}
enum BackupLocation {
/*
* Backup to the internal flash
*/
FLASH = 0;
/*
* Backup to the SD card
*/
SD = 1;
}
/*
* Input event message to be sent to the node.
*/
message InputEvent {
/*
* The input event code
*/
uint32 event_code = 1;
/*
* Keyboard character code
*/
uint32 kb_char = 2;
/*
* The touch X coordinate
*/
uint32 touch_x = 3;
/*
* The touch Y coordinate
*/
uint32 touch_y = 4;
}
/*
* User is requesting an over the air update.
* Node will reboot into the OTA loader
*/
message OTAEvent {
/*
* Tell the node to reboot into OTA mode for firmware update via BLE or WiFi (ESP32 only for now)
*/
OTAMode reboot_ota_mode = 1;
/*
* A 32 byte hash of the OTA firmware.
* Used to verify the integrity of the firmware before applying an update.
*/
bytes ota_hash = 2;
} }
/* /*
@ -331,32 +241,6 @@ message AdminMessage {
*/ */
string delete_file_request = 22; string delete_file_request = 22;
/*
* Set zero and offset for scale chips
*/
uint32 set_scale = 23;
/*
* Backup the node's preferences
*/
BackupLocation backup_preferences = 24;
/*
* Restore the node's preferences
*/
BackupLocation restore_preferences = 25;
/*
* Remove backups of the node's preferences
*/
BackupLocation remove_backup_preferences = 26;
/*
* Send an input event to the node.
* This is used to trigger physical input events like button presses, touch events, etc.
*/
InputEvent send_input_event = 27;
/* /*
* Set the owner for this node * Set the owner for this node
*/ */
@ -395,7 +279,7 @@ message AdminMessage {
* Remove the node by the specified node-num from the NodeDB on the device * Remove the node by the specified node-num from the NodeDB on the device
*/ */
uint32 remove_by_nodenum = 38; uint32 remove_by_nodenum = 38;
/* /*
* Set specified node-num to be favorited on the NodeDB on the device * Set specified node-num to be favorited on the NodeDB on the device
*/ */
@ -412,46 +296,10 @@ message AdminMessage {
Position set_fixed_position = 41; Position set_fixed_position = 41;
/* /*
* Clear fixed position coordinates and then set position.fixed_position = false * Clear fixed position coordinates and then set position.fixed_position = false
*/ */
bool remove_fixed_position = 42; bool remove_fixed_position = 42;
/*
* Set time only on the node
* Convenience method to set the time on the node (as Net quality) without any other position data
*/
fixed32 set_time_only = 43;
/*
* Tell the node to send the stored ui data.
*/
bool get_ui_config_request = 44;
/*
* Reply stored device ui data.
*/
DeviceUIConfig get_ui_config_response = 45;
/*
* Tell the node to store UI data persistently.
*/
DeviceUIConfig store_ui_config = 46;
/*
* Set specified node-num to be ignored on the NodeDB on the device
*/
uint32 set_ignored_node = 47;
/*
* Set specified node-num to be un-ignored on the NodeDB on the device
*/
uint32 remove_ignored_node = 48;
/*
* Set specified node-num to be muted
*/
uint32 toggle_muted_node = 49;
/* /*
* Begins an edit transaction for config, module config, owner, and channel settings changes * Begins an edit transaction for config, module config, owner, and channel settings changes
* This will delay the standard *implicit* save to the file system and subsequent reboot behavior until committed (commit_edit_settings) * This will delay the standard *implicit* save to the file system and subsequent reboot behavior until committed (commit_edit_settings)
@ -463,27 +311,11 @@ message AdminMessage {
*/ */
bool commit_edit_settings = 65; bool commit_edit_settings = 65;
/*
* Add a contact (User) to the nodedb
*/
SharedContact add_contact = 66;
/*
* Initiate or respond to a key verification request
*/
KeyVerificationAdmin key_verification = 67;
/*
* Tell the node to factory reset config everything; all device state and configuration will be returned to factory defaults and BLE bonds will be cleared.
*/
int32 factory_reset_device = 94;
/* /*
* Tell the node to reboot into the OTA Firmware in this many seconds (or <0 to cancel reboot) * Tell the node to reboot into the OTA Firmware in this many seconds (or <0 to cancel reboot)
* Only Implemented for ESP32 Devices. This needs to be issued to send a new main firmware via bluetooth. * Only Implemented for ESP32 Devices. This needs to be issued to send a new main firmware via bluetooth.
* Deprecated in favor of reboot_ota_mode in 2.7.17
*/ */
int32 reboot_ota_seconds = 95 [deprecated = true]; int32 reboot_ota_seconds = 95;
/* /*
* This message is only supported for the simulator Portduino build. * This message is only supported for the simulator Portduino build.
@ -502,48 +334,17 @@ message AdminMessage {
int32 shutdown_seconds = 98; int32 shutdown_seconds = 98;
/* /*
* Tell the node to factory reset config; all device state and configuration will be returned to factory defaults; BLE bonds will be preserved. * Tell the node to factory reset, all device settings will be returned to factory defaults.
*/ */
int32 factory_reset_config = 99; int32 factory_reset = 99;
/* /*
* Tell the node to reset the nodedb. * Tell the node to reset the nodedb.
* When true, favorites are preserved through reset.
*/ */
bool nodedb_reset = 100; int32 nodedb_reset = 100;
/*
* Tell the node to reset into the OTA Loader
*/
OTAEvent ota_request = 102;
/*
* Parameters and sensor configuration
*/
SensorConfig sensor_config = 103;
} }
} }
/*
* Firmware update mode for OTA updates
*/
enum OTAMode {
/*
* Do not reboot into OTA mode
*/
NO_REBOOT_OTA = 0;
/*
* Reboot into OTA mode for BLE firmware update
*/
OTA_BLE = 1;
/*
* Reboot into OTA mode for WiFi firmware update
*/
OTA_WIFI = 2;
}
/* /*
* Parameters for setting up Meshtastic for ameteur radio usage * Parameters for setting up Meshtastic for ameteur radio usage
*/ */
@ -580,183 +381,3 @@ message NodeRemoteHardwarePinsResponse {
*/ */
repeated NodeRemoteHardwarePin node_remote_hardware_pins = 1; repeated NodeRemoteHardwarePin node_remote_hardware_pins = 1;
} }
message SharedContact {
/*
* The node number of the contact
*/
uint32 node_num = 1;
/*
* The User of the contact
*/
User user = 2;
/*
* Add this contact to the blocked / ignored list
*/
bool should_ignore = 3;
/*
* Set the IS_KEY_MANUALLY_VERIFIED bit
*/
bool manually_verified = 4;
}
/*
* This message is used by a client to initiate or complete a key verification
*/
message KeyVerificationAdmin {
/*
* Three stages of this request.
*/
enum MessageType {
/*
* This is the first stage, where a client initiates
*/
INITIATE_VERIFICATION = 0;
/*
* After the nonce has been returned over the mesh, the client prompts for the security number
* And uses this message to provide it to the node.
*/
PROVIDE_SECURITY_NUMBER = 1;
/*
* Once the user has compared the verification message, this message notifies the node.
*/
DO_VERIFY = 2;
/*
* This is the cancel path, can be taken at any point
*/
DO_NOT_VERIFY = 3;
}
MessageType message_type = 1;
/*
* The nodenum we're requesting
*/
uint32 remote_nodenum = 2;
/*
* The nonce is used to track the connection
*/
uint64 nonce = 3;
/*
* The 4 digit code generated by the remote node, and communicated outside the mesh
*/
optional uint32 security_number = 4;
}
message SensorConfig {
/*
* SCD4X CO2 Sensor configuration
*/
SCD4X_config scd4x_config = 1;
/*
* SEN5X PM Sensor configuration
*/
SEN5X_config sen5x_config = 2;
/*
* SCD30 CO2 Sensor configuration
*/
SCD30_config scd30_config = 3;
/*
* SHTXX temperature and relative humidity sensor configuration
*/
SHTXX_config shtxx_config = 4;
}
message SCD4X_config {
/*
* Set Automatic self-calibration enabled
*/
optional bool set_asc = 1;
/*
* Recalibration target CO2 concentration in ppm (FRC or ASC)
*/
optional uint32 set_target_co2_conc = 2;
/*
* Reference temperature in degC
*/
optional float set_temperature = 3;
/*
* Altitude of sensor in meters above sea level. 0 - 3000m (overrides ambient pressure)
*/
optional uint32 set_altitude = 4;
/*
* Sensor ambient pressure in Pa. 70000 - 120000 Pa (overrides altitude)
*/
optional uint32 set_ambient_pressure = 5;
/*
* Perform a factory reset of the sensor
*/
optional bool factory_reset = 6;
/*
* Power mode for sensor (true for low power, false for normal)
*/
optional bool set_power_mode = 7;
}
message SEN5X_config {
/*
* Reference temperature in degC
*/
optional float set_temperature = 1;
/*
* One-shot mode (true for low power - one-shot mode, false for normal - continuous mode)
*/
optional bool set_one_shot_mode = 2;
}
message SCD30_config {
/*
* Set Automatic self-calibration enabled
*/
optional bool set_asc = 1;
/*
* Recalibration target CO2 concentration in ppm (FRC or ASC)
*/
optional uint32 set_target_co2_conc = 2;
/*
* Reference temperature in degC
*/
optional float set_temperature = 3;
/*
* Altitude of sensor in meters above sea level. 0 - 3000m (overrides ambient pressure)
*/
optional uint32 set_altitude = 4;
/*
* Power mode for sensor (true for low power, false for normal)
*/
optional uint32 set_measurement_interval = 5;
/*
* Perform a factory reset of the sensor
*/
optional bool soft_reset = 6;
}
message SHTXX_config {
/*
* Accuracy mode (0 = low, 1 = medium, 2 = high)
*/
optional uint32 set_accuracy = 1;
}

View file

@ -8,7 +8,7 @@ import "meshtastic/config.proto";
option csharp_namespace = "Meshtastic.Protobufs"; option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated"; option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "AppOnlyProtos"; option java_outer_classname = "AppOnlyProtos";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
/* /*

View file

@ -3,108 +3,4 @@
*Status.battery int_size:8 *Status.battery int_size:8
*PLI.course int_size:16 *PLI.course int_size:16
*GeoChat.message max_size:200 *GeoChat.message max_size:200
*GeoChat.to max_size:120 *GeoChat.to max_size:120
*GeoChat.to_callsign max_size:120
*TAKPacket.detail max_size:220
*TAKPacketV2.cot_type_str max_size:32
*TAKPacketV2.callsign max_size:120
*TAKPacketV2.uid max_size:48
*TAKPacketV2.device_callsign max_size:120
*TAKPacketV2.tak_version max_size:64
*TAKPacketV2.tak_device max_size:32
*TAKPacketV2.tak_platform max_size:32
*TAKPacketV2.tak_os max_size:16
*TAKPacketV2.endpoint max_size:32
*TAKPacketV2.phone max_size:20
*TAKPacketV2.raw_detail max_size:220
*TAKPacketV2.stale_seconds int_size:16
*TAKPacketV2.battery int_size:8
*TAKPacketV2.course int_size:16
*AircraftTrack.icao max_size:8
*AircraftTrack.registration max_size:16
*AircraftTrack.flight max_size:16
*AircraftTrack.aircraft_type max_size:8
*AircraftTrack.squawk int_size:16
*AircraftTrack.category max_size:4
*AircraftTrack.cot_host_id max_size:64
# --- Typed geometry payloads (v2 protocol extension) ---
#
# CotGeoPoint: sint32 deltas from the enclosing event's latitude_i/longitude_i.
# For nearby vertices (telestrations, small rectangles) the varint+zigzag
# encoding is 2-3 bytes per field, cutting telestration vertex data in half
# versus sfixed32. int_size:32 keeps the C type a plain int32.
# Named with a `Cot` prefix to avoid a collision with `meshtastic.GeoPoint`
# in device_ui.proto, which is an unrelated zoom/latitude/longitude type.
*CotGeoPoint.lat_delta_i int_size:32
*CotGeoPoint.lon_delta_i int_size:32
#
# DrawnShape pool sizing. `kind` and `style` are varint enums (no int_size
# needed). stroke_color / fill_color are Team enum, also varint. stroke_argb
# / fill_argb are fixed32 (always 4 bytes on the wire). Vertex pool is 32
# entries x ~12B each ~= 384B worst case. Telestrations beyond 32 vertices
# MUST be pre-truncated by the sender with `truncated = true`.
*DrawnShape.vertices max_count:32
*DrawnShape.major_cm int_size:32
*DrawnShape.minor_cm int_size:32
*DrawnShape.angle_deg int_size:16
*DrawnShape.stroke_weight_x10 int_size:16
*DrawnShape.bullseye_distance_dm int_size:32
*DrawnShape.bullseye_bearing_ref int_size:8
*DrawnShape.bullseye_flags int_size:8
*DrawnShape.bullseye_uid_ref max_size:48
# Marker pool sizing. Strings bounded tight to keep fixed pool small on
# ESP32 nanopb. parent_uid matches existing TAKPacketV2.uid cap (48).
# iconset fits "f7f71666-8b28-4b57-9fbb-e38e61d33b79/Google/hiker.png"
# (~52 chars) with slack.
*Marker.parent_uid max_size:48
*Marker.parent_type max_size:24
*Marker.parent_callsign max_size:24
*Marker.iconset max_size:80
# RangeAndBearing pool sizing.
*RangeAndBearing.anchor_uid max_size:48
*RangeAndBearing.range_cm int_size:32
*RangeAndBearing.bearing_cdeg int_size:16
*RangeAndBearing.stroke_weight_x10 int_size:16
# Route pool sizing. 16 links x ~24B each ~= 384B worst case. prefix is
# ATAK's short waypoint name prefix ("CP", "RP", etc.) — 8 chars is plenty.
*Route.links max_count:16
*Route.prefix max_size:8
*Route.stroke_weight_x10 int_size:16
*Route.Link.uid max_size:48
*Route.Link.callsign max_size:16
*Route.Link.link_type int_size:8
# GeoChat receipt extension. receipt_for_uid matches TAKPacketV2.uid caps.
*GeoChat.receipt_for_uid max_size:48
# CasevacReport pool sizing. All numeric fields are small (0..255 for
# patient counts, 1 byte for flags bitfields); strings are short.
*CasevacReport.equipment_flags int_size:8
*CasevacReport.terrain_flags int_size:8
*CasevacReport.litter_patients int_size:8
*CasevacReport.ambulatory_patients int_size:8
*CasevacReport.us_military int_size:8
*CasevacReport.us_civilian int_size:8
*CasevacReport.non_us_military int_size:8
*CasevacReport.non_us_civilian int_size:8
*CasevacReport.epw int_size:8
*CasevacReport.child int_size:8
*CasevacReport.zone_marker max_size:16
*CasevacReport.frequency max_size:16
# EmergencyAlert pool sizing. UIDs match TAKPacketV2.uid caps (48).
*EmergencyAlert.authoring_uid max_size:48
*EmergencyAlert.cancel_reference_uid max_size:48
# TaskRequest pool sizing. All four strings are capped tight so the
# worst-case wire size stays under the LoRa MTU with headroom. task_type
# is a short category tag; target_uid/assignee_uid match TAKPacketV2.uid
# conventions; note is the one user-entered field.
*TaskRequest.task_type max_size:12
*TaskRequest.target_uid max_size:32
*TaskRequest.assignee_uid max_size:32
*TaskRequest.note max_size:48

File diff suppressed because it is too large Load diff

View file

@ -5,7 +5,7 @@ package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs"; option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated"; option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "CannedMessageConfigProtos"; option java_outer_classname = "CannedMessageConfigProtos";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
/* /*

View file

@ -1,12 +1,11 @@
syntax = "proto3"; syntax = "proto3";
/* trunk-ignore(buf-lint/PACKAGE_DIRECTORY_MATCH) */
package meshtastic; package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs"; option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated"; option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "ChannelProtos"; option java_outer_classname = "ChannelProtos";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
/* /*
@ -86,23 +85,17 @@ message ChannelSettings {
/* /*
* Per-channel module settings. * Per-channel module settings.
*/ */
ModuleSettings module_settings = 7; ModuleSettings module_settings = 7;
} }
/* /*
* This message is specifically for modules to store per-channel configuration data. * This message is specifically for modules to store per-channel configuration data.
*/ */
message ModuleSettings { message ModuleSettings {
/* /*
* Bits of precision for the location sent in position packets. * Bits of precision for the location sent in position packets.
*/ */
uint32 position_precision = 1; uint32 position_precision = 1;
/*
* Controls whether or not the client / device should mute the current channel
* Useful for noisy public channels you don't necessarily want to disable
*/
bool is_muted = 2;
} }
/* /*

View file

@ -1,4 +1,2 @@
*DeviceProfile.long_name max_size:40 *DeviceProfile.long_name max_size:40
*DeviceProfile.short_name max_size:5 *DeviceProfile.short_name max_size:5
*DeviceProfile.ringtone max_size:231
*DeviceProfile.canned_messages max_size:201

View file

@ -3,12 +3,11 @@ syntax = "proto3";
package meshtastic; package meshtastic;
import "meshtastic/localonly.proto"; import "meshtastic/localonly.proto";
import "meshtastic/mesh.proto";
option csharp_namespace = "Meshtastic.Protobufs"; option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated"; option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "ClientOnlyProtos"; option java_outer_classname = "ClientOnlyProtos";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
/* /*
@ -40,19 +39,4 @@ message DeviceProfile {
* The ModuleConfig of the node * The ModuleConfig of the node
*/ */
optional LocalModuleConfig module_config = 5; optional LocalModuleConfig module_config = 5;
/*
* Fixed position data
*/
optional Position fixed_position = 6;
/*
* Ringtone for ExternalNotification
*/
optional string ringtone = 7;
/*
* Predefined messages for CannedMessage
*/
optional string canned_messages = 8;
} }

View file

@ -1,8 +1,3 @@
# longest current is 45 chars, plan with a bit of buffer
*DeviceConfig.tzdef max_size:65
*DeviceConfig.buzzer_mode int_size:8
*NetworkConfig.wifi_ssid max_size:33 *NetworkConfig.wifi_ssid max_size:33
*NetworkConfig.wifi_psk max_size:65 *NetworkConfig.wifi_psk max_size:65
*NetworkConfig.ntp_server max_size:33 *NetworkConfig.ntp_server max_size:33
@ -17,8 +12,3 @@
*LoRaConfig.channel_num int_size:16 *LoRaConfig.channel_num int_size:16
*PowerConfig.device_battery_ina_address int_size:8 *PowerConfig.device_battery_ina_address int_size:8
*SecurityConfig.public_key max_size:32
*SecurityConfig.private_key max_size:32
*SecurityConfig.admin_key max_size:32
*SecurityConfig.admin_key max_count:3

View file

@ -2,12 +2,10 @@ syntax = "proto3";
package meshtastic; package meshtastic;
import "meshtastic/device_ui.proto";
option csharp_namespace = "Meshtastic.Protobufs"; option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated"; option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "ConfigProtos"; option java_outer_classname = "ConfigProtos";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
message Config { message Config {
@ -39,23 +37,20 @@ message Config {
/* /*
* Description: Combination of both ROUTER and CLIENT. Not for mobile devices. * Description: Combination of both ROUTER and CLIENT. Not for mobile devices.
* Deprecated in v2.3.15 because improper usage is impacting public meshes: Use ROUTER or CLIENT instead.
*/ */
ROUTER_CLIENT = 3;
ROUTER_CLIENT = 3 [deprecated = true];
/* /*
* Description: Infrastructure node for extending network coverage by relaying messages with minimal overhead. Not visible in Nodes list. * Description: Infrastructure node for extending network coverage by relaying messages with minimal overhead. Not visible in Nodes list.
* Technical Details: Mesh packets will simply be rebroadcasted over this node. Nodes configured with this role will not originate NodeInfo, Position, Telemetry * Technical Details: Mesh packets will simply be rebroadcasted over this node. Nodes configured with this role will not originate NodeInfo, Position, Telemetry
* or any other packet type. They will simply rebroadcast any mesh packets on the same frequency, channel num, spread factor, and coding rate. * or any other packet type. They will simply rebroadcast any mesh packets on the same frequency, channel num, spread factor, and coding rate.
* Deprecated in v2.7.11 because it creates "holes" in the mesh rebroadcast chain.
*/ */
REPEATER = 4 [deprecated = true]; REPEATER = 4;
/* /*
* Description: Broadcasts GPS position packets as priority. * Description: Broadcasts GPS position packets as priority.
* Technical Details: Position Mesh packets will be prioritized higher and sent more frequently by default. * Technical Details: Position Mesh packets will be prioritized higher and sent more frequently by default.
* When used in conjunction with power.is_power_saving = true, nodes will wake up, * When used in conjunction with power.is_power_saving = true, nodes will wake up,
* send position, and then sleep for position.position_broadcast_secs seconds. * send position, and then sleep for position.position_broadcast_secs seconds.
*/ */
TRACKER = 5; TRACKER = 5;
@ -63,7 +58,7 @@ message Config {
/* /*
* Description: Broadcasts telemetry packets as priority. * Description: Broadcasts telemetry packets as priority.
* Technical Details: Telemetry Mesh packets will be prioritized higher and sent more frequently by default. * Technical Details: Telemetry Mesh packets will be prioritized higher and sent more frequently by default.
* When used in conjunction with power.is_power_saving = true, nodes will wake up, * When used in conjunction with power.is_power_saving = true, nodes will wake up,
* send environment telemetry, and then sleep for telemetry.environment_update_interval seconds. * send environment telemetry, and then sleep for telemetry.environment_update_interval seconds.
*/ */
SENSOR = 6; SENSOR = 6;
@ -81,18 +76,18 @@ message Config {
* Technical Details: Used for nodes that "only speak when spoken to" * Technical Details: Used for nodes that "only speak when spoken to"
* Turns all of the routine broadcasts but allows for ad-hoc communication * Turns all of the routine broadcasts but allows for ad-hoc communication
* Still rebroadcasts, but with local only rebroadcast mode (known meshes only) * Still rebroadcasts, but with local only rebroadcast mode (known meshes only)
* Can be used for clandestine operation or to dramatically reduce airtime / power consumption * Can be used for clandestine operation or to dramatically reduce airtime / power consumption
*/ */
CLIENT_HIDDEN = 8; CLIENT_HIDDEN = 8;
/* /*
* Description: Broadcasts location as message to default channel regularly for to assist with device recovery. * Description: Broadcasts location as message to default channel regularly for to assist with device recovery.
* Technical Details: Used to automatically send a text message to the mesh * Technical Details: Used to automatically send a text message to the mesh
* with the current position of the device on a frequent interval: * with the current position of the device on a frequent interval:
* "I'm lost! Position: lat / long" * "I'm lost! Position: lat / long"
*/ */
LOST_AND_FOUND = 9; LOST_AND_FOUND = 9;
/* /*
* Description: Enables automatic TAK PLI broadcasts and reduces routine broadcasts. * Description: Enables automatic TAK PLI broadcasts and reduces routine broadcasts.
* Technical Details: Turns off many of the routine broadcasts to favor ATAK CoT packet stream * Technical Details: Turns off many of the routine broadcasts to favor ATAK CoT packet stream
@ -100,23 +95,6 @@ message Config {
* Uses position module configuration to determine TAK PLI broadcast interval. * Uses position module configuration to determine TAK PLI broadcast interval.
*/ */
TAK_TRACKER = 10; TAK_TRACKER = 10;
/*
* Description: Will always rebroadcast packets, but will do so after all other modes.
* Technical Details: Used for router nodes that are intended to provide additional coverage
* in areas not already covered by other routers, or to bridge around problematic terrain,
* but should not be given priority over other routers in order to avoid unnecessaraily
* consuming hops.
*/
ROUTER_LATE = 11;
/*
* Description: Treats packets from or to favorited nodes as ROUTER_LATE, and all other packets as CLIENT.
* Technical Details: Used for stronger attic/roof nodes to distribute messages more widely
* from weaker, indoor, or less-well-positioned nodes. Recommended for users with multiple nodes
* where one CLIENT_BASE acts as a more powerful base station, such as an attic/roof node.
*/
CLIENT_BASE = 12;
} }
/* /*
@ -140,60 +118,12 @@ message Config {
* Only rebroadcasts message on the nodes local primary / secondary channels. * Only rebroadcasts message on the nodes local primary / secondary channels.
*/ */
LOCAL_ONLY = 2; LOCAL_ONLY = 2;
/* /*
* Ignores observed messages from foreign meshes like LOCAL_ONLY, * Ignores observed messages from foreign meshes like LOCAL_ONLY,
* but takes it step further by also ignoring messages from nodenums not in the node's known list (NodeDB) * but takes it step further by also ignoring messages from nodenums not in the node's known list (NodeDB)
*/ */
KNOWN_ONLY = 3; KNOWN_ONLY = 3;
/*
* Only permitted for SENSOR, TRACKER and TAK_TRACKER roles, this will inhibit all rebroadcasts, not unlike CLIENT_MUTE role.
*/
NONE = 4;
/*
* Ignores packets from non-standard portnums such as: TAK, RangeTest, PaxCounter, etc.
* Only rebroadcasts packets with standard portnums: NodeInfo, Text, Position, Telemetry, and Routing.
*/
CORE_PORTNUMS_ONLY = 5;
}
/*
* Defines buzzer behavior for audio feedback
*/
enum BuzzerMode {
/*
* Default behavior.
* Buzzer is enabled for all audio feedback including button presses and alerts.
*/
ALL_ENABLED = 0;
/*
* Disabled.
* All buzzer audio feedback is disabled.
*/
DISABLED = 1;
/*
* Notifications Only.
* Buzzer is enabled only for notifications and alerts, but not for button presses.
* External notification config determines the specifics of the notification behavior.
*/
NOTIFICATIONS_ONLY = 2;
/*
* Non-notification system buzzer tones only.
* Buzzer is enabled only for non-notification tones such as button presses, startup, shutdown, but not for alerts.
*/
SYSTEM_ONLY = 3;
/*
* Direct Message notifications only.
* Buzzer is enabled only for direct messages and alerts, but not for button presses.
* External notification config determines the specifics of the notification behavior.
*/
DIRECT_MSG_ONLY = 4;
} }
/* /*
@ -203,9 +133,14 @@ message Config {
/* /*
* Disabling this will disable the SerialConsole by not initilizing the StreamAPI * Disabling this will disable the SerialConsole by not initilizing the StreamAPI
* Moved to SecurityConfig
*/ */
bool serial_enabled = 2 [deprecated = true]; bool serial_enabled = 2;
/*
* By default we turn off logging as soon as an API client connects (to keep shared serial link quiet).
* Set this to true to leave the debug log outputting even when API is active.
*/
bool debug_log_enabled = 3;
/* /*
* For boards without a hard wired button, this is the pin number that will be used * For boards without a hard wired button, this is the pin number that will be used
@ -238,30 +173,13 @@ message Config {
/* /*
* If true, device is considered to be "managed" by a mesh administrator * If true, device is considered to be "managed" by a mesh administrator
* Clients should then limit available configuration and administrative options inside the user interface * Clients should then limit available configuration and administrative options inside the user interface
* Moved to SecurityConfig
*/ */
bool is_managed = 9 [deprecated = true]; bool is_managed = 9;
/* /*
* Disables the triple-press of user button to enable or disable GPS * Disables the triple-press of user button to enable or disable GPS
*/ */
bool disable_triple_click = 10; bool disable_triple_click = 10;
/*
* POSIX Timezone definition string from https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv.
*/
string tzdef = 11;
/*
* If true, disable the default blinking LED (LED_PIN) behavior on the device
*/
bool led_heartbeat_disabled = 12;
/*
* Controls buzzer behavior for audio feedback
* Defaults to ENABLED
*/
BuzzerMode buzzer_mode = 13;
} }
/* /*
@ -339,18 +257,18 @@ message Config {
enum GpsMode { enum GpsMode {
/* /*
* GPS is present but disabled * GPS is present but disabled
*/ */
DISABLED = 0; DISABLED = 0;
/* /*
* GPS is present and enabled * GPS is present and enabled
*/ */
ENABLED = 1; ENABLED = 1;
/* /*
* GPS is not present on the device * GPS is not present on the device
*/ */
NOT_PRESENT = 2; NOT_PRESENT = 2;
} }
@ -375,7 +293,7 @@ message Config {
/* /*
* Is GPS enabled for this node? * Is GPS enabled for this node?
*/ */
bool gps_enabled = 4 [deprecated = true]; bool gps_enabled = 4[deprecated = true];
/* /*
* How often should we try to get GPS position (in seconds) * How often should we try to get GPS position (in seconds)
@ -387,7 +305,7 @@ message Config {
/* /*
* Deprecated in favor of using smart / regular broadcast intervals as implicit attempt time * Deprecated in favor of using smart / regular broadcast intervals as implicit attempt time
*/ */
uint32 gps_attempt_time = 6 [deprecated = true]; uint32 gps_attempt_time = 6 [deprecated = true];
/* /*
* Bit field of boolean configuration options for POSITION messages * Bit field of boolean configuration options for POSITION messages
@ -432,28 +350,30 @@ message Config {
*/ */
message PowerConfig { message PowerConfig {
/* /*
* Description: Will sleep everything as much as possible, for the tracker and sensor role this will also include the lora radio. * If set, we are powered from a low-current source (i.e. solar), so even if it looks like we have power flowing in
* Don't use this setting if you want to use your device with the phone apps or are using a device without a user button. * we should try to minimize power consumption as much as possible.
* Technical Details: Works for ESP32 devices and NRF52 devices in the Sensor or Tracker roles * YOU DO NOT NEED TO SET THIS IF YOU'VE set is_router (it is implied in that case).
* Advanced Option
*/ */
bool is_power_saving = 1; bool is_power_saving = 1;
/* /*
* Description: If non-zero, the device will fully power off this many seconds after external power is removed. * If non-zero, the device will fully power off this many seconds after external power is removed.
*/ */
uint32 on_battery_shutdown_after_secs = 2; uint32 on_battery_shutdown_after_secs = 2;
/* /*
* Ratio of voltage divider for battery pin eg. 3.20 (R1=100k, R2=220k) * Ratio of voltage divider for battery pin eg. 3.20 (R1=100k, R2=220k)
* Overrides the ADC_MULTIPLIER defined in variant for battery voltage calculation. * Overrides the ADC_MULTIPLIER defined in variant for battery voltage calculation.
* https://meshtastic.org/docs/configuration/radio/power/#adc-multiplier-override * Should be set to floating point value between 2 and 4
* Should be set to floating point value between 2 and 6 * Fixes issues on Heltec v2
*/ */
float adc_multiplier_override = 3; float adc_multiplier_override = 3;
/* /*
* Description: The number of seconds for to wait before turning off BLE in No Bluetooth states * Wait Bluetooth Seconds
* Technical Details: ESP32 Only 0 for default of 1 minute * The number of seconds for to wait before turning off BLE in No Bluetooth states
* 0 for default of 1 minute
*/ */
uint32 wait_bluetooth_secs = 4; uint32 wait_bluetooth_secs = 4;
@ -466,14 +386,17 @@ message Config {
uint32 sds_secs = 6; uint32 sds_secs = 6;
/* /*
* Description: In light sleep the CPU is suspended, LoRa radio is on, BLE is off an GPS is on * Light Sleep Seconds
* Technical Details: ESP32 Only 0 for default of 300 * In light sleep the CPU is suspended, LoRa radio is on, BLE is off an GPS is on
* ESP32 Only
* 0 for default of 300
*/ */
uint32 ls_secs = 7; uint32 ls_secs = 7;
/* /*
* Description: While in light sleep when we receive packets on the LoRa radio we will wake and handle them and stay awake in no BLE mode for this value * Minimum Wake Seconds
* Technical Details: ESP32 Only 0 for default of 10 seconds * While in light sleep when we receive packets on the LoRa radio we will wake and handle them and stay awake in no BLE mode for this value
* 0 for default of 10 seconds
*/ */
uint32 min_wake_secs = 8; uint32 min_wake_secs = 8;
@ -481,12 +404,6 @@ message Config {
* I2C address of INA_2XX to use for reading device battery voltage * I2C address of INA_2XX to use for reading device battery voltage
*/ */
uint32 device_battery_ina_address = 9; uint32 device_battery_ina_address = 9;
/*
* If non-zero, we want powermon log outputs. With the particular (bitfield) sources enabled.
* Note: we picked an ID of 32 so that lower more efficient IDs can be used for more frequently used options.
*/
uint64 powermon_enables = 32;
} }
/* /*
@ -544,7 +461,7 @@ message Config {
string wifi_psk = 4; string wifi_psk = 4;
/* /*
* NTP server to use if WiFi is conneced, defaults to `meshtastic.pool.ntp.org` * NTP server to use if WiFi is conneced, defaults to `0.pool.ntp.org`
*/ */
string ntp_server = 5; string ntp_server = 5;
@ -567,31 +484,6 @@ message Config {
* rsyslog Server and Port * rsyslog Server and Port
*/ */
string rsyslog_server = 9; string rsyslog_server = 9;
/*
* Flags for enabling/disabling network protocols
*/
uint32 enabled_protocols = 10;
/*
* Enable/Disable ipv6 support
*/
bool ipv6_enabled = 11;
/*
* Available flags auxiliary network protocols
*/
enum ProtocolFlags {
/*
* Do not broadcast packets over any network protocol
*/
NO_BROADCAST = 0x0000;
/*
* Enable broadcasting packets via UDP over the local network
*/
UDP_BROADCAST = 0x0001;
}
} }
/* /*
@ -599,10 +491,45 @@ message Config {
*/ */
message DisplayConfig { message DisplayConfig {
/* /*
* Deprecated in 2.7.4: Unused * How the GPS coordinates are displayed on the OLED screen.
*/ */
enum DeprecatedGpsCoordinateFormat { enum GpsCoordinateFormat {
UNUSED = 0; /*
* GPS coordinates are displayed in the normal decimal degrees format:
* DD.DDDDDD DDD.DDDDDD
*/
DEC = 0;
/*
* GPS coordinates are displayed in the degrees minutes seconds format:
* DD°MM'SS"C DDD°MM'SS"C, where C is the compass point representing the locations quadrant
*/
DMS = 1;
/*
* Universal Transverse Mercator format:
* ZZB EEEEEE NNNNNNN, where Z is zone, B is band, E is easting, N is northing
*/
UTM = 2;
/*
* Military Grid Reference System format:
* ZZB CD EEEEE NNNNN, where Z is zone, B is band, C is the east 100k square, D is the north 100k square,
* E is easting, N is northing
*/
MGRS = 3;
/*
* Open Location Code (aka Plus Codes).
*/
OLC = 4;
/*
* Ordnance Survey Grid Reference (the National Grid System of the UK).
* Format: AB EEEEE NNNNN, where A is the east 100k square, B is the north 100k square,
* E is the easting, N is the northing
*/
OSGR = 5;
} }
/* /*
@ -625,29 +552,24 @@ message Config {
*/ */
enum OledType { enum OledType {
/* /*
* Default / Autodetect * Default / Auto
*/ */
OLED_AUTO = 0; OLED_AUTO = 0;
/* /*
* Default / Autodetect * Default / Auto
*/ */
OLED_SSD1306 = 1; OLED_SSD1306 = 1;
/* /*
* Default / Autodetect * Default / Auto
*/ */
OLED_SH1106 = 2; OLED_SH1106 = 2;
/*
* Can not be auto detected but set by proto. Used for 128x64 screens
*/
OLED_SH1107 = 3;
/* /*
* Can not be auto detected but set by proto. Used for 128x128 screens * Can not be auto detected but set by proto. Used for 128x128 screens
*/ */
OLED_SH1107_128_128 = 4; OLED_SH1107 = 3;
} }
/* /*
@ -657,10 +579,9 @@ message Config {
uint32 screen_on_secs = 1; uint32 screen_on_secs = 1;
/* /*
* Deprecated in 2.7.4: Unused
* How the GPS coordinates are formatted on the OLED screen. * How the GPS coordinates are formatted on the OLED screen.
*/ */
DeprecatedGpsCoordinateFormat gps_format = 2 [deprecated = true]; GpsCoordinateFormat gps_format = 2;
/* /*
* Automatically toggles to the next page on the screen like a carousel, based the specified interval in seconds. * Automatically toggles to the next page on the screen like a carousel, based the specified interval in seconds.
@ -672,7 +593,7 @@ message Config {
* If this is set, the displayed compass will always point north. if unset, the old behaviour * If this is set, the displayed compass will always point north. if unset, the old behaviour
* (top of display is heading direction) is used. * (top of display is heading direction) is used.
*/ */
bool compass_north_top = 4 [deprecated = true]; bool compass_north_top = 4;
/* /*
* Flip screen vertically, for cases that mount the screen upside down * Flip screen vertically, for cases that mount the screen upside down
@ -724,70 +645,6 @@ message Config {
* Should we wake the screen up on accelerometer detected motion or tap * Should we wake the screen up on accelerometer detected motion or tap
*/ */
bool wake_on_tap_or_motion = 10; bool wake_on_tap_or_motion = 10;
enum CompassOrientation {
/*
* The compass and the display are in the same orientation.
*/
DEGREES_0 = 0;
/*
* Rotate the compass by 90 degrees.
*/
DEGREES_90 = 1;
/*
* Rotate the compass by 180 degrees.
*/
DEGREES_180 = 2;
/*
* Rotate the compass by 270 degrees.
*/
DEGREES_270 = 3;
/*
* Don't rotate the compass, but invert the result.
*/
DEGREES_0_INVERTED = 4;
/*
* Rotate the compass by 90 degrees and invert.
*/
DEGREES_90_INVERTED = 5;
/*
* Rotate the compass by 180 degrees and invert.
*/
DEGREES_180_INVERTED = 6;
/*
* Rotate the compass by 270 degrees and invert.
*/
DEGREES_270_INVERTED = 7;
}
/*
* Indicates how to rotate or invert the compass output to accurate display on the display.
*/
CompassOrientation compass_orientation = 11;
/*
* If false (default), the device will display the time in 24-hour format on screen.
* If true, the device will display the time in 12-hour format on screen.
*/
bool use_12h_clock = 12;
/*
* If false (default), the device will use short names for various display screens.
* If true, node names will show in long format
*/
bool use_long_node_name = 13;
/*
* If true, the device will display message bubbles on screen.
*/
bool enable_message_bubbles = 14;
} }
/* /*
@ -889,46 +746,6 @@ message Config {
* Singapore 923mhz * Singapore 923mhz
*/ */
SG_923 = 18; SG_923 = 18;
/*
* Philippines 433mhz
*/
PH_433 = 19;
/*
* Philippines 868mhz
*/
PH_868 = 20;
/*
* Philippines 915mhz
*/
PH_915 = 21;
/*
* Australia / New Zealand 433MHz
*/
ANZ_433 = 22;
/*
* Kazakhstan 433MHz
*/
KZ_433 = 23;
/*
* Kazakhstan 863MHz
*/
KZ_863 = 24;
/*
* Nepal 865MHz
*/
NP_865 = 25;
/*
* Brazil 902MHz
*/
BR_902 = 26;
} }
/* /*
@ -943,15 +760,13 @@ message Config {
/* /*
* Long Range - Slow * Long Range - Slow
* Deprecated in 2.7: Unpopular slow preset.
*/ */
LONG_SLOW = 1 [deprecated = true]; LONG_SLOW = 1;
/* /*
* Very Long Range - Slow * Very Long Range - Slow
* Deprecated in 2.5: Works only with txco and is unusably slow
*/ */
VERY_LONG_SLOW = 2 [deprecated = true]; VERY_LONG_SLOW = 2;
/* /*
* Medium Range - Slow * Medium Range - Slow
@ -977,36 +792,6 @@ message Config {
* Long Range - Moderately Fast * Long Range - Moderately Fast
*/ */
LONG_MODERATE = 7; LONG_MODERATE = 7;
/*
* Short Range - Turbo
* This is the fastest preset and the only one with 500kHz bandwidth.
* It is not legal to use in all regions due to this wider bandwidth.
*/
SHORT_TURBO = 8;
/*
* Long Range - Turbo
* This preset performs similarly to LongFast, but with 500Khz bandwidth.
*/
LONG_TURBO = 9;
}
enum FEM_LNA_Mode {
/*
* FEM_LNA is present but disabled
*/
DISABLED = 0;
/*
* FEM_LNA is present and enabled
*/
ENABLED = 1;
/*
* FEM_LNA is not present on the device
*/
NOT_PRESENT = 2;
} }
/* /*
@ -1108,11 +893,6 @@ message Config {
*/ */
float override_frequency = 14; float override_frequency = 14;
/*
* If true, disable the build-in PA FAN using pin define in RF95_FAN_EN.
*/
bool pa_fan_disabled = 15;
/* /*
* For testing it is useful sometimes to force a node to never listen to * For testing it is useful sometimes to force a node to never listen to
* particular other nodes (simulating radio out of range). All nodenums listed * particular other nodes (simulating radio out of range). All nodenums listed
@ -1124,15 +904,6 @@ message Config {
* If true, the device will not process any packets received via LoRa that passed via MQTT anywhere on the path towards it. * If true, the device will not process any packets received via LoRa that passed via MQTT anywhere on the path towards it.
*/ */
bool ignore_mqtt = 104; bool ignore_mqtt = 104;
/*
* Sets the ok_to_mqtt bit on outgoing packets
*/
bool config_ok_to_mqtt = 105;
/*
* Set where LORA FEM is enabled, disabled, or not present
*/
FEM_LNA_Mode fem_lna_mode = 106;
} }
message BluetoothConfig { message BluetoothConfig {
@ -1169,52 +940,6 @@ message Config {
uint32 fixed_pin = 3; uint32 fixed_pin = 3;
} }
message SecurityConfig {
/*
* The public key of the user's device.
* Sent out to other nodes on the mesh to allow them to compute a shared secret key.
*/
bytes public_key = 1;
/*
* The private key of the device.
* Used to create a shared key with a remote device.
*/
bytes private_key = 2;
/*
* The public key authorized to send admin messages to this node.
*/
repeated bytes admin_key = 3;
/*
* If true, device is considered to be "managed" by a mesh administrator via admin messages
* Device is managed by a mesh administrator.
*/
bool is_managed = 4;
/*
* Serial Console over the Stream API."
*/
bool serial_enabled = 5;
/*
* By default we turn off logging as soon as an API client connects (to keep shared serial link quiet).
* Output live debug logging over serial or bluetooth is set to true.
*/
bool debug_log_api_enabled = 6;
/*
* Allow incoming device control over the insecure legacy admin channel.
*/
bool admin_channel_enabled = 8;
}
/*
* Blank config request, strictly for getting the session key
*/
message SessionkeyConfig {}
/* /*
* Payload Variant * Payload Variant
*/ */
@ -1226,8 +951,5 @@ message Config {
DisplayConfig display = 5; DisplayConfig display = 5;
LoRaConfig lora = 6; LoRaConfig lora = 6;
BluetoothConfig bluetooth = 7; BluetoothConfig bluetooth = 7;
SecurityConfig security = 8;
SessionkeyConfig sessionkey = 9;
DeviceUIConfig device_ui = 10;
} }
} }

View file

@ -5,7 +5,7 @@ package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs"; option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated"; option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "ConnStatusProtos"; option java_outer_classname = "ConnStatusProtos";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
message DeviceConnectionStatus { message DeviceConnectionStatus {

View file

@ -1,12 +0,0 @@
*DeviceUIConfig.screen_brightness int_size:8
*DeviceUIConfig.screen_timeout int_size:16
*DeviceUIConfig.ring_tone_id int_size:8
*DeviceUIConfig.calibration_data max_size:16
*DeviceUIConfig.compass_mode int_size:8
*DeviceUIConfig.gps_format int_size:8
*NodeFilter.node_name max_size:16
*NodeFilter.hops_away int_size:8
*NodeFilter.channel int_size:8
*NodeHighlight.node_name max_size:16
*GeoPoint.zoom int_size:8
*Map.style max_size:20

View file

@ -1,389 +0,0 @@
syntax = "proto3";
package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "DeviceUIProtos";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
/*
* Protobuf structures for device-ui persistency
*/
message DeviceUIConfig {
/*
* A version integer used to invalidate saved files when we make incompatible changes.
*/
uint32 version = 1;
/*
* TFT display brightness 1..255
*/
uint32 screen_brightness = 2;
/*
* Screen timeout 0..900
*/
uint32 screen_timeout = 3;
/*
* Screen/Settings lock enabled
*/
bool screen_lock = 4;
bool settings_lock = 5;
uint32 pin_code = 6;
/*
* Color theme
*/
Theme theme = 7;
/*
* Audible message, banner and ring tone
*/
bool alert_enabled = 8;
bool banner_enabled = 9;
uint32 ring_tone_id = 10;
/*
* Localization
*/
Language language = 11;
/*
* Node list filter
*/
NodeFilter node_filter = 12;
/*
* Node list highlightening
*/
NodeHighlight node_highlight = 13;
/*
* 8 integers for screen calibration data
*/
bytes calibration_data = 14;
/*
* Map related data
*/
Map map_data = 15;
/*
* Compass mode
*/
CompassMode compass_mode = 16;
/*
* RGB color for BaseUI
* 0xRRGGBB format, e.g. 0xFF0000 for red
*/
uint32 screen_rgb_color = 17;
/*
* Clockface analog style
* true for analog clockface, false for digital clockface
*/
bool is_clockface_analog = 18;
/*
* How the GPS coordinates are formatted on the OLED screen.
*/
GpsCoordinateFormat gps_format = 19;
/*
* How the GPS coordinates are displayed on the OLED screen.
*/
enum GpsCoordinateFormat {
/*
* GPS coordinates are displayed in the normal decimal degrees format:
* DD.DDDDDD DDD.DDDDDD
*/
DEC = 0;
/*
* GPS coordinates are displayed in the degrees minutes seconds format:
* DD°MM'SS"C DDD°MM'SS"C, where C is the compass point representing the locations quadrant
*/
DMS = 1;
/*
* Universal Transverse Mercator format:
* ZZB EEEEEE NNNNNNN, where Z is zone, B is band, E is easting, N is northing
*/
UTM = 2;
/*
* Military Grid Reference System format:
* ZZB CD EEEEE NNNNN, where Z is zone, B is band, C is the east 100k square, D is the north 100k square,
* E is easting, N is northing
*/
MGRS = 3;
/*
* Open Location Code (aka Plus Codes).
*/
OLC = 4;
/*
* Ordnance Survey Grid Reference (the National Grid System of the UK).
* Format: AB EEEEE NNNNN, where A is the east 100k square, B is the north 100k square,
* E is the easting, N is the northing
*/
OSGR = 5;
/*
* Maidenhead Locator System
* Described here: https://en.wikipedia.org/wiki/Maidenhead_Locator_System
*/
MLS = 6;
}
}
message NodeFilter {
/*
* Filter unknown nodes
*/
bool unknown_switch = 1;
/*
* Filter offline nodes
*/
bool offline_switch = 2;
/*
* Filter nodes w/o public key
*/
bool public_key_switch = 3;
/*
* Filter based on hops away
*/
int32 hops_away = 4;
/*
* Filter nodes w/o position
*/
bool position_switch = 5;
/*
* Filter nodes by matching name string
*/
string node_name = 6;
/*
* Filter based on channel
*/
int32 channel = 7;
}
message NodeHighlight {
/*
* Hightlight nodes w/ active chat
*/
bool chat_switch = 1;
/*
* Highlight nodes w/ position
*/
bool position_switch = 2;
/*
* Highlight nodes w/ telemetry data
*/
bool telemetry_switch = 3;
/*
* Highlight nodes w/ iaq data
*/
bool iaq_switch = 4;
/*
* Highlight nodes by matching name string
*/
string node_name = 5;
}
message GeoPoint {
/*
* Zoom level
*/
int32 zoom = 1;
/*
* Coordinate: latitude
*/
int32 latitude = 2;
/*
* Coordinate: longitude
*/
int32 longitude = 3;
}
message Map {
/*
* Home coordinates
*/
GeoPoint home = 1;
/*
* Map tile style
*/
string style = 2;
/*
* Map scroll follows GPS
*/
bool follow_gps = 3;
}
enum CompassMode {
/*
* Compass with dynamic ring and heading
*/
DYNAMIC = 0;
/*
* Compass with fixed ring and heading
*/
FIXED_RING = 1;
/*
* Compass with heading and freeze option
*/
FREEZE_HEADING = 2;
}
enum Theme {
/*
* Dark
*/
DARK = 0;
/*
* Light
*/
LIGHT = 1;
/*
* Red
*/
RED = 2;
}
/*
* Localization
*/
enum Language {
/*
* English
*/
ENGLISH = 0;
/*
* French
*/
FRENCH = 1;
/*
* German
*/
GERMAN = 2;
/*
* Italian
*/
ITALIAN = 3;
/*
* Portuguese
*/
PORTUGUESE = 4;
/*
* Spanish
*/
SPANISH = 5;
/*
* Swedish
*/
SWEDISH = 6;
/*
* Finnish
*/
FINNISH = 7;
/*
* Polish
*/
POLISH = 8;
/*
* Turkish
*/
TURKISH = 9;
/*
* Serbian
*/
SERBIAN = 10;
/*
* Russian
*/
RUSSIAN = 11;
/*
* Dutch
*/
DUTCH = 12;
/*
* Greek
*/
GREEK = 13;
/*
* Norwegian
*/
NORWEGIAN = 14;
/*
* Slovenian
*/
SLOVENIAN = 15;
/*
* Ukrainian
*/
UKRAINIAN = 16;
/*
* Bulgarian
*/
BULGARIAN = 17;
/*
* Czech
*/
CZECH = 18;
/*
* Danish
*/
DANISH = 19;
/*
* Simplified Chinese (experimental)
*/
SIMPLIFIED_CHINESE = 30;
/*
* Traditional Chinese (experimental)
*/
TRADITIONAL_CHINESE = 31;
}

View file

@ -6,13 +6,11 @@
*ChannelFile.channels max_count:8 *ChannelFile.channels max_count:8
*OEMStore.oem_text max_size:40
*OEMStore.oem_icon_bits max_size:2048
*OEMStore.oem_aes_key max_size:32
*DeviceState.node_remote_hardware_pins max_count:12 *DeviceState.node_remote_hardware_pins max_count:12
*NodeInfoLite.channel int_size:8 *NodeInfoLite.channel int_size:8
*NodeInfoLite.hops_away int_size:8 *NodeInfoLite.hops_away int_size:8
*NodeInfoLite.next_hop int_size:8
*UserLite.long_name max_size:40
*UserLite.short_name max_size:5
*UserLite.public_key max_size:32 # public key
*UserLite.macaddr max_size:6 fixed_length:true

View file

@ -2,177 +2,20 @@ syntax = "proto3";
package meshtastic; package meshtastic;
/* trunk-ignore(buf-lint/COMPILE) */
import "meshtastic/channel.proto"; import "meshtastic/channel.proto";
import "meshtastic/config.proto";
import "meshtastic/localonly.proto"; import "meshtastic/localonly.proto";
import "meshtastic/mesh.proto"; import "meshtastic/mesh.proto";
import "meshtastic/telemetry.proto"; import "meshtastic/telemetry.proto";
import "meshtastic/module_config.proto";
import "nanopb.proto"; import "nanopb.proto";
option csharp_namespace = "Meshtastic.Protobufs"; option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated"; option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "DeviceOnly"; option java_outer_classname = "DeviceOnly";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
option (nanopb_fileopt).include = "<vector>"; option (nanopb_fileopt).include = "<vector>";
/*
* Position with static location information only for NodeDBLite
*/
message PositionLite {
/*
* The new preferred location encoding, multiply by 1e-7 to get degrees
* in floating point
*/
sfixed32 latitude_i = 1;
/*
* TODO: REPLACE
*/
sfixed32 longitude_i = 2;
/*
* In meters above MSL (but see issue #359)
*/
int32 altitude = 3;
/*
* This is usually not sent over the mesh (to save space), but it is sent
* from the phone so that the local device can set its RTC If it is sent over
* the mesh (because there are devices on the mesh without GPS), it will only
* be sent by devices which has a hardware GPS clock.
* seconds since 1970
*/
fixed32 time = 4;
/*
* TODO: REPLACE
*/
Position.LocSource location_source = 5;
}
message UserLite {
/*
* This is the addr of the radio.
*/
bytes macaddr = 1 [deprecated = true];
/*
* A full name for this user, i.e. "Kevin Hester"
*/
string long_name = 2;
/*
* A VERY short name, ideally two characters.
* Suitable for a tiny OLED screen
*/
string short_name = 3;
/*
* TBEAM, HELTEC, etc...
* Starting in 1.2.11 moved to hw_model enum in the NodeInfo object.
* Apps will still need the string here for older builds
* (so OTA update can find the right image), but if the enum is available it will be used instead.
*/
HardwareModel hw_model = 4;
/*
* In some regions Ham radio operators have different bandwidth limitations than others.
* If this user is a licensed operator, set this flag.
* Also, "long_name" should be their licence number.
*/
bool is_licensed = 5;
/*
* Indicates that the user's role in the mesh
*/
Config.DeviceConfig.Role role = 6;
/*
* The public key of the user's device.
* This is sent out to other nodes on the mesh to allow them to compute a shared secret key.
*/
bytes public_key = 7;
/*
* Whether or not the node can be messaged
*/
optional bool is_unmessagable = 9;
}
message NodeInfoLite {
/*
* The node number
*/
uint32 num = 1;
/*
* The user info for this node
*/
UserLite user = 2;
/*
* This position data. Note: before 1.2.14 we would also store the last time we've heard from this node in position.time, that is no longer true.
* Position.time now indicates the last time we received a POSITION from that node.
*/
PositionLite position = 3;
/*
* Returns the Signal-to-noise ratio (SNR) of the last received message,
* as measured by the receiver. Return SNR of the last received message in dB
*/
float snr = 4;
/*
* Set to indicate the last time we received a packet from this node
*/
fixed32 last_heard = 5;
/*
* The latest device metrics for the node.
*/
DeviceMetrics device_metrics = 6;
/*
* local channel index we heard that node on. Only populated if its not the default channel.
*/
uint32 channel = 7;
/*
* True if we witnessed the node over MQTT instead of LoRA transport
*/
bool via_mqtt = 8;
/*
* Number of hops away from us this node is (0 if direct neighbor)
*/
optional uint32 hops_away = 9;
/*
* True if node is in our favorites list
* Persists between NodeDB internal clean ups
*/
bool is_favorite = 10;
/*
* True if node is in our ignored list
* Persists between NodeDB internal clean ups
*/
bool is_ignored = 11;
/*
* Last byte of the node number of the node that should be used as the next hop to reach this node.
*/
uint32 next_hop = 12;
/*
* Bitfield for storing booleans.
* LSB 0 is_key_manually_verified
* LSB 1 is_muted
*/
uint32 bitfield = 13;
}
/* /*
* This message is never sent over the wire, but it is used for serializing DB * This message is never sent over the wire, but it is used for serializing DB
* state to flash in the device code * state to flash in the device code
@ -218,10 +61,9 @@ message DeviceState {
bool no_save = 9 [deprecated = true]; bool no_save = 9 [deprecated = true];
/* /*
* Previously used to manage GPS factory resets. * Some GPS receivers seem to have bogus settings from the factory, so we always do one factory reset.
* Deprecated in 2.5.23
*/ */
bool did_gps_reset = 11 [deprecated = true]; bool did_gps_reset = 11;
/* /*
* We keep the last received waypoint stored in the device flash, * We keep the last received waypoint stored in the device flash,
@ -234,20 +76,100 @@ message DeviceState {
* The mesh's nodes with their available gpio pins for RemoteHardware module * The mesh's nodes with their available gpio pins for RemoteHardware module
*/ */
repeated NodeRemoteHardwarePin node_remote_hardware_pins = 13; repeated NodeRemoteHardwarePin node_remote_hardware_pins = 13;
}
message NodeDatabase {
/*
* A version integer used to invalidate old save files when we make
* incompatible changes This integer is set at build time and is private to
* NodeDB.cpp in the device code.
*/
uint32 version = 1;
/* /*
* New lite version of NodeDB to decrease memory footprint * New lite version of NodeDB to decrease memory footprint
*/ */
repeated NodeInfoLite nodes = 2 [(nanopb).callback_datatype = "std::vector<meshtastic_NodeInfoLite>"]; repeated NodeInfoLite node_db_lite = 14 [(nanopb).callback_datatype="std::vector<meshtastic_NodeInfoLite>"];
}
message NodeInfoLite {
/*
* The node number
*/
uint32 num = 1;
/*
* The user info for this node
*/
User user = 2;
/*
* This position data. Note: before 1.2.14 we would also store the last time we've heard from this node in position.time, that is no longer true.
* Position.time now indicates the last time we received a POSITION from that node.
*/
PositionLite position = 3;
/*
* Returns the Signal-to-noise ratio (SNR) of the last received message,
* as measured by the receiver. Return SNR of the last received message in dB
*/
float snr = 4;
/*
* Set to indicate the last time we received a packet from this node
*/
fixed32 last_heard = 5;
/*
* The latest device metrics for the node.
*/
DeviceMetrics device_metrics = 6;
/*
* local channel index we heard that node on. Only populated if its not the default channel.
*/
uint32 channel = 7;
/*
* True if we witnessed the node over MQTT instead of LoRA transport
*/
bool via_mqtt = 8;
/*
* Number of hops away from us this node is (0 if adjacent)
*/
uint32 hops_away = 9;
/*
* True if node is in our favorites list
* Persists between NodeDB internal clean ups
*/
bool is_favorite = 10;
}
/*
* Position with static location information only for NodeDBLite
*/
message PositionLite {
/*
* The new preferred location encoding, multiply by 1e-7 to get degrees
* in floating point
*/
sfixed32 latitude_i = 1;
/*
* TODO: REPLACE
*/
sfixed32 longitude_i = 2;
/*
* In meters above MSL (but see issue #359)
*/
int32 altitude = 3;
/*
* This is usually not sent over the mesh (to save space), but it is sent
* from the phone so that the local device can set its RTC If it is sent over
* the mesh (because there are devices on the mesh without GPS), it will only
* be sent by devices which has a hardware GPS clock.
* seconds since 1970
*/
fixed32 time = 4;
/*
* TODO: REPLACE
*/
Position.LocSource location_source = 5;
} }
/* /*
@ -268,36 +190,67 @@ message ChannelFile {
} }
/* /*
* The on-disk backup of the node's preferences * TODO: REPLACE
*/ */
message BackupPreferences { enum ScreenFonts {
/* /*
* The version of the backup * TODO: REPLACE
*/ */
uint32 version = 1; FONT_SMALL = 0;
/* /*
* The timestamp of the backup (if node has time) * TODO: REPLACE
*/ */
fixed32 timestamp = 2; FONT_MEDIUM = 1;
/* /*
* The node's configuration * TODO: REPLACE
*/ */
LocalConfig config = 3; FONT_LARGE = 2;
}
/*
* The node's module configuration /*
*/ * This can be used for customizing the firmware distribution. If populated,
LocalModuleConfig module_config = 4; * show a secondary bootup screen with custom logo and text for 2.5 seconds.
*/
/* message OEMStore {
* The node's channels /*
*/ * The Logo width in Px
ChannelFile channels = 5; */
uint32 oem_icon_width = 1;
/*
* The node's user (owner) information /*
*/ * The Logo height in Px
User owner = 6; */
uint32 oem_icon_height = 2;
/*
* The Logo in XBM bytechar format
*/
bytes oem_icon_bits = 3;
/*
* Use this font for the OEM text.
*/
ScreenFonts oem_font = 4;
/*
* Use this font for the OEM text.
*/
string oem_text = 5;
/*
* The default device encryption key, 16 or 32 byte
*/
bytes oem_aes_key = 6;
/*
* A Preset LocalConfig to apply during factory reset
*/
LocalConfig oem_local_config = 7;
/*
* A Preset LocalModuleConfig to apply during factory reset
*/
LocalModuleConfig oem_local_module_config = 8;
} }

View file

@ -1 +0,0 @@
*InterdeviceMessage.nmea max_size:1024

View file

@ -1,44 +0,0 @@
syntax = "proto3";
package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "InterdeviceProtos";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
// encapsulate up to 1k of NMEA string data
enum MessageType {
ACK = 0;
COLLECT_INTERVAL = 160; // in ms
BEEP_ON = 161; // duration ms
BEEP_OFF = 162; // cancel prematurely
SHUTDOWN = 163;
POWER_ON = 164;
SCD41_TEMP = 176;
SCD41_HUMIDITY = 177;
SCD41_CO2 = 178;
AHT20_TEMP = 179;
AHT20_HUMIDITY = 180;
TVOC_INDEX = 181;
}
message SensorData {
// The message type
MessageType type = 1;
// The sensor data, either as a float or an uint32
oneof data {
float float_value = 2;
uint32 uint32_value = 3;
}
}
message InterdeviceMessage {
// The message data
oneof data {
string nmea = 1;
SensorData sensor = 2;
}
}

View file

@ -8,7 +8,7 @@ import "meshtastic/module_config.proto";
option csharp_namespace = "Meshtastic.Protobufs"; option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated"; option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "LocalOnlyProtos"; option java_outer_classname = "LocalOnlyProtos";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
/* /*
@ -58,11 +58,6 @@ message LocalConfig {
* NodeDB.cpp in the device code. * NodeDB.cpp in the device code.
*/ */
uint32 version = 8; uint32 version = 8;
/*
* The part of the config that is specific to Security settings
*/
Config.SecurityConfig security = 9;
} }
message LocalModuleConfig { message LocalModuleConfig {
@ -119,7 +114,7 @@ message LocalModuleConfig {
/* /*
* The part of the config that is specific to the Ambient Lighting module * The part of the config that is specific to the Ambient Lighting module
*/ */
ModuleConfig.AmbientLightingConfig ambient_lighting = 12; ModuleConfig.AmbientLightingConfig ambient_lighting = 12;
/* /*
* The part of the config that is specific to the Detection Sensor module * The part of the config that is specific to the Detection Sensor module
@ -131,25 +126,10 @@ message LocalModuleConfig {
*/ */
ModuleConfig.PaxcounterConfig paxcounter = 14; ModuleConfig.PaxcounterConfig paxcounter = 14;
/*
* StatusMessage Config
*/
ModuleConfig.StatusMessageConfig statusmessage = 15;
/*
* The part of the config that is specific to the Traffic Management module
*/
ModuleConfig.TrafficManagementConfig traffic_management = 16;
/*
* TAK Config
*/
ModuleConfig.TAKConfig tak = 17;
/* /*
* A version integer used to invalidate old save files when we make * A version integer used to invalidate old save files when we make
* incompatible changes This integer is set at build time and is private to * incompatible changes This integer is set at build time and is private to
* NodeDB.cpp in the device code. * NodeDB.cpp in the device code.
*/ */
uint32 version = 8; uint32 version = 8;
} }

View file

@ -3,37 +3,25 @@
*macaddr max_size:6 fixed_length:true # macaddrs *macaddr max_size:6 fixed_length:true # macaddrs
*id max_size:16 # node id strings *id max_size:16 # node id strings
*public_key max_size:32 # public key
*User.long_name max_size:40 *User.long_name max_size:40
*User.short_name max_size:5 *User.short_name max_size:5
*RouteDiscovery.route max_count:8 *RouteDiscovery.route max_count:8
*RouteDiscovery.snr_towards max_count:8
*RouteDiscovery.snr_towards int_size:8
*RouteDiscovery.route_back max_count:8
*RouteDiscovery.snr_back max_count:8
*RouteDiscovery.snr_back int_size:8
# note: this payload length is ONLY the bytes that are sent inside of the Data protobuf (excluding protobuf overhead). The 16 byte header is # note: this payload length is ONLY the bytes that are sent inside of the Data protobuf (excluding protobuf overhead). The 16 byte header is
# outside of this envelope # outside of this envelope
*Data.payload max_size:233 *Data.payload max_size:237
*Data.bitfield int_size:8
*NodeInfo.channel int_size:8 *NodeInfo.channel int_size:8
*NodeInfo.hops_away int_size:8 *NodeInfo.hops_away int_size:8
# Big enough for 1.2.28.568032c-d # Big enough for 1.2.28.568032c-d
*MyNodeInfo.firmware_version max_size:18 *MyNodeInfo.firmware_version max_size:18
*MyNodeInfo.device_id max_size:16
*MyNodeInfo.pio_env max_size:40
*MyNodeInfo.air_period_tx max_count:8 *MyNodeInfo.air_period_tx max_count:8
*MyNodeInfo.air_period_rx max_count:8 *MyNodeInfo.air_period_rx max_count:8
*MyNodeInfo.firmware_edition int_size:8
*MyNodeInfo.nodedb_count int_size:16
# Note: the actual limit (because of header bytes) on the size of encrypted payloads is 251 bytes, but I use 256 # Note: the actual limit (because of header bytes) on the size of encrypted payloads is 251 bytes, but I use 256
# here because we might need to fill with zeros for padding to encryption block size (16 bytes per block) # here because we might need to fill with zeros for padding to encryption block size (16 bytes per block)
*MeshPacket.encrypted max_size:256 *MeshPacket.encrypted max_size:256
@ -41,8 +29,6 @@
*MeshPacket.hop_limit int_size:8 *MeshPacket.hop_limit int_size:8
*MeshPacket.hop_start int_size:8 *MeshPacket.hop_start int_size:8
*MeshPacket.channel int_size:8 *MeshPacket.channel int_size:8
*MeshPacket.next_hop int_size:8
*MeshPacket.relay_node int_size:8
*QueueStatus.res int_size:8 *QueueStatus.res int_size:8
*QueueStatus.free int_size:8 *QueueStatus.free int_size:8
@ -54,35 +40,14 @@
*Routing.variant anonymous_oneof:true *Routing.variant anonymous_oneof:true
*LogRecord.message max_size:384 *LogRecord.message max_size:64
*LogRecord.source max_size:32 *LogRecord.source max_size:8
*FileInfo.file_name max_size:228
*ClientNotification.message max_size:400
*KeyVerificationNumberInform.remote_longname max_size:40
*KeyVerificationNumberRequest.remote_longname max_size:40
*KeyVerificationFinal.remote_longname max_size:40
*KeyVerificationFinal.verification_characters max_size:10
*KeyVerification.hash1 max_size:32
*KeyVerification.hash2 max_size:32
*StoreForwardPlusPlus.message_hash max_size:32
*StoreForwardPlusPlus.commit_hash max_size:32
*StoreForwardPlusPlus.root_hash max_size:32
*StoreForwardPlusPlus.message max_size:240
*RemoteShell.payload max_size:200
*StatusMessage.status max_size:80
# MyMessage.name max_size:40 # MyMessage.name max_size:40
# or fixed_length or fixed_count, or max_count # or fixed_length or fixed_count, or max_count
#This value may want to be a few bytes smaller to compensate for the parent fields. #This value may want to be a few bytes smaller to compensate for the parent fields.
*Compressed.data max_size:233 *Compressed.data max_size:237
*Waypoint.name max_size:30 *Waypoint.name max_size:30
*Waypoint.description max_size:100 *Waypoint.description max_size:100
@ -94,7 +59,3 @@
*MqttClientProxyMessage.topic max_size:60 *MqttClientProxyMessage.topic max_size:60
*MqttClientProxyMessage.data max_size:435 *MqttClientProxyMessage.data max_size:435
*MqttClientProxyMessage.text max_size:435 *MqttClientProxyMessage.text max_size:435
*ChunkedPayload.chunk_count int_size:16
*ChunkedPayload.chunk_index int_size:16
*ChunkedPayload.payload_chunk max_size:228

File diff suppressed because it is too large Load diff

View file

@ -2,7 +2,7 @@
*MQTTConfig.address max_size:64 *MQTTConfig.address max_size:64
*MQTTConfig.username max_size:64 *MQTTConfig.username max_size:64
*MQTTConfig.password max_size:32 *MQTTConfig.password max_size:64
*MQTTConfig.root max_size:32 *MQTTConfig.root max_size:32
*AudioConfig.ptt_pin int_size:8 *AudioConfig.ptt_pin int_size:8
@ -26,6 +26,3 @@
*DetectionSensorConfig.monitor_pin int_size:8 *DetectionSensorConfig.monitor_pin int_size:8
*DetectionSensorConfig.name max_size:20 *DetectionSensorConfig.name max_size:20
*DetectionSensorConfig.detection_trigger_type max_size:8
*StatusMessageConfig.node_status max_size:80

View file

@ -2,12 +2,10 @@ syntax = "proto3";
package meshtastic; package meshtastic;
import "meshtastic/atak.proto";
option csharp_namespace = "Meshtastic.Protobufs"; option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated"; option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "ModuleConfigProtos"; option java_outer_classname = "ModuleConfigProtos";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
/* /*
@ -97,11 +95,6 @@ message ModuleConfig {
* Bits of precision for the location sent (default of 32 is full precision). * Bits of precision for the location sent (default of 32 is full precision).
*/ */
uint32 position_precision = 2; uint32 position_precision = 2;
/*
* Whether we have opted-in to report our location to the map
*/
bool should_report_location = 3;
} }
/* /*
@ -132,59 +125,34 @@ message ModuleConfig {
* Whether the Module is enabled * Whether the Module is enabled
*/ */
bool enabled = 1; bool enabled = 1;
/* /*
* Interval in seconds of how often we should try to send our * Interval in seconds of how often we should try to send our
* Neighbor Info (minimum is 14400, i.e., 4 hours) * Neighbor Info to the mesh
*/ */
uint32 update_interval = 2; uint32 update_interval = 2;
/*
* Whether in addition to sending it to MQTT and the PhoneAPI, our NeighborInfo should be transmitted over LoRa.
* Note that this is not available on a channel with default key and name.
*/
bool transmit_over_lora = 3;
} }
/* /*
* Detection Sensor Module Config * Detection Sensor Module Config
*/ */
message DetectionSensorConfig { message DetectionSensorConfig {
enum TriggerType {
// Event is triggered if pin is low
LOGIC_LOW = 0;
// Event is triggered if pin is high
LOGIC_HIGH = 1;
// Event is triggered when pin goes high to low
FALLING_EDGE = 2;
// Event is triggered when pin goes low to high
RISING_EDGE = 3;
// Event is triggered on every pin state change, low is considered to be
// "active"
EITHER_EDGE_ACTIVE_LOW = 4;
// Event is triggered on every pin state change, high is considered to be
// "active"
EITHER_EDGE_ACTIVE_HIGH = 5;
}
/* /*
* Whether the Module is enabled * Whether the Module is enabled
*/ */
bool enabled = 1; bool enabled = 1;
/* /*
* Interval in seconds of how often we can send a message to the mesh when a * Interval in seconds of how often we can send a message to the mesh when a state change is detected
* trigger event is detected
*/ */
uint32 minimum_broadcast_secs = 2; uint32 minimum_broadcast_secs = 2;
/* /*
* Interval in seconds of how often we should send a message to the mesh * Interval in seconds of how often we should send a message to the mesh with the current state regardless of changes
* with the current state regardless of trigger events When set to 0, only * When set to 0, only state changes will be broadcasted
* trigger events will be broadcasted Works as a sort of status heartbeat * Works as a sort of status heartbeat for peace of mind
* for peace of mind
*/ */
uint32 state_broadcast_secs = 3; uint32 state_broadcast_secs = 3;
/* /*
* Send ASCII bell with alert message * Send ASCII bell with alert message
* Useful for triggering ext. notification on bell * Useful for triggering ext. notification on bell
@ -204,9 +172,10 @@ message ModuleConfig {
uint32 monitor_pin = 6; uint32 monitor_pin = 6;
/* /*
* The type of trigger event to be used * Whether or not the GPIO pin state detection is triggered on HIGH (1)
* Otherwise LOW (0)
*/ */
TriggerType detection_trigger_type = 7; bool detection_triggered_high = 7;
/* /*
* Whether or not use INPUT_PULLUP mode for GPIO pin * Whether or not use INPUT_PULLUP mode for GPIO pin
@ -285,92 +254,6 @@ message ModuleConfig {
*/ */
uint32 paxcounter_update_interval = 2; uint32 paxcounter_update_interval = 2;
/*
* WiFi RSSI threshold. Defaults to -80
*/
int32 wifi_threshold = 3;
/*
* BLE RSSI threshold. Defaults to -80
*/
int32 ble_threshold = 4;
}
/*
* Config for the Traffic Management module.
* Provides packet inspection and traffic shaping to help reduce channel utilization
*/
message TrafficManagementConfig {
/*
* Master enable for traffic management module
*/
bool enabled = 1;
/*
* Enable position deduplication to drop redundant position broadcasts
*/
bool position_dedup_enabled = 2;
/*
* Number of bits of precision for position deduplication (0-32)
*/
uint32 position_precision_bits = 3;
/*
* Minimum interval in seconds between position updates from the same node
*/
uint32 position_min_interval_secs = 4;
/*
* Enable direct response to NodeInfo requests from local cache
*/
bool nodeinfo_direct_response = 5;
/*
* Minimum hop distance from requestor before responding to NodeInfo requests
*/
uint32 nodeinfo_direct_response_max_hops = 6;
/*
* Enable per-node rate limiting to throttle chatty nodes
*/
bool rate_limit_enabled = 7;
/*
* Time window in seconds for rate limiting calculations
*/
uint32 rate_limit_window_secs = 8;
/*
* Maximum packets allowed per node within the rate limit window
*/
uint32 rate_limit_max_packets = 9;
/*
* Enable dropping of unknown/undecryptable packets per rate_limit_window_secs
*/
bool drop_unknown_enabled = 10;
/*
* Number of unknown packets before dropping from a node
*/
uint32 unknown_packet_threshold = 11;
/*
* Set hop_limit to 0 for relayed telemetry broadcasts (own packets unaffected)
*/
bool exhaust_hop_telemetry = 12;
/*
* Set hop_limit to 0 for relayed position broadcasts (own packets unaffected)
*/
bool exhaust_hop_position = 13;
/*
* Preserve hop_limit for router-to-router traffic
*/
bool router_preserve_hops = 14;
} }
/* /*
@ -410,17 +293,6 @@ message ModuleConfig {
NMEA = 4; NMEA = 4;
// NMEA messages specifically tailored for CalTopo // NMEA messages specifically tailored for CalTopo
CALTOPO = 5; CALTOPO = 5;
// Ecowitt WS85 weather station
WS85 = 6;
// VE.Direct is a serial protocol used by Victron Energy products
// https://beta.ivc.no/wiki/index.php/Victron_VE_Direct_DIY_Cable
VE_DIRECT = 7;
// Used to configure and view some parameters of MeshSolar.
// https://heltec.org/project/meshsolar/
MS_CONFIG = 8;
// Logs mesh traffic to the serial pins, ideal for logging via openLog or similar.
LOG = 9; // includes other packets
LOGTEXT = 10; // only text (channel & DM)
} }
/* /*
@ -585,11 +457,6 @@ message ModuleConfig {
* TODO: REPLACE * TODO: REPLACE
*/ */
uint32 history_return_window = 5; uint32 history_return_window = 5;
/*
* Set to true to let this node act as a server that stores received messages and resends them upon request.
*/
bool is_server = 6;
} }
/* /*
@ -611,12 +478,6 @@ message ModuleConfig {
* ESP32 Only * ESP32 Only
*/ */
bool save = 3; bool save = 3;
/*
* Bool indicating that the node should cleanup / destroy it's RangeTest.csv file.
* ESP32 Only
*/
bool clear_on_reboot = 4;
} }
/* /*
@ -665,52 +526,35 @@ message ModuleConfig {
uint32 air_quality_interval = 7; uint32 air_quality_interval = 7;
/* /*
* Enable/disable Power metrics * Interval in seconds of how often we should try to send our
* air quality metrics to the mesh
*/ */
bool power_measurement_enabled = 8; bool power_measurement_enabled = 8;
/* /*
* Interval in seconds of how often we should try to send our * Interval in seconds of how often we should try to send our
* power metrics to the mesh * air quality metrics to the mesh
*/ */
uint32 power_update_interval = 9; uint32 power_update_interval = 9;
/* /*
* Enable/Disable the power measurement module on-device display * Interval in seconds of how often we should try to send our
* air quality metrics to the mesh
*/ */
bool power_screen_enabled = 10; bool power_screen_enabled = 10;
/*
* Preferences for the (Health) Telemetry Module
* Enable/Disable the telemetry measurement module measurement collection
*/
bool health_measurement_enabled = 11;
/*
* Interval in seconds of how often we should try to send our
* health metrics to the mesh
*/
uint32 health_update_interval = 12;
/*
* Enable/Disable the health telemetry module on-device display
*/
bool health_screen_enabled = 13;
/*
* Enable/Disable the device telemetry module to send metrics to the mesh
* Note: We will still send telemtry to the connected phone / client every minute over the API
*/
bool device_telemetry_enabled = 14;
/*
* Enable/Disable the air quality telemetry measurement module on-device display
*/
bool air_quality_screen_enabled = 15;
} }
/* /*
* Canned Messages Module Config * TODO: REPLACE
*/ */
message CannedMessageConfig { message CannedMessageConfig {
/* /*
@ -801,13 +645,13 @@ message ModuleConfig {
/* /*
* Enable/disable CannedMessageModule. * Enable/disable CannedMessageModule.
*/ */
bool enabled = 9 [deprecated = true]; bool enabled = 9;
/* /*
* Input event origin accepted by the canned message module. * Input event origin accepted by the canned message module.
* Can be e.g. "rotEnc1", "upDownEnc1", "scanAndSelect", "cardkb", "serialkb", or keyword "_any" * Can be e.g. "rotEnc1", "upDownEnc1" or keyword "_any"
*/ */
string allow_input_source = 10 [deprecated = true]; string allow_input_source = 10;
/* /*
* CannedMessageModule also sends a bell character with the messages. * CannedMessageModule also sends a bell character with the messages.
@ -817,10 +661,11 @@ message ModuleConfig {
} }
/* /*
Ambient Lighting Module - Settings for control of onboard LEDs to allow users to adjust the brightness levels and respective color levels. Ambient Lighting Module - Settings for control of onboard LEDs to allow users to adjust the brightness levels and respective color levels.
Initially created for the RAK14001 RGB LED module. Initially created for the RAK14001 RGB LED module.
*/ */
message AmbientLightingConfig { message AmbientLightingConfig {
/* /*
* Sets LED to on or off. * Sets LED to on or off.
*/ */
@ -847,16 +692,6 @@ message ModuleConfig {
uint32 blue = 5; uint32 blue = 5;
} }
/*
* StatusMessage config - Allows setting a status message for a node to periodically rebroadcast
*/
message StatusMessageConfig {
/*
* The actual status string
*/
string node_status = 1;
}
/* /*
* TODO: REPLACE * TODO: REPLACE
*/ */
@ -925,37 +760,6 @@ message ModuleConfig {
* TODO: REPLACE * TODO: REPLACE
*/ */
PaxcounterConfig paxcounter = 13; PaxcounterConfig paxcounter = 13;
/*
* TODO: REPLACE
*/
StatusMessageConfig statusmessage = 14;
/*
* Traffic management module config for mesh network optimization
*/
TrafficManagementConfig traffic_management = 15;
/*
* TAK team/role configuration for TAK_TRACKER
*/
TAKConfig tak = 16;
}
/*
* TAK team/role configuration
*/
message TAKConfig {
/*
* Team color.
* Default Unspecifed_Color -> firmware uses Cyan
*/
Team team = 1;
/*
* Member role.
* Default Unspecifed -> firmware uses TeamMember
*/
MemberRole role = 2;
} }
} }
@ -994,4 +798,4 @@ enum RemoteHardwarePinType {
* GPIO pin can be written to (high / low) * GPIO pin can be written to (high / low)
*/ */
DIGITAL_WRITE = 2; DIGITAL_WRITE = 2;
} }

View file

@ -2,13 +2,13 @@ syntax = "proto3";
package meshtastic; package meshtastic;
import "meshtastic/config.proto";
import "meshtastic/mesh.proto"; import "meshtastic/mesh.proto";
import "meshtastic/config.proto";
option csharp_namespace = "Meshtastic.Protobufs"; option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated"; option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "MQTTProtos"; option java_outer_classname = "MQTTProtos";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
/* /*
@ -49,8 +49,8 @@ message MapReport {
string short_name = 2; string short_name = 2;
/* /*
* Role of the node that applies specific settings for a particular use-case * Role of the node that applies specific settings for a particular use-case
*/ */
Config.DeviceConfig.Role role = 3; Config.DeviceConfig.Role role = 3;
/* /*
@ -64,19 +64,19 @@ message MapReport {
string firmware_version = 5; string firmware_version = 5;
/* /*
* The region code for the radio (US, CN, EU433, etc...) * The region code for the radio (US, CN, EU433, etc...)
*/ */
Config.LoRaConfig.RegionCode region = 6; Config.LoRaConfig.RegionCode region = 6;
/* /*
* Modem preset used by the radio (LongFast, MediumSlow, etc...) * Modem preset used by the radio (LongFast, MediumSlow, etc...)
*/ */
Config.LoRaConfig.ModemPreset modem_preset = 7; Config.LoRaConfig.ModemPreset modem_preset = 7;
/* /*
* Whether the node has a channel with default PSK and name (LongFast, MediumSlow, etc...) * Whether the node has a channel with default PSK and name (LongFast, MediumSlow, etc...)
* and it uses the default frequency slot given the region and modem preset. * and it uses the default frequency slot given the region and modem preset.
*/ */
bool has_default_channel = 8; bool has_default_channel = 8;
/* /*
@ -103,10 +103,4 @@ message MapReport {
* Number of online nodes (heard in the last 2 hours) this node has in its list that were received locally (not via MQTT) * Number of online nodes (heard in the last 2 hours) this node has in its list that were received locally (not via MQTT)
*/ */
uint32 num_online_local_nodes = 13; uint32 num_online_local_nodes = 13;
}
/*
* User has opted in to share their location (map report) with the mqtt server
* Controlled by map_report.should_report_location
*/
bool has_opted_report_location = 14;
}

View file

@ -5,7 +5,7 @@ package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs"; option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated"; option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "PaxcountProtos"; option java_outer_classname = "PaxcountProtos";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
/* /*

View file

@ -5,7 +5,7 @@ package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs"; option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated"; option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "Portnums"; option java_outer_classname = "Portnums";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
/* /*
@ -105,21 +105,6 @@ enum PortNum {
*/ */
DETECTION_SENSOR_APP = 10; DETECTION_SENSOR_APP = 10;
/*
* Same as Text Message but used for critical alerts.
*/
ALERT_APP = 11;
/*
* Module/port for handling key verification requests.
*/
KEY_VERIFICATION_APP = 12;
/*
* Module/port for handling primitive remote shell access.
*/
REMOTE_SHELL_APP = 13;
/* /*
* Provides a 'ping' service that replies to any packet it receives. * Provides a 'ping' service that replies to any packet it receives.
* Also serves as a small example module. * Also serves as a small example module.
@ -139,22 +124,6 @@ enum PortNum {
*/ */
PAXCOUNTER_APP = 34; PAXCOUNTER_APP = 34;
/*
* Store and Forward++ module included in the firmware
* ENCODING: protobuf
* This module is specifically for Native Linux nodes, and provides a Git-style
* chain of messages.
*/
STORE_FORWARD_PLUSPLUS_APP = 35;
/*
* Node Status module
* ENCODING: protobuf
* This module allows setting an extra string of status for a node.
* Broadcasts on change and on a timer, possibly once a day.
*/
NODE_STATUS_APP = 36;
/* /*
* Provides a hardware serial interface to send and receive from the Meshtastic network. * Provides a hardware serial interface to send and receive from the Meshtastic network.
* Connect to the RX/TX pins of a device with 38400 8N1. Packets received from the Meshtastic * Connect to the RX/TX pins of a device with 38400 8N1. Packets received from the Meshtastic
@ -205,7 +174,7 @@ enum PortNum {
/* /*
* Provides a traceroute functionality to show the route a packet towards * Provides a traceroute functionality to show the route a packet towards
* a certain destination would take on the mesh. Contains a RouteDiscovery message as payload. * a certain destination would take on the mesh.
* ENCODING: Protobuf * ENCODING: Protobuf
*/ */
TRACEROUTE_APP = 70; TRACEROUTE_APP = 70;
@ -215,7 +184,7 @@ enum PortNum {
* ENCODING: Protobuf * ENCODING: Protobuf
*/ */
NEIGHBORINFO_APP = 71; NEIGHBORINFO_APP = 71;
/* /*
* ATAK Plugin * ATAK Plugin
* Portnum for payloads from the official Meshtastic ATAK plugin * Portnum for payloads from the official Meshtastic ATAK plugin
@ -227,44 +196,6 @@ enum PortNum {
*/ */
MAP_REPORT_APP = 73; MAP_REPORT_APP = 73;
/*
* PowerStress based monitoring support (for automated power consumption testing)
*/
POWERSTRESS_APP = 74;
/*
* LoraWAN Payload Transport
* ENCODING: compact binary LoRaWAN uplink (10-byte RF metadata + PHY payload) - see LoRaWANBridgeModule
*/
LORAWAN_BRIDGE = 75;
/*
* Reticulum Network Stack Tunnel App
* ENCODING: Fragmented RNS Packet. Handled by Meshtastic RNS interface
*/
RETICULUM_TUNNEL_APP = 76;
/*
* App for transporting Cayenne Low Power Payload, popular for LoRaWAN sensor nodes. Offers ability to send
* arbitrary telemetry over meshtastic that is not covered by telemetry.proto
* ENCODING: CayenneLLP
*/
CAYENNE_APP = 77;
/*
* ATAK Plugin V2
* Portnum for payloads from the official Meshtastic ATAK plugin using
* TAKPacketV2 with zstd dictionary compression.
*/
ATAK_PLUGIN_V2 = 78;
/*
* GroupAlarm integration
* Used for transporting GroupAlarm-related messages between Meshtastic nodes
* and companion applications/services.
*/
GROUPALARM_APP = 112;
/* /*
* Private applications should use portnums >= 256. * Private applications should use portnums >= 256.
* To simplify initial development and testing you can use "PRIVATE_APP" * To simplify initial development and testing you can use "PRIVATE_APP"
@ -282,4 +213,4 @@ enum PortNum {
* Currently we limit port nums to no higher than this value * Currently we limit port nums to no higher than this value
*/ */
MAX = 511; MAX = 511;
} }

View file

@ -1,103 +0,0 @@
syntax = "proto3";
package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "PowerMonProtos";
option java_package = "org.meshtastic.proto";
option swift_prefix = "";
/* Note: There are no 'PowerMon' messages normally in use (PowerMons are sent only as structured logs - slogs).
* But we wrap our State enum in this message to effectively nest a namespace (without our linter yelling at us)
*/
message PowerMon {
/* Any significant power changing event in meshtastic should be tagged with a powermon state transition.
* If you are making new meshtastic features feel free to add new entries at the end of this definition.
*/
enum State {
None = 0;
CPU_DeepSleep = 0x01;
CPU_LightSleep = 0x02;
/*
The external Vext1 power is on. Many boards have auxillary power rails that the CPU turns on only
occasionally. In cases where that rail has multiple devices on it we usually want to have logging on
the state of that rail as an independent record.
For instance on the Heltec Tracker 1.1 board, this rail is the power source for the GPS and screen.
The log messages will be short and complete (see PowerMon.Event in the protobufs for details).
something like "S:PM:C,0x00001234,REASON" where the hex number is the bitmask of all current states.
(We use a bitmask for states so that if a log message gets lost it won't be fatal)
*/
Vext1_On = 0x04;
Lora_RXOn = 0x08;
Lora_TXOn = 0x10;
Lora_RXActive = 0x20;
BT_On = 0x40;
LED_On = 0x80;
Screen_On = 0x100;
Screen_Drawing = 0x200;
Wifi_On = 0x400;
/*
* GPS is actively trying to find our location
* See GPSPowerState for more details
*/
GPS_Active = 0x800;
}
}
/*
* PowerStress testing support via the C++ PowerStress module
*/
message PowerStressMessage {
/*
* What operation would we like the UUT to perform.
* note: senders should probably set want_response in their request packets, so that they can know when the state
* machine has started processing their request
*/
enum Opcode {
/*
* Unset/unused
*/
UNSET = 0;
PRINT_INFO = 1; // Print board version slog and send an ack that we are alive and ready to process commands
FORCE_QUIET = 2; // Try to turn off all automatic processing of packets, screen, sleeping, etc (to make it easier to measure in isolation)
END_QUIET = 3; // Stop powerstress processing - probably by just rebooting the board
SCREEN_ON = 16; // Turn the screen on
SCREEN_OFF = 17; // Turn the screen off
CPU_IDLE = 32; // Let the CPU run but we assume mostly idling for num_seconds
CPU_DEEPSLEEP = 33; // Force deep sleep for FIXME seconds
CPU_FULLON = 34; // Spin the CPU as fast as possible for num_seconds
LED_ON = 48; // Turn the LED on for num_seconds (and leave it on - for baseline power measurement purposes)
LED_OFF = 49; // Force the LED off for num_seconds
LORA_OFF = 64; // Completely turn off the LORA radio for num_seconds
LORA_TX = 65; // Send Lora packets for num_seconds
LORA_RX = 66; // Receive Lora packets for num_seconds (node will be mostly just listening, unless an external agent is helping stress this by sending packets on the current channel)
BT_OFF = 80; // Turn off the BT radio for num_seconds
BT_ON = 81; // Turn on the BT radio for num_seconds
WIFI_OFF = 96; // Turn off the WIFI radio for num_seconds
WIFI_ON = 97; // Turn on the WIFI radio for num_seconds
GPS_OFF = 112; // Turn off the GPS radio for num_seconds
GPS_ON = 113; // Turn on the GPS radio for num_seconds
}
/*
* What type of HardwareMessage is this?
*/
Opcode cmd = 1;
float num_seconds = 2;
}

View file

@ -5,7 +5,7 @@ package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs"; option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated"; option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "RemoteHardware"; option java_outer_classname = "RemoteHardware";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
/* /*

View file

@ -1 +1 @@
*RTTTLConfig.ringtone max_size:231 *RTTTLConfig.ringtone max_size:230

View file

@ -5,7 +5,7 @@ package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs"; option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated"; option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "RTTTLConfigProtos"; option java_outer_classname = "RTTTLConfigProtos";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
/* /*

View file

@ -1 +1 @@
*StoreAndForward.text max_size:233 *StoreAndForward.text max_size:237

View file

@ -5,7 +5,7 @@ package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs"; option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated"; option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "StoreAndForwardProtos"; option java_outer_classname = "StoreAndForwardProtos";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
/* /*
@ -215,4 +215,4 @@ message StoreAndForward {
*/ */
bytes text = 5; bytes text = 5;
} }
} }

View file

@ -1,19 +1,4 @@
# options for nanopb # options for nanopb
# https://jpa.kapsi.fi/nanopb/docs/reference.html#proto-file-options # https://jpa.kapsi.fi/nanopb/docs/reference.html#proto-file-options
*EnvironmentMetrics.iaq int_size:16
*EnvironmentMetrics.wind_direction int_size:16
*EnvironmentMetrics.soil_moisture int_size:8
*EnvironmentMetrics.one_wire_temperature max_count:8
*LocalStats.num_online_nodes int_size:16
*LocalStats.num_total_nodes int_size:16
*LocalStats.num_tx_dropped int_size:16
*HealthMetrics.heart_bpm int_size:8
*HealthMetrics.spO2 int_size:8
*HostMetrics.load1 int_size:16
*HostMetrics.load5 int_size:16
*HostMetrics.load15 int_size:16
*HostMetrics.user_string max_size:200

File diff suppressed because it is too large Load diff

View file

@ -5,7 +5,7 @@ package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs"; option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated"; option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "XmodemProtos"; option java_outer_classname = "XmodemProtos";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
message XModem { message XModem {

View file

@ -6,42 +6,40 @@
// for memory-limited environments. // for memory-limited environments.
syntax = "proto2"; syntax = "proto2";
import "google/protobuf/descriptor.proto"; import "google/protobuf/descriptor.proto";
option go_package = "github.com/meshtastic/go/generated";
option java_package = "fi.kapsi.koti.jpa.nanopb"; option java_package = "fi.kapsi.koti.jpa.nanopb";
enum FieldType { enum FieldType {
FT_DEFAULT = 0; // Automatically decide field type, generate static field if possible. FT_DEFAULT = 0; // Automatically decide field type, generate static field if possible.
FT_CALLBACK = 1; // Always generate a callback field. FT_CALLBACK = 1; // Always generate a callback field.
FT_POINTER = 4; // Always generate a dynamically allocated field. FT_POINTER = 4; // Always generate a dynamically allocated field.
FT_STATIC = 2; // Generate a static field or raise an exception if not possible. FT_STATIC = 2; // Generate a static field or raise an exception if not possible.
FT_IGNORE = 3; // Ignore the field completely. FT_IGNORE = 3; // Ignore the field completely.
FT_INLINE = 5; // Legacy option, use the separate 'fixed_length' option instead FT_INLINE = 5; // Legacy option, use the separate 'fixed_length' option instead
} }
enum IntSize { enum IntSize {
IS_DEFAULT = 0; // Default, 32/64bit based on type in .proto IS_DEFAULT = 0; // Default, 32/64bit based on type in .proto
IS_8 = 8; IS_8 = 8;
IS_16 = 16; IS_16 = 16;
IS_32 = 32; IS_32 = 32;
IS_64 = 64; IS_64 = 64;
} }
enum TypenameMangling { enum TypenameMangling {
M_NONE = 0; // Default, no typename mangling M_NONE = 0; // Default, no typename mangling
M_STRIP_PACKAGE = 1; // Strip current package name M_STRIP_PACKAGE = 1; // Strip current package name
M_FLATTEN = 2; // Only use last path component M_FLATTEN = 2; // Only use last path component
M_PACKAGE_INITIALS = 3; // Replace the package name by the initials M_PACKAGE_INITIALS = 3; // Replace the package name by the initials
} }
enum DescriptorSize { enum DescriptorSize {
DS_AUTO = 0; // Select minimal size based on field type DS_AUTO = 0; // Select minimal size based on field type
DS_1 = 1; // 1 word; up to 15 byte fields, no arrays DS_1 = 1; // 1 word; up to 15 byte fields, no arrays
DS_2 = 2; // 2 words; up to 4095 byte fields, 4095 entry arrays DS_2 = 2; // 2 words; up to 4095 byte fields, 4095 entry arrays
DS_4 = 4; // 4 words; up to 2^32-1 byte fields, 2^16-1 entry arrays DS_4 = 4; // 4 words; up to 2^32-1 byte fields, 2^16-1 entry arrays
DS_8 = 8; // 8 words; up to 2^32-1 entry arrays DS_8 = 8; // 8 words; up to 2^32-1 entry arrays
} }
// This is the inner options message, which basically defines options for // This is the inner options message, which basically defines options for
@ -51,32 +49,32 @@ message NanoPBOptions {
// Allocated size for 'bytes' and 'string' fields. // Allocated size for 'bytes' and 'string' fields.
// For string fields, this should include the space for null terminator. // For string fields, this should include the space for null terminator.
optional int32 max_size = 1; optional int32 max_size = 1;
// Maximum length for 'string' fields. Setting this is equivalent // Maximum length for 'string' fields. Setting this is equivalent
// to setting max_size to a value of length+1. // to setting max_size to a value of length+1.
optional int32 max_length = 14; optional int32 max_length = 14;
// Allocated number of entries in arrays ('repeated' fields) // Allocated number of entries in arrays ('repeated' fields)
optional int32 max_count = 2; optional int32 max_count = 2;
// Size of integer fields. Can save some memory if you don't need // Size of integer fields. Can save some memory if you don't need
// full 32 bits for the value. // full 32 bits for the value.
optional IntSize int_size = 7 [default = IS_DEFAULT]; optional IntSize int_size = 7 [default = IS_DEFAULT];
// Force type of field (callback or static allocation) // Force type of field (callback or static allocation)
optional FieldType type = 3 [default = FT_DEFAULT]; optional FieldType type = 3 [default = FT_DEFAULT];
// Use long names for enums, i.e. EnumName_EnumValue. // Use long names for enums, i.e. EnumName_EnumValue.
optional bool long_names = 4 [default = true]; optional bool long_names = 4 [default = true];
// Add 'packed' attribute to generated structs. // Add 'packed' attribute to generated structs.
// Note: this cannot be used on CPUs that break on unaligned // Note: this cannot be used on CPUs that break on unaligned
// accesses to variables. // accesses to variables.
optional bool packed_struct = 5 [default = false]; optional bool packed_struct = 5 [default = false];
// Add 'packed' attribute to generated enums. // Add 'packed' attribute to generated enums.
optional bool packed_enum = 10 [default = false]; optional bool packed_enum = 10 [default = false];
// Skip this message // Skip this message
optional bool skip_message = 6 [default = false]; optional bool skip_message = 6 [default = false];
@ -91,7 +89,7 @@ message NanoPBOptions {
// Proto3 singular field does not generate a "has_" flag // Proto3 singular field does not generate a "has_" flag
optional bool proto3 = 12 [default = false]; optional bool proto3 = 12 [default = false];
// Force proto3 messages to have no "has_" flag. // Force proto3 messages to have no "has_" flag.
// This was default behavior until nanopb-0.4.0. // This was default behavior until nanopb-0.4.0.
optional bool proto3_singular_msgs = 21 [default = false]; optional bool proto3_singular_msgs = 21 [default = false];
@ -141,7 +139,7 @@ message NanoPBOptions {
// Package name that applies only for nanopb. // Package name that applies only for nanopb.
optional string package = 25; optional string package = 25;
// Override type of the field in generated C code. Only to be used with related field types // Override type of the field in generated C code. Only to be used with related field types
optional google.protobuf.FieldDescriptorProto.Type type_override = 27; optional google.protobuf.FieldDescriptorProto.Type type_override = 27;
@ -154,7 +152,7 @@ message NanoPBOptions {
// A field that can become a static member of a c struct (e.g. int, bool, etc) // A field that can become a static member of a c struct (e.g. int, bool, etc)
// will be a a static field. // will be a a static field.
// Fields with dynamic length are converted to either a pointer or a callback. // Fields with dynamic length are converted to either a pointer or a callback.
optional FieldType fallback_type = 29 [default = FT_CALLBACK]; optional FieldType fallback_type = 29 [default = FT_CALLBACK];
} }
// Extensions to protoc 'Descriptor' type in order to define options // Extensions to protoc 'Descriptor' type in order to define options
@ -169,17 +167,19 @@ message NanoPBOptions {
// -------------------------------- // --------------------------------
extend google.protobuf.FileOptions { extend google.protobuf.FileOptions {
optional NanoPBOptions nanopb_fileopt = 1010; optional NanoPBOptions nanopb_fileopt = 1010;
} }
extend google.protobuf.MessageOptions { extend google.protobuf.MessageOptions {
optional NanoPBOptions nanopb_msgopt = 1010; optional NanoPBOptions nanopb_msgopt = 1010;
} }
extend google.protobuf.EnumOptions { extend google.protobuf.EnumOptions {
optional NanoPBOptions nanopb_enumopt = 1010; optional NanoPBOptions nanopb_enumopt = 1010;
} }
extend google.protobuf.FieldOptions { extend google.protobuf.FieldOptions {
optional NanoPBOptions nanopb = 1010; optional NanoPBOptions nanopb = 1010;
} }

105
packages/rust/Cargo.lock generated
View file

@ -1,105 +0,0 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 4
[[package]]
name = "anyhow"
version = "1.0.102"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
[[package]]
name = "bytes"
version = "1.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
[[package]]
name = "either"
version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
[[package]]
name = "itertools"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285"
dependencies = [
"either",
]
[[package]]
name = "meshtastic_protobufs"
version = "2.5.5"
dependencies = [
"prost",
"prost-types",
]
[[package]]
name = "proc-macro2"
version = "1.0.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
dependencies = [
"unicode-ident",
]
[[package]]
name = "prost"
version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568"
dependencies = [
"bytes",
"prost-derive",
]
[[package]]
name = "prost-derive"
version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b"
dependencies = [
"anyhow",
"itertools",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "prost-types"
version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7"
dependencies = [
"prost",
]
[[package]]
name = "quote"
version = "1.0.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
dependencies = [
"proc-macro2",
]
[[package]]
name = "syn"
version = "2.0.117"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "unicode-ident"
version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"

View file

@ -1,15 +0,0 @@
[package]
name = "meshtastic_protobufs"
edition = "2021"
version = "__PACKAGE_VERSION__"
description = "Meshtastic Protobuf definitions"
repository = "https://github.com/meshtastic/protobufs"
license-file = "LICENSE"
include = [
"**/*.rs",
"Cargo.toml",
]
[dependencies]
prost = "0.14.3"
prost-types = "0.14.3"

View file

@ -1,5 +0,0 @@
extern crate prost;
extern crate core;
extern crate prost_types;
include!("generated/mod.rs");

View file

@ -1,15 +0,0 @@
{
"name": "@meshtastic/protobufs",
"version": "__PACKAGE_VERSION__",
"exports": {
".": "./mod.ts"
},
"imports": {
"@bufbuild/protobuf": "npm:@bufbuild/protobuf@^2.2.3"
},
"publish": {
"exclude": [
"!lib"
]
}
}

16
packages/ts/deno.lock generated
View file

@ -1,16 +0,0 @@
{
"version": "4",
"specifiers": {
"npm:@bufbuild/protobuf@^2.2.3": "2.2.3"
},
"npm": {
"@bufbuild/protobuf@2.2.3": {
"integrity": "sha512-tFQoXHJdkEOSwj5tRIZSPNUuXK3RaR7T1nUrPgbYX1pUbvqqaaZAsfo+NXBPsz5rZMSKVFrgK1WL8Q/MSLvprg=="
}
},
"workspace": {
"dependencies": [
"npm:@bufbuild/protobuf@^2.2.3"
]
}
}

View file

@ -1,20 +0,0 @@
export * as Admin from "./lib/admin_pb.ts";
export * as AppOnly from "./lib/apponly_pb.ts";
export * as ATAK from "./lib/atak_pb.ts";
export * as CannedMessages from "./lib/cannedmessages_pb.ts";
export * as Channel from "./lib/channel_pb.ts";
export * as ClientOnly from "./lib/clientonly_pb.ts";
export * as Config from "./lib/config_pb.ts";
export * as ConnectionStatus from "./lib/connection_status_pb.ts";
export * as LocalOnly from "./lib/localonly_pb.ts";
export * as Mesh from "./lib/mesh_pb.ts";
export * as ModuleConfig from "./lib/module_config_pb.ts";
export * as Mqtt from "./lib/mqtt_pb.ts";
export * as PaxCount from "./lib/paxcount_pb.ts";
export * as Portnums from "./lib/portnums_pb.ts";
export * as PowerMon from "./lib/powermon_pb.ts";
export * as RemoteHardware from "./lib/remote_hardware_pb.ts";
export * as Rtttl from "./lib/rtttl_pb.ts";
export * as StoreForward from "./lib/storeforward_pb.ts";
export * as Telemetry from "./lib/telemetry_pb.ts";
export * as Xmodem from "./lib/xmodem_pb.ts";

View file

@ -1,32 +0,0 @@
{
"name": "@meshtastic/protobufs",
"description": "Protobuf definitions for the Meshtastic project",
"version": "__PACKAGE_VERSION__",
"homepage": "https://github.com/meshtastic/protobufs",
"license": "GPLV3",
"publishConfig": {
"access": "public"
},
"type": "module",
"main": "./dist/mod.js",
"module": "./dist/mod.js",
"types": "./dist/mod.d.ts",
"dependencies": {
"@bufbuild/protobuf": "^2.2.3"
},
"devDependencies": {
"tsdown": "^0.13.4",
"typescript": "^5.8.3"
},
"scripts": {
"build": "tsdown"
},
"tsdown": {
"entry": "mod.ts",
"dts": true,
"format": [
"esm"
],
"splitting": false
}
}

View file

@ -1,6 +0,0 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:recommended"
]
}