Compare commits

..

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

46 changed files with 269 additions and 3693 deletions

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.30.0
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.2.0
with:
buf_token: ${{ secrets.BUF_TOKEN }}

View file

@ -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.30.0
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.30.0
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,17 @@ 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.30.0
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.1.1
breaking: true
- name: Push to schema registry
uses: bufbuild/buf-push-action@v1.2.0
if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'pull_request' }}
with:
buf_token: ${{ secrets.BUF_TOKEN }}
draft: ${{ github.ref_name != 'master'}}

4
.gitignore vendored
View file

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

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/
lint:
use: use:
- MINIMAL - FILE
except: lint:
- PACKAGE_NO_IMPORT_CYCLE
ignore_only: ignore_only:
PACKAGE_DEFINED: PACKAGE_DEFINED:
- nanopb.proto - nanopb.proto
disallow_comment_ignores: true
breaking:
use: use:
- FILE - MINIMAL
except:
- EXTENSION_NO_DELETE
- FIELD_SAME_DEFAULT

View file

@ -2,8 +2,6 @@
*AdminMessage.session_passkey max_size:8 *AdminMessage.session_passkey max_size:8
*AdminMessage.OTAEvent.ota_hash max_size:32
*AdminMessage.InputEvent.event_code int_size:8 *AdminMessage.InputEvent.event_code int_size:8
*AdminMessage.InputEvent.kb_char int_size:8 *AdminMessage.InputEvent.kb_char int_size:8
*AdminMessage.InputEvent.touch_x int_size:16 *AdminMessage.InputEvent.touch_x int_size:16

View file

@ -2,18 +2,17 @@ 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";
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 = "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,6 +21,7 @@ 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 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. * The client MUST include the same key with any set_x commands. Key expires after 300 seconds.
@ -152,21 +152,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 { enum BackupLocation {
@ -203,23 +188,6 @@ message AdminMessage {
uint32 touch_y = 4; 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;
}
/* /*
* TODO: REPLACE * TODO: REPLACE
*/ */
@ -447,11 +415,6 @@ message AdminMessage {
*/ */
uint32 remove_ignored_node = 48; 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)
@ -481,9 +444,8 @@ message AdminMessage {
/* /*
* 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.
@ -508,42 +470,11 @@ message AdminMessage {
/* /*
* 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
*/ */
@ -596,14 +527,9 @@ message SharedContact {
* Add this contact to the blocked / ignored list * Add this contact to the blocked / ignored list
*/ */
bool should_ignore = 3; 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 * This message is used by a client to initiate or complete a key verification
*/ */
message KeyVerificationAdmin { message KeyVerificationAdmin {
@ -611,6 +537,7 @@ message KeyVerificationAdmin {
* Three stages of this request. * Three stages of this request.
*/ */
enum MessageType { enum MessageType {
/* /*
* This is the first stage, where a client initiates * This is the first stage, where a client initiates
*/ */
@ -631,6 +558,7 @@ message KeyVerificationAdmin {
* This is the cancel path, can be taken at any point * This is the cancel path, can be taken at any point
*/ */
DO_NOT_VERIFY = 3; DO_NOT_VERIFY = 3;
} }
MessageType message_type = 1; MessageType message_type = 1;
@ -650,113 +578,3 @@ message KeyVerificationAdmin {
*/ */
optional uint32 security_number = 4; 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

@ -6,105 +6,3 @@
*GeoChat.to max_size:120 *GeoChat.to max_size:120
*GeoChat.to_callsign max_size:120 *GeoChat.to_callsign max_size:120
*TAKPacket.detail max_size:220 *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 = "";
/* /*
@ -99,10 +98,10 @@ message ModuleSettings {
uint32 position_precision = 1; uint32 position_precision = 1;
/* /*
* Controls whether or not the client / device should mute the current channel * Controls whether or not the phone / clients should mute the current channel
* Useful for noisy public channels you don't necessarily want to disable * Useful for noisy public channels you don't necessarily want to disable
*/ */
bool is_muted = 2; bool is_client_muted = 2;
} }
/* /*

View file

@ -8,7 +8,7 @@ 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 = "";
/* /*

View file

@ -7,7 +7,7 @@ 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 {
@ -48,9 +48,8 @@ message Config {
* 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.
@ -109,14 +108,6 @@ message Config {
* consuming hops. * consuming hops.
*/ */
ROUTER_LATE = 11; 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;
} }
/* /*
@ -187,13 +178,6 @@ message Config {
* Buzzer is enabled only for non-notification tones such as button presses, startup, shutdown, but not for alerts. * Buzzer is enabled only for non-notification tones such as button presses, startup, shutdown, but not for alerts.
*/ */
SYSTEM_ONLY = 3; 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;
} }
/* /*
@ -205,7 +189,7 @@ 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 * Moved to SecurityConfig
*/ */
bool serial_enabled = 2 [deprecated = true]; bool serial_enabled = 2[deprecated = true];
/* /*
* 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
@ -240,7 +224,7 @@ message Config {
* 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 * Moved to SecurityConfig
*/ */
bool is_managed = 9 [deprecated = true]; bool is_managed = 9[deprecated = true];
/* /*
* Disables the triple-press of user button to enable or disable GPS * Disables the triple-press of user button to enable or disable GPS
@ -599,10 +583,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;
} }
/* /*
@ -640,14 +659,14 @@ message Config {
OLED_SH1106 = 2; OLED_SH1106 = 2;
/* /*
* Can not be auto detected but set by proto. Used for 128x64 screens * Can not be auto detected but set by proto. Used for 128x128 screens
*/ */
OLED_SH1107 = 3; 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 128x64 screens
*/ */
OLED_SH1107_128_128 = 4; OLED_SH1107_128_64 = 4;
} }
/* /*
@ -657,10 +676,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 +690,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
@ -777,17 +795,6 @@ message Config {
* If true, the device will display the time in 12-hour format on screen. * If true, the device will display the time in 12-hour format on screen.
*/ */
bool use_12h_clock = 12; 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;
} }
/* /*
@ -904,31 +911,19 @@ message Config {
* Philippines 915mhz * Philippines 915mhz
*/ */
PH_915 = 21; PH_915 = 21;
/* /*
* Australia / New Zealand 433MHz * Australia / New Zealand 433MHz
*/ */
ANZ_433 = 22; ANZ_433 = 22;
/* /*
* Kazakhstan 433MHz * Kazakhstan 433MHz
*/ */
KZ_433 = 23; KZ_433 = 23;
/* /*
* Kazakhstan 863MHz * Kazakhstan 863MHz
*/ */
KZ_863 = 24; KZ_863 = 24;
/*
* Nepal 865MHz
*/
NP_865 = 25;
/*
* Brazil 902MHz
*/
BR_902 = 26;
} }
/* /*
@ -943,9 +938,8 @@ 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
@ -984,29 +978,6 @@ message Config {
* It is not legal to use in all regions due to this wider bandwidth. * It is not legal to use in all regions due to this wider bandwidth.
*/ */
SHORT_TURBO = 8; 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;
} }
/* /*
@ -1129,10 +1100,6 @@ message Config {
* Sets the ok_to_mqtt bit on outgoing packets * Sets the ok_to_mqtt bit on outgoing packets
*/ */
bool config_ok_to_mqtt = 105; 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 {
@ -1170,6 +1137,7 @@ message Config {
} }
message SecurityConfig { message SecurityConfig {
/* /*
* The public key of the user's device. * 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. * Sent out to other nodes on the mesh to allow them to compute a shared secret key.

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

@ -3,7 +3,6 @@
*DeviceUIConfig.ring_tone_id int_size:8 *DeviceUIConfig.ring_tone_id int_size:8
*DeviceUIConfig.calibration_data max_size:16 *DeviceUIConfig.calibration_data max_size:16
*DeviceUIConfig.compass_mode int_size:8 *DeviceUIConfig.compass_mode int_size:8
*DeviceUIConfig.gps_format int_size:8
*NodeFilter.node_name max_size:16 *NodeFilter.node_name max_size:16
*NodeFilter.hops_away int_size:8 *NodeFilter.hops_away int_size:8
*NodeFilter.channel int_size:8 *NodeFilter.channel int_size:8

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 = "DeviceUIProtos"; option java_outer_classname = "DeviceUIProtos";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
/* /*
@ -88,61 +88,9 @@ message DeviceUIConfig {
* true for analog clockface, false for digital clockface * true for analog clockface, false for digital clockface
*/ */
bool is_clockface_analog = 18; 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 { message NodeFilter {
/* /*
* Filter unknown nodes * Filter unknown nodes
@ -178,6 +126,7 @@ message NodeFilter {
* Filter based on channel * Filter based on channel
*/ */
int32 channel = 7; int32 channel = 7;
} }
message NodeHighlight { message NodeHighlight {
@ -205,6 +154,7 @@ message NodeHighlight {
* Highlight nodes by matching name string * Highlight nodes by matching name string
*/ */
string node_name = 5; string node_name = 5;
} }
message GeoPoint { message GeoPoint {
@ -367,16 +317,6 @@ enum Language {
*/ */
BULGARIAN = 17; BULGARIAN = 17;
/*
* Czech
*/
CZECH = 18;
/*
* Danish
*/
DANISH = 19;
/* /*
* Simplified Chinese (experimental) * Simplified Chinese (experimental)
*/ */
@ -386,4 +326,4 @@ enum Language {
* Traditional Chinese (experimental) * Traditional Chinese (experimental)
*/ */
TRADITIONAL_CHINESE = 31; TRADITIONAL_CHINESE = 31;
} }

View file

@ -2,21 +2,21 @@ 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/mesh.proto"; import "meshtastic/mesh.proto";
import "meshtastic/telemetry.proto"; import "meshtastic/telemetry.proto";
import "meshtastic/config.proto";
import "meshtastic/localonly.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 * Position with static location information only for NodeDBLite
*/ */
@ -168,7 +168,6 @@ message NodeInfoLite {
/* /*
* Bitfield for storing booleans. * Bitfield for storing booleans.
* LSB 0 is_key_manually_verified * LSB 0 is_key_manually_verified
* LSB 1 is_muted
*/ */
uint32 bitfield = 13; uint32 bitfield = 13;
} }
@ -270,7 +269,7 @@ message ChannelFile {
/* /*
* The on-disk backup of the node's preferences * The on-disk backup of the node's preferences
*/ */
message BackupPreferences { message BackupPreferences {
/* /*
* The version of the backup * The version of the backup
*/ */

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 = "InterdeviceProtos"; option java_outer_classname = "InterdeviceProtos";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
// encapsulate up to 1k of NMEA string data // encapsulate up to 1k of NMEA string data

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 = "";
/* /*
@ -131,21 +131,6 @@ 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

View file

@ -31,9 +31,6 @@
*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
@ -69,14 +66,6 @@
*KeyVerification.hash1 max_size:32 *KeyVerification.hash1 max_size:32
*KeyVerification.hash2 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

View file

@ -4,16 +4,16 @@ package meshtastic;
import "meshtastic/channel.proto"; import "meshtastic/channel.proto";
import "meshtastic/config.proto"; import "meshtastic/config.proto";
import "meshtastic/device_ui.proto";
import "meshtastic/module_config.proto"; import "meshtastic/module_config.proto";
import "meshtastic/portnums.proto"; import "meshtastic/portnums.proto";
import "meshtastic/telemetry.proto"; import "meshtastic/telemetry.proto";
import "meshtastic/xmodem.proto"; import "meshtastic/xmodem.proto";
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 = "MeshProtos"; option java_outer_classname = "MeshProtos";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
/* /*
@ -388,9 +388,9 @@ enum HardwareModel {
LORA_RELAY_V1 = 32; LORA_RELAY_V1 = 32;
/* /*
* T-Echo Plus device from LilyGo * TODO: REPLACE
*/ */
T_ECHO_PLUS = 33; NRF52840DK = 33;
/* /*
* TODO: REPLACE * TODO: REPLACE
@ -700,9 +700,9 @@ enum HardwareModel {
HELTEC_SENSOR_HUB = 92; HELTEC_SENSOR_HUB = 92;
/* /*
* Muzi Works Muzi-Base device * Reserved Fried Chicken ID for future use
*/ */
MUZI_BASE = 93; RESERVED_FRIED_CHICKEN = 93;
/* /*
* Heltec Magnetic Power Bank with Meshtastic compatible * Heltec Magnetic Power Bank with Meshtastic compatible
@ -724,169 +724,52 @@ enum HardwareModel {
*/ */
CROWPANEL = 97; CROWPANEL = 97;
/* /**
* Lilygo LINK32 board with sensors * Lilygo LINK32 board with sensors
*/ */
LINK_32 = 98; LINK_32 = 98;
/* /**
* Seeed Tracker L1 * Seeed Tracker L1
*/ */
SEEED_WIO_TRACKER_L1 = 99; SEEED_WIO_TRACKER_L1 = 99;
/* /**
* Seeed Tracker L1 EINK driver * Seeed Tracker L1 EINK driver
*/ */
SEEED_WIO_TRACKER_L1_EINK = 100; SEEED_WIO_TRACKER_L1_EINK = 100;
/* /*
* Muzi Works R1 Neo * Reserved ID for future and past use
*/ */
MUZI_R1_NEO = 101; QWANTZ_TINY_ARMS = 101;
/* /**
* Lilygo T-Deck Pro * Lilygo T-Deck Pro
*/ */
T_DECK_PRO = 102; T_DECK_PRO = 102;
/* /**
* Lilygo TLora Pager * Lilygo TLora Pager
*/ */
T_LORA_PAGER = 103; T_LORA_PAGER = 103;
/* /**
* M5Stack Reserved * GAT562 Mesh Trial Tracker
*/ */
M5STACK_RESERVED = 104; // 0x68 GAT562_MESH_TRIAL_TRACKER = 104;
/* /**
* RAKwireless WisMesh Tag * RAKwireless WisMesh Tag
*/ */
WISMESH_TAG = 105; WISMESH_TAG = 105;
/* /**
* RAKwireless WisBlock Core RAK3312 https://docs.rakwireless.com/product-categories/wisduo/rak3112-module/overview/ * RAKwireless WisBlock Core RAK3312 https://docs.rakwireless.com/product-categories/wisduo/rak3112-module/overview/
*/ */
RAK3312 = 106; RAK3312 = 106;
/*
* Elecrow ThinkNode M5 https://www.elecrow.com/wiki/ThinkNode_M5_Meshtastic_LoRa_Signal_Transceiver_ESP32-S3.html
*/
THINKNODE_M5 = 107;
/*
* MeshSolar is an integrated power management and communication solution designed for outdoor low-power devices.
* https://heltec.org/project/meshsolar/
*/
HELTEC_MESH_SOLAR = 108;
/*
* Lilygo T-Echo Lite
*/
T_ECHO_LITE = 109;
/*
* New Heltec LoRA32 with ESP32-S3 CPU
*/
HELTEC_V4 = 110;
/*
* M5Stack C6L
*/
M5STACK_C6L = 111;
/*
* M5Stack Cardputer Adv
*/
M5STACK_CARDPUTER_ADV = 112;
/*
* ESP32S3 main controller with GPS and TFT screen.
*/
HELTEC_WIRELESS_TRACKER_V2 = 113;
/*
* LilyGo T-Watch Ultra
*/
T_WATCH_ULTRA = 114;
/*
* Elecrow ThinkNode M3
*/
THINKNODE_M3 = 115;
/*
* RAK WISMESH_TAP_V2 with ESP32-S3 CPU
*/
WISMESH_TAP_V2 = 116;
/*
* RAK3401
*/
RAK3401 = 117;
/*
* RAK6421 Hat+
*/
RAK6421 = 118;
/*
* Elecrow ThinkNode M4
*/
THINKNODE_M4 = 119;
/*
* Elecrow ThinkNode M6
*/
THINKNODE_M6 = 120;
/*
* Elecrow Meshstick 1262
*/
MESHSTICK_1262 = 121;
/*
* LilyGo T-Beam 1W
*/
TBEAM_1_WATT = 122;
/*
* LilyGo T5 S3 ePaper Pro (V1 and V2)
*/
T5_S3_EPAPER_PRO = 123;
/*
* LilyGo T-Beam BPF (144-148Mhz)
*/
TBEAM_BPF = 124;
/*
* LilyGo T-Mini E-paper S3 Kit
*/
MINI_EPAPER_S3 = 125;
/*
* LilyGo T-Display S3 Pro LR1121
*/
TDISPLAY_S3_PRO = 126;
/*
* Heltec Mesh Node T096 board features an nRF52840 CPU and a TFT screen.
*/
HELTEC_MESH_NODE_T096 = 127;
/*
* Seeed studio T1000-E Pro tracker card. NRF52840 w/ LR2021 radio,
* GPS, button, buzzer, and sensors.
*/
TRACKER_T1000_E_PRO = 128;
/*
* Elecrow ThinkNode M7, M8 and M9
*/
THINKNODE_M7 = 129;
THINKNODE_M8 = 130;
THINKNODE_M9 = 131;
/* /*
* ------------------------------------------------------------------------------------------------------------------------------------------ * ------------------------------------------------------------------------------------------------------------------------------------------
@ -1092,18 +975,6 @@ message Routing {
* Admin packet sent using PKC, but not from a public key on the admin key list * Admin packet sent using PKC, but not from a public key on the admin key list
*/ */
ADMIN_PUBLIC_KEY_UNAUTHORIZED = 37; ADMIN_PUBLIC_KEY_UNAUTHORIZED = 37;
/*
* Airtime fairness rate limit exceeded for a packet
* This typically enforced per portnum and is used to prevent a single node from monopolizing airtime
*/
RATE_LIMIT_EXCEEDED = 38;
/*
* PKI encryption failed, due to no public key for the remote node
* This is different from PKI_UNKNOWN_PUBKEY which indicates a failure upon receiving a packet
*/
PKI_SEND_FAIL_PUBLIC_KEY = 39;
} }
oneof variant { oneof variant {
@ -1191,6 +1062,7 @@ message Data {
* The actual over-the-mesh message doing KeyVerification * The actual over-the-mesh message doing KeyVerification
*/ */
message KeyVerification { message KeyVerification {
/* /*
* random value Selected by the requesting node * random value Selected by the requesting node
*/ */
@ -1208,176 +1080,6 @@ message KeyVerification {
bytes hash2 = 3; bytes hash2 = 3;
} }
/*
* The actual over-the-mesh message doing store and forward++
*/
message StoreForwardPlusPlus {
/*
* Enum of message types
*/
enum SFPP_message_type {
/*
* Send an announcement of the canonical tip of a chain
*/
CANON_ANNOUNCE = 0;
/*
* Query whether a specific link is on the chain
*/
CHAIN_QUERY = 1;
/*
* Request the next link in the chain
*/
LINK_REQUEST = 3;
/*
* Provide a link to add to the chain
*/
LINK_PROVIDE = 4;
/*
* If we must fragment, send the first half
*/
LINK_PROVIDE_FIRSTHALF = 5;
/*
* If we must fragment, send the second half
*/
LINK_PROVIDE_SECONDHALF = 6;
}
/*
* Which message type is this
*/
SFPP_message_type sfpp_message_type = 1;
/*
* The hash of the specific message
*/
bytes message_hash = 2;
/*
* The hash of a link on a chain
*/
bytes commit_hash = 3;
/*
* the root hash of a chain
*/
bytes root_hash = 4;
/*
* The encrypted bytes from a message
*/
bytes message = 5;
/*
* Message ID of the contained message
*/
uint32 encapsulated_id = 6;
/*
* Destination of the contained message
*/
uint32 encapsulated_to = 7;
/*
* Sender of the contained message
*/
uint32 encapsulated_from = 8;
/*
* The receive time of the message in question
*/
uint32 encapsulated_rxtime = 9;
/*
* Used in a LINK_REQUEST to specify the message X spots back from head
*/
uint32 chain_count = 10;
}
/*
* The actual over-the-mesh message doing RemoteShell
*/
message RemoteShell {
/*
* Frame op code for PTY session control and stream transport.
*
* Values 1-63 are client->server requests.
* Values 64-127 are server->client responses/events.
*/
enum OpCode {
OP_UNSET = 0;
// Client -> server
OPEN = 1;
INPUT = 2;
RESIZE = 3;
CLOSE = 4;
PING = 5;
ACK = 6;
// Server -> client
OPEN_OK = 64;
OUTPUT = 65;
CLOSED = 66;
ERROR = 67;
PONG = 68;
}
/*
* Structured frame operation.
*/
OpCode op = 1;
/*
* Logical PTY session identifier.
*/
uint32 session_id = 2;
/*
* Monotonic sequence number for this frame.
*/
uint32 seq = 3;
/*
* Cumulative ack sequence number.
*/
uint32 ack_seq = 4;
/*
* Opaque bytes payload for INPUT/OUTPUT/ERROR and other frame bodies.
*/
bytes payload = 5;
/*
* Terminal size columns used for OPEN/RESIZE signaling.
*/
uint32 cols = 6;
/*
* Terminal size rows used for OPEN/RESIZE signaling.
*/
uint32 rows = 7;
/*
* Bit flags for protocol extensions.
*/
uint32 flags = 8;
/*
* The last sequence number TX'd.
*/
uint32 last_tx_seq = 9;
/*
* The last sequence number RX'd.
*/
uint32 last_rx_seq = 10;
}
/* /*
* Waypoint message, used to share arbitrary locations across the mesh * Waypoint message, used to share arbitrary locations across the mesh
*/ */
@ -1424,13 +1126,6 @@ message Waypoint {
fixed32 icon = 8; fixed32 icon = 8;
} }
/*
* Message for node status
*/
message StatusMessage {
string status = 1;
}
/* /*
* This message will be proxied over the PhoneAPI for the client to deliver to the MQTT server * This message will be proxied over the PhoneAPI for the client to deliver to the MQTT server
*/ */
@ -1563,51 +1258,6 @@ message MeshPacket {
DELAYED_DIRECT = 2; DELAYED_DIRECT = 2;
} }
/*
* Enum to identify which transport mechanism this packet arrived over
*/
enum TransportMechanism {
/*
* The default case is that the node generated a packet itself
*/
TRANSPORT_INTERNAL = 0;
/*
* Arrived via the primary LoRa radio
*/
TRANSPORT_LORA = 1;
/*
* Arrived via a secondary LoRa radio
*/
TRANSPORT_LORA_ALT1 = 2;
/*
* Arrived via a tertiary LoRa radio
*/
TRANSPORT_LORA_ALT2 = 3;
/*
* Arrived via a quaternary LoRa radio
*/
TRANSPORT_LORA_ALT3 = 4;
/*
* Arrived via an MQTT connection
*/
TRANSPORT_MQTT = 5;
/*
* Arrived via Multicast UDP
*/
TRANSPORT_MULTICAST_UDP = 6;
/*
* Arrived via API connection
*/
TRANSPORT_API = 7;
}
/* /*
* The sending node number. * The sending node number.
* Note: Our crypto implementation uses this field as well. * Note: Our crypto implementation uses this field as well.
@ -1617,10 +1267,6 @@ message MeshPacket {
/* /*
* The (immediate) destination for this packet * The (immediate) destination for this packet
* If the value is 4,294,967,295 (maximum value of an unsigned 32bit integer), this indicates that the packet was
* not destined for a specific node, but for a channel as indicated by the value of `channel` below.
* If the value is another, this indicates that the packet was destined for a specific
* node (i.e. a kind of "Direct Message" to this node) and not broadcast on a channel.
*/ */
fixed32 to = 2; fixed32 to = 2;
@ -1759,11 +1405,6 @@ message MeshPacket {
* Set by the firmware internally, clients are not supposed to set this. * Set by the firmware internally, clients are not supposed to set this.
*/ */
uint32 tx_after = 20; uint32 tx_after = 20;
/*
* Indicates which transport mechanism this packet arrived over
*/
TransportMechanism transport_mechanism = 21;
} }
/* /*
@ -1894,12 +1535,6 @@ message NodeInfo {
* LSB 0 of the bitfield * LSB 0 of the bitfield
*/ */
bool is_key_manually_verified = 12; bool is_key_manually_verified = 12;
/*
* True if node has been muted
* Persistes between NodeDB internal clean ups
*/
bool is_muted = 13;
} }
/* /*
@ -1984,47 +1619,6 @@ enum CriticalErrorCode {
FLASH_CORRUPTION_UNRECOVERABLE = 13; FLASH_CORRUPTION_UNRECOVERABLE = 13;
} }
/*
* Enum to indicate to clients whether this firmware is a special firmware build, like an event.
* The first 16 values are reserved for non-event special firmwares, like the Smart Citizen use case.
*/
enum FirmwareEdition {
/*
* Vanilla firmware
*/
VANILLA = 0;
/*
* Firmware for use in the Smart Citizen environmental monitoring network
*/
SMART_CITIZEN = 1;
/*
* Open Sauce, the maker conference held yearly in CA
*/
OPEN_SAUCE = 16;
/*
* DEFCON, the yearly hacker conference
*/
DEFCON = 17;
/*
* Burning Man, the yearly hippie gathering in the desert
*/
BURNING_MAN = 18;
/*
* Hamvention, the Dayton amateur radio convention
*/
HAMVENTION = 19;
/*
* Placeholder for DIY and unofficial events
*/
DIY_EDITION = 127;
}
/* /*
* Unique local debugging info for this node * Unique local debugging info for this node
* Note: we don't include position or the user info, because that will come in the * Note: we don't include position or the user info, because that will come in the
@ -2058,17 +1652,6 @@ message MyNodeInfo {
* The PlatformIO environment used to build this firmware * The PlatformIO environment used to build this firmware
*/ */
string pio_env = 13; string pio_env = 13;
/*
* The indicator for whether this device is running event firmware and which
*/
FirmwareEdition firmware_edition = 14;
/*
* The number of nodes in the nodedb.
* This is used by the phone to know how many NodeInfo packets to expect on want_config
*/
uint32 nodedb_count = 15;
} }
/* /*
@ -2313,7 +1896,6 @@ message KeyVerificationFinal {
} }
message DuplicatedPublicKey {} message DuplicatedPublicKey {}
message LowEntropyKey {} message LowEntropyKey {}
/* /*
* Individual File info for the device * Individual File info for the device
*/ */
@ -2602,12 +2184,7 @@ enum ExcludedModules {
* A heartbeat message is sent to the node from the client to keep the connection alive. * A heartbeat message is sent to the node from the client to keep the connection alive.
* This is currently only needed to keep serial connections alive, but can be used by any PhoneAPI. * This is currently only needed to keep serial connections alive, but can be used by any PhoneAPI.
*/ */
message Heartbeat { message Heartbeat {}
/*
* The nonce of the heartbeat message
*/
uint32 nonce = 1;
}
/* /*
* RemoteHardwarePins associated with a node * RemoteHardwarePins associated with a node

View file

@ -27,5 +27,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 *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 = "";
/* /*
@ -150,6 +148,7 @@ message ModuleConfig {
* Detection Sensor Module Config * Detection Sensor Module Config
*/ */
message DetectionSensorConfig { message DetectionSensorConfig {
enum TriggerType { enum TriggerType {
// Event is triggered if pin is low // Event is triggered if pin is low
LOGIC_LOW = 0; LOGIC_LOW = 0;
@ -295,82 +294,7 @@ message ModuleConfig {
* BLE RSSI threshold. Defaults to -80 * BLE RSSI threshold. Defaults to -80
*/ */
int32 ble_threshold = 4; 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;
} }
/* /*
@ -415,12 +339,6 @@ message ModuleConfig {
// VE.Direct is a serial protocol used by Victron Energy products // VE.Direct is a serial protocol used by Victron Energy products
// https://beta.ivc.no/wiki/index.php/Victron_VE_Direct_DIY_Cable // https://beta.ivc.no/wiki/index.php/Victron_VE_Direct_DIY_Cable
VE_DIRECT = 7; 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)
} }
/* /*
@ -611,12 +529,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;
} }
/* /*
@ -696,17 +608,6 @@ message ModuleConfig {
* Enable/Disable the health telemetry module on-device display * Enable/Disable the health telemetry module on-device display
*/ */
bool health_screen_enabled = 13; 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;
} }
/* /*
@ -801,13 +702,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", "scanAndSelect", "cardkb", "serialkb", 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.
@ -847,16 +748,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 +816,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;
} }
} }

View file

@ -8,7 +8,7 @@ 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 = "MQTTProtos"; option java_outer_classname = "MQTTProtos";
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 = "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 = "";
/* /*
@ -115,11 +115,6 @@ enum PortNum {
*/ */
KEY_VERIFICATION_APP = 12; 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 +134,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
@ -232,12 +211,6 @@ enum PortNum {
*/ */
POWERSTRESS_APP = 74; 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 * Reticulum Network Stack Tunnel App
* ENCODING: Fragmented RNS Packet. Handled by Meshtastic RNS interface * ENCODING: Fragmented RNS Packet. Handled by Meshtastic RNS interface
@ -251,20 +224,6 @@ enum PortNum {
*/ */
CAYENNE_APP = 77; 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"

View file

@ -1,19 +1,19 @@
syntax = "proto3"; syntax = "proto3";
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 = "PowerMonProtos"; option java_outer_classname = "PowerMonProtos";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
package meshtastic;
/* Note: There are no 'PowerMon' messages normally in use (PowerMons are sent only as structured logs - slogs). /* 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) But we wrap our State enum in this message to effectively nest a namespace (without our linter yelling at us)
*/ */
message PowerMon { message PowerMon {
/* Any significant power changing event in meshtastic should be tagged with a powermon state transition. /* 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. If you are making new meshtastic features feel free to add new entries at the end of this definition.
*/ */
enum State { enum State {
None = 0; None = 0;
@ -44,21 +44,22 @@ message PowerMon {
Wifi_On = 0x400; Wifi_On = 0x400;
/* /*
* GPS is actively trying to find our location GPS is actively trying to find our location
* See GPSPowerState for more details See GPSPowerState for more details
*/ */
GPS_Active = 0x800; GPS_Active = 0x800;
} }
} }
/* /*
* PowerStress testing support via the C++ PowerStress module * PowerStress testing support via the C++ PowerStress module
*/ */
message PowerStressMessage { message PowerStressMessage {
/* /*
* What operation would we like the UUT to perform. * 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 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 machine has started processing their request
*/ */
enum Opcode { enum Opcode {
/* /*

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

@ -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

@ -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 = "";
/* /*

View file

@ -4,11 +4,9 @@
*EnvironmentMetrics.iaq int_size:16 *EnvironmentMetrics.iaq int_size:16
*EnvironmentMetrics.wind_direction int_size:16 *EnvironmentMetrics.wind_direction int_size:16
*EnvironmentMetrics.soil_moisture int_size:8 *EnvironmentMetrics.soil_moisture int_size:8
*EnvironmentMetrics.one_wire_temperature max_count:8
*LocalStats.num_online_nodes int_size:16 *LocalStats.num_online_nodes int_size:16
*LocalStats.num_total_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.heart_bpm int_size:8
*HealthMetrics.spO2 int_size:8 *HealthMetrics.spO2 int_size:8

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 = "TelemetryProtos"; option java_outer_classname = "TelemetryProtos";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
/* /*
@ -153,11 +153,6 @@ message EnvironmentMetrics {
* Soil temperature measured (*C) * Soil temperature measured (*C)
*/ */
optional float soil_temperature = 22; optional float soil_temperature = 22;
/*
* One-wire temperature (*C)
*/
repeated float one_wire_temperature = 23;
} }
/* /*
@ -250,62 +245,62 @@ message PowerMetrics {
*/ */
message AirQualityMetrics { message AirQualityMetrics {
/* /*
* Concentration Units Standard PM1.0 in ug/m3 * Concentration Units Standard PM1.0
*/ */
optional uint32 pm10_standard = 1; optional uint32 pm10_standard = 1;
/* /*
* Concentration Units Standard PM2.5 in ug/m3 * Concentration Units Standard PM2.5
*/ */
optional uint32 pm25_standard = 2; optional uint32 pm25_standard = 2;
/* /*
* Concentration Units Standard PM10.0 in ug/m3 * Concentration Units Standard PM10.0
*/ */
optional uint32 pm100_standard = 3; optional uint32 pm100_standard = 3;
/* /*
* Concentration Units Environmental PM1.0 in ug/m3 * Concentration Units Environmental PM1.0
*/ */
optional uint32 pm10_environmental = 4; optional uint32 pm10_environmental = 4;
/* /*
* Concentration Units Environmental PM2.5 in ug/m3 * Concentration Units Environmental PM2.5
*/ */
optional uint32 pm25_environmental = 5; optional uint32 pm25_environmental = 5;
/* /*
* Concentration Units Environmental PM10.0 in ug/m3 * Concentration Units Environmental PM10.0
*/ */
optional uint32 pm100_environmental = 6; optional uint32 pm100_environmental = 6;
/* /*
* 0.3um Particle Count in #/0.1l * 0.3um Particle Count
*/ */
optional uint32 particles_03um = 7; optional uint32 particles_03um = 7;
/* /*
* 0.5um Particle Count in #/0.1l * 0.5um Particle Count
*/ */
optional uint32 particles_05um = 8; optional uint32 particles_05um = 8;
/* /*
* 1.0um Particle Count in #/0.1l * 1.0um Particle Count
*/ */
optional uint32 particles_10um = 9; optional uint32 particles_10um = 9;
/* /*
* 2.5um Particle Count in #/0.1l * 2.5um Particle Count
*/ */
optional uint32 particles_25um = 10; optional uint32 particles_25um = 10;
/* /*
* 5.0um Particle Count in #/0.1l * 5.0um Particle Count
*/ */
optional uint32 particles_50um = 11; optional uint32 particles_50um = 11;
/* /*
* 10.0um Particle Count in #/0.1l * 10.0um Particle Count
*/ */
optional uint32 particles_100um = 12; optional uint32 particles_100um = 12;
@ -323,56 +318,6 @@ message AirQualityMetrics {
* CO2 sensor relative humidity in % * CO2 sensor relative humidity in %
*/ */
optional float co2_humidity = 15; optional float co2_humidity = 15;
/*
* Formaldehyde sensor formaldehyde concentration in ppb
*/
optional float form_formaldehyde = 16;
/*
* Formaldehyde sensor relative humidity in %RH
*/
optional float form_humidity = 17;
/*
* Formaldehyde sensor temperature in degrees Celsius
*/
optional float form_temperature = 18;
/*
* Concentration Units Standard PM4.0 in ug/m3
*/
optional uint32 pm40_standard = 19;
/*
* 4.0um Particle Count in #/0.1l
*/
optional uint32 particles_40um = 20;
/*
* PM Sensor Temperature
*/
optional float pm_temperature = 21;
/*
* PM Sensor humidity
*/
optional float pm_humidity = 22;
/*
* PM Sensor VOC Index
*/
optional float pm_voc_idx = 23;
/*
* PM Sensor NOx Index
*/
optional float pm_nox_idx = 24;
/*
* Typical Particle Size in um
*/
optional float particles_tps = 25;
} }
/* /*
@ -443,62 +388,12 @@ message LocalStats {
* Number of bytes free in the heap * Number of bytes free in the heap
*/ */
uint32 heap_free_bytes = 13; uint32 heap_free_bytes = 13;
/*
* Number of packets that were dropped because the transmit queue was full.
*/
uint32 num_tx_dropped = 14;
/*
* Noise floor value measured in dBm
*/
int32 noise_floor = 15;
}
/*
* Traffic management statistics for mesh network optimization
*/
message TrafficManagementStats {
/*
* Total number of packets inspected by traffic management
*/
uint32 packets_inspected = 1;
/*
* Number of position packets dropped due to deduplication
*/
uint32 position_dedup_drops = 2;
/*
* Number of NodeInfo requests answered from cache
*/
uint32 nodeinfo_cache_hits = 3;
/*
* Number of packets dropped due to rate limiting
*/
uint32 rate_limit_drops = 4;
/*
* Number of unknown/undecryptable packets dropped
*/
uint32 unknown_packet_drops = 5;
/*
* Number of packets with hop_limit exhausted for local-only broadcast
*/
uint32 hop_exhausted_packets = 6;
/*
* Number of times router hop preservation was applied
*/
uint32 router_hops_preserved = 7;
} }
/* /*
* Health telemetry metrics * Health telemetry metrics
*/ */
message HealthMetrics { message HealthMetrics {
/* /*
* Heart rate (beats per minute) * Heart rate (beats per minute)
*/ */
@ -566,6 +461,7 @@ message HostMetrics {
optional string user_string = 9; optional string user_string = 9;
} }
/* /*
* Types of Measurements the telemetry module is equipped to handle * Types of Measurements the telemetry module is equipped to handle
*/ */
@ -610,11 +506,6 @@ message Telemetry {
* Linux host metrics * Linux host metrics
*/ */
HostMetrics host_metrics = 8; HostMetrics host_metrics = 8;
/*
* Traffic management statistics
*/
TrafficManagementStats traffic_management_stats = 9;
} }
} }
@ -658,7 +549,7 @@ enum TelemetrySensorType {
BMP280 = 6; BMP280 = 6;
/* /*
* TODO - REMOVE High accuracy temperature and humidity * High accuracy temperature and humidity
*/ */
SHTC3 = 7; SHTC3 = 7;
@ -683,7 +574,7 @@ enum TelemetrySensorType {
QMC5883L = 11; QMC5883L = 11;
/* /*
* TODO - REMOVE High accuracy temperature and humidity * High accuracy temperature and humidity
*/ */
SHT31 = 12; SHT31 = 12;
@ -708,7 +599,7 @@ enum TelemetrySensorType {
RCWL9620 = 16; RCWL9620 = 16;
/* /*
* TODO - REMOVE Sensirion High accuracy temperature and humidity * Sensirion High accuracy temperature and humidity
*/ */
SHT4X = 17; SHT4X = 17;
@ -826,61 +717,6 @@ enum TelemetrySensorType {
* ADS1X15 ADC * ADS1X15 ADC
*/ */
ADS1X15 = 40; ADS1X15 = 40;
/*
* ADS1X15 ADC_ALT
*/
ADS1X15_ALT = 41;
/*
* Sensirion SFA30 Formaldehyde sensor
*/
SFA30 = 42;
/*
* SEN5X PM SENSORS
*/
SEN5X = 43;
/*
* TSL2561 light sensor
*/
TSL2561 = 44;
/*
* BH1750 light sensor
*/
BH1750 = 45;
/*
* HDC1080 Temperature and Humidity Sensor
*/
HDC1080 = 46;
/*
* TODO - REMOVE STH21 Temperature and R. Humidity sensor
*/
SHT21 = 47;
/*
* Sensirion STC31 CO2 sensor
*/
STC31 = 48;
/*
* SCD30 CO2, humidity, temperature sensor
*/
SCD30 = 49;
/*
* SHT family of sensors for temperature and humidity
*/
SHTXX = 50;
/*
* DS248X Bridge for one-wire temperature sensors
*/
DS248X = 51;
} }
/* /*
@ -897,38 +733,3 @@ message Nau7802Config {
*/ */
float calibrationFactor = 2; float calibrationFactor = 2;
} }
/*
* SEN5X State, for saving to flash
*/
message SEN5XState {
/*
* Last cleaning time for SEN5X
*/
uint32 last_cleaning_time = 1;
/*
* Last cleaning time for SEN5X - valid flag
*/
bool last_cleaning_valid = 2;
/*
* Config flag for one-shot mode (see admin.proto)
*/
bool one_shot_mode = 3;
/*
* Last VOC state time for SEN55
*/
optional uint32 voc_state_time = 4;
/*
* Last VOC state validity flag for SEN55
*/
optional bool voc_state_valid = 5;
/*
* VOC state array (8x uint8t) for SEN55
*/
optional fixed64 voc_state_array = 6;
}

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 {

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"
]
}