Compare commits

..

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

54 changed files with 552 additions and 6236 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,16 @@ jobs:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Buf PR Checks - name: Setup Buf
uses: bufbuild/buf-action@v1.2.0 uses: bufbuild/buf-setup-action@v1.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
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

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

View file

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

View file

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

View file

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

File diff suppressed because it is too large Load diff

View file

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

View file

@ -1,12 +1,11 @@
syntax = "proto3"; syntax = "proto3";
/* trunk-ignore(buf-lint/PACKAGE_DIRECTORY_MATCH) */
package meshtastic; package meshtastic;
option csharp_namespace = "Meshtastic.Protobufs"; option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated"; option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "ChannelProtos"; option java_outer_classname = "ChannelProtos";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
/* /*
@ -97,12 +96,6 @@ message ModuleSettings {
* Bits of precision for the location sent in position packets. * Bits of precision for the location sent in position packets.
*/ */
uint32 position_precision = 1; uint32 position_precision = 1;
/*
* Controls whether or not the client / device should mute the current channel
* Useful for noisy public channels you don't necessarily want to disable
*/
bool is_muted = 2;
} }
/* /*

View file

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

View file

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

View file

@ -1,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
@ -17,8 +15,3 @@
*LoRaConfig.channel_num int_size:16 *LoRaConfig.channel_num int_size:16
*PowerConfig.device_battery_ina_address int_size:8 *PowerConfig.device_battery_ina_address int_size:8
*SecurityConfig.public_key max_size:32
*SecurityConfig.private_key max_size:32
*SecurityConfig.admin_key max_size:32
*SecurityConfig.admin_key max_count:3

View file

@ -2,12 +2,10 @@ syntax = "proto3";
package meshtastic; package meshtastic;
import "meshtastic/device_ui.proto";
option csharp_namespace = "Meshtastic.Protobufs"; option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated"; option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "ConfigProtos"; option java_outer_classname = "ConfigProtos";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
message Config { message Config {
@ -39,18 +37,15 @@ message Config {
/* /*
* Description: Combination of both ROUTER and CLIENT. Not for mobile devices. * Description: Combination of both ROUTER and CLIENT. Not for mobile devices.
* Deprecated in v2.3.15 because improper usage is impacting public meshes: Use ROUTER or CLIENT instead.
*/ */
ROUTER_CLIENT = 3;
ROUTER_CLIENT = 3 [deprecated = true];
/* /*
* Description: Infrastructure node for extending network coverage by relaying messages with minimal overhead. Not visible in Nodes list. * Description: Infrastructure node for extending network coverage by relaying messages with minimal overhead. Not visible in Nodes list.
* Technical Details: Mesh packets will simply be rebroadcasted over this node. Nodes configured with this role will not originate NodeInfo, Position, Telemetry * Technical Details: Mesh packets will simply be rebroadcasted over this node. Nodes configured with this role will not originate NodeInfo, Position, Telemetry
* or any other packet type. They will simply rebroadcast any mesh packets on the same frequency, channel num, spread factor, and coding rate. * or any other packet type. They will simply rebroadcast any mesh packets on the same frequency, channel num, spread factor, and coding rate.
* Deprecated in v2.7.11 because it creates "holes" in the mesh rebroadcast chain.
*/ */
REPEATER = 4 [deprecated = true]; REPEATER = 4;
/* /*
* Description: Broadcasts GPS position packets as priority. * Description: Broadcasts GPS position packets as priority.
@ -100,23 +95,6 @@ message Config {
* Uses position module configuration to determine TAK PLI broadcast interval. * Uses position module configuration to determine TAK PLI broadcast interval.
*/ */
TAK_TRACKER = 10; TAK_TRACKER = 10;
/*
* Description: Will always rebroadcast packets, but will do so after all other modes.
* Technical Details: Used for router nodes that are intended to provide additional coverage
* in areas not already covered by other routers, or to bridge around problematic terrain,
* but should not be given priority over other routers in order to avoid unnecessaraily
* consuming hops.
*/
ROUTER_LATE = 11;
/*
* Description: Treats packets from or to favorited nodes as ROUTER_LATE, and all other packets as CLIENT.
* Technical Details: Used for stronger attic/roof nodes to distribute messages more widely
* from weaker, indoor, or less-well-positioned nodes. Recommended for users with multiple nodes
* where one CLIENT_BASE acts as a more powerful base station, such as an attic/roof node.
*/
CLIENT_BASE = 12;
} }
/* /*
@ -146,54 +124,6 @@ message Config {
* but takes it step further by also ignoring messages from nodenums not in the node's known list (NodeDB) * but takes it step further by also ignoring messages from nodenums not in the node's known list (NodeDB)
*/ */
KNOWN_ONLY = 3; KNOWN_ONLY = 3;
/*
* Only permitted for SENSOR, TRACKER and TAK_TRACKER roles, this will inhibit all rebroadcasts, not unlike CLIENT_MUTE role.
*/
NONE = 4;
/*
* Ignores packets from non-standard portnums such as: TAK, RangeTest, PaxCounter, etc.
* Only rebroadcasts packets with standard portnums: NodeInfo, Text, Position, Telemetry, and Routing.
*/
CORE_PORTNUMS_ONLY = 5;
}
/*
* Defines buzzer behavior for audio feedback
*/
enum BuzzerMode {
/*
* Default behavior.
* Buzzer is enabled for all audio feedback including button presses and alerts.
*/
ALL_ENABLED = 0;
/*
* Disabled.
* All buzzer audio feedback is disabled.
*/
DISABLED = 1;
/*
* Notifications Only.
* Buzzer is enabled only for notifications and alerts, but not for button presses.
* External notification config determines the specifics of the notification behavior.
*/
NOTIFICATIONS_ONLY = 2;
/*
* Non-notification system buzzer tones only.
* Buzzer is enabled only for non-notification tones such as button presses, startup, shutdown, but not for alerts.
*/
SYSTEM_ONLY = 3;
/*
* Direct Message notifications only.
* Buzzer is enabled only for direct messages and alerts, but not for button presses.
* External notification config determines the specifics of the notification behavior.
*/
DIRECT_MSG_ONLY = 4;
} }
/* /*
@ -203,9 +133,14 @@ message Config {
/* /*
* Disabling this will disable the SerialConsole by not initilizing the StreamAPI * Disabling this will disable the SerialConsole by not initilizing the StreamAPI
* Moved to SecurityConfig
*/ */
bool serial_enabled = 2 [deprecated = true]; bool serial_enabled = 2;
/*
* By default we turn off logging as soon as an API client connects (to keep shared serial link quiet).
* Set this to true to leave the debug log outputting even when API is active.
*/
bool debug_log_enabled = 3;
/* /*
* For boards without a hard wired button, this is the pin number that will be used * For boards without a hard wired button, this is the pin number that will be used
@ -238,9 +173,8 @@ message Config {
/* /*
* If true, device is considered to be "managed" by a mesh administrator * If true, device is considered to be "managed" by a mesh administrator
* Clients should then limit available configuration and administrative options inside the user interface * Clients should then limit available configuration and administrative options inside the user interface
* Moved to SecurityConfig
*/ */
bool is_managed = 9 [deprecated = true]; bool is_managed = 9;
/* /*
* Disables the triple-press of user button to enable or disable GPS * Disables the triple-press of user button to enable or disable GPS
@ -256,12 +190,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;
} }
/* /*
@ -481,12 +409,6 @@ message Config {
* I2C address of INA_2XX to use for reading device battery voltage * I2C address of INA_2XX to use for reading device battery voltage
*/ */
uint32 device_battery_ina_address = 9; uint32 device_battery_ina_address = 9;
/*
* If non-zero, we want powermon log outputs. With the particular (bitfield) sources enabled.
* Note: we picked an ID of 32 so that lower more efficient IDs can be used for more frequently used options.
*/
uint64 powermon_enables = 32;
} }
/* /*
@ -544,7 +466,7 @@ message Config {
string wifi_psk = 4; string wifi_psk = 4;
/* /*
* NTP server to use if WiFi is conneced, defaults to `meshtastic.pool.ntp.org` * NTP server to use if WiFi is conneced, defaults to `0.pool.ntp.org`
*/ */
string ntp_server = 5; string ntp_server = 5;
@ -567,31 +489,6 @@ message Config {
* rsyslog Server and Port * rsyslog Server and Port
*/ */
string rsyslog_server = 9; string rsyslog_server = 9;
/*
* Flags for enabling/disabling network protocols
*/
uint32 enabled_protocols = 10;
/*
* Enable/Disable ipv6 support
*/
bool ipv6_enabled = 11;
/*
* Available flags auxiliary network protocols
*/
enum ProtocolFlags {
/*
* Do not broadcast packets over any network protocol
*/
NO_BROADCAST = 0x0000;
/*
* Enable broadcasting packets via UDP over the local network
*/
UDP_BROADCAST = 0x0001;
}
} }
/* /*
@ -599,10 +496,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 +557,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 +584,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 +598,7 @@ message Config {
* If this is set, the displayed compass will always point north. if unset, the old behaviour * If this is set, the displayed compass will always point north. if unset, the old behaviour
* (top of display is heading direction) is used. * (top of display is heading direction) is used.
*/ */
bool compass_north_top = 4 [deprecated = true]; bool compass_north_top = 4;
/* /*
* Flip screen vertically, for cases that mount the screen upside down * Flip screen vertically, for cases that mount the screen upside down
@ -724,70 +650,6 @@ message Config {
* Should we wake the screen up on accelerometer detected motion or tap * Should we wake the screen up on accelerometer detected motion or tap
*/ */
bool wake_on_tap_or_motion = 10; bool wake_on_tap_or_motion = 10;
enum CompassOrientation {
/*
* The compass and the display are in the same orientation.
*/
DEGREES_0 = 0;
/*
* Rotate the compass by 90 degrees.
*/
DEGREES_90 = 1;
/*
* Rotate the compass by 180 degrees.
*/
DEGREES_180 = 2;
/*
* Rotate the compass by 270 degrees.
*/
DEGREES_270 = 3;
/*
* Don't rotate the compass, but invert the result.
*/
DEGREES_0_INVERTED = 4;
/*
* Rotate the compass by 90 degrees and invert.
*/
DEGREES_90_INVERTED = 5;
/*
* Rotate the compass by 180 degrees and invert.
*/
DEGREES_180_INVERTED = 6;
/*
* Rotate the compass by 270 degrees and invert.
*/
DEGREES_270_INVERTED = 7;
}
/*
* Indicates how to rotate or invert the compass output to accurate display on the display.
*/
CompassOrientation compass_orientation = 11;
/*
* If false (default), the device will display the time in 24-hour format on screen.
* If true, the device will display the time in 12-hour format on screen.
*/
bool use_12h_clock = 12;
/*
* If false (default), the device will use short names for various display screens.
* If true, node names will show in long format
*/
bool use_long_node_name = 13;
/*
* If true, the device will display message bubbles on screen.
*/
bool enable_message_bubbles = 14;
} }
/* /*
@ -889,46 +751,6 @@ message Config {
* Singapore 923mhz * Singapore 923mhz
*/ */
SG_923 = 18; SG_923 = 18;
/*
* Philippines 433mhz
*/
PH_433 = 19;
/*
* Philippines 868mhz
*/
PH_868 = 20;
/*
* Philippines 915mhz
*/
PH_915 = 21;
/*
* Australia / New Zealand 433MHz
*/
ANZ_433 = 22;
/*
* Kazakhstan 433MHz
*/
KZ_433 = 23;
/*
* Kazakhstan 863MHz
*/
KZ_863 = 24;
/*
* Nepal 865MHz
*/
NP_865 = 25;
/*
* Brazil 902MHz
*/
BR_902 = 26;
} }
/* /*
@ -943,15 +765,13 @@ message Config {
/* /*
* Long Range - Slow * Long Range - Slow
* Deprecated in 2.7: Unpopular slow preset.
*/ */
LONG_SLOW = 1 [deprecated = true]; LONG_SLOW = 1;
/* /*
* Very Long Range - Slow * Very Long Range - Slow
* Deprecated in 2.5: Works only with txco and is unusably slow
*/ */
VERY_LONG_SLOW = 2 [deprecated = true]; VERY_LONG_SLOW = 2;
/* /*
* Medium Range - Slow * Medium Range - Slow
@ -977,36 +797,6 @@ message Config {
* Long Range - Moderately Fast * Long Range - Moderately Fast
*/ */
LONG_MODERATE = 7; LONG_MODERATE = 7;
/*
* Short Range - Turbo
* This is the fastest preset and the only one with 500kHz bandwidth.
* It is not legal to use in all regions due to this wider bandwidth.
*/
SHORT_TURBO = 8;
/*
* Long Range - Turbo
* This preset performs similarly to LongFast, but with 500Khz bandwidth.
*/
LONG_TURBO = 9;
}
enum FEM_LNA_Mode {
/*
* FEM_LNA is present but disabled
*/
DISABLED = 0;
/*
* FEM_LNA is present and enabled
*/
ENABLED = 1;
/*
* FEM_LNA is not present on the device
*/
NOT_PRESENT = 2;
} }
/* /*
@ -1108,11 +898,6 @@ message Config {
*/ */
float override_frequency = 14; float override_frequency = 14;
/*
* If true, disable the build-in PA FAN using pin define in RF95_FAN_EN.
*/
bool pa_fan_disabled = 15;
/* /*
* For testing it is useful sometimes to force a node to never listen to * For testing it is useful sometimes to force a node to never listen to
* particular other nodes (simulating radio out of range). All nodenums listed * particular other nodes (simulating radio out of range). All nodenums listed
@ -1124,15 +909,6 @@ message Config {
* If true, the device will not process any packets received via LoRa that passed via MQTT anywhere on the path towards it. * If true, the device will not process any packets received via LoRa that passed via MQTT anywhere on the path towards it.
*/ */
bool ignore_mqtt = 104; bool ignore_mqtt = 104;
/*
* Sets the ok_to_mqtt bit on outgoing packets
*/
bool config_ok_to_mqtt = 105;
/*
* Set where LORA FEM is enabled, disabled, or not present
*/
FEM_LNA_Mode fem_lna_mode = 106;
} }
message BluetoothConfig { message BluetoothConfig {
@ -1169,52 +945,6 @@ message Config {
uint32 fixed_pin = 3; uint32 fixed_pin = 3;
} }
message SecurityConfig {
/*
* The public key of the user's device.
* Sent out to other nodes on the mesh to allow them to compute a shared secret key.
*/
bytes public_key = 1;
/*
* The private key of the device.
* Used to create a shared key with a remote device.
*/
bytes private_key = 2;
/*
* The public key authorized to send admin messages to this node.
*/
repeated bytes admin_key = 3;
/*
* If true, device is considered to be "managed" by a mesh administrator via admin messages
* Device is managed by a mesh administrator.
*/
bool is_managed = 4;
/*
* Serial Console over the Stream API."
*/
bool serial_enabled = 5;
/*
* By default we turn off logging as soon as an API client connects (to keep shared serial link quiet).
* Output live debug logging over serial or bluetooth is set to true.
*/
bool debug_log_api_enabled = 6;
/*
* Allow incoming device control over the insecure legacy admin channel.
*/
bool admin_channel_enabled = 8;
}
/*
* Blank config request, strictly for getting the session key
*/
message SessionkeyConfig {}
/* /*
* Payload Variant * Payload Variant
*/ */
@ -1226,8 +956,5 @@ message Config {
DisplayConfig display = 5; DisplayConfig display = 5;
LoRaConfig lora = 6; LoRaConfig lora = 6;
BluetoothConfig bluetooth = 7; BluetoothConfig bluetooth = 7;
SecurityConfig security = 8;
SessionkeyConfig sessionkey = 9;
DeviceUIConfig device_ui = 10;
} }
} }

View file

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

View file

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

View file

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

View file

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

View file

@ -2,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/localonly.proto";
import "meshtastic/mesh.proto"; import "meshtastic/mesh.proto";
import "meshtastic/module_config.proto";
import "meshtastic/telemetry.proto"; import "meshtastic/telemetry.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
*/ */
@ -52,55 +52,6 @@ message PositionLite {
Position.LocSource location_source = 5; Position.LocSource location_source = 5;
} }
message UserLite {
/*
* This is the addr of the radio.
*/
bytes macaddr = 1 [deprecated = true];
/*
* A full name for this user, i.e. "Kevin Hester"
*/
string long_name = 2;
/*
* A VERY short name, ideally two characters.
* Suitable for a tiny OLED screen
*/
string short_name = 3;
/*
* TBEAM, HELTEC, etc...
* Starting in 1.2.11 moved to hw_model enum in the NodeInfo object.
* Apps will still need the string here for older builds
* (so OTA update can find the right image), but if the enum is available it will be used instead.
*/
HardwareModel hw_model = 4;
/*
* In some regions Ham radio operators have different bandwidth limitations than others.
* If this user is a licensed operator, set this flag.
* Also, "long_name" should be their licence number.
*/
bool is_licensed = 5;
/*
* Indicates that the user's role in the mesh
*/
Config.DeviceConfig.Role role = 6;
/*
* The public key of the user's device.
* This is sent out to other nodes on the mesh to allow them to compute a shared secret key.
*/
bytes public_key = 7;
/*
* Whether or not the node can be messaged
*/
optional bool is_unmessagable = 9;
}
message NodeInfoLite { message NodeInfoLite {
/* /*
* The node number * The node number
@ -110,7 +61,7 @@ message NodeInfoLite {
/* /*
* The user info for this node * The user info for this node
*/ */
UserLite user = 2; User user = 2;
/* /*
* This position data. Note: before 1.2.14 we would also store the last time we've heard from this node in position.time, that is no longer true. * This position data. Note: before 1.2.14 we would also store the last time we've heard from this node in position.time, that is no longer true.
@ -144,35 +95,38 @@ message NodeInfoLite {
bool via_mqtt = 8; bool via_mqtt = 8;
/* /*
* Number of hops away from us this node is (0 if direct neighbor) * Number of hops away from us this node is (0 if adjacent)
*/ */
optional uint32 hops_away = 9; uint32 hops_away = 9;
/* /*
* True if node is in our favorites list * True if node is in our favorites list
* Persists between NodeDB internal clean ups * Persists between NodeDB internal clean ups
*/ */
bool is_favorite = 10; bool is_favorite = 10;
/*
* True if node is in our ignored list
* Persists between NodeDB internal clean ups
*/
bool is_ignored = 11;
/*
* Last byte of the node number of the node that should be used as the next hop to reach this node.
*/
uint32 next_hop = 12;
/*
* Bitfield for storing booleans.
* LSB 0 is_key_manually_verified
* LSB 1 is_muted
*/
uint32 bitfield = 13;
} }
/*
* Font sizes for the device screen
*/
enum ScreenFonts {
/*
* TODO: REPLACE
*/
FONT_SMALL = 0;
/*
* TODO: REPLACE
*/
FONT_MEDIUM = 1;
/*
* TODO: REPLACE
*/
FONT_LARGE = 2;
}
/* /*
* This message is never sent over the wire, but it is used for serializing DB * This message is never sent over the wire, but it is used for serializing DB
* state to flash in the device code * state to flash in the device code
@ -218,10 +172,9 @@ message DeviceState {
bool no_save = 9 [deprecated = true]; bool no_save = 9 [deprecated = true];
/* /*
* Previously used to manage GPS factory resets. * Some GPS receivers seem to have bogus settings from the factory, so we always do one factory reset.
* Deprecated in 2.5.23
*/ */
bool did_gps_reset = 11 [deprecated = true]; bool did_gps_reset = 11;
/* /*
* We keep the last received waypoint stored in the device flash, * We keep the last received waypoint stored in the device flash,
@ -234,20 +187,11 @@ message DeviceState {
* The mesh's nodes with their available gpio pins for RemoteHardware module * The mesh's nodes with their available gpio pins for RemoteHardware module
*/ */
repeated NodeRemoteHardwarePin node_remote_hardware_pins = 13; repeated NodeRemoteHardwarePin node_remote_hardware_pins = 13;
}
message NodeDatabase {
/*
* A version integer used to invalidate old save files when we make
* incompatible changes This integer is set at build time and is private to
* NodeDB.cpp in the device code.
*/
uint32 version = 1;
/* /*
* New lite version of NodeDB to decrease memory footprint * New lite version of NodeDB to decrease memory footprint
*/ */
repeated NodeInfoLite nodes = 2 [(nanopb).callback_datatype = "std::vector<meshtastic_NodeInfoLite>"]; repeated NodeInfoLite node_db_lite = 14 [(nanopb).callback_datatype = "std::vector<meshtastic_NodeInfoLite>"];
} }
/* /*
@ -268,36 +212,47 @@ message ChannelFile {
} }
/* /*
* The on-disk backup of the node's preferences * This can be used for customizing the firmware distribution. If populated,
* show a secondary bootup screen with custom logo and text for 2.5 seconds.
*/ */
message BackupPreferences { message OEMStore {
/* /*
* The version of the backup * The Logo width in Px
*/ */
uint32 version = 1; uint32 oem_icon_width = 1;
/* /*
* The timestamp of the backup (if node has time) * The Logo height in Px
*/ */
fixed32 timestamp = 2; uint32 oem_icon_height = 2;
/* /*
* The node's configuration * The Logo in XBM bytechar format
*/ */
LocalConfig config = 3; bytes oem_icon_bits = 3;
/* /*
* The node's module configuration * Use this font for the OEM text.
*/ */
LocalModuleConfig module_config = 4; ScreenFonts oem_font = 4;
/* /*
* The node's channels * Use this font for the OEM text.
*/ */
ChannelFile channels = 5; string oem_text = 5;
/* /*
* The node's user (owner) information * The default device encryption key, 16 or 32 byte
*/ */
User owner = 6; bytes oem_aes_key = 6;
/*
* A Preset LocalConfig to apply during factory reset
*/
LocalConfig oem_local_config = 7;
/*
* A Preset LocalModuleConfig to apply during factory reset
*/
LocalModuleConfig oem_local_module_config = 8;
} }

View file

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

View file

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

View file

@ -8,7 +8,7 @@ import "meshtastic/module_config.proto";
option csharp_namespace = "Meshtastic.Protobufs"; option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated"; option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "LocalOnlyProtos"; option java_outer_classname = "LocalOnlyProtos";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
/* /*
@ -58,11 +58,6 @@ message LocalConfig {
* NodeDB.cpp in the device code. * NodeDB.cpp in the device code.
*/ */
uint32 version = 8; uint32 version = 8;
/*
* The part of the config that is specific to Security settings
*/
Config.SecurityConfig security = 9;
} }
message LocalModuleConfig { message LocalModuleConfig {
@ -131,21 +126,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

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

File diff suppressed because it is too large Load diff

View file

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

View file

@ -2,12 +2,10 @@ syntax = "proto3";
package meshtastic; package meshtastic;
import "meshtastic/atak.proto";
option csharp_namespace = "Meshtastic.Protobufs"; option csharp_namespace = "Meshtastic.Protobufs";
option go_package = "github.com/meshtastic/go/generated"; option go_package = "github.com/meshtastic/go/generated";
option java_outer_classname = "ModuleConfigProtos"; option java_outer_classname = "ModuleConfigProtos";
option java_package = "org.meshtastic.proto"; option java_package = "com.geeksville.mesh";
option swift_prefix = ""; option swift_prefix = "";
/* /*
@ -97,11 +95,6 @@ message ModuleConfig {
* Bits of precision for the location sent (default of 32 is full precision). * Bits of precision for the location sent (default of 32 is full precision).
*/ */
uint32 position_precision = 2; uint32 position_precision = 2;
/*
* Whether we have opted-in to report our location to the map
*/
bool should_report_location = 3;
} }
/* /*
@ -135,56 +128,31 @@ message ModuleConfig {
/* /*
* Interval in seconds of how often we should try to send our * Interval in seconds of how often we should try to send our
* Neighbor Info (minimum is 14400, i.e., 4 hours) * Neighbor Info to the mesh
*/ */
uint32 update_interval = 2; uint32 update_interval = 2;
/*
* Whether in addition to sending it to MQTT and the PhoneAPI, our NeighborInfo should be transmitted over LoRa.
* Note that this is not available on a channel with default key and name.
*/
bool transmit_over_lora = 3;
} }
/* /*
* Detection Sensor Module Config * Detection Sensor Module Config
*/ */
message DetectionSensorConfig { message DetectionSensorConfig {
enum TriggerType {
// Event is triggered if pin is low
LOGIC_LOW = 0;
// Event is triggered if pin is high
LOGIC_HIGH = 1;
// Event is triggered when pin goes high to low
FALLING_EDGE = 2;
// Event is triggered when pin goes low to high
RISING_EDGE = 3;
// Event is triggered on every pin state change, low is considered to be
// "active"
EITHER_EDGE_ACTIVE_LOW = 4;
// Event is triggered on every pin state change, high is considered to be
// "active"
EITHER_EDGE_ACTIVE_HIGH = 5;
}
/* /*
* Whether the Module is enabled * Whether the Module is enabled
*/ */
bool enabled = 1; bool enabled = 1;
/* /*
* Interval in seconds of how often we can send a message to the mesh when a * Interval in seconds of how often we can send a message to the mesh when a state change is detected
* trigger event is detected
*/ */
uint32 minimum_broadcast_secs = 2; uint32 minimum_broadcast_secs = 2;
/* /*
* Interval in seconds of how often we should send a message to the mesh * Interval in seconds of how often we should send a message to the mesh with the current state regardless of changes
* with the current state regardless of trigger events When set to 0, only * When set to 0, only state changes will be broadcasted
* trigger events will be broadcasted Works as a sort of status heartbeat * Works as a sort of status heartbeat for peace of mind
* for peace of mind
*/ */
uint32 state_broadcast_secs = 3; uint32 state_broadcast_secs = 3;
/* /*
* Send ASCII bell with alert message * Send ASCII bell with alert message
* Useful for triggering ext. notification on bell * Useful for triggering ext. notification on bell
@ -204,9 +172,10 @@ message ModuleConfig {
uint32 monitor_pin = 6; uint32 monitor_pin = 6;
/* /*
* The type of trigger event to be used * Whether or not the GPIO pin state detection is triggered on HIGH (1)
* Otherwise LOW (0)
*/ */
TriggerType detection_trigger_type = 7; bool detection_triggered_high = 7;
/* /*
* Whether or not use INPUT_PULLUP mode for GPIO pin * Whether or not use INPUT_PULLUP mode for GPIO pin
@ -285,92 +254,6 @@ message ModuleConfig {
*/ */
uint32 paxcounter_update_interval = 2; uint32 paxcounter_update_interval = 2;
/*
* WiFi RSSI threshold. Defaults to -80
*/
int32 wifi_threshold = 3;
/*
* BLE RSSI threshold. Defaults to -80
*/
int32 ble_threshold = 4;
}
/*
* Config for the Traffic Management module.
* Provides packet inspection and traffic shaping to help reduce channel utilization
*/
message TrafficManagementConfig {
/*
* Master enable for traffic management module
*/
bool enabled = 1;
/*
* Enable position deduplication to drop redundant position broadcasts
*/
bool position_dedup_enabled = 2;
/*
* Number of bits of precision for position deduplication (0-32)
*/
uint32 position_precision_bits = 3;
/*
* Minimum interval in seconds between position updates from the same node
*/
uint32 position_min_interval_secs = 4;
/*
* Enable direct response to NodeInfo requests from local cache
*/
bool nodeinfo_direct_response = 5;
/*
* Minimum hop distance from requestor before responding to NodeInfo requests
*/
uint32 nodeinfo_direct_response_max_hops = 6;
/*
* Enable per-node rate limiting to throttle chatty nodes
*/
bool rate_limit_enabled = 7;
/*
* Time window in seconds for rate limiting calculations
*/
uint32 rate_limit_window_secs = 8;
/*
* Maximum packets allowed per node within the rate limit window
*/
uint32 rate_limit_max_packets = 9;
/*
* Enable dropping of unknown/undecryptable packets per rate_limit_window_secs
*/
bool drop_unknown_enabled = 10;
/*
* Number of unknown packets before dropping from a node
*/
uint32 unknown_packet_threshold = 11;
/*
* Set hop_limit to 0 for relayed telemetry broadcasts (own packets unaffected)
*/
bool exhaust_hop_telemetry = 12;
/*
* Set hop_limit to 0 for relayed position broadcasts (own packets unaffected)
*/
bool exhaust_hop_position = 13;
/*
* Preserve hop_limit for router-to-router traffic
*/
bool router_preserve_hops = 14;
} }
/* /*
@ -410,17 +293,6 @@ message ModuleConfig {
NMEA = 4; NMEA = 4;
// NMEA messages specifically tailored for CalTopo // NMEA messages specifically tailored for CalTopo
CALTOPO = 5; CALTOPO = 5;
// Ecowitt WS85 weather station
WS85 = 6;
// VE.Direct is a serial protocol used by Victron Energy products
// https://beta.ivc.no/wiki/index.php/Victron_VE_Direct_DIY_Cable
VE_DIRECT = 7;
// Used to configure and view some parameters of MeshSolar.
// https://heltec.org/project/meshsolar/
MS_CONFIG = 8;
// Logs mesh traffic to the serial pins, ideal for logging via openLog or similar.
LOG = 9; // includes other packets
LOGTEXT = 10; // only text (channel & DM)
} }
/* /*
@ -585,11 +457,6 @@ message ModuleConfig {
* TODO: REPLACE * TODO: REPLACE
*/ */
uint32 history_return_window = 5; uint32 history_return_window = 5;
/*
* Set to true to let this node act as a server that stores received messages and resends them upon request.
*/
bool is_server = 6;
} }
/* /*
@ -611,12 +478,6 @@ message ModuleConfig {
* ESP32 Only * ESP32 Only
*/ */
bool save = 3; bool save = 3;
/*
* Bool indicating that the node should cleanup / destroy it's RangeTest.csv file.
* ESP32 Only
*/
bool clear_on_reboot = 4;
} }
/* /*
@ -665,52 +526,26 @@ message ModuleConfig {
uint32 air_quality_interval = 7; uint32 air_quality_interval = 7;
/* /*
* Enable/disable Power metrics * Interval in seconds of how often we should try to send our
* air quality metrics to the mesh
*/ */
bool power_measurement_enabled = 8; bool power_measurement_enabled = 8;
/* /*
* Interval in seconds of how often we should try to send our * Interval in seconds of how often we should try to send our
* power metrics to the mesh * air quality metrics to the mesh
*/ */
uint32 power_update_interval = 9; uint32 power_update_interval = 9;
/* /*
* Enable/Disable the power measurement module on-device display * Interval in seconds of how often we should try to send our
* air quality metrics to the mesh
*/ */
bool power_screen_enabled = 10; bool power_screen_enabled = 10;
/*
* Preferences for the (Health) Telemetry Module
* Enable/Disable the telemetry measurement module measurement collection
*/
bool health_measurement_enabled = 11;
/*
* Interval in seconds of how often we should try to send our
* health metrics to the mesh
*/
uint32 health_update_interval = 12;
/*
* Enable/Disable the health telemetry module on-device display
*/
bool health_screen_enabled = 13;
/*
* Enable/Disable the device telemetry module to send metrics to the mesh
* Note: We will still send telemtry to the connected phone / client every minute over the API
*/
bool device_telemetry_enabled = 14;
/*
* Enable/Disable the air quality telemetry measurement module on-device display
*/
bool air_quality_screen_enabled = 15;
} }
/* /*
* Canned Messages Module Config * TODO: REPLACE
*/ */
message CannedMessageConfig { message CannedMessageConfig {
/* /*
@ -801,13 +636,13 @@ message ModuleConfig {
/* /*
* Enable/disable CannedMessageModule. * Enable/disable CannedMessageModule.
*/ */
bool enabled = 9 [deprecated = true]; bool enabled = 9;
/* /*
* Input event origin accepted by the canned message module. * Input event origin accepted by the canned message module.
* Can be e.g. "rotEnc1", "upDownEnc1", "scanAndSelect", "cardkb", "serialkb", or keyword "_any" * Can be e.g. "rotEnc1", "upDownEnc1" or keyword "_any"
*/ */
string allow_input_source = 10 [deprecated = true]; string allow_input_source = 10;
/* /*
* CannedMessageModule also sends a bell character with the messages. * CannedMessageModule also sends a bell character with the messages.
@ -847,16 +682,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 +750,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 = "";
/* /*
@ -105,21 +105,6 @@ enum PortNum {
*/ */
DETECTION_SENSOR_APP = 10; DETECTION_SENSOR_APP = 10;
/*
* Same as Text Message but used for critical alerts.
*/
ALERT_APP = 11;
/*
* Module/port for handling key verification requests.
*/
KEY_VERIFICATION_APP = 12;
/*
* Module/port for handling primitive remote shell access.
*/
REMOTE_SHELL_APP = 13;
/* /*
* Provides a 'ping' service that replies to any packet it receives. * Provides a 'ping' service that replies to any packet it receives.
* Also serves as a small example module. * Also serves as a small example module.
@ -139,22 +124,6 @@ enum PortNum {
*/ */
PAXCOUNTER_APP = 34; PAXCOUNTER_APP = 34;
/*
* Store and Forward++ module included in the firmware
* ENCODING: protobuf
* This module is specifically for Native Linux nodes, and provides a Git-style
* chain of messages.
*/
STORE_FORWARD_PLUSPLUS_APP = 35;
/*
* Node Status module
* ENCODING: protobuf
* This module allows setting an extra string of status for a node.
* Broadcasts on change and on a timer, possibly once a day.
*/
NODE_STATUS_APP = 36;
/* /*
* Provides a hardware serial interface to send and receive from the Meshtastic network. * Provides a hardware serial interface to send and receive from the Meshtastic network.
* Connect to the RX/TX pins of a device with 38400 8N1. Packets received from the Meshtastic * Connect to the RX/TX pins of a device with 38400 8N1. Packets received from the Meshtastic
@ -205,7 +174,7 @@ enum PortNum {
/* /*
* Provides a traceroute functionality to show the route a packet towards * Provides a traceroute functionality to show the route a packet towards
* a certain destination would take on the mesh. Contains a RouteDiscovery message as payload. * a certain destination would take on the mesh.
* ENCODING: Protobuf * ENCODING: Protobuf
*/ */
TRACEROUTE_APP = 70; TRACEROUTE_APP = 70;
@ -227,44 +196,6 @@ enum PortNum {
*/ */
MAP_REPORT_APP = 73; MAP_REPORT_APP = 73;
/*
* PowerStress based monitoring support (for automated power consumption testing)
*/
POWERSTRESS_APP = 74;
/*
* LoraWAN Payload Transport
* ENCODING: compact binary LoRaWAN uplink (10-byte RF metadata + PHY payload) - see LoRaWANBridgeModule
*/
LORAWAN_BRIDGE = 75;
/*
* Reticulum Network Stack Tunnel App
* ENCODING: Fragmented RNS Packet. Handled by Meshtastic RNS interface
*/
RETICULUM_TUNNEL_APP = 76;
/*
* App for transporting Cayenne Low Power Payload, popular for LoRaWAN sensor nodes. Offers ability to send
* arbitrary telemetry over meshtastic that is not covered by telemetry.proto
* ENCODING: CayenneLLP
*/
CAYENNE_APP = 77;
/*
* ATAK Plugin V2
* Portnum for payloads from the official Meshtastic ATAK plugin using
* TAKPacketV2 with zstd dictionary compression.
*/
ATAK_PLUGIN_V2 = 78;
/*
* GroupAlarm integration
* Used for transporting GroupAlarm-related messages between Meshtastic nodes
* and companion applications/services.
*/
GROUPALARM_APP = 112;
/* /*
* Private applications should use portnums >= 256. * Private applications should use portnums >= 256.
* To simplify initial development and testing you can use "PRIVATE_APP" * To simplify initial development and testing you can use "PRIVATE_APP"

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

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 = "";
/* /*
@ -15,27 +15,27 @@ message DeviceMetrics {
/* /*
* 0-100 (>100 means powered) * 0-100 (>100 means powered)
*/ */
optional uint32 battery_level = 1; uint32 battery_level = 1;
/* /*
* Voltage measured * Voltage measured
*/ */
optional float voltage = 2; float voltage = 2;
/* /*
* Utilization for the current channel, including well formed TX, RX and malformed RX (aka noise). * Utilization for the current channel, including well formed TX, RX and malformed RX (aka noise).
*/ */
optional float channel_utilization = 3; float channel_utilization = 3;
/* /*
* Percent of airtime for transmission used within the last hour. * Percent of airtime for transmission used within the last hour.
*/ */
optional float air_util_tx = 4; float air_util_tx = 4;
/* /*
* How long the device has been running since the last reboot (in seconds) * How long the device has been running since the last reboot (in seconds)
*/ */
optional uint32 uptime_seconds = 5; uint32 uptime_seconds = 5;
} }
/* /*
@ -45,119 +45,43 @@ message EnvironmentMetrics {
/* /*
* Temperature measured * Temperature measured
*/ */
optional float temperature = 1; float temperature = 1;
/* /*
* Relative humidity percent measured * Relative humidity percent measured
*/ */
optional float relative_humidity = 2; float relative_humidity = 2;
/* /*
* Barometric pressure in hPA measured * Barometric pressure in hPA measured
*/ */
optional float barometric_pressure = 3; float barometric_pressure = 3;
/* /*
* Gas resistance in MOhm measured * Gas resistance in MOhm measured
*/ */
optional float gas_resistance = 4; float gas_resistance = 4;
/* /*
* Voltage measured (To be depreciated in favor of PowerMetrics in Meshtastic 3.x) * Voltage measured (To be depreciated in favor of PowerMetrics in Meshtastic 3.x)
*/ */
optional float voltage = 5; float voltage = 5;
/* /*
* Current measured (To be depreciated in favor of PowerMetrics in Meshtastic 3.x) * Current measured (To be depreciated in favor of PowerMetrics in Meshtastic 3.x)
*/ */
optional float current = 6; float current = 6;
/* /*
* relative scale IAQ value as measured by Bosch BME680 . value 0-500. * relative scale IAQ value as measured by Bosch BME680 . value 0-500.
* Belongs to Air Quality but is not particle but VOC measurement. Other VOC values can also be put in here. * Belongs to Air Quality but is not particle but VOC measurement. Other VOC values can also be put in here.
*/ */
optional uint32 iaq = 7; uint32 iaq = 7;
/* /*
* RCWL9620 Doppler Radar Distance Sensor, used for water level detection. Float value in mm. * RCWL9620 Doppler Radar Distance Sensor, used for water level detection. Float value in mm.
*/ */
optional float distance = 8; float distance = 8;
/*
* VEML7700 high accuracy ambient light(Lux) digital 16-bit resolution sensor.
*/
optional float lux = 9;
/*
* VEML7700 high accuracy white light(irradiance) not calibrated digital 16-bit resolution sensor.
*/
optional float white_lux = 10;
/*
* Infrared lux
*/
optional float ir_lux = 11;
/*
* Ultraviolet lux
*/
optional float uv_lux = 12;
/*
* Wind direction in degrees
* 0 degrees = North, 90 = East, etc...
*/
optional uint32 wind_direction = 13;
/*
* Wind speed in m/s
*/
optional float wind_speed = 14;
/*
* Weight in KG
*/
optional float weight = 15;
/*
* Wind gust in m/s
*/
optional float wind_gust = 16;
/*
* Wind lull in m/s
*/
optional float wind_lull = 17;
/*
* Radiation in µR/h
*/
optional float radiation = 18;
/*
* Rainfall in the last hour in mm
*/
optional float rainfall_1h = 19;
/*
* Rainfall in the last 24 hours in mm
*/
optional float rainfall_24h = 20;
/*
* Soil moisture measured (% 1-100)
*/
optional uint32 soil_moisture = 21;
/*
* Soil temperature measured (*C)
*/
optional float soil_temperature = 22;
/*
* One-wire temperature (*C)
*/
repeated float one_wire_temperature = 23;
} }
/* /*
@ -167,82 +91,32 @@ message PowerMetrics {
/* /*
* Voltage (Ch1) * Voltage (Ch1)
*/ */
optional float ch1_voltage = 1; float ch1_voltage = 1;
/* /*
* Current (Ch1) * Current (Ch1)
*/ */
optional float ch1_current = 2; float ch1_current = 2;
/* /*
* Voltage (Ch2) * Voltage (Ch2)
*/ */
optional float ch2_voltage = 3; float ch2_voltage = 3;
/* /*
* Current (Ch2) * Current (Ch2)
*/ */
optional float ch2_current = 4; float ch2_current = 4;
/* /*
* Voltage (Ch3) * Voltage (Ch3)
*/ */
optional float ch3_voltage = 5; float ch3_voltage = 5;
/* /*
* Current (Ch3) * Current (Ch3)
*/ */
optional float ch3_current = 6; 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,320 +124,64 @@ message PowerMetrics {
*/ */
message AirQualityMetrics { message AirQualityMetrics {
/* /*
* Concentration Units Standard PM1.0 in ug/m3 * Concentration Units Standard PM1.0
*/ */
optional uint32 pm10_standard = 1; uint32 pm10_standard = 1;
/* /*
* Concentration Units Standard PM2.5 in ug/m3 * Concentration Units Standard PM2.5
*/ */
optional uint32 pm25_standard = 2; uint32 pm25_standard = 2;
/* /*
* Concentration Units Standard PM10.0 in ug/m3 * Concentration Units Standard PM10.0
*/ */
optional uint32 pm100_standard = 3; uint32 pm100_standard = 3;
/* /*
* Concentration Units Environmental PM1.0 in ug/m3 * Concentration Units Environmental PM1.0
*/ */
optional uint32 pm10_environmental = 4; uint32 pm10_environmental = 4;
/* /*
* Concentration Units Environmental PM2.5 in ug/m3 * Concentration Units Environmental PM2.5
*/ */
optional uint32 pm25_environmental = 5; uint32 pm25_environmental = 5;
/* /*
* Concentration Units Environmental PM10.0 in ug/m3 * Concentration Units Environmental PM10.0
*/ */
optional uint32 pm100_environmental = 6; uint32 pm100_environmental = 6;
/* /*
* 0.3um Particle Count in #/0.1l * 0.3um Particle Count
*/ */
optional uint32 particles_03um = 7; uint32 particles_03um = 7;
/* /*
* 0.5um Particle Count in #/0.1l * 0.5um Particle Count
*/ */
optional uint32 particles_05um = 8; uint32 particles_05um = 8;
/* /*
* 1.0um Particle Count in #/0.1l * 1.0um Particle Count
*/ */
optional uint32 particles_10um = 9; uint32 particles_10um = 9;
/* /*
* 2.5um Particle Count in #/0.1l * 2.5um Particle Count
*/ */
optional uint32 particles_25um = 10; uint32 particles_25um = 10;
/* /*
* 5.0um Particle Count in #/0.1l * 5.0um Particle Count
*/ */
optional uint32 particles_50um = 11; uint32 particles_50um = 11;
/* /*
* 10.0um Particle Count in #/0.1l * 10.0um Particle Count
*/ */
optional uint32 particles_100um = 12; uint32 particles_100um = 12;
/*
* CO2 concentration in ppm
*/
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;
}
/*
* Local device mesh statistics
*/
message LocalStats {
/*
* How long the device has been running since the last reboot (in seconds)
*/
uint32 uptime_seconds = 1;
/*
* Utilization for the current channel, including well formed TX, RX and malformed RX (aka noise).
*/
float channel_utilization = 2;
/*
* Percent of airtime for transmission used within the last hour.
*/
float air_util_tx = 3;
/*
* Number of packets sent
*/
uint32 num_packets_tx = 4;
/*
* Number of packets received (both good and bad)
*/
uint32 num_packets_rx = 5;
/*
* Number of packets received that are malformed or violate the protocol
*/
uint32 num_packets_rx_bad = 6;
/*
* Number of nodes online (in the past 2 hours)
*/
uint32 num_online_nodes = 7;
/*
* Number of nodes total
*/
uint32 num_total_nodes = 8;
/*
* Number of received packets that were duplicates (due to multiple nodes relaying).
* If this number is high, there are nodes in the mesh relaying packets when it's unnecessary, for example due to the ROUTER/REPEATER role.
*/
uint32 num_rx_dupe = 9;
/*
* Number of packets we transmitted that were a relay for others (not originating from ourselves).
*/
uint32 num_tx_relay = 10;
/*
* Number of times we canceled a packet to be relayed, because someone else did it before us.
* 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;
/*
* 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
*/
message HealthMetrics {
/*
* Heart rate (beats per minute)
*/
optional uint32 heart_bpm = 1;
/*
* SpO2 (blood oxygen saturation) level
*/
optional uint32 spO2 = 2;
/*
* Body temperature in degrees Celsius
*/
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;
} }
/* /*
@ -595,26 +213,6 @@ message Telemetry {
* Power Metrics * Power Metrics
*/ */
PowerMetrics power_metrics = 5; PowerMetrics power_metrics = 5;
/*
* Local device mesh statistics
*/
LocalStats local_stats = 6;
/*
* Health telemetry metrics
*/
HealthMetrics health_metrics = 7;
/*
* Linux host metrics
*/
HostMetrics host_metrics = 8;
/*
* Traffic management statistics
*/
TrafficManagementStats traffic_management_stats = 9;
} }
} }
@ -658,7 +256,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 +281,7 @@ enum TelemetrySensorType {
QMC5883L = 11; QMC5883L = 11;
/* /*
* TODO - REMOVE High accuracy temperature and humidity * High accuracy temperature and humidity
*/ */
SHT31 = 12; SHT31 = 12;
@ -706,229 +304,4 @@ enum TelemetrySensorType {
* RCWL-9620 Doppler Radar Distance Sensor, used for water level detection * RCWL-9620 Doppler Radar Distance Sensor, used for water level detection
*/ */
RCWL9620 = 16; RCWL9620 = 16;
/*
* TODO - REMOVE Sensirion High accuracy temperature and humidity
*/
SHT4X = 17;
/*
* VEML7700 high accuracy ambient light(Lux) digital 16-bit resolution sensor.
*/
VEML7700 = 18;
/*
* MLX90632 non-contact IR temperature sensor.
*/
MLX90632 = 19;
/*
* TI OPT3001 Ambient Light Sensor
*/
OPT3001 = 20;
/*
* Lite On LTR-390UV-01 UV Light Sensor
*/
LTR390UV = 21;
/*
* AMS TSL25911FN RGB Light Sensor
*/
TSL25911FN = 22;
/*
* AHT10 Integrated temperature and humidity sensor
*/
AHT10 = 23;
/*
* DFRobot Lark Weather station (temperature, humidity, pressure, wind speed and direction)
*/
DFROBOT_LARK = 24;
/*
* NAU7802 Scale Chip or compatible
*/
NAU7802 = 25;
/*
* BMP3XX High accuracy temperature and pressure
*/
BMP3XX = 26;
/*
* ICM-20948 9-Axis digital motion processor
*/
ICM20948 = 27;
/*
* MAX17048 1S lipo battery sensor (voltage, state of charge, time to go)
*/
MAX17048 = 28;
/*
* Custom I2C sensor implementation based on https://github.com/meshtastic/i2c-sensor
*/
CUSTOM_SENSOR = 29;
/*
* MAX30102 Pulse Oximeter and Heart-Rate Sensor
*/
MAX30102 = 30;
/*
* MLX90614 non-contact IR temperature sensor
*/
MLX90614 = 31;
/*
* SCD40/SCD41 CO2, humidity, temperature sensor
*/
SCD4X = 32;
/*
* ClimateGuard RadSens, radiation, Geiger-Muller Tube
*/
RADSENS = 33;
/*
* High accuracy current and voltage
*/
INA226 = 34;
/*
* DFRobot Gravity tipping bucket rain gauge
*/
DFROBOT_RAIN = 35;
/*
* Infineon DPS310 High accuracy pressure and temperature
*/
DPS310 = 36;
/*
* RAKWireless RAK12035 Soil Moisture Sensor Module
*/
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;
}
/*
* NAU7802 Telemetry configuration, for saving to flash
*/
message Nau7802Config {
/*
* The offset setting for the NAU7802
*/
int32 zeroOffset = 1;
/*
* The calibration factor for the NAU7802
*/
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"
]
}