Compare commits

..

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

49 changed files with 222 additions and 4217 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.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'}}

5
.gitignore vendored
View file

@ -1,5 +0,0 @@
.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/ 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

@ -2,13 +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.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

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 {
@ -181,45 +166,6 @@ message AdminMessage {
SD = 1; 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;
}
/* /*
* TODO: REPLACE * TODO: REPLACE
*/ */
@ -350,13 +296,6 @@ message AdminMessage {
* Remove backups of the node's preferences * Remove backups of the node's preferences
*/ */
BackupLocation remove_backup_preferences = 26; 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
*/ */
@ -447,11 +386,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)
@ -463,16 +397,6 @@ 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. * 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.
*/ */
@ -481,9 +405,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 +431,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
*/ */
@ -580,183 +472,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

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

@ -1,7 +1,5 @@
# longest current is 45 chars, plan with a bit of buffer # longest current is 45 chars, plan with a bit of buffer
*DeviceConfig.tzdef max_size:65 *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

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;
} }
/* /*
@ -159,43 +150,6 @@ message Config {
CORE_PORTNUMS_ONLY = 5; 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;
}
/* /*
* Sets the role of node * Sets the role of node
*/ */
@ -205,7 +159,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 +194,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
@ -256,12 +210,6 @@ message Config {
* If true, disable the default blinking LED (LED_PIN) behavior on the device * If true, disable the default blinking LED (LED_PIN) behavior on the device
*/ */
bool led_heartbeat_disabled = 12; bool led_heartbeat_disabled = 12;
/*
* Controls buzzer behavior for audio feedback
* Defaults to ENABLED
*/
BuzzerMode buzzer_mode = 13;
} }
/* /*
@ -486,7 +434,7 @@ message Config {
* If non-zero, we want powermon log outputs. With the particular (bitfield) sources enabled. * 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. * 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; uint64 powermon_enables = 32;
} }
/* /*
@ -573,11 +521,6 @@ message Config {
*/ */
uint32 enabled_protocols = 10; uint32 enabled_protocols = 10;
/*
* Enable/Disable ipv6 support
*/
bool ipv6_enabled = 11;
/* /*
* Available flags auxiliary network protocols * Available flags auxiliary network protocols
*/ */
@ -599,10 +542,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 +603,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 +630,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 +644,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
@ -765,7 +737,7 @@ message Config {
* Rotate the compass by 270 degrees and invert. * Rotate the compass by 270 degrees and invert.
*/ */
DEGREES_270_INVERTED = 7; DEGREES_270_INVERTED = 7;
} }
/* /*
* Indicates how to rotate or invert the compass output to accurate display on the display. * Indicates how to rotate or invert the compass output to accurate display on the display.
@ -777,17 +749,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 +865,6 @@ message Config {
* Philippines 915mhz * Philippines 915mhz
*/ */
PH_915 = 21; 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,9 +879,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 +919,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 +1041,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,16 +1078,17 @@ message Config {
} }
message SecurityConfig { 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. * 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; bytes public_key = 1;
/* /*
* The private key of the device. * The private key of the device.
* Used to create a shared key with a remote device. * Used to create a shared key with a remote device.
*/ */
bytes private_key = 2; bytes private_key = 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 = "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

@ -2,8 +2,6 @@
*DeviceUIConfig.screen_timeout int_size:16 *DeviceUIConfig.screen_timeout int_size:16
*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.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 = "";
/* /*
@ -71,78 +71,9 @@ message DeviceUIConfig {
* Map related data * Map related data
*/ */
Map map_data = 15; 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 { message NodeFilter {
/* /*
* Filter unknown nodes * Filter unknown nodes
@ -178,6 +109,7 @@ message NodeFilter {
* Filter based on channel * Filter based on channel
*/ */
int32 channel = 7; int32 channel = 7;
} }
message NodeHighlight { message NodeHighlight {
@ -205,6 +137,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 {
@ -213,14 +146,14 @@ message GeoPoint {
*/ */
int32 zoom = 1; int32 zoom = 1;
/* /*
* Coordinate: latitude * Coordinate: latitude
*/ */
int32 latitude = 2; int32 latitude = 2;
/* /*
* Coordinate: longitude * Coordinate: longitude
*/ */
int32 longitude = 3; int32 longitude = 3;
} }
@ -241,23 +174,6 @@ message Map {
bool follow_gps = 3; 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 { enum Theme {
/* /*
* Dark * Dark
@ -362,22 +278,7 @@ enum Language {
*/ */
UKRAINIAN = 16; UKRAINIAN = 16;
/* /*
* Bulgarian
*/
BULGARIAN = 17;
/*
* Czech
*/
CZECH = 18;
/*
* Danish
*/
DANISH = 19;
/*
* Simplified Chinese (experimental) * Simplified Chinese (experimental)
*/ */
SIMPLIFIED_CHINESE = 30; SIMPLIFIED_CHINESE = 30;
@ -386,4 +287,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
*/ */
@ -94,11 +94,6 @@ message UserLite {
* This is sent out to other nodes on the mesh to allow them to compute a shared secret key. * This is sent out to other nodes on the mesh to allow them to compute a shared secret key.
*/ */
bytes public_key = 7; bytes public_key = 7;
/*
* Whether or not the node can be messaged
*/
optional bool is_unmessagable = 9;
} }
message NodeInfoLite { message NodeInfoLite {
@ -164,13 +159,6 @@ message NodeInfoLite {
* Last byte of the node number of the node that should be used as the next hop to reach this node. * 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; uint32 next_hop = 12;
/*
* Bitfield for storing booleans.
* LSB 0 is_key_manually_verified
* LSB 1 is_muted
*/
uint32 bitfield = 13;
} }
/* /*
@ -270,7 +258,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,16 +5,16 @@ 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
enum MessageType { enum MessageType {
ACK = 0; ACK = 0;
COLLECT_INTERVAL = 160; // in ms COLLECT_INTERVAL = 160; // in ms
BEEP_ON = 161; // duration ms BEEP_ON = 161; // duration ms
BEEP_OFF = 162; // cancel prematurely BEEP_OFF = 162; // cancel prematurely
SHUTDOWN = 163; SHUTDOWN = 163;
POWER_ON = 164; POWER_ON = 164;
SCD41_TEMP = 176; SCD41_TEMP = 176;

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
@ -61,23 +58,6 @@
*ClientNotification.message max_size:400 *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

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
@ -564,22 +564,22 @@ enum HardwareModel {
*/ */
HELTEC_CAPSULE_SENSOR_V3 = 65; HELTEC_CAPSULE_SENSOR_V3 = 65;
/* /*
* Heltec Vision Master T190 with ESP32-S3 CPU, and a 1.90 inch TFT display * Heltec Vision Master T190 with ESP32-S3 CPU, and a 1.90 inch TFT display
*/ */
HELTEC_VISION_MASTER_T190 = 66; HELTEC_VISION_MASTER_T190 = 66;
/* /*
* Heltec Vision Master E213 with ESP32-S3 CPU, and a 2.13 inch E-Ink display * Heltec Vision Master E213 with ESP32-S3 CPU, and a 2.13 inch E-Ink display
*/ */
HELTEC_VISION_MASTER_E213 = 67; HELTEC_VISION_MASTER_E213 = 67;
/* /*
* Heltec Vision Master E290 with ESP32-S3 CPU, and a 2.9 inch E-Ink display * Heltec Vision Master E290 with ESP32-S3 CPU, and a 2.9 inch E-Ink display
*/ */
HELTEC_VISION_MASTER_E290 = 68; HELTEC_VISION_MASTER_E290 = 68;
/* /*
* Heltec Mesh Node T114 board with nRF52840 CPU, and a 1.14 inch TFT display, Ultimate low-power design, * Heltec Mesh Node T114 board with nRF52840 CPU, and a 1.14 inch TFT display, Ultimate low-power design,
* specifically adapted for the Meshtatic project * specifically adapted for the Meshtatic project
*/ */
@ -590,7 +590,7 @@ enum HardwareModel {
*/ */
SENSECAP_INDICATOR = 70; SENSECAP_INDICATOR = 70;
/* /*
* Seeed studio T1000-E tracker card. NRF52840 w/ LR1110 radio, GPS, button, buzzer, and sensors. * Seeed studio T1000-E tracker card. NRF52840 w/ LR1110 radio, GPS, button, buzzer, and sensors.
*/ */
TRACKER_T1000_E = 71; TRACKER_T1000_E = 71;
@ -611,7 +611,7 @@ enum HardwareModel {
*/ */
RADIOMASTER_900_BANDIT = 74; RADIOMASTER_900_BANDIT = 74;
/* /*
* Minewsemi ME25LS01 (ME25LE01_V1.0). NRF52840 w/ LR1110 radio, buttons and leds and pins. * Minewsemi ME25LS01 (ME25LE01_V1.0). NRF52840 w/ LR1110 radio, buttons and leds and pins.
*/ */
ME25LS01_4Y10TD = 75; ME25LS01_4Y10TD = 75;
@ -640,7 +640,7 @@ enum HardwareModel {
/* Seeed XIAO S3 DK*/ /* Seeed XIAO S3 DK*/
SEEED_XIAO_S3 = 81; SEEED_XIAO_S3 = 81;
/* /*
* Nordic nRF52840+Semtech SX1262 LoRa BLE Combo Module. nRF52840+SX1262 MS24SF1 * Nordic nRF52840+Semtech SX1262 LoRa BLE Combo Module. nRF52840+SX1262 MS24SF1
*/ */
MS24SF1 = 82; MS24SF1 = 82;
@ -694,200 +694,6 @@ enum HardwareModel {
*/ */
T_ETH_ELITE = 91; T_ETH_ELITE = 91;
/*
* Heltec HRI-3621 industrial probe
*/
HELTEC_SENSOR_HUB = 92;
/*
* Muzi Works Muzi-Base device
*/
MUZI_BASE = 93;
/*
* Heltec Magnetic Power Bank with Meshtastic compatible
*/
HELTEC_MESH_POCKET = 94;
/*
* Seeed Solar Node
*/
SEEED_SOLAR_NODE = 95;
/*
* NomadStar Meteor Pro https://nomadstar.ch/
*/
NOMADSTAR_METEOR_PRO = 96;
/*
* Elecrow CrowPanel Advance models, ESP32-S3 and TFT with SX1262 radio plugin
*/
CROWPANEL = 97;
/*
* Lilygo LINK32 board with sensors
*/
LINK_32 = 98;
/*
* Seeed Tracker L1
*/
SEEED_WIO_TRACKER_L1 = 99;
/*
* Seeed Tracker L1 EINK driver
*/
SEEED_WIO_TRACKER_L1_EINK = 100;
/*
* Muzi Works R1 Neo
*/
MUZI_R1_NEO = 101;
/*
* Lilygo T-Deck Pro
*/
T_DECK_PRO = 102;
/*
* Lilygo TLora Pager
*/
T_LORA_PAGER = 103;
/*
* M5Stack Reserved
*/
M5STACK_RESERVED = 104; // 0x68
/*
* RAKwireless WisMesh Tag
*/
WISMESH_TAG = 105;
/*
* RAKwireless WisBlock Core RAK3312 https://docs.rakwireless.com/product-categories/wisduo/rak3112-module/overview/
*/
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;
/* /*
* ------------------------------------------------------------------------------------------------------------------------------------------ * ------------------------------------------------------------------------------------------------------------------------------------------
* Reserved ID For developing private Ports. These will show up in live traffic sparsely, so we can use a high number. Keep it within 8 bits. * Reserved ID For developing private Ports. These will show up in live traffic sparsely, so we can use a high number. Keep it within 8 bits.
@ -970,11 +776,6 @@ message User {
* This is sent out to other nodes on the mesh to allow them to compute a shared secret key. * This is sent out to other nodes on the mesh to allow them to compute a shared secret key.
*/ */
bytes public_key = 8; bytes public_key = 8;
/*
* Whether or not the node can be messaged
*/
optional bool is_unmessagable = 9;
} }
/* /*
@ -1092,18 +893,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 {
@ -1187,197 +976,6 @@ message Data {
optional uint32 bitfield = 9; optional uint32 bitfield = 9;
} }
/*
* The actual over-the-mesh message doing KeyVerification
*/
message KeyVerification {
/*
* random value Selected by the requesting node
*/
uint64 nonce = 1;
/*
* The final authoritative hash, only to be sent by NodeA at the end of the handshake
*/
bytes hash1 = 2;
/*
* The intermediary hash (actually derived from hash1),
* sent from NodeB to NodeA in response to the initial message.
*/
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 +1022,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 +1154,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 +1163,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 +1301,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;
} }
/* /*
@ -1887,19 +1424,6 @@ message NodeInfo {
* Persists between NodeDB internal clean ups * Persists between NodeDB internal clean ups
*/ */
bool is_ignored = 11; bool is_ignored = 11;
/*
* True if node public key has been verified.
* Persists between NodeDB internal clean ups
* LSB 0 of the bitfield
*/
bool is_key_manually_verified = 12;
/*
* True if node has been muted
* Persistes between NodeDB internal clean ups
*/
bool is_muted = 13;
} }
/* /*
@ -1984,47 +1508,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 +1541,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;
} }
/* /*
@ -2286,34 +1758,8 @@ message ClientNotification {
* The message body of the notification * The message body of the notification
*/ */
string message = 4; string message = 4;
oneof payload_variant {
KeyVerificationNumberInform key_verification_number_inform = 11;
KeyVerificationNumberRequest key_verification_number_request = 12;
KeyVerificationFinal key_verification_final = 13;
DuplicatedPublicKey duplicated_public_key = 14;
LowEntropyKey low_entropy_key = 15;
}
} }
message KeyVerificationNumberInform {
uint64 nonce = 1;
string remote_longname = 2;
uint32 security_number = 3;
}
message KeyVerificationNumberRequest {
uint64 nonce = 1;
string remote_longname = 2;
}
message KeyVerificationFinal {
uint64 nonce = 1;
string remote_longname = 2;
bool isSender = 3;
string verification_characters = 4;
}
message DuplicatedPublicKey {}
message LowEntropyKey {}
/* /*
* Individual File info for the device * Individual File info for the device
*/ */
@ -2586,28 +2032,13 @@ enum ExcludedModules {
* Paxcounter module * Paxcounter module
*/ */
PAXCOUNTER_CONFIG = 0x1000; PAXCOUNTER_CONFIG = 0x1000;
/*
* Bluetooth config (not technically a module, but used to indicate bluetooth capabilities)
*/
BLUETOOTH_CONFIG = 0x2000;
/*
* Network config (not technically a module, but used to indicate network capabilities)
*/
NETWORK_CONFIG = 0x4000;
} }
/* /*
* 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
@ -2650,7 +2081,7 @@ message ChunkedPayload {
* Wrapper message for broken repeated oneof support * Wrapper message for broken repeated oneof support
*/ */
message resend_chunks { message resend_chunks {
repeated uint32 chunks = 1; repeated uint32 chunks = 1;
} }
/* /*

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 = "";
/* /*
@ -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;
} }
/* /*
@ -150,6 +143,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 +289,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;
} }
/* /*
@ -412,15 +331,6 @@ message ModuleConfig {
CALTOPO = 5; CALTOPO = 5;
// Ecowitt WS85 weather station // Ecowitt WS85 weather station
WS85 = 6; 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)
} }
/* /*
@ -611,12 +521,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 +600,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 +694,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 +740,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 +808,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 = "";
/* /*
@ -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 = "";
/* /*
@ -110,16 +110,6 @@ enum PortNum {
*/ */
ALERT_APP = 11; 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 +129,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,39 +206,12 @@ 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
*/ */
RETICULUM_TUNNEL_APP = 76; 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"

View file

@ -1,20 +1,20 @@
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;
@ -22,14 +22,14 @@ message PowerMon {
CPU_LightSleep = 0x02; CPU_LightSleep = 0x02;
/* /*
The external Vext1 power is on. Many boards have auxillary power rails that the CPU turns on only 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 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. 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. 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). 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. 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) (We use a bitmask for states so that if a log message gets lost it won't be fatal)
*/ */
Vext1_On = 0x04; Vext1_On = 0x04;
@ -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 {
/* /*
@ -68,7 +69,7 @@ message PowerStressMessage {
PRINT_INFO = 1; // Print board version slog and send an ack that we are alive and ready to process commands 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) 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 END_QUIET = 3; // Stop powerstress processing - probably by just rebooting the board
SCREEN_ON = 16; // Turn the screen on SCREEN_ON = 16; // Turn the screen on
SCREEN_OFF = 17; // Turn the screen off SCREEN_OFF = 17; // Turn the screen off

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,16 +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
*HostMetrics.load1 int_size:16
*HostMetrics.load5 int_size:16
*HostMetrics.load15 int_size:16
*HostMetrics.user_string max_size:200

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 = "";
/* /*
@ -130,21 +130,21 @@ message EnvironmentMetrics {
optional float wind_lull = 17; optional float wind_lull = 17;
/* /*
* Radiation in µR/h * Radiation in µR/h
*/ */
optional float radiation = 18; optional float radiation = 18;
/* /*
* Rainfall in the last hour in mm * Rainfall in the last hour in mm
*/ */
optional float rainfall_1h = 19; optional float rainfall_1h = 19;
/* /*
* Rainfall in the last 24 hours in mm * Rainfall in the last 24 hours in mm
*/ */
optional float rainfall_24h = 20; optional float rainfall_24h = 20;
/* /*
* Soil moisture measured (% 1-100) * Soil moisture measured (% 1-100)
*/ */
optional uint32 soil_moisture = 21; optional uint32 soil_moisture = 21;
@ -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;
} }
/* /*
@ -193,56 +188,6 @@ message PowerMetrics {
* Current (Ch3) * Current (Ch3)
*/ */
optional float ch3_current = 6; optional float ch3_current = 6;
/*
* Voltage (Ch4)
*/
optional float ch4_voltage = 7;
/*
* Current (Ch4)
*/
optional float ch4_current = 8;
/*
* Voltage (Ch5)
*/
optional float ch5_voltage = 9;
/*
* Current (Ch5)
*/
optional float ch5_current = 10;
/*
* Voltage (Ch6)
*/
optional float ch6_voltage = 11;
/*
* Current (Ch6)
*/
optional float ch6_current = 12;
/*
* Voltage (Ch7)
*/
optional float ch7_voltage = 13;
/*
* Current (Ch7)
*/
optional float ch7_current = 14;
/*
* Voltage (Ch8)
*/
optional float ch8_voltage = 15;
/*
* Current (Ch8)
*/
optional float ch8_current = 16;
} }
/* /*
@ -250,129 +195,69 @@ 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;
/* /*
* CO2 concentration in ppm * 10.0um Particle Count
*/ */
optional uint32 co2 = 13; optional uint32 co2 = 13;
/*
* CO2 sensor temperature in degC
*/
optional float co2_temperature = 14;
/*
* CO2 sensor relative humidity in %
*/
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;
} }
/* /*
@ -433,72 +318,12 @@ message LocalStats {
* This will always be zero for ROUTERs/REPEATERs. If this number is high, some other node(s) is/are relaying faster than you. * This will always be zero for ROUTERs/REPEATERs. If this number is high, some other node(s) is/are relaying faster than you.
*/ */
uint32 num_tx_relay_canceled = 11; uint32 num_tx_relay_canceled = 11;
/*
* Number of bytes used in the heap
*/
uint32 heap_total_bytes = 12;
/*
* Number of bytes free in the heap
*/
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)
*/ */
@ -515,57 +340,6 @@ message HealthMetrics {
optional float temperature = 3; optional float temperature = 3;
} }
/*
* Linux host metrics
*/
message HostMetrics {
/*
* Host system uptime
*/
uint32 uptime_seconds = 1;
/*
* Host system free memory
*/
uint64 freemem_bytes = 2;
/*
* Host system disk space free for /
*/
uint64 diskfree1_bytes = 3;
/*
* Secondary system disk space free
*/
optional uint64 diskfree2_bytes = 4;
/*
* Tertiary disk space free
*/
optional uint64 diskfree3_bytes = 5;
/*
* Host system one minute load in 1/100ths
*/
uint32 load1 = 6;
/*
* Host system five minute load in 1/100ths
*/
uint32 load5 = 7;
/*
* Host system fifteen minute load in 1/100ths
*/
uint32 load15 = 8;
/*
* Optional User-provided string for arbitrary host system information
* that doesn't make sense as a dedicated entry.
*/
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
*/ */
@ -605,16 +379,6 @@ message Telemetry {
* Health telemetry metrics * Health telemetry metrics
*/ */
HealthMetrics health_metrics = 7; HealthMetrics health_metrics = 7;
/*
* Linux host metrics
*/
HostMetrics host_metrics = 8;
/*
* Traffic management statistics
*/
TrafficManagementStats traffic_management_stats = 9;
} }
} }
@ -658,7 +422,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 +447,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 +472,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;
@ -811,76 +575,6 @@ enum TelemetrySensorType {
* RAKWireless RAK12035 Soil Moisture Sensor Module * RAKWireless RAK12035 Soil Moisture Sensor Module
*/ */
RAK12035 = 37; RAK12035 = 37;
/*
* MAX17261 lipo battery gauge
*/
MAX17261 = 38;
/*
* PCT2075 Temperature Sensor
*/
PCT2075 = 39;
/*
* ADS1X15 ADC
*/
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 +591,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 {

View file

@ -9,7 +9,6 @@ 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 {

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