diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..b634d85
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+*.pdf filter=lfs diff=lfs merge=lfs -text
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..a35e878
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "protocol/meshtastic/internal/pbgen/upstream"]
+ path = protocol/meshtastic/internal/pbgen/upstream
+ url = https://github.com/meshtastic/protobufs.git
diff --git a/go.mod b/go.mod
index 48cacfd..d0cad0d 100644
--- a/go.mod
+++ b/go.mod
@@ -1,12 +1,13 @@
module git.maze.io/go/ham
-go 1.25.6
+go 1.26
require (
filippo.io/edwards25519 v1.1.0
github.com/golang-jwt/jwt/v5 v5.3.1
github.com/sirupsen/logrus v1.8.1
golang.org/x/crypto v0.48.0
+ google.golang.org/protobuf v1.36.11
)
require (
diff --git a/go.sum b/go.sum
index 75bcaa2..9d4ed80 100644
--- a/go.sum
+++ b/go.sum
@@ -5,6 +5,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/golang-jwt/jwt/v5 v5.3.1 h1:kYf81DTWFe7t+1VvL7eS+jKFVWaUnK9cB1qbwn63YCY=
github.com/golang-jwt/jwt/v5 v5.3.1/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE=
+github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
+github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
@@ -18,6 +20,8 @@ golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVo
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k=
golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
+google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
diff --git a/protocol/meshcore/node.go b/protocol/meshcore/node.go
index bb1ebbb..f758c48 100644
--- a/protocol/meshcore/node.go
+++ b/protocol/meshcore/node.go
@@ -60,6 +60,10 @@ func (dev *Node) Info() *radio.Info {
return dev.driver.Info()
}
+func (dev *Node) Stats() map[string]any {
+ return dev.driver.Stats()
+}
+
func (dev *Node) Trace(path []byte) (snr []float64, err error) {
if tracer, ok := dev.driver.(nodeTracer); ok {
return tracer.Trace(path)
@@ -74,6 +78,7 @@ type nodeDriver interface {
Setup() error
Packets() <-chan *Packet
+ Stats() map[string]any
}
type nodeTracer interface {
diff --git a/protocol/meshcore/node_companion.go b/protocol/meshcore/node_companion.go
index e6ff69f..09b5c50 100644
--- a/protocol/meshcore/node_companion.go
+++ b/protocol/meshcore/node_companion.go
@@ -47,6 +47,7 @@ type companionDriver struct {
info companionInfo
traceTag uint32
traceAuthCode uint32
+ stats map[string]any
}
type companionDriverWaiting struct {
@@ -208,6 +209,10 @@ func (drv *companionDriver) Info() *radio.Info {
}
}
+func (drv *companionDriver) Stats() map[string]any {
+ return drv.stats
+}
+
func (drv *companionDriver) Trace(path []byte) (snr []float64, err error) {
var (
args = make([]byte, 4+4+1+len(path))
diff --git a/protocol/meshcore/node_repeater.go b/protocol/meshcore/node_repeater.go
index 02430e4..b66adb0 100644
--- a/protocol/meshcore/node_repeater.go
+++ b/protocol/meshcore/node_repeater.go
@@ -23,6 +23,7 @@ type repeaterDriver struct {
lastFrame []byte
lastFrameAt time.Time
info repeaterInfo
+ stats map[string]any
err error
}
@@ -102,6 +103,7 @@ func newRepeaterDriver(conn io.ReadWriteCloser, hasSNR bool) *repeaterDriver {
conn: conn,
waiting: make(chan *repeaterDriverWaiting, 16),
hasSNR: hasSNR,
+ stats: make(map[string]any),
}
}
@@ -114,6 +116,7 @@ func (drv *repeaterDriver) Setup() (err error) {
if err = drv.queryDeviceInfo(); err != nil {
return err
}
+ go drv.pollStats()
return drv.err
}
@@ -176,6 +179,10 @@ func (drv *repeaterDriver) RawPackets() <-chan *protocol.Packet {
return drv.rawPackets
}
+func (drv *repeaterDriver) Stats() map[string]any {
+ return drv.stats
+}
+
func (drv *repeaterDriver) queryDeviceInfo() (err error) {
if drv.info.FirmwareVersion, err = drv.writeCommand("ver"); err != nil {
return
@@ -404,6 +411,73 @@ func (drv *repeaterDriver) poll() {
}
}
+func (drv *repeaterDriver) pollStats() {
+ ticker := time.NewTicker(time.Minute)
+ defer ticker.Stop()
+
+ for {
+ neighbors, err := drv.getNeighbors()
+ if err != nil {
+ Logger.Warnf("meshcore: failed to get neighbors: %v", err)
+ } else {
+ drv.stats["neighbors"] = neighbors
+ }
+
+ response, err := drv.writeCommand("stats")
+ if err != nil {
+ Logger.Warnf("meshcore: failed to get stats: %v", err)
+ return
+ }
+
+ stats := make(map[string]any)
+ for _, line := range strings.Split(response, "\n") {
+ parts := strings.SplitN(line, "=", 2)
+ if len(parts) != 2 {
+ continue
+ }
+ key := parts[0]
+ value := parts[1]
+
+ if i, err := strconv.Atoi(value); err == nil {
+ stats[key] = i
+ } else if f, err := strconv.ParseFloat(value, 64); err == nil {
+ stats[key] = f
+ } else {
+ stats[key] = value
+ }
+ }
+
+ drv.stats = stats
+
+ <-ticker.C
+ }
+}
+
+func (drv *repeaterDriver) getNeighbors() (neighbors map[string]float64, err error) {
+ // "neighbors" command returns a list of neighbors, one per line, in the format: "78CCC5A3:470:47\n"
+ var response string
+ if response, err = drv.writeCommand("neighbors"); err != nil {
+ return
+ }
+ Logger.Tracef("meshcore: neighbors response: %q", response)
+ neighbors = make(map[string]float64)
+ for _, line := range strings.Split(response, "\n") {
+ parts := strings.SplitN(line, ":", 3)
+ if len(parts) != 3 {
+ continue
+ }
+ var (
+ prefix = parts[0]
+ snr float64
+ )
+ if snr, err = strconv.ParseFloat(parts[2], 64); err != nil {
+ return
+ }
+ neighbors[prefix] = snr
+ }
+ return
+}
+
func (drv *repeaterDriver) parsePacket(line string) (time.Time, string, error) {
// "11:08:38 - 15/5/2024 U: TX, len=124 (type=4, route=D, payload_len=122)"
if len(line) < 22 {
diff --git a/protocol/meshtastic/internal/pbgen/README.md b/protocol/meshtastic/internal/pbgen/README.md
new file mode 100644
index 0000000..9b7d41d
--- /dev/null
+++ b/protocol/meshtastic/internal/pbgen/README.md
@@ -0,0 +1,46 @@
+# Meshtastic Protocol Buffers Generation
+
+This internal package manages the generation of Go types from the [official Meshtastic protocol buffer definitions](https://github.com/meshtastic/protobufs).
+
+## Upstream Source
+
+The protobuf definitions are included as a git submodule at:
+
+```
+protocol/meshtastic/internal/pbgen/upstream
+```
+
+Tracked repository: `https://github.com/meshtastic/protobufs.git`
+
+## Generating Go Code
+
+To regenerate the Go protobuf types after updating the submodule:
+
+```bash
+# Update the submodule to latest (optional)
+git submodule update --remote protocol/meshtastic/internal/pbgen/upstream
+
+# Regenerate Go code
+go generate ./protocol/meshtastic/internal/pbgen
+```
+
+### Requirements
+
+- `protoc` (Protocol Buffers compiler)
+- `protoc-gen-go` (install via `go install google.golang.org/protobuf/cmd/protoc-gen-go@latest`)
+
+## Generated Package
+
+Generated Go types are placed in:
+
+```
+protocol/meshtastic/pb/
+```
+
+Import path:
+
+```go
+import meshtasticpb "git.maze.io/go/ham/protocol/meshtastic/pb"
+```
+
+All Meshtastic protocol buffer messages (Position, User, Data, etc.) are available from this package.
diff --git a/protocol/meshtastic/internal/pbgen/generate.go b/protocol/meshtastic/internal/pbgen/generate.go
new file mode 100644
index 0000000..ca25bd5
--- /dev/null
+++ b/protocol/meshtastic/internal/pbgen/generate.go
@@ -0,0 +1,5 @@
+package protobufs
+
+//go:generate sh ./generate.sh
+
+const _ = 0
diff --git a/protocol/meshtastic/internal/pbgen/generate.sh b/protocol/meshtastic/internal/pbgen/generate.sh
new file mode 100644
index 0000000..67b5762
--- /dev/null
+++ b/protocol/meshtastic/internal/pbgen/generate.sh
@@ -0,0 +1,75 @@
+#!/usr/bin/env sh
+
+set -eu
+
+SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)"
+UPSTREAM_DIR="$SCRIPT_DIR/upstream"
+OUT_DIR="$SCRIPT_DIR/../../pb"
+MODULE_IMPORT="git.maze.io/go/ham/protocol/meshtastic/pb"
+
+if ! command -v protoc >/dev/null 2>&1; then
+ echo "error: protoc not found in PATH" >&2
+ exit 1
+fi
+
+GOBIN_DIR="$(go env GOPATH 2>/dev/null)/bin"
+if [ -n "$GOBIN_DIR" ] && [ -d "$GOBIN_DIR" ]; then
+ PATH="$GOBIN_DIR:$PATH"
+ export PATH
+fi
+
+if ! command -v protoc-gen-go >/dev/null 2>&1; then
+ echo "error: protoc-gen-go not found in PATH" >&2
+ exit 1
+fi
+
+if [ ! -d "$UPSTREAM_DIR/meshtastic" ]; then
+ echo "error: upstream proto directory not found: $UPSTREAM_DIR/meshtastic" >&2
+ exit 1
+fi
+
+PROTO_FILES=$(find "$UPSTREAM_DIR" -type f -name '*.proto' | LC_ALL=C sort)
+
+if [ -z "$PROTO_FILES" ]; then
+ echo "error: no proto files found in $UPSTREAM_DIR" >&2
+ exit 1
+fi
+
+M_OPTS=""
+for file in $PROTO_FILES; do
+ rel="${file#$UPSTREAM_DIR/}"
+ M_OPTS="$M_OPTS --go_opt=M$rel=$MODULE_IMPORT"
+done
+
+rm -rf "$OUT_DIR"/*.pb.go
+mkdir -p "$OUT_DIR"
+
+# shellcheck disable=SC2086
+protoc \
+ -I "$UPSTREAM_DIR" \
+ --go_out="$OUT_DIR" \
+ --go_opt=paths=source_relative \
+ $M_OPTS \
+ $(printf '%s ' $PROTO_FILES)
+
+# Flatten meshtastic/ subdirectory into pb/ root
+if [ -d "$OUT_DIR/meshtastic" ]; then
+ mv "$OUT_DIR/meshtastic"/*.pb.go "$OUT_DIR/"
+ rmdir "$OUT_DIR/meshtastic"
+fi
+
+# Fix package name from 'generated' to 'pb'
+for pbfile in "$OUT_DIR"/*.pb.go; do
+ if [ -f "$pbfile" ]; then
+ sed -i.bak 's/^package generated$/package pb/' "$pbfile"
+ rm -f "$pbfile.bak"
+ fi
+done
+
+# Convert JSON tags from snake_case to camelCase
+# This converts json:"field_name,omitempty" to json:"fieldName,omitempty"
+for pbfile in "$OUT_DIR"/*.pb.go; do
+ if [ -f "$pbfile" ]; then
+ perl -i -pe 's/json:"([a-z0-9_]+)((?:,[^"]*)?)"/my ($f, $r) = ($1, $2); $f =~ s#_([a-z0-9])#uc($1)#ge; "json:\"$f$r\""/gex' "$pbfile"
+ fi
+done
diff --git a/protocol/meshtastic/internal/pbgen/upstream b/protocol/meshtastic/internal/pbgen/upstream
new file mode 160000
index 0000000..2edc5ab
--- /dev/null
+++ b/protocol/meshtastic/internal/pbgen/upstream
@@ -0,0 +1 @@
+Subproject commit 2edc5ab7b16a34996396c4fef691f1465980fa50
diff --git a/protocol/meshtastic/node.go b/protocol/meshtastic/node.go
new file mode 100644
index 0000000..149a3c6
--- /dev/null
+++ b/protocol/meshtastic/node.go
@@ -0,0 +1,173 @@
+package meshtastic
+
+import (
+ "crypto/rand"
+ "encoding/binary"
+ "fmt"
+ "math"
+ "math/big"
+ "strconv"
+ "strings"
+)
+
+type NodeID uint32
+
+const (
+ // BroadcastNodeID is the special NodeID used when broadcasting a packet to a channel.
+ BroadcastNodeID NodeID = math.MaxUint32
+
+ // BroadcastNodeIDNoLora is a special broadcast address that excludes LoRa transmission.
+ // Used for MQTT-only broadcasts. This is ^all with the NO_LORA flag (0x40) cleared.
+ BroadcastNodeIDNoLora NodeID = math.MaxUint32 ^ 0x40
+
+ // ReservedNodeIDThreshold is the threshold at which NodeIDs are considered reserved. Random NodeIDs should not
+ // be generated below this threshold.
+ // Source: https://github.com/meshtastic/firmware/blob/d1ea58975755e146457a8345065e4ca357555275/src/mesh/NodeDB.cpp#L461
+ reservedNodeIDThreshold NodeID = 4
+)
+
+// ParseNodeID parses a NodeID from various string formats:
+// - "!abcd1234" (Meshtastic format with ! prefix)
+// - "0xabcd1234" (hex with 0x prefix)
+// - "abcd1234" (plain hex)
+// - "12345678" (decimal)
+func ParseNodeID(s string) (NodeID, error) {
+ s = strings.TrimSpace(s)
+ if s == "" {
+ return 0, fmt.Errorf("empty node ID string")
+ }
+
+ // Handle !prefix format
+ if strings.HasPrefix(s, "!") {
+ s = s[1:]
+ n, err := strconv.ParseUint(s, 16, 32)
+ if err != nil {
+ return 0, fmt.Errorf("invalid node ID %q: %w", s, err)
+ }
+ return NodeID(n), nil
+ }
+
+ // Handle 0x prefix
+ if strings.HasPrefix(s, "0x") || strings.HasPrefix(s, "0X") {
+ n, err := strconv.ParseUint(s[2:], 16, 32)
+ if err != nil {
+ return 0, fmt.Errorf("invalid node ID %q: %w", s, err)
+ }
+ return NodeID(n), nil
+ }
+
+ // Try hex first if it looks like hex (contains a-f)
+ sLower := strings.ToLower(s)
+ if strings.ContainsAny(sLower, "abcdef") {
+ n, err := strconv.ParseUint(s, 16, 32)
+ if err != nil {
+ return 0, fmt.Errorf("invalid node ID %q: %w", s, err)
+ }
+ return NodeID(n), nil
+ }
+
+ // Try decimal
+ n, err := strconv.ParseUint(s, 10, 32)
+ if err != nil {
+ // Fall back to hex for 8-char strings
+ if len(s) == 8 {
+ n, err = strconv.ParseUint(s, 16, 32)
+ if err != nil {
+ return 0, fmt.Errorf("invalid node ID %q: %w", s, err)
+ }
+ return NodeID(n), nil
+ }
+ return 0, fmt.Errorf("invalid node ID %q: %w", s, err)
+ }
+ return NodeID(n), nil
+}
+
+// Uint32 returns the underlying uint32 value of the NodeID.
+func (n NodeID) Uint32() uint32 {
+ return uint32(n)
+}
+
+// String converts the NodeID to a hex formatted string.
+// This is typically how NodeIDs are displayed in Meshtastic UIs.
+func (n NodeID) String() string {
+ return fmt.Sprintf("!%08x", uint32(n))
+}
+
+// Bytes converts the NodeID to a byte slice
+func (n NodeID) Bytes() []byte {
+ bytes := make([]byte, 4) // uint32 is 4 bytes
+ binary.BigEndian.PutUint32(bytes, n.Uint32())
+ return bytes
+}
+
+// DefaultLongName returns the default long node name based on the NodeID.
+// Source: https://github.com/meshtastic/firmware/blob/d1ea58975755e146457a8345065e4ca357555275/src/mesh/NodeDB.cpp#L382
+func (n NodeID) DefaultLongName() string {
+ bytes := make([]byte, 4) // uint32 is 4 bytes
+ binary.BigEndian.PutUint32(bytes, n.Uint32())
+ return fmt.Sprintf("Meshtastic %04x", bytes[2:])
+}
+
+// DefaultShortName returns the default short node name based on the NodeID.
+// Last two bytes of the NodeID represented in hex.
+// Source: https://github.com/meshtastic/firmware/blob/d1ea58975755e146457a8345065e4ca357555275/src/mesh/NodeDB.cpp#L382
+func (n NodeID) DefaultShortName() string {
+ bytes := make([]byte, 4) // uint32 is 4 bytes
+ binary.BigEndian.PutUint32(bytes, n.Uint32())
+ return fmt.Sprintf("%04x", bytes[2:])
+}
+
+// UnmarshalText implements encoding.TextUnmarshaler for use with config parsers like Viper.
+func (n *NodeID) UnmarshalText(text []byte) error {
+ parsed, err := ParseNodeID(string(text))
+ if err != nil {
+ return err
+ }
+ *n = parsed
+ return nil
+}
+
+// MarshalText implements encoding.TextMarshaler.
+func (n NodeID) MarshalText() ([]byte, error) {
+ return []byte(n.String()), nil
+}
+
+// IsReservedID returns true if this is a reserved or broadcast NodeID.
+func (n NodeID) IsReservedID() bool {
+ return n < reservedNodeIDThreshold || n >= BroadcastNodeIDNoLora
+}
+
+// IsBroadcast returns true if this is any form of broadcast address.
+func (n NodeID) IsBroadcast() bool {
+ return n == BroadcastNodeID || n == BroadcastNodeIDNoLora
+}
+
+// ToMacAddress returns a MAC address string derived from the NodeID.
+// This creates a locally administered unicast MAC address.
+func (n NodeID) ToMacAddress() string {
+ bytes := n.Bytes()
+ // Use 0x02 as the first octet (locally administered, unicast)
+ // Then 0x00 as padding, followed by the 4 bytes of the NodeID
+ return fmt.Sprintf("02:00:%02x:%02x:%02x:%02x", bytes[0], bytes[1], bytes[2], bytes[3])
+}
+
+// RandomNodeID returns a randomised NodeID.
+// It's recommended to call this the first time a node is started and persist the result.
+//
+// Hardware meshtastic nodes first try a NodeID of the last four bytes of the BLE MAC address. If that ID is already in
+// use or invalid, a random NodeID is generated.
+// Source: https://github.com/meshtastic/firmware/blob/d1ea58975755e146457a8345065e4ca357555275/src/mesh/NodeDB.cpp#L466
+func RandomNodeID() (NodeID, error) {
+ // Generates a random uint32 between reservedNodeIDThreshold and math.MaxUint32
+ randomInt, err := rand.Int(
+ rand.Reader,
+ big.NewInt(
+ int64(math.MaxUint32-reservedNodeIDThreshold.Uint32()),
+ ),
+ )
+ if err != nil {
+ return NodeID(0), fmt.Errorf("reading entropy: %w", err)
+ }
+ r := uint32(randomInt.Uint64()) + reservedNodeIDThreshold.Uint32()
+ return NodeID(r), nil
+}
diff --git a/protocol/meshtastic/packet.go b/protocol/meshtastic/packet.go
new file mode 100644
index 0000000..3b0fa9a
--- /dev/null
+++ b/protocol/meshtastic/packet.go
@@ -0,0 +1,159 @@
+package meshtastic
+
+import (
+ "encoding/binary"
+ "encoding/json"
+ "errors"
+
+ meshtasticpb "git.maze.io/go/ham/protocol/meshtastic/pb"
+ "google.golang.org/protobuf/proto"
+)
+
+const (
+ minPacketSize = 4 + 4 + 4 + 1 + 1 + 1 + 1
+ maxPayloadSize = 237
+)
+
+var (
+ // ErrInvalidPacket signals the source buffer does not contain a valid packet.
+ ErrInvalidPacket = errors.New("meshtastic: invalid packet")
+)
+
+type Packet struct {
+ Destination NodeID `json:"destination"`
+ Source NodeID `json:"source"`
+ ID uint32 `json:"id"`
+ Flags uint8 `json:"flags"`
+ ChannelHash uint8 `json:"channelHash"`
+ NextHop uint8 `json:"nextHop"`
+ RelayNode uint8 `json:"relayNode"`
+ PayloadLength int `json:"-"`
+ Payload [maxPayloadSize]byte `json:"-"`
+ Data *meshtasticpb.Data `json:"data,omitempty"`
+ DecodedPayload proto.Message `json:"decodedPayload,omitempty"`
+ TextPayload string `json:"textPayload,omitempty"`
+}
+
+func (packet *Packet) Decode(data []byte) error {
+ if len(data) < minPacketSize {
+ return ErrInvalidPacket
+ }
+ if len(data[16:]) > maxPayloadSize {
+ return ErrInvalidPacket
+ }
+
+ packet.Source = parseNodeID(data[0:])
+ packet.Destination = parseNodeID(data[4:])
+ packet.ID = binary.LittleEndian.Uint32(data[8:])
+ packet.Flags = data[12]
+ packet.ChannelHash = data[13]
+ packet.NextHop = data[14]
+ packet.RelayNode = data[15]
+ packet.PayloadLength = len(data[16:])
+ copy(packet.Payload[:], data[16:])
+ packet.Data = nil
+ packet.DecodedPayload = nil
+ packet.TextPayload = ""
+
+ packet.decodePayloadProtobufs()
+
+ return nil
+}
+
+func (packet *Packet) PayloadBytes() []byte {
+ return packet.Payload[:packet.PayloadLength]
+}
+
+func (packet *Packet) HopLimit() int {
+ return 7
+}
+
+func parseNodeID(data []byte) NodeID {
+ return NodeID(binary.LittleEndian.Uint32(data))
+}
+
+func (packet *Packet) decodePayloadProtobufs() {
+ if packet.PayloadLength == 0 {
+ return
+ }
+
+ decodedData := &meshtasticpb.Data{}
+ if err := proto.Unmarshal(packet.PayloadBytes(), decodedData); err != nil {
+ return
+ }
+
+ packet.Data = decodedData
+
+ decodedPayload, textPayload := decodeDataPayload(decodedData.GetPortnum(), decodedData.GetPayload())
+ packet.DecodedPayload = decodedPayload
+ packet.TextPayload = textPayload
+}
+
+func decodeDataPayload(portNum meshtasticpb.PortNum, payload []byte) (proto.Message, string) {
+ if len(payload) == 0 {
+ return nil, ""
+ }
+
+ textPortNum := map[meshtasticpb.PortNum]struct{}{
+ meshtasticpb.PortNum_TEXT_MESSAGE_APP: {},
+ meshtasticpb.PortNum_ALERT_APP: {},
+ meshtasticpb.PortNum_DETECTION_SENSOR_APP: {},
+ meshtasticpb.PortNum_REPLY_APP: {},
+ meshtasticpb.PortNum_RANGE_TEST_APP: {},
+ meshtasticpb.PortNum_TEXT_MESSAGE_COMPRESSED_APP: {},
+ }
+ if _, ok := textPortNum[portNum]; ok {
+ return nil, string(payload)
+ }
+
+ var message proto.Message
+ switch portNum {
+ case meshtasticpb.PortNum_REMOTE_HARDWARE_APP:
+ message = &meshtasticpb.HardwareMessage{}
+ case meshtasticpb.PortNum_POSITION_APP:
+ message = &meshtasticpb.Position{}
+ case meshtasticpb.PortNum_NODEINFO_APP:
+ message = &meshtasticpb.User{}
+ case meshtasticpb.PortNum_ROUTING_APP:
+ message = &meshtasticpb.Routing{}
+ case meshtasticpb.PortNum_ADMIN_APP:
+ message = &meshtasticpb.AdminMessage{}
+ case meshtasticpb.PortNum_WAYPOINT_APP:
+ message = &meshtasticpb.Waypoint{}
+ case meshtasticpb.PortNum_KEY_VERIFICATION_APP:
+ message = &meshtasticpb.KeyVerification{}
+ case meshtasticpb.PortNum_PAXCOUNTER_APP:
+ message = &meshtasticpb.Paxcount{}
+ case meshtasticpb.PortNum_STORE_FORWARD_PLUSPLUS_APP:
+ message = &meshtasticpb.StoreForwardPlusPlus{}
+ case meshtasticpb.PortNum_STORE_FORWARD_APP:
+ message = &meshtasticpb.StoreAndForward{}
+ case meshtasticpb.PortNum_TELEMETRY_APP:
+ message = &meshtasticpb.Telemetry{}
+ case meshtasticpb.PortNum_TRACEROUTE_APP:
+ message = &meshtasticpb.RouteDiscovery{}
+ case meshtasticpb.PortNum_NEIGHBORINFO_APP:
+ message = &meshtasticpb.NeighborInfo{}
+ case meshtasticpb.PortNum_NODE_STATUS_APP:
+ message = &meshtasticpb.StatusMessage{}
+ default:
+ return nil, ""
+ }
+
+ if err := proto.Unmarshal(payload, message); err != nil {
+ return nil, ""
+ }
+ return message, ""
+}
+
+// MarshalJSON implements custom JSON marshaling for Packet.
+func (packet *Packet) MarshalJSON() ([]byte, error) {
+ type Alias Packet
+ return json.Marshal(&struct {
+ *Alias
+ Raw []byte `json:"raw"`
+ }{
+ Alias: (*Alias)(packet),
+ Raw: packet.PayloadBytes(),
+ })
+}
diff --git a/protocol/meshtastic/packet_test.go b/protocol/meshtastic/packet_test.go
new file mode 100644
index 0000000..e3af287
--- /dev/null
+++ b/protocol/meshtastic/packet_test.go
@@ -0,0 +1,591 @@
+package meshtastic
+
+import (
+ "encoding/binary"
+ "encoding/json"
+ "testing"
+
+ meshtasticpb "git.maze.io/go/ham/protocol/meshtastic/pb"
+ "google.golang.org/protobuf/proto"
+)
+
+func TestPacketDecodeTextPayload(t *testing.T) {
+ dataMsg := &meshtasticpb.Data{
+ Portnum: meshtasticpb.PortNum_TEXT_MESSAGE_APP,
+ Payload: []byte("hello mesh"),
+ }
+
+ encodedData, err := proto.Marshal(dataMsg)
+ if err != nil {
+ t.Fatalf("marshaling data protobuf: %v", err)
+ }
+
+ rawPacket := make([]byte, 16+len(encodedData))
+ binary.LittleEndian.PutUint32(rawPacket[0:], 0x01020304)
+ binary.LittleEndian.PutUint32(rawPacket[4:], 0x05060708)
+ binary.LittleEndian.PutUint32(rawPacket[8:], 0x090a0b0c)
+ rawPacket[12] = 0x01
+ rawPacket[13] = 0x02
+ rawPacket[14] = 0x03
+ rawPacket[15] = 0x04
+ copy(rawPacket[16:], encodedData)
+
+ var packet Packet
+ if err := packet.Decode(rawPacket); err != nil {
+ t.Fatalf("decoding packet: %v", err)
+ }
+
+ if packet.Data == nil {
+ t.Fatal("expected Data protobuf to be decoded")
+ }
+ if packet.Data.GetPortnum() != meshtasticpb.PortNum_TEXT_MESSAGE_APP {
+ t.Fatalf("unexpected portnum: got %v", packet.Data.GetPortnum())
+ }
+ if packet.TextPayload != "hello mesh" {
+ t.Fatalf("unexpected text payload: got %q", packet.TextPayload)
+ }
+ if packet.DecodedPayload != nil {
+ t.Fatalf("expected no decoded protobuf payload for text app, got %T", packet.DecodedPayload)
+ }
+}
+
+func TestPacketDecodeRejectsOversizedPayload(t *testing.T) {
+ rawPacket := make([]byte, 16+maxPayloadSize+1)
+
+ var packet Packet
+ err := packet.Decode(rawPacket)
+ if err != ErrInvalidPacket {
+ t.Fatalf("expected ErrInvalidPacket, got %v", err)
+ }
+}
+
+func TestPacketJSONSerialization(t *testing.T) {
+ dataMsg := &meshtasticpb.Data{
+ Portnum: meshtasticpb.PortNum_TEXT_MESSAGE_APP,
+ Payload: []byte("test message"),
+ }
+
+ encodedData, err := proto.Marshal(dataMsg)
+ if err != nil {
+ t.Fatalf("marshaling data protobuf: %v", err)
+ }
+
+ rawPacket := make([]byte, 16+len(encodedData))
+ binary.LittleEndian.PutUint32(rawPacket[0:], 0x12345678) // source
+ binary.LittleEndian.PutUint32(rawPacket[4:], 0xabcdef01) // destination
+ binary.LittleEndian.PutUint32(rawPacket[8:], 0x99887766) // id
+ rawPacket[12] = 0x11 // flags
+ rawPacket[13] = 0x22 // channelHash
+ rawPacket[14] = 0x33 // nextHop
+ rawPacket[15] = 0x44 // relayNode
+ copy(rawPacket[16:], encodedData)
+
+ var packet Packet
+ if err := packet.Decode(rawPacket); err != nil {
+ t.Fatalf("decoding packet: %v", err)
+ }
+
+ jsonBytes, err := json.Marshal(&packet)
+ if err != nil {
+ t.Fatalf("marshaling to JSON: %v", err)
+ }
+
+ var decoded map[string]interface{}
+ if err := json.Unmarshal(jsonBytes, &decoded); err != nil {
+ t.Fatalf("unmarshaling JSON: %v", err)
+ }
+
+ // Check camelCase field names
+ if _, ok := decoded["destination"]; !ok {
+ t.Error("missing 'destination' field")
+ }
+ if _, ok := decoded["source"]; !ok {
+ t.Error("missing 'source' field")
+ }
+ if _, ok := decoded["channelHash"]; !ok {
+ t.Error("missing 'channelHash' field")
+ }
+ if _, ok := decoded["nextHop"]; !ok {
+ t.Error("missing 'nextHop' field")
+ }
+ if _, ok := decoded["relayNode"]; !ok {
+ t.Error("missing 'relayNode' field")
+ }
+
+ // Check raw payload field
+ if _, ok := decoded["raw"]; !ok {
+ t.Error("missing 'raw' field")
+ }
+
+ // Check text payload
+ if textPayload, ok := decoded["textPayload"].(string); !ok || textPayload != "test message" {
+ t.Errorf("expected textPayload='test message', got %v", decoded["textPayload"])
+ }
+
+ // Verify PayloadLength and Payload are not in JSON
+ if _, ok := decoded["PayloadLength"]; ok {
+ t.Error("PayloadLength should not be in JSON output")
+ }
+ if _, ok := decoded["Payload"]; ok {
+ t.Error("Payload should not be in JSON output")
+ }
+}
+
+func TestProtobufMessagesCamelCaseJSON(t *testing.T) {
+ // Test that protobuf messages serialize with camelCase JSON tags
+ pos := &meshtasticpb.Position{
+ LatitudeI: proto.Int32(379208045),
+ LongitudeI: proto.Int32(-1223928905),
+ Altitude: proto.Int32(120),
+ Time: 1234567890,
+ }
+
+ jsonBytes, err := json.Marshal(pos)
+ if err != nil {
+ t.Fatalf("marshaling Position to JSON: %v", err)
+ }
+
+ var decoded map[string]interface{}
+ if err := json.Unmarshal(jsonBytes, &decoded); err != nil {
+ t.Fatalf("unmarshaling JSON: %v", err)
+ }
+
+ // Check camelCase field names (not snake_case)
+ if _, ok := decoded["latitudeI"]; !ok {
+ t.Error("missing camelCase 'latitudeI' field")
+ }
+ if _, ok := decoded["longitudeI"]; !ok {
+ t.Error("missing camelCase 'longitudeI' field")
+ }
+ if _, ok := decoded["altitude"]; !ok {
+ t.Error("missing 'altitude' field")
+ }
+
+ // Check that snake_case fields are NOT present
+ if _, ok := decoded["latitude_i"]; ok {
+ t.Error("found snake_case 'latitude_i' field, expected camelCase 'latitudeI'")
+ }
+ if _, ok := decoded["longitude_i"]; ok {
+ t.Error("found snake_case 'longitude_i' field, expected camelCase 'longitudeI'")
+ }
+
+ // Test User message with underscored fields
+ user := &meshtasticpb.User{
+ LongName: "Test User",
+ ShortName: "TU",
+ HwModel: meshtasticpb.HardwareModel_TBEAM,
+ }
+
+ jsonBytes, err = json.Marshal(user)
+ if err != nil {
+ t.Fatalf("marshaling User to JSON: %v", err)
+ }
+
+ decoded = make(map[string]interface{})
+ if err := json.Unmarshal(jsonBytes, &decoded); err != nil {
+ t.Fatalf("unmarshaling JSON: %v", err)
+ }
+
+ // Check camelCase field names
+ if _, ok := decoded["longName"]; !ok {
+ t.Error("missing camelCase 'longName' field")
+ }
+ if _, ok := decoded["shortName"]; !ok {
+ t.Error("missing camelCase 'shortName' field")
+ }
+ if _, ok := decoded["hwModel"]; !ok {
+ t.Error("missing camelCase 'hwModel' field")
+ }
+
+ // Check that snake_case fields are NOT present
+ if _, ok := decoded["long_name"]; ok {
+ t.Error("found snake_case 'long_name' field, expected camelCase 'longName'")
+ }
+ if _, ok := decoded["short_name"]; ok {
+ t.Error("found snake_case 'short_name' field, expected camelCase 'shortName'")
+ }
+ if _, ok := decoded["hw_model"]; ok {
+ t.Error("found snake_case 'hw_model' field, expected camelCase 'hwModel'")
+ }
+}
+
+// Test POSITION_APP portnum decoding
+func TestPacketDecodePositionApp(t *testing.T) {
+ pos := &meshtasticpb.Position{
+ LatitudeI: proto.Int32(379208045),
+ LongitudeI: proto.Int32(-1223928905),
+ Altitude: proto.Int32(120),
+ Time: 1234567890,
+ }
+
+ dataMsg := &meshtasticpb.Data{
+ Portnum: meshtasticpb.PortNum_POSITION_APP,
+ Payload: encodeProto(t, pos),
+ }
+
+ packet := decodeTestPacket(t, dataMsg)
+
+ if packet.Data == nil {
+ t.Fatal("expected Data protobuf to be decoded")
+ }
+ if packet.Data.GetPortnum() != meshtasticpb.PortNum_POSITION_APP {
+ t.Fatalf("unexpected portnum: got %v", packet.Data.GetPortnum())
+ }
+
+ decodedPos, ok := packet.DecodedPayload.(*meshtasticpb.Position)
+ if !ok {
+ t.Fatalf("expected *Position, got %T", packet.DecodedPayload)
+ }
+ if decodedPos.GetLatitudeI() != 379208045 {
+ t.Errorf("unexpected latitude: got %d", decodedPos.GetLatitudeI())
+ }
+ if decodedPos.GetLongitudeI() != -1223928905 {
+ t.Errorf("unexpected longitude: got %d", decodedPos.GetLongitudeI())
+ }
+ if decodedPos.GetAltitude() != 120 {
+ t.Errorf("unexpected altitude: got %d", decodedPos.GetAltitude())
+ }
+}
+
+// Test NODEINFO_APP portnum decoding
+func TestPacketDecodeNodeInfoApp(t *testing.T) {
+ user := &meshtasticpb.User{
+ LongName: "Mesh Node",
+ ShortName: "MN",
+ HwModel: meshtasticpb.HardwareModel_TBEAM,
+ IsLicensed: true,
+ Macaddr: []byte{0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff},
+ }
+
+ dataMsg := &meshtasticpb.Data{
+ Portnum: meshtasticpb.PortNum_NODEINFO_APP,
+ Payload: encodeProto(t, user),
+ }
+
+ packet := decodeTestPacket(t, dataMsg)
+
+ if packet.Data == nil {
+ t.Fatal("expected Data protobuf to be decoded")
+ }
+ if packet.Data.GetPortnum() != meshtasticpb.PortNum_NODEINFO_APP {
+ t.Fatalf("unexpected portnum: got %v", packet.Data.GetPortnum())
+ }
+
+ decodedUser, ok := packet.DecodedPayload.(*meshtasticpb.User)
+ if !ok {
+ t.Fatalf("expected *User, got %T", packet.DecodedPayload)
+ }
+ if decodedUser.GetLongName() != "Mesh Node" {
+ t.Errorf("unexpected long name: got %s", decodedUser.GetLongName())
+ }
+ if decodedUser.GetShortName() != "MN" {
+ t.Errorf("unexpected short name: got %s", decodedUser.GetShortName())
+ }
+ if decodedUser.GetHwModel() != meshtasticpb.HardwareModel_TBEAM {
+ t.Errorf("unexpected hardware model: got %v", decodedUser.GetHwModel())
+ }
+}
+
+// Test TELEMETRY_APP portnum decoding
+func TestPacketDecodeTelemetryApp(t *testing.T) {
+ batteryLevel := uint32(85)
+ voltage := float32(12.5)
+ channelUtil := float32(45.3)
+ airUtilTx := float32(15.2)
+
+ telemetry := &meshtasticpb.Telemetry{
+ Time: 1234567890,
+ Variant: &meshtasticpb.Telemetry_DeviceMetrics_{
+ DeviceMetrics: &meshtasticpb.DeviceMetrics{
+ BatteryLevel: &batteryLevel,
+ Voltage: &voltage,
+ ChannelUtilization: &channelUtil,
+ AirUtilTx: &airUtilTx,
+ },
+ },
+ }
+
+ dataMsg := &meshtasticpb.Data{
+ Portnum: meshtasticpb.PortNum_TELEMETRY_APP,
+ Payload: encodeProto(t, telemetry),
+ }
+
+ packet := decodeTestPacket(t, dataMsg)
+
+ if packet.Data == nil {
+ t.Fatal("expected Data protobuf to be decoded")
+ }
+ if packet.Data.GetPortnum() != meshtasticpb.PortNum_TELEMETRY_APP {
+ t.Fatalf("unexpected portnum: got %v", packet.Data.GetPortnum())
+ }
+
+ decodedTelem, ok := packet.DecodedPayload.(*meshtasticpb.Telemetry)
+ if !ok {
+ t.Fatalf("expected *Telemetry, got %T", packet.DecodedPayload)
+ }
+ if decodedTelem.GetTime() != 1234567890 {
+ t.Errorf("unexpected time: got %d", decodedTelem.GetTime())
+ }
+ deviceMetrics := decodedTelem.GetDeviceMetrics()
+ if deviceMetrics == nil {
+ t.Fatal("expected DeviceMetrics to be set")
+ }
+ if deviceMetrics.GetBatteryLevel() != 85 {
+ t.Errorf("unexpected battery level: got %d", deviceMetrics.GetBatteryLevel())
+ }
+}
+
+// Test ROUTING_APP portnum decoding
+func TestPacketDecodeRoutingApp(t *testing.T) {
+ routing := &meshtasticpb.Routing{
+ Variant: &meshtasticpb.Routing_RouteReply_{
+ RouteReply: &meshtasticpb.Routing_RouteReply{},
+ },
+ }
+
+ dataMsg := &meshtasticpb.Data{
+ Portnum: meshtasticpb.PortNum_ROUTING_APP,
+ Payload: encodeProto(t, routing),
+ }
+
+ packet := decodeTestPacket(t, dataMsg)
+
+ if packet.Data == nil {
+ t.Fatal("expected Data protobuf to be decoded")
+ }
+ if packet.Data.GetPortnum() != meshtasticpb.PortNum_ROUTING_APP {
+ t.Fatalf("unexpected portnum: got %v", packet.Data.GetPortnum())
+ }
+
+ decodedRouting, ok := packet.DecodedPayload.(*meshtasticpb.Routing)
+ if !ok {
+ t.Fatalf("expected *Routing, got %T", packet.DecodedPayload)
+ }
+ if decodedRouting.GetRouteReply() == nil {
+ t.Fatal("expected RouteReply to be set")
+ }
+}
+
+// Test ADMIN_APP portnum decoding
+func TestPacketDecodeAdminApp(t *testing.T) {
+ // AdminMessage has a sessionPasskey field
+ admin := &meshtasticpb.AdminMessage{
+ SessionPasskey: []byte{0x01, 0x02, 0x03, 0x04},
+ }
+
+ dataMsg := &meshtasticpb.Data{
+ Portnum: meshtasticpb.PortNum_ADMIN_APP,
+ Payload: encodeProto(t, admin),
+ }
+
+ packet := decodeTestPacket(t, dataMsg)
+
+ if packet.Data == nil {
+ t.Fatal("expected Data protobuf to be decoded")
+ }
+ if packet.Data.GetPortnum() != meshtasticpb.PortNum_ADMIN_APP {
+ t.Fatalf("unexpected portnum: got %v", packet.Data.GetPortnum())
+ }
+
+ decodedAdmin, ok := packet.DecodedPayload.(*meshtasticpb.AdminMessage)
+ if !ok {
+ t.Fatalf("expected *AdminMessage, got %T", packet.DecodedPayload)
+ }
+ if len(decodedAdmin.GetSessionPasskey()) != 4 {
+ t.Errorf("unexpected session passkey length: got %d", len(decodedAdmin.GetSessionPasskey()))
+ }
+}
+
+// Test WAYPOINT_APP portnum decoding
+func TestPacketDecodeWaypointApp(t *testing.T) {
+ latI := int32(379208045)
+ lonI := int32(-1223928905)
+
+ waypoint := &meshtasticpb.Waypoint{
+ Id: 1001,
+ Name: "Home Sweet Home",
+ Description: "My house",
+ LatitudeI: &latI,
+ LongitudeI: &lonI,
+ Expire: 1234567890,
+ }
+
+ dataMsg := &meshtasticpb.Data{
+ Portnum: meshtasticpb.PortNum_WAYPOINT_APP,
+ Payload: encodeProto(t, waypoint),
+ }
+
+ packet := decodeTestPacket(t, dataMsg)
+
+ if packet.Data == nil {
+ t.Fatal("expected Data protobuf to be decoded")
+ }
+ if packet.Data.GetPortnum() != meshtasticpb.PortNum_WAYPOINT_APP {
+ t.Fatalf("unexpected portnum: got %v", packet.Data.GetPortnum())
+ }
+
+ decodedWaypoint, ok := packet.DecodedPayload.(*meshtasticpb.Waypoint)
+ if !ok {
+ t.Fatalf("expected *Waypoint, got %T", packet.DecodedPayload)
+ }
+ if decodedWaypoint.GetName() != "Home Sweet Home" {
+ t.Errorf("unexpected waypoint name: got %s", decodedWaypoint.GetName())
+ }
+ if decodedWaypoint.GetId() != 1001 {
+ t.Errorf("unexpected waypoint id: got %d", decodedWaypoint.GetId())
+ }
+}
+
+// Test NEIGHBORINFO_APP portnum decoding
+func TestPacketDecodeNeighborInfoApp(t *testing.T) {
+ neighborInfo := &meshtasticpb.NeighborInfo{
+ NodeId: 12345,
+ NodeBroadcastIntervalSecs: 60,
+ }
+
+ dataMsg := &meshtasticpb.Data{
+ Portnum: meshtasticpb.PortNum_NEIGHBORINFO_APP,
+ Payload: encodeProto(t, neighborInfo),
+ }
+
+ packet := decodeTestPacket(t, dataMsg)
+
+ if packet.Data == nil {
+ t.Fatal("expected Data protobuf to be decoded")
+ }
+ if packet.Data.GetPortnum() != meshtasticpb.PortNum_NEIGHBORINFO_APP {
+ t.Fatalf("unexpected portnum: got %v", packet.Data.GetPortnum())
+ }
+
+ decodedNeighbor, ok := packet.DecodedPayload.(*meshtasticpb.NeighborInfo)
+ if !ok {
+ t.Fatalf("expected *NeighborInfo, got %T", packet.DecodedPayload)
+ }
+ if decodedNeighbor.GetNodeId() != 12345 {
+ t.Errorf("unexpected node id: got %d", decodedNeighbor.GetNodeId())
+ }
+}
+
+// Test NODE_STATUS_APP portnum decoding
+func TestPacketDecodeNodeStatusApp(t *testing.T) {
+ statusMsg := &meshtasticpb.StatusMessage{
+ Status: "Device online",
+ }
+
+ dataMsg := &meshtasticpb.Data{
+ Portnum: meshtasticpb.PortNum_NODE_STATUS_APP,
+ Payload: encodeProto(t, statusMsg),
+ }
+
+ packet := decodeTestPacket(t, dataMsg)
+
+ if packet.Data == nil {
+ t.Fatal("expected Data protobuf to be decoded")
+ }
+ if packet.Data.GetPortnum() != meshtasticpb.PortNum_NODE_STATUS_APP {
+ t.Fatalf("unexpected portnum: got %v", packet.Data.GetPortnum())
+ }
+
+ decodedStatus, ok := packet.DecodedPayload.(*meshtasticpb.StatusMessage)
+ if !ok {
+ t.Fatalf("expected *StatusMessage, got %T", packet.DecodedPayload)
+ }
+ if decodedStatus.GetStatus() != "Device online" {
+ t.Errorf("unexpected status: got %s", decodedStatus.GetStatus())
+ }
+}
+
+// Test REMOTE_HARDWARE_APP portnum decoding
+func TestPacketDecodeRemoteHardwareApp(t *testing.T) {
+ hwMsg := &meshtasticpb.HardwareMessage{
+ Type: meshtasticpb.HardwareMessage_READ_GPIOS,
+ GpioMask: 0xFF,
+ }
+
+ dataMsg := &meshtasticpb.Data{
+ Portnum: meshtasticpb.PortNum_REMOTE_HARDWARE_APP,
+ Payload: encodeProto(t, hwMsg),
+ }
+
+ packet := decodeTestPacket(t, dataMsg)
+
+ if packet.Data == nil {
+ t.Fatal("expected Data protobuf to be decoded")
+ }
+ if packet.Data.GetPortnum() != meshtasticpb.PortNum_REMOTE_HARDWARE_APP {
+ t.Fatalf("unexpected portnum: got %v", packet.Data.GetPortnum())
+ }
+
+ decodedHw, ok := packet.DecodedPayload.(*meshtasticpb.HardwareMessage)
+ if !ok {
+ t.Fatalf("expected *HardwareMessage, got %T", packet.DecodedPayload)
+ }
+ if decodedHw.GetType() != meshtasticpb.HardwareMessage_READ_GPIOS {
+ t.Errorf("unexpected hardware message type: got %v", decodedHw.GetType())
+ }
+}
+
+// Test text payload portnums
+func TestPacketDecodeTextPayloads(t *testing.T) {
+ textPortNums := map[meshtasticpb.PortNum]string{
+ meshtasticpb.PortNum_TEXT_MESSAGE_APP: "text message app",
+ meshtasticpb.PortNum_ALERT_APP: "alert message",
+ meshtasticpb.PortNum_DETECTION_SENSOR_APP: "detection sensor",
+ meshtasticpb.PortNum_REPLY_APP: "reply message",
+ meshtasticpb.PortNum_RANGE_TEST_APP: "range test message",
+ }
+
+ for portNum, expectedText := range textPortNums {
+ t.Run(portNum.String(), func(t *testing.T) {
+ dataMsg := &meshtasticpb.Data{
+ Portnum: portNum,
+ Payload: []byte(expectedText),
+ }
+
+ packet := decodeTestPacket(t, dataMsg)
+
+ if packet.Data == nil {
+ t.Fatal("expected Data protobuf to be decoded")
+ }
+ if packet.Data.GetPortnum() != portNum {
+ t.Fatalf("unexpected portnum: got %v", packet.Data.GetPortnum())
+ }
+ if packet.TextPayload != expectedText {
+ t.Errorf("unexpected text payload: got %q, want %q", packet.TextPayload, expectedText)
+ }
+ if packet.DecodedPayload != nil {
+ t.Errorf("expected no decoded payload for text portnum, got %T", packet.DecodedPayload)
+ }
+ })
+ }
+}
+
+// Helper function to encode a proto.Message
+func encodeProto(t *testing.T, msg proto.Message) []byte {
+ encoded, err := proto.Marshal(msg)
+ if err != nil {
+ t.Fatalf("marshaling protobuf: %v", err)
+ }
+ return encoded
+}
+
+// Helper function to create and decode a test packet
+func decodeTestPacket(t *testing.T, dataMsg *meshtasticpb.Data) *Packet {
+ encodedData := encodeProto(t, dataMsg)
+
+ rawPacket := make([]byte, 16+len(encodedData))
+ binary.LittleEndian.PutUint32(rawPacket[0:], 0x12345678) // source
+ binary.LittleEndian.PutUint32(rawPacket[4:], 0xabcdef01) // destination
+ binary.LittleEndian.PutUint32(rawPacket[8:], 0x99887766) // id
+ rawPacket[12] = 0x11 // flags
+ rawPacket[13] = 0x22 // channelHash
+ rawPacket[14] = 0x33 // nextHop
+ rawPacket[15] = 0x44 // relayNode
+ copy(rawPacket[16:], encodedData)
+
+ var packet Packet
+ if err := packet.Decode(rawPacket); err != nil {
+ t.Fatalf("decoding packet: %v", err)
+ }
+ return &packet
+}
diff --git a/protocol/meshtastic/pb/admin.pb.go b/protocol/meshtastic/pb/admin.pb.go
new file mode 100644
index 0000000..ef489b8
--- /dev/null
+++ b/protocol/meshtastic/pb/admin.pb.go
@@ -0,0 +1,2480 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc v6.33.4
+// source: meshtastic/admin.proto
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// Firmware update mode for OTA updates
+type OTAMode int32
+
+const (
+ // Do not reboot into OTA mode
+ OTAMode_NO_REBOOT_OTA OTAMode = 0
+ // Reboot into OTA mode for BLE firmware update
+ OTAMode_OTA_BLE OTAMode = 1
+ // Reboot into OTA mode for WiFi firmware update
+ OTAMode_OTA_WIFI OTAMode = 2
+)
+
+// Enum value maps for OTAMode.
+var (
+ OTAMode_name = map[int32]string{
+ 0: "NO_REBOOT_OTA",
+ 1: "OTA_BLE",
+ 2: "OTA_WIFI",
+ }
+ OTAMode_value = map[string]int32{
+ "NO_REBOOT_OTA": 0,
+ "OTA_BLE": 1,
+ "OTA_WIFI": 2,
+ }
+)
+
+func (x OTAMode) Enum() *OTAMode {
+ p := new(OTAMode)
+ *p = x
+ return p
+}
+
+func (x OTAMode) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (OTAMode) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_admin_proto_enumTypes[0].Descriptor()
+}
+
+func (OTAMode) Type() protoreflect.EnumType {
+ return &file_meshtastic_admin_proto_enumTypes[0]
+}
+
+func (x OTAMode) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use OTAMode.Descriptor instead.
+func (OTAMode) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_admin_proto_rawDescGZIP(), []int{0}
+}
+
+// TODO: REPLACE
+type AdminMessage_ConfigType int32
+
+const (
+ // TODO: REPLACE
+ AdminMessage_DEVICE_CONFIG AdminMessage_ConfigType = 0
+ // TODO: REPLACE
+ AdminMessage_POSITION_CONFIG AdminMessage_ConfigType = 1
+ // TODO: REPLACE
+ AdminMessage_POWER_CONFIG AdminMessage_ConfigType = 2
+ // TODO: REPLACE
+ AdminMessage_NETWORK_CONFIG AdminMessage_ConfigType = 3
+ // TODO: REPLACE
+ AdminMessage_DISPLAY_CONFIG AdminMessage_ConfigType = 4
+ // TODO: REPLACE
+ AdminMessage_LORA_CONFIG AdminMessage_ConfigType = 5
+ // TODO: REPLACE
+ AdminMessage_BLUETOOTH_CONFIG AdminMessage_ConfigType = 6
+ // TODO: REPLACE
+ AdminMessage_SECURITY_CONFIG AdminMessage_ConfigType = 7
+ // Session key config
+ AdminMessage_SESSIONKEY_CONFIG AdminMessage_ConfigType = 8
+ // device-ui config
+ AdminMessage_DEVICEUI_CONFIG AdminMessage_ConfigType = 9
+)
+
+// Enum value maps for AdminMessage_ConfigType.
+var (
+ AdminMessage_ConfigType_name = map[int32]string{
+ 0: "DEVICE_CONFIG",
+ 1: "POSITION_CONFIG",
+ 2: "POWER_CONFIG",
+ 3: "NETWORK_CONFIG",
+ 4: "DISPLAY_CONFIG",
+ 5: "LORA_CONFIG",
+ 6: "BLUETOOTH_CONFIG",
+ 7: "SECURITY_CONFIG",
+ 8: "SESSIONKEY_CONFIG",
+ 9: "DEVICEUI_CONFIG",
+ }
+ AdminMessage_ConfigType_value = map[string]int32{
+ "DEVICE_CONFIG": 0,
+ "POSITION_CONFIG": 1,
+ "POWER_CONFIG": 2,
+ "NETWORK_CONFIG": 3,
+ "DISPLAY_CONFIG": 4,
+ "LORA_CONFIG": 5,
+ "BLUETOOTH_CONFIG": 6,
+ "SECURITY_CONFIG": 7,
+ "SESSIONKEY_CONFIG": 8,
+ "DEVICEUI_CONFIG": 9,
+ }
+)
+
+func (x AdminMessage_ConfigType) Enum() *AdminMessage_ConfigType {
+ p := new(AdminMessage_ConfigType)
+ *p = x
+ return p
+}
+
+func (x AdminMessage_ConfigType) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (AdminMessage_ConfigType) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_admin_proto_enumTypes[1].Descriptor()
+}
+
+func (AdminMessage_ConfigType) Type() protoreflect.EnumType {
+ return &file_meshtastic_admin_proto_enumTypes[1]
+}
+
+func (x AdminMessage_ConfigType) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use AdminMessage_ConfigType.Descriptor instead.
+func (AdminMessage_ConfigType) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_admin_proto_rawDescGZIP(), []int{0, 0}
+}
+
+// TODO: REPLACE
+type AdminMessage_ModuleConfigType int32
+
+const (
+ // TODO: REPLACE
+ AdminMessage_MQTT_CONFIG AdminMessage_ModuleConfigType = 0
+ // TODO: REPLACE
+ AdminMessage_SERIAL_CONFIG AdminMessage_ModuleConfigType = 1
+ // TODO: REPLACE
+ AdminMessage_EXTNOTIF_CONFIG AdminMessage_ModuleConfigType = 2
+ // TODO: REPLACE
+ AdminMessage_STOREFORWARD_CONFIG AdminMessage_ModuleConfigType = 3
+ // TODO: REPLACE
+ AdminMessage_RANGETEST_CONFIG AdminMessage_ModuleConfigType = 4
+ // TODO: REPLACE
+ AdminMessage_TELEMETRY_CONFIG AdminMessage_ModuleConfigType = 5
+ // TODO: REPLACE
+ AdminMessage_CANNEDMSG_CONFIG AdminMessage_ModuleConfigType = 6
+ // TODO: REPLACE
+ AdminMessage_AUDIO_CONFIG AdminMessage_ModuleConfigType = 7
+ // TODO: REPLACE
+ AdminMessage_REMOTEHARDWARE_CONFIG AdminMessage_ModuleConfigType = 8
+ // TODO: REPLACE
+ AdminMessage_NEIGHBORINFO_CONFIG AdminMessage_ModuleConfigType = 9
+ // TODO: REPLACE
+ AdminMessage_AMBIENTLIGHTING_CONFIG AdminMessage_ModuleConfigType = 10
+ // TODO: REPLACE
+ AdminMessage_DETECTIONSENSOR_CONFIG AdminMessage_ModuleConfigType = 11
+ // TODO: REPLACE
+ AdminMessage_PAXCOUNTER_CONFIG AdminMessage_ModuleConfigType = 12
+ // TODO: REPLACE
+ AdminMessage_STATUSMESSAGE_CONFIG AdminMessage_ModuleConfigType = 13
+ // Traffic management module config
+ AdminMessage_TRAFFICMANAGEMENT_CONFIG AdminMessage_ModuleConfigType = 14
+ // TAK module config
+ AdminMessage_TAK_CONFIG AdminMessage_ModuleConfigType = 15
+)
+
+// Enum value maps for AdminMessage_ModuleConfigType.
+var (
+ AdminMessage_ModuleConfigType_name = map[int32]string{
+ 0: "MQTT_CONFIG",
+ 1: "SERIAL_CONFIG",
+ 2: "EXTNOTIF_CONFIG",
+ 3: "STOREFORWARD_CONFIG",
+ 4: "RANGETEST_CONFIG",
+ 5: "TELEMETRY_CONFIG",
+ 6: "CANNEDMSG_CONFIG",
+ 7: "AUDIO_CONFIG",
+ 8: "REMOTEHARDWARE_CONFIG",
+ 9: "NEIGHBORINFO_CONFIG",
+ 10: "AMBIENTLIGHTING_CONFIG",
+ 11: "DETECTIONSENSOR_CONFIG",
+ 12: "PAXCOUNTER_CONFIG",
+ 13: "STATUSMESSAGE_CONFIG",
+ 14: "TRAFFICMANAGEMENT_CONFIG",
+ 15: "TAK_CONFIG",
+ }
+ AdminMessage_ModuleConfigType_value = map[string]int32{
+ "MQTT_CONFIG": 0,
+ "SERIAL_CONFIG": 1,
+ "EXTNOTIF_CONFIG": 2,
+ "STOREFORWARD_CONFIG": 3,
+ "RANGETEST_CONFIG": 4,
+ "TELEMETRY_CONFIG": 5,
+ "CANNEDMSG_CONFIG": 6,
+ "AUDIO_CONFIG": 7,
+ "REMOTEHARDWARE_CONFIG": 8,
+ "NEIGHBORINFO_CONFIG": 9,
+ "AMBIENTLIGHTING_CONFIG": 10,
+ "DETECTIONSENSOR_CONFIG": 11,
+ "PAXCOUNTER_CONFIG": 12,
+ "STATUSMESSAGE_CONFIG": 13,
+ "TRAFFICMANAGEMENT_CONFIG": 14,
+ "TAK_CONFIG": 15,
+ }
+)
+
+func (x AdminMessage_ModuleConfigType) Enum() *AdminMessage_ModuleConfigType {
+ p := new(AdminMessage_ModuleConfigType)
+ *p = x
+ return p
+}
+
+func (x AdminMessage_ModuleConfigType) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (AdminMessage_ModuleConfigType) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_admin_proto_enumTypes[2].Descriptor()
+}
+
+func (AdminMessage_ModuleConfigType) Type() protoreflect.EnumType {
+ return &file_meshtastic_admin_proto_enumTypes[2]
+}
+
+func (x AdminMessage_ModuleConfigType) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use AdminMessage_ModuleConfigType.Descriptor instead.
+func (AdminMessage_ModuleConfigType) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_admin_proto_rawDescGZIP(), []int{0, 1}
+}
+
+type AdminMessage_BackupLocation int32
+
+const (
+ // Backup to the internal flash
+ AdminMessage_FLASH AdminMessage_BackupLocation = 0
+ // Backup to the SD card
+ AdminMessage_SD AdminMessage_BackupLocation = 1
+)
+
+// Enum value maps for AdminMessage_BackupLocation.
+var (
+ AdminMessage_BackupLocation_name = map[int32]string{
+ 0: "FLASH",
+ 1: "SD",
+ }
+ AdminMessage_BackupLocation_value = map[string]int32{
+ "FLASH": 0,
+ "SD": 1,
+ }
+)
+
+func (x AdminMessage_BackupLocation) Enum() *AdminMessage_BackupLocation {
+ p := new(AdminMessage_BackupLocation)
+ *p = x
+ return p
+}
+
+func (x AdminMessage_BackupLocation) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (AdminMessage_BackupLocation) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_admin_proto_enumTypes[3].Descriptor()
+}
+
+func (AdminMessage_BackupLocation) Type() protoreflect.EnumType {
+ return &file_meshtastic_admin_proto_enumTypes[3]
+}
+
+func (x AdminMessage_BackupLocation) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use AdminMessage_BackupLocation.Descriptor instead.
+func (AdminMessage_BackupLocation) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_admin_proto_rawDescGZIP(), []int{0, 2}
+}
+
+// Three stages of this request.
+type KeyVerificationAdmin_MessageType int32
+
+const (
+ // This is the first stage, where a client initiates
+ KeyVerificationAdmin_INITIATE_VERIFICATION KeyVerificationAdmin_MessageType = 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.
+ KeyVerificationAdmin_PROVIDE_SECURITY_NUMBER KeyVerificationAdmin_MessageType = 1
+ // Once the user has compared the verification message, this message notifies the node.
+ KeyVerificationAdmin_DO_VERIFY KeyVerificationAdmin_MessageType = 2
+ // This is the cancel path, can be taken at any point
+ KeyVerificationAdmin_DO_NOT_VERIFY KeyVerificationAdmin_MessageType = 3
+)
+
+// Enum value maps for KeyVerificationAdmin_MessageType.
+var (
+ KeyVerificationAdmin_MessageType_name = map[int32]string{
+ 0: "INITIATE_VERIFICATION",
+ 1: "PROVIDE_SECURITY_NUMBER",
+ 2: "DO_VERIFY",
+ 3: "DO_NOT_VERIFY",
+ }
+ KeyVerificationAdmin_MessageType_value = map[string]int32{
+ "INITIATE_VERIFICATION": 0,
+ "PROVIDE_SECURITY_NUMBER": 1,
+ "DO_VERIFY": 2,
+ "DO_NOT_VERIFY": 3,
+ }
+)
+
+func (x KeyVerificationAdmin_MessageType) Enum() *KeyVerificationAdmin_MessageType {
+ p := new(KeyVerificationAdmin_MessageType)
+ *p = x
+ return p
+}
+
+func (x KeyVerificationAdmin_MessageType) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (KeyVerificationAdmin_MessageType) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_admin_proto_enumTypes[4].Descriptor()
+}
+
+func (KeyVerificationAdmin_MessageType) Type() protoreflect.EnumType {
+ return &file_meshtastic_admin_proto_enumTypes[4]
+}
+
+func (x KeyVerificationAdmin_MessageType) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use KeyVerificationAdmin_MessageType.Descriptor instead.
+func (KeyVerificationAdmin_MessageType) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_admin_proto_rawDescGZIP(), []int{4, 0}
+}
+
+// This message is handled by the Admin module and is responsible for all settings/channel read/write operations.
+// This message is used to do settings operations to both remote AND local nodes.
+// (Prior to 1.2 these operations were done via special ToRadio operations)
+type AdminMessage struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // 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.
+ SessionPasskey []byte `protobuf:"bytes,101,opt,name=session_passkey,json=sessionPasskey,proto3" json:"sessionPasskey,omitempty"`
+ // TODO: REPLACE
+ //
+ // Types that are valid to be assigned to PayloadVariant:
+ //
+ // *AdminMessage_GetChannelRequest
+ // *AdminMessage_GetChannelResponse
+ // *AdminMessage_GetOwnerRequest
+ // *AdminMessage_GetOwnerResponse
+ // *AdminMessage_GetConfigRequest
+ // *AdminMessage_GetConfigResponse
+ // *AdminMessage_GetModuleConfigRequest
+ // *AdminMessage_GetModuleConfigResponse
+ // *AdminMessage_GetCannedMessageModuleMessagesRequest
+ // *AdminMessage_GetCannedMessageModuleMessagesResponse
+ // *AdminMessage_GetDeviceMetadataRequest
+ // *AdminMessage_GetDeviceMetadataResponse
+ // *AdminMessage_GetRingtoneRequest
+ // *AdminMessage_GetRingtoneResponse
+ // *AdminMessage_GetDeviceConnectionStatusRequest
+ // *AdminMessage_GetDeviceConnectionStatusResponse
+ // *AdminMessage_SetHamMode
+ // *AdminMessage_GetNodeRemoteHardwarePinsRequest
+ // *AdminMessage_GetNodeRemoteHardwarePinsResponse
+ // *AdminMessage_EnterDfuModeRequest
+ // *AdminMessage_DeleteFileRequest
+ // *AdminMessage_SetScale
+ // *AdminMessage_BackupPreferences
+ // *AdminMessage_RestorePreferences
+ // *AdminMessage_RemoveBackupPreferences
+ // *AdminMessage_SendInputEvent
+ // *AdminMessage_SetOwner
+ // *AdminMessage_SetChannel
+ // *AdminMessage_SetConfig
+ // *AdminMessage_SetModuleConfig
+ // *AdminMessage_SetCannedMessageModuleMessages
+ // *AdminMessage_SetRingtoneMessage
+ // *AdminMessage_RemoveByNodenum
+ // *AdminMessage_SetFavoriteNode
+ // *AdminMessage_RemoveFavoriteNode
+ // *AdminMessage_SetFixedPosition
+ // *AdminMessage_RemoveFixedPosition
+ // *AdminMessage_SetTimeOnly
+ // *AdminMessage_GetUiConfigRequest
+ // *AdminMessage_GetUiConfigResponse
+ // *AdminMessage_StoreUiConfig
+ // *AdminMessage_SetIgnoredNode
+ // *AdminMessage_RemoveIgnoredNode
+ // *AdminMessage_ToggleMutedNode
+ // *AdminMessage_BeginEditSettings
+ // *AdminMessage_CommitEditSettings
+ // *AdminMessage_AddContact
+ // *AdminMessage_KeyVerification
+ // *AdminMessage_FactoryResetDevice
+ // *AdminMessage_RebootOtaSeconds
+ // *AdminMessage_ExitSimulator
+ // *AdminMessage_RebootSeconds
+ // *AdminMessage_ShutdownSeconds
+ // *AdminMessage_FactoryResetConfig
+ // *AdminMessage_NodedbReset
+ // *AdminMessage_OtaRequest
+ // *AdminMessage_SensorConfig
+ PayloadVariant isAdminMessage_PayloadVariant `protobuf_oneof:"payload_variant"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *AdminMessage) Reset() {
+ *x = AdminMessage{}
+ mi := &file_meshtastic_admin_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *AdminMessage) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AdminMessage) ProtoMessage() {}
+
+func (x *AdminMessage) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_admin_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use AdminMessage.ProtoReflect.Descriptor instead.
+func (*AdminMessage) Descriptor() ([]byte, []int) {
+ return file_meshtastic_admin_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *AdminMessage) GetSessionPasskey() []byte {
+ if x != nil {
+ return x.SessionPasskey
+ }
+ return nil
+}
+
+func (x *AdminMessage) GetPayloadVariant() isAdminMessage_PayloadVariant {
+ if x != nil {
+ return x.PayloadVariant
+ }
+ return nil
+}
+
+func (x *AdminMessage) GetGetChannelRequest() uint32 {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_GetChannelRequest); ok {
+ return x.GetChannelRequest
+ }
+ }
+ return 0
+}
+
+func (x *AdminMessage) GetGetChannelResponse() *Channel {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_GetChannelResponse); ok {
+ return x.GetChannelResponse
+ }
+ }
+ return nil
+}
+
+func (x *AdminMessage) GetGetOwnerRequest() bool {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_GetOwnerRequest); ok {
+ return x.GetOwnerRequest
+ }
+ }
+ return false
+}
+
+func (x *AdminMessage) GetGetOwnerResponse() *User {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_GetOwnerResponse); ok {
+ return x.GetOwnerResponse
+ }
+ }
+ return nil
+}
+
+func (x *AdminMessage) GetGetConfigRequest() AdminMessage_ConfigType {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_GetConfigRequest); ok {
+ return x.GetConfigRequest
+ }
+ }
+ return AdminMessage_DEVICE_CONFIG
+}
+
+func (x *AdminMessage) GetGetConfigResponse() *Config {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_GetConfigResponse); ok {
+ return x.GetConfigResponse
+ }
+ }
+ return nil
+}
+
+func (x *AdminMessage) GetGetModuleConfigRequest() AdminMessage_ModuleConfigType {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_GetModuleConfigRequest); ok {
+ return x.GetModuleConfigRequest
+ }
+ }
+ return AdminMessage_MQTT_CONFIG
+}
+
+func (x *AdminMessage) GetGetModuleConfigResponse() *ModuleConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_GetModuleConfigResponse); ok {
+ return x.GetModuleConfigResponse
+ }
+ }
+ return nil
+}
+
+func (x *AdminMessage) GetGetCannedMessageModuleMessagesRequest() bool {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_GetCannedMessageModuleMessagesRequest); ok {
+ return x.GetCannedMessageModuleMessagesRequest
+ }
+ }
+ return false
+}
+
+func (x *AdminMessage) GetGetCannedMessageModuleMessagesResponse() string {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_GetCannedMessageModuleMessagesResponse); ok {
+ return x.GetCannedMessageModuleMessagesResponse
+ }
+ }
+ return ""
+}
+
+func (x *AdminMessage) GetGetDeviceMetadataRequest() bool {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_GetDeviceMetadataRequest); ok {
+ return x.GetDeviceMetadataRequest
+ }
+ }
+ return false
+}
+
+func (x *AdminMessage) GetGetDeviceMetadataResponse() *DeviceMetadata {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_GetDeviceMetadataResponse); ok {
+ return x.GetDeviceMetadataResponse
+ }
+ }
+ return nil
+}
+
+func (x *AdminMessage) GetGetRingtoneRequest() bool {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_GetRingtoneRequest); ok {
+ return x.GetRingtoneRequest
+ }
+ }
+ return false
+}
+
+func (x *AdminMessage) GetGetRingtoneResponse() string {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_GetRingtoneResponse); ok {
+ return x.GetRingtoneResponse
+ }
+ }
+ return ""
+}
+
+func (x *AdminMessage) GetGetDeviceConnectionStatusRequest() bool {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_GetDeviceConnectionStatusRequest); ok {
+ return x.GetDeviceConnectionStatusRequest
+ }
+ }
+ return false
+}
+
+func (x *AdminMessage) GetGetDeviceConnectionStatusResponse() *DeviceConnectionStatus {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_GetDeviceConnectionStatusResponse); ok {
+ return x.GetDeviceConnectionStatusResponse
+ }
+ }
+ return nil
+}
+
+func (x *AdminMessage) GetSetHamMode() *HamParameters {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_SetHamMode); ok {
+ return x.SetHamMode
+ }
+ }
+ return nil
+}
+
+func (x *AdminMessage) GetGetNodeRemoteHardwarePinsRequest() bool {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_GetNodeRemoteHardwarePinsRequest); ok {
+ return x.GetNodeRemoteHardwarePinsRequest
+ }
+ }
+ return false
+}
+
+func (x *AdminMessage) GetGetNodeRemoteHardwarePinsResponse() *NodeRemoteHardwarePinsResponse {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_GetNodeRemoteHardwarePinsResponse); ok {
+ return x.GetNodeRemoteHardwarePinsResponse
+ }
+ }
+ return nil
+}
+
+func (x *AdminMessage) GetEnterDfuModeRequest() bool {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_EnterDfuModeRequest); ok {
+ return x.EnterDfuModeRequest
+ }
+ }
+ return false
+}
+
+func (x *AdminMessage) GetDeleteFileRequest() string {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_DeleteFileRequest); ok {
+ return x.DeleteFileRequest
+ }
+ }
+ return ""
+}
+
+func (x *AdminMessage) GetSetScale() uint32 {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_SetScale); ok {
+ return x.SetScale
+ }
+ }
+ return 0
+}
+
+func (x *AdminMessage) GetBackupPreferences() AdminMessage_BackupLocation {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_BackupPreferences); ok {
+ return x.BackupPreferences
+ }
+ }
+ return AdminMessage_FLASH
+}
+
+func (x *AdminMessage) GetRestorePreferences() AdminMessage_BackupLocation {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_RestorePreferences); ok {
+ return x.RestorePreferences
+ }
+ }
+ return AdminMessage_FLASH
+}
+
+func (x *AdminMessage) GetRemoveBackupPreferences() AdminMessage_BackupLocation {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_RemoveBackupPreferences); ok {
+ return x.RemoveBackupPreferences
+ }
+ }
+ return AdminMessage_FLASH
+}
+
+func (x *AdminMessage) GetSendInputEvent() *AdminMessage_InputEvent {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_SendInputEvent); ok {
+ return x.SendInputEvent
+ }
+ }
+ return nil
+}
+
+func (x *AdminMessage) GetSetOwner() *User {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_SetOwner); ok {
+ return x.SetOwner
+ }
+ }
+ return nil
+}
+
+func (x *AdminMessage) GetSetChannel() *Channel {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_SetChannel); ok {
+ return x.SetChannel
+ }
+ }
+ return nil
+}
+
+func (x *AdminMessage) GetSetConfig() *Config {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_SetConfig); ok {
+ return x.SetConfig
+ }
+ }
+ return nil
+}
+
+func (x *AdminMessage) GetSetModuleConfig() *ModuleConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_SetModuleConfig); ok {
+ return x.SetModuleConfig
+ }
+ }
+ return nil
+}
+
+func (x *AdminMessage) GetSetCannedMessageModuleMessages() string {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_SetCannedMessageModuleMessages); ok {
+ return x.SetCannedMessageModuleMessages
+ }
+ }
+ return ""
+}
+
+func (x *AdminMessage) GetSetRingtoneMessage() string {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_SetRingtoneMessage); ok {
+ return x.SetRingtoneMessage
+ }
+ }
+ return ""
+}
+
+func (x *AdminMessage) GetRemoveByNodenum() uint32 {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_RemoveByNodenum); ok {
+ return x.RemoveByNodenum
+ }
+ }
+ return 0
+}
+
+func (x *AdminMessage) GetSetFavoriteNode() uint32 {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_SetFavoriteNode); ok {
+ return x.SetFavoriteNode
+ }
+ }
+ return 0
+}
+
+func (x *AdminMessage) GetRemoveFavoriteNode() uint32 {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_RemoveFavoriteNode); ok {
+ return x.RemoveFavoriteNode
+ }
+ }
+ return 0
+}
+
+func (x *AdminMessage) GetSetFixedPosition() *Position {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_SetFixedPosition); ok {
+ return x.SetFixedPosition
+ }
+ }
+ return nil
+}
+
+func (x *AdminMessage) GetRemoveFixedPosition() bool {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_RemoveFixedPosition); ok {
+ return x.RemoveFixedPosition
+ }
+ }
+ return false
+}
+
+func (x *AdminMessage) GetSetTimeOnly() uint32 {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_SetTimeOnly); ok {
+ return x.SetTimeOnly
+ }
+ }
+ return 0
+}
+
+func (x *AdminMessage) GetGetUiConfigRequest() bool {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_GetUiConfigRequest); ok {
+ return x.GetUiConfigRequest
+ }
+ }
+ return false
+}
+
+func (x *AdminMessage) GetGetUiConfigResponse() *DeviceUIConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_GetUiConfigResponse); ok {
+ return x.GetUiConfigResponse
+ }
+ }
+ return nil
+}
+
+func (x *AdminMessage) GetStoreUiConfig() *DeviceUIConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_StoreUiConfig); ok {
+ return x.StoreUiConfig
+ }
+ }
+ return nil
+}
+
+func (x *AdminMessage) GetSetIgnoredNode() uint32 {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_SetIgnoredNode); ok {
+ return x.SetIgnoredNode
+ }
+ }
+ return 0
+}
+
+func (x *AdminMessage) GetRemoveIgnoredNode() uint32 {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_RemoveIgnoredNode); ok {
+ return x.RemoveIgnoredNode
+ }
+ }
+ return 0
+}
+
+func (x *AdminMessage) GetToggleMutedNode() uint32 {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_ToggleMutedNode); ok {
+ return x.ToggleMutedNode
+ }
+ }
+ return 0
+}
+
+func (x *AdminMessage) GetBeginEditSettings() bool {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_BeginEditSettings); ok {
+ return x.BeginEditSettings
+ }
+ }
+ return false
+}
+
+func (x *AdminMessage) GetCommitEditSettings() bool {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_CommitEditSettings); ok {
+ return x.CommitEditSettings
+ }
+ }
+ return false
+}
+
+func (x *AdminMessage) GetAddContact() *SharedContact {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_AddContact); ok {
+ return x.AddContact
+ }
+ }
+ return nil
+}
+
+func (x *AdminMessage) GetKeyVerification() *KeyVerificationAdmin {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_KeyVerification); ok {
+ return x.KeyVerification
+ }
+ }
+ return nil
+}
+
+func (x *AdminMessage) GetFactoryResetDevice() int32 {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_FactoryResetDevice); ok {
+ return x.FactoryResetDevice
+ }
+ }
+ return 0
+}
+
+// Deprecated: Marked as deprecated in meshtastic/admin.proto.
+func (x *AdminMessage) GetRebootOtaSeconds() int32 {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_RebootOtaSeconds); ok {
+ return x.RebootOtaSeconds
+ }
+ }
+ return 0
+}
+
+func (x *AdminMessage) GetExitSimulator() bool {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_ExitSimulator); ok {
+ return x.ExitSimulator
+ }
+ }
+ return false
+}
+
+func (x *AdminMessage) GetRebootSeconds() int32 {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_RebootSeconds); ok {
+ return x.RebootSeconds
+ }
+ }
+ return 0
+}
+
+func (x *AdminMessage) GetShutdownSeconds() int32 {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_ShutdownSeconds); ok {
+ return x.ShutdownSeconds
+ }
+ }
+ return 0
+}
+
+func (x *AdminMessage) GetFactoryResetConfig() int32 {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_FactoryResetConfig); ok {
+ return x.FactoryResetConfig
+ }
+ }
+ return 0
+}
+
+func (x *AdminMessage) GetNodedbReset() bool {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_NodedbReset); ok {
+ return x.NodedbReset
+ }
+ }
+ return false
+}
+
+func (x *AdminMessage) GetOtaRequest() *AdminMessage_OTAEvent {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_OtaRequest); ok {
+ return x.OtaRequest
+ }
+ }
+ return nil
+}
+
+func (x *AdminMessage) GetSensorConfig() *SensorConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*AdminMessage_SensorConfig); ok {
+ return x.SensorConfig
+ }
+ }
+ return nil
+}
+
+type isAdminMessage_PayloadVariant interface {
+ isAdminMessage_PayloadVariant()
+}
+
+type AdminMessage_GetChannelRequest struct {
+ // Send the specified channel in the response to this message
+ // NOTE: This field is sent with the channel index + 1 (to ensure we never try to send 'zero' - which protobufs treats as not present)
+ GetChannelRequest uint32 `protobuf:"varint,1,opt,name=get_channel_request,json=getChannelRequest,proto3,oneof"`
+}
+
+type AdminMessage_GetChannelResponse struct {
+ // TODO: REPLACE
+ GetChannelResponse *Channel `protobuf:"bytes,2,opt,name=get_channel_response,json=getChannelResponse,proto3,oneof"`
+}
+
+type AdminMessage_GetOwnerRequest struct {
+ // Send the current owner data in the response to this message.
+ GetOwnerRequest bool `protobuf:"varint,3,opt,name=get_owner_request,json=getOwnerRequest,proto3,oneof"`
+}
+
+type AdminMessage_GetOwnerResponse struct {
+ // TODO: REPLACE
+ GetOwnerResponse *User `protobuf:"bytes,4,opt,name=get_owner_response,json=getOwnerResponse,proto3,oneof"`
+}
+
+type AdminMessage_GetConfigRequest struct {
+ // Ask for the following config data to be sent
+ GetConfigRequest AdminMessage_ConfigType `protobuf:"varint,5,opt,name=get_config_request,json=getConfigRequest,proto3,enum=meshtastic.AdminMessage_ConfigType,oneof"`
+}
+
+type AdminMessage_GetConfigResponse struct {
+ // Send the current Config in the response to this message.
+ GetConfigResponse *Config `protobuf:"bytes,6,opt,name=get_config_response,json=getConfigResponse,proto3,oneof"`
+}
+
+type AdminMessage_GetModuleConfigRequest struct {
+ // Ask for the following config data to be sent
+ GetModuleConfigRequest AdminMessage_ModuleConfigType `protobuf:"varint,7,opt,name=get_module_config_request,json=getModuleConfigRequest,proto3,enum=meshtastic.AdminMessage_ModuleConfigType,oneof"`
+}
+
+type AdminMessage_GetModuleConfigResponse struct {
+ // Send the current Config in the response to this message.
+ GetModuleConfigResponse *ModuleConfig `protobuf:"bytes,8,opt,name=get_module_config_response,json=getModuleConfigResponse,proto3,oneof"`
+}
+
+type AdminMessage_GetCannedMessageModuleMessagesRequest struct {
+ // Get the Canned Message Module messages in the response to this message.
+ GetCannedMessageModuleMessagesRequest bool `protobuf:"varint,10,opt,name=get_canned_message_module_messages_request,json=getCannedMessageModuleMessagesRequest,proto3,oneof"`
+}
+
+type AdminMessage_GetCannedMessageModuleMessagesResponse struct {
+ // Get the Canned Message Module messages in the response to this message.
+ GetCannedMessageModuleMessagesResponse string `protobuf:"bytes,11,opt,name=get_canned_message_module_messages_response,json=getCannedMessageModuleMessagesResponse,proto3,oneof"`
+}
+
+type AdminMessage_GetDeviceMetadataRequest struct {
+ // Request the node to send device metadata (firmware, protobuf version, etc)
+ GetDeviceMetadataRequest bool `protobuf:"varint,12,opt,name=get_device_metadata_request,json=getDeviceMetadataRequest,proto3,oneof"`
+}
+
+type AdminMessage_GetDeviceMetadataResponse struct {
+ // Device metadata response
+ GetDeviceMetadataResponse *DeviceMetadata `protobuf:"bytes,13,opt,name=get_device_metadata_response,json=getDeviceMetadataResponse,proto3,oneof"`
+}
+
+type AdminMessage_GetRingtoneRequest struct {
+ // Get the Ringtone in the response to this message.
+ GetRingtoneRequest bool `protobuf:"varint,14,opt,name=get_ringtone_request,json=getRingtoneRequest,proto3,oneof"`
+}
+
+type AdminMessage_GetRingtoneResponse struct {
+ // Get the Ringtone in the response to this message.
+ GetRingtoneResponse string `protobuf:"bytes,15,opt,name=get_ringtone_response,json=getRingtoneResponse,proto3,oneof"`
+}
+
+type AdminMessage_GetDeviceConnectionStatusRequest struct {
+ // Request the node to send it's connection status
+ GetDeviceConnectionStatusRequest bool `protobuf:"varint,16,opt,name=get_device_connection_status_request,json=getDeviceConnectionStatusRequest,proto3,oneof"`
+}
+
+type AdminMessage_GetDeviceConnectionStatusResponse struct {
+ // Device connection status response
+ GetDeviceConnectionStatusResponse *DeviceConnectionStatus `protobuf:"bytes,17,opt,name=get_device_connection_status_response,json=getDeviceConnectionStatusResponse,proto3,oneof"`
+}
+
+type AdminMessage_SetHamMode struct {
+ // Setup a node for licensed amateur (ham) radio operation
+ SetHamMode *HamParameters `protobuf:"bytes,18,opt,name=set_ham_mode,json=setHamMode,proto3,oneof"`
+}
+
+type AdminMessage_GetNodeRemoteHardwarePinsRequest struct {
+ // Get the mesh's nodes with their available gpio pins for RemoteHardware module use
+ GetNodeRemoteHardwarePinsRequest bool `protobuf:"varint,19,opt,name=get_node_remote_hardware_pins_request,json=getNodeRemoteHardwarePinsRequest,proto3,oneof"`
+}
+
+type AdminMessage_GetNodeRemoteHardwarePinsResponse struct {
+ // Respond with the mesh's nodes with their available gpio pins for RemoteHardware module use
+ GetNodeRemoteHardwarePinsResponse *NodeRemoteHardwarePinsResponse `protobuf:"bytes,20,opt,name=get_node_remote_hardware_pins_response,json=getNodeRemoteHardwarePinsResponse,proto3,oneof"`
+}
+
+type AdminMessage_EnterDfuModeRequest struct {
+ // Enter (UF2) DFU mode
+ // Only implemented on NRF52 currently
+ EnterDfuModeRequest bool `protobuf:"varint,21,opt,name=enter_dfu_mode_request,json=enterDfuModeRequest,proto3,oneof"`
+}
+
+type AdminMessage_DeleteFileRequest struct {
+ // Delete the file by the specified path from the device
+ DeleteFileRequest string `protobuf:"bytes,22,opt,name=delete_file_request,json=deleteFileRequest,proto3,oneof"`
+}
+
+type AdminMessage_SetScale struct {
+ // Set zero and offset for scale chips
+ SetScale uint32 `protobuf:"varint,23,opt,name=set_scale,json=setScale,proto3,oneof"`
+}
+
+type AdminMessage_BackupPreferences struct {
+ // Backup the node's preferences
+ BackupPreferences AdminMessage_BackupLocation `protobuf:"varint,24,opt,name=backup_preferences,json=backupPreferences,proto3,enum=meshtastic.AdminMessage_BackupLocation,oneof"`
+}
+
+type AdminMessage_RestorePreferences struct {
+ // Restore the node's preferences
+ RestorePreferences AdminMessage_BackupLocation `protobuf:"varint,25,opt,name=restore_preferences,json=restorePreferences,proto3,enum=meshtastic.AdminMessage_BackupLocation,oneof"`
+}
+
+type AdminMessage_RemoveBackupPreferences struct {
+ // Remove backups of the node's preferences
+ RemoveBackupPreferences AdminMessage_BackupLocation `protobuf:"varint,26,opt,name=remove_backup_preferences,json=removeBackupPreferences,proto3,enum=meshtastic.AdminMessage_BackupLocation,oneof"`
+}
+
+type AdminMessage_SendInputEvent struct {
+ // Send an input event to the node.
+ // This is used to trigger physical input events like button presses, touch events, etc.
+ SendInputEvent *AdminMessage_InputEvent `protobuf:"bytes,27,opt,name=send_input_event,json=sendInputEvent,proto3,oneof"`
+}
+
+type AdminMessage_SetOwner struct {
+ // Set the owner for this node
+ SetOwner *User `protobuf:"bytes,32,opt,name=set_owner,json=setOwner,proto3,oneof"`
+}
+
+type AdminMessage_SetChannel struct {
+ // Set channels (using the new API).
+ // A special channel is the "primary channel".
+ // The other records are secondary channels.
+ // Note: only one channel can be marked as primary.
+ // If the client sets a particular channel to be primary, the previous channel will be set to SECONDARY automatically.
+ SetChannel *Channel `protobuf:"bytes,33,opt,name=set_channel,json=setChannel,proto3,oneof"`
+}
+
+type AdminMessage_SetConfig struct {
+ // Set the current Config
+ SetConfig *Config `protobuf:"bytes,34,opt,name=set_config,json=setConfig,proto3,oneof"`
+}
+
+type AdminMessage_SetModuleConfig struct {
+ // Set the current Config
+ SetModuleConfig *ModuleConfig `protobuf:"bytes,35,opt,name=set_module_config,json=setModuleConfig,proto3,oneof"`
+}
+
+type AdminMessage_SetCannedMessageModuleMessages struct {
+ // Set the Canned Message Module messages text.
+ SetCannedMessageModuleMessages string `protobuf:"bytes,36,opt,name=set_canned_message_module_messages,json=setCannedMessageModuleMessages,proto3,oneof"`
+}
+
+type AdminMessage_SetRingtoneMessage struct {
+ // Set the ringtone for ExternalNotification.
+ SetRingtoneMessage string `protobuf:"bytes,37,opt,name=set_ringtone_message,json=setRingtoneMessage,proto3,oneof"`
+}
+
+type AdminMessage_RemoveByNodenum struct {
+ // Remove the node by the specified node-num from the NodeDB on the device
+ RemoveByNodenum uint32 `protobuf:"varint,38,opt,name=remove_by_nodenum,json=removeByNodenum,proto3,oneof"`
+}
+
+type AdminMessage_SetFavoriteNode struct {
+ // Set specified node-num to be favorited on the NodeDB on the device
+ SetFavoriteNode uint32 `protobuf:"varint,39,opt,name=set_favorite_node,json=setFavoriteNode,proto3,oneof"`
+}
+
+type AdminMessage_RemoveFavoriteNode struct {
+ // Set specified node-num to be un-favorited on the NodeDB on the device
+ RemoveFavoriteNode uint32 `protobuf:"varint,40,opt,name=remove_favorite_node,json=removeFavoriteNode,proto3,oneof"`
+}
+
+type AdminMessage_SetFixedPosition struct {
+ // Set fixed position data on the node and then set the position.fixed_position = true
+ SetFixedPosition *Position `protobuf:"bytes,41,opt,name=set_fixed_position,json=setFixedPosition,proto3,oneof"`
+}
+
+type AdminMessage_RemoveFixedPosition struct {
+ // Clear fixed position coordinates and then set position.fixed_position = false
+ RemoveFixedPosition bool `protobuf:"varint,42,opt,name=remove_fixed_position,json=removeFixedPosition,proto3,oneof"`
+}
+
+type AdminMessage_SetTimeOnly struct {
+ // Set time only on the node
+ // Convenience method to set the time on the node (as Net quality) without any other position data
+ SetTimeOnly uint32 `protobuf:"fixed32,43,opt,name=set_time_only,json=setTimeOnly,proto3,oneof"`
+}
+
+type AdminMessage_GetUiConfigRequest struct {
+ // Tell the node to send the stored ui data.
+ GetUiConfigRequest bool `protobuf:"varint,44,opt,name=get_ui_config_request,json=getUiConfigRequest,proto3,oneof"`
+}
+
+type AdminMessage_GetUiConfigResponse struct {
+ // Reply stored device ui data.
+ GetUiConfigResponse *DeviceUIConfig `protobuf:"bytes,45,opt,name=get_ui_config_response,json=getUiConfigResponse,proto3,oneof"`
+}
+
+type AdminMessage_StoreUiConfig struct {
+ // Tell the node to store UI data persistently.
+ StoreUiConfig *DeviceUIConfig `protobuf:"bytes,46,opt,name=store_ui_config,json=storeUiConfig,proto3,oneof"`
+}
+
+type AdminMessage_SetIgnoredNode struct {
+ // Set specified node-num to be ignored on the NodeDB on the device
+ SetIgnoredNode uint32 `protobuf:"varint,47,opt,name=set_ignored_node,json=setIgnoredNode,proto3,oneof"`
+}
+
+type AdminMessage_RemoveIgnoredNode struct {
+ // Set specified node-num to be un-ignored on the NodeDB on the device
+ RemoveIgnoredNode uint32 `protobuf:"varint,48,opt,name=remove_ignored_node,json=removeIgnoredNode,proto3,oneof"`
+}
+
+type AdminMessage_ToggleMutedNode struct {
+ // Set specified node-num to be muted
+ ToggleMutedNode uint32 `protobuf:"varint,49,opt,name=toggle_muted_node,json=toggleMutedNode,proto3,oneof"`
+}
+
+type AdminMessage_BeginEditSettings struct {
+ // 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)
+ BeginEditSettings bool `protobuf:"varint,64,opt,name=begin_edit_settings,json=beginEditSettings,proto3,oneof"`
+}
+
+type AdminMessage_CommitEditSettings struct {
+ // Commits an open transaction for any edits made to config, module config, owner, and channel settings
+ CommitEditSettings bool `protobuf:"varint,65,opt,name=commit_edit_settings,json=commitEditSettings,proto3,oneof"`
+}
+
+type AdminMessage_AddContact struct {
+ // Add a contact (User) to the nodedb
+ AddContact *SharedContact `protobuf:"bytes,66,opt,name=add_contact,json=addContact,proto3,oneof"`
+}
+
+type AdminMessage_KeyVerification struct {
+ // Initiate or respond to a key verification request
+ KeyVerification *KeyVerificationAdmin `protobuf:"bytes,67,opt,name=key_verification,json=keyVerification,proto3,oneof"`
+}
+
+type AdminMessage_FactoryResetDevice struct {
+ // 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.
+ FactoryResetDevice int32 `protobuf:"varint,94,opt,name=factory_reset_device,json=factoryResetDevice,proto3,oneof"`
+}
+
+type AdminMessage_RebootOtaSeconds struct {
+ // 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.
+ // Deprecated in favor of reboot_ota_mode in 2.7.17
+ //
+ // Deprecated: Marked as deprecated in meshtastic/admin.proto.
+ RebootOtaSeconds int32 `protobuf:"varint,95,opt,name=reboot_ota_seconds,json=rebootOtaSeconds,proto3,oneof"`
+}
+
+type AdminMessage_ExitSimulator struct {
+ // This message is only supported for the simulator Portduino build.
+ // If received the simulator will exit successfully.
+ ExitSimulator bool `protobuf:"varint,96,opt,name=exit_simulator,json=exitSimulator,proto3,oneof"`
+}
+
+type AdminMessage_RebootSeconds struct {
+ // Tell the node to reboot in this many seconds (or <0 to cancel reboot)
+ RebootSeconds int32 `protobuf:"varint,97,opt,name=reboot_seconds,json=rebootSeconds,proto3,oneof"`
+}
+
+type AdminMessage_ShutdownSeconds struct {
+ // Tell the node to shutdown in this many seconds (or <0 to cancel shutdown)
+ ShutdownSeconds int32 `protobuf:"varint,98,opt,name=shutdown_seconds,json=shutdownSeconds,proto3,oneof"`
+}
+
+type AdminMessage_FactoryResetConfig struct {
+ // Tell the node to factory reset config; all device state and configuration will be returned to factory defaults; BLE bonds will be preserved.
+ FactoryResetConfig int32 `protobuf:"varint,99,opt,name=factory_reset_config,json=factoryResetConfig,proto3,oneof"`
+}
+
+type AdminMessage_NodedbReset struct {
+ // Tell the node to reset the nodedb.
+ // When true, favorites are preserved through reset.
+ NodedbReset bool `protobuf:"varint,100,opt,name=nodedb_reset,json=nodedbReset,proto3,oneof"`
+}
+
+type AdminMessage_OtaRequest struct {
+ // Tell the node to reset into the OTA Loader
+ OtaRequest *AdminMessage_OTAEvent `protobuf:"bytes,102,opt,name=ota_request,json=otaRequest,proto3,oneof"`
+}
+
+type AdminMessage_SensorConfig struct {
+ // Parameters and sensor configuration
+ SensorConfig *SensorConfig `protobuf:"bytes,103,opt,name=sensor_config,json=sensorConfig,proto3,oneof"`
+}
+
+func (*AdminMessage_GetChannelRequest) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_GetChannelResponse) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_GetOwnerRequest) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_GetOwnerResponse) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_GetConfigRequest) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_GetConfigResponse) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_GetModuleConfigRequest) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_GetModuleConfigResponse) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_GetCannedMessageModuleMessagesRequest) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_GetCannedMessageModuleMessagesResponse) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_GetDeviceMetadataRequest) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_GetDeviceMetadataResponse) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_GetRingtoneRequest) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_GetRingtoneResponse) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_GetDeviceConnectionStatusRequest) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_GetDeviceConnectionStatusResponse) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_SetHamMode) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_GetNodeRemoteHardwarePinsRequest) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_GetNodeRemoteHardwarePinsResponse) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_EnterDfuModeRequest) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_DeleteFileRequest) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_SetScale) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_BackupPreferences) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_RestorePreferences) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_RemoveBackupPreferences) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_SendInputEvent) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_SetOwner) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_SetChannel) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_SetConfig) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_SetModuleConfig) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_SetCannedMessageModuleMessages) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_SetRingtoneMessage) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_RemoveByNodenum) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_SetFavoriteNode) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_RemoveFavoriteNode) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_SetFixedPosition) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_RemoveFixedPosition) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_SetTimeOnly) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_GetUiConfigRequest) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_GetUiConfigResponse) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_StoreUiConfig) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_SetIgnoredNode) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_RemoveIgnoredNode) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_ToggleMutedNode) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_BeginEditSettings) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_CommitEditSettings) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_AddContact) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_KeyVerification) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_FactoryResetDevice) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_RebootOtaSeconds) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_ExitSimulator) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_RebootSeconds) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_ShutdownSeconds) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_FactoryResetConfig) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_NodedbReset) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_OtaRequest) isAdminMessage_PayloadVariant() {}
+
+func (*AdminMessage_SensorConfig) isAdminMessage_PayloadVariant() {}
+
+// Parameters for setting up Meshtastic for ameteur radio usage
+type HamParameters struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Amateur radio call sign, eg. KD2ABC
+ CallSign string `protobuf:"bytes,1,opt,name=call_sign,json=callSign,proto3" json:"callSign,omitempty"`
+ // Transmit power in dBm at the LoRA transceiver, not including any amplification
+ TxPower int32 `protobuf:"varint,2,opt,name=tx_power,json=txPower,proto3" json:"txPower,omitempty"`
+ // The selected frequency of LoRA operation
+ // Please respect your local laws, regulations, and band plans.
+ // Ensure your radio is capable of operating of the selected frequency before setting this.
+ Frequency float32 `protobuf:"fixed32,3,opt,name=frequency,proto3" json:"frequency,omitempty"`
+ // Optional short name of user
+ ShortName string `protobuf:"bytes,4,opt,name=short_name,json=shortName,proto3" json:"shortName,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *HamParameters) Reset() {
+ *x = HamParameters{}
+ mi := &file_meshtastic_admin_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *HamParameters) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HamParameters) ProtoMessage() {}
+
+func (x *HamParameters) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_admin_proto_msgTypes[1]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use HamParameters.ProtoReflect.Descriptor instead.
+func (*HamParameters) Descriptor() ([]byte, []int) {
+ return file_meshtastic_admin_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *HamParameters) GetCallSign() string {
+ if x != nil {
+ return x.CallSign
+ }
+ return ""
+}
+
+func (x *HamParameters) GetTxPower() int32 {
+ if x != nil {
+ return x.TxPower
+ }
+ return 0
+}
+
+func (x *HamParameters) GetFrequency() float32 {
+ if x != nil {
+ return x.Frequency
+ }
+ return 0
+}
+
+func (x *HamParameters) GetShortName() string {
+ if x != nil {
+ return x.ShortName
+ }
+ return ""
+}
+
+// Response envelope for node_remote_hardware_pins
+type NodeRemoteHardwarePinsResponse struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Nodes and their respective remote hardware GPIO pins
+ NodeRemoteHardwarePins []*NodeRemoteHardwarePin `protobuf:"bytes,1,rep,name=node_remote_hardware_pins,json=nodeRemoteHardwarePins,proto3" json:"nodeRemoteHardwarePins,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *NodeRemoteHardwarePinsResponse) Reset() {
+ *x = NodeRemoteHardwarePinsResponse{}
+ mi := &file_meshtastic_admin_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *NodeRemoteHardwarePinsResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodeRemoteHardwarePinsResponse) ProtoMessage() {}
+
+func (x *NodeRemoteHardwarePinsResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_admin_proto_msgTypes[2]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use NodeRemoteHardwarePinsResponse.ProtoReflect.Descriptor instead.
+func (*NodeRemoteHardwarePinsResponse) Descriptor() ([]byte, []int) {
+ return file_meshtastic_admin_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *NodeRemoteHardwarePinsResponse) GetNodeRemoteHardwarePins() []*NodeRemoteHardwarePin {
+ if x != nil {
+ return x.NodeRemoteHardwarePins
+ }
+ return nil
+}
+
+type SharedContact struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The node number of the contact
+ NodeNum uint32 `protobuf:"varint,1,opt,name=node_num,json=nodeNum,proto3" json:"nodeNum,omitempty"`
+ // The User of the contact
+ User *User `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"`
+ // Add this contact to the blocked / ignored list
+ ShouldIgnore bool `protobuf:"varint,3,opt,name=should_ignore,json=shouldIgnore,proto3" json:"shouldIgnore,omitempty"`
+ // Set the IS_KEY_MANUALLY_VERIFIED bit
+ ManuallyVerified bool `protobuf:"varint,4,opt,name=manually_verified,json=manuallyVerified,proto3" json:"manuallyVerified,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *SharedContact) Reset() {
+ *x = SharedContact{}
+ mi := &file_meshtastic_admin_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *SharedContact) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SharedContact) ProtoMessage() {}
+
+func (x *SharedContact) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_admin_proto_msgTypes[3]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use SharedContact.ProtoReflect.Descriptor instead.
+func (*SharedContact) Descriptor() ([]byte, []int) {
+ return file_meshtastic_admin_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *SharedContact) GetNodeNum() uint32 {
+ if x != nil {
+ return x.NodeNum
+ }
+ return 0
+}
+
+func (x *SharedContact) GetUser() *User {
+ if x != nil {
+ return x.User
+ }
+ return nil
+}
+
+func (x *SharedContact) GetShouldIgnore() bool {
+ if x != nil {
+ return x.ShouldIgnore
+ }
+ return false
+}
+
+func (x *SharedContact) GetManuallyVerified() bool {
+ if x != nil {
+ return x.ManuallyVerified
+ }
+ return false
+}
+
+// This message is used by a client to initiate or complete a key verification
+type KeyVerificationAdmin struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ MessageType KeyVerificationAdmin_MessageType `protobuf:"varint,1,opt,name=message_type,json=messageType,proto3,enum=meshtastic.KeyVerificationAdmin_MessageType" json:"messageType,omitempty"`
+ // The nodenum we're requesting
+ RemoteNodenum uint32 `protobuf:"varint,2,opt,name=remote_nodenum,json=remoteNodenum,proto3" json:"remoteNodenum,omitempty"`
+ // The nonce is used to track the connection
+ Nonce uint64 `protobuf:"varint,3,opt,name=nonce,proto3" json:"nonce,omitempty"`
+ // The 4 digit code generated by the remote node, and communicated outside the mesh
+ SecurityNumber *uint32 `protobuf:"varint,4,opt,name=security_number,json=securityNumber,proto3,oneof" json:"securityNumber,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *KeyVerificationAdmin) Reset() {
+ *x = KeyVerificationAdmin{}
+ mi := &file_meshtastic_admin_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *KeyVerificationAdmin) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*KeyVerificationAdmin) ProtoMessage() {}
+
+func (x *KeyVerificationAdmin) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_admin_proto_msgTypes[4]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use KeyVerificationAdmin.ProtoReflect.Descriptor instead.
+func (*KeyVerificationAdmin) Descriptor() ([]byte, []int) {
+ return file_meshtastic_admin_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *KeyVerificationAdmin) GetMessageType() KeyVerificationAdmin_MessageType {
+ if x != nil {
+ return x.MessageType
+ }
+ return KeyVerificationAdmin_INITIATE_VERIFICATION
+}
+
+func (x *KeyVerificationAdmin) GetRemoteNodenum() uint32 {
+ if x != nil {
+ return x.RemoteNodenum
+ }
+ return 0
+}
+
+func (x *KeyVerificationAdmin) GetNonce() uint64 {
+ if x != nil {
+ return x.Nonce
+ }
+ return 0
+}
+
+func (x *KeyVerificationAdmin) GetSecurityNumber() uint32 {
+ if x != nil && x.SecurityNumber != nil {
+ return *x.SecurityNumber
+ }
+ return 0
+}
+
+type SensorConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // SCD4X CO2 Sensor configuration
+ Scd4XConfig *SCD4XConfig `protobuf:"bytes,1,opt,name=scd4x_config,json=scd4xConfig,proto3" json:"scd4xConfig,omitempty"`
+ // SEN5X PM Sensor configuration
+ Sen5XConfig *SEN5XConfig `protobuf:"bytes,2,opt,name=sen5x_config,json=sen5xConfig,proto3" json:"sen5xConfig,omitempty"`
+ // SCD30 CO2 Sensor configuration
+ Scd30Config *SCD30Config `protobuf:"bytes,3,opt,name=scd30_config,json=scd30Config,proto3" json:"scd30Config,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *SensorConfig) Reset() {
+ *x = SensorConfig{}
+ mi := &file_meshtastic_admin_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *SensorConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SensorConfig) ProtoMessage() {}
+
+func (x *SensorConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_admin_proto_msgTypes[5]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use SensorConfig.ProtoReflect.Descriptor instead.
+func (*SensorConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_admin_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *SensorConfig) GetScd4XConfig() *SCD4XConfig {
+ if x != nil {
+ return x.Scd4XConfig
+ }
+ return nil
+}
+
+func (x *SensorConfig) GetSen5XConfig() *SEN5XConfig {
+ if x != nil {
+ return x.Sen5XConfig
+ }
+ return nil
+}
+
+func (x *SensorConfig) GetScd30Config() *SCD30Config {
+ if x != nil {
+ return x.Scd30Config
+ }
+ return nil
+}
+
+type SCD4XConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Set Automatic self-calibration enabled
+ SetAsc *bool `protobuf:"varint,1,opt,name=set_asc,json=setAsc,proto3,oneof" json:"setAsc,omitempty"`
+ // Recalibration target CO2 concentration in ppm (FRC or ASC)
+ SetTargetCo2Conc *uint32 `protobuf:"varint,2,opt,name=set_target_co2_conc,json=setTargetCo2Conc,proto3,oneof" json:"setTargetCo2Conc,omitempty"`
+ // Reference temperature in degC
+ SetTemperature *float32 `protobuf:"fixed32,3,opt,name=set_temperature,json=setTemperature,proto3,oneof" json:"setTemperature,omitempty"`
+ // Altitude of sensor in meters above sea level. 0 - 3000m (overrides ambient pressure)
+ SetAltitude *uint32 `protobuf:"varint,4,opt,name=set_altitude,json=setAltitude,proto3,oneof" json:"setAltitude,omitempty"`
+ // Sensor ambient pressure in Pa. 70000 - 120000 Pa (overrides altitude)
+ SetAmbientPressure *uint32 `protobuf:"varint,5,opt,name=set_ambient_pressure,json=setAmbientPressure,proto3,oneof" json:"setAmbientPressure,omitempty"`
+ // Perform a factory reset of the sensor
+ FactoryReset *bool `protobuf:"varint,6,opt,name=factory_reset,json=factoryReset,proto3,oneof" json:"factoryReset,omitempty"`
+ // Power mode for sensor (true for low power, false for normal)
+ SetPowerMode *bool `protobuf:"varint,7,opt,name=set_power_mode,json=setPowerMode,proto3,oneof" json:"setPowerMode,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *SCD4XConfig) Reset() {
+ *x = SCD4XConfig{}
+ mi := &file_meshtastic_admin_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *SCD4XConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SCD4XConfig) ProtoMessage() {}
+
+func (x *SCD4XConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_admin_proto_msgTypes[6]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use SCD4XConfig.ProtoReflect.Descriptor instead.
+func (*SCD4XConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_admin_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *SCD4XConfig) GetSetAsc() bool {
+ if x != nil && x.SetAsc != nil {
+ return *x.SetAsc
+ }
+ return false
+}
+
+func (x *SCD4XConfig) GetSetTargetCo2Conc() uint32 {
+ if x != nil && x.SetTargetCo2Conc != nil {
+ return *x.SetTargetCo2Conc
+ }
+ return 0
+}
+
+func (x *SCD4XConfig) GetSetTemperature() float32 {
+ if x != nil && x.SetTemperature != nil {
+ return *x.SetTemperature
+ }
+ return 0
+}
+
+func (x *SCD4XConfig) GetSetAltitude() uint32 {
+ if x != nil && x.SetAltitude != nil {
+ return *x.SetAltitude
+ }
+ return 0
+}
+
+func (x *SCD4XConfig) GetSetAmbientPressure() uint32 {
+ if x != nil && x.SetAmbientPressure != nil {
+ return *x.SetAmbientPressure
+ }
+ return 0
+}
+
+func (x *SCD4XConfig) GetFactoryReset() bool {
+ if x != nil && x.FactoryReset != nil {
+ return *x.FactoryReset
+ }
+ return false
+}
+
+func (x *SCD4XConfig) GetSetPowerMode() bool {
+ if x != nil && x.SetPowerMode != nil {
+ return *x.SetPowerMode
+ }
+ return false
+}
+
+type SEN5XConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Reference temperature in degC
+ SetTemperature *float32 `protobuf:"fixed32,1,opt,name=set_temperature,json=setTemperature,proto3,oneof" json:"setTemperature,omitempty"`
+ // One-shot mode (true for low power - one-shot mode, false for normal - continuous mode)
+ SetOneShotMode *bool `protobuf:"varint,2,opt,name=set_one_shot_mode,json=setOneShotMode,proto3,oneof" json:"setOneShotMode,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *SEN5XConfig) Reset() {
+ *x = SEN5XConfig{}
+ mi := &file_meshtastic_admin_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *SEN5XConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SEN5XConfig) ProtoMessage() {}
+
+func (x *SEN5XConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_admin_proto_msgTypes[7]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use SEN5XConfig.ProtoReflect.Descriptor instead.
+func (*SEN5XConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_admin_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *SEN5XConfig) GetSetTemperature() float32 {
+ if x != nil && x.SetTemperature != nil {
+ return *x.SetTemperature
+ }
+ return 0
+}
+
+func (x *SEN5XConfig) GetSetOneShotMode() bool {
+ if x != nil && x.SetOneShotMode != nil {
+ return *x.SetOneShotMode
+ }
+ return false
+}
+
+type SCD30Config struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Set Automatic self-calibration enabled
+ SetAsc *bool `protobuf:"varint,1,opt,name=set_asc,json=setAsc,proto3,oneof" json:"setAsc,omitempty"`
+ // Recalibration target CO2 concentration in ppm (FRC or ASC)
+ SetTargetCo2Conc *uint32 `protobuf:"varint,2,opt,name=set_target_co2_conc,json=setTargetCo2Conc,proto3,oneof" json:"setTargetCo2Conc,omitempty"`
+ // Reference temperature in degC
+ SetTemperature *float32 `protobuf:"fixed32,3,opt,name=set_temperature,json=setTemperature,proto3,oneof" json:"setTemperature,omitempty"`
+ // Altitude of sensor in meters above sea level. 0 - 3000m (overrides ambient pressure)
+ SetAltitude *uint32 `protobuf:"varint,4,opt,name=set_altitude,json=setAltitude,proto3,oneof" json:"setAltitude,omitempty"`
+ // Power mode for sensor (true for low power, false for normal)
+ SetMeasurementInterval *uint32 `protobuf:"varint,5,opt,name=set_measurement_interval,json=setMeasurementInterval,proto3,oneof" json:"setMeasurementInterval,omitempty"`
+ // Perform a factory reset of the sensor
+ SoftReset *bool `protobuf:"varint,6,opt,name=soft_reset,json=softReset,proto3,oneof" json:"softReset,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *SCD30Config) Reset() {
+ *x = SCD30Config{}
+ mi := &file_meshtastic_admin_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *SCD30Config) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SCD30Config) ProtoMessage() {}
+
+func (x *SCD30Config) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_admin_proto_msgTypes[8]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use SCD30Config.ProtoReflect.Descriptor instead.
+func (*SCD30Config) Descriptor() ([]byte, []int) {
+ return file_meshtastic_admin_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *SCD30Config) GetSetAsc() bool {
+ if x != nil && x.SetAsc != nil {
+ return *x.SetAsc
+ }
+ return false
+}
+
+func (x *SCD30Config) GetSetTargetCo2Conc() uint32 {
+ if x != nil && x.SetTargetCo2Conc != nil {
+ return *x.SetTargetCo2Conc
+ }
+ return 0
+}
+
+func (x *SCD30Config) GetSetTemperature() float32 {
+ if x != nil && x.SetTemperature != nil {
+ return *x.SetTemperature
+ }
+ return 0
+}
+
+func (x *SCD30Config) GetSetAltitude() uint32 {
+ if x != nil && x.SetAltitude != nil {
+ return *x.SetAltitude
+ }
+ return 0
+}
+
+func (x *SCD30Config) GetSetMeasurementInterval() uint32 {
+ if x != nil && x.SetMeasurementInterval != nil {
+ return *x.SetMeasurementInterval
+ }
+ return 0
+}
+
+func (x *SCD30Config) GetSoftReset() bool {
+ if x != nil && x.SoftReset != nil {
+ return *x.SoftReset
+ }
+ return false
+}
+
+// Input event message to be sent to the node.
+type AdminMessage_InputEvent struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The input event code
+ EventCode uint32 `protobuf:"varint,1,opt,name=event_code,json=eventCode,proto3" json:"eventCode,omitempty"`
+ // Keyboard character code
+ KbChar uint32 `protobuf:"varint,2,opt,name=kb_char,json=kbChar,proto3" json:"kbChar,omitempty"`
+ // The touch X coordinate
+ TouchX uint32 `protobuf:"varint,3,opt,name=touch_x,json=touchX,proto3" json:"touchX,omitempty"`
+ // The touch Y coordinate
+ TouchY uint32 `protobuf:"varint,4,opt,name=touch_y,json=touchY,proto3" json:"touchY,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *AdminMessage_InputEvent) Reset() {
+ *x = AdminMessage_InputEvent{}
+ mi := &file_meshtastic_admin_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *AdminMessage_InputEvent) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AdminMessage_InputEvent) ProtoMessage() {}
+
+func (x *AdminMessage_InputEvent) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_admin_proto_msgTypes[9]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use AdminMessage_InputEvent.ProtoReflect.Descriptor instead.
+func (*AdminMessage_InputEvent) Descriptor() ([]byte, []int) {
+ return file_meshtastic_admin_proto_rawDescGZIP(), []int{0, 0}
+}
+
+func (x *AdminMessage_InputEvent) GetEventCode() uint32 {
+ if x != nil {
+ return x.EventCode
+ }
+ return 0
+}
+
+func (x *AdminMessage_InputEvent) GetKbChar() uint32 {
+ if x != nil {
+ return x.KbChar
+ }
+ return 0
+}
+
+func (x *AdminMessage_InputEvent) GetTouchX() uint32 {
+ if x != nil {
+ return x.TouchX
+ }
+ return 0
+}
+
+func (x *AdminMessage_InputEvent) GetTouchY() uint32 {
+ if x != nil {
+ return x.TouchY
+ }
+ return 0
+}
+
+// User is requesting an over the air update.
+// Node will reboot into the OTA loader
+type AdminMessage_OTAEvent struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Tell the node to reboot into OTA mode for firmware update via BLE or WiFi (ESP32 only for now)
+ RebootOtaMode OTAMode `protobuf:"varint,1,opt,name=reboot_ota_mode,json=rebootOtaMode,proto3,enum=meshtastic.OTAMode" json:"rebootOtaMode,omitempty"`
+ // A 32 byte hash of the OTA firmware.
+ // Used to verify the integrity of the firmware before applying an update.
+ OtaHash []byte `protobuf:"bytes,2,opt,name=ota_hash,json=otaHash,proto3" json:"otaHash,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *AdminMessage_OTAEvent) Reset() {
+ *x = AdminMessage_OTAEvent{}
+ mi := &file_meshtastic_admin_proto_msgTypes[10]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *AdminMessage_OTAEvent) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AdminMessage_OTAEvent) ProtoMessage() {}
+
+func (x *AdminMessage_OTAEvent) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_admin_proto_msgTypes[10]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use AdminMessage_OTAEvent.ProtoReflect.Descriptor instead.
+func (*AdminMessage_OTAEvent) Descriptor() ([]byte, []int) {
+ return file_meshtastic_admin_proto_rawDescGZIP(), []int{0, 1}
+}
+
+func (x *AdminMessage_OTAEvent) GetRebootOtaMode() OTAMode {
+ if x != nil {
+ return x.RebootOtaMode
+ }
+ return OTAMode_NO_REBOOT_OTA
+}
+
+func (x *AdminMessage_OTAEvent) GetOtaHash() []byte {
+ if x != nil {
+ return x.OtaHash
+ }
+ return nil
+}
+
+var File_meshtastic_admin_proto protoreflect.FileDescriptor
+
+const file_meshtastic_admin_proto_rawDesc = "" +
+ "\n" +
+ "\x16meshtastic/admin.proto\x12\n" +
+ "meshtastic\x1a\x18meshtastic/channel.proto\x1a\x17meshtastic/config.proto\x1a\"meshtastic/connection_status.proto\x1a\x1ameshtastic/device_ui.proto\x1a\x15meshtastic/mesh.proto\x1a\x1emeshtastic/module_config.proto\"\xb8$\n" +
+ "\fAdminMessage\x12'\n" +
+ "\x0fsession_passkey\x18e \x01(\fR\x0esessionPasskey\x120\n" +
+ "\x13get_channel_request\x18\x01 \x01(\rH\x00R\x11getChannelRequest\x12G\n" +
+ "\x14get_channel_response\x18\x02 \x01(\v2\x13.meshtastic.ChannelH\x00R\x12getChannelResponse\x12,\n" +
+ "\x11get_owner_request\x18\x03 \x01(\bH\x00R\x0fgetOwnerRequest\x12@\n" +
+ "\x12get_owner_response\x18\x04 \x01(\v2\x10.meshtastic.UserH\x00R\x10getOwnerResponse\x12S\n" +
+ "\x12get_config_request\x18\x05 \x01(\x0e2#.meshtastic.AdminMessage.ConfigTypeH\x00R\x10getConfigRequest\x12D\n" +
+ "\x13get_config_response\x18\x06 \x01(\v2\x12.meshtastic.ConfigH\x00R\x11getConfigResponse\x12f\n" +
+ "\x19get_module_config_request\x18\a \x01(\x0e2).meshtastic.AdminMessage.ModuleConfigTypeH\x00R\x16getModuleConfigRequest\x12W\n" +
+ "\x1aget_module_config_response\x18\b \x01(\v2\x18.meshtastic.ModuleConfigH\x00R\x17getModuleConfigResponse\x12[\n" +
+ "*get_canned_message_module_messages_request\x18\n" +
+ " \x01(\bH\x00R%getCannedMessageModuleMessagesRequest\x12]\n" +
+ "+get_canned_message_module_messages_response\x18\v \x01(\tH\x00R&getCannedMessageModuleMessagesResponse\x12?\n" +
+ "\x1bget_device_metadata_request\x18\f \x01(\bH\x00R\x18getDeviceMetadataRequest\x12]\n" +
+ "\x1cget_device_metadata_response\x18\r \x01(\v2\x1a.meshtastic.DeviceMetadataH\x00R\x19getDeviceMetadataResponse\x122\n" +
+ "\x14get_ringtone_request\x18\x0e \x01(\bH\x00R\x12getRingtoneRequest\x124\n" +
+ "\x15get_ringtone_response\x18\x0f \x01(\tH\x00R\x13getRingtoneResponse\x12P\n" +
+ "$get_device_connection_status_request\x18\x10 \x01(\bH\x00R getDeviceConnectionStatusRequest\x12v\n" +
+ "%get_device_connection_status_response\x18\x11 \x01(\v2\".meshtastic.DeviceConnectionStatusH\x00R!getDeviceConnectionStatusResponse\x12=\n" +
+ "\fset_ham_mode\x18\x12 \x01(\v2\x19.meshtastic.HamParametersH\x00R\n" +
+ "setHamMode\x12Q\n" +
+ "%get_node_remote_hardware_pins_request\x18\x13 \x01(\bH\x00R getNodeRemoteHardwarePinsRequest\x12\x7f\n" +
+ "&get_node_remote_hardware_pins_response\x18\x14 \x01(\v2*.meshtastic.NodeRemoteHardwarePinsResponseH\x00R!getNodeRemoteHardwarePinsResponse\x125\n" +
+ "\x16enter_dfu_mode_request\x18\x15 \x01(\bH\x00R\x13enterDfuModeRequest\x120\n" +
+ "\x13delete_file_request\x18\x16 \x01(\tH\x00R\x11deleteFileRequest\x12\x1d\n" +
+ "\tset_scale\x18\x17 \x01(\rH\x00R\bsetScale\x12X\n" +
+ "\x12backup_preferences\x18\x18 \x01(\x0e2'.meshtastic.AdminMessage.BackupLocationH\x00R\x11backupPreferences\x12Z\n" +
+ "\x13restore_preferences\x18\x19 \x01(\x0e2'.meshtastic.AdminMessage.BackupLocationH\x00R\x12restorePreferences\x12e\n" +
+ "\x19remove_backup_preferences\x18\x1a \x01(\x0e2'.meshtastic.AdminMessage.BackupLocationH\x00R\x17removeBackupPreferences\x12O\n" +
+ "\x10send_input_event\x18\x1b \x01(\v2#.meshtastic.AdminMessage.InputEventH\x00R\x0esendInputEvent\x12/\n" +
+ "\tset_owner\x18 \x01(\v2\x10.meshtastic.UserH\x00R\bsetOwner\x126\n" +
+ "\vset_channel\x18! \x01(\v2\x13.meshtastic.ChannelH\x00R\n" +
+ "setChannel\x123\n" +
+ "\n" +
+ "set_config\x18\" \x01(\v2\x12.meshtastic.ConfigH\x00R\tsetConfig\x12F\n" +
+ "\x11set_module_config\x18# \x01(\v2\x18.meshtastic.ModuleConfigH\x00R\x0fsetModuleConfig\x12L\n" +
+ "\"set_canned_message_module_messages\x18$ \x01(\tH\x00R\x1esetCannedMessageModuleMessages\x122\n" +
+ "\x14set_ringtone_message\x18% \x01(\tH\x00R\x12setRingtoneMessage\x12,\n" +
+ "\x11remove_by_nodenum\x18& \x01(\rH\x00R\x0fremoveByNodenum\x12,\n" +
+ "\x11set_favorite_node\x18' \x01(\rH\x00R\x0fsetFavoriteNode\x122\n" +
+ "\x14remove_favorite_node\x18( \x01(\rH\x00R\x12removeFavoriteNode\x12D\n" +
+ "\x12set_fixed_position\x18) \x01(\v2\x14.meshtastic.PositionH\x00R\x10setFixedPosition\x124\n" +
+ "\x15remove_fixed_position\x18* \x01(\bH\x00R\x13removeFixedPosition\x12$\n" +
+ "\rset_time_only\x18+ \x01(\aH\x00R\vsetTimeOnly\x123\n" +
+ "\x15get_ui_config_request\x18, \x01(\bH\x00R\x12getUiConfigRequest\x12Q\n" +
+ "\x16get_ui_config_response\x18- \x01(\v2\x1a.meshtastic.DeviceUIConfigH\x00R\x13getUiConfigResponse\x12D\n" +
+ "\x0fstore_ui_config\x18. \x01(\v2\x1a.meshtastic.DeviceUIConfigH\x00R\rstoreUiConfig\x12*\n" +
+ "\x10set_ignored_node\x18/ \x01(\rH\x00R\x0esetIgnoredNode\x120\n" +
+ "\x13remove_ignored_node\x180 \x01(\rH\x00R\x11removeIgnoredNode\x12,\n" +
+ "\x11toggle_muted_node\x181 \x01(\rH\x00R\x0ftoggleMutedNode\x120\n" +
+ "\x13begin_edit_settings\x18@ \x01(\bH\x00R\x11beginEditSettings\x122\n" +
+ "\x14commit_edit_settings\x18A \x01(\bH\x00R\x12commitEditSettings\x12<\n" +
+ "\vadd_contact\x18B \x01(\v2\x19.meshtastic.SharedContactH\x00R\n" +
+ "addContact\x12M\n" +
+ "\x10key_verification\x18C \x01(\v2 .meshtastic.KeyVerificationAdminH\x00R\x0fkeyVerification\x122\n" +
+ "\x14factory_reset_device\x18^ \x01(\x05H\x00R\x12factoryResetDevice\x122\n" +
+ "\x12reboot_ota_seconds\x18_ \x01(\x05B\x02\x18\x01H\x00R\x10rebootOtaSeconds\x12'\n" +
+ "\x0eexit_simulator\x18` \x01(\bH\x00R\rexitSimulator\x12'\n" +
+ "\x0ereboot_seconds\x18a \x01(\x05H\x00R\rrebootSeconds\x12+\n" +
+ "\x10shutdown_seconds\x18b \x01(\x05H\x00R\x0fshutdownSeconds\x122\n" +
+ "\x14factory_reset_config\x18c \x01(\x05H\x00R\x12factoryResetConfig\x12#\n" +
+ "\fnodedb_reset\x18d \x01(\bH\x00R\vnodedbReset\x12D\n" +
+ "\vota_request\x18f \x01(\v2!.meshtastic.AdminMessage.OTAEventH\x00R\n" +
+ "otaRequest\x12?\n" +
+ "\rsensor_config\x18g \x01(\v2\x18.meshtastic.SensorConfigH\x00R\fsensorConfig\x1av\n" +
+ "\n" +
+ "InputEvent\x12\x1d\n" +
+ "\n" +
+ "event_code\x18\x01 \x01(\rR\teventCode\x12\x17\n" +
+ "\akb_char\x18\x02 \x01(\rR\x06kbChar\x12\x17\n" +
+ "\atouch_x\x18\x03 \x01(\rR\x06touchX\x12\x17\n" +
+ "\atouch_y\x18\x04 \x01(\rR\x06touchY\x1ab\n" +
+ "\bOTAEvent\x12;\n" +
+ "\x0freboot_ota_mode\x18\x01 \x01(\x0e2\x13.meshtastic.OTAModeR\rrebootOtaMode\x12\x19\n" +
+ "\bota_hash\x18\x02 \x01(\fR\aotaHash\"\xd6\x01\n" +
+ "\n" +
+ "ConfigType\x12\x11\n" +
+ "\rDEVICE_CONFIG\x10\x00\x12\x13\n" +
+ "\x0fPOSITION_CONFIG\x10\x01\x12\x10\n" +
+ "\fPOWER_CONFIG\x10\x02\x12\x12\n" +
+ "\x0eNETWORK_CONFIG\x10\x03\x12\x12\n" +
+ "\x0eDISPLAY_CONFIG\x10\x04\x12\x0f\n" +
+ "\vLORA_CONFIG\x10\x05\x12\x14\n" +
+ "\x10BLUETOOTH_CONFIG\x10\x06\x12\x13\n" +
+ "\x0fSECURITY_CONFIG\x10\a\x12\x15\n" +
+ "\x11SESSIONKEY_CONFIG\x10\b\x12\x13\n" +
+ "\x0fDEVICEUI_CONFIG\x10\t\"\x83\x03\n" +
+ "\x10ModuleConfigType\x12\x0f\n" +
+ "\vMQTT_CONFIG\x10\x00\x12\x11\n" +
+ "\rSERIAL_CONFIG\x10\x01\x12\x13\n" +
+ "\x0fEXTNOTIF_CONFIG\x10\x02\x12\x17\n" +
+ "\x13STOREFORWARD_CONFIG\x10\x03\x12\x14\n" +
+ "\x10RANGETEST_CONFIG\x10\x04\x12\x14\n" +
+ "\x10TELEMETRY_CONFIG\x10\x05\x12\x14\n" +
+ "\x10CANNEDMSG_CONFIG\x10\x06\x12\x10\n" +
+ "\fAUDIO_CONFIG\x10\a\x12\x19\n" +
+ "\x15REMOTEHARDWARE_CONFIG\x10\b\x12\x17\n" +
+ "\x13NEIGHBORINFO_CONFIG\x10\t\x12\x1a\n" +
+ "\x16AMBIENTLIGHTING_CONFIG\x10\n" +
+ "\x12\x1a\n" +
+ "\x16DETECTIONSENSOR_CONFIG\x10\v\x12\x15\n" +
+ "\x11PAXCOUNTER_CONFIG\x10\f\x12\x18\n" +
+ "\x14STATUSMESSAGE_CONFIG\x10\r\x12\x1c\n" +
+ "\x18TRAFFICMANAGEMENT_CONFIG\x10\x0e\x12\x0e\n" +
+ "\n" +
+ "TAK_CONFIG\x10\x0f\"#\n" +
+ "\x0eBackupLocation\x12\t\n" +
+ "\x05FLASH\x10\x00\x12\x06\n" +
+ "\x02SD\x10\x01B\x11\n" +
+ "\x0fpayload_variant\"\x84\x01\n" +
+ "\rHamParameters\x12\x1b\n" +
+ "\tcall_sign\x18\x01 \x01(\tR\bcallSign\x12\x19\n" +
+ "\btx_power\x18\x02 \x01(\x05R\atxPower\x12\x1c\n" +
+ "\tfrequency\x18\x03 \x01(\x02R\tfrequency\x12\x1d\n" +
+ "\n" +
+ "short_name\x18\x04 \x01(\tR\tshortName\"~\n" +
+ "\x1eNodeRemoteHardwarePinsResponse\x12\\\n" +
+ "\x19node_remote_hardware_pins\x18\x01 \x03(\v2!.meshtastic.NodeRemoteHardwarePinR\x16nodeRemoteHardwarePins\"\xa2\x01\n" +
+ "\rSharedContact\x12\x19\n" +
+ "\bnode_num\x18\x01 \x01(\rR\anodeNum\x12$\n" +
+ "\x04user\x18\x02 \x01(\v2\x10.meshtastic.UserR\x04user\x12#\n" +
+ "\rshould_ignore\x18\x03 \x01(\bR\fshouldIgnore\x12+\n" +
+ "\x11manually_verified\x18\x04 \x01(\bR\x10manuallyVerified\"\xcf\x02\n" +
+ "\x14KeyVerificationAdmin\x12O\n" +
+ "\fmessage_type\x18\x01 \x01(\x0e2,.meshtastic.KeyVerificationAdmin.MessageTypeR\vmessageType\x12%\n" +
+ "\x0eremote_nodenum\x18\x02 \x01(\rR\rremoteNodenum\x12\x14\n" +
+ "\x05nonce\x18\x03 \x01(\x04R\x05nonce\x12,\n" +
+ "\x0fsecurity_number\x18\x04 \x01(\rH\x00R\x0esecurityNumber\x88\x01\x01\"g\n" +
+ "\vMessageType\x12\x19\n" +
+ "\x15INITIATE_VERIFICATION\x10\x00\x12\x1b\n" +
+ "\x17PROVIDE_SECURITY_NUMBER\x10\x01\x12\r\n" +
+ "\tDO_VERIFY\x10\x02\x12\x11\n" +
+ "\rDO_NOT_VERIFY\x10\x03B\x12\n" +
+ "\x10_security_number\"\xc5\x01\n" +
+ "\fSensorConfig\x12;\n" +
+ "\fscd4x_config\x18\x01 \x01(\v2\x18.meshtastic.SCD4X_configR\vscd4xConfig\x12;\n" +
+ "\fsen5x_config\x18\x02 \x01(\v2\x18.meshtastic.SEN5X_configR\vsen5xConfig\x12;\n" +
+ "\fscd30_config\x18\x03 \x01(\v2\x18.meshtastic.SCD30_configR\vscd30Config\"\xc9\x03\n" +
+ "\fSCD4X_config\x12\x1c\n" +
+ "\aset_asc\x18\x01 \x01(\bH\x00R\x06setAsc\x88\x01\x01\x122\n" +
+ "\x13set_target_co2_conc\x18\x02 \x01(\rH\x01R\x10setTargetCo2Conc\x88\x01\x01\x12,\n" +
+ "\x0fset_temperature\x18\x03 \x01(\x02H\x02R\x0esetTemperature\x88\x01\x01\x12&\n" +
+ "\fset_altitude\x18\x04 \x01(\rH\x03R\vsetAltitude\x88\x01\x01\x125\n" +
+ "\x14set_ambient_pressure\x18\x05 \x01(\rH\x04R\x12setAmbientPressure\x88\x01\x01\x12(\n" +
+ "\rfactory_reset\x18\x06 \x01(\bH\x05R\ffactoryReset\x88\x01\x01\x12)\n" +
+ "\x0eset_power_mode\x18\a \x01(\bH\x06R\fsetPowerMode\x88\x01\x01B\n" +
+ "\n" +
+ "\b_set_ascB\x16\n" +
+ "\x14_set_target_co2_concB\x12\n" +
+ "\x10_set_temperatureB\x0f\n" +
+ "\r_set_altitudeB\x17\n" +
+ "\x15_set_ambient_pressureB\x10\n" +
+ "\x0e_factory_resetB\x11\n" +
+ "\x0f_set_power_mode\"\x96\x01\n" +
+ "\fSEN5X_config\x12,\n" +
+ "\x0fset_temperature\x18\x01 \x01(\x02H\x00R\x0esetTemperature\x88\x01\x01\x12.\n" +
+ "\x11set_one_shot_mode\x18\x02 \x01(\bH\x01R\x0esetOneShotMode\x88\x01\x01B\x12\n" +
+ "\x10_set_temperatureB\x14\n" +
+ "\x12_set_one_shot_mode\"\x8e\x03\n" +
+ "\fSCD30_config\x12\x1c\n" +
+ "\aset_asc\x18\x01 \x01(\bH\x00R\x06setAsc\x88\x01\x01\x122\n" +
+ "\x13set_target_co2_conc\x18\x02 \x01(\rH\x01R\x10setTargetCo2Conc\x88\x01\x01\x12,\n" +
+ "\x0fset_temperature\x18\x03 \x01(\x02H\x02R\x0esetTemperature\x88\x01\x01\x12&\n" +
+ "\fset_altitude\x18\x04 \x01(\rH\x03R\vsetAltitude\x88\x01\x01\x12=\n" +
+ "\x18set_measurement_interval\x18\x05 \x01(\rH\x04R\x16setMeasurementInterval\x88\x01\x01\x12\"\n" +
+ "\n" +
+ "soft_reset\x18\x06 \x01(\bH\x05R\tsoftReset\x88\x01\x01B\n" +
+ "\n" +
+ "\b_set_ascB\x16\n" +
+ "\x14_set_target_co2_concB\x12\n" +
+ "\x10_set_temperatureB\x0f\n" +
+ "\r_set_altitudeB\x1b\n" +
+ "\x19_set_measurement_intervalB\r\n" +
+ "\v_soft_reset*7\n" +
+ "\aOTAMode\x12\x11\n" +
+ "\rNO_REBOOT_OTA\x10\x00\x12\v\n" +
+ "\aOTA_BLE\x10\x01\x12\f\n" +
+ "\bOTA_WIFI\x10\x02Ba\n" +
+ "\x14org.meshtastic.protoB\vAdminProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00b\x06proto3"
+
+var (
+ file_meshtastic_admin_proto_rawDescOnce sync.Once
+ file_meshtastic_admin_proto_rawDescData []byte
+)
+
+func file_meshtastic_admin_proto_rawDescGZIP() []byte {
+ file_meshtastic_admin_proto_rawDescOnce.Do(func() {
+ file_meshtastic_admin_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_meshtastic_admin_proto_rawDesc), len(file_meshtastic_admin_proto_rawDesc)))
+ })
+ return file_meshtastic_admin_proto_rawDescData
+}
+
+var file_meshtastic_admin_proto_enumTypes = make([]protoimpl.EnumInfo, 5)
+var file_meshtastic_admin_proto_msgTypes = make([]protoimpl.MessageInfo, 11)
+var file_meshtastic_admin_proto_goTypes = []any{
+ (OTAMode)(0), // 0: meshtastic.OTAMode
+ (AdminMessage_ConfigType)(0), // 1: meshtastic.AdminMessage.ConfigType
+ (AdminMessage_ModuleConfigType)(0), // 2: meshtastic.AdminMessage.ModuleConfigType
+ (AdminMessage_BackupLocation)(0), // 3: meshtastic.AdminMessage.BackupLocation
+ (KeyVerificationAdmin_MessageType)(0), // 4: meshtastic.KeyVerificationAdmin.MessageType
+ (*AdminMessage)(nil), // 5: meshtastic.AdminMessage
+ (*HamParameters)(nil), // 6: meshtastic.HamParameters
+ (*NodeRemoteHardwarePinsResponse)(nil), // 7: meshtastic.NodeRemoteHardwarePinsResponse
+ (*SharedContact)(nil), // 8: meshtastic.SharedContact
+ (*KeyVerificationAdmin)(nil), // 9: meshtastic.KeyVerificationAdmin
+ (*SensorConfig)(nil), // 10: meshtastic.SensorConfig
+ (*SCD4XConfig)(nil), // 11: meshtastic.SCD4X_config
+ (*SEN5XConfig)(nil), // 12: meshtastic.SEN5X_config
+ (*SCD30Config)(nil), // 13: meshtastic.SCD30_config
+ (*AdminMessage_InputEvent)(nil), // 14: meshtastic.AdminMessage.InputEvent
+ (*AdminMessage_OTAEvent)(nil), // 15: meshtastic.AdminMessage.OTAEvent
+ (*Channel)(nil), // 16: meshtastic.Channel
+ (*User)(nil), // 17: meshtastic.User
+ (*Config)(nil), // 18: meshtastic.Config
+ (*ModuleConfig)(nil), // 19: meshtastic.ModuleConfig
+ (*DeviceMetadata)(nil), // 20: meshtastic.DeviceMetadata
+ (*DeviceConnectionStatus)(nil), // 21: meshtastic.DeviceConnectionStatus
+ (*Position)(nil), // 22: meshtastic.Position
+ (*DeviceUIConfig)(nil), // 23: meshtastic.DeviceUIConfig
+ (*NodeRemoteHardwarePin)(nil), // 24: meshtastic.NodeRemoteHardwarePin
+}
+var file_meshtastic_admin_proto_depIdxs = []int32{
+ 16, // 0: meshtastic.AdminMessage.get_channel_response:type_name -> meshtastic.Channel
+ 17, // 1: meshtastic.AdminMessage.get_owner_response:type_name -> meshtastic.User
+ 1, // 2: meshtastic.AdminMessage.get_config_request:type_name -> meshtastic.AdminMessage.ConfigType
+ 18, // 3: meshtastic.AdminMessage.get_config_response:type_name -> meshtastic.Config
+ 2, // 4: meshtastic.AdminMessage.get_module_config_request:type_name -> meshtastic.AdminMessage.ModuleConfigType
+ 19, // 5: meshtastic.AdminMessage.get_module_config_response:type_name -> meshtastic.ModuleConfig
+ 20, // 6: meshtastic.AdminMessage.get_device_metadata_response:type_name -> meshtastic.DeviceMetadata
+ 21, // 7: meshtastic.AdminMessage.get_device_connection_status_response:type_name -> meshtastic.DeviceConnectionStatus
+ 6, // 8: meshtastic.AdminMessage.set_ham_mode:type_name -> meshtastic.HamParameters
+ 7, // 9: meshtastic.AdminMessage.get_node_remote_hardware_pins_response:type_name -> meshtastic.NodeRemoteHardwarePinsResponse
+ 3, // 10: meshtastic.AdminMessage.backup_preferences:type_name -> meshtastic.AdminMessage.BackupLocation
+ 3, // 11: meshtastic.AdminMessage.restore_preferences:type_name -> meshtastic.AdminMessage.BackupLocation
+ 3, // 12: meshtastic.AdminMessage.remove_backup_preferences:type_name -> meshtastic.AdminMessage.BackupLocation
+ 14, // 13: meshtastic.AdminMessage.send_input_event:type_name -> meshtastic.AdminMessage.InputEvent
+ 17, // 14: meshtastic.AdminMessage.set_owner:type_name -> meshtastic.User
+ 16, // 15: meshtastic.AdminMessage.set_channel:type_name -> meshtastic.Channel
+ 18, // 16: meshtastic.AdminMessage.set_config:type_name -> meshtastic.Config
+ 19, // 17: meshtastic.AdminMessage.set_module_config:type_name -> meshtastic.ModuleConfig
+ 22, // 18: meshtastic.AdminMessage.set_fixed_position:type_name -> meshtastic.Position
+ 23, // 19: meshtastic.AdminMessage.get_ui_config_response:type_name -> meshtastic.DeviceUIConfig
+ 23, // 20: meshtastic.AdminMessage.store_ui_config:type_name -> meshtastic.DeviceUIConfig
+ 8, // 21: meshtastic.AdminMessage.add_contact:type_name -> meshtastic.SharedContact
+ 9, // 22: meshtastic.AdminMessage.key_verification:type_name -> meshtastic.KeyVerificationAdmin
+ 15, // 23: meshtastic.AdminMessage.ota_request:type_name -> meshtastic.AdminMessage.OTAEvent
+ 10, // 24: meshtastic.AdminMessage.sensor_config:type_name -> meshtastic.SensorConfig
+ 24, // 25: meshtastic.NodeRemoteHardwarePinsResponse.node_remote_hardware_pins:type_name -> meshtastic.NodeRemoteHardwarePin
+ 17, // 26: meshtastic.SharedContact.user:type_name -> meshtastic.User
+ 4, // 27: meshtastic.KeyVerificationAdmin.message_type:type_name -> meshtastic.KeyVerificationAdmin.MessageType
+ 11, // 28: meshtastic.SensorConfig.scd4x_config:type_name -> meshtastic.SCD4X_config
+ 12, // 29: meshtastic.SensorConfig.sen5x_config:type_name -> meshtastic.SEN5X_config
+ 13, // 30: meshtastic.SensorConfig.scd30_config:type_name -> meshtastic.SCD30_config
+ 0, // 31: meshtastic.AdminMessage.OTAEvent.reboot_ota_mode:type_name -> meshtastic.OTAMode
+ 32, // [32:32] is the sub-list for method output_type
+ 32, // [32:32] is the sub-list for method input_type
+ 32, // [32:32] is the sub-list for extension type_name
+ 32, // [32:32] is the sub-list for extension extendee
+ 0, // [0:32] is the sub-list for field type_name
+}
+
+func init() { file_meshtastic_admin_proto_init() }
+func file_meshtastic_admin_proto_init() {
+ if File_meshtastic_admin_proto != nil {
+ return
+ }
+ file_meshtastic_channel_proto_init()
+ file_meshtastic_config_proto_init()
+ file_meshtastic_connection_status_proto_init()
+ file_meshtastic_device_ui_proto_init()
+ file_meshtastic_mesh_proto_init()
+ file_meshtastic_module_config_proto_init()
+ file_meshtastic_admin_proto_msgTypes[0].OneofWrappers = []any{
+ (*AdminMessage_GetChannelRequest)(nil),
+ (*AdminMessage_GetChannelResponse)(nil),
+ (*AdminMessage_GetOwnerRequest)(nil),
+ (*AdminMessage_GetOwnerResponse)(nil),
+ (*AdminMessage_GetConfigRequest)(nil),
+ (*AdminMessage_GetConfigResponse)(nil),
+ (*AdminMessage_GetModuleConfigRequest)(nil),
+ (*AdminMessage_GetModuleConfigResponse)(nil),
+ (*AdminMessage_GetCannedMessageModuleMessagesRequest)(nil),
+ (*AdminMessage_GetCannedMessageModuleMessagesResponse)(nil),
+ (*AdminMessage_GetDeviceMetadataRequest)(nil),
+ (*AdminMessage_GetDeviceMetadataResponse)(nil),
+ (*AdminMessage_GetRingtoneRequest)(nil),
+ (*AdminMessage_GetRingtoneResponse)(nil),
+ (*AdminMessage_GetDeviceConnectionStatusRequest)(nil),
+ (*AdminMessage_GetDeviceConnectionStatusResponse)(nil),
+ (*AdminMessage_SetHamMode)(nil),
+ (*AdminMessage_GetNodeRemoteHardwarePinsRequest)(nil),
+ (*AdminMessage_GetNodeRemoteHardwarePinsResponse)(nil),
+ (*AdminMessage_EnterDfuModeRequest)(nil),
+ (*AdminMessage_DeleteFileRequest)(nil),
+ (*AdminMessage_SetScale)(nil),
+ (*AdminMessage_BackupPreferences)(nil),
+ (*AdminMessage_RestorePreferences)(nil),
+ (*AdminMessage_RemoveBackupPreferences)(nil),
+ (*AdminMessage_SendInputEvent)(nil),
+ (*AdminMessage_SetOwner)(nil),
+ (*AdminMessage_SetChannel)(nil),
+ (*AdminMessage_SetConfig)(nil),
+ (*AdminMessage_SetModuleConfig)(nil),
+ (*AdminMessage_SetCannedMessageModuleMessages)(nil),
+ (*AdminMessage_SetRingtoneMessage)(nil),
+ (*AdminMessage_RemoveByNodenum)(nil),
+ (*AdminMessage_SetFavoriteNode)(nil),
+ (*AdminMessage_RemoveFavoriteNode)(nil),
+ (*AdminMessage_SetFixedPosition)(nil),
+ (*AdminMessage_RemoveFixedPosition)(nil),
+ (*AdminMessage_SetTimeOnly)(nil),
+ (*AdminMessage_GetUiConfigRequest)(nil),
+ (*AdminMessage_GetUiConfigResponse)(nil),
+ (*AdminMessage_StoreUiConfig)(nil),
+ (*AdminMessage_SetIgnoredNode)(nil),
+ (*AdminMessage_RemoveIgnoredNode)(nil),
+ (*AdminMessage_ToggleMutedNode)(nil),
+ (*AdminMessage_BeginEditSettings)(nil),
+ (*AdminMessage_CommitEditSettings)(nil),
+ (*AdminMessage_AddContact)(nil),
+ (*AdminMessage_KeyVerification)(nil),
+ (*AdminMessage_FactoryResetDevice)(nil),
+ (*AdminMessage_RebootOtaSeconds)(nil),
+ (*AdminMessage_ExitSimulator)(nil),
+ (*AdminMessage_RebootSeconds)(nil),
+ (*AdminMessage_ShutdownSeconds)(nil),
+ (*AdminMessage_FactoryResetConfig)(nil),
+ (*AdminMessage_NodedbReset)(nil),
+ (*AdminMessage_OtaRequest)(nil),
+ (*AdminMessage_SensorConfig)(nil),
+ }
+ file_meshtastic_admin_proto_msgTypes[4].OneofWrappers = []any{}
+ file_meshtastic_admin_proto_msgTypes[6].OneofWrappers = []any{}
+ file_meshtastic_admin_proto_msgTypes[7].OneofWrappers = []any{}
+ file_meshtastic_admin_proto_msgTypes[8].OneofWrappers = []any{}
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_meshtastic_admin_proto_rawDesc), len(file_meshtastic_admin_proto_rawDesc)),
+ NumEnums: 5,
+ NumMessages: 11,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_meshtastic_admin_proto_goTypes,
+ DependencyIndexes: file_meshtastic_admin_proto_depIdxs,
+ EnumInfos: file_meshtastic_admin_proto_enumTypes,
+ MessageInfos: file_meshtastic_admin_proto_msgTypes,
+ }.Build()
+ File_meshtastic_admin_proto = out.File
+ file_meshtastic_admin_proto_goTypes = nil
+ file_meshtastic_admin_proto_depIdxs = nil
+}
diff --git a/protocol/meshtastic/pb/admin.pb.go.tmp b/protocol/meshtastic/pb/admin.pb.go.tmp
new file mode 100644
index 0000000..e69de29
diff --git a/protocol/meshtastic/pb/apponly.pb.go b/protocol/meshtastic/pb/apponly.pb.go
new file mode 100644
index 0000000..11197cb
--- /dev/null
+++ b/protocol/meshtastic/pb/apponly.pb.go
@@ -0,0 +1,148 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc v6.33.4
+// source: meshtastic/apponly.proto
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// This is the most compact possible representation for a set of channels.
+// It includes only one PRIMARY channel (which must be first) and
+// any SECONDARY channels.
+// No DISABLED channels are included.
+// This abstraction is used only on the the 'app side' of the world (ie python, javascript and android etc) to show a group of Channels as a (long) URL
+type ChannelSet struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Channel list with settings
+ Settings []*ChannelSettings `protobuf:"bytes,1,rep,name=settings,proto3" json:"settings,omitempty"`
+ // LoRa config
+ LoraConfig *Config_LoRaConfig `protobuf:"bytes,2,opt,name=lora_config,json=loraConfig,proto3" json:"loraConfig,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ChannelSet) Reset() {
+ *x = ChannelSet{}
+ mi := &file_meshtastic_apponly_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ChannelSet) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ChannelSet) ProtoMessage() {}
+
+func (x *ChannelSet) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_apponly_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ChannelSet.ProtoReflect.Descriptor instead.
+func (*ChannelSet) Descriptor() ([]byte, []int) {
+ return file_meshtastic_apponly_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *ChannelSet) GetSettings() []*ChannelSettings {
+ if x != nil {
+ return x.Settings
+ }
+ return nil
+}
+
+func (x *ChannelSet) GetLoraConfig() *Config_LoRaConfig {
+ if x != nil {
+ return x.LoraConfig
+ }
+ return nil
+}
+
+var File_meshtastic_apponly_proto protoreflect.FileDescriptor
+
+const file_meshtastic_apponly_proto_rawDesc = "" +
+ "\n" +
+ "\x18meshtastic/apponly.proto\x12\n" +
+ "meshtastic\x1a\x18meshtastic/channel.proto\x1a\x17meshtastic/config.proto\"\x85\x01\n" +
+ "\n" +
+ "ChannelSet\x127\n" +
+ "\bsettings\x18\x01 \x03(\v2\x1b.meshtastic.ChannelSettingsR\bsettings\x12>\n" +
+ "\vlora_config\x18\x02 \x01(\v2\x1d.meshtastic.Config.LoRaConfigR\n" +
+ "loraConfigBc\n" +
+ "\x14org.meshtastic.protoB\rAppOnlyProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00b\x06proto3"
+
+var (
+ file_meshtastic_apponly_proto_rawDescOnce sync.Once
+ file_meshtastic_apponly_proto_rawDescData []byte
+)
+
+func file_meshtastic_apponly_proto_rawDescGZIP() []byte {
+ file_meshtastic_apponly_proto_rawDescOnce.Do(func() {
+ file_meshtastic_apponly_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_meshtastic_apponly_proto_rawDesc), len(file_meshtastic_apponly_proto_rawDesc)))
+ })
+ return file_meshtastic_apponly_proto_rawDescData
+}
+
+var file_meshtastic_apponly_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
+var file_meshtastic_apponly_proto_goTypes = []any{
+ (*ChannelSet)(nil), // 0: meshtastic.ChannelSet
+ (*ChannelSettings)(nil), // 1: meshtastic.ChannelSettings
+ (*Config_LoRaConfig)(nil), // 2: meshtastic.Config.LoRaConfig
+}
+var file_meshtastic_apponly_proto_depIdxs = []int32{
+ 1, // 0: meshtastic.ChannelSet.settings:type_name -> meshtastic.ChannelSettings
+ 2, // 1: meshtastic.ChannelSet.lora_config:type_name -> meshtastic.Config.LoRaConfig
+ 2, // [2:2] is the sub-list for method output_type
+ 2, // [2:2] is the sub-list for method input_type
+ 2, // [2:2] is the sub-list for extension type_name
+ 2, // [2:2] is the sub-list for extension extendee
+ 0, // [0:2] is the sub-list for field type_name
+}
+
+func init() { file_meshtastic_apponly_proto_init() }
+func file_meshtastic_apponly_proto_init() {
+ if File_meshtastic_apponly_proto != nil {
+ return
+ }
+ file_meshtastic_channel_proto_init()
+ file_meshtastic_config_proto_init()
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_meshtastic_apponly_proto_rawDesc), len(file_meshtastic_apponly_proto_rawDesc)),
+ NumEnums: 0,
+ NumMessages: 1,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_meshtastic_apponly_proto_goTypes,
+ DependencyIndexes: file_meshtastic_apponly_proto_depIdxs,
+ MessageInfos: file_meshtastic_apponly_proto_msgTypes,
+ }.Build()
+ File_meshtastic_apponly_proto = out.File
+ file_meshtastic_apponly_proto_goTypes = nil
+ file_meshtastic_apponly_proto_depIdxs = nil
+}
diff --git a/protocol/meshtastic/pb/atak.pb.go b/protocol/meshtastic/pb/atak.pb.go
new file mode 100644
index 0000000..846d814
--- /dev/null
+++ b/protocol/meshtastic/pb/atak.pb.go
@@ -0,0 +1,797 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc v6.33.4
+// source: meshtastic/atak.proto
+
+// trunk-ignore(buf-lint/PACKAGE_DIRECTORY_MATCH)
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type Team int32
+
+const (
+ // Unspecifed
+ Team_Unspecifed_Color Team = 0
+ // White
+ Team_White Team = 1
+ // Yellow
+ Team_Yellow Team = 2
+ // Orange
+ Team_Orange Team = 3
+ // Magenta
+ Team_Magenta Team = 4
+ // Red
+ Team_Red Team = 5
+ // Maroon
+ Team_Maroon Team = 6
+ // Purple
+ Team_Purple Team = 7
+ // Dark Blue
+ Team_Dark_Blue Team = 8
+ // Blue
+ Team_Blue Team = 9
+ // Cyan
+ Team_Cyan Team = 10
+ // Teal
+ Team_Teal Team = 11
+ // Green
+ Team_Green Team = 12
+ // Dark Green
+ Team_Dark_Green Team = 13
+ // Brown
+ Team_Brown Team = 14
+)
+
+// Enum value maps for Team.
+var (
+ Team_name = map[int32]string{
+ 0: "Unspecifed_Color",
+ 1: "White",
+ 2: "Yellow",
+ 3: "Orange",
+ 4: "Magenta",
+ 5: "Red",
+ 6: "Maroon",
+ 7: "Purple",
+ 8: "Dark_Blue",
+ 9: "Blue",
+ 10: "Cyan",
+ 11: "Teal",
+ 12: "Green",
+ 13: "Dark_Green",
+ 14: "Brown",
+ }
+ Team_value = map[string]int32{
+ "Unspecifed_Color": 0,
+ "White": 1,
+ "Yellow": 2,
+ "Orange": 3,
+ "Magenta": 4,
+ "Red": 5,
+ "Maroon": 6,
+ "Purple": 7,
+ "Dark_Blue": 8,
+ "Blue": 9,
+ "Cyan": 10,
+ "Teal": 11,
+ "Green": 12,
+ "Dark_Green": 13,
+ "Brown": 14,
+ }
+)
+
+func (x Team) Enum() *Team {
+ p := new(Team)
+ *p = x
+ return p
+}
+
+func (x Team) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Team) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_atak_proto_enumTypes[0].Descriptor()
+}
+
+func (Team) Type() protoreflect.EnumType {
+ return &file_meshtastic_atak_proto_enumTypes[0]
+}
+
+func (x Team) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Team.Descriptor instead.
+func (Team) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_atak_proto_rawDescGZIP(), []int{0}
+}
+
+// Role of the group member
+type MemberRole int32
+
+const (
+ // Unspecifed
+ MemberRole_Unspecifed MemberRole = 0
+ // Team Member
+ MemberRole_TeamMember MemberRole = 1
+ // Team Lead
+ MemberRole_TeamLead MemberRole = 2
+ // Headquarters
+ MemberRole_HQ MemberRole = 3
+ // Airsoft enthusiast
+ MemberRole_Sniper MemberRole = 4
+ // Medic
+ MemberRole_Medic MemberRole = 5
+ // ForwardObserver
+ MemberRole_ForwardObserver MemberRole = 6
+ // Radio Telephone Operator
+ MemberRole_RTO MemberRole = 7
+ // Doggo
+ MemberRole_K9 MemberRole = 8
+)
+
+// Enum value maps for MemberRole.
+var (
+ MemberRole_name = map[int32]string{
+ 0: "Unspecifed",
+ 1: "TeamMember",
+ 2: "TeamLead",
+ 3: "HQ",
+ 4: "Sniper",
+ 5: "Medic",
+ 6: "ForwardObserver",
+ 7: "RTO",
+ 8: "K9",
+ }
+ MemberRole_value = map[string]int32{
+ "Unspecifed": 0,
+ "TeamMember": 1,
+ "TeamLead": 2,
+ "HQ": 3,
+ "Sniper": 4,
+ "Medic": 5,
+ "ForwardObserver": 6,
+ "RTO": 7,
+ "K9": 8,
+ }
+)
+
+func (x MemberRole) Enum() *MemberRole {
+ p := new(MemberRole)
+ *p = x
+ return p
+}
+
+func (x MemberRole) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (MemberRole) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_atak_proto_enumTypes[1].Descriptor()
+}
+
+func (MemberRole) Type() protoreflect.EnumType {
+ return &file_meshtastic_atak_proto_enumTypes[1]
+}
+
+func (x MemberRole) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use MemberRole.Descriptor instead.
+func (MemberRole) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_atak_proto_rawDescGZIP(), []int{1}
+}
+
+// Packets for the official ATAK Plugin
+type TAKPacket struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Are the payloads strings compressed for LoRA transport?
+ IsCompressed bool `protobuf:"varint,1,opt,name=is_compressed,json=isCompressed,proto3" json:"isCompressed,omitempty"`
+ // The contact / callsign for ATAK user
+ Contact *Contact `protobuf:"bytes,2,opt,name=contact,proto3" json:"contact,omitempty"`
+ // The group for ATAK user
+ Group *Group `protobuf:"bytes,3,opt,name=group,proto3" json:"group,omitempty"`
+ // The status of the ATAK EUD
+ Status *Status `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"`
+ // The payload of the packet
+ //
+ // Types that are valid to be assigned to PayloadVariant:
+ //
+ // *TAKPacket_Pli
+ // *TAKPacket_Chat
+ // *TAKPacket_Detail
+ PayloadVariant isTAKPacket_PayloadVariant `protobuf_oneof:"payload_variant"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *TAKPacket) Reset() {
+ *x = TAKPacket{}
+ mi := &file_meshtastic_atak_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *TAKPacket) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TAKPacket) ProtoMessage() {}
+
+func (x *TAKPacket) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_atak_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use TAKPacket.ProtoReflect.Descriptor instead.
+func (*TAKPacket) Descriptor() ([]byte, []int) {
+ return file_meshtastic_atak_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *TAKPacket) GetIsCompressed() bool {
+ if x != nil {
+ return x.IsCompressed
+ }
+ return false
+}
+
+func (x *TAKPacket) GetContact() *Contact {
+ if x != nil {
+ return x.Contact
+ }
+ return nil
+}
+
+func (x *TAKPacket) GetGroup() *Group {
+ if x != nil {
+ return x.Group
+ }
+ return nil
+}
+
+func (x *TAKPacket) GetStatus() *Status {
+ if x != nil {
+ return x.Status
+ }
+ return nil
+}
+
+func (x *TAKPacket) GetPayloadVariant() isTAKPacket_PayloadVariant {
+ if x != nil {
+ return x.PayloadVariant
+ }
+ return nil
+}
+
+func (x *TAKPacket) GetPli() *PLI {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*TAKPacket_Pli); ok {
+ return x.Pli
+ }
+ }
+ return nil
+}
+
+func (x *TAKPacket) GetChat() *GeoChat {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*TAKPacket_Chat); ok {
+ return x.Chat
+ }
+ }
+ return nil
+}
+
+func (x *TAKPacket) GetDetail() []byte {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*TAKPacket_Detail); ok {
+ return x.Detail
+ }
+ }
+ return nil
+}
+
+type isTAKPacket_PayloadVariant interface {
+ isTAKPacket_PayloadVariant()
+}
+
+type TAKPacket_Pli struct {
+ // TAK position report
+ Pli *PLI `protobuf:"bytes,5,opt,name=pli,proto3,oneof"`
+}
+
+type TAKPacket_Chat struct {
+ // ATAK GeoChat message
+ Chat *GeoChat `protobuf:"bytes,6,opt,name=chat,proto3,oneof"`
+}
+
+type TAKPacket_Detail struct {
+ // Generic CoT detail XML
+ // May be compressed / truncated by the sender (EUD)
+ Detail []byte `protobuf:"bytes,7,opt,name=detail,proto3,oneof"`
+}
+
+func (*TAKPacket_Pli) isTAKPacket_PayloadVariant() {}
+
+func (*TAKPacket_Chat) isTAKPacket_PayloadVariant() {}
+
+func (*TAKPacket_Detail) isTAKPacket_PayloadVariant() {}
+
+// ATAK GeoChat message
+type GeoChat struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The text message
+ Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"`
+ // Uid recipient of the message
+ To *string `protobuf:"bytes,2,opt,name=to,proto3,oneof" json:"to,omitempty"`
+ // Callsign of the recipient for the message
+ ToCallsign *string `protobuf:"bytes,3,opt,name=to_callsign,json=toCallsign,proto3,oneof" json:"toCallsign,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *GeoChat) Reset() {
+ *x = GeoChat{}
+ mi := &file_meshtastic_atak_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *GeoChat) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GeoChat) ProtoMessage() {}
+
+func (x *GeoChat) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_atak_proto_msgTypes[1]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GeoChat.ProtoReflect.Descriptor instead.
+func (*GeoChat) Descriptor() ([]byte, []int) {
+ return file_meshtastic_atak_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *GeoChat) GetMessage() string {
+ if x != nil {
+ return x.Message
+ }
+ return ""
+}
+
+func (x *GeoChat) GetTo() string {
+ if x != nil && x.To != nil {
+ return *x.To
+ }
+ return ""
+}
+
+func (x *GeoChat) GetToCallsign() string {
+ if x != nil && x.ToCallsign != nil {
+ return *x.ToCallsign
+ }
+ return ""
+}
+
+// ATAK Group
+// <__group role='Team Member' name='Cyan'/>
+type Group struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Role of the group member
+ Role MemberRole `protobuf:"varint,1,opt,name=role,proto3,enum=meshtastic.MemberRole" json:"role,omitempty"`
+ // Team (color)
+ // Default Cyan
+ Team Team `protobuf:"varint,2,opt,name=team,proto3,enum=meshtastic.Team" json:"team,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Group) Reset() {
+ *x = Group{}
+ mi := &file_meshtastic_atak_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Group) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Group) ProtoMessage() {}
+
+func (x *Group) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_atak_proto_msgTypes[2]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Group.ProtoReflect.Descriptor instead.
+func (*Group) Descriptor() ([]byte, []int) {
+ return file_meshtastic_atak_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *Group) GetRole() MemberRole {
+ if x != nil {
+ return x.Role
+ }
+ return MemberRole_Unspecifed
+}
+
+func (x *Group) GetTeam() Team {
+ if x != nil {
+ return x.Team
+ }
+ return Team_Unspecifed_Color
+}
+
+// ATAK EUD Status
+//
+type Status struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Battery level
+ Battery uint32 `protobuf:"varint,1,opt,name=battery,proto3" json:"battery,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Status) Reset() {
+ *x = Status{}
+ mi := &file_meshtastic_atak_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Status) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Status) ProtoMessage() {}
+
+func (x *Status) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_atak_proto_msgTypes[3]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Status.ProtoReflect.Descriptor instead.
+func (*Status) Descriptor() ([]byte, []int) {
+ return file_meshtastic_atak_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *Status) GetBattery() uint32 {
+ if x != nil {
+ return x.Battery
+ }
+ return 0
+}
+
+// ATAK Contact
+//
+type Contact struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Callsign
+ Callsign string `protobuf:"bytes,1,opt,name=callsign,proto3" json:"callsign,omitempty"`
+ // Device callsign
+ DeviceCallsign string `protobuf:"bytes,2,opt,name=device_callsign,json=deviceCallsign,proto3" json:"deviceCallsign,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Contact) Reset() {
+ *x = Contact{}
+ mi := &file_meshtastic_atak_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Contact) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Contact) ProtoMessage() {}
+
+func (x *Contact) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_atak_proto_msgTypes[4]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Contact.ProtoReflect.Descriptor instead.
+func (*Contact) Descriptor() ([]byte, []int) {
+ return file_meshtastic_atak_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *Contact) GetCallsign() string {
+ if x != nil {
+ return x.Callsign
+ }
+ return ""
+}
+
+func (x *Contact) GetDeviceCallsign() string {
+ if x != nil {
+ return x.DeviceCallsign
+ }
+ return ""
+}
+
+// Position Location Information from ATAK
+type PLI struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The new preferred location encoding, multiply by 1e-7 to get degrees
+ // in floating point
+ LatitudeI int32 `protobuf:"fixed32,1,opt,name=latitude_i,json=latitudeI,proto3" json:"latitudeI,omitempty"`
+ // The new preferred location encoding, multiply by 1e-7 to get degrees
+ // in floating point
+ LongitudeI int32 `protobuf:"fixed32,2,opt,name=longitude_i,json=longitudeI,proto3" json:"longitudeI,omitempty"`
+ // Altitude (ATAK prefers HAE)
+ Altitude int32 `protobuf:"varint,3,opt,name=altitude,proto3" json:"altitude,omitempty"`
+ // Speed
+ Speed uint32 `protobuf:"varint,4,opt,name=speed,proto3" json:"speed,omitempty"`
+ // Course in degrees
+ Course uint32 `protobuf:"varint,5,opt,name=course,proto3" json:"course,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *PLI) Reset() {
+ *x = PLI{}
+ mi := &file_meshtastic_atak_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *PLI) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PLI) ProtoMessage() {}
+
+func (x *PLI) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_atak_proto_msgTypes[5]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use PLI.ProtoReflect.Descriptor instead.
+func (*PLI) Descriptor() ([]byte, []int) {
+ return file_meshtastic_atak_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *PLI) GetLatitudeI() int32 {
+ if x != nil {
+ return x.LatitudeI
+ }
+ return 0
+}
+
+func (x *PLI) GetLongitudeI() int32 {
+ if x != nil {
+ return x.LongitudeI
+ }
+ return 0
+}
+
+func (x *PLI) GetAltitude() int32 {
+ if x != nil {
+ return x.Altitude
+ }
+ return 0
+}
+
+func (x *PLI) GetSpeed() uint32 {
+ if x != nil {
+ return x.Speed
+ }
+ return 0
+}
+
+func (x *PLI) GetCourse() uint32 {
+ if x != nil {
+ return x.Course
+ }
+ return 0
+}
+
+var File_meshtastic_atak_proto protoreflect.FileDescriptor
+
+const file_meshtastic_atak_proto_rawDesc = "" +
+ "\n" +
+ "\x15meshtastic/atak.proto\x12\n" +
+ "meshtastic\"\xb1\x02\n" +
+ "\tTAKPacket\x12#\n" +
+ "\ris_compressed\x18\x01 \x01(\bR\fisCompressed\x12-\n" +
+ "\acontact\x18\x02 \x01(\v2\x13.meshtastic.ContactR\acontact\x12'\n" +
+ "\x05group\x18\x03 \x01(\v2\x11.meshtastic.GroupR\x05group\x12*\n" +
+ "\x06status\x18\x04 \x01(\v2\x12.meshtastic.StatusR\x06status\x12#\n" +
+ "\x03pli\x18\x05 \x01(\v2\x0f.meshtastic.PLIH\x00R\x03pli\x12)\n" +
+ "\x04chat\x18\x06 \x01(\v2\x13.meshtastic.GeoChatH\x00R\x04chat\x12\x18\n" +
+ "\x06detail\x18\a \x01(\fH\x00R\x06detailB\x11\n" +
+ "\x0fpayload_variant\"u\n" +
+ "\aGeoChat\x12\x18\n" +
+ "\amessage\x18\x01 \x01(\tR\amessage\x12\x13\n" +
+ "\x02to\x18\x02 \x01(\tH\x00R\x02to\x88\x01\x01\x12$\n" +
+ "\vto_callsign\x18\x03 \x01(\tH\x01R\n" +
+ "toCallsign\x88\x01\x01B\x05\n" +
+ "\x03_toB\x0e\n" +
+ "\f_to_callsign\"Y\n" +
+ "\x05Group\x12*\n" +
+ "\x04role\x18\x01 \x01(\x0e2\x16.meshtastic.MemberRoleR\x04role\x12$\n" +
+ "\x04team\x18\x02 \x01(\x0e2\x10.meshtastic.TeamR\x04team\"\"\n" +
+ "\x06Status\x12\x18\n" +
+ "\abattery\x18\x01 \x01(\rR\abattery\"N\n" +
+ "\aContact\x12\x1a\n" +
+ "\bcallsign\x18\x01 \x01(\tR\bcallsign\x12'\n" +
+ "\x0fdevice_callsign\x18\x02 \x01(\tR\x0edeviceCallsign\"\x8f\x01\n" +
+ "\x03PLI\x12\x1d\n" +
+ "\n" +
+ "latitude_i\x18\x01 \x01(\x0fR\tlatitudeI\x12\x1f\n" +
+ "\vlongitude_i\x18\x02 \x01(\x0fR\n" +
+ "longitudeI\x12\x1a\n" +
+ "\baltitude\x18\x03 \x01(\x05R\baltitude\x12\x14\n" +
+ "\x05speed\x18\x04 \x01(\rR\x05speed\x12\x16\n" +
+ "\x06course\x18\x05 \x01(\rR\x06course*\xc0\x01\n" +
+ "\x04Team\x12\x14\n" +
+ "\x10Unspecifed_Color\x10\x00\x12\t\n" +
+ "\x05White\x10\x01\x12\n" +
+ "\n" +
+ "\x06Yellow\x10\x02\x12\n" +
+ "\n" +
+ "\x06Orange\x10\x03\x12\v\n" +
+ "\aMagenta\x10\x04\x12\a\n" +
+ "\x03Red\x10\x05\x12\n" +
+ "\n" +
+ "\x06Maroon\x10\x06\x12\n" +
+ "\n" +
+ "\x06Purple\x10\a\x12\r\n" +
+ "\tDark_Blue\x10\b\x12\b\n" +
+ "\x04Blue\x10\t\x12\b\n" +
+ "\x04Cyan\x10\n" +
+ "\x12\b\n" +
+ "\x04Teal\x10\v\x12\t\n" +
+ "\x05Green\x10\f\x12\x0e\n" +
+ "\n" +
+ "Dark_Green\x10\r\x12\t\n" +
+ "\x05Brown\x10\x0e*\x7f\n" +
+ "\n" +
+ "MemberRole\x12\x0e\n" +
+ "\n" +
+ "Unspecifed\x10\x00\x12\x0e\n" +
+ "\n" +
+ "TeamMember\x10\x01\x12\f\n" +
+ "\bTeamLead\x10\x02\x12\x06\n" +
+ "\x02HQ\x10\x03\x12\n" +
+ "\n" +
+ "\x06Sniper\x10\x04\x12\t\n" +
+ "\x05Medic\x10\x05\x12\x13\n" +
+ "\x0fForwardObserver\x10\x06\x12\a\n" +
+ "\x03RTO\x10\a\x12\x06\n" +
+ "\x02K9\x10\bB`\n" +
+ "\x14org.meshtastic.protoB\n" +
+ "ATAKProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00b\x06proto3"
+
+var (
+ file_meshtastic_atak_proto_rawDescOnce sync.Once
+ file_meshtastic_atak_proto_rawDescData []byte
+)
+
+func file_meshtastic_atak_proto_rawDescGZIP() []byte {
+ file_meshtastic_atak_proto_rawDescOnce.Do(func() {
+ file_meshtastic_atak_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_meshtastic_atak_proto_rawDesc), len(file_meshtastic_atak_proto_rawDesc)))
+ })
+ return file_meshtastic_atak_proto_rawDescData
+}
+
+var file_meshtastic_atak_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
+var file_meshtastic_atak_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
+var file_meshtastic_atak_proto_goTypes = []any{
+ (Team)(0), // 0: meshtastic.Team
+ (MemberRole)(0), // 1: meshtastic.MemberRole
+ (*TAKPacket)(nil), // 2: meshtastic.TAKPacket
+ (*GeoChat)(nil), // 3: meshtastic.GeoChat
+ (*Group)(nil), // 4: meshtastic.Group
+ (*Status)(nil), // 5: meshtastic.Status
+ (*Contact)(nil), // 6: meshtastic.Contact
+ (*PLI)(nil), // 7: meshtastic.PLI
+}
+var file_meshtastic_atak_proto_depIdxs = []int32{
+ 6, // 0: meshtastic.TAKPacket.contact:type_name -> meshtastic.Contact
+ 4, // 1: meshtastic.TAKPacket.group:type_name -> meshtastic.Group
+ 5, // 2: meshtastic.TAKPacket.status:type_name -> meshtastic.Status
+ 7, // 3: meshtastic.TAKPacket.pli:type_name -> meshtastic.PLI
+ 3, // 4: meshtastic.TAKPacket.chat:type_name -> meshtastic.GeoChat
+ 1, // 5: meshtastic.Group.role:type_name -> meshtastic.MemberRole
+ 0, // 6: meshtastic.Group.team:type_name -> meshtastic.Team
+ 7, // [7:7] is the sub-list for method output_type
+ 7, // [7:7] is the sub-list for method input_type
+ 7, // [7:7] is the sub-list for extension type_name
+ 7, // [7:7] is the sub-list for extension extendee
+ 0, // [0:7] is the sub-list for field type_name
+}
+
+func init() { file_meshtastic_atak_proto_init() }
+func file_meshtastic_atak_proto_init() {
+ if File_meshtastic_atak_proto != nil {
+ return
+ }
+ file_meshtastic_atak_proto_msgTypes[0].OneofWrappers = []any{
+ (*TAKPacket_Pli)(nil),
+ (*TAKPacket_Chat)(nil),
+ (*TAKPacket_Detail)(nil),
+ }
+ file_meshtastic_atak_proto_msgTypes[1].OneofWrappers = []any{}
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_meshtastic_atak_proto_rawDesc), len(file_meshtastic_atak_proto_rawDesc)),
+ NumEnums: 2,
+ NumMessages: 6,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_meshtastic_atak_proto_goTypes,
+ DependencyIndexes: file_meshtastic_atak_proto_depIdxs,
+ EnumInfos: file_meshtastic_atak_proto_enumTypes,
+ MessageInfos: file_meshtastic_atak_proto_msgTypes,
+ }.Build()
+ File_meshtastic_atak_proto = out.File
+ file_meshtastic_atak_proto_goTypes = nil
+ file_meshtastic_atak_proto_depIdxs = nil
+}
diff --git a/protocol/meshtastic/pb/cannedmessages.pb.go b/protocol/meshtastic/pb/cannedmessages.pb.go
new file mode 100644
index 0000000..e6312c7
--- /dev/null
+++ b/protocol/meshtastic/pb/cannedmessages.pb.go
@@ -0,0 +1,126 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc v6.33.4
+// source: meshtastic/cannedmessages.proto
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// Canned message module configuration.
+type CannedMessageModuleConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Predefined messages for canned message module separated by '|' characters.
+ Messages string `protobuf:"bytes,1,opt,name=messages,proto3" json:"messages,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *CannedMessageModuleConfig) Reset() {
+ *x = CannedMessageModuleConfig{}
+ mi := &file_meshtastic_cannedmessages_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *CannedMessageModuleConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*CannedMessageModuleConfig) ProtoMessage() {}
+
+func (x *CannedMessageModuleConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_cannedmessages_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use CannedMessageModuleConfig.ProtoReflect.Descriptor instead.
+func (*CannedMessageModuleConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_cannedmessages_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *CannedMessageModuleConfig) GetMessages() string {
+ if x != nil {
+ return x.Messages
+ }
+ return ""
+}
+
+var File_meshtastic_cannedmessages_proto protoreflect.FileDescriptor
+
+const file_meshtastic_cannedmessages_proto_rawDesc = "" +
+ "\n" +
+ "\x1fmeshtastic/cannedmessages.proto\x12\n" +
+ "meshtastic\"7\n" +
+ "\x19CannedMessageModuleConfig\x12\x1a\n" +
+ "\bmessages\x18\x01 \x01(\tR\bmessagesBo\n" +
+ "\x14org.meshtastic.protoB\x19CannedMessageConfigProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00b\x06proto3"
+
+var (
+ file_meshtastic_cannedmessages_proto_rawDescOnce sync.Once
+ file_meshtastic_cannedmessages_proto_rawDescData []byte
+)
+
+func file_meshtastic_cannedmessages_proto_rawDescGZIP() []byte {
+ file_meshtastic_cannedmessages_proto_rawDescOnce.Do(func() {
+ file_meshtastic_cannedmessages_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_meshtastic_cannedmessages_proto_rawDesc), len(file_meshtastic_cannedmessages_proto_rawDesc)))
+ })
+ return file_meshtastic_cannedmessages_proto_rawDescData
+}
+
+var file_meshtastic_cannedmessages_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
+var file_meshtastic_cannedmessages_proto_goTypes = []any{
+ (*CannedMessageModuleConfig)(nil), // 0: meshtastic.CannedMessageModuleConfig
+}
+var file_meshtastic_cannedmessages_proto_depIdxs = []int32{
+ 0, // [0:0] is the sub-list for method output_type
+ 0, // [0:0] is the sub-list for method input_type
+ 0, // [0:0] is the sub-list for extension type_name
+ 0, // [0:0] is the sub-list for extension extendee
+ 0, // [0:0] is the sub-list for field type_name
+}
+
+func init() { file_meshtastic_cannedmessages_proto_init() }
+func file_meshtastic_cannedmessages_proto_init() {
+ if File_meshtastic_cannedmessages_proto != nil {
+ return
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_meshtastic_cannedmessages_proto_rawDesc), len(file_meshtastic_cannedmessages_proto_rawDesc)),
+ NumEnums: 0,
+ NumMessages: 1,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_meshtastic_cannedmessages_proto_goTypes,
+ DependencyIndexes: file_meshtastic_cannedmessages_proto_depIdxs,
+ MessageInfos: file_meshtastic_cannedmessages_proto_msgTypes,
+ }.Build()
+ File_meshtastic_cannedmessages_proto = out.File
+ file_meshtastic_cannedmessages_proto_goTypes = nil
+ file_meshtastic_cannedmessages_proto_depIdxs = nil
+}
diff --git a/protocol/meshtastic/pb/channel.pb.go b/protocol/meshtastic/pb/channel.pb.go
new file mode 100644
index 0000000..bdb7d07
--- /dev/null
+++ b/protocol/meshtastic/pb/channel.pb.go
@@ -0,0 +1,435 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc v6.33.4
+// source: meshtastic/channel.proto
+
+// trunk-ignore(buf-lint/PACKAGE_DIRECTORY_MATCH)
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// How this channel is being used (or not).
+// Note: this field is an enum to give us options for the future.
+// In particular, someday we might make a 'SCANNING' option.
+// SCANNING channels could have different frequencies and the radio would
+// occasionally check that freq to see if anything is being transmitted.
+// For devices that have multiple physical radios attached, we could keep multiple PRIMARY/SCANNING channels active at once to allow
+// cross band routing as needed.
+// If a device has only a single radio (the common case) only one channel can be PRIMARY at a time
+// (but any number of SECONDARY channels can't be sent received on that common frequency)
+type Channel_Role int32
+
+const (
+ // This channel is not in use right now
+ Channel_DISABLED Channel_Role = 0
+ // This channel is used to set the frequency for the radio - all other enabled channels must be SECONDARY
+ Channel_PRIMARY Channel_Role = 1
+ // Secondary channels are only used for encryption/decryption/authentication purposes.
+ // Their radio settings (freq etc) are ignored, only psk is used.
+ Channel_SECONDARY Channel_Role = 2
+)
+
+// Enum value maps for Channel_Role.
+var (
+ Channel_Role_name = map[int32]string{
+ 0: "DISABLED",
+ 1: "PRIMARY",
+ 2: "SECONDARY",
+ }
+ Channel_Role_value = map[string]int32{
+ "DISABLED": 0,
+ "PRIMARY": 1,
+ "SECONDARY": 2,
+ }
+)
+
+func (x Channel_Role) Enum() *Channel_Role {
+ p := new(Channel_Role)
+ *p = x
+ return p
+}
+
+func (x Channel_Role) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Channel_Role) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_channel_proto_enumTypes[0].Descriptor()
+}
+
+func (Channel_Role) Type() protoreflect.EnumType {
+ return &file_meshtastic_channel_proto_enumTypes[0]
+}
+
+func (x Channel_Role) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Channel_Role.Descriptor instead.
+func (Channel_Role) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_channel_proto_rawDescGZIP(), []int{2, 0}
+}
+
+// This information can be encoded as a QRcode/url so that other users can configure
+// their radio to join the same channel.
+// A note about how channel names are shown to users: channelname-X
+// poundsymbol is a prefix used to indicate this is a channel name (idea from @professr).
+// Where X is a letter from A-Z (base 26) representing a hash of the PSK for this
+// channel - so that if the user changes anything about the channel (which does
+// force a new PSK) this letter will also change. Thus preventing user confusion if
+// two friends try to type in a channel name of "BobsChan" and then can't talk
+// because their PSKs will be different.
+// The PSK is hashed into this letter by "0x41 + [xor all bytes of the psk ] modulo 26"
+// This also allows the option of someday if people have the PSK off (zero), the
+// users COULD type in a channel name and be able to talk.
+// FIXME: Add description of multi-channel support and how primary vs secondary channels are used.
+// FIXME: explain how apps use channels for security.
+// explain how remote settings and remote gpio are managed as an example
+type ChannelSettings struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Deprecated in favor of LoraConfig.channel_num
+ //
+ // Deprecated: Marked as deprecated in meshtastic/channel.proto.
+ ChannelNum uint32 `protobuf:"varint,1,opt,name=channel_num,json=channelNum,proto3" json:"channelNum,omitempty"`
+ // A simple pre-shared key for now for crypto.
+ // Must be either 0 bytes (no crypto), 16 bytes (AES128), or 32 bytes (AES256).
+ // A special shorthand is used for 1 byte long psks.
+ // These psks should be treated as only minimally secure,
+ // because they are listed in this source code.
+ // Those bytes are mapped using the following scheme:
+ // `0` = No crypto
+ // `1` = The special "default" channel key: {0xd4, 0xf1, 0xbb, 0x3a, 0x20, 0x29, 0x07, 0x59, 0xf0, 0xbc, 0xff, 0xab, 0xcf, 0x4e, 0x69, 0x01}
+ // `2` through 10 = The default channel key, except with 1 through 9 added to the last byte.
+ // Shown to user as simple1 through 10
+ Psk []byte `protobuf:"bytes,2,opt,name=psk,proto3" json:"psk,omitempty"`
+ // A SHORT name that will be packed into the URL.
+ // Less than 12 bytes.
+ // Something for end users to call the channel
+ // If this is the empty string it is assumed that this channel
+ // is the special (minimally secure) "Default"channel.
+ // In user interfaces it should be rendered as a local language translation of "X".
+ // For channel_num hashing empty string will be treated as "X".
+ // Where "X" is selected based on the English words listed above for ModemPreset
+ Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
+ // Used to construct a globally unique channel ID.
+ // The full globally unique ID will be: "name.id" where ID is shown as base36.
+ // Assuming that the number of meshtastic users is below 20K (true for a long time)
+ // the chance of this 64 bit random number colliding with anyone else is super low.
+ // And the penalty for collision is low as well, it just means that anyone trying to decrypt channel messages might need to
+ // try multiple candidate channels.
+ // Any time a non wire compatible change is made to a channel, this field should be regenerated.
+ // There are a small number of 'special' globally known (and fairly) insecure standard channels.
+ // Those channels do not have a numeric id included in the settings, but instead it is pulled from
+ // a table of well known IDs.
+ // (see Well Known Channels FIXME)
+ Id uint32 `protobuf:"fixed32,4,opt,name=id,proto3" json:"id,omitempty"`
+ // If true, messages on the mesh will be sent to the *public* internet by any gateway ndoe
+ UplinkEnabled bool `protobuf:"varint,5,opt,name=uplink_enabled,json=uplinkEnabled,proto3" json:"uplinkEnabled,omitempty"`
+ // If true, messages seen on the internet will be forwarded to the local mesh.
+ DownlinkEnabled bool `protobuf:"varint,6,opt,name=downlink_enabled,json=downlinkEnabled,proto3" json:"downlinkEnabled,omitempty"`
+ // Per-channel module settings.
+ ModuleSettings *ModuleSettings `protobuf:"bytes,7,opt,name=module_settings,json=moduleSettings,proto3" json:"moduleSettings,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ChannelSettings) Reset() {
+ *x = ChannelSettings{}
+ mi := &file_meshtastic_channel_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ChannelSettings) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ChannelSettings) ProtoMessage() {}
+
+func (x *ChannelSettings) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_channel_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ChannelSettings.ProtoReflect.Descriptor instead.
+func (*ChannelSettings) Descriptor() ([]byte, []int) {
+ return file_meshtastic_channel_proto_rawDescGZIP(), []int{0}
+}
+
+// Deprecated: Marked as deprecated in meshtastic/channel.proto.
+func (x *ChannelSettings) GetChannelNum() uint32 {
+ if x != nil {
+ return x.ChannelNum
+ }
+ return 0
+}
+
+func (x *ChannelSettings) GetPsk() []byte {
+ if x != nil {
+ return x.Psk
+ }
+ return nil
+}
+
+func (x *ChannelSettings) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *ChannelSettings) GetId() uint32 {
+ if x != nil {
+ return x.Id
+ }
+ return 0
+}
+
+func (x *ChannelSettings) GetUplinkEnabled() bool {
+ if x != nil {
+ return x.UplinkEnabled
+ }
+ return false
+}
+
+func (x *ChannelSettings) GetDownlinkEnabled() bool {
+ if x != nil {
+ return x.DownlinkEnabled
+ }
+ return false
+}
+
+func (x *ChannelSettings) GetModuleSettings() *ModuleSettings {
+ if x != nil {
+ return x.ModuleSettings
+ }
+ return nil
+}
+
+// This message is specifically for modules to store per-channel configuration data.
+type ModuleSettings struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Bits of precision for the location sent in position packets.
+ PositionPrecision uint32 `protobuf:"varint,1,opt,name=position_precision,json=positionPrecision,proto3" json:"positionPrecision,omitempty"`
+ // Controls whether or not the client / device should mute the current channel
+ // Useful for noisy public channels you don't necessarily want to disable
+ IsMuted bool `protobuf:"varint,2,opt,name=is_muted,json=isMuted,proto3" json:"isMuted,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ModuleSettings) Reset() {
+ *x = ModuleSettings{}
+ mi := &file_meshtastic_channel_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ModuleSettings) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ModuleSettings) ProtoMessage() {}
+
+func (x *ModuleSettings) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_channel_proto_msgTypes[1]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ModuleSettings.ProtoReflect.Descriptor instead.
+func (*ModuleSettings) Descriptor() ([]byte, []int) {
+ return file_meshtastic_channel_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *ModuleSettings) GetPositionPrecision() uint32 {
+ if x != nil {
+ return x.PositionPrecision
+ }
+ return 0
+}
+
+func (x *ModuleSettings) GetIsMuted() bool {
+ if x != nil {
+ return x.IsMuted
+ }
+ return false
+}
+
+// A pair of a channel number, mode and the (sharable) settings for that channel
+type Channel struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The index of this channel in the channel table (from 0 to MAX_NUM_CHANNELS-1)
+ // (Someday - not currently implemented) An index of -1 could be used to mean "set by name",
+ // in which case the target node will find and set the channel by settings.name.
+ Index int32 `protobuf:"varint,1,opt,name=index,proto3" json:"index,omitempty"`
+ // The new settings, or NULL to disable that channel
+ Settings *ChannelSettings `protobuf:"bytes,2,opt,name=settings,proto3" json:"settings,omitempty"`
+ // TODO: REPLACE
+ Role Channel_Role `protobuf:"varint,3,opt,name=role,proto3,enum=meshtastic.Channel_Role" json:"role,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Channel) Reset() {
+ *x = Channel{}
+ mi := &file_meshtastic_channel_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Channel) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Channel) ProtoMessage() {}
+
+func (x *Channel) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_channel_proto_msgTypes[2]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Channel.ProtoReflect.Descriptor instead.
+func (*Channel) Descriptor() ([]byte, []int) {
+ return file_meshtastic_channel_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *Channel) GetIndex() int32 {
+ if x != nil {
+ return x.Index
+ }
+ return 0
+}
+
+func (x *Channel) GetSettings() *ChannelSettings {
+ if x != nil {
+ return x.Settings
+ }
+ return nil
+}
+
+func (x *Channel) GetRole() Channel_Role {
+ if x != nil {
+ return x.Role
+ }
+ return Channel_DISABLED
+}
+
+var File_meshtastic_channel_proto protoreflect.FileDescriptor
+
+const file_meshtastic_channel_proto_rawDesc = "" +
+ "\n" +
+ "\x18meshtastic/channel.proto\x12\n" +
+ "meshtastic\"\x83\x02\n" +
+ "\x0fChannelSettings\x12#\n" +
+ "\vchannel_num\x18\x01 \x01(\rB\x02\x18\x01R\n" +
+ "channelNum\x12\x10\n" +
+ "\x03psk\x18\x02 \x01(\fR\x03psk\x12\x12\n" +
+ "\x04name\x18\x03 \x01(\tR\x04name\x12\x0e\n" +
+ "\x02id\x18\x04 \x01(\aR\x02id\x12%\n" +
+ "\x0euplink_enabled\x18\x05 \x01(\bR\ruplinkEnabled\x12)\n" +
+ "\x10downlink_enabled\x18\x06 \x01(\bR\x0fdownlinkEnabled\x12C\n" +
+ "\x0fmodule_settings\x18\a \x01(\v2\x1a.meshtastic.ModuleSettingsR\x0emoduleSettings\"Z\n" +
+ "\x0eModuleSettings\x12-\n" +
+ "\x12position_precision\x18\x01 \x01(\rR\x11positionPrecision\x12\x19\n" +
+ "\bis_muted\x18\x02 \x01(\bR\aisMuted\"\xb8\x01\n" +
+ "\aChannel\x12\x14\n" +
+ "\x05index\x18\x01 \x01(\x05R\x05index\x127\n" +
+ "\bsettings\x18\x02 \x01(\v2\x1b.meshtastic.ChannelSettingsR\bsettings\x12,\n" +
+ "\x04role\x18\x03 \x01(\x0e2\x18.meshtastic.Channel.RoleR\x04role\"0\n" +
+ "\x04Role\x12\f\n" +
+ "\bDISABLED\x10\x00\x12\v\n" +
+ "\aPRIMARY\x10\x01\x12\r\n" +
+ "\tSECONDARY\x10\x02Bc\n" +
+ "\x14org.meshtastic.protoB\rChannelProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00b\x06proto3"
+
+var (
+ file_meshtastic_channel_proto_rawDescOnce sync.Once
+ file_meshtastic_channel_proto_rawDescData []byte
+)
+
+func file_meshtastic_channel_proto_rawDescGZIP() []byte {
+ file_meshtastic_channel_proto_rawDescOnce.Do(func() {
+ file_meshtastic_channel_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_meshtastic_channel_proto_rawDesc), len(file_meshtastic_channel_proto_rawDesc)))
+ })
+ return file_meshtastic_channel_proto_rawDescData
+}
+
+var file_meshtastic_channel_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_meshtastic_channel_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
+var file_meshtastic_channel_proto_goTypes = []any{
+ (Channel_Role)(0), // 0: meshtastic.Channel.Role
+ (*ChannelSettings)(nil), // 1: meshtastic.ChannelSettings
+ (*ModuleSettings)(nil), // 2: meshtastic.ModuleSettings
+ (*Channel)(nil), // 3: meshtastic.Channel
+}
+var file_meshtastic_channel_proto_depIdxs = []int32{
+ 2, // 0: meshtastic.ChannelSettings.module_settings:type_name -> meshtastic.ModuleSettings
+ 1, // 1: meshtastic.Channel.settings:type_name -> meshtastic.ChannelSettings
+ 0, // 2: meshtastic.Channel.role:type_name -> meshtastic.Channel.Role
+ 3, // [3:3] is the sub-list for method output_type
+ 3, // [3:3] is the sub-list for method input_type
+ 3, // [3:3] is the sub-list for extension type_name
+ 3, // [3:3] is the sub-list for extension extendee
+ 0, // [0:3] is the sub-list for field type_name
+}
+
+func init() { file_meshtastic_channel_proto_init() }
+func file_meshtastic_channel_proto_init() {
+ if File_meshtastic_channel_proto != nil {
+ return
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_meshtastic_channel_proto_rawDesc), len(file_meshtastic_channel_proto_rawDesc)),
+ NumEnums: 1,
+ NumMessages: 3,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_meshtastic_channel_proto_goTypes,
+ DependencyIndexes: file_meshtastic_channel_proto_depIdxs,
+ EnumInfos: file_meshtastic_channel_proto_enumTypes,
+ MessageInfos: file_meshtastic_channel_proto_msgTypes,
+ }.Build()
+ File_meshtastic_channel_proto = out.File
+ file_meshtastic_channel_proto_goTypes = nil
+ file_meshtastic_channel_proto_depIdxs = nil
+}
diff --git a/protocol/meshtastic/pb/clientonly.pb.go b/protocol/meshtastic/pb/clientonly.pb.go
new file mode 100644
index 0000000..5bafc18
--- /dev/null
+++ b/protocol/meshtastic/pb/clientonly.pb.go
@@ -0,0 +1,217 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc v6.33.4
+// source: meshtastic/clientonly.proto
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// This abstraction is used to contain any configuration for provisioning a node on any client.
+// It is useful for importing and exporting configurations.
+type DeviceProfile struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Long name for the node
+ LongName *string `protobuf:"bytes,1,opt,name=long_name,json=longName,proto3,oneof" json:"longName,omitempty"`
+ // Short name of the node
+ ShortName *string `protobuf:"bytes,2,opt,name=short_name,json=shortName,proto3,oneof" json:"shortName,omitempty"`
+ // The url of the channels from our node
+ ChannelUrl *string `protobuf:"bytes,3,opt,name=channel_url,json=channelUrl,proto3,oneof" json:"channelUrl,omitempty"`
+ // The Config of the node
+ Config *LocalConfig `protobuf:"bytes,4,opt,name=config,proto3,oneof" json:"config,omitempty"`
+ // The ModuleConfig of the node
+ ModuleConfig *LocalModuleConfig `protobuf:"bytes,5,opt,name=module_config,json=moduleConfig,proto3,oneof" json:"moduleConfig,omitempty"`
+ // Fixed position data
+ FixedPosition *Position `protobuf:"bytes,6,opt,name=fixed_position,json=fixedPosition,proto3,oneof" json:"fixedPosition,omitempty"`
+ // Ringtone for ExternalNotification
+ Ringtone *string `protobuf:"bytes,7,opt,name=ringtone,proto3,oneof" json:"ringtone,omitempty"`
+ // Predefined messages for CannedMessage
+ CannedMessages *string `protobuf:"bytes,8,opt,name=canned_messages,json=cannedMessages,proto3,oneof" json:"cannedMessages,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *DeviceProfile) Reset() {
+ *x = DeviceProfile{}
+ mi := &file_meshtastic_clientonly_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *DeviceProfile) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeviceProfile) ProtoMessage() {}
+
+func (x *DeviceProfile) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_clientonly_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DeviceProfile.ProtoReflect.Descriptor instead.
+func (*DeviceProfile) Descriptor() ([]byte, []int) {
+ return file_meshtastic_clientonly_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *DeviceProfile) GetLongName() string {
+ if x != nil && x.LongName != nil {
+ return *x.LongName
+ }
+ return ""
+}
+
+func (x *DeviceProfile) GetShortName() string {
+ if x != nil && x.ShortName != nil {
+ return *x.ShortName
+ }
+ return ""
+}
+
+func (x *DeviceProfile) GetChannelUrl() string {
+ if x != nil && x.ChannelUrl != nil {
+ return *x.ChannelUrl
+ }
+ return ""
+}
+
+func (x *DeviceProfile) GetConfig() *LocalConfig {
+ if x != nil {
+ return x.Config
+ }
+ return nil
+}
+
+func (x *DeviceProfile) GetModuleConfig() *LocalModuleConfig {
+ if x != nil {
+ return x.ModuleConfig
+ }
+ return nil
+}
+
+func (x *DeviceProfile) GetFixedPosition() *Position {
+ if x != nil {
+ return x.FixedPosition
+ }
+ return nil
+}
+
+func (x *DeviceProfile) GetRingtone() string {
+ if x != nil && x.Ringtone != nil {
+ return *x.Ringtone
+ }
+ return ""
+}
+
+func (x *DeviceProfile) GetCannedMessages() string {
+ if x != nil && x.CannedMessages != nil {
+ return *x.CannedMessages
+ }
+ return ""
+}
+
+var File_meshtastic_clientonly_proto protoreflect.FileDescriptor
+
+const file_meshtastic_clientonly_proto_rawDesc = "" +
+ "\n" +
+ "\x1bmeshtastic/clientonly.proto\x12\n" +
+ "meshtastic\x1a\x1ameshtastic/localonly.proto\x1a\x15meshtastic/mesh.proto\"\x89\x04\n" +
+ "\rDeviceProfile\x12 \n" +
+ "\tlong_name\x18\x01 \x01(\tH\x00R\blongName\x88\x01\x01\x12\"\n" +
+ "\n" +
+ "short_name\x18\x02 \x01(\tH\x01R\tshortName\x88\x01\x01\x12$\n" +
+ "\vchannel_url\x18\x03 \x01(\tH\x02R\n" +
+ "channelUrl\x88\x01\x01\x124\n" +
+ "\x06config\x18\x04 \x01(\v2\x17.meshtastic.LocalConfigH\x03R\x06config\x88\x01\x01\x12G\n" +
+ "\rmodule_config\x18\x05 \x01(\v2\x1d.meshtastic.LocalModuleConfigH\x04R\fmoduleConfig\x88\x01\x01\x12@\n" +
+ "\x0efixed_position\x18\x06 \x01(\v2\x14.meshtastic.PositionH\x05R\rfixedPosition\x88\x01\x01\x12\x1f\n" +
+ "\bringtone\x18\a \x01(\tH\x06R\bringtone\x88\x01\x01\x12,\n" +
+ "\x0fcanned_messages\x18\b \x01(\tH\aR\x0ecannedMessages\x88\x01\x01B\f\n" +
+ "\n" +
+ "_long_nameB\r\n" +
+ "\v_short_nameB\x0e\n" +
+ "\f_channel_urlB\t\n" +
+ "\a_configB\x10\n" +
+ "\x0e_module_configB\x11\n" +
+ "\x0f_fixed_positionB\v\n" +
+ "\t_ringtoneB\x12\n" +
+ "\x10_canned_messagesBf\n" +
+ "\x14org.meshtastic.protoB\x10ClientOnlyProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00b\x06proto3"
+
+var (
+ file_meshtastic_clientonly_proto_rawDescOnce sync.Once
+ file_meshtastic_clientonly_proto_rawDescData []byte
+)
+
+func file_meshtastic_clientonly_proto_rawDescGZIP() []byte {
+ file_meshtastic_clientonly_proto_rawDescOnce.Do(func() {
+ file_meshtastic_clientonly_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_meshtastic_clientonly_proto_rawDesc), len(file_meshtastic_clientonly_proto_rawDesc)))
+ })
+ return file_meshtastic_clientonly_proto_rawDescData
+}
+
+var file_meshtastic_clientonly_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
+var file_meshtastic_clientonly_proto_goTypes = []any{
+ (*DeviceProfile)(nil), // 0: meshtastic.DeviceProfile
+ (*LocalConfig)(nil), // 1: meshtastic.LocalConfig
+ (*LocalModuleConfig)(nil), // 2: meshtastic.LocalModuleConfig
+ (*Position)(nil), // 3: meshtastic.Position
+}
+var file_meshtastic_clientonly_proto_depIdxs = []int32{
+ 1, // 0: meshtastic.DeviceProfile.config:type_name -> meshtastic.LocalConfig
+ 2, // 1: meshtastic.DeviceProfile.module_config:type_name -> meshtastic.LocalModuleConfig
+ 3, // 2: meshtastic.DeviceProfile.fixed_position:type_name -> meshtastic.Position
+ 3, // [3:3] is the sub-list for method output_type
+ 3, // [3:3] is the sub-list for method input_type
+ 3, // [3:3] is the sub-list for extension type_name
+ 3, // [3:3] is the sub-list for extension extendee
+ 0, // [0:3] is the sub-list for field type_name
+}
+
+func init() { file_meshtastic_clientonly_proto_init() }
+func file_meshtastic_clientonly_proto_init() {
+ if File_meshtastic_clientonly_proto != nil {
+ return
+ }
+ file_meshtastic_localonly_proto_init()
+ file_meshtastic_mesh_proto_init()
+ file_meshtastic_clientonly_proto_msgTypes[0].OneofWrappers = []any{}
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_meshtastic_clientonly_proto_rawDesc), len(file_meshtastic_clientonly_proto_rawDesc)),
+ NumEnums: 0,
+ NumMessages: 1,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_meshtastic_clientonly_proto_goTypes,
+ DependencyIndexes: file_meshtastic_clientonly_proto_depIdxs,
+ MessageInfos: file_meshtastic_clientonly_proto_msgTypes,
+ }.Build()
+ File_meshtastic_clientonly_proto = out.File
+ file_meshtastic_clientonly_proto_goTypes = nil
+ file_meshtastic_clientonly_proto_depIdxs = nil
+}
diff --git a/protocol/meshtastic/pb/config.pb.go b/protocol/meshtastic/pb/config.pb.go
new file mode 100644
index 0000000..fe48906
--- /dev/null
+++ b/protocol/meshtastic/pb/config.pb.go
@@ -0,0 +1,3074 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc v6.33.4
+// source: meshtastic/config.proto
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// Defines the device's role on the Mesh network
+type Config_DeviceConfig_Role int32
+
+const (
+ // Description: App connected or stand alone messaging device.
+ // Technical Details: Default Role
+ Config_DeviceConfig_CLIENT Config_DeviceConfig_Role = 0
+ // Description: Device that does not forward packets from other devices.
+ Config_DeviceConfig_CLIENT_MUTE Config_DeviceConfig_Role = 1
+ // Description: Infrastructure node for extending network coverage by relaying messages. Visible in Nodes list.
+ // Technical Details: Mesh packets will prefer to be routed over this node. This node will not be used by client apps.
+ //
+ // The wifi radio and the oled screen will be put to sleep.
+ // This mode may still potentially have higher power usage due to it's preference in message rebroadcasting on the mesh.
+ Config_DeviceConfig_ROUTER Config_DeviceConfig_Role = 2
+ // Deprecated: Marked as deprecated in meshtastic/config.proto.
+ Config_DeviceConfig_ROUTER_CLIENT Config_DeviceConfig_Role = 3
+ // 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
+ //
+ // 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.
+ //
+ // Deprecated: Marked as deprecated in meshtastic/config.proto.
+ Config_DeviceConfig_REPEATER Config_DeviceConfig_Role = 4
+ // Description: Broadcasts GPS position packets as priority.
+ // Technical Details: Position Mesh packets will be prioritized higher and sent more frequently by default.
+ //
+ // When used in conjunction with power.is_power_saving = true, nodes will wake up,
+ // send position, and then sleep for position.position_broadcast_secs seconds.
+ Config_DeviceConfig_TRACKER Config_DeviceConfig_Role = 5
+ // Description: Broadcasts telemetry packets as priority.
+ // Technical Details: Telemetry Mesh packets will be prioritized higher and sent more frequently by default.
+ //
+ // When used in conjunction with power.is_power_saving = true, nodes will wake up,
+ // send environment telemetry, and then sleep for telemetry.environment_update_interval seconds.
+ Config_DeviceConfig_SENSOR Config_DeviceConfig_Role = 6
+ // Description: Optimized for ATAK system communication and reduces routine broadcasts.
+ // Technical Details: Used for nodes dedicated for connection to an ATAK EUD.
+ //
+ // Turns off many of the routine broadcasts to favor CoT packet stream
+ // from the Meshtastic ATAK plugin -> IMeshService -> Node
+ Config_DeviceConfig_TAK Config_DeviceConfig_Role = 7
+ // Description: Device that only broadcasts as needed for stealth or power savings.
+ // Technical Details: Used for nodes that "only speak when spoken to"
+ //
+ // Turns all of the routine broadcasts but allows for ad-hoc communication
+ // Still rebroadcasts, but with local only rebroadcast mode (known meshes only)
+ // Can be used for clandestine operation or to dramatically reduce airtime / power consumption
+ Config_DeviceConfig_CLIENT_HIDDEN Config_DeviceConfig_Role = 8
+ // Description: Broadcasts location as message to default channel regularly for to assist with device recovery.
+ // Technical Details: Used to automatically send a text message to the mesh
+ //
+ // with the current position of the device on a frequent interval:
+ // "I'm lost! Position: lat / long"
+ Config_DeviceConfig_LOST_AND_FOUND Config_DeviceConfig_Role = 9
+ // Description: Enables automatic TAK PLI broadcasts and reduces routine broadcasts.
+ // Technical Details: Turns off many of the routine broadcasts to favor ATAK CoT packet stream
+ //
+ // and automatic TAK PLI (position location information) broadcasts.
+ // Uses position module configuration to determine TAK PLI broadcast interval.
+ Config_DeviceConfig_TAK_TRACKER Config_DeviceConfig_Role = 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.
+ Config_DeviceConfig_ROUTER_LATE Config_DeviceConfig_Role = 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.
+ Config_DeviceConfig_CLIENT_BASE Config_DeviceConfig_Role = 12
+)
+
+// Enum value maps for Config_DeviceConfig_Role.
+var (
+ Config_DeviceConfig_Role_name = map[int32]string{
+ 0: "CLIENT",
+ 1: "CLIENT_MUTE",
+ 2: "ROUTER",
+ 3: "ROUTER_CLIENT",
+ 4: "REPEATER",
+ 5: "TRACKER",
+ 6: "SENSOR",
+ 7: "TAK",
+ 8: "CLIENT_HIDDEN",
+ 9: "LOST_AND_FOUND",
+ 10: "TAK_TRACKER",
+ 11: "ROUTER_LATE",
+ 12: "CLIENT_BASE",
+ }
+ Config_DeviceConfig_Role_value = map[string]int32{
+ "CLIENT": 0,
+ "CLIENT_MUTE": 1,
+ "ROUTER": 2,
+ "ROUTER_CLIENT": 3,
+ "REPEATER": 4,
+ "TRACKER": 5,
+ "SENSOR": 6,
+ "TAK": 7,
+ "CLIENT_HIDDEN": 8,
+ "LOST_AND_FOUND": 9,
+ "TAK_TRACKER": 10,
+ "ROUTER_LATE": 11,
+ "CLIENT_BASE": 12,
+ }
+)
+
+func (x Config_DeviceConfig_Role) Enum() *Config_DeviceConfig_Role {
+ p := new(Config_DeviceConfig_Role)
+ *p = x
+ return p
+}
+
+func (x Config_DeviceConfig_Role) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Config_DeviceConfig_Role) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_config_proto_enumTypes[0].Descriptor()
+}
+
+func (Config_DeviceConfig_Role) Type() protoreflect.EnumType {
+ return &file_meshtastic_config_proto_enumTypes[0]
+}
+
+func (x Config_DeviceConfig_Role) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Config_DeviceConfig_Role.Descriptor instead.
+func (Config_DeviceConfig_Role) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 0, 0}
+}
+
+// Defines the device's behavior for how messages are rebroadcast
+type Config_DeviceConfig_RebroadcastMode int32
+
+const (
+ // Default behavior.
+ // Rebroadcast any observed message, if it was on our private channel or from another mesh with the same lora params.
+ Config_DeviceConfig_ALL Config_DeviceConfig_RebroadcastMode = 0
+ // Same as behavior as ALL but skips packet decoding and simply rebroadcasts them.
+ // Only available in Repeater role. Setting this on any other roles will result in ALL behavior.
+ Config_DeviceConfig_ALL_SKIP_DECODING Config_DeviceConfig_RebroadcastMode = 1
+ // Ignores observed messages from foreign meshes that are open or those which it cannot decrypt.
+ // Only rebroadcasts message on the nodes local primary / secondary channels.
+ Config_DeviceConfig_LOCAL_ONLY Config_DeviceConfig_RebroadcastMode = 2
+ // Ignores observed messages from foreign meshes like LOCAL_ONLY,
+ // but takes it step further by also ignoring messages from nodenums not in the node's known list (NodeDB)
+ Config_DeviceConfig_KNOWN_ONLY Config_DeviceConfig_RebroadcastMode = 3
+ // Only permitted for SENSOR, TRACKER and TAK_TRACKER roles, this will inhibit all rebroadcasts, not unlike CLIENT_MUTE role.
+ Config_DeviceConfig_NONE Config_DeviceConfig_RebroadcastMode = 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.
+ Config_DeviceConfig_CORE_PORTNUMS_ONLY Config_DeviceConfig_RebroadcastMode = 5
+)
+
+// Enum value maps for Config_DeviceConfig_RebroadcastMode.
+var (
+ Config_DeviceConfig_RebroadcastMode_name = map[int32]string{
+ 0: "ALL",
+ 1: "ALL_SKIP_DECODING",
+ 2: "LOCAL_ONLY",
+ 3: "KNOWN_ONLY",
+ 4: "NONE",
+ 5: "CORE_PORTNUMS_ONLY",
+ }
+ Config_DeviceConfig_RebroadcastMode_value = map[string]int32{
+ "ALL": 0,
+ "ALL_SKIP_DECODING": 1,
+ "LOCAL_ONLY": 2,
+ "KNOWN_ONLY": 3,
+ "NONE": 4,
+ "CORE_PORTNUMS_ONLY": 5,
+ }
+)
+
+func (x Config_DeviceConfig_RebroadcastMode) Enum() *Config_DeviceConfig_RebroadcastMode {
+ p := new(Config_DeviceConfig_RebroadcastMode)
+ *p = x
+ return p
+}
+
+func (x Config_DeviceConfig_RebroadcastMode) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Config_DeviceConfig_RebroadcastMode) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_config_proto_enumTypes[1].Descriptor()
+}
+
+func (Config_DeviceConfig_RebroadcastMode) Type() protoreflect.EnumType {
+ return &file_meshtastic_config_proto_enumTypes[1]
+}
+
+func (x Config_DeviceConfig_RebroadcastMode) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Config_DeviceConfig_RebroadcastMode.Descriptor instead.
+func (Config_DeviceConfig_RebroadcastMode) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 0, 1}
+}
+
+// Defines buzzer behavior for audio feedback
+type Config_DeviceConfig_BuzzerMode int32
+
+const (
+ // Default behavior.
+ // Buzzer is enabled for all audio feedback including button presses and alerts.
+ Config_DeviceConfig_ALL_ENABLED Config_DeviceConfig_BuzzerMode = 0
+ // Disabled.
+ // All buzzer audio feedback is disabled.
+ Config_DeviceConfig_DISABLED Config_DeviceConfig_BuzzerMode = 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.
+ Config_DeviceConfig_NOTIFICATIONS_ONLY Config_DeviceConfig_BuzzerMode = 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.
+ Config_DeviceConfig_SYSTEM_ONLY Config_DeviceConfig_BuzzerMode = 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.
+ Config_DeviceConfig_DIRECT_MSG_ONLY Config_DeviceConfig_BuzzerMode = 4
+)
+
+// Enum value maps for Config_DeviceConfig_BuzzerMode.
+var (
+ Config_DeviceConfig_BuzzerMode_name = map[int32]string{
+ 0: "ALL_ENABLED",
+ 1: "DISABLED",
+ 2: "NOTIFICATIONS_ONLY",
+ 3: "SYSTEM_ONLY",
+ 4: "DIRECT_MSG_ONLY",
+ }
+ Config_DeviceConfig_BuzzerMode_value = map[string]int32{
+ "ALL_ENABLED": 0,
+ "DISABLED": 1,
+ "NOTIFICATIONS_ONLY": 2,
+ "SYSTEM_ONLY": 3,
+ "DIRECT_MSG_ONLY": 4,
+ }
+)
+
+func (x Config_DeviceConfig_BuzzerMode) Enum() *Config_DeviceConfig_BuzzerMode {
+ p := new(Config_DeviceConfig_BuzzerMode)
+ *p = x
+ return p
+}
+
+func (x Config_DeviceConfig_BuzzerMode) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Config_DeviceConfig_BuzzerMode) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_config_proto_enumTypes[2].Descriptor()
+}
+
+func (Config_DeviceConfig_BuzzerMode) Type() protoreflect.EnumType {
+ return &file_meshtastic_config_proto_enumTypes[2]
+}
+
+func (x Config_DeviceConfig_BuzzerMode) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Config_DeviceConfig_BuzzerMode.Descriptor instead.
+func (Config_DeviceConfig_BuzzerMode) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 0, 2}
+}
+
+// Bit field of boolean configuration options, indicating which optional
+// fields to include when assembling POSITION messages.
+// Longitude, latitude, altitude, speed, heading, and DOP
+// are always included (also time if GPS-synced)
+// NOTE: the more fields are included, the larger the message will be -
+//
+// leading to longer airtime and a higher risk of packet loss
+type Config_PositionConfig_PositionFlags int32
+
+const (
+ // Required for compilation
+ Config_PositionConfig_UNSET Config_PositionConfig_PositionFlags = 0
+ // Include an altitude value (if available)
+ Config_PositionConfig_ALTITUDE Config_PositionConfig_PositionFlags = 1
+ // Altitude value is MSL
+ Config_PositionConfig_ALTITUDE_MSL Config_PositionConfig_PositionFlags = 2
+ // Include geoidal separation
+ Config_PositionConfig_GEOIDAL_SEPARATION Config_PositionConfig_PositionFlags = 4
+ // Include the DOP value ; PDOP used by default, see below
+ Config_PositionConfig_DOP Config_PositionConfig_PositionFlags = 8
+ // If POS_DOP set, send separate HDOP / VDOP values instead of PDOP
+ Config_PositionConfig_HVDOP Config_PositionConfig_PositionFlags = 16
+ // Include number of "satellites in view"
+ Config_PositionConfig_SATINVIEW Config_PositionConfig_PositionFlags = 32
+ // Include a sequence number incremented per packet
+ Config_PositionConfig_SEQ_NO Config_PositionConfig_PositionFlags = 64
+ // Include positional timestamp (from GPS solution)
+ Config_PositionConfig_TIMESTAMP Config_PositionConfig_PositionFlags = 128
+ // Include positional heading
+ // Intended for use with vehicle not walking speeds
+ // walking speeds are likely to be error prone like the compass
+ Config_PositionConfig_HEADING Config_PositionConfig_PositionFlags = 256
+ // Include positional speed
+ // Intended for use with vehicle not walking speeds
+ // walking speeds are likely to be error prone like the compass
+ Config_PositionConfig_SPEED Config_PositionConfig_PositionFlags = 512
+)
+
+// Enum value maps for Config_PositionConfig_PositionFlags.
+var (
+ Config_PositionConfig_PositionFlags_name = map[int32]string{
+ 0: "UNSET",
+ 1: "ALTITUDE",
+ 2: "ALTITUDE_MSL",
+ 4: "GEOIDAL_SEPARATION",
+ 8: "DOP",
+ 16: "HVDOP",
+ 32: "SATINVIEW",
+ 64: "SEQ_NO",
+ 128: "TIMESTAMP",
+ 256: "HEADING",
+ 512: "SPEED",
+ }
+ Config_PositionConfig_PositionFlags_value = map[string]int32{
+ "UNSET": 0,
+ "ALTITUDE": 1,
+ "ALTITUDE_MSL": 2,
+ "GEOIDAL_SEPARATION": 4,
+ "DOP": 8,
+ "HVDOP": 16,
+ "SATINVIEW": 32,
+ "SEQ_NO": 64,
+ "TIMESTAMP": 128,
+ "HEADING": 256,
+ "SPEED": 512,
+ }
+)
+
+func (x Config_PositionConfig_PositionFlags) Enum() *Config_PositionConfig_PositionFlags {
+ p := new(Config_PositionConfig_PositionFlags)
+ *p = x
+ return p
+}
+
+func (x Config_PositionConfig_PositionFlags) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Config_PositionConfig_PositionFlags) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_config_proto_enumTypes[3].Descriptor()
+}
+
+func (Config_PositionConfig_PositionFlags) Type() protoreflect.EnumType {
+ return &file_meshtastic_config_proto_enumTypes[3]
+}
+
+func (x Config_PositionConfig_PositionFlags) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Config_PositionConfig_PositionFlags.Descriptor instead.
+func (Config_PositionConfig_PositionFlags) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 1, 0}
+}
+
+type Config_PositionConfig_GpsMode int32
+
+const (
+ // GPS is present but disabled
+ Config_PositionConfig_DISABLED Config_PositionConfig_GpsMode = 0
+ // GPS is present and enabled
+ Config_PositionConfig_ENABLED Config_PositionConfig_GpsMode = 1
+ // GPS is not present on the device
+ Config_PositionConfig_NOT_PRESENT Config_PositionConfig_GpsMode = 2
+)
+
+// Enum value maps for Config_PositionConfig_GpsMode.
+var (
+ Config_PositionConfig_GpsMode_name = map[int32]string{
+ 0: "DISABLED",
+ 1: "ENABLED",
+ 2: "NOT_PRESENT",
+ }
+ Config_PositionConfig_GpsMode_value = map[string]int32{
+ "DISABLED": 0,
+ "ENABLED": 1,
+ "NOT_PRESENT": 2,
+ }
+)
+
+func (x Config_PositionConfig_GpsMode) Enum() *Config_PositionConfig_GpsMode {
+ p := new(Config_PositionConfig_GpsMode)
+ *p = x
+ return p
+}
+
+func (x Config_PositionConfig_GpsMode) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Config_PositionConfig_GpsMode) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_config_proto_enumTypes[4].Descriptor()
+}
+
+func (Config_PositionConfig_GpsMode) Type() protoreflect.EnumType {
+ return &file_meshtastic_config_proto_enumTypes[4]
+}
+
+func (x Config_PositionConfig_GpsMode) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Config_PositionConfig_GpsMode.Descriptor instead.
+func (Config_PositionConfig_GpsMode) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 1, 1}
+}
+
+type Config_NetworkConfig_AddressMode int32
+
+const (
+ // obtain ip address via DHCP
+ Config_NetworkConfig_DHCP Config_NetworkConfig_AddressMode = 0
+ // use static ip address
+ Config_NetworkConfig_STATIC Config_NetworkConfig_AddressMode = 1
+)
+
+// Enum value maps for Config_NetworkConfig_AddressMode.
+var (
+ Config_NetworkConfig_AddressMode_name = map[int32]string{
+ 0: "DHCP",
+ 1: "STATIC",
+ }
+ Config_NetworkConfig_AddressMode_value = map[string]int32{
+ "DHCP": 0,
+ "STATIC": 1,
+ }
+)
+
+func (x Config_NetworkConfig_AddressMode) Enum() *Config_NetworkConfig_AddressMode {
+ p := new(Config_NetworkConfig_AddressMode)
+ *p = x
+ return p
+}
+
+func (x Config_NetworkConfig_AddressMode) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Config_NetworkConfig_AddressMode) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_config_proto_enumTypes[5].Descriptor()
+}
+
+func (Config_NetworkConfig_AddressMode) Type() protoreflect.EnumType {
+ return &file_meshtastic_config_proto_enumTypes[5]
+}
+
+func (x Config_NetworkConfig_AddressMode) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Config_NetworkConfig_AddressMode.Descriptor instead.
+func (Config_NetworkConfig_AddressMode) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 3, 0}
+}
+
+// Available flags auxiliary network protocols
+type Config_NetworkConfig_ProtocolFlags int32
+
+const (
+ // Do not broadcast packets over any network protocol
+ Config_NetworkConfig_NO_BROADCAST Config_NetworkConfig_ProtocolFlags = 0
+ // Enable broadcasting packets via UDP over the local network
+ Config_NetworkConfig_UDP_BROADCAST Config_NetworkConfig_ProtocolFlags = 1
+)
+
+// Enum value maps for Config_NetworkConfig_ProtocolFlags.
+var (
+ Config_NetworkConfig_ProtocolFlags_name = map[int32]string{
+ 0: "NO_BROADCAST",
+ 1: "UDP_BROADCAST",
+ }
+ Config_NetworkConfig_ProtocolFlags_value = map[string]int32{
+ "NO_BROADCAST": 0,
+ "UDP_BROADCAST": 1,
+ }
+)
+
+func (x Config_NetworkConfig_ProtocolFlags) Enum() *Config_NetworkConfig_ProtocolFlags {
+ p := new(Config_NetworkConfig_ProtocolFlags)
+ *p = x
+ return p
+}
+
+func (x Config_NetworkConfig_ProtocolFlags) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Config_NetworkConfig_ProtocolFlags) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_config_proto_enumTypes[6].Descriptor()
+}
+
+func (Config_NetworkConfig_ProtocolFlags) Type() protoreflect.EnumType {
+ return &file_meshtastic_config_proto_enumTypes[6]
+}
+
+func (x Config_NetworkConfig_ProtocolFlags) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Config_NetworkConfig_ProtocolFlags.Descriptor instead.
+func (Config_NetworkConfig_ProtocolFlags) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 3, 1}
+}
+
+// Deprecated in 2.7.4: Unused
+type Config_DisplayConfig_DeprecatedGpsCoordinateFormat int32
+
+const (
+ Config_DisplayConfig_UNUSED Config_DisplayConfig_DeprecatedGpsCoordinateFormat = 0
+)
+
+// Enum value maps for Config_DisplayConfig_DeprecatedGpsCoordinateFormat.
+var (
+ Config_DisplayConfig_DeprecatedGpsCoordinateFormat_name = map[int32]string{
+ 0: "UNUSED",
+ }
+ Config_DisplayConfig_DeprecatedGpsCoordinateFormat_value = map[string]int32{
+ "UNUSED": 0,
+ }
+)
+
+func (x Config_DisplayConfig_DeprecatedGpsCoordinateFormat) Enum() *Config_DisplayConfig_DeprecatedGpsCoordinateFormat {
+ p := new(Config_DisplayConfig_DeprecatedGpsCoordinateFormat)
+ *p = x
+ return p
+}
+
+func (x Config_DisplayConfig_DeprecatedGpsCoordinateFormat) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Config_DisplayConfig_DeprecatedGpsCoordinateFormat) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_config_proto_enumTypes[7].Descriptor()
+}
+
+func (Config_DisplayConfig_DeprecatedGpsCoordinateFormat) Type() protoreflect.EnumType {
+ return &file_meshtastic_config_proto_enumTypes[7]
+}
+
+func (x Config_DisplayConfig_DeprecatedGpsCoordinateFormat) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Config_DisplayConfig_DeprecatedGpsCoordinateFormat.Descriptor instead.
+func (Config_DisplayConfig_DeprecatedGpsCoordinateFormat) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 4, 0}
+}
+
+// Unit display preference
+type Config_DisplayConfig_DisplayUnits int32
+
+const (
+ // Metric (Default)
+ Config_DisplayConfig_METRIC Config_DisplayConfig_DisplayUnits = 0
+ // Imperial
+ Config_DisplayConfig_IMPERIAL Config_DisplayConfig_DisplayUnits = 1
+)
+
+// Enum value maps for Config_DisplayConfig_DisplayUnits.
+var (
+ Config_DisplayConfig_DisplayUnits_name = map[int32]string{
+ 0: "METRIC",
+ 1: "IMPERIAL",
+ }
+ Config_DisplayConfig_DisplayUnits_value = map[string]int32{
+ "METRIC": 0,
+ "IMPERIAL": 1,
+ }
+)
+
+func (x Config_DisplayConfig_DisplayUnits) Enum() *Config_DisplayConfig_DisplayUnits {
+ p := new(Config_DisplayConfig_DisplayUnits)
+ *p = x
+ return p
+}
+
+func (x Config_DisplayConfig_DisplayUnits) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Config_DisplayConfig_DisplayUnits) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_config_proto_enumTypes[8].Descriptor()
+}
+
+func (Config_DisplayConfig_DisplayUnits) Type() protoreflect.EnumType {
+ return &file_meshtastic_config_proto_enumTypes[8]
+}
+
+func (x Config_DisplayConfig_DisplayUnits) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Config_DisplayConfig_DisplayUnits.Descriptor instead.
+func (Config_DisplayConfig_DisplayUnits) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 4, 1}
+}
+
+// Override OLED outo detect with this if it fails.
+type Config_DisplayConfig_OledType int32
+
+const (
+ // Default / Autodetect
+ Config_DisplayConfig_OLED_AUTO Config_DisplayConfig_OledType = 0
+ // Default / Autodetect
+ Config_DisplayConfig_OLED_SSD1306 Config_DisplayConfig_OledType = 1
+ // Default / Autodetect
+ Config_DisplayConfig_OLED_SH1106 Config_DisplayConfig_OledType = 2
+ // Can not be auto detected but set by proto. Used for 128x64 screens
+ Config_DisplayConfig_OLED_SH1107 Config_DisplayConfig_OledType = 3
+ // Can not be auto detected but set by proto. Used for 128x128 screens
+ Config_DisplayConfig_OLED_SH1107_128_128 Config_DisplayConfig_OledType = 4
+)
+
+// Enum value maps for Config_DisplayConfig_OledType.
+var (
+ Config_DisplayConfig_OledType_name = map[int32]string{
+ 0: "OLED_AUTO",
+ 1: "OLED_SSD1306",
+ 2: "OLED_SH1106",
+ 3: "OLED_SH1107",
+ 4: "OLED_SH1107_128_128",
+ }
+ Config_DisplayConfig_OledType_value = map[string]int32{
+ "OLED_AUTO": 0,
+ "OLED_SSD1306": 1,
+ "OLED_SH1106": 2,
+ "OLED_SH1107": 3,
+ "OLED_SH1107_128_128": 4,
+ }
+)
+
+func (x Config_DisplayConfig_OledType) Enum() *Config_DisplayConfig_OledType {
+ p := new(Config_DisplayConfig_OledType)
+ *p = x
+ return p
+}
+
+func (x Config_DisplayConfig_OledType) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Config_DisplayConfig_OledType) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_config_proto_enumTypes[9].Descriptor()
+}
+
+func (Config_DisplayConfig_OledType) Type() protoreflect.EnumType {
+ return &file_meshtastic_config_proto_enumTypes[9]
+}
+
+func (x Config_DisplayConfig_OledType) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Config_DisplayConfig_OledType.Descriptor instead.
+func (Config_DisplayConfig_OledType) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 4, 2}
+}
+
+type Config_DisplayConfig_DisplayMode int32
+
+const (
+ // Default. The old style for the 128x64 OLED screen
+ Config_DisplayConfig_DEFAULT Config_DisplayConfig_DisplayMode = 0
+ // Rearrange display elements to cater for bicolor OLED displays
+ Config_DisplayConfig_TWOCOLOR Config_DisplayConfig_DisplayMode = 1
+ // Same as TwoColor, but with inverted top bar. Not so good for Epaper displays
+ Config_DisplayConfig_INVERTED Config_DisplayConfig_DisplayMode = 2
+ // TFT Full Color Displays (not implemented yet)
+ Config_DisplayConfig_COLOR Config_DisplayConfig_DisplayMode = 3
+)
+
+// Enum value maps for Config_DisplayConfig_DisplayMode.
+var (
+ Config_DisplayConfig_DisplayMode_name = map[int32]string{
+ 0: "DEFAULT",
+ 1: "TWOCOLOR",
+ 2: "INVERTED",
+ 3: "COLOR",
+ }
+ Config_DisplayConfig_DisplayMode_value = map[string]int32{
+ "DEFAULT": 0,
+ "TWOCOLOR": 1,
+ "INVERTED": 2,
+ "COLOR": 3,
+ }
+)
+
+func (x Config_DisplayConfig_DisplayMode) Enum() *Config_DisplayConfig_DisplayMode {
+ p := new(Config_DisplayConfig_DisplayMode)
+ *p = x
+ return p
+}
+
+func (x Config_DisplayConfig_DisplayMode) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Config_DisplayConfig_DisplayMode) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_config_proto_enumTypes[10].Descriptor()
+}
+
+func (Config_DisplayConfig_DisplayMode) Type() protoreflect.EnumType {
+ return &file_meshtastic_config_proto_enumTypes[10]
+}
+
+func (x Config_DisplayConfig_DisplayMode) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Config_DisplayConfig_DisplayMode.Descriptor instead.
+func (Config_DisplayConfig_DisplayMode) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 4, 3}
+}
+
+type Config_DisplayConfig_CompassOrientation int32
+
+const (
+ // The compass and the display are in the same orientation.
+ Config_DisplayConfig_DEGREES_0 Config_DisplayConfig_CompassOrientation = 0
+ // Rotate the compass by 90 degrees.
+ Config_DisplayConfig_DEGREES_90 Config_DisplayConfig_CompassOrientation = 1
+ // Rotate the compass by 180 degrees.
+ Config_DisplayConfig_DEGREES_180 Config_DisplayConfig_CompassOrientation = 2
+ // Rotate the compass by 270 degrees.
+ Config_DisplayConfig_DEGREES_270 Config_DisplayConfig_CompassOrientation = 3
+ // Don't rotate the compass, but invert the result.
+ Config_DisplayConfig_DEGREES_0_INVERTED Config_DisplayConfig_CompassOrientation = 4
+ // Rotate the compass by 90 degrees and invert.
+ Config_DisplayConfig_DEGREES_90_INVERTED Config_DisplayConfig_CompassOrientation = 5
+ // Rotate the compass by 180 degrees and invert.
+ Config_DisplayConfig_DEGREES_180_INVERTED Config_DisplayConfig_CompassOrientation = 6
+ // Rotate the compass by 270 degrees and invert.
+ Config_DisplayConfig_DEGREES_270_INVERTED Config_DisplayConfig_CompassOrientation = 7
+)
+
+// Enum value maps for Config_DisplayConfig_CompassOrientation.
+var (
+ Config_DisplayConfig_CompassOrientation_name = map[int32]string{
+ 0: "DEGREES_0",
+ 1: "DEGREES_90",
+ 2: "DEGREES_180",
+ 3: "DEGREES_270",
+ 4: "DEGREES_0_INVERTED",
+ 5: "DEGREES_90_INVERTED",
+ 6: "DEGREES_180_INVERTED",
+ 7: "DEGREES_270_INVERTED",
+ }
+ Config_DisplayConfig_CompassOrientation_value = map[string]int32{
+ "DEGREES_0": 0,
+ "DEGREES_90": 1,
+ "DEGREES_180": 2,
+ "DEGREES_270": 3,
+ "DEGREES_0_INVERTED": 4,
+ "DEGREES_90_INVERTED": 5,
+ "DEGREES_180_INVERTED": 6,
+ "DEGREES_270_INVERTED": 7,
+ }
+)
+
+func (x Config_DisplayConfig_CompassOrientation) Enum() *Config_DisplayConfig_CompassOrientation {
+ p := new(Config_DisplayConfig_CompassOrientation)
+ *p = x
+ return p
+}
+
+func (x Config_DisplayConfig_CompassOrientation) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Config_DisplayConfig_CompassOrientation) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_config_proto_enumTypes[11].Descriptor()
+}
+
+func (Config_DisplayConfig_CompassOrientation) Type() protoreflect.EnumType {
+ return &file_meshtastic_config_proto_enumTypes[11]
+}
+
+func (x Config_DisplayConfig_CompassOrientation) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Config_DisplayConfig_CompassOrientation.Descriptor instead.
+func (Config_DisplayConfig_CompassOrientation) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 4, 4}
+}
+
+type Config_LoRaConfig_RegionCode int32
+
+const (
+ // Region is not set
+ Config_LoRaConfig_UNSET Config_LoRaConfig_RegionCode = 0
+ // United States
+ Config_LoRaConfig_US Config_LoRaConfig_RegionCode = 1
+ // European Union 433mhz
+ Config_LoRaConfig_EU_433 Config_LoRaConfig_RegionCode = 2
+ // European Union 868mhz
+ Config_LoRaConfig_EU_868 Config_LoRaConfig_RegionCode = 3
+ // China
+ Config_LoRaConfig_CN Config_LoRaConfig_RegionCode = 4
+ // Japan
+ Config_LoRaConfig_JP Config_LoRaConfig_RegionCode = 5
+ // Australia / New Zealand
+ Config_LoRaConfig_ANZ Config_LoRaConfig_RegionCode = 6
+ // Korea
+ Config_LoRaConfig_KR Config_LoRaConfig_RegionCode = 7
+ // Taiwan
+ Config_LoRaConfig_TW Config_LoRaConfig_RegionCode = 8
+ // Russia
+ Config_LoRaConfig_RU Config_LoRaConfig_RegionCode = 9
+ // India
+ Config_LoRaConfig_IN Config_LoRaConfig_RegionCode = 10
+ // New Zealand 865mhz
+ Config_LoRaConfig_NZ_865 Config_LoRaConfig_RegionCode = 11
+ // Thailand
+ Config_LoRaConfig_TH Config_LoRaConfig_RegionCode = 12
+ // WLAN Band
+ Config_LoRaConfig_LORA_24 Config_LoRaConfig_RegionCode = 13
+ // Ukraine 433mhz
+ Config_LoRaConfig_UA_433 Config_LoRaConfig_RegionCode = 14
+ // Ukraine 868mhz
+ Config_LoRaConfig_UA_868 Config_LoRaConfig_RegionCode = 15
+ // Malaysia 433mhz
+ Config_LoRaConfig_MY_433 Config_LoRaConfig_RegionCode = 16
+ // Malaysia 919mhz
+ Config_LoRaConfig_MY_919 Config_LoRaConfig_RegionCode = 17
+ // Singapore 923mhz
+ Config_LoRaConfig_SG_923 Config_LoRaConfig_RegionCode = 18
+ // Philippines 433mhz
+ Config_LoRaConfig_PH_433 Config_LoRaConfig_RegionCode = 19
+ // Philippines 868mhz
+ Config_LoRaConfig_PH_868 Config_LoRaConfig_RegionCode = 20
+ // Philippines 915mhz
+ Config_LoRaConfig_PH_915 Config_LoRaConfig_RegionCode = 21
+ // Australia / New Zealand 433MHz
+ Config_LoRaConfig_ANZ_433 Config_LoRaConfig_RegionCode = 22
+ // Kazakhstan 433MHz
+ Config_LoRaConfig_KZ_433 Config_LoRaConfig_RegionCode = 23
+ // Kazakhstan 863MHz
+ Config_LoRaConfig_KZ_863 Config_LoRaConfig_RegionCode = 24
+ // Nepal 865MHz
+ Config_LoRaConfig_NP_865 Config_LoRaConfig_RegionCode = 25
+ // Brazil 902MHz
+ Config_LoRaConfig_BR_902 Config_LoRaConfig_RegionCode = 26
+)
+
+// Enum value maps for Config_LoRaConfig_RegionCode.
+var (
+ Config_LoRaConfig_RegionCode_name = map[int32]string{
+ 0: "UNSET",
+ 1: "US",
+ 2: "EU_433",
+ 3: "EU_868",
+ 4: "CN",
+ 5: "JP",
+ 6: "ANZ",
+ 7: "KR",
+ 8: "TW",
+ 9: "RU",
+ 10: "IN",
+ 11: "NZ_865",
+ 12: "TH",
+ 13: "LORA_24",
+ 14: "UA_433",
+ 15: "UA_868",
+ 16: "MY_433",
+ 17: "MY_919",
+ 18: "SG_923",
+ 19: "PH_433",
+ 20: "PH_868",
+ 21: "PH_915",
+ 22: "ANZ_433",
+ 23: "KZ_433",
+ 24: "KZ_863",
+ 25: "NP_865",
+ 26: "BR_902",
+ }
+ Config_LoRaConfig_RegionCode_value = map[string]int32{
+ "UNSET": 0,
+ "US": 1,
+ "EU_433": 2,
+ "EU_868": 3,
+ "CN": 4,
+ "JP": 5,
+ "ANZ": 6,
+ "KR": 7,
+ "TW": 8,
+ "RU": 9,
+ "IN": 10,
+ "NZ_865": 11,
+ "TH": 12,
+ "LORA_24": 13,
+ "UA_433": 14,
+ "UA_868": 15,
+ "MY_433": 16,
+ "MY_919": 17,
+ "SG_923": 18,
+ "PH_433": 19,
+ "PH_868": 20,
+ "PH_915": 21,
+ "ANZ_433": 22,
+ "KZ_433": 23,
+ "KZ_863": 24,
+ "NP_865": 25,
+ "BR_902": 26,
+ }
+)
+
+func (x Config_LoRaConfig_RegionCode) Enum() *Config_LoRaConfig_RegionCode {
+ p := new(Config_LoRaConfig_RegionCode)
+ *p = x
+ return p
+}
+
+func (x Config_LoRaConfig_RegionCode) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Config_LoRaConfig_RegionCode) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_config_proto_enumTypes[12].Descriptor()
+}
+
+func (Config_LoRaConfig_RegionCode) Type() protoreflect.EnumType {
+ return &file_meshtastic_config_proto_enumTypes[12]
+}
+
+func (x Config_LoRaConfig_RegionCode) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Config_LoRaConfig_RegionCode.Descriptor instead.
+func (Config_LoRaConfig_RegionCode) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 5, 0}
+}
+
+// Standard predefined channel settings
+// Note: these mappings must match ModemPreset Choice in the device code.
+type Config_LoRaConfig_ModemPreset int32
+
+const (
+ // Long Range - Fast
+ Config_LoRaConfig_LONG_FAST Config_LoRaConfig_ModemPreset = 0
+ // Long Range - Slow
+ // Deprecated in 2.7: Unpopular slow preset.
+ //
+ // Deprecated: Marked as deprecated in meshtastic/config.proto.
+ Config_LoRaConfig_LONG_SLOW Config_LoRaConfig_ModemPreset = 1
+ // Very Long Range - Slow
+ // Deprecated in 2.5: Works only with txco and is unusably slow
+ //
+ // Deprecated: Marked as deprecated in meshtastic/config.proto.
+ Config_LoRaConfig_VERY_LONG_SLOW Config_LoRaConfig_ModemPreset = 2
+ // Medium Range - Slow
+ Config_LoRaConfig_MEDIUM_SLOW Config_LoRaConfig_ModemPreset = 3
+ // Medium Range - Fast
+ Config_LoRaConfig_MEDIUM_FAST Config_LoRaConfig_ModemPreset = 4
+ // Short Range - Slow
+ Config_LoRaConfig_SHORT_SLOW Config_LoRaConfig_ModemPreset = 5
+ // Short Range - Fast
+ Config_LoRaConfig_SHORT_FAST Config_LoRaConfig_ModemPreset = 6
+ // Long Range - Moderately Fast
+ Config_LoRaConfig_LONG_MODERATE Config_LoRaConfig_ModemPreset = 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.
+ Config_LoRaConfig_SHORT_TURBO Config_LoRaConfig_ModemPreset = 8
+ // Long Range - Turbo
+ // This preset performs similarly to LongFast, but with 500Khz bandwidth.
+ Config_LoRaConfig_LONG_TURBO Config_LoRaConfig_ModemPreset = 9
+)
+
+// Enum value maps for Config_LoRaConfig_ModemPreset.
+var (
+ Config_LoRaConfig_ModemPreset_name = map[int32]string{
+ 0: "LONG_FAST",
+ 1: "LONG_SLOW",
+ 2: "VERY_LONG_SLOW",
+ 3: "MEDIUM_SLOW",
+ 4: "MEDIUM_FAST",
+ 5: "SHORT_SLOW",
+ 6: "SHORT_FAST",
+ 7: "LONG_MODERATE",
+ 8: "SHORT_TURBO",
+ 9: "LONG_TURBO",
+ }
+ Config_LoRaConfig_ModemPreset_value = map[string]int32{
+ "LONG_FAST": 0,
+ "LONG_SLOW": 1,
+ "VERY_LONG_SLOW": 2,
+ "MEDIUM_SLOW": 3,
+ "MEDIUM_FAST": 4,
+ "SHORT_SLOW": 5,
+ "SHORT_FAST": 6,
+ "LONG_MODERATE": 7,
+ "SHORT_TURBO": 8,
+ "LONG_TURBO": 9,
+ }
+)
+
+func (x Config_LoRaConfig_ModemPreset) Enum() *Config_LoRaConfig_ModemPreset {
+ p := new(Config_LoRaConfig_ModemPreset)
+ *p = x
+ return p
+}
+
+func (x Config_LoRaConfig_ModemPreset) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Config_LoRaConfig_ModemPreset) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_config_proto_enumTypes[13].Descriptor()
+}
+
+func (Config_LoRaConfig_ModemPreset) Type() protoreflect.EnumType {
+ return &file_meshtastic_config_proto_enumTypes[13]
+}
+
+func (x Config_LoRaConfig_ModemPreset) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Config_LoRaConfig_ModemPreset.Descriptor instead.
+func (Config_LoRaConfig_ModemPreset) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 5, 1}
+}
+
+type Config_LoRaConfig_FEM_LNA_Mode int32
+
+const (
+ // FEM_LNA is present but disabled
+ Config_LoRaConfig_DISABLED Config_LoRaConfig_FEM_LNA_Mode = 0
+ // FEM_LNA is present and enabled
+ Config_LoRaConfig_ENABLED Config_LoRaConfig_FEM_LNA_Mode = 1
+ // FEM_LNA is not present on the device
+ Config_LoRaConfig_NOT_PRESENT Config_LoRaConfig_FEM_LNA_Mode = 2
+)
+
+// Enum value maps for Config_LoRaConfig_FEM_LNA_Mode.
+var (
+ Config_LoRaConfig_FEM_LNA_Mode_name = map[int32]string{
+ 0: "DISABLED",
+ 1: "ENABLED",
+ 2: "NOT_PRESENT",
+ }
+ Config_LoRaConfig_FEM_LNA_Mode_value = map[string]int32{
+ "DISABLED": 0,
+ "ENABLED": 1,
+ "NOT_PRESENT": 2,
+ }
+)
+
+func (x Config_LoRaConfig_FEM_LNA_Mode) Enum() *Config_LoRaConfig_FEM_LNA_Mode {
+ p := new(Config_LoRaConfig_FEM_LNA_Mode)
+ *p = x
+ return p
+}
+
+func (x Config_LoRaConfig_FEM_LNA_Mode) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Config_LoRaConfig_FEM_LNA_Mode) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_config_proto_enumTypes[14].Descriptor()
+}
+
+func (Config_LoRaConfig_FEM_LNA_Mode) Type() protoreflect.EnumType {
+ return &file_meshtastic_config_proto_enumTypes[14]
+}
+
+func (x Config_LoRaConfig_FEM_LNA_Mode) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Config_LoRaConfig_FEM_LNA_Mode.Descriptor instead.
+func (Config_LoRaConfig_FEM_LNA_Mode) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 5, 2}
+}
+
+type Config_BluetoothConfig_PairingMode int32
+
+const (
+ // Device generates a random PIN that will be shown on the screen of the device for pairing
+ Config_BluetoothConfig_RANDOM_PIN Config_BluetoothConfig_PairingMode = 0
+ // Device requires a specified fixed PIN for pairing
+ Config_BluetoothConfig_FIXED_PIN Config_BluetoothConfig_PairingMode = 1
+ // Device requires no PIN for pairing
+ Config_BluetoothConfig_NO_PIN Config_BluetoothConfig_PairingMode = 2
+)
+
+// Enum value maps for Config_BluetoothConfig_PairingMode.
+var (
+ Config_BluetoothConfig_PairingMode_name = map[int32]string{
+ 0: "RANDOM_PIN",
+ 1: "FIXED_PIN",
+ 2: "NO_PIN",
+ }
+ Config_BluetoothConfig_PairingMode_value = map[string]int32{
+ "RANDOM_PIN": 0,
+ "FIXED_PIN": 1,
+ "NO_PIN": 2,
+ }
+)
+
+func (x Config_BluetoothConfig_PairingMode) Enum() *Config_BluetoothConfig_PairingMode {
+ p := new(Config_BluetoothConfig_PairingMode)
+ *p = x
+ return p
+}
+
+func (x Config_BluetoothConfig_PairingMode) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Config_BluetoothConfig_PairingMode) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_config_proto_enumTypes[15].Descriptor()
+}
+
+func (Config_BluetoothConfig_PairingMode) Type() protoreflect.EnumType {
+ return &file_meshtastic_config_proto_enumTypes[15]
+}
+
+func (x Config_BluetoothConfig_PairingMode) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Config_BluetoothConfig_PairingMode.Descriptor instead.
+func (Config_BluetoothConfig_PairingMode) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 6, 0}
+}
+
+type Config struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Payload Variant
+ //
+ // Types that are valid to be assigned to PayloadVariant:
+ //
+ // *Config_Device
+ // *Config_Position
+ // *Config_Power
+ // *Config_Network
+ // *Config_Display
+ // *Config_Lora
+ // *Config_Bluetooth
+ // *Config_Security
+ // *Config_Sessionkey
+ // *Config_DeviceUi
+ PayloadVariant isConfig_PayloadVariant `protobuf_oneof:"payload_variant"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Config) Reset() {
+ *x = Config{}
+ mi := &file_meshtastic_config_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Config) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Config) ProtoMessage() {}
+
+func (x *Config) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_config_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Config.ProtoReflect.Descriptor instead.
+func (*Config) Descriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *Config) GetPayloadVariant() isConfig_PayloadVariant {
+ if x != nil {
+ return x.PayloadVariant
+ }
+ return nil
+}
+
+func (x *Config) GetDevice() *Config_DeviceConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*Config_Device); ok {
+ return x.Device
+ }
+ }
+ return nil
+}
+
+func (x *Config) GetPosition() *Config_PositionConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*Config_Position); ok {
+ return x.Position
+ }
+ }
+ return nil
+}
+
+func (x *Config) GetPower() *Config_PowerConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*Config_Power); ok {
+ return x.Power
+ }
+ }
+ return nil
+}
+
+func (x *Config) GetNetwork() *Config_NetworkConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*Config_Network); ok {
+ return x.Network
+ }
+ }
+ return nil
+}
+
+func (x *Config) GetDisplay() *Config_DisplayConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*Config_Display); ok {
+ return x.Display
+ }
+ }
+ return nil
+}
+
+func (x *Config) GetLora() *Config_LoRaConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*Config_Lora); ok {
+ return x.Lora
+ }
+ }
+ return nil
+}
+
+func (x *Config) GetBluetooth() *Config_BluetoothConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*Config_Bluetooth); ok {
+ return x.Bluetooth
+ }
+ }
+ return nil
+}
+
+func (x *Config) GetSecurity() *Config_SecurityConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*Config_Security); ok {
+ return x.Security
+ }
+ }
+ return nil
+}
+
+func (x *Config) GetSessionkey() *Config_SessionkeyConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*Config_Sessionkey); ok {
+ return x.Sessionkey
+ }
+ }
+ return nil
+}
+
+func (x *Config) GetDeviceUi() *DeviceUIConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*Config_DeviceUi); ok {
+ return x.DeviceUi
+ }
+ }
+ return nil
+}
+
+type isConfig_PayloadVariant interface {
+ isConfig_PayloadVariant()
+}
+
+type Config_Device struct {
+ Device *Config_DeviceConfig `protobuf:"bytes,1,opt,name=device,proto3,oneof"`
+}
+
+type Config_Position struct {
+ Position *Config_PositionConfig `protobuf:"bytes,2,opt,name=position,proto3,oneof"`
+}
+
+type Config_Power struct {
+ Power *Config_PowerConfig `protobuf:"bytes,3,opt,name=power,proto3,oneof"`
+}
+
+type Config_Network struct {
+ Network *Config_NetworkConfig `protobuf:"bytes,4,opt,name=network,proto3,oneof"`
+}
+
+type Config_Display struct {
+ Display *Config_DisplayConfig `protobuf:"bytes,5,opt,name=display,proto3,oneof"`
+}
+
+type Config_Lora struct {
+ Lora *Config_LoRaConfig `protobuf:"bytes,6,opt,name=lora,proto3,oneof"`
+}
+
+type Config_Bluetooth struct {
+ Bluetooth *Config_BluetoothConfig `protobuf:"bytes,7,opt,name=bluetooth,proto3,oneof"`
+}
+
+type Config_Security struct {
+ Security *Config_SecurityConfig `protobuf:"bytes,8,opt,name=security,proto3,oneof"`
+}
+
+type Config_Sessionkey struct {
+ Sessionkey *Config_SessionkeyConfig `protobuf:"bytes,9,opt,name=sessionkey,proto3,oneof"`
+}
+
+type Config_DeviceUi struct {
+ DeviceUi *DeviceUIConfig `protobuf:"bytes,10,opt,name=device_ui,json=deviceUi,proto3,oneof"`
+}
+
+func (*Config_Device) isConfig_PayloadVariant() {}
+
+func (*Config_Position) isConfig_PayloadVariant() {}
+
+func (*Config_Power) isConfig_PayloadVariant() {}
+
+func (*Config_Network) isConfig_PayloadVariant() {}
+
+func (*Config_Display) isConfig_PayloadVariant() {}
+
+func (*Config_Lora) isConfig_PayloadVariant() {}
+
+func (*Config_Bluetooth) isConfig_PayloadVariant() {}
+
+func (*Config_Security) isConfig_PayloadVariant() {}
+
+func (*Config_Sessionkey) isConfig_PayloadVariant() {}
+
+func (*Config_DeviceUi) isConfig_PayloadVariant() {}
+
+// Configuration
+type Config_DeviceConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Sets the role of node
+ Role Config_DeviceConfig_Role `protobuf:"varint,1,opt,name=role,proto3,enum=meshtastic.Config_DeviceConfig_Role" json:"role,omitempty"`
+ // Disabling this will disable the SerialConsole by not initilizing the StreamAPI
+ // Moved to SecurityConfig
+ //
+ // Deprecated: Marked as deprecated in meshtastic/config.proto.
+ SerialEnabled bool `protobuf:"varint,2,opt,name=serial_enabled,json=serialEnabled,proto3" json:"serialEnabled,omitempty"`
+ // For boards without a hard wired button, this is the pin number that will be used
+ // Boards that have more than one button can swap the function with this one. defaults to BUTTON_PIN if defined.
+ ButtonGpio uint32 `protobuf:"varint,4,opt,name=button_gpio,json=buttonGpio,proto3" json:"buttonGpio,omitempty"`
+ // For boards without a PWM buzzer, this is the pin number that will be used
+ // Defaults to PIN_BUZZER if defined.
+ BuzzerGpio uint32 `protobuf:"varint,5,opt,name=buzzer_gpio,json=buzzerGpio,proto3" json:"buzzerGpio,omitempty"`
+ // Sets the role of node
+ RebroadcastMode Config_DeviceConfig_RebroadcastMode `protobuf:"varint,6,opt,name=rebroadcast_mode,json=rebroadcastMode,proto3,enum=meshtastic.Config_DeviceConfig_RebroadcastMode" json:"rebroadcastMode,omitempty"`
+ // Send our nodeinfo this often
+ // Defaults to 900 Seconds (15 minutes)
+ NodeInfoBroadcastSecs uint32 `protobuf:"varint,7,opt,name=node_info_broadcast_secs,json=nodeInfoBroadcastSecs,proto3" json:"nodeInfoBroadcastSecs,omitempty"`
+ // Treat double tap interrupt on supported accelerometers as a button press if set to true
+ DoubleTapAsButtonPress bool `protobuf:"varint,8,opt,name=double_tap_as_button_press,json=doubleTapAsButtonPress,proto3" json:"doubleTapAsButtonPress,omitempty"`
+ // 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
+ // Moved to SecurityConfig
+ //
+ // Deprecated: Marked as deprecated in meshtastic/config.proto.
+ IsManaged bool `protobuf:"varint,9,opt,name=is_managed,json=isManaged,proto3" json:"isManaged,omitempty"`
+ // Disables the triple-press of user button to enable or disable GPS
+ DisableTripleClick bool `protobuf:"varint,10,opt,name=disable_triple_click,json=disableTripleClick,proto3" json:"disableTripleClick,omitempty"`
+ // POSIX Timezone definition string from https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv.
+ Tzdef string `protobuf:"bytes,11,opt,name=tzdef,proto3" json:"tzdef,omitempty"`
+ // If true, disable the default blinking LED (LED_PIN) behavior on the device
+ LedHeartbeatDisabled bool `protobuf:"varint,12,opt,name=led_heartbeat_disabled,json=ledHeartbeatDisabled,proto3" json:"ledHeartbeatDisabled,omitempty"`
+ // Controls buzzer behavior for audio feedback
+ // Defaults to ENABLED
+ BuzzerMode Config_DeviceConfig_BuzzerMode `protobuf:"varint,13,opt,name=buzzer_mode,json=buzzerMode,proto3,enum=meshtastic.Config_DeviceConfig_BuzzerMode" json:"buzzerMode,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Config_DeviceConfig) Reset() {
+ *x = Config_DeviceConfig{}
+ mi := &file_meshtastic_config_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Config_DeviceConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Config_DeviceConfig) ProtoMessage() {}
+
+func (x *Config_DeviceConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_config_proto_msgTypes[1]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Config_DeviceConfig.ProtoReflect.Descriptor instead.
+func (*Config_DeviceConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 0}
+}
+
+func (x *Config_DeviceConfig) GetRole() Config_DeviceConfig_Role {
+ if x != nil {
+ return x.Role
+ }
+ return Config_DeviceConfig_CLIENT
+}
+
+// Deprecated: Marked as deprecated in meshtastic/config.proto.
+func (x *Config_DeviceConfig) GetSerialEnabled() bool {
+ if x != nil {
+ return x.SerialEnabled
+ }
+ return false
+}
+
+func (x *Config_DeviceConfig) GetButtonGpio() uint32 {
+ if x != nil {
+ return x.ButtonGpio
+ }
+ return 0
+}
+
+func (x *Config_DeviceConfig) GetBuzzerGpio() uint32 {
+ if x != nil {
+ return x.BuzzerGpio
+ }
+ return 0
+}
+
+func (x *Config_DeviceConfig) GetRebroadcastMode() Config_DeviceConfig_RebroadcastMode {
+ if x != nil {
+ return x.RebroadcastMode
+ }
+ return Config_DeviceConfig_ALL
+}
+
+func (x *Config_DeviceConfig) GetNodeInfoBroadcastSecs() uint32 {
+ if x != nil {
+ return x.NodeInfoBroadcastSecs
+ }
+ return 0
+}
+
+func (x *Config_DeviceConfig) GetDoubleTapAsButtonPress() bool {
+ if x != nil {
+ return x.DoubleTapAsButtonPress
+ }
+ return false
+}
+
+// Deprecated: Marked as deprecated in meshtastic/config.proto.
+func (x *Config_DeviceConfig) GetIsManaged() bool {
+ if x != nil {
+ return x.IsManaged
+ }
+ return false
+}
+
+func (x *Config_DeviceConfig) GetDisableTripleClick() bool {
+ if x != nil {
+ return x.DisableTripleClick
+ }
+ return false
+}
+
+func (x *Config_DeviceConfig) GetTzdef() string {
+ if x != nil {
+ return x.Tzdef
+ }
+ return ""
+}
+
+func (x *Config_DeviceConfig) GetLedHeartbeatDisabled() bool {
+ if x != nil {
+ return x.LedHeartbeatDisabled
+ }
+ return false
+}
+
+func (x *Config_DeviceConfig) GetBuzzerMode() Config_DeviceConfig_BuzzerMode {
+ if x != nil {
+ return x.BuzzerMode
+ }
+ return Config_DeviceConfig_ALL_ENABLED
+}
+
+// Position Config
+type Config_PositionConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // We should send our position this often (but only if it has changed significantly)
+ // Defaults to 15 minutes
+ PositionBroadcastSecs uint32 `protobuf:"varint,1,opt,name=position_broadcast_secs,json=positionBroadcastSecs,proto3" json:"positionBroadcastSecs,omitempty"`
+ // Adaptive position braoadcast, which is now the default.
+ PositionBroadcastSmartEnabled bool `protobuf:"varint,2,opt,name=position_broadcast_smart_enabled,json=positionBroadcastSmartEnabled,proto3" json:"positionBroadcastSmartEnabled,omitempty"`
+ // If set, this node is at a fixed position.
+ // We will generate GPS position updates at the regular interval, but use whatever the last lat/lon/alt we have for the node.
+ // The lat/lon/alt can be set by an internal GPS or with the help of the app.
+ FixedPosition bool `protobuf:"varint,3,opt,name=fixed_position,json=fixedPosition,proto3" json:"fixedPosition,omitempty"`
+ // Is GPS enabled for this node?
+ //
+ // Deprecated: Marked as deprecated in meshtastic/config.proto.
+ GpsEnabled bool `protobuf:"varint,4,opt,name=gps_enabled,json=gpsEnabled,proto3" json:"gpsEnabled,omitempty"`
+ // How often should we try to get GPS position (in seconds)
+ // or zero for the default of once every 30 seconds
+ // or a very large value (maxint) to update only once at boot.
+ GpsUpdateInterval uint32 `protobuf:"varint,5,opt,name=gps_update_interval,json=gpsUpdateInterval,proto3" json:"gpsUpdateInterval,omitempty"`
+ // Deprecated in favor of using smart / regular broadcast intervals as implicit attempt time
+ //
+ // Deprecated: Marked as deprecated in meshtastic/config.proto.
+ GpsAttemptTime uint32 `protobuf:"varint,6,opt,name=gps_attempt_time,json=gpsAttemptTime,proto3" json:"gpsAttemptTime,omitempty"`
+ // Bit field of boolean configuration options for POSITION messages
+ // (bitwise OR of PositionFlags)
+ PositionFlags uint32 `protobuf:"varint,7,opt,name=position_flags,json=positionFlags,proto3" json:"positionFlags,omitempty"`
+ // (Re)define GPS_RX_PIN for your board.
+ RxGpio uint32 `protobuf:"varint,8,opt,name=rx_gpio,json=rxGpio,proto3" json:"rxGpio,omitempty"`
+ // (Re)define GPS_TX_PIN for your board.
+ TxGpio uint32 `protobuf:"varint,9,opt,name=tx_gpio,json=txGpio,proto3" json:"txGpio,omitempty"`
+ // The minimum distance in meters traveled (since the last send) before we can send a position to the mesh if position_broadcast_smart_enabled
+ BroadcastSmartMinimumDistance uint32 `protobuf:"varint,10,opt,name=broadcast_smart_minimum_distance,json=broadcastSmartMinimumDistance,proto3" json:"broadcastSmartMinimumDistance,omitempty"`
+ // The minimum number of seconds (since the last send) before we can send a position to the mesh if position_broadcast_smart_enabled
+ BroadcastSmartMinimumIntervalSecs uint32 `protobuf:"varint,11,opt,name=broadcast_smart_minimum_interval_secs,json=broadcastSmartMinimumIntervalSecs,proto3" json:"broadcastSmartMinimumIntervalSecs,omitempty"`
+ // (Re)define PIN_GPS_EN for your board.
+ GpsEnGpio uint32 `protobuf:"varint,12,opt,name=gps_en_gpio,json=gpsEnGpio,proto3" json:"gpsEnGpio,omitempty"`
+ // Set where GPS is enabled, disabled, or not present
+ GpsMode Config_PositionConfig_GpsMode `protobuf:"varint,13,opt,name=gps_mode,json=gpsMode,proto3,enum=meshtastic.Config_PositionConfig_GpsMode" json:"gpsMode,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Config_PositionConfig) Reset() {
+ *x = Config_PositionConfig{}
+ mi := &file_meshtastic_config_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Config_PositionConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Config_PositionConfig) ProtoMessage() {}
+
+func (x *Config_PositionConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_config_proto_msgTypes[2]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Config_PositionConfig.ProtoReflect.Descriptor instead.
+func (*Config_PositionConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 1}
+}
+
+func (x *Config_PositionConfig) GetPositionBroadcastSecs() uint32 {
+ if x != nil {
+ return x.PositionBroadcastSecs
+ }
+ return 0
+}
+
+func (x *Config_PositionConfig) GetPositionBroadcastSmartEnabled() bool {
+ if x != nil {
+ return x.PositionBroadcastSmartEnabled
+ }
+ return false
+}
+
+func (x *Config_PositionConfig) GetFixedPosition() bool {
+ if x != nil {
+ return x.FixedPosition
+ }
+ return false
+}
+
+// Deprecated: Marked as deprecated in meshtastic/config.proto.
+func (x *Config_PositionConfig) GetGpsEnabled() bool {
+ if x != nil {
+ return x.GpsEnabled
+ }
+ return false
+}
+
+func (x *Config_PositionConfig) GetGpsUpdateInterval() uint32 {
+ if x != nil {
+ return x.GpsUpdateInterval
+ }
+ return 0
+}
+
+// Deprecated: Marked as deprecated in meshtastic/config.proto.
+func (x *Config_PositionConfig) GetGpsAttemptTime() uint32 {
+ if x != nil {
+ return x.GpsAttemptTime
+ }
+ return 0
+}
+
+func (x *Config_PositionConfig) GetPositionFlags() uint32 {
+ if x != nil {
+ return x.PositionFlags
+ }
+ return 0
+}
+
+func (x *Config_PositionConfig) GetRxGpio() uint32 {
+ if x != nil {
+ return x.RxGpio
+ }
+ return 0
+}
+
+func (x *Config_PositionConfig) GetTxGpio() uint32 {
+ if x != nil {
+ return x.TxGpio
+ }
+ return 0
+}
+
+func (x *Config_PositionConfig) GetBroadcastSmartMinimumDistance() uint32 {
+ if x != nil {
+ return x.BroadcastSmartMinimumDistance
+ }
+ return 0
+}
+
+func (x *Config_PositionConfig) GetBroadcastSmartMinimumIntervalSecs() uint32 {
+ if x != nil {
+ return x.BroadcastSmartMinimumIntervalSecs
+ }
+ return 0
+}
+
+func (x *Config_PositionConfig) GetGpsEnGpio() uint32 {
+ if x != nil {
+ return x.GpsEnGpio
+ }
+ return 0
+}
+
+func (x *Config_PositionConfig) GetGpsMode() Config_PositionConfig_GpsMode {
+ if x != nil {
+ return x.GpsMode
+ }
+ return Config_PositionConfig_DISABLED
+}
+
+// Power Config\
+// See [Power Config](/docs/settings/config/power) for additional power config details.
+type Config_PowerConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Description: Will sleep everything as much as possible, for the tracker and sensor role this will also include the lora radio.
+ // Don't use this setting if you want to use your device with the phone apps or are using a device without a user button.
+ // Technical Details: Works for ESP32 devices and NRF52 devices in the Sensor or Tracker roles
+ IsPowerSaving bool `protobuf:"varint,1,opt,name=is_power_saving,json=isPowerSaving,proto3" json:"isPowerSaving,omitempty"`
+ // Description: If non-zero, the device will fully power off this many seconds after external power is removed.
+ OnBatteryShutdownAfterSecs uint32 `protobuf:"varint,2,opt,name=on_battery_shutdown_after_secs,json=onBatteryShutdownAfterSecs,proto3" json:"onBatteryShutdownAfterSecs,omitempty"`
+ // Ratio of voltage divider for battery pin eg. 3.20 (R1=100k, R2=220k)
+ // Overrides the ADC_MULTIPLIER defined in variant for battery voltage calculation.
+ // https://meshtastic.org/docs/configuration/radio/power/#adc-multiplier-override
+ // Should be set to floating point value between 2 and 6
+ AdcMultiplierOverride float32 `protobuf:"fixed32,3,opt,name=adc_multiplier_override,json=adcMultiplierOverride,proto3" json:"adcMultiplierOverride,omitempty"`
+ // Description: The number of seconds for to wait before turning off BLE in No Bluetooth states
+ // Technical Details: ESP32 Only 0 for default of 1 minute
+ WaitBluetoothSecs uint32 `protobuf:"varint,4,opt,name=wait_bluetooth_secs,json=waitBluetoothSecs,proto3" json:"waitBluetoothSecs,omitempty"`
+ // Super Deep Sleep Seconds
+ // While in Light Sleep if mesh_sds_timeout_secs is exceeded we will lower into super deep sleep
+ // for this value (default 1 year) or a button press
+ // 0 for default of one year
+ SdsSecs uint32 `protobuf:"varint,6,opt,name=sds_secs,json=sdsSecs,proto3" json:"sdsSecs,omitempty"`
+ // Description: In light sleep the CPU is suspended, LoRa radio is on, BLE is off an GPS is on
+ // Technical Details: ESP32 Only 0 for default of 300
+ LsSecs uint32 `protobuf:"varint,7,opt,name=ls_secs,json=lsSecs,proto3" json:"lsSecs,omitempty"`
+ // Description: While in light sleep when we receive packets on the LoRa radio we will wake and handle them and stay awake in no BLE mode for this value
+ // Technical Details: ESP32 Only 0 for default of 10 seconds
+ MinWakeSecs uint32 `protobuf:"varint,8,opt,name=min_wake_secs,json=minWakeSecs,proto3" json:"minWakeSecs,omitempty"`
+ // I2C address of INA_2XX to use for reading device battery voltage
+ DeviceBatteryInaAddress uint32 `protobuf:"varint,9,opt,name=device_battery_ina_address,json=deviceBatteryInaAddress,proto3" json:"deviceBatteryInaAddress,omitempty"`
+ // 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.
+ PowermonEnables uint64 `protobuf:"varint,32,opt,name=powermon_enables,json=powermonEnables,proto3" json:"powermonEnables,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Config_PowerConfig) Reset() {
+ *x = Config_PowerConfig{}
+ mi := &file_meshtastic_config_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Config_PowerConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Config_PowerConfig) ProtoMessage() {}
+
+func (x *Config_PowerConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_config_proto_msgTypes[3]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Config_PowerConfig.ProtoReflect.Descriptor instead.
+func (*Config_PowerConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 2}
+}
+
+func (x *Config_PowerConfig) GetIsPowerSaving() bool {
+ if x != nil {
+ return x.IsPowerSaving
+ }
+ return false
+}
+
+func (x *Config_PowerConfig) GetOnBatteryShutdownAfterSecs() uint32 {
+ if x != nil {
+ return x.OnBatteryShutdownAfterSecs
+ }
+ return 0
+}
+
+func (x *Config_PowerConfig) GetAdcMultiplierOverride() float32 {
+ if x != nil {
+ return x.AdcMultiplierOverride
+ }
+ return 0
+}
+
+func (x *Config_PowerConfig) GetWaitBluetoothSecs() uint32 {
+ if x != nil {
+ return x.WaitBluetoothSecs
+ }
+ return 0
+}
+
+func (x *Config_PowerConfig) GetSdsSecs() uint32 {
+ if x != nil {
+ return x.SdsSecs
+ }
+ return 0
+}
+
+func (x *Config_PowerConfig) GetLsSecs() uint32 {
+ if x != nil {
+ return x.LsSecs
+ }
+ return 0
+}
+
+func (x *Config_PowerConfig) GetMinWakeSecs() uint32 {
+ if x != nil {
+ return x.MinWakeSecs
+ }
+ return 0
+}
+
+func (x *Config_PowerConfig) GetDeviceBatteryInaAddress() uint32 {
+ if x != nil {
+ return x.DeviceBatteryInaAddress
+ }
+ return 0
+}
+
+func (x *Config_PowerConfig) GetPowermonEnables() uint64 {
+ if x != nil {
+ return x.PowermonEnables
+ }
+ return 0
+}
+
+// Network Config
+type Config_NetworkConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Enable WiFi (disables Bluetooth)
+ WifiEnabled bool `protobuf:"varint,1,opt,name=wifi_enabled,json=wifiEnabled,proto3" json:"wifiEnabled,omitempty"`
+ // If set, this node will try to join the specified wifi network and
+ // acquire an address via DHCP
+ WifiSsid string `protobuf:"bytes,3,opt,name=wifi_ssid,json=wifiSsid,proto3" json:"wifiSsid,omitempty"`
+ // If set, will be use to authenticate to the named wifi
+ WifiPsk string `protobuf:"bytes,4,opt,name=wifi_psk,json=wifiPsk,proto3" json:"wifiPsk,omitempty"`
+ // NTP server to use if WiFi is conneced, defaults to `meshtastic.pool.ntp.org`
+ NtpServer string `protobuf:"bytes,5,opt,name=ntp_server,json=ntpServer,proto3" json:"ntpServer,omitempty"`
+ // Enable Ethernet
+ EthEnabled bool `protobuf:"varint,6,opt,name=eth_enabled,json=ethEnabled,proto3" json:"ethEnabled,omitempty"`
+ // acquire an address via DHCP or assign static
+ AddressMode Config_NetworkConfig_AddressMode `protobuf:"varint,7,opt,name=address_mode,json=addressMode,proto3,enum=meshtastic.Config_NetworkConfig_AddressMode" json:"addressMode,omitempty"`
+ // struct to keep static address
+ Ipv4Config *Config_NetworkConfig_IpV4Config `protobuf:"bytes,8,opt,name=ipv4_config,json=ipv4Config,proto3" json:"ipv4Config,omitempty"`
+ // rsyslog Server and Port
+ RsyslogServer string `protobuf:"bytes,9,opt,name=rsyslog_server,json=rsyslogServer,proto3" json:"rsyslogServer,omitempty"`
+ // Flags for enabling/disabling network protocols
+ EnabledProtocols uint32 `protobuf:"varint,10,opt,name=enabled_protocols,json=enabledProtocols,proto3" json:"enabledProtocols,omitempty"`
+ // Enable/Disable ipv6 support
+ Ipv6Enabled bool `protobuf:"varint,11,opt,name=ipv6_enabled,json=ipv6Enabled,proto3" json:"ipv6Enabled,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Config_NetworkConfig) Reset() {
+ *x = Config_NetworkConfig{}
+ mi := &file_meshtastic_config_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Config_NetworkConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Config_NetworkConfig) ProtoMessage() {}
+
+func (x *Config_NetworkConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_config_proto_msgTypes[4]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Config_NetworkConfig.ProtoReflect.Descriptor instead.
+func (*Config_NetworkConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 3}
+}
+
+func (x *Config_NetworkConfig) GetWifiEnabled() bool {
+ if x != nil {
+ return x.WifiEnabled
+ }
+ return false
+}
+
+func (x *Config_NetworkConfig) GetWifiSsid() string {
+ if x != nil {
+ return x.WifiSsid
+ }
+ return ""
+}
+
+func (x *Config_NetworkConfig) GetWifiPsk() string {
+ if x != nil {
+ return x.WifiPsk
+ }
+ return ""
+}
+
+func (x *Config_NetworkConfig) GetNtpServer() string {
+ if x != nil {
+ return x.NtpServer
+ }
+ return ""
+}
+
+func (x *Config_NetworkConfig) GetEthEnabled() bool {
+ if x != nil {
+ return x.EthEnabled
+ }
+ return false
+}
+
+func (x *Config_NetworkConfig) GetAddressMode() Config_NetworkConfig_AddressMode {
+ if x != nil {
+ return x.AddressMode
+ }
+ return Config_NetworkConfig_DHCP
+}
+
+func (x *Config_NetworkConfig) GetIpv4Config() *Config_NetworkConfig_IpV4Config {
+ if x != nil {
+ return x.Ipv4Config
+ }
+ return nil
+}
+
+func (x *Config_NetworkConfig) GetRsyslogServer() string {
+ if x != nil {
+ return x.RsyslogServer
+ }
+ return ""
+}
+
+func (x *Config_NetworkConfig) GetEnabledProtocols() uint32 {
+ if x != nil {
+ return x.EnabledProtocols
+ }
+ return 0
+}
+
+func (x *Config_NetworkConfig) GetIpv6Enabled() bool {
+ if x != nil {
+ return x.Ipv6Enabled
+ }
+ return false
+}
+
+// Display Config
+type Config_DisplayConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Number of seconds the screen stays on after pressing the user button or receiving a message
+ // 0 for default of one minute MAXUINT for always on
+ ScreenOnSecs uint32 `protobuf:"varint,1,opt,name=screen_on_secs,json=screenOnSecs,proto3" json:"screenOnSecs,omitempty"`
+ // Deprecated in 2.7.4: Unused
+ // How the GPS coordinates are formatted on the OLED screen.
+ //
+ // Deprecated: Marked as deprecated in meshtastic/config.proto.
+ GpsFormat Config_DisplayConfig_DeprecatedGpsCoordinateFormat `protobuf:"varint,2,opt,name=gps_format,json=gpsFormat,proto3,enum=meshtastic.Config_DisplayConfig_DeprecatedGpsCoordinateFormat" json:"gpsFormat,omitempty"`
+ // Automatically toggles to the next page on the screen like a carousel, based the specified interval in seconds.
+ // Potentially useful for devices without user buttons.
+ AutoScreenCarouselSecs uint32 `protobuf:"varint,3,opt,name=auto_screen_carousel_secs,json=autoScreenCarouselSecs,proto3" json:"autoScreenCarouselSecs,omitempty"`
+ // If this is set, the displayed compass will always point north. if unset, the old behaviour
+ // (top of display is heading direction) is used.
+ //
+ // Deprecated: Marked as deprecated in meshtastic/config.proto.
+ CompassNorthTop bool `protobuf:"varint,4,opt,name=compass_north_top,json=compassNorthTop,proto3" json:"compassNorthTop,omitempty"`
+ // Flip screen vertically, for cases that mount the screen upside down
+ FlipScreen bool `protobuf:"varint,5,opt,name=flip_screen,json=flipScreen,proto3" json:"flipScreen,omitempty"`
+ // Perferred display units
+ Units Config_DisplayConfig_DisplayUnits `protobuf:"varint,6,opt,name=units,proto3,enum=meshtastic.Config_DisplayConfig_DisplayUnits" json:"units,omitempty"`
+ // Override auto-detect in screen
+ Oled Config_DisplayConfig_OledType `protobuf:"varint,7,opt,name=oled,proto3,enum=meshtastic.Config_DisplayConfig_OledType" json:"oled,omitempty"`
+ // Display Mode
+ Displaymode Config_DisplayConfig_DisplayMode `protobuf:"varint,8,opt,name=displaymode,proto3,enum=meshtastic.Config_DisplayConfig_DisplayMode" json:"displaymode,omitempty"`
+ // Print first line in pseudo-bold? FALSE is original style, TRUE is bold
+ HeadingBold bool `protobuf:"varint,9,opt,name=heading_bold,json=headingBold,proto3" json:"headingBold,omitempty"`
+ // Should we wake the screen up on accelerometer detected motion or tap
+ WakeOnTapOrMotion bool `protobuf:"varint,10,opt,name=wake_on_tap_or_motion,json=wakeOnTapOrMotion,proto3" json:"wakeOnTapOrMotion,omitempty"`
+ // Indicates how to rotate or invert the compass output to accurate display on the display.
+ CompassOrientation Config_DisplayConfig_CompassOrientation `protobuf:"varint,11,opt,name=compass_orientation,json=compassOrientation,proto3,enum=meshtastic.Config_DisplayConfig_CompassOrientation" json:"compassOrientation,omitempty"`
+ // 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.
+ Use_12HClock bool `protobuf:"varint,12,opt,name=use_12h_clock,json=use12hClock,proto3" json:"use12hClock,omitempty"`
+ // If false (default), the device will use short names for various display screens.
+ // If true, node names will show in long format
+ UseLongNodeName bool `protobuf:"varint,13,opt,name=use_long_node_name,json=useLongNodeName,proto3" json:"useLongNodeName,omitempty"`
+ // If true, the device will display message bubbles on screen.
+ EnableMessageBubbles bool `protobuf:"varint,14,opt,name=enable_message_bubbles,json=enableMessageBubbles,proto3" json:"enableMessageBubbles,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Config_DisplayConfig) Reset() {
+ *x = Config_DisplayConfig{}
+ mi := &file_meshtastic_config_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Config_DisplayConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Config_DisplayConfig) ProtoMessage() {}
+
+func (x *Config_DisplayConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_config_proto_msgTypes[5]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Config_DisplayConfig.ProtoReflect.Descriptor instead.
+func (*Config_DisplayConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 4}
+}
+
+func (x *Config_DisplayConfig) GetScreenOnSecs() uint32 {
+ if x != nil {
+ return x.ScreenOnSecs
+ }
+ return 0
+}
+
+// Deprecated: Marked as deprecated in meshtastic/config.proto.
+func (x *Config_DisplayConfig) GetGpsFormat() Config_DisplayConfig_DeprecatedGpsCoordinateFormat {
+ if x != nil {
+ return x.GpsFormat
+ }
+ return Config_DisplayConfig_UNUSED
+}
+
+func (x *Config_DisplayConfig) GetAutoScreenCarouselSecs() uint32 {
+ if x != nil {
+ return x.AutoScreenCarouselSecs
+ }
+ return 0
+}
+
+// Deprecated: Marked as deprecated in meshtastic/config.proto.
+func (x *Config_DisplayConfig) GetCompassNorthTop() bool {
+ if x != nil {
+ return x.CompassNorthTop
+ }
+ return false
+}
+
+func (x *Config_DisplayConfig) GetFlipScreen() bool {
+ if x != nil {
+ return x.FlipScreen
+ }
+ return false
+}
+
+func (x *Config_DisplayConfig) GetUnits() Config_DisplayConfig_DisplayUnits {
+ if x != nil {
+ return x.Units
+ }
+ return Config_DisplayConfig_METRIC
+}
+
+func (x *Config_DisplayConfig) GetOled() Config_DisplayConfig_OledType {
+ if x != nil {
+ return x.Oled
+ }
+ return Config_DisplayConfig_OLED_AUTO
+}
+
+func (x *Config_DisplayConfig) GetDisplaymode() Config_DisplayConfig_DisplayMode {
+ if x != nil {
+ return x.Displaymode
+ }
+ return Config_DisplayConfig_DEFAULT
+}
+
+func (x *Config_DisplayConfig) GetHeadingBold() bool {
+ if x != nil {
+ return x.HeadingBold
+ }
+ return false
+}
+
+func (x *Config_DisplayConfig) GetWakeOnTapOrMotion() bool {
+ if x != nil {
+ return x.WakeOnTapOrMotion
+ }
+ return false
+}
+
+func (x *Config_DisplayConfig) GetCompassOrientation() Config_DisplayConfig_CompassOrientation {
+ if x != nil {
+ return x.CompassOrientation
+ }
+ return Config_DisplayConfig_DEGREES_0
+}
+
+func (x *Config_DisplayConfig) GetUse_12HClock() bool {
+ if x != nil {
+ return x.Use_12HClock
+ }
+ return false
+}
+
+func (x *Config_DisplayConfig) GetUseLongNodeName() bool {
+ if x != nil {
+ return x.UseLongNodeName
+ }
+ return false
+}
+
+func (x *Config_DisplayConfig) GetEnableMessageBubbles() bool {
+ if x != nil {
+ return x.EnableMessageBubbles
+ }
+ return false
+}
+
+// Lora Config
+type Config_LoRaConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // When enabled, the `modem_preset` fields will be adhered to, else the `bandwidth`/`spread_factor`/`coding_rate`
+ // will be taked from their respective manually defined fields
+ UsePreset bool `protobuf:"varint,1,opt,name=use_preset,json=usePreset,proto3" json:"usePreset,omitempty"`
+ // Either modem_config or bandwidth/spreading/coding will be specified - NOT BOTH.
+ // As a heuristic: If bandwidth is specified, do not use modem_config.
+ // Because protobufs take ZERO space when the value is zero this works out nicely.
+ // This value is replaced by bandwidth/spread_factor/coding_rate.
+ // If you'd like to experiment with other options add them to MeshRadio.cpp in the device code.
+ ModemPreset Config_LoRaConfig_ModemPreset `protobuf:"varint,2,opt,name=modem_preset,json=modemPreset,proto3,enum=meshtastic.Config_LoRaConfig_ModemPreset" json:"modemPreset,omitempty"`
+ // Bandwidth in MHz
+ // Certain bandwidth numbers are 'special' and will be converted to the
+ // appropriate floating point value: 31 -> 31.25MHz
+ Bandwidth uint32 `protobuf:"varint,3,opt,name=bandwidth,proto3" json:"bandwidth,omitempty"`
+ // A number from 7 to 12.
+ // Indicates number of chirps per symbol as 1< 7 results in the default
+ HopLimit uint32 `protobuf:"varint,8,opt,name=hop_limit,json=hopLimit,proto3" json:"hopLimit,omitempty"`
+ // Disable TX from the LoRa radio. Useful for hot-swapping antennas and other tests.
+ // Defaults to false
+ TxEnabled bool `protobuf:"varint,9,opt,name=tx_enabled,json=txEnabled,proto3" json:"txEnabled,omitempty"`
+ // If zero, then use default max legal continuous power (ie. something that won't
+ // burn out the radio hardware)
+ // In most cases you should use zero here.
+ // Units are in dBm.
+ TxPower int32 `protobuf:"varint,10,opt,name=tx_power,json=txPower,proto3" json:"txPower,omitempty"`
+ // This controls the actual hardware frequency the radio transmits on.
+ // Most users should never need to be exposed to this field/concept.
+ // A channel number between 1 and NUM_CHANNELS (whatever the max is in the current region).
+ // If ZERO then the rule is "use the old channel name hash based
+ // algorithm to derive the channel number")
+ // If using the hash algorithm the channel number will be: hash(channel_name) %
+ // NUM_CHANNELS (Where num channels depends on the regulatory region).
+ ChannelNum uint32 `protobuf:"varint,11,opt,name=channel_num,json=channelNum,proto3" json:"channelNum,omitempty"`
+ // If true, duty cycle limits will be exceeded and thus you're possibly not following
+ // the local regulations if you're not a HAM.
+ // Has no effect if the duty cycle of the used region is 100%.
+ OverrideDutyCycle bool `protobuf:"varint,12,opt,name=override_duty_cycle,json=overrideDutyCycle,proto3" json:"overrideDutyCycle,omitempty"`
+ // If true, sets RX boosted gain mode on SX126X based radios
+ Sx126XRxBoostedGain bool `protobuf:"varint,13,opt,name=sx126x_rx_boosted_gain,json=sx126xRxBoostedGain,proto3" json:"sx126xRxBoostedGain,omitempty"`
+ // This parameter is for advanced users and licensed HAM radio operators.
+ // Ignore Channel Calculation and use this frequency instead. The frequency_offset
+ // will still be applied. This will allow you to use out-of-band frequencies.
+ // Please respect your local laws and regulations. If you are a HAM, make sure you
+ // enable HAM mode and turn off encryption.
+ OverrideFrequency float32 `protobuf:"fixed32,14,opt,name=override_frequency,json=overrideFrequency,proto3" json:"overrideFrequency,omitempty"`
+ // If true, disable the build-in PA FAN using pin define in RF95_FAN_EN.
+ PaFanDisabled bool `protobuf:"varint,15,opt,name=pa_fan_disabled,json=paFanDisabled,proto3" json:"paFanDisabled,omitempty"`
+ // 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
+ // in ignore_incoming will have packets they send dropped on receive (by router.cpp)
+ IgnoreIncoming []uint32 `protobuf:"varint,103,rep,packed,name=ignore_incoming,json=ignoreIncoming,proto3" json:"ignoreIncoming,omitempty"`
+ // If true, the device will not process any packets received via LoRa that passed via MQTT anywhere on the path towards it.
+ IgnoreMqtt bool `protobuf:"varint,104,opt,name=ignore_mqtt,json=ignoreMqtt,proto3" json:"ignoreMqtt,omitempty"`
+ // Sets the ok_to_mqtt bit on outgoing packets
+ ConfigOkToMqtt bool `protobuf:"varint,105,opt,name=config_ok_to_mqtt,json=configOkToMqtt,proto3" json:"configOkToMqtt,omitempty"`
+ // Set where LORA FEM is enabled, disabled, or not present
+ FemLnaMode Config_LoRaConfig_FEM_LNA_Mode `protobuf:"varint,106,opt,name=fem_lna_mode,json=femLnaMode,proto3,enum=meshtastic.Config_LoRaConfig_FEM_LNA_Mode" json:"femLnaMode,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Config_LoRaConfig) Reset() {
+ *x = Config_LoRaConfig{}
+ mi := &file_meshtastic_config_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Config_LoRaConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Config_LoRaConfig) ProtoMessage() {}
+
+func (x *Config_LoRaConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_config_proto_msgTypes[6]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Config_LoRaConfig.ProtoReflect.Descriptor instead.
+func (*Config_LoRaConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 5}
+}
+
+func (x *Config_LoRaConfig) GetUsePreset() bool {
+ if x != nil {
+ return x.UsePreset
+ }
+ return false
+}
+
+func (x *Config_LoRaConfig) GetModemPreset() Config_LoRaConfig_ModemPreset {
+ if x != nil {
+ return x.ModemPreset
+ }
+ return Config_LoRaConfig_LONG_FAST
+}
+
+func (x *Config_LoRaConfig) GetBandwidth() uint32 {
+ if x != nil {
+ return x.Bandwidth
+ }
+ return 0
+}
+
+func (x *Config_LoRaConfig) GetSpreadFactor() uint32 {
+ if x != nil {
+ return x.SpreadFactor
+ }
+ return 0
+}
+
+func (x *Config_LoRaConfig) GetCodingRate() uint32 {
+ if x != nil {
+ return x.CodingRate
+ }
+ return 0
+}
+
+func (x *Config_LoRaConfig) GetFrequencyOffset() float32 {
+ if x != nil {
+ return x.FrequencyOffset
+ }
+ return 0
+}
+
+func (x *Config_LoRaConfig) GetRegion() Config_LoRaConfig_RegionCode {
+ if x != nil {
+ return x.Region
+ }
+ return Config_LoRaConfig_UNSET
+}
+
+func (x *Config_LoRaConfig) GetHopLimit() uint32 {
+ if x != nil {
+ return x.HopLimit
+ }
+ return 0
+}
+
+func (x *Config_LoRaConfig) GetTxEnabled() bool {
+ if x != nil {
+ return x.TxEnabled
+ }
+ return false
+}
+
+func (x *Config_LoRaConfig) GetTxPower() int32 {
+ if x != nil {
+ return x.TxPower
+ }
+ return 0
+}
+
+func (x *Config_LoRaConfig) GetChannelNum() uint32 {
+ if x != nil {
+ return x.ChannelNum
+ }
+ return 0
+}
+
+func (x *Config_LoRaConfig) GetOverrideDutyCycle() bool {
+ if x != nil {
+ return x.OverrideDutyCycle
+ }
+ return false
+}
+
+func (x *Config_LoRaConfig) GetSx126XRxBoostedGain() bool {
+ if x != nil {
+ return x.Sx126XRxBoostedGain
+ }
+ return false
+}
+
+func (x *Config_LoRaConfig) GetOverrideFrequency() float32 {
+ if x != nil {
+ return x.OverrideFrequency
+ }
+ return 0
+}
+
+func (x *Config_LoRaConfig) GetPaFanDisabled() bool {
+ if x != nil {
+ return x.PaFanDisabled
+ }
+ return false
+}
+
+func (x *Config_LoRaConfig) GetIgnoreIncoming() []uint32 {
+ if x != nil {
+ return x.IgnoreIncoming
+ }
+ return nil
+}
+
+func (x *Config_LoRaConfig) GetIgnoreMqtt() bool {
+ if x != nil {
+ return x.IgnoreMqtt
+ }
+ return false
+}
+
+func (x *Config_LoRaConfig) GetConfigOkToMqtt() bool {
+ if x != nil {
+ return x.ConfigOkToMqtt
+ }
+ return false
+}
+
+func (x *Config_LoRaConfig) GetFemLnaMode() Config_LoRaConfig_FEM_LNA_Mode {
+ if x != nil {
+ return x.FemLnaMode
+ }
+ return Config_LoRaConfig_DISABLED
+}
+
+type Config_BluetoothConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Enable Bluetooth on the device
+ Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
+ // Determines the pairing strategy for the device
+ Mode Config_BluetoothConfig_PairingMode `protobuf:"varint,2,opt,name=mode,proto3,enum=meshtastic.Config_BluetoothConfig_PairingMode" json:"mode,omitempty"`
+ // Specified PIN for PairingMode.FixedPin
+ FixedPin uint32 `protobuf:"varint,3,opt,name=fixed_pin,json=fixedPin,proto3" json:"fixedPin,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Config_BluetoothConfig) Reset() {
+ *x = Config_BluetoothConfig{}
+ mi := &file_meshtastic_config_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Config_BluetoothConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Config_BluetoothConfig) ProtoMessage() {}
+
+func (x *Config_BluetoothConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_config_proto_msgTypes[7]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Config_BluetoothConfig.ProtoReflect.Descriptor instead.
+func (*Config_BluetoothConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 6}
+}
+
+func (x *Config_BluetoothConfig) GetEnabled() bool {
+ if x != nil {
+ return x.Enabled
+ }
+ return false
+}
+
+func (x *Config_BluetoothConfig) GetMode() Config_BluetoothConfig_PairingMode {
+ if x != nil {
+ return x.Mode
+ }
+ return Config_BluetoothConfig_RANDOM_PIN
+}
+
+func (x *Config_BluetoothConfig) GetFixedPin() uint32 {
+ if x != nil {
+ return x.FixedPin
+ }
+ return 0
+}
+
+type Config_SecurityConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // 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.
+ PublicKey []byte `protobuf:"bytes,1,opt,name=public_key,json=publicKey,proto3" json:"publicKey,omitempty"`
+ // The private key of the device.
+ // Used to create a shared key with a remote device.
+ PrivateKey []byte `protobuf:"bytes,2,opt,name=private_key,json=privateKey,proto3" json:"privateKey,omitempty"`
+ // The public key authorized to send admin messages to this node.
+ AdminKey [][]byte `protobuf:"bytes,3,rep,name=admin_key,json=adminKey,proto3" json:"adminKey,omitempty"`
+ // If true, device is considered to be "managed" by a mesh administrator via admin messages
+ // Device is managed by a mesh administrator.
+ IsManaged bool `protobuf:"varint,4,opt,name=is_managed,json=isManaged,proto3" json:"isManaged,omitempty"`
+ // Serial Console over the Stream API."
+ SerialEnabled bool `protobuf:"varint,5,opt,name=serial_enabled,json=serialEnabled,proto3" json:"serialEnabled,omitempty"`
+ // 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.
+ DebugLogApiEnabled bool `protobuf:"varint,6,opt,name=debug_log_api_enabled,json=debugLogApiEnabled,proto3" json:"debugLogApiEnabled,omitempty"`
+ // Allow incoming device control over the insecure legacy admin channel.
+ AdminChannelEnabled bool `protobuf:"varint,8,opt,name=admin_channel_enabled,json=adminChannelEnabled,proto3" json:"adminChannelEnabled,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Config_SecurityConfig) Reset() {
+ *x = Config_SecurityConfig{}
+ mi := &file_meshtastic_config_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Config_SecurityConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Config_SecurityConfig) ProtoMessage() {}
+
+func (x *Config_SecurityConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_config_proto_msgTypes[8]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Config_SecurityConfig.ProtoReflect.Descriptor instead.
+func (*Config_SecurityConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 7}
+}
+
+func (x *Config_SecurityConfig) GetPublicKey() []byte {
+ if x != nil {
+ return x.PublicKey
+ }
+ return nil
+}
+
+func (x *Config_SecurityConfig) GetPrivateKey() []byte {
+ if x != nil {
+ return x.PrivateKey
+ }
+ return nil
+}
+
+func (x *Config_SecurityConfig) GetAdminKey() [][]byte {
+ if x != nil {
+ return x.AdminKey
+ }
+ return nil
+}
+
+func (x *Config_SecurityConfig) GetIsManaged() bool {
+ if x != nil {
+ return x.IsManaged
+ }
+ return false
+}
+
+func (x *Config_SecurityConfig) GetSerialEnabled() bool {
+ if x != nil {
+ return x.SerialEnabled
+ }
+ return false
+}
+
+func (x *Config_SecurityConfig) GetDebugLogApiEnabled() bool {
+ if x != nil {
+ return x.DebugLogApiEnabled
+ }
+ return false
+}
+
+func (x *Config_SecurityConfig) GetAdminChannelEnabled() bool {
+ if x != nil {
+ return x.AdminChannelEnabled
+ }
+ return false
+}
+
+// Blank config request, strictly for getting the session key
+type Config_SessionkeyConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Config_SessionkeyConfig) Reset() {
+ *x = Config_SessionkeyConfig{}
+ mi := &file_meshtastic_config_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Config_SessionkeyConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Config_SessionkeyConfig) ProtoMessage() {}
+
+func (x *Config_SessionkeyConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_config_proto_msgTypes[9]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Config_SessionkeyConfig.ProtoReflect.Descriptor instead.
+func (*Config_SessionkeyConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 8}
+}
+
+type Config_NetworkConfig_IpV4Config struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Static IP address
+ Ip uint32 `protobuf:"fixed32,1,opt,name=ip,proto3" json:"ip,omitempty"`
+ // Static gateway address
+ Gateway uint32 `protobuf:"fixed32,2,opt,name=gateway,proto3" json:"gateway,omitempty"`
+ // Static subnet mask
+ Subnet uint32 `protobuf:"fixed32,3,opt,name=subnet,proto3" json:"subnet,omitempty"`
+ // Static DNS server address
+ Dns uint32 `protobuf:"fixed32,4,opt,name=dns,proto3" json:"dns,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Config_NetworkConfig_IpV4Config) Reset() {
+ *x = Config_NetworkConfig_IpV4Config{}
+ mi := &file_meshtastic_config_proto_msgTypes[10]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Config_NetworkConfig_IpV4Config) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Config_NetworkConfig_IpV4Config) ProtoMessage() {}
+
+func (x *Config_NetworkConfig_IpV4Config) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_config_proto_msgTypes[10]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Config_NetworkConfig_IpV4Config.ProtoReflect.Descriptor instead.
+func (*Config_NetworkConfig_IpV4Config) Descriptor() ([]byte, []int) {
+ return file_meshtastic_config_proto_rawDescGZIP(), []int{0, 3, 0}
+}
+
+func (x *Config_NetworkConfig_IpV4Config) GetIp() uint32 {
+ if x != nil {
+ return x.Ip
+ }
+ return 0
+}
+
+func (x *Config_NetworkConfig_IpV4Config) GetGateway() uint32 {
+ if x != nil {
+ return x.Gateway
+ }
+ return 0
+}
+
+func (x *Config_NetworkConfig_IpV4Config) GetSubnet() uint32 {
+ if x != nil {
+ return x.Subnet
+ }
+ return 0
+}
+
+func (x *Config_NetworkConfig_IpV4Config) GetDns() uint32 {
+ if x != nil {
+ return x.Dns
+ }
+ return 0
+}
+
+var File_meshtastic_config_proto protoreflect.FileDescriptor
+
+const file_meshtastic_config_proto_rawDesc = "" +
+ "\n" +
+ "\x17meshtastic/config.proto\x12\n" +
+ "meshtastic\x1a\x1ameshtastic/device_ui.proto\"\xbd5\n" +
+ "\x06Config\x129\n" +
+ "\x06device\x18\x01 \x01(\v2\x1f.meshtastic.Config.DeviceConfigH\x00R\x06device\x12?\n" +
+ "\bposition\x18\x02 \x01(\v2!.meshtastic.Config.PositionConfigH\x00R\bposition\x126\n" +
+ "\x05power\x18\x03 \x01(\v2\x1e.meshtastic.Config.PowerConfigH\x00R\x05power\x12<\n" +
+ "\anetwork\x18\x04 \x01(\v2 .meshtastic.Config.NetworkConfigH\x00R\anetwork\x12<\n" +
+ "\adisplay\x18\x05 \x01(\v2 .meshtastic.Config.DisplayConfigH\x00R\adisplay\x123\n" +
+ "\x04lora\x18\x06 \x01(\v2\x1d.meshtastic.Config.LoRaConfigH\x00R\x04lora\x12B\n" +
+ "\tbluetooth\x18\a \x01(\v2\".meshtastic.Config.BluetoothConfigH\x00R\tbluetooth\x12?\n" +
+ "\bsecurity\x18\b \x01(\v2!.meshtastic.Config.SecurityConfigH\x00R\bsecurity\x12E\n" +
+ "\n" +
+ "sessionkey\x18\t \x01(\v2#.meshtastic.Config.SessionkeyConfigH\x00R\n" +
+ "sessionkey\x129\n" +
+ "\tdevice_ui\x18\n" +
+ " \x01(\v2\x1a.meshtastic.DeviceUIConfigH\x00R\bdeviceUi\x1a\xab\b\n" +
+ "\fDeviceConfig\x128\n" +
+ "\x04role\x18\x01 \x01(\x0e2$.meshtastic.Config.DeviceConfig.RoleR\x04role\x12)\n" +
+ "\x0eserial_enabled\x18\x02 \x01(\bB\x02\x18\x01R\rserialEnabled\x12\x1f\n" +
+ "\vbutton_gpio\x18\x04 \x01(\rR\n" +
+ "buttonGpio\x12\x1f\n" +
+ "\vbuzzer_gpio\x18\x05 \x01(\rR\n" +
+ "buzzerGpio\x12Z\n" +
+ "\x10rebroadcast_mode\x18\x06 \x01(\x0e2/.meshtastic.Config.DeviceConfig.RebroadcastModeR\x0frebroadcastMode\x127\n" +
+ "\x18node_info_broadcast_secs\x18\a \x01(\rR\x15nodeInfoBroadcastSecs\x12:\n" +
+ "\x1adouble_tap_as_button_press\x18\b \x01(\bR\x16doubleTapAsButtonPress\x12!\n" +
+ "\n" +
+ "is_managed\x18\t \x01(\bB\x02\x18\x01R\tisManaged\x120\n" +
+ "\x14disable_triple_click\x18\n" +
+ " \x01(\bR\x12disableTripleClick\x12\x14\n" +
+ "\x05tzdef\x18\v \x01(\tR\x05tzdef\x124\n" +
+ "\x16led_heartbeat_disabled\x18\f \x01(\bR\x14ledHeartbeatDisabled\x12K\n" +
+ "\vbuzzer_mode\x18\r \x01(\x0e2*.meshtastic.Config.DeviceConfig.BuzzerModeR\n" +
+ "buzzerMode\"\xd4\x01\n" +
+ "\x04Role\x12\n" +
+ "\n" +
+ "\x06CLIENT\x10\x00\x12\x0f\n" +
+ "\vCLIENT_MUTE\x10\x01\x12\n" +
+ "\n" +
+ "\x06ROUTER\x10\x02\x12\x15\n" +
+ "\rROUTER_CLIENT\x10\x03\x1a\x02\b\x01\x12\x10\n" +
+ "\bREPEATER\x10\x04\x1a\x02\b\x01\x12\v\n" +
+ "\aTRACKER\x10\x05\x12\n" +
+ "\n" +
+ "\x06SENSOR\x10\x06\x12\a\n" +
+ "\x03TAK\x10\a\x12\x11\n" +
+ "\rCLIENT_HIDDEN\x10\b\x12\x12\n" +
+ "\x0eLOST_AND_FOUND\x10\t\x12\x0f\n" +
+ "\vTAK_TRACKER\x10\n" +
+ "\x12\x0f\n" +
+ "\vROUTER_LATE\x10\v\x12\x0f\n" +
+ "\vCLIENT_BASE\x10\f\"s\n" +
+ "\x0fRebroadcastMode\x12\a\n" +
+ "\x03ALL\x10\x00\x12\x15\n" +
+ "\x11ALL_SKIP_DECODING\x10\x01\x12\x0e\n" +
+ "\n" +
+ "LOCAL_ONLY\x10\x02\x12\x0e\n" +
+ "\n" +
+ "KNOWN_ONLY\x10\x03\x12\b\n" +
+ "\x04NONE\x10\x04\x12\x16\n" +
+ "\x12CORE_PORTNUMS_ONLY\x10\x05\"i\n" +
+ "\n" +
+ "BuzzerMode\x12\x0f\n" +
+ "\vALL_ENABLED\x10\x00\x12\f\n" +
+ "\bDISABLED\x10\x01\x12\x16\n" +
+ "\x12NOTIFICATIONS_ONLY\x10\x02\x12\x0f\n" +
+ "\vSYSTEM_ONLY\x10\x03\x12\x13\n" +
+ "\x0fDIRECT_MSG_ONLY\x10\x04\x1a\xfa\x06\n" +
+ "\x0ePositionConfig\x126\n" +
+ "\x17position_broadcast_secs\x18\x01 \x01(\rR\x15positionBroadcastSecs\x12G\n" +
+ " position_broadcast_smart_enabled\x18\x02 \x01(\bR\x1dpositionBroadcastSmartEnabled\x12%\n" +
+ "\x0efixed_position\x18\x03 \x01(\bR\rfixedPosition\x12#\n" +
+ "\vgps_enabled\x18\x04 \x01(\bB\x02\x18\x01R\n" +
+ "gpsEnabled\x12.\n" +
+ "\x13gps_update_interval\x18\x05 \x01(\rR\x11gpsUpdateInterval\x12,\n" +
+ "\x10gps_attempt_time\x18\x06 \x01(\rB\x02\x18\x01R\x0egpsAttemptTime\x12%\n" +
+ "\x0eposition_flags\x18\a \x01(\rR\rpositionFlags\x12\x17\n" +
+ "\arx_gpio\x18\b \x01(\rR\x06rxGpio\x12\x17\n" +
+ "\atx_gpio\x18\t \x01(\rR\x06txGpio\x12G\n" +
+ " broadcast_smart_minimum_distance\x18\n" +
+ " \x01(\rR\x1dbroadcastSmartMinimumDistance\x12P\n" +
+ "%broadcast_smart_minimum_interval_secs\x18\v \x01(\rR!broadcastSmartMinimumIntervalSecs\x12\x1e\n" +
+ "\vgps_en_gpio\x18\f \x01(\rR\tgpsEnGpio\x12D\n" +
+ "\bgps_mode\x18\r \x01(\x0e2).meshtastic.Config.PositionConfig.GpsModeR\agpsMode\"\xab\x01\n" +
+ "\rPositionFlags\x12\t\n" +
+ "\x05UNSET\x10\x00\x12\f\n" +
+ "\bALTITUDE\x10\x01\x12\x10\n" +
+ "\fALTITUDE_MSL\x10\x02\x12\x16\n" +
+ "\x12GEOIDAL_SEPARATION\x10\x04\x12\a\n" +
+ "\x03DOP\x10\b\x12\t\n" +
+ "\x05HVDOP\x10\x10\x12\r\n" +
+ "\tSATINVIEW\x10 \x12\n" +
+ "\n" +
+ "\x06SEQ_NO\x10@\x12\x0e\n" +
+ "\tTIMESTAMP\x10\x80\x01\x12\f\n" +
+ "\aHEADING\x10\x80\x02\x12\n" +
+ "\n" +
+ "\x05SPEED\x10\x80\x04\"5\n" +
+ "\aGpsMode\x12\f\n" +
+ "\bDISABLED\x10\x00\x12\v\n" +
+ "\aENABLED\x10\x01\x12\x0f\n" +
+ "\vNOT_PRESENT\x10\x02\x1a\xa1\x03\n" +
+ "\vPowerConfig\x12&\n" +
+ "\x0fis_power_saving\x18\x01 \x01(\bR\risPowerSaving\x12B\n" +
+ "\x1eon_battery_shutdown_after_secs\x18\x02 \x01(\rR\x1aonBatteryShutdownAfterSecs\x126\n" +
+ "\x17adc_multiplier_override\x18\x03 \x01(\x02R\x15adcMultiplierOverride\x12.\n" +
+ "\x13wait_bluetooth_secs\x18\x04 \x01(\rR\x11waitBluetoothSecs\x12\x19\n" +
+ "\bsds_secs\x18\x06 \x01(\rR\asdsSecs\x12\x17\n" +
+ "\als_secs\x18\a \x01(\rR\x06lsSecs\x12\"\n" +
+ "\rmin_wake_secs\x18\b \x01(\rR\vminWakeSecs\x12;\n" +
+ "\x1adevice_battery_ina_address\x18\t \x01(\rR\x17deviceBatteryInaAddress\x12)\n" +
+ "\x10powermon_enables\x18 \x01(\x04R\x0fpowermonEnables\x1a\xfd\x04\n" +
+ "\rNetworkConfig\x12!\n" +
+ "\fwifi_enabled\x18\x01 \x01(\bR\vwifiEnabled\x12\x1b\n" +
+ "\twifi_ssid\x18\x03 \x01(\tR\bwifiSsid\x12\x19\n" +
+ "\bwifi_psk\x18\x04 \x01(\tR\awifiPsk\x12\x1d\n" +
+ "\n" +
+ "ntp_server\x18\x05 \x01(\tR\tntpServer\x12\x1f\n" +
+ "\veth_enabled\x18\x06 \x01(\bR\n" +
+ "ethEnabled\x12O\n" +
+ "\faddress_mode\x18\a \x01(\x0e2,.meshtastic.Config.NetworkConfig.AddressModeR\vaddressMode\x12L\n" +
+ "\vipv4_config\x18\b \x01(\v2+.meshtastic.Config.NetworkConfig.IpV4ConfigR\n" +
+ "ipv4Config\x12%\n" +
+ "\x0ersyslog_server\x18\t \x01(\tR\rrsyslogServer\x12+\n" +
+ "\x11enabled_protocols\x18\n" +
+ " \x01(\rR\x10enabledProtocols\x12!\n" +
+ "\fipv6_enabled\x18\v \x01(\bR\vipv6Enabled\x1a`\n" +
+ "\n" +
+ "IpV4Config\x12\x0e\n" +
+ "\x02ip\x18\x01 \x01(\aR\x02ip\x12\x18\n" +
+ "\agateway\x18\x02 \x01(\aR\agateway\x12\x16\n" +
+ "\x06subnet\x18\x03 \x01(\aR\x06subnet\x12\x10\n" +
+ "\x03dns\x18\x04 \x01(\aR\x03dns\"#\n" +
+ "\vAddressMode\x12\b\n" +
+ "\x04DHCP\x10\x00\x12\n" +
+ "\n" +
+ "\x06STATIC\x10\x01\"4\n" +
+ "\rProtocolFlags\x12\x10\n" +
+ "\fNO_BROADCAST\x10\x00\x12\x11\n" +
+ "\rUDP_BROADCAST\x10\x01\x1a\xf9\t\n" +
+ "\rDisplayConfig\x12$\n" +
+ "\x0escreen_on_secs\x18\x01 \x01(\rR\fscreenOnSecs\x12a\n" +
+ "\n" +
+ "gps_format\x18\x02 \x01(\x0e2>.meshtastic.Config.DisplayConfig.DeprecatedGpsCoordinateFormatB\x02\x18\x01R\tgpsFormat\x129\n" +
+ "\x19auto_screen_carousel_secs\x18\x03 \x01(\rR\x16autoScreenCarouselSecs\x12.\n" +
+ "\x11compass_north_top\x18\x04 \x01(\bB\x02\x18\x01R\x0fcompassNorthTop\x12\x1f\n" +
+ "\vflip_screen\x18\x05 \x01(\bR\n" +
+ "flipScreen\x12C\n" +
+ "\x05units\x18\x06 \x01(\x0e2-.meshtastic.Config.DisplayConfig.DisplayUnitsR\x05units\x12=\n" +
+ "\x04oled\x18\a \x01(\x0e2).meshtastic.Config.DisplayConfig.OledTypeR\x04oled\x12N\n" +
+ "\vdisplaymode\x18\b \x01(\x0e2,.meshtastic.Config.DisplayConfig.DisplayModeR\vdisplaymode\x12!\n" +
+ "\fheading_bold\x18\t \x01(\bR\vheadingBold\x120\n" +
+ "\x15wake_on_tap_or_motion\x18\n" +
+ " \x01(\bR\x11wakeOnTapOrMotion\x12d\n" +
+ "\x13compass_orientation\x18\v \x01(\x0e23.meshtastic.Config.DisplayConfig.CompassOrientationR\x12compassOrientation\x12\"\n" +
+ "\ruse_12h_clock\x18\f \x01(\bR\vuse12hClock\x12+\n" +
+ "\x12use_long_node_name\x18\r \x01(\bR\x0fuseLongNodeName\x124\n" +
+ "\x16enable_message_bubbles\x18\x0e \x01(\bR\x14enableMessageBubbles\"+\n" +
+ "\x1dDeprecatedGpsCoordinateFormat\x12\n" +
+ "\n" +
+ "\x06UNUSED\x10\x00\"(\n" +
+ "\fDisplayUnits\x12\n" +
+ "\n" +
+ "\x06METRIC\x10\x00\x12\f\n" +
+ "\bIMPERIAL\x10\x01\"f\n" +
+ "\bOledType\x12\r\n" +
+ "\tOLED_AUTO\x10\x00\x12\x10\n" +
+ "\fOLED_SSD1306\x10\x01\x12\x0f\n" +
+ "\vOLED_SH1106\x10\x02\x12\x0f\n" +
+ "\vOLED_SH1107\x10\x03\x12\x17\n" +
+ "\x13OLED_SH1107_128_128\x10\x04\"A\n" +
+ "\vDisplayMode\x12\v\n" +
+ "\aDEFAULT\x10\x00\x12\f\n" +
+ "\bTWOCOLOR\x10\x01\x12\f\n" +
+ "\bINVERTED\x10\x02\x12\t\n" +
+ "\x05COLOR\x10\x03\"\xba\x01\n" +
+ "\x12CompassOrientation\x12\r\n" +
+ "\tDEGREES_0\x10\x00\x12\x0e\n" +
+ "\n" +
+ "DEGREES_90\x10\x01\x12\x0f\n" +
+ "\vDEGREES_180\x10\x02\x12\x0f\n" +
+ "\vDEGREES_270\x10\x03\x12\x16\n" +
+ "\x12DEGREES_0_INVERTED\x10\x04\x12\x17\n" +
+ "\x13DEGREES_90_INVERTED\x10\x05\x12\x18\n" +
+ "\x14DEGREES_180_INVERTED\x10\x06\x12\x18\n" +
+ "\x14DEGREES_270_INVERTED\x10\a\x1a\xee\n" +
+ "\n" +
+ "\n" +
+ "LoRaConfig\x12\x1d\n" +
+ "\n" +
+ "use_preset\x18\x01 \x01(\bR\tusePreset\x12L\n" +
+ "\fmodem_preset\x18\x02 \x01(\x0e2).meshtastic.Config.LoRaConfig.ModemPresetR\vmodemPreset\x12\x1c\n" +
+ "\tbandwidth\x18\x03 \x01(\rR\tbandwidth\x12#\n" +
+ "\rspread_factor\x18\x04 \x01(\rR\fspreadFactor\x12\x1f\n" +
+ "\vcoding_rate\x18\x05 \x01(\rR\n" +
+ "codingRate\x12)\n" +
+ "\x10frequency_offset\x18\x06 \x01(\x02R\x0ffrequencyOffset\x12@\n" +
+ "\x06region\x18\a \x01(\x0e2(.meshtastic.Config.LoRaConfig.RegionCodeR\x06region\x12\x1b\n" +
+ "\thop_limit\x18\b \x01(\rR\bhopLimit\x12\x1d\n" +
+ "\n" +
+ "tx_enabled\x18\t \x01(\bR\ttxEnabled\x12\x19\n" +
+ "\btx_power\x18\n" +
+ " \x01(\x05R\atxPower\x12\x1f\n" +
+ "\vchannel_num\x18\v \x01(\rR\n" +
+ "channelNum\x12.\n" +
+ "\x13override_duty_cycle\x18\f \x01(\bR\x11overrideDutyCycle\x123\n" +
+ "\x16sx126x_rx_boosted_gain\x18\r \x01(\bR\x13sx126xRxBoostedGain\x12-\n" +
+ "\x12override_frequency\x18\x0e \x01(\x02R\x11overrideFrequency\x12&\n" +
+ "\x0fpa_fan_disabled\x18\x0f \x01(\bR\rpaFanDisabled\x12'\n" +
+ "\x0fignore_incoming\x18g \x03(\rR\x0eignoreIncoming\x12\x1f\n" +
+ "\vignore_mqtt\x18h \x01(\bR\n" +
+ "ignoreMqtt\x12)\n" +
+ "\x11config_ok_to_mqtt\x18i \x01(\bR\x0econfigOkToMqtt\x12L\n" +
+ "\ffem_lna_mode\x18j \x01(\x0e2*.meshtastic.Config.LoRaConfig.FEM_LNA_ModeR\n" +
+ "femLnaMode\"\xae\x02\n" +
+ "\n" +
+ "RegionCode\x12\t\n" +
+ "\x05UNSET\x10\x00\x12\x06\n" +
+ "\x02US\x10\x01\x12\n" +
+ "\n" +
+ "\x06EU_433\x10\x02\x12\n" +
+ "\n" +
+ "\x06EU_868\x10\x03\x12\x06\n" +
+ "\x02CN\x10\x04\x12\x06\n" +
+ "\x02JP\x10\x05\x12\a\n" +
+ "\x03ANZ\x10\x06\x12\x06\n" +
+ "\x02KR\x10\a\x12\x06\n" +
+ "\x02TW\x10\b\x12\x06\n" +
+ "\x02RU\x10\t\x12\x06\n" +
+ "\x02IN\x10\n" +
+ "\x12\n" +
+ "\n" +
+ "\x06NZ_865\x10\v\x12\x06\n" +
+ "\x02TH\x10\f\x12\v\n" +
+ "\aLORA_24\x10\r\x12\n" +
+ "\n" +
+ "\x06UA_433\x10\x0e\x12\n" +
+ "\n" +
+ "\x06UA_868\x10\x0f\x12\n" +
+ "\n" +
+ "\x06MY_433\x10\x10\x12\n" +
+ "\n" +
+ "\x06MY_919\x10\x11\x12\n" +
+ "\n" +
+ "\x06SG_923\x10\x12\x12\n" +
+ "\n" +
+ "\x06PH_433\x10\x13\x12\n" +
+ "\n" +
+ "\x06PH_868\x10\x14\x12\n" +
+ "\n" +
+ "\x06PH_915\x10\x15\x12\v\n" +
+ "\aANZ_433\x10\x16\x12\n" +
+ "\n" +
+ "\x06KZ_433\x10\x17\x12\n" +
+ "\n" +
+ "\x06KZ_863\x10\x18\x12\n" +
+ "\n" +
+ "\x06NP_865\x10\x19\x12\n" +
+ "\n" +
+ "\x06BR_902\x10\x1a\"\xbd\x01\n" +
+ "\vModemPreset\x12\r\n" +
+ "\tLONG_FAST\x10\x00\x12\x11\n" +
+ "\tLONG_SLOW\x10\x01\x1a\x02\b\x01\x12\x16\n" +
+ "\x0eVERY_LONG_SLOW\x10\x02\x1a\x02\b\x01\x12\x0f\n" +
+ "\vMEDIUM_SLOW\x10\x03\x12\x0f\n" +
+ "\vMEDIUM_FAST\x10\x04\x12\x0e\n" +
+ "\n" +
+ "SHORT_SLOW\x10\x05\x12\x0e\n" +
+ "\n" +
+ "SHORT_FAST\x10\x06\x12\x11\n" +
+ "\rLONG_MODERATE\x10\a\x12\x0f\n" +
+ "\vSHORT_TURBO\x10\b\x12\x0e\n" +
+ "\n" +
+ "LONG_TURBO\x10\t\":\n" +
+ "\fFEM_LNA_Mode\x12\f\n" +
+ "\bDISABLED\x10\x00\x12\v\n" +
+ "\aENABLED\x10\x01\x12\x0f\n" +
+ "\vNOT_PRESENT\x10\x02\x1a\xc6\x01\n" +
+ "\x0fBluetoothConfig\x12\x18\n" +
+ "\aenabled\x18\x01 \x01(\bR\aenabled\x12B\n" +
+ "\x04mode\x18\x02 \x01(\x0e2..meshtastic.Config.BluetoothConfig.PairingModeR\x04mode\x12\x1b\n" +
+ "\tfixed_pin\x18\x03 \x01(\rR\bfixedPin\"8\n" +
+ "\vPairingMode\x12\x0e\n" +
+ "\n" +
+ "RANDOM_PIN\x10\x00\x12\r\n" +
+ "\tFIXED_PIN\x10\x01\x12\n" +
+ "\n" +
+ "\x06NO_PIN\x10\x02\x1a\x9a\x02\n" +
+ "\x0eSecurityConfig\x12\x1d\n" +
+ "\n" +
+ "public_key\x18\x01 \x01(\fR\tpublicKey\x12\x1f\n" +
+ "\vprivate_key\x18\x02 \x01(\fR\n" +
+ "privateKey\x12\x1b\n" +
+ "\tadmin_key\x18\x03 \x03(\fR\badminKey\x12\x1d\n" +
+ "\n" +
+ "is_managed\x18\x04 \x01(\bR\tisManaged\x12%\n" +
+ "\x0eserial_enabled\x18\x05 \x01(\bR\rserialEnabled\x121\n" +
+ "\x15debug_log_api_enabled\x18\x06 \x01(\bR\x12debugLogApiEnabled\x122\n" +
+ "\x15admin_channel_enabled\x18\b \x01(\bR\x13adminChannelEnabled\x1a\x12\n" +
+ "\x10SessionkeyConfigB\x11\n" +
+ "\x0fpayload_variantBb\n" +
+ "\x14org.meshtastic.protoB\fConfigProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00b\x06proto3"
+
+var (
+ file_meshtastic_config_proto_rawDescOnce sync.Once
+ file_meshtastic_config_proto_rawDescData []byte
+)
+
+func file_meshtastic_config_proto_rawDescGZIP() []byte {
+ file_meshtastic_config_proto_rawDescOnce.Do(func() {
+ file_meshtastic_config_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_meshtastic_config_proto_rawDesc), len(file_meshtastic_config_proto_rawDesc)))
+ })
+ return file_meshtastic_config_proto_rawDescData
+}
+
+var file_meshtastic_config_proto_enumTypes = make([]protoimpl.EnumInfo, 16)
+var file_meshtastic_config_proto_msgTypes = make([]protoimpl.MessageInfo, 11)
+var file_meshtastic_config_proto_goTypes = []any{
+ (Config_DeviceConfig_Role)(0), // 0: meshtastic.Config.DeviceConfig.Role
+ (Config_DeviceConfig_RebroadcastMode)(0), // 1: meshtastic.Config.DeviceConfig.RebroadcastMode
+ (Config_DeviceConfig_BuzzerMode)(0), // 2: meshtastic.Config.DeviceConfig.BuzzerMode
+ (Config_PositionConfig_PositionFlags)(0), // 3: meshtastic.Config.PositionConfig.PositionFlags
+ (Config_PositionConfig_GpsMode)(0), // 4: meshtastic.Config.PositionConfig.GpsMode
+ (Config_NetworkConfig_AddressMode)(0), // 5: meshtastic.Config.NetworkConfig.AddressMode
+ (Config_NetworkConfig_ProtocolFlags)(0), // 6: meshtastic.Config.NetworkConfig.ProtocolFlags
+ (Config_DisplayConfig_DeprecatedGpsCoordinateFormat)(0), // 7: meshtastic.Config.DisplayConfig.DeprecatedGpsCoordinateFormat
+ (Config_DisplayConfig_DisplayUnits)(0), // 8: meshtastic.Config.DisplayConfig.DisplayUnits
+ (Config_DisplayConfig_OledType)(0), // 9: meshtastic.Config.DisplayConfig.OledType
+ (Config_DisplayConfig_DisplayMode)(0), // 10: meshtastic.Config.DisplayConfig.DisplayMode
+ (Config_DisplayConfig_CompassOrientation)(0), // 11: meshtastic.Config.DisplayConfig.CompassOrientation
+ (Config_LoRaConfig_RegionCode)(0), // 12: meshtastic.Config.LoRaConfig.RegionCode
+ (Config_LoRaConfig_ModemPreset)(0), // 13: meshtastic.Config.LoRaConfig.ModemPreset
+ (Config_LoRaConfig_FEM_LNA_Mode)(0), // 14: meshtastic.Config.LoRaConfig.FEM_LNA_Mode
+ (Config_BluetoothConfig_PairingMode)(0), // 15: meshtastic.Config.BluetoothConfig.PairingMode
+ (*Config)(nil), // 16: meshtastic.Config
+ (*Config_DeviceConfig)(nil), // 17: meshtastic.Config.DeviceConfig
+ (*Config_PositionConfig)(nil), // 18: meshtastic.Config.PositionConfig
+ (*Config_PowerConfig)(nil), // 19: meshtastic.Config.PowerConfig
+ (*Config_NetworkConfig)(nil), // 20: meshtastic.Config.NetworkConfig
+ (*Config_DisplayConfig)(nil), // 21: meshtastic.Config.DisplayConfig
+ (*Config_LoRaConfig)(nil), // 22: meshtastic.Config.LoRaConfig
+ (*Config_BluetoothConfig)(nil), // 23: meshtastic.Config.BluetoothConfig
+ (*Config_SecurityConfig)(nil), // 24: meshtastic.Config.SecurityConfig
+ (*Config_SessionkeyConfig)(nil), // 25: meshtastic.Config.SessionkeyConfig
+ (*Config_NetworkConfig_IpV4Config)(nil), // 26: meshtastic.Config.NetworkConfig.IpV4Config
+ (*DeviceUIConfig)(nil), // 27: meshtastic.DeviceUIConfig
+}
+var file_meshtastic_config_proto_depIdxs = []int32{
+ 17, // 0: meshtastic.Config.device:type_name -> meshtastic.Config.DeviceConfig
+ 18, // 1: meshtastic.Config.position:type_name -> meshtastic.Config.PositionConfig
+ 19, // 2: meshtastic.Config.power:type_name -> meshtastic.Config.PowerConfig
+ 20, // 3: meshtastic.Config.network:type_name -> meshtastic.Config.NetworkConfig
+ 21, // 4: meshtastic.Config.display:type_name -> meshtastic.Config.DisplayConfig
+ 22, // 5: meshtastic.Config.lora:type_name -> meshtastic.Config.LoRaConfig
+ 23, // 6: meshtastic.Config.bluetooth:type_name -> meshtastic.Config.BluetoothConfig
+ 24, // 7: meshtastic.Config.security:type_name -> meshtastic.Config.SecurityConfig
+ 25, // 8: meshtastic.Config.sessionkey:type_name -> meshtastic.Config.SessionkeyConfig
+ 27, // 9: meshtastic.Config.device_ui:type_name -> meshtastic.DeviceUIConfig
+ 0, // 10: meshtastic.Config.DeviceConfig.role:type_name -> meshtastic.Config.DeviceConfig.Role
+ 1, // 11: meshtastic.Config.DeviceConfig.rebroadcast_mode:type_name -> meshtastic.Config.DeviceConfig.RebroadcastMode
+ 2, // 12: meshtastic.Config.DeviceConfig.buzzer_mode:type_name -> meshtastic.Config.DeviceConfig.BuzzerMode
+ 4, // 13: meshtastic.Config.PositionConfig.gps_mode:type_name -> meshtastic.Config.PositionConfig.GpsMode
+ 5, // 14: meshtastic.Config.NetworkConfig.address_mode:type_name -> meshtastic.Config.NetworkConfig.AddressMode
+ 26, // 15: meshtastic.Config.NetworkConfig.ipv4_config:type_name -> meshtastic.Config.NetworkConfig.IpV4Config
+ 7, // 16: meshtastic.Config.DisplayConfig.gps_format:type_name -> meshtastic.Config.DisplayConfig.DeprecatedGpsCoordinateFormat
+ 8, // 17: meshtastic.Config.DisplayConfig.units:type_name -> meshtastic.Config.DisplayConfig.DisplayUnits
+ 9, // 18: meshtastic.Config.DisplayConfig.oled:type_name -> meshtastic.Config.DisplayConfig.OledType
+ 10, // 19: meshtastic.Config.DisplayConfig.displaymode:type_name -> meshtastic.Config.DisplayConfig.DisplayMode
+ 11, // 20: meshtastic.Config.DisplayConfig.compass_orientation:type_name -> meshtastic.Config.DisplayConfig.CompassOrientation
+ 13, // 21: meshtastic.Config.LoRaConfig.modem_preset:type_name -> meshtastic.Config.LoRaConfig.ModemPreset
+ 12, // 22: meshtastic.Config.LoRaConfig.region:type_name -> meshtastic.Config.LoRaConfig.RegionCode
+ 14, // 23: meshtastic.Config.LoRaConfig.fem_lna_mode:type_name -> meshtastic.Config.LoRaConfig.FEM_LNA_Mode
+ 15, // 24: meshtastic.Config.BluetoothConfig.mode:type_name -> meshtastic.Config.BluetoothConfig.PairingMode
+ 25, // [25:25] is the sub-list for method output_type
+ 25, // [25:25] is the sub-list for method input_type
+ 25, // [25:25] is the sub-list for extension type_name
+ 25, // [25:25] is the sub-list for extension extendee
+ 0, // [0:25] is the sub-list for field type_name
+}
+
+func init() { file_meshtastic_config_proto_init() }
+func file_meshtastic_config_proto_init() {
+ if File_meshtastic_config_proto != nil {
+ return
+ }
+ file_meshtastic_device_ui_proto_init()
+ file_meshtastic_config_proto_msgTypes[0].OneofWrappers = []any{
+ (*Config_Device)(nil),
+ (*Config_Position)(nil),
+ (*Config_Power)(nil),
+ (*Config_Network)(nil),
+ (*Config_Display)(nil),
+ (*Config_Lora)(nil),
+ (*Config_Bluetooth)(nil),
+ (*Config_Security)(nil),
+ (*Config_Sessionkey)(nil),
+ (*Config_DeviceUi)(nil),
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_meshtastic_config_proto_rawDesc), len(file_meshtastic_config_proto_rawDesc)),
+ NumEnums: 16,
+ NumMessages: 11,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_meshtastic_config_proto_goTypes,
+ DependencyIndexes: file_meshtastic_config_proto_depIdxs,
+ EnumInfos: file_meshtastic_config_proto_enumTypes,
+ MessageInfos: file_meshtastic_config_proto_msgTypes,
+ }.Build()
+ File_meshtastic_config_proto = out.File
+ file_meshtastic_config_proto_goTypes = nil
+ file_meshtastic_config_proto_depIdxs = nil
+}
diff --git a/protocol/meshtastic/pb/connection_status.pb.go b/protocol/meshtastic/pb/connection_status.pb.go
new file mode 100644
index 0000000..f21cd47
--- /dev/null
+++ b/protocol/meshtastic/pb/connection_status.pb.go
@@ -0,0 +1,493 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc v6.33.4
+// source: meshtastic/connection_status.proto
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type DeviceConnectionStatus struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // WiFi Status
+ Wifi *WifiConnectionStatus `protobuf:"bytes,1,opt,name=wifi,proto3,oneof" json:"wifi,omitempty"`
+ // WiFi Status
+ Ethernet *EthernetConnectionStatus `protobuf:"bytes,2,opt,name=ethernet,proto3,oneof" json:"ethernet,omitempty"`
+ // Bluetooth Status
+ Bluetooth *BluetoothConnectionStatus `protobuf:"bytes,3,opt,name=bluetooth,proto3,oneof" json:"bluetooth,omitempty"`
+ // Serial Status
+ Serial *SerialConnectionStatus `protobuf:"bytes,4,opt,name=serial,proto3,oneof" json:"serial,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *DeviceConnectionStatus) Reset() {
+ *x = DeviceConnectionStatus{}
+ mi := &file_meshtastic_connection_status_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *DeviceConnectionStatus) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeviceConnectionStatus) ProtoMessage() {}
+
+func (x *DeviceConnectionStatus) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_connection_status_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DeviceConnectionStatus.ProtoReflect.Descriptor instead.
+func (*DeviceConnectionStatus) Descriptor() ([]byte, []int) {
+ return file_meshtastic_connection_status_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *DeviceConnectionStatus) GetWifi() *WifiConnectionStatus {
+ if x != nil {
+ return x.Wifi
+ }
+ return nil
+}
+
+func (x *DeviceConnectionStatus) GetEthernet() *EthernetConnectionStatus {
+ if x != nil {
+ return x.Ethernet
+ }
+ return nil
+}
+
+func (x *DeviceConnectionStatus) GetBluetooth() *BluetoothConnectionStatus {
+ if x != nil {
+ return x.Bluetooth
+ }
+ return nil
+}
+
+func (x *DeviceConnectionStatus) GetSerial() *SerialConnectionStatus {
+ if x != nil {
+ return x.Serial
+ }
+ return nil
+}
+
+// WiFi connection status
+type WifiConnectionStatus struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Connection status
+ Status *NetworkConnectionStatus `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"`
+ // WiFi access point SSID
+ Ssid string `protobuf:"bytes,2,opt,name=ssid,proto3" json:"ssid,omitempty"`
+ // RSSI of wireless connection
+ Rssi int32 `protobuf:"varint,3,opt,name=rssi,proto3" json:"rssi,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *WifiConnectionStatus) Reset() {
+ *x = WifiConnectionStatus{}
+ mi := &file_meshtastic_connection_status_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *WifiConnectionStatus) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*WifiConnectionStatus) ProtoMessage() {}
+
+func (x *WifiConnectionStatus) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_connection_status_proto_msgTypes[1]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use WifiConnectionStatus.ProtoReflect.Descriptor instead.
+func (*WifiConnectionStatus) Descriptor() ([]byte, []int) {
+ return file_meshtastic_connection_status_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *WifiConnectionStatus) GetStatus() *NetworkConnectionStatus {
+ if x != nil {
+ return x.Status
+ }
+ return nil
+}
+
+func (x *WifiConnectionStatus) GetSsid() string {
+ if x != nil {
+ return x.Ssid
+ }
+ return ""
+}
+
+func (x *WifiConnectionStatus) GetRssi() int32 {
+ if x != nil {
+ return x.Rssi
+ }
+ return 0
+}
+
+// Ethernet connection status
+type EthernetConnectionStatus struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Connection status
+ Status *NetworkConnectionStatus `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *EthernetConnectionStatus) Reset() {
+ *x = EthernetConnectionStatus{}
+ mi := &file_meshtastic_connection_status_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *EthernetConnectionStatus) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*EthernetConnectionStatus) ProtoMessage() {}
+
+func (x *EthernetConnectionStatus) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_connection_status_proto_msgTypes[2]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use EthernetConnectionStatus.ProtoReflect.Descriptor instead.
+func (*EthernetConnectionStatus) Descriptor() ([]byte, []int) {
+ return file_meshtastic_connection_status_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *EthernetConnectionStatus) GetStatus() *NetworkConnectionStatus {
+ if x != nil {
+ return x.Status
+ }
+ return nil
+}
+
+// Ethernet or WiFi connection status
+type NetworkConnectionStatus struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // IP address of device
+ IpAddress uint32 `protobuf:"fixed32,1,opt,name=ip_address,json=ipAddress,proto3" json:"ipAddress,omitempty"`
+ // Whether the device has an active connection or not
+ IsConnected bool `protobuf:"varint,2,opt,name=is_connected,json=isConnected,proto3" json:"isConnected,omitempty"`
+ // Whether the device has an active connection to an MQTT broker or not
+ IsMqttConnected bool `protobuf:"varint,3,opt,name=is_mqtt_connected,json=isMqttConnected,proto3" json:"isMqttConnected,omitempty"`
+ // Whether the device is actively remote syslogging or not
+ IsSyslogConnected bool `protobuf:"varint,4,opt,name=is_syslog_connected,json=isSyslogConnected,proto3" json:"isSyslogConnected,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *NetworkConnectionStatus) Reset() {
+ *x = NetworkConnectionStatus{}
+ mi := &file_meshtastic_connection_status_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *NetworkConnectionStatus) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NetworkConnectionStatus) ProtoMessage() {}
+
+func (x *NetworkConnectionStatus) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_connection_status_proto_msgTypes[3]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use NetworkConnectionStatus.ProtoReflect.Descriptor instead.
+func (*NetworkConnectionStatus) Descriptor() ([]byte, []int) {
+ return file_meshtastic_connection_status_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *NetworkConnectionStatus) GetIpAddress() uint32 {
+ if x != nil {
+ return x.IpAddress
+ }
+ return 0
+}
+
+func (x *NetworkConnectionStatus) GetIsConnected() bool {
+ if x != nil {
+ return x.IsConnected
+ }
+ return false
+}
+
+func (x *NetworkConnectionStatus) GetIsMqttConnected() bool {
+ if x != nil {
+ return x.IsMqttConnected
+ }
+ return false
+}
+
+func (x *NetworkConnectionStatus) GetIsSyslogConnected() bool {
+ if x != nil {
+ return x.IsSyslogConnected
+ }
+ return false
+}
+
+// Bluetooth connection status
+type BluetoothConnectionStatus struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The pairing PIN for bluetooth
+ Pin uint32 `protobuf:"varint,1,opt,name=pin,proto3" json:"pin,omitempty"`
+ // RSSI of bluetooth connection
+ Rssi int32 `protobuf:"varint,2,opt,name=rssi,proto3" json:"rssi,omitempty"`
+ // Whether the device has an active connection or not
+ IsConnected bool `protobuf:"varint,3,opt,name=is_connected,json=isConnected,proto3" json:"isConnected,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *BluetoothConnectionStatus) Reset() {
+ *x = BluetoothConnectionStatus{}
+ mi := &file_meshtastic_connection_status_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *BluetoothConnectionStatus) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*BluetoothConnectionStatus) ProtoMessage() {}
+
+func (x *BluetoothConnectionStatus) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_connection_status_proto_msgTypes[4]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use BluetoothConnectionStatus.ProtoReflect.Descriptor instead.
+func (*BluetoothConnectionStatus) Descriptor() ([]byte, []int) {
+ return file_meshtastic_connection_status_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *BluetoothConnectionStatus) GetPin() uint32 {
+ if x != nil {
+ return x.Pin
+ }
+ return 0
+}
+
+func (x *BluetoothConnectionStatus) GetRssi() int32 {
+ if x != nil {
+ return x.Rssi
+ }
+ return 0
+}
+
+func (x *BluetoothConnectionStatus) GetIsConnected() bool {
+ if x != nil {
+ return x.IsConnected
+ }
+ return false
+}
+
+// Serial connection status
+type SerialConnectionStatus struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Serial baud rate
+ Baud uint32 `protobuf:"varint,1,opt,name=baud,proto3" json:"baud,omitempty"`
+ // Whether the device has an active connection or not
+ IsConnected bool `protobuf:"varint,2,opt,name=is_connected,json=isConnected,proto3" json:"isConnected,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *SerialConnectionStatus) Reset() {
+ *x = SerialConnectionStatus{}
+ mi := &file_meshtastic_connection_status_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *SerialConnectionStatus) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SerialConnectionStatus) ProtoMessage() {}
+
+func (x *SerialConnectionStatus) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_connection_status_proto_msgTypes[5]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use SerialConnectionStatus.ProtoReflect.Descriptor instead.
+func (*SerialConnectionStatus) Descriptor() ([]byte, []int) {
+ return file_meshtastic_connection_status_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *SerialConnectionStatus) GetBaud() uint32 {
+ if x != nil {
+ return x.Baud
+ }
+ return 0
+}
+
+func (x *SerialConnectionStatus) GetIsConnected() bool {
+ if x != nil {
+ return x.IsConnected
+ }
+ return false
+}
+
+var File_meshtastic_connection_status_proto protoreflect.FileDescriptor
+
+const file_meshtastic_connection_status_proto_rawDesc = "" +
+ "\n" +
+ "\"meshtastic/connection_status.proto\x12\n" +
+ "meshtastic\"\xd4\x02\n" +
+ "\x16DeviceConnectionStatus\x129\n" +
+ "\x04wifi\x18\x01 \x01(\v2 .meshtastic.WifiConnectionStatusH\x00R\x04wifi\x88\x01\x01\x12E\n" +
+ "\bethernet\x18\x02 \x01(\v2$.meshtastic.EthernetConnectionStatusH\x01R\bethernet\x88\x01\x01\x12H\n" +
+ "\tbluetooth\x18\x03 \x01(\v2%.meshtastic.BluetoothConnectionStatusH\x02R\tbluetooth\x88\x01\x01\x12?\n" +
+ "\x06serial\x18\x04 \x01(\v2\".meshtastic.SerialConnectionStatusH\x03R\x06serial\x88\x01\x01B\a\n" +
+ "\x05_wifiB\v\n" +
+ "\t_ethernetB\f\n" +
+ "\n" +
+ "_bluetoothB\t\n" +
+ "\a_serial\"{\n" +
+ "\x14WifiConnectionStatus\x12;\n" +
+ "\x06status\x18\x01 \x01(\v2#.meshtastic.NetworkConnectionStatusR\x06status\x12\x12\n" +
+ "\x04ssid\x18\x02 \x01(\tR\x04ssid\x12\x12\n" +
+ "\x04rssi\x18\x03 \x01(\x05R\x04rssi\"W\n" +
+ "\x18EthernetConnectionStatus\x12;\n" +
+ "\x06status\x18\x01 \x01(\v2#.meshtastic.NetworkConnectionStatusR\x06status\"\xb7\x01\n" +
+ "\x17NetworkConnectionStatus\x12\x1d\n" +
+ "\n" +
+ "ip_address\x18\x01 \x01(\aR\tipAddress\x12!\n" +
+ "\fis_connected\x18\x02 \x01(\bR\visConnected\x12*\n" +
+ "\x11is_mqtt_connected\x18\x03 \x01(\bR\x0fisMqttConnected\x12.\n" +
+ "\x13is_syslog_connected\x18\x04 \x01(\bR\x11isSyslogConnected\"d\n" +
+ "\x19BluetoothConnectionStatus\x12\x10\n" +
+ "\x03pin\x18\x01 \x01(\rR\x03pin\x12\x12\n" +
+ "\x04rssi\x18\x02 \x01(\x05R\x04rssi\x12!\n" +
+ "\fis_connected\x18\x03 \x01(\bR\visConnected\"O\n" +
+ "\x16SerialConnectionStatus\x12\x12\n" +
+ "\x04baud\x18\x01 \x01(\rR\x04baud\x12!\n" +
+ "\fis_connected\x18\x02 \x01(\bR\visConnectedBf\n" +
+ "\x14org.meshtastic.protoB\x10ConnStatusProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00b\x06proto3"
+
+var (
+ file_meshtastic_connection_status_proto_rawDescOnce sync.Once
+ file_meshtastic_connection_status_proto_rawDescData []byte
+)
+
+func file_meshtastic_connection_status_proto_rawDescGZIP() []byte {
+ file_meshtastic_connection_status_proto_rawDescOnce.Do(func() {
+ file_meshtastic_connection_status_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_meshtastic_connection_status_proto_rawDesc), len(file_meshtastic_connection_status_proto_rawDesc)))
+ })
+ return file_meshtastic_connection_status_proto_rawDescData
+}
+
+var file_meshtastic_connection_status_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
+var file_meshtastic_connection_status_proto_goTypes = []any{
+ (*DeviceConnectionStatus)(nil), // 0: meshtastic.DeviceConnectionStatus
+ (*WifiConnectionStatus)(nil), // 1: meshtastic.WifiConnectionStatus
+ (*EthernetConnectionStatus)(nil), // 2: meshtastic.EthernetConnectionStatus
+ (*NetworkConnectionStatus)(nil), // 3: meshtastic.NetworkConnectionStatus
+ (*BluetoothConnectionStatus)(nil), // 4: meshtastic.BluetoothConnectionStatus
+ (*SerialConnectionStatus)(nil), // 5: meshtastic.SerialConnectionStatus
+}
+var file_meshtastic_connection_status_proto_depIdxs = []int32{
+ 1, // 0: meshtastic.DeviceConnectionStatus.wifi:type_name -> meshtastic.WifiConnectionStatus
+ 2, // 1: meshtastic.DeviceConnectionStatus.ethernet:type_name -> meshtastic.EthernetConnectionStatus
+ 4, // 2: meshtastic.DeviceConnectionStatus.bluetooth:type_name -> meshtastic.BluetoothConnectionStatus
+ 5, // 3: meshtastic.DeviceConnectionStatus.serial:type_name -> meshtastic.SerialConnectionStatus
+ 3, // 4: meshtastic.WifiConnectionStatus.status:type_name -> meshtastic.NetworkConnectionStatus
+ 3, // 5: meshtastic.EthernetConnectionStatus.status:type_name -> meshtastic.NetworkConnectionStatus
+ 6, // [6:6] is the sub-list for method output_type
+ 6, // [6:6] is the sub-list for method input_type
+ 6, // [6:6] is the sub-list for extension type_name
+ 6, // [6:6] is the sub-list for extension extendee
+ 0, // [0:6] is the sub-list for field type_name
+}
+
+func init() { file_meshtastic_connection_status_proto_init() }
+func file_meshtastic_connection_status_proto_init() {
+ if File_meshtastic_connection_status_proto != nil {
+ return
+ }
+ file_meshtastic_connection_status_proto_msgTypes[0].OneofWrappers = []any{}
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_meshtastic_connection_status_proto_rawDesc), len(file_meshtastic_connection_status_proto_rawDesc)),
+ NumEnums: 0,
+ NumMessages: 6,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_meshtastic_connection_status_proto_goTypes,
+ DependencyIndexes: file_meshtastic_connection_status_proto_depIdxs,
+ MessageInfos: file_meshtastic_connection_status_proto_msgTypes,
+ }.Build()
+ File_meshtastic_connection_status_proto = out.File
+ file_meshtastic_connection_status_proto_goTypes = nil
+ file_meshtastic_connection_status_proto_depIdxs = nil
+}
diff --git a/protocol/meshtastic/pb/device_ui.pb.go b/protocol/meshtastic/pb/device_ui.pb.go
new file mode 100644
index 0000000..701a582
--- /dev/null
+++ b/protocol/meshtastic/pb/device_ui.pb.go
@@ -0,0 +1,1014 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc v6.33.4
+// source: meshtastic/device_ui.proto
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type CompassMode int32
+
+const (
+ // Compass with dynamic ring and heading
+ CompassMode_DYNAMIC CompassMode = 0
+ // Compass with fixed ring and heading
+ CompassMode_FIXED_RING CompassMode = 1
+ // Compass with heading and freeze option
+ CompassMode_FREEZE_HEADING CompassMode = 2
+)
+
+// Enum value maps for CompassMode.
+var (
+ CompassMode_name = map[int32]string{
+ 0: "DYNAMIC",
+ 1: "FIXED_RING",
+ 2: "FREEZE_HEADING",
+ }
+ CompassMode_value = map[string]int32{
+ "DYNAMIC": 0,
+ "FIXED_RING": 1,
+ "FREEZE_HEADING": 2,
+ }
+)
+
+func (x CompassMode) Enum() *CompassMode {
+ p := new(CompassMode)
+ *p = x
+ return p
+}
+
+func (x CompassMode) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (CompassMode) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_device_ui_proto_enumTypes[0].Descriptor()
+}
+
+func (CompassMode) Type() protoreflect.EnumType {
+ return &file_meshtastic_device_ui_proto_enumTypes[0]
+}
+
+func (x CompassMode) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use CompassMode.Descriptor instead.
+func (CompassMode) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_device_ui_proto_rawDescGZIP(), []int{0}
+}
+
+type Theme int32
+
+const (
+ // Dark
+ Theme_DARK Theme = 0
+ // Light
+ Theme_LIGHT Theme = 1
+ // Red
+ Theme_RED Theme = 2
+)
+
+// Enum value maps for Theme.
+var (
+ Theme_name = map[int32]string{
+ 0: "DARK",
+ 1: "LIGHT",
+ 2: "RED",
+ }
+ Theme_value = map[string]int32{
+ "DARK": 0,
+ "LIGHT": 1,
+ "RED": 2,
+ }
+)
+
+func (x Theme) Enum() *Theme {
+ p := new(Theme)
+ *p = x
+ return p
+}
+
+func (x Theme) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Theme) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_device_ui_proto_enumTypes[1].Descriptor()
+}
+
+func (Theme) Type() protoreflect.EnumType {
+ return &file_meshtastic_device_ui_proto_enumTypes[1]
+}
+
+func (x Theme) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Theme.Descriptor instead.
+func (Theme) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_device_ui_proto_rawDescGZIP(), []int{1}
+}
+
+// Localization
+type Language int32
+
+const (
+ // English
+ Language_ENGLISH Language = 0
+ // French
+ Language_FRENCH Language = 1
+ // German
+ Language_GERMAN Language = 2
+ // Italian
+ Language_ITALIAN Language = 3
+ // Portuguese
+ Language_PORTUGUESE Language = 4
+ // Spanish
+ Language_SPANISH Language = 5
+ // Swedish
+ Language_SWEDISH Language = 6
+ // Finnish
+ Language_FINNISH Language = 7
+ // Polish
+ Language_POLISH Language = 8
+ // Turkish
+ Language_TURKISH Language = 9
+ // Serbian
+ Language_SERBIAN Language = 10
+ // Russian
+ Language_RUSSIAN Language = 11
+ // Dutch
+ Language_DUTCH Language = 12
+ // Greek
+ Language_GREEK Language = 13
+ // Norwegian
+ Language_NORWEGIAN Language = 14
+ // Slovenian
+ Language_SLOVENIAN Language = 15
+ // Ukrainian
+ Language_UKRAINIAN Language = 16
+ // Bulgarian
+ Language_BULGARIAN Language = 17
+ // Czech
+ Language_CZECH Language = 18
+ // Danish
+ Language_DANISH Language = 19
+ // Simplified Chinese (experimental)
+ Language_SIMPLIFIED_CHINESE Language = 30
+ // Traditional Chinese (experimental)
+ Language_TRADITIONAL_CHINESE Language = 31
+)
+
+// Enum value maps for Language.
+var (
+ Language_name = map[int32]string{
+ 0: "ENGLISH",
+ 1: "FRENCH",
+ 2: "GERMAN",
+ 3: "ITALIAN",
+ 4: "PORTUGUESE",
+ 5: "SPANISH",
+ 6: "SWEDISH",
+ 7: "FINNISH",
+ 8: "POLISH",
+ 9: "TURKISH",
+ 10: "SERBIAN",
+ 11: "RUSSIAN",
+ 12: "DUTCH",
+ 13: "GREEK",
+ 14: "NORWEGIAN",
+ 15: "SLOVENIAN",
+ 16: "UKRAINIAN",
+ 17: "BULGARIAN",
+ 18: "CZECH",
+ 19: "DANISH",
+ 30: "SIMPLIFIED_CHINESE",
+ 31: "TRADITIONAL_CHINESE",
+ }
+ Language_value = map[string]int32{
+ "ENGLISH": 0,
+ "FRENCH": 1,
+ "GERMAN": 2,
+ "ITALIAN": 3,
+ "PORTUGUESE": 4,
+ "SPANISH": 5,
+ "SWEDISH": 6,
+ "FINNISH": 7,
+ "POLISH": 8,
+ "TURKISH": 9,
+ "SERBIAN": 10,
+ "RUSSIAN": 11,
+ "DUTCH": 12,
+ "GREEK": 13,
+ "NORWEGIAN": 14,
+ "SLOVENIAN": 15,
+ "UKRAINIAN": 16,
+ "BULGARIAN": 17,
+ "CZECH": 18,
+ "DANISH": 19,
+ "SIMPLIFIED_CHINESE": 30,
+ "TRADITIONAL_CHINESE": 31,
+ }
+)
+
+func (x Language) Enum() *Language {
+ p := new(Language)
+ *p = x
+ return p
+}
+
+func (x Language) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Language) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_device_ui_proto_enumTypes[2].Descriptor()
+}
+
+func (Language) Type() protoreflect.EnumType {
+ return &file_meshtastic_device_ui_proto_enumTypes[2]
+}
+
+func (x Language) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Language.Descriptor instead.
+func (Language) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_device_ui_proto_rawDescGZIP(), []int{2}
+}
+
+// How the GPS coordinates are displayed on the OLED screen.
+type DeviceUIConfig_GpsCoordinateFormat int32
+
+const (
+ // GPS coordinates are displayed in the normal decimal degrees format:
+ // DD.DDDDDD DDD.DDDDDD
+ DeviceUIConfig_DEC DeviceUIConfig_GpsCoordinateFormat = 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
+ DeviceUIConfig_DMS DeviceUIConfig_GpsCoordinateFormat = 1
+ // Universal Transverse Mercator format:
+ // ZZB EEEEEE NNNNNNN, where Z is zone, B is band, E is easting, N is northing
+ DeviceUIConfig_UTM DeviceUIConfig_GpsCoordinateFormat = 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
+ DeviceUIConfig_MGRS DeviceUIConfig_GpsCoordinateFormat = 3
+ // Open Location Code (aka Plus Codes).
+ DeviceUIConfig_OLC DeviceUIConfig_GpsCoordinateFormat = 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
+ DeviceUIConfig_OSGR DeviceUIConfig_GpsCoordinateFormat = 5
+ // Maidenhead Locator System
+ // Described here: https://en.wikipedia.org/wiki/Maidenhead_Locator_System
+ DeviceUIConfig_MLS DeviceUIConfig_GpsCoordinateFormat = 6
+)
+
+// Enum value maps for DeviceUIConfig_GpsCoordinateFormat.
+var (
+ DeviceUIConfig_GpsCoordinateFormat_name = map[int32]string{
+ 0: "DEC",
+ 1: "DMS",
+ 2: "UTM",
+ 3: "MGRS",
+ 4: "OLC",
+ 5: "OSGR",
+ 6: "MLS",
+ }
+ DeviceUIConfig_GpsCoordinateFormat_value = map[string]int32{
+ "DEC": 0,
+ "DMS": 1,
+ "UTM": 2,
+ "MGRS": 3,
+ "OLC": 4,
+ "OSGR": 5,
+ "MLS": 6,
+ }
+)
+
+func (x DeviceUIConfig_GpsCoordinateFormat) Enum() *DeviceUIConfig_GpsCoordinateFormat {
+ p := new(DeviceUIConfig_GpsCoordinateFormat)
+ *p = x
+ return p
+}
+
+func (x DeviceUIConfig_GpsCoordinateFormat) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (DeviceUIConfig_GpsCoordinateFormat) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_device_ui_proto_enumTypes[3].Descriptor()
+}
+
+func (DeviceUIConfig_GpsCoordinateFormat) Type() protoreflect.EnumType {
+ return &file_meshtastic_device_ui_proto_enumTypes[3]
+}
+
+func (x DeviceUIConfig_GpsCoordinateFormat) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use DeviceUIConfig_GpsCoordinateFormat.Descriptor instead.
+func (DeviceUIConfig_GpsCoordinateFormat) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_device_ui_proto_rawDescGZIP(), []int{0, 0}
+}
+
+type DeviceUIConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // A version integer used to invalidate saved files when we make incompatible changes.
+ Version uint32 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"`
+ // TFT display brightness 1..255
+ ScreenBrightness uint32 `protobuf:"varint,2,opt,name=screen_brightness,json=screenBrightness,proto3" json:"screenBrightness,omitempty"`
+ // Screen timeout 0..900
+ ScreenTimeout uint32 `protobuf:"varint,3,opt,name=screen_timeout,json=screenTimeout,proto3" json:"screenTimeout,omitempty"`
+ // Screen/Settings lock enabled
+ ScreenLock bool `protobuf:"varint,4,opt,name=screen_lock,json=screenLock,proto3" json:"screenLock,omitempty"`
+ SettingsLock bool `protobuf:"varint,5,opt,name=settings_lock,json=settingsLock,proto3" json:"settingsLock,omitempty"`
+ PinCode uint32 `protobuf:"varint,6,opt,name=pin_code,json=pinCode,proto3" json:"pinCode,omitempty"`
+ // Color theme
+ Theme Theme `protobuf:"varint,7,opt,name=theme,proto3,enum=meshtastic.Theme" json:"theme,omitempty"`
+ // Audible message, banner and ring tone
+ AlertEnabled bool `protobuf:"varint,8,opt,name=alert_enabled,json=alertEnabled,proto3" json:"alertEnabled,omitempty"`
+ BannerEnabled bool `protobuf:"varint,9,opt,name=banner_enabled,json=bannerEnabled,proto3" json:"bannerEnabled,omitempty"`
+ RingToneId uint32 `protobuf:"varint,10,opt,name=ring_tone_id,json=ringToneId,proto3" json:"ringToneId,omitempty"`
+ // Localization
+ Language Language `protobuf:"varint,11,opt,name=language,proto3,enum=meshtastic.Language" json:"language,omitempty"`
+ // Node list filter
+ NodeFilter *NodeFilter `protobuf:"bytes,12,opt,name=node_filter,json=nodeFilter,proto3" json:"nodeFilter,omitempty"`
+ // Node list highlightening
+ NodeHighlight *NodeHighlight `protobuf:"bytes,13,opt,name=node_highlight,json=nodeHighlight,proto3" json:"nodeHighlight,omitempty"`
+ // 8 integers for screen calibration data
+ CalibrationData []byte `protobuf:"bytes,14,opt,name=calibration_data,json=calibrationData,proto3" json:"calibrationData,omitempty"`
+ // Map related data
+ MapData *Map `protobuf:"bytes,15,opt,name=map_data,json=mapData,proto3" json:"mapData,omitempty"`
+ // Compass mode
+ CompassMode CompassMode `protobuf:"varint,16,opt,name=compass_mode,json=compassMode,proto3,enum=meshtastic.CompassMode" json:"compassMode,omitempty"`
+ // RGB color for BaseUI
+ // 0xRRGGBB format, e.g. 0xFF0000 for red
+ ScreenRgbColor uint32 `protobuf:"varint,17,opt,name=screen_rgb_color,json=screenRgbColor,proto3" json:"screenRgbColor,omitempty"`
+ // Clockface analog style
+ // true for analog clockface, false for digital clockface
+ IsClockfaceAnalog bool `protobuf:"varint,18,opt,name=is_clockface_analog,json=isClockfaceAnalog,proto3" json:"isClockfaceAnalog,omitempty"`
+ // How the GPS coordinates are formatted on the OLED screen.
+ GpsFormat DeviceUIConfig_GpsCoordinateFormat `protobuf:"varint,19,opt,name=gps_format,json=gpsFormat,proto3,enum=meshtastic.DeviceUIConfig_GpsCoordinateFormat" json:"gpsFormat,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *DeviceUIConfig) Reset() {
+ *x = DeviceUIConfig{}
+ mi := &file_meshtastic_device_ui_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *DeviceUIConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeviceUIConfig) ProtoMessage() {}
+
+func (x *DeviceUIConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_device_ui_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DeviceUIConfig.ProtoReflect.Descriptor instead.
+func (*DeviceUIConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_device_ui_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *DeviceUIConfig) GetVersion() uint32 {
+ if x != nil {
+ return x.Version
+ }
+ return 0
+}
+
+func (x *DeviceUIConfig) GetScreenBrightness() uint32 {
+ if x != nil {
+ return x.ScreenBrightness
+ }
+ return 0
+}
+
+func (x *DeviceUIConfig) GetScreenTimeout() uint32 {
+ if x != nil {
+ return x.ScreenTimeout
+ }
+ return 0
+}
+
+func (x *DeviceUIConfig) GetScreenLock() bool {
+ if x != nil {
+ return x.ScreenLock
+ }
+ return false
+}
+
+func (x *DeviceUIConfig) GetSettingsLock() bool {
+ if x != nil {
+ return x.SettingsLock
+ }
+ return false
+}
+
+func (x *DeviceUIConfig) GetPinCode() uint32 {
+ if x != nil {
+ return x.PinCode
+ }
+ return 0
+}
+
+func (x *DeviceUIConfig) GetTheme() Theme {
+ if x != nil {
+ return x.Theme
+ }
+ return Theme_DARK
+}
+
+func (x *DeviceUIConfig) GetAlertEnabled() bool {
+ if x != nil {
+ return x.AlertEnabled
+ }
+ return false
+}
+
+func (x *DeviceUIConfig) GetBannerEnabled() bool {
+ if x != nil {
+ return x.BannerEnabled
+ }
+ return false
+}
+
+func (x *DeviceUIConfig) GetRingToneId() uint32 {
+ if x != nil {
+ return x.RingToneId
+ }
+ return 0
+}
+
+func (x *DeviceUIConfig) GetLanguage() Language {
+ if x != nil {
+ return x.Language
+ }
+ return Language_ENGLISH
+}
+
+func (x *DeviceUIConfig) GetNodeFilter() *NodeFilter {
+ if x != nil {
+ return x.NodeFilter
+ }
+ return nil
+}
+
+func (x *DeviceUIConfig) GetNodeHighlight() *NodeHighlight {
+ if x != nil {
+ return x.NodeHighlight
+ }
+ return nil
+}
+
+func (x *DeviceUIConfig) GetCalibrationData() []byte {
+ if x != nil {
+ return x.CalibrationData
+ }
+ return nil
+}
+
+func (x *DeviceUIConfig) GetMapData() *Map {
+ if x != nil {
+ return x.MapData
+ }
+ return nil
+}
+
+func (x *DeviceUIConfig) GetCompassMode() CompassMode {
+ if x != nil {
+ return x.CompassMode
+ }
+ return CompassMode_DYNAMIC
+}
+
+func (x *DeviceUIConfig) GetScreenRgbColor() uint32 {
+ if x != nil {
+ return x.ScreenRgbColor
+ }
+ return 0
+}
+
+func (x *DeviceUIConfig) GetIsClockfaceAnalog() bool {
+ if x != nil {
+ return x.IsClockfaceAnalog
+ }
+ return false
+}
+
+func (x *DeviceUIConfig) GetGpsFormat() DeviceUIConfig_GpsCoordinateFormat {
+ if x != nil {
+ return x.GpsFormat
+ }
+ return DeviceUIConfig_DEC
+}
+
+type NodeFilter struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Filter unknown nodes
+ UnknownSwitch bool `protobuf:"varint,1,opt,name=unknown_switch,json=unknownSwitch,proto3" json:"unknownSwitch,omitempty"`
+ // Filter offline nodes
+ OfflineSwitch bool `protobuf:"varint,2,opt,name=offline_switch,json=offlineSwitch,proto3" json:"offlineSwitch,omitempty"`
+ // Filter nodes w/o public key
+ PublicKeySwitch bool `protobuf:"varint,3,opt,name=public_key_switch,json=publicKeySwitch,proto3" json:"publicKeySwitch,omitempty"`
+ // Filter based on hops away
+ HopsAway int32 `protobuf:"varint,4,opt,name=hops_away,json=hopsAway,proto3" json:"hopsAway,omitempty"`
+ // Filter nodes w/o position
+ PositionSwitch bool `protobuf:"varint,5,opt,name=position_switch,json=positionSwitch,proto3" json:"positionSwitch,omitempty"`
+ // Filter nodes by matching name string
+ NodeName string `protobuf:"bytes,6,opt,name=node_name,json=nodeName,proto3" json:"nodeName,omitempty"`
+ // Filter based on channel
+ Channel int32 `protobuf:"varint,7,opt,name=channel,proto3" json:"channel,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *NodeFilter) Reset() {
+ *x = NodeFilter{}
+ mi := &file_meshtastic_device_ui_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *NodeFilter) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodeFilter) ProtoMessage() {}
+
+func (x *NodeFilter) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_device_ui_proto_msgTypes[1]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use NodeFilter.ProtoReflect.Descriptor instead.
+func (*NodeFilter) Descriptor() ([]byte, []int) {
+ return file_meshtastic_device_ui_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *NodeFilter) GetUnknownSwitch() bool {
+ if x != nil {
+ return x.UnknownSwitch
+ }
+ return false
+}
+
+func (x *NodeFilter) GetOfflineSwitch() bool {
+ if x != nil {
+ return x.OfflineSwitch
+ }
+ return false
+}
+
+func (x *NodeFilter) GetPublicKeySwitch() bool {
+ if x != nil {
+ return x.PublicKeySwitch
+ }
+ return false
+}
+
+func (x *NodeFilter) GetHopsAway() int32 {
+ if x != nil {
+ return x.HopsAway
+ }
+ return 0
+}
+
+func (x *NodeFilter) GetPositionSwitch() bool {
+ if x != nil {
+ return x.PositionSwitch
+ }
+ return false
+}
+
+func (x *NodeFilter) GetNodeName() string {
+ if x != nil {
+ return x.NodeName
+ }
+ return ""
+}
+
+func (x *NodeFilter) GetChannel() int32 {
+ if x != nil {
+ return x.Channel
+ }
+ return 0
+}
+
+type NodeHighlight struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Hightlight nodes w/ active chat
+ ChatSwitch bool `protobuf:"varint,1,opt,name=chat_switch,json=chatSwitch,proto3" json:"chatSwitch,omitempty"`
+ // Highlight nodes w/ position
+ PositionSwitch bool `protobuf:"varint,2,opt,name=position_switch,json=positionSwitch,proto3" json:"positionSwitch,omitempty"`
+ // Highlight nodes w/ telemetry data
+ TelemetrySwitch bool `protobuf:"varint,3,opt,name=telemetry_switch,json=telemetrySwitch,proto3" json:"telemetrySwitch,omitempty"`
+ // Highlight nodes w/ iaq data
+ IaqSwitch bool `protobuf:"varint,4,opt,name=iaq_switch,json=iaqSwitch,proto3" json:"iaqSwitch,omitempty"`
+ // Highlight nodes by matching name string
+ NodeName string `protobuf:"bytes,5,opt,name=node_name,json=nodeName,proto3" json:"nodeName,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *NodeHighlight) Reset() {
+ *x = NodeHighlight{}
+ mi := &file_meshtastic_device_ui_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *NodeHighlight) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodeHighlight) ProtoMessage() {}
+
+func (x *NodeHighlight) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_device_ui_proto_msgTypes[2]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use NodeHighlight.ProtoReflect.Descriptor instead.
+func (*NodeHighlight) Descriptor() ([]byte, []int) {
+ return file_meshtastic_device_ui_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *NodeHighlight) GetChatSwitch() bool {
+ if x != nil {
+ return x.ChatSwitch
+ }
+ return false
+}
+
+func (x *NodeHighlight) GetPositionSwitch() bool {
+ if x != nil {
+ return x.PositionSwitch
+ }
+ return false
+}
+
+func (x *NodeHighlight) GetTelemetrySwitch() bool {
+ if x != nil {
+ return x.TelemetrySwitch
+ }
+ return false
+}
+
+func (x *NodeHighlight) GetIaqSwitch() bool {
+ if x != nil {
+ return x.IaqSwitch
+ }
+ return false
+}
+
+func (x *NodeHighlight) GetNodeName() string {
+ if x != nil {
+ return x.NodeName
+ }
+ return ""
+}
+
+type GeoPoint struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Zoom level
+ Zoom int32 `protobuf:"varint,1,opt,name=zoom,proto3" json:"zoom,omitempty"`
+ // Coordinate: latitude
+ Latitude int32 `protobuf:"varint,2,opt,name=latitude,proto3" json:"latitude,omitempty"`
+ // Coordinate: longitude
+ Longitude int32 `protobuf:"varint,3,opt,name=longitude,proto3" json:"longitude,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *GeoPoint) Reset() {
+ *x = GeoPoint{}
+ mi := &file_meshtastic_device_ui_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *GeoPoint) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GeoPoint) ProtoMessage() {}
+
+func (x *GeoPoint) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_device_ui_proto_msgTypes[3]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use GeoPoint.ProtoReflect.Descriptor instead.
+func (*GeoPoint) Descriptor() ([]byte, []int) {
+ return file_meshtastic_device_ui_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *GeoPoint) GetZoom() int32 {
+ if x != nil {
+ return x.Zoom
+ }
+ return 0
+}
+
+func (x *GeoPoint) GetLatitude() int32 {
+ if x != nil {
+ return x.Latitude
+ }
+ return 0
+}
+
+func (x *GeoPoint) GetLongitude() int32 {
+ if x != nil {
+ return x.Longitude
+ }
+ return 0
+}
+
+type Map struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Home coordinates
+ Home *GeoPoint `protobuf:"bytes,1,opt,name=home,proto3" json:"home,omitempty"`
+ // Map tile style
+ Style string `protobuf:"bytes,2,opt,name=style,proto3" json:"style,omitempty"`
+ // Map scroll follows GPS
+ FollowGps bool `protobuf:"varint,3,opt,name=follow_gps,json=followGps,proto3" json:"followGps,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Map) Reset() {
+ *x = Map{}
+ mi := &file_meshtastic_device_ui_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Map) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Map) ProtoMessage() {}
+
+func (x *Map) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_device_ui_proto_msgTypes[4]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Map.ProtoReflect.Descriptor instead.
+func (*Map) Descriptor() ([]byte, []int) {
+ return file_meshtastic_device_ui_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *Map) GetHome() *GeoPoint {
+ if x != nil {
+ return x.Home
+ }
+ return nil
+}
+
+func (x *Map) GetStyle() string {
+ if x != nil {
+ return x.Style
+ }
+ return ""
+}
+
+func (x *Map) GetFollowGps() bool {
+ if x != nil {
+ return x.FollowGps
+ }
+ return false
+}
+
+var File_meshtastic_device_ui_proto protoreflect.FileDescriptor
+
+const file_meshtastic_device_ui_proto_rawDesc = "" +
+ "\n" +
+ "\x1ameshtastic/device_ui.proto\x12\n" +
+ "meshtastic\"\xb7\a\n" +
+ "\x0eDeviceUIConfig\x12\x18\n" +
+ "\aversion\x18\x01 \x01(\rR\aversion\x12+\n" +
+ "\x11screen_brightness\x18\x02 \x01(\rR\x10screenBrightness\x12%\n" +
+ "\x0escreen_timeout\x18\x03 \x01(\rR\rscreenTimeout\x12\x1f\n" +
+ "\vscreen_lock\x18\x04 \x01(\bR\n" +
+ "screenLock\x12#\n" +
+ "\rsettings_lock\x18\x05 \x01(\bR\fsettingsLock\x12\x19\n" +
+ "\bpin_code\x18\x06 \x01(\rR\apinCode\x12'\n" +
+ "\x05theme\x18\a \x01(\x0e2\x11.meshtastic.ThemeR\x05theme\x12#\n" +
+ "\ralert_enabled\x18\b \x01(\bR\falertEnabled\x12%\n" +
+ "\x0ebanner_enabled\x18\t \x01(\bR\rbannerEnabled\x12 \n" +
+ "\fring_tone_id\x18\n" +
+ " \x01(\rR\n" +
+ "ringToneId\x120\n" +
+ "\blanguage\x18\v \x01(\x0e2\x14.meshtastic.LanguageR\blanguage\x127\n" +
+ "\vnode_filter\x18\f \x01(\v2\x16.meshtastic.NodeFilterR\n" +
+ "nodeFilter\x12@\n" +
+ "\x0enode_highlight\x18\r \x01(\v2\x19.meshtastic.NodeHighlightR\rnodeHighlight\x12)\n" +
+ "\x10calibration_data\x18\x0e \x01(\fR\x0fcalibrationData\x12*\n" +
+ "\bmap_data\x18\x0f \x01(\v2\x0f.meshtastic.MapR\amapData\x12:\n" +
+ "\fcompass_mode\x18\x10 \x01(\x0e2\x17.meshtastic.CompassModeR\vcompassMode\x12(\n" +
+ "\x10screen_rgb_color\x18\x11 \x01(\rR\x0escreenRgbColor\x12.\n" +
+ "\x13is_clockface_analog\x18\x12 \x01(\bR\x11isClockfaceAnalog\x12M\n" +
+ "\n" +
+ "gps_format\x18\x13 \x01(\x0e2..meshtastic.DeviceUIConfig.GpsCoordinateFormatR\tgpsFormat\"V\n" +
+ "\x13GpsCoordinateFormat\x12\a\n" +
+ "\x03DEC\x10\x00\x12\a\n" +
+ "\x03DMS\x10\x01\x12\a\n" +
+ "\x03UTM\x10\x02\x12\b\n" +
+ "\x04MGRS\x10\x03\x12\a\n" +
+ "\x03OLC\x10\x04\x12\b\n" +
+ "\x04OSGR\x10\x05\x12\a\n" +
+ "\x03MLS\x10\x06\"\x83\x02\n" +
+ "\n" +
+ "NodeFilter\x12%\n" +
+ "\x0eunknown_switch\x18\x01 \x01(\bR\runknownSwitch\x12%\n" +
+ "\x0eoffline_switch\x18\x02 \x01(\bR\rofflineSwitch\x12*\n" +
+ "\x11public_key_switch\x18\x03 \x01(\bR\x0fpublicKeySwitch\x12\x1b\n" +
+ "\thops_away\x18\x04 \x01(\x05R\bhopsAway\x12'\n" +
+ "\x0fposition_switch\x18\x05 \x01(\bR\x0epositionSwitch\x12\x1b\n" +
+ "\tnode_name\x18\x06 \x01(\tR\bnodeName\x12\x18\n" +
+ "\achannel\x18\a \x01(\x05R\achannel\"\xc0\x01\n" +
+ "\rNodeHighlight\x12\x1f\n" +
+ "\vchat_switch\x18\x01 \x01(\bR\n" +
+ "chatSwitch\x12'\n" +
+ "\x0fposition_switch\x18\x02 \x01(\bR\x0epositionSwitch\x12)\n" +
+ "\x10telemetry_switch\x18\x03 \x01(\bR\x0ftelemetrySwitch\x12\x1d\n" +
+ "\n" +
+ "iaq_switch\x18\x04 \x01(\bR\tiaqSwitch\x12\x1b\n" +
+ "\tnode_name\x18\x05 \x01(\tR\bnodeName\"X\n" +
+ "\bGeoPoint\x12\x12\n" +
+ "\x04zoom\x18\x01 \x01(\x05R\x04zoom\x12\x1a\n" +
+ "\blatitude\x18\x02 \x01(\x05R\blatitude\x12\x1c\n" +
+ "\tlongitude\x18\x03 \x01(\x05R\tlongitude\"d\n" +
+ "\x03Map\x12(\n" +
+ "\x04home\x18\x01 \x01(\v2\x14.meshtastic.GeoPointR\x04home\x12\x14\n" +
+ "\x05style\x18\x02 \x01(\tR\x05style\x12\x1d\n" +
+ "\n" +
+ "follow_gps\x18\x03 \x01(\bR\tfollowGps*>\n" +
+ "\vCompassMode\x12\v\n" +
+ "\aDYNAMIC\x10\x00\x12\x0e\n" +
+ "\n" +
+ "FIXED_RING\x10\x01\x12\x12\n" +
+ "\x0eFREEZE_HEADING\x10\x02*%\n" +
+ "\x05Theme\x12\b\n" +
+ "\x04DARK\x10\x00\x12\t\n" +
+ "\x05LIGHT\x10\x01\x12\a\n" +
+ "\x03RED\x10\x02*\xc0\x02\n" +
+ "\bLanguage\x12\v\n" +
+ "\aENGLISH\x10\x00\x12\n" +
+ "\n" +
+ "\x06FRENCH\x10\x01\x12\n" +
+ "\n" +
+ "\x06GERMAN\x10\x02\x12\v\n" +
+ "\aITALIAN\x10\x03\x12\x0e\n" +
+ "\n" +
+ "PORTUGUESE\x10\x04\x12\v\n" +
+ "\aSPANISH\x10\x05\x12\v\n" +
+ "\aSWEDISH\x10\x06\x12\v\n" +
+ "\aFINNISH\x10\a\x12\n" +
+ "\n" +
+ "\x06POLISH\x10\b\x12\v\n" +
+ "\aTURKISH\x10\t\x12\v\n" +
+ "\aSERBIAN\x10\n" +
+ "\x12\v\n" +
+ "\aRUSSIAN\x10\v\x12\t\n" +
+ "\x05DUTCH\x10\f\x12\t\n" +
+ "\x05GREEK\x10\r\x12\r\n" +
+ "\tNORWEGIAN\x10\x0e\x12\r\n" +
+ "\tSLOVENIAN\x10\x0f\x12\r\n" +
+ "\tUKRAINIAN\x10\x10\x12\r\n" +
+ "\tBULGARIAN\x10\x11\x12\t\n" +
+ "\x05CZECH\x10\x12\x12\n" +
+ "\n" +
+ "\x06DANISH\x10\x13\x12\x16\n" +
+ "\x12SIMPLIFIED_CHINESE\x10\x1e\x12\x17\n" +
+ "\x13TRADITIONAL_CHINESE\x10\x1fBd\n" +
+ "\x14org.meshtastic.protoB\x0eDeviceUIProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00b\x06proto3"
+
+var (
+ file_meshtastic_device_ui_proto_rawDescOnce sync.Once
+ file_meshtastic_device_ui_proto_rawDescData []byte
+)
+
+func file_meshtastic_device_ui_proto_rawDescGZIP() []byte {
+ file_meshtastic_device_ui_proto_rawDescOnce.Do(func() {
+ file_meshtastic_device_ui_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_meshtastic_device_ui_proto_rawDesc), len(file_meshtastic_device_ui_proto_rawDesc)))
+ })
+ return file_meshtastic_device_ui_proto_rawDescData
+}
+
+var file_meshtastic_device_ui_proto_enumTypes = make([]protoimpl.EnumInfo, 4)
+var file_meshtastic_device_ui_proto_msgTypes = make([]protoimpl.MessageInfo, 5)
+var file_meshtastic_device_ui_proto_goTypes = []any{
+ (CompassMode)(0), // 0: meshtastic.CompassMode
+ (Theme)(0), // 1: meshtastic.Theme
+ (Language)(0), // 2: meshtastic.Language
+ (DeviceUIConfig_GpsCoordinateFormat)(0), // 3: meshtastic.DeviceUIConfig.GpsCoordinateFormat
+ (*DeviceUIConfig)(nil), // 4: meshtastic.DeviceUIConfig
+ (*NodeFilter)(nil), // 5: meshtastic.NodeFilter
+ (*NodeHighlight)(nil), // 6: meshtastic.NodeHighlight
+ (*GeoPoint)(nil), // 7: meshtastic.GeoPoint
+ (*Map)(nil), // 8: meshtastic.Map
+}
+var file_meshtastic_device_ui_proto_depIdxs = []int32{
+ 1, // 0: meshtastic.DeviceUIConfig.theme:type_name -> meshtastic.Theme
+ 2, // 1: meshtastic.DeviceUIConfig.language:type_name -> meshtastic.Language
+ 5, // 2: meshtastic.DeviceUIConfig.node_filter:type_name -> meshtastic.NodeFilter
+ 6, // 3: meshtastic.DeviceUIConfig.node_highlight:type_name -> meshtastic.NodeHighlight
+ 8, // 4: meshtastic.DeviceUIConfig.map_data:type_name -> meshtastic.Map
+ 0, // 5: meshtastic.DeviceUIConfig.compass_mode:type_name -> meshtastic.CompassMode
+ 3, // 6: meshtastic.DeviceUIConfig.gps_format:type_name -> meshtastic.DeviceUIConfig.GpsCoordinateFormat
+ 7, // 7: meshtastic.Map.home:type_name -> meshtastic.GeoPoint
+ 8, // [8:8] is the sub-list for method output_type
+ 8, // [8:8] is the sub-list for method input_type
+ 8, // [8:8] is the sub-list for extension type_name
+ 8, // [8:8] is the sub-list for extension extendee
+ 0, // [0:8] is the sub-list for field type_name
+}
+
+func init() { file_meshtastic_device_ui_proto_init() }
+func file_meshtastic_device_ui_proto_init() {
+ if File_meshtastic_device_ui_proto != nil {
+ return
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_meshtastic_device_ui_proto_rawDesc), len(file_meshtastic_device_ui_proto_rawDesc)),
+ NumEnums: 4,
+ NumMessages: 5,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_meshtastic_device_ui_proto_goTypes,
+ DependencyIndexes: file_meshtastic_device_ui_proto_depIdxs,
+ EnumInfos: file_meshtastic_device_ui_proto_enumTypes,
+ MessageInfos: file_meshtastic_device_ui_proto_msgTypes,
+ }.Build()
+ File_meshtastic_device_ui_proto = out.File
+ file_meshtastic_device_ui_proto_goTypes = nil
+ file_meshtastic_device_ui_proto_depIdxs = nil
+}
diff --git a/protocol/meshtastic/pb/deviceonly.pb.go b/protocol/meshtastic/pb/deviceonly.pb.go
new file mode 100644
index 0000000..3b1bd70
--- /dev/null
+++ b/protocol/meshtastic/pb/deviceonly.pb.go
@@ -0,0 +1,892 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc v6.33.4
+// source: meshtastic/deviceonly.proto
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// Position with static location information only for NodeDBLite
+type PositionLite struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The new preferred location encoding, multiply by 1e-7 to get degrees
+ // in floating point
+ LatitudeI int32 `protobuf:"fixed32,1,opt,name=latitude_i,json=latitudeI,proto3" json:"latitudeI,omitempty"`
+ // TODO: REPLACE
+ LongitudeI int32 `protobuf:"fixed32,2,opt,name=longitude_i,json=longitudeI,proto3" json:"longitudeI,omitempty"`
+ // In meters above MSL (but see issue #359)
+ Altitude int32 `protobuf:"varint,3,opt,name=altitude,proto3" json:"altitude,omitempty"`
+ // This is usually not sent over the mesh (to save space), but it is sent
+ // from the phone so that the local device can set its RTC If it is sent over
+ // the mesh (because there are devices on the mesh without GPS), it will only
+ // be sent by devices which has a hardware GPS clock.
+ // seconds since 1970
+ Time uint32 `protobuf:"fixed32,4,opt,name=time,proto3" json:"time,omitempty"`
+ // TODO: REPLACE
+ LocationSource Position_LocSource `protobuf:"varint,5,opt,name=location_source,json=locationSource,proto3,enum=meshtastic.Position_LocSource" json:"locationSource,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *PositionLite) Reset() {
+ *x = PositionLite{}
+ mi := &file_meshtastic_deviceonly_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *PositionLite) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PositionLite) ProtoMessage() {}
+
+func (x *PositionLite) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_deviceonly_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use PositionLite.ProtoReflect.Descriptor instead.
+func (*PositionLite) Descriptor() ([]byte, []int) {
+ return file_meshtastic_deviceonly_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *PositionLite) GetLatitudeI() int32 {
+ if x != nil {
+ return x.LatitudeI
+ }
+ return 0
+}
+
+func (x *PositionLite) GetLongitudeI() int32 {
+ if x != nil {
+ return x.LongitudeI
+ }
+ return 0
+}
+
+func (x *PositionLite) GetAltitude() int32 {
+ if x != nil {
+ return x.Altitude
+ }
+ return 0
+}
+
+func (x *PositionLite) GetTime() uint32 {
+ if x != nil {
+ return x.Time
+ }
+ return 0
+}
+
+func (x *PositionLite) GetLocationSource() Position_LocSource {
+ if x != nil {
+ return x.LocationSource
+ }
+ return Position_LOC_UNSET
+}
+
+type UserLite struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // This is the addr of the radio.
+ //
+ // Deprecated: Marked as deprecated in meshtastic/deviceonly.proto.
+ Macaddr []byte `protobuf:"bytes,1,opt,name=macaddr,proto3" json:"macaddr,omitempty"`
+ // A full name for this user, i.e. "Kevin Hester"
+ LongName string `protobuf:"bytes,2,opt,name=long_name,json=longName,proto3" json:"longName,omitempty"`
+ // A VERY short name, ideally two characters.
+ // Suitable for a tiny OLED screen
+ ShortName string `protobuf:"bytes,3,opt,name=short_name,json=shortName,proto3" json:"shortName,omitempty"`
+ // 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.
+ HwModel HardwareModel `protobuf:"varint,4,opt,name=hw_model,json=hwModel,proto3,enum=meshtastic.HardwareModel" json:"hwModel,omitempty"`
+ // 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.
+ IsLicensed bool `protobuf:"varint,5,opt,name=is_licensed,json=isLicensed,proto3" json:"isLicensed,omitempty"`
+ // Indicates that the user's role in the mesh
+ Role Config_DeviceConfig_Role `protobuf:"varint,6,opt,name=role,proto3,enum=meshtastic.Config_DeviceConfig_Role" json:"role,omitempty"`
+ // 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.
+ PublicKey []byte `protobuf:"bytes,7,opt,name=public_key,json=publicKey,proto3" json:"publicKey,omitempty"`
+ // Whether or not the node can be messaged
+ IsUnmessagable *bool `protobuf:"varint,9,opt,name=is_unmessagable,json=isUnmessagable,proto3,oneof" json:"isUnmessagable,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *UserLite) Reset() {
+ *x = UserLite{}
+ mi := &file_meshtastic_deviceonly_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *UserLite) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*UserLite) ProtoMessage() {}
+
+func (x *UserLite) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_deviceonly_proto_msgTypes[1]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use UserLite.ProtoReflect.Descriptor instead.
+func (*UserLite) Descriptor() ([]byte, []int) {
+ return file_meshtastic_deviceonly_proto_rawDescGZIP(), []int{1}
+}
+
+// Deprecated: Marked as deprecated in meshtastic/deviceonly.proto.
+func (x *UserLite) GetMacaddr() []byte {
+ if x != nil {
+ return x.Macaddr
+ }
+ return nil
+}
+
+func (x *UserLite) GetLongName() string {
+ if x != nil {
+ return x.LongName
+ }
+ return ""
+}
+
+func (x *UserLite) GetShortName() string {
+ if x != nil {
+ return x.ShortName
+ }
+ return ""
+}
+
+func (x *UserLite) GetHwModel() HardwareModel {
+ if x != nil {
+ return x.HwModel
+ }
+ return HardwareModel_UNSET
+}
+
+func (x *UserLite) GetIsLicensed() bool {
+ if x != nil {
+ return x.IsLicensed
+ }
+ return false
+}
+
+func (x *UserLite) GetRole() Config_DeviceConfig_Role {
+ if x != nil {
+ return x.Role
+ }
+ return Config_DeviceConfig_CLIENT
+}
+
+func (x *UserLite) GetPublicKey() []byte {
+ if x != nil {
+ return x.PublicKey
+ }
+ return nil
+}
+
+func (x *UserLite) GetIsUnmessagable() bool {
+ if x != nil && x.IsUnmessagable != nil {
+ return *x.IsUnmessagable
+ }
+ return false
+}
+
+type NodeInfoLite struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The node number
+ Num uint32 `protobuf:"varint,1,opt,name=num,proto3" json:"num,omitempty"`
+ // The user info for this node
+ User *UserLite `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"`
+ // This position data. Note: before 1.2.14 we would also store the last time we've heard from this node in position.time, that is no longer true.
+ // Position.time now indicates the last time we received a POSITION from that node.
+ Position *PositionLite `protobuf:"bytes,3,opt,name=position,proto3" json:"position,omitempty"`
+ // Returns the Signal-to-noise ratio (SNR) of the last received message,
+ // as measured by the receiver. Return SNR of the last received message in dB
+ Snr float32 `protobuf:"fixed32,4,opt,name=snr,proto3" json:"snr,omitempty"`
+ // Set to indicate the last time we received a packet from this node
+ LastHeard uint32 `protobuf:"fixed32,5,opt,name=last_heard,json=lastHeard,proto3" json:"lastHeard,omitempty"`
+ // The latest device metrics for the node.
+ DeviceMetrics *DeviceMetrics `protobuf:"bytes,6,opt,name=device_metrics,json=deviceMetrics,proto3" json:"deviceMetrics,omitempty"`
+ // local channel index we heard that node on. Only populated if its not the default channel.
+ Channel uint32 `protobuf:"varint,7,opt,name=channel,proto3" json:"channel,omitempty"`
+ // True if we witnessed the node over MQTT instead of LoRA transport
+ ViaMqtt bool `protobuf:"varint,8,opt,name=via_mqtt,json=viaMqtt,proto3" json:"viaMqtt,omitempty"`
+ // Number of hops away from us this node is (0 if direct neighbor)
+ HopsAway *uint32 `protobuf:"varint,9,opt,name=hops_away,json=hopsAway,proto3,oneof" json:"hopsAway,omitempty"`
+ // True if node is in our favorites list
+ // Persists between NodeDB internal clean ups
+ IsFavorite bool `protobuf:"varint,10,opt,name=is_favorite,json=isFavorite,proto3" json:"isFavorite,omitempty"`
+ // True if node is in our ignored list
+ // Persists between NodeDB internal clean ups
+ IsIgnored bool `protobuf:"varint,11,opt,name=is_ignored,json=isIgnored,proto3" json:"isIgnored,omitempty"`
+ // Last byte of the node number of the node that should be used as the next hop to reach this node.
+ NextHop uint32 `protobuf:"varint,12,opt,name=next_hop,json=nextHop,proto3" json:"nextHop,omitempty"`
+ // Bitfield for storing booleans.
+ // LSB 0 is_key_manually_verified
+ // LSB 1 is_muted
+ Bitfield uint32 `protobuf:"varint,13,opt,name=bitfield,proto3" json:"bitfield,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *NodeInfoLite) Reset() {
+ *x = NodeInfoLite{}
+ mi := &file_meshtastic_deviceonly_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *NodeInfoLite) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodeInfoLite) ProtoMessage() {}
+
+func (x *NodeInfoLite) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_deviceonly_proto_msgTypes[2]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use NodeInfoLite.ProtoReflect.Descriptor instead.
+func (*NodeInfoLite) Descriptor() ([]byte, []int) {
+ return file_meshtastic_deviceonly_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *NodeInfoLite) GetNum() uint32 {
+ if x != nil {
+ return x.Num
+ }
+ return 0
+}
+
+func (x *NodeInfoLite) GetUser() *UserLite {
+ if x != nil {
+ return x.User
+ }
+ return nil
+}
+
+func (x *NodeInfoLite) GetPosition() *PositionLite {
+ if x != nil {
+ return x.Position
+ }
+ return nil
+}
+
+func (x *NodeInfoLite) GetSnr() float32 {
+ if x != nil {
+ return x.Snr
+ }
+ return 0
+}
+
+func (x *NodeInfoLite) GetLastHeard() uint32 {
+ if x != nil {
+ return x.LastHeard
+ }
+ return 0
+}
+
+func (x *NodeInfoLite) GetDeviceMetrics() *DeviceMetrics {
+ if x != nil {
+ return x.DeviceMetrics
+ }
+ return nil
+}
+
+func (x *NodeInfoLite) GetChannel() uint32 {
+ if x != nil {
+ return x.Channel
+ }
+ return 0
+}
+
+func (x *NodeInfoLite) GetViaMqtt() bool {
+ if x != nil {
+ return x.ViaMqtt
+ }
+ return false
+}
+
+func (x *NodeInfoLite) GetHopsAway() uint32 {
+ if x != nil && x.HopsAway != nil {
+ return *x.HopsAway
+ }
+ return 0
+}
+
+func (x *NodeInfoLite) GetIsFavorite() bool {
+ if x != nil {
+ return x.IsFavorite
+ }
+ return false
+}
+
+func (x *NodeInfoLite) GetIsIgnored() bool {
+ if x != nil {
+ return x.IsIgnored
+ }
+ return false
+}
+
+func (x *NodeInfoLite) GetNextHop() uint32 {
+ if x != nil {
+ return x.NextHop
+ }
+ return 0
+}
+
+func (x *NodeInfoLite) GetBitfield() uint32 {
+ if x != nil {
+ return x.Bitfield
+ }
+ return 0
+}
+
+// This message is never sent over the wire, but it is used for serializing DB
+// state to flash in the device code
+// FIXME, since we write this each time we enter deep sleep (and have infinite
+// flash) it would be better to use some sort of append only data structure for
+// the receive queue and use the preferences store for the other stuff
+type DeviceState struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Read only settings/info about this node
+ MyNode *MyNodeInfo `protobuf:"bytes,2,opt,name=my_node,json=myNode,proto3" json:"myNode,omitempty"`
+ // My owner info
+ Owner *User `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"`
+ // Received packets saved for delivery to the phone
+ ReceiveQueue []*MeshPacket `protobuf:"bytes,5,rep,name=receive_queue,json=receiveQueue,proto3" json:"receiveQueue,omitempty"`
+ // 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.
+ Version uint32 `protobuf:"varint,8,opt,name=version,proto3" json:"version,omitempty"`
+ // We keep the last received text message (only) stored in the device flash,
+ // so we can show it on the screen.
+ // Might be null
+ RxTextMessage *MeshPacket `protobuf:"bytes,7,opt,name=rx_text_message,json=rxTextMessage,proto3" json:"rxTextMessage,omitempty"`
+ // Used only during development.
+ // Indicates developer is testing and changes should never be saved to flash.
+ // Deprecated in 2.3.1
+ //
+ // Deprecated: Marked as deprecated in meshtastic/deviceonly.proto.
+ NoSave bool `protobuf:"varint,9,opt,name=no_save,json=noSave,proto3" json:"noSave,omitempty"`
+ // Previously used to manage GPS factory resets.
+ // Deprecated in 2.5.23
+ //
+ // Deprecated: Marked as deprecated in meshtastic/deviceonly.proto.
+ DidGpsReset bool `protobuf:"varint,11,opt,name=did_gps_reset,json=didGpsReset,proto3" json:"didGpsReset,omitempty"`
+ // We keep the last received waypoint stored in the device flash,
+ // so we can show it on the screen.
+ // Might be null
+ RxWaypoint *MeshPacket `protobuf:"bytes,12,opt,name=rx_waypoint,json=rxWaypoint,proto3" json:"rxWaypoint,omitempty"`
+ // The mesh's nodes with their available gpio pins for RemoteHardware module
+ NodeRemoteHardwarePins []*NodeRemoteHardwarePin `protobuf:"bytes,13,rep,name=node_remote_hardware_pins,json=nodeRemoteHardwarePins,proto3" json:"nodeRemoteHardwarePins,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *DeviceState) Reset() {
+ *x = DeviceState{}
+ mi := &file_meshtastic_deviceonly_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *DeviceState) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeviceState) ProtoMessage() {}
+
+func (x *DeviceState) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_deviceonly_proto_msgTypes[3]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DeviceState.ProtoReflect.Descriptor instead.
+func (*DeviceState) Descriptor() ([]byte, []int) {
+ return file_meshtastic_deviceonly_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *DeviceState) GetMyNode() *MyNodeInfo {
+ if x != nil {
+ return x.MyNode
+ }
+ return nil
+}
+
+func (x *DeviceState) GetOwner() *User {
+ if x != nil {
+ return x.Owner
+ }
+ return nil
+}
+
+func (x *DeviceState) GetReceiveQueue() []*MeshPacket {
+ if x != nil {
+ return x.ReceiveQueue
+ }
+ return nil
+}
+
+func (x *DeviceState) GetVersion() uint32 {
+ if x != nil {
+ return x.Version
+ }
+ return 0
+}
+
+func (x *DeviceState) GetRxTextMessage() *MeshPacket {
+ if x != nil {
+ return x.RxTextMessage
+ }
+ return nil
+}
+
+// Deprecated: Marked as deprecated in meshtastic/deviceonly.proto.
+func (x *DeviceState) GetNoSave() bool {
+ if x != nil {
+ return x.NoSave
+ }
+ return false
+}
+
+// Deprecated: Marked as deprecated in meshtastic/deviceonly.proto.
+func (x *DeviceState) GetDidGpsReset() bool {
+ if x != nil {
+ return x.DidGpsReset
+ }
+ return false
+}
+
+func (x *DeviceState) GetRxWaypoint() *MeshPacket {
+ if x != nil {
+ return x.RxWaypoint
+ }
+ return nil
+}
+
+func (x *DeviceState) GetNodeRemoteHardwarePins() []*NodeRemoteHardwarePin {
+ if x != nil {
+ return x.NodeRemoteHardwarePins
+ }
+ return nil
+}
+
+type NodeDatabase struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // 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.
+ Version uint32 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"`
+ // New lite version of NodeDB to decrease memory footprint
+ Nodes []*NodeInfoLite `protobuf:"bytes,2,rep,name=nodes,proto3" json:"nodes,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *NodeDatabase) Reset() {
+ *x = NodeDatabase{}
+ mi := &file_meshtastic_deviceonly_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *NodeDatabase) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodeDatabase) ProtoMessage() {}
+
+func (x *NodeDatabase) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_deviceonly_proto_msgTypes[4]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use NodeDatabase.ProtoReflect.Descriptor instead.
+func (*NodeDatabase) Descriptor() ([]byte, []int) {
+ return file_meshtastic_deviceonly_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *NodeDatabase) GetVersion() uint32 {
+ if x != nil {
+ return x.Version
+ }
+ return 0
+}
+
+func (x *NodeDatabase) GetNodes() []*NodeInfoLite {
+ if x != nil {
+ return x.Nodes
+ }
+ return nil
+}
+
+// The on-disk saved channels
+type ChannelFile struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The channels our node knows about
+ Channels []*Channel `protobuf:"bytes,1,rep,name=channels,proto3" json:"channels,omitempty"`
+ // 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.
+ Version uint32 `protobuf:"varint,2,opt,name=version,proto3" json:"version,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ChannelFile) Reset() {
+ *x = ChannelFile{}
+ mi := &file_meshtastic_deviceonly_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ChannelFile) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ChannelFile) ProtoMessage() {}
+
+func (x *ChannelFile) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_deviceonly_proto_msgTypes[5]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ChannelFile.ProtoReflect.Descriptor instead.
+func (*ChannelFile) Descriptor() ([]byte, []int) {
+ return file_meshtastic_deviceonly_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *ChannelFile) GetChannels() []*Channel {
+ if x != nil {
+ return x.Channels
+ }
+ return nil
+}
+
+func (x *ChannelFile) GetVersion() uint32 {
+ if x != nil {
+ return x.Version
+ }
+ return 0
+}
+
+// The on-disk backup of the node's preferences
+type BackupPreferences struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The version of the backup
+ Version uint32 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"`
+ // The timestamp of the backup (if node has time)
+ Timestamp uint32 `protobuf:"fixed32,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+ // The node's configuration
+ Config *LocalConfig `protobuf:"bytes,3,opt,name=config,proto3" json:"config,omitempty"`
+ // The node's module configuration
+ ModuleConfig *LocalModuleConfig `protobuf:"bytes,4,opt,name=module_config,json=moduleConfig,proto3" json:"moduleConfig,omitempty"`
+ // The node's channels
+ Channels *ChannelFile `protobuf:"bytes,5,opt,name=channels,proto3" json:"channels,omitempty"`
+ // The node's user (owner) information
+ Owner *User `protobuf:"bytes,6,opt,name=owner,proto3" json:"owner,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *BackupPreferences) Reset() {
+ *x = BackupPreferences{}
+ mi := &file_meshtastic_deviceonly_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *BackupPreferences) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*BackupPreferences) ProtoMessage() {}
+
+func (x *BackupPreferences) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_deviceonly_proto_msgTypes[6]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use BackupPreferences.ProtoReflect.Descriptor instead.
+func (*BackupPreferences) Descriptor() ([]byte, []int) {
+ return file_meshtastic_deviceonly_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *BackupPreferences) GetVersion() uint32 {
+ if x != nil {
+ return x.Version
+ }
+ return 0
+}
+
+func (x *BackupPreferences) GetTimestamp() uint32 {
+ if x != nil {
+ return x.Timestamp
+ }
+ return 0
+}
+
+func (x *BackupPreferences) GetConfig() *LocalConfig {
+ if x != nil {
+ return x.Config
+ }
+ return nil
+}
+
+func (x *BackupPreferences) GetModuleConfig() *LocalModuleConfig {
+ if x != nil {
+ return x.ModuleConfig
+ }
+ return nil
+}
+
+func (x *BackupPreferences) GetChannels() *ChannelFile {
+ if x != nil {
+ return x.Channels
+ }
+ return nil
+}
+
+func (x *BackupPreferences) GetOwner() *User {
+ if x != nil {
+ return x.Owner
+ }
+ return nil
+}
+
+var File_meshtastic_deviceonly_proto protoreflect.FileDescriptor
+
+const file_meshtastic_deviceonly_proto_rawDesc = "" +
+ "\n" +
+ "\x1bmeshtastic/deviceonly.proto\x12\n" +
+ "meshtastic\x1a\x18meshtastic/channel.proto\x1a\x17meshtastic/config.proto\x1a\x1ameshtastic/localonly.proto\x1a\x15meshtastic/mesh.proto\x1a\x1ameshtastic/telemetry.proto\x1a\fnanopb.proto\"\xc7\x01\n" +
+ "\fPositionLite\x12\x1d\n" +
+ "\n" +
+ "latitude_i\x18\x01 \x01(\x0fR\tlatitudeI\x12\x1f\n" +
+ "\vlongitude_i\x18\x02 \x01(\x0fR\n" +
+ "longitudeI\x12\x1a\n" +
+ "\baltitude\x18\x03 \x01(\x05R\baltitude\x12\x12\n" +
+ "\x04time\x18\x04 \x01(\aR\x04time\x12G\n" +
+ "\x0flocation_source\x18\x05 \x01(\x0e2\x1e.meshtastic.Position.LocSourceR\x0elocationSource\"\xd6\x02\n" +
+ "\bUserLite\x12\x1c\n" +
+ "\amacaddr\x18\x01 \x01(\fB\x02\x18\x01R\amacaddr\x12\x1b\n" +
+ "\tlong_name\x18\x02 \x01(\tR\blongName\x12\x1d\n" +
+ "\n" +
+ "short_name\x18\x03 \x01(\tR\tshortName\x124\n" +
+ "\bhw_model\x18\x04 \x01(\x0e2\x19.meshtastic.HardwareModelR\ahwModel\x12\x1f\n" +
+ "\vis_licensed\x18\x05 \x01(\bR\n" +
+ "isLicensed\x128\n" +
+ "\x04role\x18\x06 \x01(\x0e2$.meshtastic.Config.DeviceConfig.RoleR\x04role\x12\x1d\n" +
+ "\n" +
+ "public_key\x18\a \x01(\fR\tpublicKey\x12,\n" +
+ "\x0fis_unmessagable\x18\t \x01(\bH\x00R\x0eisUnmessagable\x88\x01\x01B\x12\n" +
+ "\x10_is_unmessagable\"\xcf\x03\n" +
+ "\fNodeInfoLite\x12\x10\n" +
+ "\x03num\x18\x01 \x01(\rR\x03num\x12(\n" +
+ "\x04user\x18\x02 \x01(\v2\x14.meshtastic.UserLiteR\x04user\x124\n" +
+ "\bposition\x18\x03 \x01(\v2\x18.meshtastic.PositionLiteR\bposition\x12\x10\n" +
+ "\x03snr\x18\x04 \x01(\x02R\x03snr\x12\x1d\n" +
+ "\n" +
+ "last_heard\x18\x05 \x01(\aR\tlastHeard\x12@\n" +
+ "\x0edevice_metrics\x18\x06 \x01(\v2\x19.meshtastic.DeviceMetricsR\rdeviceMetrics\x12\x18\n" +
+ "\achannel\x18\a \x01(\rR\achannel\x12\x19\n" +
+ "\bvia_mqtt\x18\b \x01(\bR\aviaMqtt\x12 \n" +
+ "\thops_away\x18\t \x01(\rH\x00R\bhopsAway\x88\x01\x01\x12\x1f\n" +
+ "\vis_favorite\x18\n" +
+ " \x01(\bR\n" +
+ "isFavorite\x12\x1d\n" +
+ "\n" +
+ "is_ignored\x18\v \x01(\bR\tisIgnored\x12\x19\n" +
+ "\bnext_hop\x18\f \x01(\rR\anextHop\x12\x1a\n" +
+ "\bbitfield\x18\r \x01(\rR\bbitfieldB\f\n" +
+ "\n" +
+ "_hops_away\"\xd9\x03\n" +
+ "\vDeviceState\x12/\n" +
+ "\amy_node\x18\x02 \x01(\v2\x16.meshtastic.MyNodeInfoR\x06myNode\x12&\n" +
+ "\x05owner\x18\x03 \x01(\v2\x10.meshtastic.UserR\x05owner\x12;\n" +
+ "\rreceive_queue\x18\x05 \x03(\v2\x16.meshtastic.MeshPacketR\freceiveQueue\x12\x18\n" +
+ "\aversion\x18\b \x01(\rR\aversion\x12>\n" +
+ "\x0frx_text_message\x18\a \x01(\v2\x16.meshtastic.MeshPacketR\rrxTextMessage\x12\x1b\n" +
+ "\ano_save\x18\t \x01(\bB\x02\x18\x01R\x06noSave\x12&\n" +
+ "\rdid_gps_reset\x18\v \x01(\bB\x02\x18\x01R\vdidGpsReset\x127\n" +
+ "\vrx_waypoint\x18\f \x01(\v2\x16.meshtastic.MeshPacketR\n" +
+ "rxWaypoint\x12\\\n" +
+ "\x19node_remote_hardware_pins\x18\r \x03(\v2!.meshtastic.NodeRemoteHardwarePinR\x16nodeRemoteHardwarePins\"\x84\x01\n" +
+ "\fNodeDatabase\x12\x18\n" +
+ "\aversion\x18\x01 \x01(\rR\aversion\x12Z\n" +
+ "\x05nodes\x18\x02 \x03(\v2\x18.meshtastic.NodeInfoLiteB*\x92?'\x92\x01$std::vectorR\x05nodes\"X\n" +
+ "\vChannelFile\x12/\n" +
+ "\bchannels\x18\x01 \x03(\v2\x13.meshtastic.ChannelR\bchannels\x12\x18\n" +
+ "\aversion\x18\x02 \x01(\rR\aversion\"\x9d\x02\n" +
+ "\x11BackupPreferences\x12\x18\n" +
+ "\aversion\x18\x01 \x01(\rR\aversion\x12\x1c\n" +
+ "\ttimestamp\x18\x02 \x01(\aR\ttimestamp\x12/\n" +
+ "\x06config\x18\x03 \x01(\v2\x17.meshtastic.LocalConfigR\x06config\x12B\n" +
+ "\rmodule_config\x18\x04 \x01(\v2\x1d.meshtastic.LocalModuleConfigR\fmoduleConfig\x123\n" +
+ "\bchannels\x18\x05 \x01(\v2\x17.meshtastic.ChannelFileR\bchannels\x12&\n" +
+ "\x05owner\x18\x06 \x01(\v2\x10.meshtastic.UserR\x05ownerBn\x92?\v\xc2\x01\b\n" +
+ "\x14org.meshtastic.protoB\n" +
+ "DeviceOnlyZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00b\x06proto3"
+
+var (
+ file_meshtastic_deviceonly_proto_rawDescOnce sync.Once
+ file_meshtastic_deviceonly_proto_rawDescData []byte
+)
+
+func file_meshtastic_deviceonly_proto_rawDescGZIP() []byte {
+ file_meshtastic_deviceonly_proto_rawDescOnce.Do(func() {
+ file_meshtastic_deviceonly_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_meshtastic_deviceonly_proto_rawDesc), len(file_meshtastic_deviceonly_proto_rawDesc)))
+ })
+ return file_meshtastic_deviceonly_proto_rawDescData
+}
+
+var file_meshtastic_deviceonly_proto_msgTypes = make([]protoimpl.MessageInfo, 7)
+var file_meshtastic_deviceonly_proto_goTypes = []any{
+ (*PositionLite)(nil), // 0: meshtastic.PositionLite
+ (*UserLite)(nil), // 1: meshtastic.UserLite
+ (*NodeInfoLite)(nil), // 2: meshtastic.NodeInfoLite
+ (*DeviceState)(nil), // 3: meshtastic.DeviceState
+ (*NodeDatabase)(nil), // 4: meshtastic.NodeDatabase
+ (*ChannelFile)(nil), // 5: meshtastic.ChannelFile
+ (*BackupPreferences)(nil), // 6: meshtastic.BackupPreferences
+ (Position_LocSource)(0), // 7: meshtastic.Position.LocSource
+ (HardwareModel)(0), // 8: meshtastic.HardwareModel
+ (Config_DeviceConfig_Role)(0), // 9: meshtastic.Config.DeviceConfig.Role
+ (*DeviceMetrics)(nil), // 10: meshtastic.DeviceMetrics
+ (*MyNodeInfo)(nil), // 11: meshtastic.MyNodeInfo
+ (*User)(nil), // 12: meshtastic.User
+ (*MeshPacket)(nil), // 13: meshtastic.MeshPacket
+ (*NodeRemoteHardwarePin)(nil), // 14: meshtastic.NodeRemoteHardwarePin
+ (*Channel)(nil), // 15: meshtastic.Channel
+ (*LocalConfig)(nil), // 16: meshtastic.LocalConfig
+ (*LocalModuleConfig)(nil), // 17: meshtastic.LocalModuleConfig
+}
+var file_meshtastic_deviceonly_proto_depIdxs = []int32{
+ 7, // 0: meshtastic.PositionLite.location_source:type_name -> meshtastic.Position.LocSource
+ 8, // 1: meshtastic.UserLite.hw_model:type_name -> meshtastic.HardwareModel
+ 9, // 2: meshtastic.UserLite.role:type_name -> meshtastic.Config.DeviceConfig.Role
+ 1, // 3: meshtastic.NodeInfoLite.user:type_name -> meshtastic.UserLite
+ 0, // 4: meshtastic.NodeInfoLite.position:type_name -> meshtastic.PositionLite
+ 10, // 5: meshtastic.NodeInfoLite.device_metrics:type_name -> meshtastic.DeviceMetrics
+ 11, // 6: meshtastic.DeviceState.my_node:type_name -> meshtastic.MyNodeInfo
+ 12, // 7: meshtastic.DeviceState.owner:type_name -> meshtastic.User
+ 13, // 8: meshtastic.DeviceState.receive_queue:type_name -> meshtastic.MeshPacket
+ 13, // 9: meshtastic.DeviceState.rx_text_message:type_name -> meshtastic.MeshPacket
+ 13, // 10: meshtastic.DeviceState.rx_waypoint:type_name -> meshtastic.MeshPacket
+ 14, // 11: meshtastic.DeviceState.node_remote_hardware_pins:type_name -> meshtastic.NodeRemoteHardwarePin
+ 2, // 12: meshtastic.NodeDatabase.nodes:type_name -> meshtastic.NodeInfoLite
+ 15, // 13: meshtastic.ChannelFile.channels:type_name -> meshtastic.Channel
+ 16, // 14: meshtastic.BackupPreferences.config:type_name -> meshtastic.LocalConfig
+ 17, // 15: meshtastic.BackupPreferences.module_config:type_name -> meshtastic.LocalModuleConfig
+ 5, // 16: meshtastic.BackupPreferences.channels:type_name -> meshtastic.ChannelFile
+ 12, // 17: meshtastic.BackupPreferences.owner:type_name -> meshtastic.User
+ 18, // [18:18] is the sub-list for method output_type
+ 18, // [18:18] is the sub-list for method input_type
+ 18, // [18:18] is the sub-list for extension type_name
+ 18, // [18:18] is the sub-list for extension extendee
+ 0, // [0:18] is the sub-list for field type_name
+}
+
+func init() { file_meshtastic_deviceonly_proto_init() }
+func file_meshtastic_deviceonly_proto_init() {
+ if File_meshtastic_deviceonly_proto != nil {
+ return
+ }
+ file_meshtastic_channel_proto_init()
+ file_meshtastic_config_proto_init()
+ file_meshtastic_localonly_proto_init()
+ file_meshtastic_mesh_proto_init()
+ file_meshtastic_telemetry_proto_init()
+ file_nanopb_proto_init()
+ file_meshtastic_deviceonly_proto_msgTypes[1].OneofWrappers = []any{}
+ file_meshtastic_deviceonly_proto_msgTypes[2].OneofWrappers = []any{}
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_meshtastic_deviceonly_proto_rawDesc), len(file_meshtastic_deviceonly_proto_rawDesc)),
+ NumEnums: 0,
+ NumMessages: 7,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_meshtastic_deviceonly_proto_goTypes,
+ DependencyIndexes: file_meshtastic_deviceonly_proto_depIdxs,
+ MessageInfos: file_meshtastic_deviceonly_proto_msgTypes,
+ }.Build()
+ File_meshtastic_deviceonly_proto = out.File
+ file_meshtastic_deviceonly_proto_goTypes = nil
+ file_meshtastic_deviceonly_proto_depIdxs = nil
+}
diff --git a/protocol/meshtastic/pb/interdevice.pb.go b/protocol/meshtastic/pb/interdevice.pb.go
new file mode 100644
index 0000000..414c6bd
--- /dev/null
+++ b/protocol/meshtastic/pb/interdevice.pb.go
@@ -0,0 +1,372 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc v6.33.4
+// source: meshtastic/interdevice.proto
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type MessageType int32
+
+const (
+ MessageType_ACK MessageType = 0
+ MessageType_COLLECT_INTERVAL MessageType = 160 // in ms
+ MessageType_BEEP_ON MessageType = 161 // duration ms
+ MessageType_BEEP_OFF MessageType = 162 // cancel prematurely
+ MessageType_SHUTDOWN MessageType = 163
+ MessageType_POWER_ON MessageType = 164
+ MessageType_SCD41_TEMP MessageType = 176
+ MessageType_SCD41_HUMIDITY MessageType = 177
+ MessageType_SCD41_CO2 MessageType = 178
+ MessageType_AHT20_TEMP MessageType = 179
+ MessageType_AHT20_HUMIDITY MessageType = 180
+ MessageType_TVOC_INDEX MessageType = 181
+)
+
+// Enum value maps for MessageType.
+var (
+ MessageType_name = map[int32]string{
+ 0: "ACK",
+ 160: "COLLECT_INTERVAL",
+ 161: "BEEP_ON",
+ 162: "BEEP_OFF",
+ 163: "SHUTDOWN",
+ 164: "POWER_ON",
+ 176: "SCD41_TEMP",
+ 177: "SCD41_HUMIDITY",
+ 178: "SCD41_CO2",
+ 179: "AHT20_TEMP",
+ 180: "AHT20_HUMIDITY",
+ 181: "TVOC_INDEX",
+ }
+ MessageType_value = map[string]int32{
+ "ACK": 0,
+ "COLLECT_INTERVAL": 160,
+ "BEEP_ON": 161,
+ "BEEP_OFF": 162,
+ "SHUTDOWN": 163,
+ "POWER_ON": 164,
+ "SCD41_TEMP": 176,
+ "SCD41_HUMIDITY": 177,
+ "SCD41_CO2": 178,
+ "AHT20_TEMP": 179,
+ "AHT20_HUMIDITY": 180,
+ "TVOC_INDEX": 181,
+ }
+)
+
+func (x MessageType) Enum() *MessageType {
+ p := new(MessageType)
+ *p = x
+ return p
+}
+
+func (x MessageType) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (MessageType) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_interdevice_proto_enumTypes[0].Descriptor()
+}
+
+func (MessageType) Type() protoreflect.EnumType {
+ return &file_meshtastic_interdevice_proto_enumTypes[0]
+}
+
+func (x MessageType) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use MessageType.Descriptor instead.
+func (MessageType) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_interdevice_proto_rawDescGZIP(), []int{0}
+}
+
+type SensorData struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The message type
+ Type MessageType `protobuf:"varint,1,opt,name=type,proto3,enum=meshtastic.MessageType" json:"type,omitempty"`
+ // The sensor data, either as a float or an uint32
+ //
+ // Types that are valid to be assigned to Data:
+ //
+ // *SensorData_FloatValue
+ // *SensorData_Uint32Value
+ Data isSensorData_Data `protobuf_oneof:"data"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *SensorData) Reset() {
+ *x = SensorData{}
+ mi := &file_meshtastic_interdevice_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *SensorData) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SensorData) ProtoMessage() {}
+
+func (x *SensorData) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_interdevice_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use SensorData.ProtoReflect.Descriptor instead.
+func (*SensorData) Descriptor() ([]byte, []int) {
+ return file_meshtastic_interdevice_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *SensorData) GetType() MessageType {
+ if x != nil {
+ return x.Type
+ }
+ return MessageType_ACK
+}
+
+func (x *SensorData) GetData() isSensorData_Data {
+ if x != nil {
+ return x.Data
+ }
+ return nil
+}
+
+func (x *SensorData) GetFloatValue() float32 {
+ if x != nil {
+ if x, ok := x.Data.(*SensorData_FloatValue); ok {
+ return x.FloatValue
+ }
+ }
+ return 0
+}
+
+func (x *SensorData) GetUint32Value() uint32 {
+ if x != nil {
+ if x, ok := x.Data.(*SensorData_Uint32Value); ok {
+ return x.Uint32Value
+ }
+ }
+ return 0
+}
+
+type isSensorData_Data interface {
+ isSensorData_Data()
+}
+
+type SensorData_FloatValue struct {
+ FloatValue float32 `protobuf:"fixed32,2,opt,name=float_value,json=floatValue,proto3,oneof"`
+}
+
+type SensorData_Uint32Value struct {
+ Uint32Value uint32 `protobuf:"varint,3,opt,name=uint32_value,json=uint32Value,proto3,oneof"`
+}
+
+func (*SensorData_FloatValue) isSensorData_Data() {}
+
+func (*SensorData_Uint32Value) isSensorData_Data() {}
+
+type InterdeviceMessage struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The message data
+ //
+ // Types that are valid to be assigned to Data:
+ //
+ // *InterdeviceMessage_Nmea
+ // *InterdeviceMessage_Sensor
+ Data isInterdeviceMessage_Data `protobuf_oneof:"data"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *InterdeviceMessage) Reset() {
+ *x = InterdeviceMessage{}
+ mi := &file_meshtastic_interdevice_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *InterdeviceMessage) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*InterdeviceMessage) ProtoMessage() {}
+
+func (x *InterdeviceMessage) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_interdevice_proto_msgTypes[1]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use InterdeviceMessage.ProtoReflect.Descriptor instead.
+func (*InterdeviceMessage) Descriptor() ([]byte, []int) {
+ return file_meshtastic_interdevice_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *InterdeviceMessage) GetData() isInterdeviceMessage_Data {
+ if x != nil {
+ return x.Data
+ }
+ return nil
+}
+
+func (x *InterdeviceMessage) GetNmea() string {
+ if x != nil {
+ if x, ok := x.Data.(*InterdeviceMessage_Nmea); ok {
+ return x.Nmea
+ }
+ }
+ return ""
+}
+
+func (x *InterdeviceMessage) GetSensor() *SensorData {
+ if x != nil {
+ if x, ok := x.Data.(*InterdeviceMessage_Sensor); ok {
+ return x.Sensor
+ }
+ }
+ return nil
+}
+
+type isInterdeviceMessage_Data interface {
+ isInterdeviceMessage_Data()
+}
+
+type InterdeviceMessage_Nmea struct {
+ Nmea string `protobuf:"bytes,1,opt,name=nmea,proto3,oneof"`
+}
+
+type InterdeviceMessage_Sensor struct {
+ Sensor *SensorData `protobuf:"bytes,2,opt,name=sensor,proto3,oneof"`
+}
+
+func (*InterdeviceMessage_Nmea) isInterdeviceMessage_Data() {}
+
+func (*InterdeviceMessage_Sensor) isInterdeviceMessage_Data() {}
+
+var File_meshtastic_interdevice_proto protoreflect.FileDescriptor
+
+const file_meshtastic_interdevice_proto_rawDesc = "" +
+ "\n" +
+ "\x1cmeshtastic/interdevice.proto\x12\n" +
+ "meshtastic\"\x89\x01\n" +
+ "\n" +
+ "SensorData\x12+\n" +
+ "\x04type\x18\x01 \x01(\x0e2\x17.meshtastic.MessageTypeR\x04type\x12!\n" +
+ "\vfloat_value\x18\x02 \x01(\x02H\x00R\n" +
+ "floatValue\x12#\n" +
+ "\fuint32_value\x18\x03 \x01(\rH\x00R\vuint32ValueB\x06\n" +
+ "\x04data\"d\n" +
+ "\x12InterdeviceMessage\x12\x14\n" +
+ "\x04nmea\x18\x01 \x01(\tH\x00R\x04nmea\x120\n" +
+ "\x06sensor\x18\x02 \x01(\v2\x16.meshtastic.SensorDataH\x00R\x06sensorB\x06\n" +
+ "\x04data*\xd5\x01\n" +
+ "\vMessageType\x12\a\n" +
+ "\x03ACK\x10\x00\x12\x15\n" +
+ "\x10COLLECT_INTERVAL\x10\xa0\x01\x12\f\n" +
+ "\aBEEP_ON\x10\xa1\x01\x12\r\n" +
+ "\bBEEP_OFF\x10\xa2\x01\x12\r\n" +
+ "\bSHUTDOWN\x10\xa3\x01\x12\r\n" +
+ "\bPOWER_ON\x10\xa4\x01\x12\x0f\n" +
+ "\n" +
+ "SCD41_TEMP\x10\xb0\x01\x12\x13\n" +
+ "\x0eSCD41_HUMIDITY\x10\xb1\x01\x12\x0e\n" +
+ "\tSCD41_CO2\x10\xb2\x01\x12\x0f\n" +
+ "\n" +
+ "AHT20_TEMP\x10\xb3\x01\x12\x13\n" +
+ "\x0eAHT20_HUMIDITY\x10\xb4\x01\x12\x0f\n" +
+ "\n" +
+ "TVOC_INDEX\x10\xb5\x01Bg\n" +
+ "\x14org.meshtastic.protoB\x11InterdeviceProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00b\x06proto3"
+
+var (
+ file_meshtastic_interdevice_proto_rawDescOnce sync.Once
+ file_meshtastic_interdevice_proto_rawDescData []byte
+)
+
+func file_meshtastic_interdevice_proto_rawDescGZIP() []byte {
+ file_meshtastic_interdevice_proto_rawDescOnce.Do(func() {
+ file_meshtastic_interdevice_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_meshtastic_interdevice_proto_rawDesc), len(file_meshtastic_interdevice_proto_rawDesc)))
+ })
+ return file_meshtastic_interdevice_proto_rawDescData
+}
+
+var file_meshtastic_interdevice_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_meshtastic_interdevice_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_meshtastic_interdevice_proto_goTypes = []any{
+ (MessageType)(0), // 0: meshtastic.MessageType
+ (*SensorData)(nil), // 1: meshtastic.SensorData
+ (*InterdeviceMessage)(nil), // 2: meshtastic.InterdeviceMessage
+}
+var file_meshtastic_interdevice_proto_depIdxs = []int32{
+ 0, // 0: meshtastic.SensorData.type:type_name -> meshtastic.MessageType
+ 1, // 1: meshtastic.InterdeviceMessage.sensor:type_name -> meshtastic.SensorData
+ 2, // [2:2] is the sub-list for method output_type
+ 2, // [2:2] is the sub-list for method input_type
+ 2, // [2:2] is the sub-list for extension type_name
+ 2, // [2:2] is the sub-list for extension extendee
+ 0, // [0:2] is the sub-list for field type_name
+}
+
+func init() { file_meshtastic_interdevice_proto_init() }
+func file_meshtastic_interdevice_proto_init() {
+ if File_meshtastic_interdevice_proto != nil {
+ return
+ }
+ file_meshtastic_interdevice_proto_msgTypes[0].OneofWrappers = []any{
+ (*SensorData_FloatValue)(nil),
+ (*SensorData_Uint32Value)(nil),
+ }
+ file_meshtastic_interdevice_proto_msgTypes[1].OneofWrappers = []any{
+ (*InterdeviceMessage_Nmea)(nil),
+ (*InterdeviceMessage_Sensor)(nil),
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_meshtastic_interdevice_proto_rawDesc), len(file_meshtastic_interdevice_proto_rawDesc)),
+ NumEnums: 1,
+ NumMessages: 2,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_meshtastic_interdevice_proto_goTypes,
+ DependencyIndexes: file_meshtastic_interdevice_proto_depIdxs,
+ EnumInfos: file_meshtastic_interdevice_proto_enumTypes,
+ MessageInfos: file_meshtastic_interdevice_proto_msgTypes,
+ }.Build()
+ File_meshtastic_interdevice_proto = out.File
+ file_meshtastic_interdevice_proto_goTypes = nil
+ file_meshtastic_interdevice_proto_depIdxs = nil
+}
diff --git a/protocol/meshtastic/pb/localonly.pb.go b/protocol/meshtastic/pb/localonly.pb.go
new file mode 100644
index 0000000..f802213
--- /dev/null
+++ b/protocol/meshtastic/pb/localonly.pb.go
@@ -0,0 +1,472 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc v6.33.4
+// source: meshtastic/localonly.proto
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type LocalConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The part of the config that is specific to the Device
+ Device *Config_DeviceConfig `protobuf:"bytes,1,opt,name=device,proto3" json:"device,omitempty"`
+ // The part of the config that is specific to the GPS Position
+ Position *Config_PositionConfig `protobuf:"bytes,2,opt,name=position,proto3" json:"position,omitempty"`
+ // The part of the config that is specific to the Power settings
+ Power *Config_PowerConfig `protobuf:"bytes,3,opt,name=power,proto3" json:"power,omitempty"`
+ // The part of the config that is specific to the Wifi Settings
+ Network *Config_NetworkConfig `protobuf:"bytes,4,opt,name=network,proto3" json:"network,omitempty"`
+ // The part of the config that is specific to the Display
+ Display *Config_DisplayConfig `protobuf:"bytes,5,opt,name=display,proto3" json:"display,omitempty"`
+ // The part of the config that is specific to the Lora Radio
+ Lora *Config_LoRaConfig `protobuf:"bytes,6,opt,name=lora,proto3" json:"lora,omitempty"`
+ // The part of the config that is specific to the Bluetooth settings
+ Bluetooth *Config_BluetoothConfig `protobuf:"bytes,7,opt,name=bluetooth,proto3" json:"bluetooth,omitempty"`
+ // 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.
+ Version uint32 `protobuf:"varint,8,opt,name=version,proto3" json:"version,omitempty"`
+ // The part of the config that is specific to Security settings
+ Security *Config_SecurityConfig `protobuf:"bytes,9,opt,name=security,proto3" json:"security,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *LocalConfig) Reset() {
+ *x = LocalConfig{}
+ mi := &file_meshtastic_localonly_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *LocalConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*LocalConfig) ProtoMessage() {}
+
+func (x *LocalConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_localonly_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use LocalConfig.ProtoReflect.Descriptor instead.
+func (*LocalConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_localonly_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *LocalConfig) GetDevice() *Config_DeviceConfig {
+ if x != nil {
+ return x.Device
+ }
+ return nil
+}
+
+func (x *LocalConfig) GetPosition() *Config_PositionConfig {
+ if x != nil {
+ return x.Position
+ }
+ return nil
+}
+
+func (x *LocalConfig) GetPower() *Config_PowerConfig {
+ if x != nil {
+ return x.Power
+ }
+ return nil
+}
+
+func (x *LocalConfig) GetNetwork() *Config_NetworkConfig {
+ if x != nil {
+ return x.Network
+ }
+ return nil
+}
+
+func (x *LocalConfig) GetDisplay() *Config_DisplayConfig {
+ if x != nil {
+ return x.Display
+ }
+ return nil
+}
+
+func (x *LocalConfig) GetLora() *Config_LoRaConfig {
+ if x != nil {
+ return x.Lora
+ }
+ return nil
+}
+
+func (x *LocalConfig) GetBluetooth() *Config_BluetoothConfig {
+ if x != nil {
+ return x.Bluetooth
+ }
+ return nil
+}
+
+func (x *LocalConfig) GetVersion() uint32 {
+ if x != nil {
+ return x.Version
+ }
+ return 0
+}
+
+func (x *LocalConfig) GetSecurity() *Config_SecurityConfig {
+ if x != nil {
+ return x.Security
+ }
+ return nil
+}
+
+type LocalModuleConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The part of the config that is specific to the MQTT module
+ Mqtt *ModuleConfig_MQTTConfig `protobuf:"bytes,1,opt,name=mqtt,proto3" json:"mqtt,omitempty"`
+ // The part of the config that is specific to the Serial module
+ Serial *ModuleConfig_SerialConfig `protobuf:"bytes,2,opt,name=serial,proto3" json:"serial,omitempty"`
+ // The part of the config that is specific to the ExternalNotification module
+ ExternalNotification *ModuleConfig_ExternalNotificationConfig `protobuf:"bytes,3,opt,name=external_notification,json=externalNotification,proto3" json:"externalNotification,omitempty"`
+ // The part of the config that is specific to the Store & Forward module
+ StoreForward *ModuleConfig_StoreForwardConfig `protobuf:"bytes,4,opt,name=store_forward,json=storeForward,proto3" json:"storeForward,omitempty"`
+ // The part of the config that is specific to the RangeTest module
+ RangeTest *ModuleConfig_RangeTestConfig `protobuf:"bytes,5,opt,name=range_test,json=rangeTest,proto3" json:"rangeTest,omitempty"`
+ // The part of the config that is specific to the Telemetry module
+ Telemetry *ModuleConfig_TelemetryConfig `protobuf:"bytes,6,opt,name=telemetry,proto3" json:"telemetry,omitempty"`
+ // The part of the config that is specific to the Canned Message module
+ CannedMessage *ModuleConfig_CannedMessageConfig `protobuf:"bytes,7,opt,name=canned_message,json=cannedMessage,proto3" json:"cannedMessage,omitempty"`
+ // The part of the config that is specific to the Audio module
+ Audio *ModuleConfig_AudioConfig `protobuf:"bytes,9,opt,name=audio,proto3" json:"audio,omitempty"`
+ // The part of the config that is specific to the Remote Hardware module
+ RemoteHardware *ModuleConfig_RemoteHardwareConfig `protobuf:"bytes,10,opt,name=remote_hardware,json=remoteHardware,proto3" json:"remoteHardware,omitempty"`
+ // The part of the config that is specific to the Neighbor Info module
+ NeighborInfo *ModuleConfig_NeighborInfoConfig `protobuf:"bytes,11,opt,name=neighbor_info,json=neighborInfo,proto3" json:"neighborInfo,omitempty"`
+ // The part of the config that is specific to the Ambient Lighting module
+ AmbientLighting *ModuleConfig_AmbientLightingConfig `protobuf:"bytes,12,opt,name=ambient_lighting,json=ambientLighting,proto3" json:"ambientLighting,omitempty"`
+ // The part of the config that is specific to the Detection Sensor module
+ DetectionSensor *ModuleConfig_DetectionSensorConfig `protobuf:"bytes,13,opt,name=detection_sensor,json=detectionSensor,proto3" json:"detectionSensor,omitempty"`
+ // Paxcounter Config
+ Paxcounter *ModuleConfig_PaxcounterConfig `protobuf:"bytes,14,opt,name=paxcounter,proto3" json:"paxcounter,omitempty"`
+ // StatusMessage Config
+ Statusmessage *ModuleConfig_StatusMessageConfig `protobuf:"bytes,15,opt,name=statusmessage,proto3" json:"statusmessage,omitempty"`
+ // The part of the config that is specific to the Traffic Management module
+ TrafficManagement *ModuleConfig_TrafficManagementConfig `protobuf:"bytes,16,opt,name=traffic_management,json=trafficManagement,proto3" json:"trafficManagement,omitempty"`
+ // TAK Config
+ Tak *ModuleConfig_TAKConfig `protobuf:"bytes,17,opt,name=tak,proto3" json:"tak,omitempty"`
+ // 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.
+ Version uint32 `protobuf:"varint,8,opt,name=version,proto3" json:"version,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *LocalModuleConfig) Reset() {
+ *x = LocalModuleConfig{}
+ mi := &file_meshtastic_localonly_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *LocalModuleConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*LocalModuleConfig) ProtoMessage() {}
+
+func (x *LocalModuleConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_localonly_proto_msgTypes[1]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use LocalModuleConfig.ProtoReflect.Descriptor instead.
+func (*LocalModuleConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_localonly_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *LocalModuleConfig) GetMqtt() *ModuleConfig_MQTTConfig {
+ if x != nil {
+ return x.Mqtt
+ }
+ return nil
+}
+
+func (x *LocalModuleConfig) GetSerial() *ModuleConfig_SerialConfig {
+ if x != nil {
+ return x.Serial
+ }
+ return nil
+}
+
+func (x *LocalModuleConfig) GetExternalNotification() *ModuleConfig_ExternalNotificationConfig {
+ if x != nil {
+ return x.ExternalNotification
+ }
+ return nil
+}
+
+func (x *LocalModuleConfig) GetStoreForward() *ModuleConfig_StoreForwardConfig {
+ if x != nil {
+ return x.StoreForward
+ }
+ return nil
+}
+
+func (x *LocalModuleConfig) GetRangeTest() *ModuleConfig_RangeTestConfig {
+ if x != nil {
+ return x.RangeTest
+ }
+ return nil
+}
+
+func (x *LocalModuleConfig) GetTelemetry() *ModuleConfig_TelemetryConfig {
+ if x != nil {
+ return x.Telemetry
+ }
+ return nil
+}
+
+func (x *LocalModuleConfig) GetCannedMessage() *ModuleConfig_CannedMessageConfig {
+ if x != nil {
+ return x.CannedMessage
+ }
+ return nil
+}
+
+func (x *LocalModuleConfig) GetAudio() *ModuleConfig_AudioConfig {
+ if x != nil {
+ return x.Audio
+ }
+ return nil
+}
+
+func (x *LocalModuleConfig) GetRemoteHardware() *ModuleConfig_RemoteHardwareConfig {
+ if x != nil {
+ return x.RemoteHardware
+ }
+ return nil
+}
+
+func (x *LocalModuleConfig) GetNeighborInfo() *ModuleConfig_NeighborInfoConfig {
+ if x != nil {
+ return x.NeighborInfo
+ }
+ return nil
+}
+
+func (x *LocalModuleConfig) GetAmbientLighting() *ModuleConfig_AmbientLightingConfig {
+ if x != nil {
+ return x.AmbientLighting
+ }
+ return nil
+}
+
+func (x *LocalModuleConfig) GetDetectionSensor() *ModuleConfig_DetectionSensorConfig {
+ if x != nil {
+ return x.DetectionSensor
+ }
+ return nil
+}
+
+func (x *LocalModuleConfig) GetPaxcounter() *ModuleConfig_PaxcounterConfig {
+ if x != nil {
+ return x.Paxcounter
+ }
+ return nil
+}
+
+func (x *LocalModuleConfig) GetStatusmessage() *ModuleConfig_StatusMessageConfig {
+ if x != nil {
+ return x.Statusmessage
+ }
+ return nil
+}
+
+func (x *LocalModuleConfig) GetTrafficManagement() *ModuleConfig_TrafficManagementConfig {
+ if x != nil {
+ return x.TrafficManagement
+ }
+ return nil
+}
+
+func (x *LocalModuleConfig) GetTak() *ModuleConfig_TAKConfig {
+ if x != nil {
+ return x.Tak
+ }
+ return nil
+}
+
+func (x *LocalModuleConfig) GetVersion() uint32 {
+ if x != nil {
+ return x.Version
+ }
+ return 0
+}
+
+var File_meshtastic_localonly_proto protoreflect.FileDescriptor
+
+const file_meshtastic_localonly_proto_rawDesc = "" +
+ "\n" +
+ "\x1ameshtastic/localonly.proto\x12\n" +
+ "meshtastic\x1a\x17meshtastic/config.proto\x1a\x1emeshtastic/module_config.proto\"\x81\x04\n" +
+ "\vLocalConfig\x127\n" +
+ "\x06device\x18\x01 \x01(\v2\x1f.meshtastic.Config.DeviceConfigR\x06device\x12=\n" +
+ "\bposition\x18\x02 \x01(\v2!.meshtastic.Config.PositionConfigR\bposition\x124\n" +
+ "\x05power\x18\x03 \x01(\v2\x1e.meshtastic.Config.PowerConfigR\x05power\x12:\n" +
+ "\anetwork\x18\x04 \x01(\v2 .meshtastic.Config.NetworkConfigR\anetwork\x12:\n" +
+ "\adisplay\x18\x05 \x01(\v2 .meshtastic.Config.DisplayConfigR\adisplay\x121\n" +
+ "\x04lora\x18\x06 \x01(\v2\x1d.meshtastic.Config.LoRaConfigR\x04lora\x12@\n" +
+ "\tbluetooth\x18\a \x01(\v2\".meshtastic.Config.BluetoothConfigR\tbluetooth\x12\x18\n" +
+ "\aversion\x18\b \x01(\rR\aversion\x12=\n" +
+ "\bsecurity\x18\t \x01(\v2!.meshtastic.Config.SecurityConfigR\bsecurity\"\x99\n" +
+ "\n" +
+ "\x11LocalModuleConfig\x127\n" +
+ "\x04mqtt\x18\x01 \x01(\v2#.meshtastic.ModuleConfig.MQTTConfigR\x04mqtt\x12=\n" +
+ "\x06serial\x18\x02 \x01(\v2%.meshtastic.ModuleConfig.SerialConfigR\x06serial\x12h\n" +
+ "\x15external_notification\x18\x03 \x01(\v23.meshtastic.ModuleConfig.ExternalNotificationConfigR\x14externalNotification\x12P\n" +
+ "\rstore_forward\x18\x04 \x01(\v2+.meshtastic.ModuleConfig.StoreForwardConfigR\fstoreForward\x12G\n" +
+ "\n" +
+ "range_test\x18\x05 \x01(\v2(.meshtastic.ModuleConfig.RangeTestConfigR\trangeTest\x12F\n" +
+ "\ttelemetry\x18\x06 \x01(\v2(.meshtastic.ModuleConfig.TelemetryConfigR\ttelemetry\x12S\n" +
+ "\x0ecanned_message\x18\a \x01(\v2,.meshtastic.ModuleConfig.CannedMessageConfigR\rcannedMessage\x12:\n" +
+ "\x05audio\x18\t \x01(\v2$.meshtastic.ModuleConfig.AudioConfigR\x05audio\x12V\n" +
+ "\x0fremote_hardware\x18\n" +
+ " \x01(\v2-.meshtastic.ModuleConfig.RemoteHardwareConfigR\x0eremoteHardware\x12P\n" +
+ "\rneighbor_info\x18\v \x01(\v2+.meshtastic.ModuleConfig.NeighborInfoConfigR\fneighborInfo\x12Y\n" +
+ "\x10ambient_lighting\x18\f \x01(\v2..meshtastic.ModuleConfig.AmbientLightingConfigR\x0fambientLighting\x12Y\n" +
+ "\x10detection_sensor\x18\r \x01(\v2..meshtastic.ModuleConfig.DetectionSensorConfigR\x0fdetectionSensor\x12I\n" +
+ "\n" +
+ "paxcounter\x18\x0e \x01(\v2).meshtastic.ModuleConfig.PaxcounterConfigR\n" +
+ "paxcounter\x12R\n" +
+ "\rstatusmessage\x18\x0f \x01(\v2,.meshtastic.ModuleConfig.StatusMessageConfigR\rstatusmessage\x12_\n" +
+ "\x12traffic_management\x18\x10 \x01(\v20.meshtastic.ModuleConfig.TrafficManagementConfigR\x11trafficManagement\x124\n" +
+ "\x03tak\x18\x11 \x01(\v2\".meshtastic.ModuleConfig.TAKConfigR\x03tak\x12\x18\n" +
+ "\aversion\x18\b \x01(\rR\aversionBe\n" +
+ "\x14org.meshtastic.protoB\x0fLocalOnlyProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00b\x06proto3"
+
+var (
+ file_meshtastic_localonly_proto_rawDescOnce sync.Once
+ file_meshtastic_localonly_proto_rawDescData []byte
+)
+
+func file_meshtastic_localonly_proto_rawDescGZIP() []byte {
+ file_meshtastic_localonly_proto_rawDescOnce.Do(func() {
+ file_meshtastic_localonly_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_meshtastic_localonly_proto_rawDesc), len(file_meshtastic_localonly_proto_rawDesc)))
+ })
+ return file_meshtastic_localonly_proto_rawDescData
+}
+
+var file_meshtastic_localonly_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_meshtastic_localonly_proto_goTypes = []any{
+ (*LocalConfig)(nil), // 0: meshtastic.LocalConfig
+ (*LocalModuleConfig)(nil), // 1: meshtastic.LocalModuleConfig
+ (*Config_DeviceConfig)(nil), // 2: meshtastic.Config.DeviceConfig
+ (*Config_PositionConfig)(nil), // 3: meshtastic.Config.PositionConfig
+ (*Config_PowerConfig)(nil), // 4: meshtastic.Config.PowerConfig
+ (*Config_NetworkConfig)(nil), // 5: meshtastic.Config.NetworkConfig
+ (*Config_DisplayConfig)(nil), // 6: meshtastic.Config.DisplayConfig
+ (*Config_LoRaConfig)(nil), // 7: meshtastic.Config.LoRaConfig
+ (*Config_BluetoothConfig)(nil), // 8: meshtastic.Config.BluetoothConfig
+ (*Config_SecurityConfig)(nil), // 9: meshtastic.Config.SecurityConfig
+ (*ModuleConfig_MQTTConfig)(nil), // 10: meshtastic.ModuleConfig.MQTTConfig
+ (*ModuleConfig_SerialConfig)(nil), // 11: meshtastic.ModuleConfig.SerialConfig
+ (*ModuleConfig_ExternalNotificationConfig)(nil), // 12: meshtastic.ModuleConfig.ExternalNotificationConfig
+ (*ModuleConfig_StoreForwardConfig)(nil), // 13: meshtastic.ModuleConfig.StoreForwardConfig
+ (*ModuleConfig_RangeTestConfig)(nil), // 14: meshtastic.ModuleConfig.RangeTestConfig
+ (*ModuleConfig_TelemetryConfig)(nil), // 15: meshtastic.ModuleConfig.TelemetryConfig
+ (*ModuleConfig_CannedMessageConfig)(nil), // 16: meshtastic.ModuleConfig.CannedMessageConfig
+ (*ModuleConfig_AudioConfig)(nil), // 17: meshtastic.ModuleConfig.AudioConfig
+ (*ModuleConfig_RemoteHardwareConfig)(nil), // 18: meshtastic.ModuleConfig.RemoteHardwareConfig
+ (*ModuleConfig_NeighborInfoConfig)(nil), // 19: meshtastic.ModuleConfig.NeighborInfoConfig
+ (*ModuleConfig_AmbientLightingConfig)(nil), // 20: meshtastic.ModuleConfig.AmbientLightingConfig
+ (*ModuleConfig_DetectionSensorConfig)(nil), // 21: meshtastic.ModuleConfig.DetectionSensorConfig
+ (*ModuleConfig_PaxcounterConfig)(nil), // 22: meshtastic.ModuleConfig.PaxcounterConfig
+ (*ModuleConfig_StatusMessageConfig)(nil), // 23: meshtastic.ModuleConfig.StatusMessageConfig
+ (*ModuleConfig_TrafficManagementConfig)(nil), // 24: meshtastic.ModuleConfig.TrafficManagementConfig
+ (*ModuleConfig_TAKConfig)(nil), // 25: meshtastic.ModuleConfig.TAKConfig
+}
+var file_meshtastic_localonly_proto_depIdxs = []int32{
+ 2, // 0: meshtastic.LocalConfig.device:type_name -> meshtastic.Config.DeviceConfig
+ 3, // 1: meshtastic.LocalConfig.position:type_name -> meshtastic.Config.PositionConfig
+ 4, // 2: meshtastic.LocalConfig.power:type_name -> meshtastic.Config.PowerConfig
+ 5, // 3: meshtastic.LocalConfig.network:type_name -> meshtastic.Config.NetworkConfig
+ 6, // 4: meshtastic.LocalConfig.display:type_name -> meshtastic.Config.DisplayConfig
+ 7, // 5: meshtastic.LocalConfig.lora:type_name -> meshtastic.Config.LoRaConfig
+ 8, // 6: meshtastic.LocalConfig.bluetooth:type_name -> meshtastic.Config.BluetoothConfig
+ 9, // 7: meshtastic.LocalConfig.security:type_name -> meshtastic.Config.SecurityConfig
+ 10, // 8: meshtastic.LocalModuleConfig.mqtt:type_name -> meshtastic.ModuleConfig.MQTTConfig
+ 11, // 9: meshtastic.LocalModuleConfig.serial:type_name -> meshtastic.ModuleConfig.SerialConfig
+ 12, // 10: meshtastic.LocalModuleConfig.external_notification:type_name -> meshtastic.ModuleConfig.ExternalNotificationConfig
+ 13, // 11: meshtastic.LocalModuleConfig.store_forward:type_name -> meshtastic.ModuleConfig.StoreForwardConfig
+ 14, // 12: meshtastic.LocalModuleConfig.range_test:type_name -> meshtastic.ModuleConfig.RangeTestConfig
+ 15, // 13: meshtastic.LocalModuleConfig.telemetry:type_name -> meshtastic.ModuleConfig.TelemetryConfig
+ 16, // 14: meshtastic.LocalModuleConfig.canned_message:type_name -> meshtastic.ModuleConfig.CannedMessageConfig
+ 17, // 15: meshtastic.LocalModuleConfig.audio:type_name -> meshtastic.ModuleConfig.AudioConfig
+ 18, // 16: meshtastic.LocalModuleConfig.remote_hardware:type_name -> meshtastic.ModuleConfig.RemoteHardwareConfig
+ 19, // 17: meshtastic.LocalModuleConfig.neighbor_info:type_name -> meshtastic.ModuleConfig.NeighborInfoConfig
+ 20, // 18: meshtastic.LocalModuleConfig.ambient_lighting:type_name -> meshtastic.ModuleConfig.AmbientLightingConfig
+ 21, // 19: meshtastic.LocalModuleConfig.detection_sensor:type_name -> meshtastic.ModuleConfig.DetectionSensorConfig
+ 22, // 20: meshtastic.LocalModuleConfig.paxcounter:type_name -> meshtastic.ModuleConfig.PaxcounterConfig
+ 23, // 21: meshtastic.LocalModuleConfig.statusmessage:type_name -> meshtastic.ModuleConfig.StatusMessageConfig
+ 24, // 22: meshtastic.LocalModuleConfig.traffic_management:type_name -> meshtastic.ModuleConfig.TrafficManagementConfig
+ 25, // 23: meshtastic.LocalModuleConfig.tak:type_name -> meshtastic.ModuleConfig.TAKConfig
+ 24, // [24:24] is the sub-list for method output_type
+ 24, // [24:24] is the sub-list for method input_type
+ 24, // [24:24] is the sub-list for extension type_name
+ 24, // [24:24] is the sub-list for extension extendee
+ 0, // [0:24] is the sub-list for field type_name
+}
+
+func init() { file_meshtastic_localonly_proto_init() }
+func file_meshtastic_localonly_proto_init() {
+ if File_meshtastic_localonly_proto != nil {
+ return
+ }
+ file_meshtastic_config_proto_init()
+ file_meshtastic_module_config_proto_init()
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_meshtastic_localonly_proto_rawDesc), len(file_meshtastic_localonly_proto_rawDesc)),
+ NumEnums: 0,
+ NumMessages: 2,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_meshtastic_localonly_proto_goTypes,
+ DependencyIndexes: file_meshtastic_localonly_proto_depIdxs,
+ MessageInfos: file_meshtastic_localonly_proto_msgTypes,
+ }.Build()
+ File_meshtastic_localonly_proto = out.File
+ file_meshtastic_localonly_proto_goTypes = nil
+ file_meshtastic_localonly_proto_depIdxs = nil
+}
diff --git a/protocol/meshtastic/pb/mesh.pb.go b/protocol/meshtastic/pb/mesh.pb.go
new file mode 100644
index 0000000..eee47da
--- /dev/null
+++ b/protocol/meshtastic/pb/mesh.pb.go
@@ -0,0 +1,5899 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc v6.33.4
+// source: meshtastic/mesh.proto
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// Note: these enum names must EXACTLY match the string used in the device
+// bin/build-all.sh script.
+// Because they will be used to find firmware filenames in the android app for OTA updates.
+// To match the old style filenames, _ is converted to -, p is converted to .
+type HardwareModel int32
+
+const (
+ // TODO: REPLACE
+ HardwareModel_UNSET HardwareModel = 0
+ // TODO: REPLACE
+ HardwareModel_TLORA_V2 HardwareModel = 1
+ // TODO: REPLACE
+ HardwareModel_TLORA_V1 HardwareModel = 2
+ // TODO: REPLACE
+ HardwareModel_TLORA_V2_1_1P6 HardwareModel = 3
+ // TODO: REPLACE
+ HardwareModel_TBEAM HardwareModel = 4
+ // The original heltec WiFi_Lora_32_V2, which had battery voltage sensing hooked to GPIO 13
+ // (see HELTEC_V2 for the new version).
+ HardwareModel_HELTEC_V2_0 HardwareModel = 5
+ // TODO: REPLACE
+ HardwareModel_TBEAM_V0P7 HardwareModel = 6
+ // TODO: REPLACE
+ HardwareModel_T_ECHO HardwareModel = 7
+ // TODO: REPLACE
+ HardwareModel_TLORA_V1_1P3 HardwareModel = 8
+ // TODO: REPLACE
+ HardwareModel_RAK4631 HardwareModel = 9
+ // The new version of the heltec WiFi_Lora_32_V2 board that has battery sensing hooked to GPIO 37.
+ // Sadly they did not update anything on the silkscreen to identify this board
+ HardwareModel_HELTEC_V2_1 HardwareModel = 10
+ // Ancient heltec WiFi_Lora_32 board
+ HardwareModel_HELTEC_V1 HardwareModel = 11
+ // New T-BEAM with ESP32-S3 CPU
+ HardwareModel_LILYGO_TBEAM_S3_CORE HardwareModel = 12
+ // RAK WisBlock ESP32 core: https://docs.rakwireless.com/Product-Categories/WisBlock/RAK11200/Overview/
+ HardwareModel_RAK11200 HardwareModel = 13
+ // B&Q Consulting Nano Edition G1: https://uniteng.com/wiki/doku.php?id=meshtastic:nano
+ HardwareModel_NANO_G1 HardwareModel = 14
+ // TODO: REPLACE
+ HardwareModel_TLORA_V2_1_1P8 HardwareModel = 15
+ // TODO: REPLACE
+ HardwareModel_TLORA_T3_S3 HardwareModel = 16
+ // B&Q Consulting Nano G1 Explorer: https://wiki.uniteng.com/en/meshtastic/nano-g1-explorer
+ HardwareModel_NANO_G1_EXPLORER HardwareModel = 17
+ // B&Q Consulting Nano G2 Ultra: https://wiki.uniteng.com/en/meshtastic/nano-g2-ultra
+ HardwareModel_NANO_G2_ULTRA HardwareModel = 18
+ // LoRAType device: https://loratype.org/
+ HardwareModel_LORA_TYPE HardwareModel = 19
+ // wiphone https://www.wiphone.io/
+ HardwareModel_WIPHONE HardwareModel = 20
+ // WIO Tracker WM1110 family from Seeed Studio. Includes wio-1110-tracker and wio-1110-sdk
+ HardwareModel_WIO_WM1110 HardwareModel = 21
+ // RAK2560 Solar base station based on RAK4630
+ HardwareModel_RAK2560 HardwareModel = 22
+ // Heltec HRU-3601: https://heltec.org/project/hru-3601/
+ HardwareModel_HELTEC_HRU_3601 HardwareModel = 23
+ // Heltec Wireless Bridge
+ HardwareModel_HELTEC_WIRELESS_BRIDGE HardwareModel = 24
+ // B&Q Consulting Station Edition G1: https://uniteng.com/wiki/doku.php?id=meshtastic:station
+ HardwareModel_STATION_G1 HardwareModel = 25
+ // RAK11310 (RP2040 + SX1262)
+ HardwareModel_RAK11310 HardwareModel = 26
+ // Makerfabs SenseLoRA Receiver (RP2040 + RFM96)
+ HardwareModel_SENSELORA_RP2040 HardwareModel = 27
+ // Makerfabs SenseLoRA Industrial Monitor (ESP32-S3 + RFM96)
+ HardwareModel_SENSELORA_S3 HardwareModel = 28
+ // Canary Radio Company - CanaryOne: https://canaryradio.io/products/canaryone
+ HardwareModel_CANARYONE HardwareModel = 29
+ // Waveshare RP2040 LoRa - https://www.waveshare.com/rp2040-lora.htm
+ HardwareModel_RP2040_LORA HardwareModel = 30
+ // B&Q Consulting Station G2: https://wiki.uniteng.com/en/meshtastic/station-g2
+ HardwareModel_STATION_G2 HardwareModel = 31
+ // ---------------------------------------------------------------------------
+ // Less common/prototype boards listed here (needs one more byte over the air)
+ // ---------------------------------------------------------------------------
+ HardwareModel_LORA_RELAY_V1 HardwareModel = 32
+ // T-Echo Plus device from LilyGo
+ HardwareModel_T_ECHO_PLUS HardwareModel = 33
+ // TODO: REPLACE
+ HardwareModel_PPR HardwareModel = 34
+ // TODO: REPLACE
+ HardwareModel_GENIEBLOCKS HardwareModel = 35
+ // TODO: REPLACE
+ HardwareModel_NRF52_UNKNOWN HardwareModel = 36
+ // TODO: REPLACE
+ HardwareModel_PORTDUINO HardwareModel = 37
+ // The simulator built into the android app
+ HardwareModel_ANDROID_SIM HardwareModel = 38
+ // Custom DIY device based on @NanoVHF schematics: https://github.com/NanoVHF/Meshtastic-DIY/tree/main/Schematics
+ HardwareModel_DIY_V1 HardwareModel = 39
+ // nRF52840 Dongle : https://www.nordicsemi.com/Products/Development-hardware/nrf52840-dongle/
+ HardwareModel_NRF52840_PCA10059 HardwareModel = 40
+ // Custom Disaster Radio esp32 v3 device https://github.com/sudomesh/disaster-radio/tree/master/hardware/board_esp32_v3
+ HardwareModel_DR_DEV HardwareModel = 41
+ // M5 esp32 based MCU modules with enclosure, TFT and LORA Shields. All Variants (Basic, Core, Fire, Core2, CoreS3, Paper) https://m5stack.com/
+ HardwareModel_M5STACK HardwareModel = 42
+ // New Heltec LoRA32 with ESP32-S3 CPU
+ HardwareModel_HELTEC_V3 HardwareModel = 43
+ // New Heltec Wireless Stick Lite with ESP32-S3 CPU
+ HardwareModel_HELTEC_WSL_V3 HardwareModel = 44
+ // New BETAFPV ELRS Micro TX Module 2.4G with ESP32 CPU
+ HardwareModel_BETAFPV_2400_TX HardwareModel = 45
+ // BetaFPV ExpressLRS "Nano" TX Module 900MHz with ESP32 CPU
+ HardwareModel_BETAFPV_900_NANO_TX HardwareModel = 46
+ // Raspberry Pi Pico (W) with Waveshare SX1262 LoRa Node Module
+ HardwareModel_RPI_PICO HardwareModel = 47
+ // Heltec Wireless Tracker with ESP32-S3 CPU, built-in GPS, and TFT
+ // Newer V1.1, version is written on the PCB near the display.
+ HardwareModel_HELTEC_WIRELESS_TRACKER HardwareModel = 48
+ // Heltec Wireless Paper with ESP32-S3 CPU and E-Ink display
+ HardwareModel_HELTEC_WIRELESS_PAPER HardwareModel = 49
+ // LilyGo T-Deck with ESP32-S3 CPU, Keyboard and IPS display
+ HardwareModel_T_DECK HardwareModel = 50
+ // LilyGo T-Watch S3 with ESP32-S3 CPU and IPS display
+ HardwareModel_T_WATCH_S3 HardwareModel = 51
+ // Bobricius Picomputer with ESP32-S3 CPU, Keyboard and IPS display
+ HardwareModel_PICOMPUTER_S3 HardwareModel = 52
+ // Heltec HT-CT62 with ESP32-C3 CPU and SX1262 LoRa
+ HardwareModel_HELTEC_HT62 HardwareModel = 53
+ // EBYTE SPI LoRa module and ESP32-S3
+ HardwareModel_EBYTE_ESP32_S3 HardwareModel = 54
+ // Waveshare ESP32-S3-PICO with PICO LoRa HAT and 2.9inch e-Ink
+ HardwareModel_ESP32_S3_PICO HardwareModel = 55
+ // CircuitMess Chatter 2 LLCC68 Lora Module and ESP32 Wroom
+ // Lora module can be swapped out for a Heltec RA-62 which is "almost" pin compatible
+ // with one cut and one jumper Meshtastic works
+ HardwareModel_CHATTER_2 HardwareModel = 56
+ // Heltec Wireless Paper, With ESP32-S3 CPU and E-Ink display
+ // Older "V1.0" Variant, has no "version sticker"
+ // E-Ink model is DEPG0213BNS800
+ // Tab on the screen protector is RED
+ // Flex connector marking is FPC-7528B
+ HardwareModel_HELTEC_WIRELESS_PAPER_V1_0 HardwareModel = 57
+ // Heltec Wireless Tracker with ESP32-S3 CPU, built-in GPS, and TFT
+ // Older "V1.0" Variant
+ HardwareModel_HELTEC_WIRELESS_TRACKER_V1_0 HardwareModel = 58
+ // unPhone with ESP32-S3, TFT touchscreen, LSM6DS3TR-C accelerometer and gyroscope
+ HardwareModel_UNPHONE HardwareModel = 59
+ // Teledatics TD-LORAC NRF52840 based M.2 LoRA module
+ // Compatible with the TD-WRLS development board
+ HardwareModel_TD_LORAC HardwareModel = 60
+ // CDEBYTE EoRa-S3 board using their own MM modules, clone of LILYGO T3S3
+ HardwareModel_CDEBYTE_EORA_S3 HardwareModel = 61
+ // TWC_MESH_V4
+ // Adafruit NRF52840 feather express with SX1262, SSD1306 OLED and NEO6M GPS
+ HardwareModel_TWC_MESH_V4 HardwareModel = 62
+ // NRF52_PROMICRO_DIY
+ // Promicro NRF52840 with SX1262/LLCC68, SSD1306 OLED and NEO6M GPS
+ HardwareModel_NRF52_PROMICRO_DIY HardwareModel = 63
+ // RadioMaster 900 Bandit Nano, https://www.radiomasterrc.com/products/bandit-nano-expresslrs-rf-module
+ // ESP32-D0WDQ6 With SX1276/SKY66122, SSD1306 OLED and No GPS
+ HardwareModel_RADIOMASTER_900_BANDIT_NANO HardwareModel = 64
+ // Heltec Capsule Sensor V3 with ESP32-S3 CPU, Portable LoRa device that can replace GNSS modules or sensors
+ HardwareModel_HELTEC_CAPSULE_SENSOR_V3 HardwareModel = 65
+ // Heltec Vision Master T190 with ESP32-S3 CPU, and a 1.90 inch TFT display
+ HardwareModel_HELTEC_VISION_MASTER_T190 HardwareModel = 66
+ // Heltec Vision Master E213 with ESP32-S3 CPU, and a 2.13 inch E-Ink display
+ HardwareModel_HELTEC_VISION_MASTER_E213 HardwareModel = 67
+ // Heltec Vision Master E290 with ESP32-S3 CPU, and a 2.9 inch E-Ink display
+ HardwareModel_HELTEC_VISION_MASTER_E290 HardwareModel = 68
+ // Heltec Mesh Node T114 board with nRF52840 CPU, and a 1.14 inch TFT display, Ultimate low-power design,
+ // specifically adapted for the Meshtatic project
+ HardwareModel_HELTEC_MESH_NODE_T114 HardwareModel = 69
+ // Sensecap Indicator from Seeed Studio. ESP32-S3 device with TFT and RP2040 coprocessor
+ HardwareModel_SENSECAP_INDICATOR HardwareModel = 70
+ // Seeed studio T1000-E tracker card. NRF52840 w/ LR1110 radio, GPS, button, buzzer, and sensors.
+ HardwareModel_TRACKER_T1000_E HardwareModel = 71
+ // RAK3172 STM32WLE5 Module (https://store.rakwireless.com/products/wisduo-lpwan-module-rak3172)
+ HardwareModel_RAK3172 HardwareModel = 72
+ // Seeed Studio Wio-E5 (either mini or Dev kit) using STM32WL chip.
+ HardwareModel_WIO_E5 HardwareModel = 73
+ // RadioMaster 900 Bandit, https://www.radiomasterrc.com/products/bandit-expresslrs-rf-module
+ // SSD1306 OLED and No GPS
+ HardwareModel_RADIOMASTER_900_BANDIT HardwareModel = 74
+ // Minewsemi ME25LS01 (ME25LE01_V1.0). NRF52840 w/ LR1110 radio, buttons and leds and pins.
+ HardwareModel_ME25LS01_4Y10TD HardwareModel = 75
+ // RP2040_FEATHER_RFM95
+ // Adafruit Feather RP2040 with RFM95 LoRa Radio RFM95 with SX1272, SSD1306 OLED
+ // https://www.adafruit.com/product/5714
+ // https://www.adafruit.com/product/326
+ // https://www.adafruit.com/product/938
+ //
+ // ^^^ short A0 to switch to I2C address 0x3C
+ HardwareModel_RP2040_FEATHER_RFM95 HardwareModel = 76
+ // M5 esp32 based MCU modules with enclosure, TFT and LORA Shields. All Variants (Basic, Core, Fire, Core2, CoreS3, Paper) https://m5stack.com/
+ HardwareModel_M5STACK_COREBASIC HardwareModel = 77
+ HardwareModel_M5STACK_CORE2 HardwareModel = 78
+ // Pico2 with Waveshare Hat, same as Pico
+ HardwareModel_RPI_PICO2 HardwareModel = 79
+ // M5 esp32 based MCU modules with enclosure, TFT and LORA Shields. All Variants (Basic, Core, Fire, Core2, CoreS3, Paper) https://m5stack.com/
+ HardwareModel_M5STACK_CORES3 HardwareModel = 80
+ // Seeed XIAO S3 DK
+ HardwareModel_SEEED_XIAO_S3 HardwareModel = 81
+ // Nordic nRF52840+Semtech SX1262 LoRa BLE Combo Module. nRF52840+SX1262 MS24SF1
+ HardwareModel_MS24SF1 HardwareModel = 82
+ // Lilygo TLora-C6 with the new ESP32-C6 MCU
+ HardwareModel_TLORA_C6 HardwareModel = 83
+ // WisMesh Tap
+ // RAK-4631 w/ TFT in injection modled case
+ HardwareModel_WISMESH_TAP HardwareModel = 84
+ // Similar to PORTDUINO but used by Routastic devices, this is not any
+ // particular device and does not run Meshtastic's code but supports
+ // the same frame format.
+ // Runs on linux, see https://github.com/Jorropo/routastic
+ HardwareModel_ROUTASTIC HardwareModel = 85
+ // Mesh-Tab, esp32 based
+ // https://github.com/valzzu/Mesh-Tab
+ HardwareModel_MESH_TAB HardwareModel = 86
+ // MeshLink board developed by LoraItalia. NRF52840, eByte E22900M22S (Will also come with other frequencies), 25w MPPT solar charger (5v,12v,18v selectable), support for gps, buzzer, oled or e-ink display, 10 gpios, hardware watchdog
+ // https://www.loraitalia.it
+ HardwareModel_MESHLINK HardwareModel = 87
+ // Seeed XIAO nRF52840 + Wio SX1262 kit
+ HardwareModel_XIAO_NRF52_KIT HardwareModel = 88
+ // Elecrow ThinkNode M1 & M2
+ // https://www.elecrow.com/wiki/ThinkNode-M1_Transceiver_Device(Meshtastic)_Power_By_nRF52840.html
+ // https://www.elecrow.com/wiki/ThinkNode-M2_Transceiver_Device(Meshtastic)_Power_By_NRF52840.html (this actually uses ESP32-S3)
+ HardwareModel_THINKNODE_M1 HardwareModel = 89
+ HardwareModel_THINKNODE_M2 HardwareModel = 90
+ // Lilygo T-ETH-Elite
+ HardwareModel_T_ETH_ELITE HardwareModel = 91
+ // Heltec HRI-3621 industrial probe
+ HardwareModel_HELTEC_SENSOR_HUB HardwareModel = 92
+ // Muzi Works Muzi-Base device
+ HardwareModel_MUZI_BASE HardwareModel = 93
+ // Heltec Magnetic Power Bank with Meshtastic compatible
+ HardwareModel_HELTEC_MESH_POCKET HardwareModel = 94
+ // Seeed Solar Node
+ HardwareModel_SEEED_SOLAR_NODE HardwareModel = 95
+ // NomadStar Meteor Pro https://nomadstar.ch/
+ HardwareModel_NOMADSTAR_METEOR_PRO HardwareModel = 96
+ // Elecrow CrowPanel Advance models, ESP32-S3 and TFT with SX1262 radio plugin
+ HardwareModel_CROWPANEL HardwareModel = 97
+ // Lilygo LINK32 board with sensors
+ HardwareModel_LINK_32 HardwareModel = 98
+ // Seeed Tracker L1
+ HardwareModel_SEEED_WIO_TRACKER_L1 HardwareModel = 99
+ // Seeed Tracker L1 EINK driver
+ HardwareModel_SEEED_WIO_TRACKER_L1_EINK HardwareModel = 100
+ // Muzi Works R1 Neo
+ HardwareModel_MUZI_R1_NEO HardwareModel = 101
+ // Lilygo T-Deck Pro
+ HardwareModel_T_DECK_PRO HardwareModel = 102
+ // Lilygo TLora Pager
+ HardwareModel_T_LORA_PAGER HardwareModel = 103
+ // M5Stack Reserved
+ HardwareModel_M5STACK_RESERVED HardwareModel = 104 // 0x68
+ // RAKwireless WisMesh Tag
+ HardwareModel_WISMESH_TAG HardwareModel = 105
+ // RAKwireless WisBlock Core RAK3312 https://docs.rakwireless.com/product-categories/wisduo/rak3112-module/overview/
+ HardwareModel_RAK3312 HardwareModel = 106
+ // Elecrow ThinkNode M5 https://www.elecrow.com/wiki/ThinkNode_M5_Meshtastic_LoRa_Signal_Transceiver_ESP32-S3.html
+ HardwareModel_THINKNODE_M5 HardwareModel = 107
+ // MeshSolar is an integrated power management and communication solution designed for outdoor low-power devices.
+ // https://heltec.org/project/meshsolar/
+ HardwareModel_HELTEC_MESH_SOLAR HardwareModel = 108
+ // Lilygo T-Echo Lite
+ HardwareModel_T_ECHO_LITE HardwareModel = 109
+ // New Heltec LoRA32 with ESP32-S3 CPU
+ HardwareModel_HELTEC_V4 HardwareModel = 110
+ // M5Stack C6L
+ HardwareModel_M5STACK_C6L HardwareModel = 111
+ // M5Stack Cardputer Adv
+ HardwareModel_M5STACK_CARDPUTER_ADV HardwareModel = 112
+ // ESP32S3 main controller with GPS and TFT screen.
+ HardwareModel_HELTEC_WIRELESS_TRACKER_V2 HardwareModel = 113
+ // LilyGo T-Watch Ultra
+ HardwareModel_T_WATCH_ULTRA HardwareModel = 114
+ // Elecrow ThinkNode M3
+ HardwareModel_THINKNODE_M3 HardwareModel = 115
+ // RAK WISMESH_TAP_V2 with ESP32-S3 CPU
+ HardwareModel_WISMESH_TAP_V2 HardwareModel = 116
+ // RAK3401
+ HardwareModel_RAK3401 HardwareModel = 117
+ // RAK6421 Hat+
+ HardwareModel_RAK6421 HardwareModel = 118
+ // Elecrow ThinkNode M4
+ HardwareModel_THINKNODE_M4 HardwareModel = 119
+ // Elecrow ThinkNode M6
+ HardwareModel_THINKNODE_M6 HardwareModel = 120
+ // Elecrow Meshstick 1262
+ HardwareModel_MESHSTICK_1262 HardwareModel = 121
+ // LilyGo T-Beam 1W
+ HardwareModel_TBEAM_1_WATT HardwareModel = 122
+ // LilyGo T5 S3 ePaper Pro (V1 and V2)
+ HardwareModel_T5_S3_EPAPER_PRO HardwareModel = 123
+ // LilyGo T-Beam BPF (144-148Mhz)
+ HardwareModel_TBEAM_BPF HardwareModel = 124
+ // LilyGo T-Mini E-paper S3 Kit
+ HardwareModel_MINI_EPAPER_S3 HardwareModel = 125
+ // ------------------------------------------------------------------------------------------------------------------------------------------
+ // Reserved ID For developing private Ports. These will show up in live traffic sparsely, so we can use a high number. Keep it within 8 bits.
+ // ------------------------------------------------------------------------------------------------------------------------------------------
+ HardwareModel_PRIVATE_HW HardwareModel = 255
+)
+
+// Enum value maps for HardwareModel.
+var (
+ HardwareModel_name = map[int32]string{
+ 0: "UNSET",
+ 1: "TLORA_V2",
+ 2: "TLORA_V1",
+ 3: "TLORA_V2_1_1P6",
+ 4: "TBEAM",
+ 5: "HELTEC_V2_0",
+ 6: "TBEAM_V0P7",
+ 7: "T_ECHO",
+ 8: "TLORA_V1_1P3",
+ 9: "RAK4631",
+ 10: "HELTEC_V2_1",
+ 11: "HELTEC_V1",
+ 12: "LILYGO_TBEAM_S3_CORE",
+ 13: "RAK11200",
+ 14: "NANO_G1",
+ 15: "TLORA_V2_1_1P8",
+ 16: "TLORA_T3_S3",
+ 17: "NANO_G1_EXPLORER",
+ 18: "NANO_G2_ULTRA",
+ 19: "LORA_TYPE",
+ 20: "WIPHONE",
+ 21: "WIO_WM1110",
+ 22: "RAK2560",
+ 23: "HELTEC_HRU_3601",
+ 24: "HELTEC_WIRELESS_BRIDGE",
+ 25: "STATION_G1",
+ 26: "RAK11310",
+ 27: "SENSELORA_RP2040",
+ 28: "SENSELORA_S3",
+ 29: "CANARYONE",
+ 30: "RP2040_LORA",
+ 31: "STATION_G2",
+ 32: "LORA_RELAY_V1",
+ 33: "T_ECHO_PLUS",
+ 34: "PPR",
+ 35: "GENIEBLOCKS",
+ 36: "NRF52_UNKNOWN",
+ 37: "PORTDUINO",
+ 38: "ANDROID_SIM",
+ 39: "DIY_V1",
+ 40: "NRF52840_PCA10059",
+ 41: "DR_DEV",
+ 42: "M5STACK",
+ 43: "HELTEC_V3",
+ 44: "HELTEC_WSL_V3",
+ 45: "BETAFPV_2400_TX",
+ 46: "BETAFPV_900_NANO_TX",
+ 47: "RPI_PICO",
+ 48: "HELTEC_WIRELESS_TRACKER",
+ 49: "HELTEC_WIRELESS_PAPER",
+ 50: "T_DECK",
+ 51: "T_WATCH_S3",
+ 52: "PICOMPUTER_S3",
+ 53: "HELTEC_HT62",
+ 54: "EBYTE_ESP32_S3",
+ 55: "ESP32_S3_PICO",
+ 56: "CHATTER_2",
+ 57: "HELTEC_WIRELESS_PAPER_V1_0",
+ 58: "HELTEC_WIRELESS_TRACKER_V1_0",
+ 59: "UNPHONE",
+ 60: "TD_LORAC",
+ 61: "CDEBYTE_EORA_S3",
+ 62: "TWC_MESH_V4",
+ 63: "NRF52_PROMICRO_DIY",
+ 64: "RADIOMASTER_900_BANDIT_NANO",
+ 65: "HELTEC_CAPSULE_SENSOR_V3",
+ 66: "HELTEC_VISION_MASTER_T190",
+ 67: "HELTEC_VISION_MASTER_E213",
+ 68: "HELTEC_VISION_MASTER_E290",
+ 69: "HELTEC_MESH_NODE_T114",
+ 70: "SENSECAP_INDICATOR",
+ 71: "TRACKER_T1000_E",
+ 72: "RAK3172",
+ 73: "WIO_E5",
+ 74: "RADIOMASTER_900_BANDIT",
+ 75: "ME25LS01_4Y10TD",
+ 76: "RP2040_FEATHER_RFM95",
+ 77: "M5STACK_COREBASIC",
+ 78: "M5STACK_CORE2",
+ 79: "RPI_PICO2",
+ 80: "M5STACK_CORES3",
+ 81: "SEEED_XIAO_S3",
+ 82: "MS24SF1",
+ 83: "TLORA_C6",
+ 84: "WISMESH_TAP",
+ 85: "ROUTASTIC",
+ 86: "MESH_TAB",
+ 87: "MESHLINK",
+ 88: "XIAO_NRF52_KIT",
+ 89: "THINKNODE_M1",
+ 90: "THINKNODE_M2",
+ 91: "T_ETH_ELITE",
+ 92: "HELTEC_SENSOR_HUB",
+ 93: "MUZI_BASE",
+ 94: "HELTEC_MESH_POCKET",
+ 95: "SEEED_SOLAR_NODE",
+ 96: "NOMADSTAR_METEOR_PRO",
+ 97: "CROWPANEL",
+ 98: "LINK_32",
+ 99: "SEEED_WIO_TRACKER_L1",
+ 100: "SEEED_WIO_TRACKER_L1_EINK",
+ 101: "MUZI_R1_NEO",
+ 102: "T_DECK_PRO",
+ 103: "T_LORA_PAGER",
+ 104: "M5STACK_RESERVED",
+ 105: "WISMESH_TAG",
+ 106: "RAK3312",
+ 107: "THINKNODE_M5",
+ 108: "HELTEC_MESH_SOLAR",
+ 109: "T_ECHO_LITE",
+ 110: "HELTEC_V4",
+ 111: "M5STACK_C6L",
+ 112: "M5STACK_CARDPUTER_ADV",
+ 113: "HELTEC_WIRELESS_TRACKER_V2",
+ 114: "T_WATCH_ULTRA",
+ 115: "THINKNODE_M3",
+ 116: "WISMESH_TAP_V2",
+ 117: "RAK3401",
+ 118: "RAK6421",
+ 119: "THINKNODE_M4",
+ 120: "THINKNODE_M6",
+ 121: "MESHSTICK_1262",
+ 122: "TBEAM_1_WATT",
+ 123: "T5_S3_EPAPER_PRO",
+ 124: "TBEAM_BPF",
+ 125: "MINI_EPAPER_S3",
+ 255: "PRIVATE_HW",
+ }
+ HardwareModel_value = map[string]int32{
+ "UNSET": 0,
+ "TLORA_V2": 1,
+ "TLORA_V1": 2,
+ "TLORA_V2_1_1P6": 3,
+ "TBEAM": 4,
+ "HELTEC_V2_0": 5,
+ "TBEAM_V0P7": 6,
+ "T_ECHO": 7,
+ "TLORA_V1_1P3": 8,
+ "RAK4631": 9,
+ "HELTEC_V2_1": 10,
+ "HELTEC_V1": 11,
+ "LILYGO_TBEAM_S3_CORE": 12,
+ "RAK11200": 13,
+ "NANO_G1": 14,
+ "TLORA_V2_1_1P8": 15,
+ "TLORA_T3_S3": 16,
+ "NANO_G1_EXPLORER": 17,
+ "NANO_G2_ULTRA": 18,
+ "LORA_TYPE": 19,
+ "WIPHONE": 20,
+ "WIO_WM1110": 21,
+ "RAK2560": 22,
+ "HELTEC_HRU_3601": 23,
+ "HELTEC_WIRELESS_BRIDGE": 24,
+ "STATION_G1": 25,
+ "RAK11310": 26,
+ "SENSELORA_RP2040": 27,
+ "SENSELORA_S3": 28,
+ "CANARYONE": 29,
+ "RP2040_LORA": 30,
+ "STATION_G2": 31,
+ "LORA_RELAY_V1": 32,
+ "T_ECHO_PLUS": 33,
+ "PPR": 34,
+ "GENIEBLOCKS": 35,
+ "NRF52_UNKNOWN": 36,
+ "PORTDUINO": 37,
+ "ANDROID_SIM": 38,
+ "DIY_V1": 39,
+ "NRF52840_PCA10059": 40,
+ "DR_DEV": 41,
+ "M5STACK": 42,
+ "HELTEC_V3": 43,
+ "HELTEC_WSL_V3": 44,
+ "BETAFPV_2400_TX": 45,
+ "BETAFPV_900_NANO_TX": 46,
+ "RPI_PICO": 47,
+ "HELTEC_WIRELESS_TRACKER": 48,
+ "HELTEC_WIRELESS_PAPER": 49,
+ "T_DECK": 50,
+ "T_WATCH_S3": 51,
+ "PICOMPUTER_S3": 52,
+ "HELTEC_HT62": 53,
+ "EBYTE_ESP32_S3": 54,
+ "ESP32_S3_PICO": 55,
+ "CHATTER_2": 56,
+ "HELTEC_WIRELESS_PAPER_V1_0": 57,
+ "HELTEC_WIRELESS_TRACKER_V1_0": 58,
+ "UNPHONE": 59,
+ "TD_LORAC": 60,
+ "CDEBYTE_EORA_S3": 61,
+ "TWC_MESH_V4": 62,
+ "NRF52_PROMICRO_DIY": 63,
+ "RADIOMASTER_900_BANDIT_NANO": 64,
+ "HELTEC_CAPSULE_SENSOR_V3": 65,
+ "HELTEC_VISION_MASTER_T190": 66,
+ "HELTEC_VISION_MASTER_E213": 67,
+ "HELTEC_VISION_MASTER_E290": 68,
+ "HELTEC_MESH_NODE_T114": 69,
+ "SENSECAP_INDICATOR": 70,
+ "TRACKER_T1000_E": 71,
+ "RAK3172": 72,
+ "WIO_E5": 73,
+ "RADIOMASTER_900_BANDIT": 74,
+ "ME25LS01_4Y10TD": 75,
+ "RP2040_FEATHER_RFM95": 76,
+ "M5STACK_COREBASIC": 77,
+ "M5STACK_CORE2": 78,
+ "RPI_PICO2": 79,
+ "M5STACK_CORES3": 80,
+ "SEEED_XIAO_S3": 81,
+ "MS24SF1": 82,
+ "TLORA_C6": 83,
+ "WISMESH_TAP": 84,
+ "ROUTASTIC": 85,
+ "MESH_TAB": 86,
+ "MESHLINK": 87,
+ "XIAO_NRF52_KIT": 88,
+ "THINKNODE_M1": 89,
+ "THINKNODE_M2": 90,
+ "T_ETH_ELITE": 91,
+ "HELTEC_SENSOR_HUB": 92,
+ "MUZI_BASE": 93,
+ "HELTEC_MESH_POCKET": 94,
+ "SEEED_SOLAR_NODE": 95,
+ "NOMADSTAR_METEOR_PRO": 96,
+ "CROWPANEL": 97,
+ "LINK_32": 98,
+ "SEEED_WIO_TRACKER_L1": 99,
+ "SEEED_WIO_TRACKER_L1_EINK": 100,
+ "MUZI_R1_NEO": 101,
+ "T_DECK_PRO": 102,
+ "T_LORA_PAGER": 103,
+ "M5STACK_RESERVED": 104,
+ "WISMESH_TAG": 105,
+ "RAK3312": 106,
+ "THINKNODE_M5": 107,
+ "HELTEC_MESH_SOLAR": 108,
+ "T_ECHO_LITE": 109,
+ "HELTEC_V4": 110,
+ "M5STACK_C6L": 111,
+ "M5STACK_CARDPUTER_ADV": 112,
+ "HELTEC_WIRELESS_TRACKER_V2": 113,
+ "T_WATCH_ULTRA": 114,
+ "THINKNODE_M3": 115,
+ "WISMESH_TAP_V2": 116,
+ "RAK3401": 117,
+ "RAK6421": 118,
+ "THINKNODE_M4": 119,
+ "THINKNODE_M6": 120,
+ "MESHSTICK_1262": 121,
+ "TBEAM_1_WATT": 122,
+ "T5_S3_EPAPER_PRO": 123,
+ "TBEAM_BPF": 124,
+ "MINI_EPAPER_S3": 125,
+ "PRIVATE_HW": 255,
+ }
+)
+
+func (x HardwareModel) Enum() *HardwareModel {
+ p := new(HardwareModel)
+ *p = x
+ return p
+}
+
+func (x HardwareModel) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (HardwareModel) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_mesh_proto_enumTypes[0].Descriptor()
+}
+
+func (HardwareModel) Type() protoreflect.EnumType {
+ return &file_meshtastic_mesh_proto_enumTypes[0]
+}
+
+func (x HardwareModel) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use HardwareModel.Descriptor instead.
+func (HardwareModel) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{0}
+}
+
+// Shared constants between device and phone
+type Constants int32
+
+const (
+ // First enum must be zero, and we are just using this enum to
+ // pass int constants between two very different environments
+ Constants_ZERO Constants = 0
+ // From mesh.options
+ // 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
+ Constants_DATA_PAYLOAD_LEN Constants = 233
+)
+
+// Enum value maps for Constants.
+var (
+ Constants_name = map[int32]string{
+ 0: "ZERO",
+ 233: "DATA_PAYLOAD_LEN",
+ }
+ Constants_value = map[string]int32{
+ "ZERO": 0,
+ "DATA_PAYLOAD_LEN": 233,
+ }
+)
+
+func (x Constants) Enum() *Constants {
+ p := new(Constants)
+ *p = x
+ return p
+}
+
+func (x Constants) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Constants) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_mesh_proto_enumTypes[1].Descriptor()
+}
+
+func (Constants) Type() protoreflect.EnumType {
+ return &file_meshtastic_mesh_proto_enumTypes[1]
+}
+
+func (x Constants) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Constants.Descriptor instead.
+func (Constants) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{1}
+}
+
+// Error codes for critical errors
+// The device might report these fault codes on the screen.
+// If you encounter a fault code, please post on the meshtastic.discourse.group
+// and we'll try to help.
+type CriticalErrorCode int32
+
+const (
+ // TODO: REPLACE
+ CriticalErrorCode_NONE CriticalErrorCode = 0
+ // A software bug was detected while trying to send lora
+ CriticalErrorCode_TX_WATCHDOG CriticalErrorCode = 1
+ // A software bug was detected on entry to sleep
+ CriticalErrorCode_SLEEP_ENTER_WAIT CriticalErrorCode = 2
+ // No Lora radio hardware could be found
+ CriticalErrorCode_NO_RADIO CriticalErrorCode = 3
+ // Not normally used
+ CriticalErrorCode_UNSPECIFIED CriticalErrorCode = 4
+ // We failed while configuring a UBlox GPS
+ CriticalErrorCode_UBLOX_UNIT_FAILED CriticalErrorCode = 5
+ // This board was expected to have a power management chip and it is missing or broken
+ CriticalErrorCode_NO_AXP192 CriticalErrorCode = 6
+ // The channel tried to set a radio setting which is not supported by this chipset,
+ // radio comms settings are now undefined.
+ CriticalErrorCode_INVALID_RADIO_SETTING CriticalErrorCode = 7
+ // Radio transmit hardware failure. We sent data to the radio chip, but it didn't
+ // reply with an interrupt.
+ CriticalErrorCode_TRANSMIT_FAILED CriticalErrorCode = 8
+ // We detected that the main CPU voltage dropped below the minimum acceptable value
+ CriticalErrorCode_BROWNOUT CriticalErrorCode = 9
+ // Selftest of SX1262 radio chip failed
+ CriticalErrorCode_SX1262_FAILURE CriticalErrorCode = 10
+ // A (likely software but possibly hardware) failure was detected while trying to send packets.
+ // If this occurs on your board, please post in the forum so that we can ask you to collect some information to allow fixing this bug
+ CriticalErrorCode_RADIO_SPI_BUG CriticalErrorCode = 11
+ // Corruption was detected on the flash filesystem but we were able to repair things.
+ // If you see this failure in the field please post in the forum because we are interested in seeing if this is occurring in the field.
+ CriticalErrorCode_FLASH_CORRUPTION_RECOVERABLE CriticalErrorCode = 12
+ // Corruption was detected on the flash filesystem but we were unable to repair things.
+ // NOTE: Your node will probably need to be reconfigured the next time it reboots (it will lose the region code etc...)
+ // If you see this failure in the field please post in the forum because we are interested in seeing if this is occurring in the field.
+ CriticalErrorCode_FLASH_CORRUPTION_UNRECOVERABLE CriticalErrorCode = 13
+)
+
+// Enum value maps for CriticalErrorCode.
+var (
+ CriticalErrorCode_name = map[int32]string{
+ 0: "NONE",
+ 1: "TX_WATCHDOG",
+ 2: "SLEEP_ENTER_WAIT",
+ 3: "NO_RADIO",
+ 4: "UNSPECIFIED",
+ 5: "UBLOX_UNIT_FAILED",
+ 6: "NO_AXP192",
+ 7: "INVALID_RADIO_SETTING",
+ 8: "TRANSMIT_FAILED",
+ 9: "BROWNOUT",
+ 10: "SX1262_FAILURE",
+ 11: "RADIO_SPI_BUG",
+ 12: "FLASH_CORRUPTION_RECOVERABLE",
+ 13: "FLASH_CORRUPTION_UNRECOVERABLE",
+ }
+ CriticalErrorCode_value = map[string]int32{
+ "NONE": 0,
+ "TX_WATCHDOG": 1,
+ "SLEEP_ENTER_WAIT": 2,
+ "NO_RADIO": 3,
+ "UNSPECIFIED": 4,
+ "UBLOX_UNIT_FAILED": 5,
+ "NO_AXP192": 6,
+ "INVALID_RADIO_SETTING": 7,
+ "TRANSMIT_FAILED": 8,
+ "BROWNOUT": 9,
+ "SX1262_FAILURE": 10,
+ "RADIO_SPI_BUG": 11,
+ "FLASH_CORRUPTION_RECOVERABLE": 12,
+ "FLASH_CORRUPTION_UNRECOVERABLE": 13,
+ }
+)
+
+func (x CriticalErrorCode) Enum() *CriticalErrorCode {
+ p := new(CriticalErrorCode)
+ *p = x
+ return p
+}
+
+func (x CriticalErrorCode) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (CriticalErrorCode) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_mesh_proto_enumTypes[2].Descriptor()
+}
+
+func (CriticalErrorCode) Type() protoreflect.EnumType {
+ return &file_meshtastic_mesh_proto_enumTypes[2]
+}
+
+func (x CriticalErrorCode) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use CriticalErrorCode.Descriptor instead.
+func (CriticalErrorCode) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{2}
+}
+
+// Enum to indicate to clients whether this firmware is a special firmware build, like an event.
+// The first 16 values are reserved for non-event special firmwares, like the Smart Citizen use case.
+type FirmwareEdition int32
+
+const (
+ // Vanilla firmware
+ FirmwareEdition_VANILLA FirmwareEdition = 0
+ // Firmware for use in the Smart Citizen environmental monitoring network
+ FirmwareEdition_SMART_CITIZEN FirmwareEdition = 1
+ // Open Sauce, the maker conference held yearly in CA
+ FirmwareEdition_OPEN_SAUCE FirmwareEdition = 16
+ // DEFCON, the yearly hacker conference
+ FirmwareEdition_DEFCON FirmwareEdition = 17
+ // Burning Man, the yearly hippie gathering in the desert
+ FirmwareEdition_BURNING_MAN FirmwareEdition = 18
+ // Hamvention, the Dayton amateur radio convention
+ FirmwareEdition_HAMVENTION FirmwareEdition = 19
+ // Placeholder for DIY and unofficial events
+ FirmwareEdition_DIY_EDITION FirmwareEdition = 127
+)
+
+// Enum value maps for FirmwareEdition.
+var (
+ FirmwareEdition_name = map[int32]string{
+ 0: "VANILLA",
+ 1: "SMART_CITIZEN",
+ 16: "OPEN_SAUCE",
+ 17: "DEFCON",
+ 18: "BURNING_MAN",
+ 19: "HAMVENTION",
+ 127: "DIY_EDITION",
+ }
+ FirmwareEdition_value = map[string]int32{
+ "VANILLA": 0,
+ "SMART_CITIZEN": 1,
+ "OPEN_SAUCE": 16,
+ "DEFCON": 17,
+ "BURNING_MAN": 18,
+ "HAMVENTION": 19,
+ "DIY_EDITION": 127,
+ }
+)
+
+func (x FirmwareEdition) Enum() *FirmwareEdition {
+ p := new(FirmwareEdition)
+ *p = x
+ return p
+}
+
+func (x FirmwareEdition) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (FirmwareEdition) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_mesh_proto_enumTypes[3].Descriptor()
+}
+
+func (FirmwareEdition) Type() protoreflect.EnumType {
+ return &file_meshtastic_mesh_proto_enumTypes[3]
+}
+
+func (x FirmwareEdition) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use FirmwareEdition.Descriptor instead.
+func (FirmwareEdition) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{3}
+}
+
+// Enum for modules excluded from a device's configuration.
+// Each value represents a ModuleConfigType that can be toggled as excluded
+// by setting its corresponding bit in the `excluded_modules` bitmask field.
+type ExcludedModules int32
+
+const (
+ // Default value of 0 indicates no modules are excluded.
+ ExcludedModules_EXCLUDED_NONE ExcludedModules = 0
+ // MQTT module
+ ExcludedModules_MQTT_CONFIG ExcludedModules = 1
+ // Serial module
+ ExcludedModules_SERIAL_CONFIG ExcludedModules = 2
+ // External Notification module
+ ExcludedModules_EXTNOTIF_CONFIG ExcludedModules = 4
+ // Store and Forward module
+ ExcludedModules_STOREFORWARD_CONFIG ExcludedModules = 8
+ // Range Test module
+ ExcludedModules_RANGETEST_CONFIG ExcludedModules = 16
+ // Telemetry module
+ ExcludedModules_TELEMETRY_CONFIG ExcludedModules = 32
+ // Canned Message module
+ ExcludedModules_CANNEDMSG_CONFIG ExcludedModules = 64
+ // Audio module
+ ExcludedModules_AUDIO_CONFIG ExcludedModules = 128
+ // Remote Hardware module
+ ExcludedModules_REMOTEHARDWARE_CONFIG ExcludedModules = 256
+ // Neighbor Info module
+ ExcludedModules_NEIGHBORINFO_CONFIG ExcludedModules = 512
+ // Ambient Lighting module
+ ExcludedModules_AMBIENTLIGHTING_CONFIG ExcludedModules = 1024
+ // Detection Sensor module
+ ExcludedModules_DETECTIONSENSOR_CONFIG ExcludedModules = 2048
+ // Paxcounter module
+ ExcludedModules_PAXCOUNTER_CONFIG ExcludedModules = 4096
+ // Bluetooth config (not technically a module, but used to indicate bluetooth capabilities)
+ ExcludedModules_BLUETOOTH_CONFIG ExcludedModules = 8192
+ // Network config (not technically a module, but used to indicate network capabilities)
+ ExcludedModules_NETWORK_CONFIG ExcludedModules = 16384
+)
+
+// Enum value maps for ExcludedModules.
+var (
+ ExcludedModules_name = map[int32]string{
+ 0: "EXCLUDED_NONE",
+ 1: "MQTT_CONFIG",
+ 2: "SERIAL_CONFIG",
+ 4: "EXTNOTIF_CONFIG",
+ 8: "STOREFORWARD_CONFIG",
+ 16: "RANGETEST_CONFIG",
+ 32: "TELEMETRY_CONFIG",
+ 64: "CANNEDMSG_CONFIG",
+ 128: "AUDIO_CONFIG",
+ 256: "REMOTEHARDWARE_CONFIG",
+ 512: "NEIGHBORINFO_CONFIG",
+ 1024: "AMBIENTLIGHTING_CONFIG",
+ 2048: "DETECTIONSENSOR_CONFIG",
+ 4096: "PAXCOUNTER_CONFIG",
+ 8192: "BLUETOOTH_CONFIG",
+ 16384: "NETWORK_CONFIG",
+ }
+ ExcludedModules_value = map[string]int32{
+ "EXCLUDED_NONE": 0,
+ "MQTT_CONFIG": 1,
+ "SERIAL_CONFIG": 2,
+ "EXTNOTIF_CONFIG": 4,
+ "STOREFORWARD_CONFIG": 8,
+ "RANGETEST_CONFIG": 16,
+ "TELEMETRY_CONFIG": 32,
+ "CANNEDMSG_CONFIG": 64,
+ "AUDIO_CONFIG": 128,
+ "REMOTEHARDWARE_CONFIG": 256,
+ "NEIGHBORINFO_CONFIG": 512,
+ "AMBIENTLIGHTING_CONFIG": 1024,
+ "DETECTIONSENSOR_CONFIG": 2048,
+ "PAXCOUNTER_CONFIG": 4096,
+ "BLUETOOTH_CONFIG": 8192,
+ "NETWORK_CONFIG": 16384,
+ }
+)
+
+func (x ExcludedModules) Enum() *ExcludedModules {
+ p := new(ExcludedModules)
+ *p = x
+ return p
+}
+
+func (x ExcludedModules) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (ExcludedModules) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_mesh_proto_enumTypes[4].Descriptor()
+}
+
+func (ExcludedModules) Type() protoreflect.EnumType {
+ return &file_meshtastic_mesh_proto_enumTypes[4]
+}
+
+func (x ExcludedModules) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use ExcludedModules.Descriptor instead.
+func (ExcludedModules) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{4}
+}
+
+// How the location was acquired: manual, onboard GPS, external (EUD) GPS
+type Position_LocSource int32
+
+const (
+ // TODO: REPLACE
+ Position_LOC_UNSET Position_LocSource = 0
+ // TODO: REPLACE
+ Position_LOC_MANUAL Position_LocSource = 1
+ // TODO: REPLACE
+ Position_LOC_INTERNAL Position_LocSource = 2
+ // TODO: REPLACE
+ Position_LOC_EXTERNAL Position_LocSource = 3
+)
+
+// Enum value maps for Position_LocSource.
+var (
+ Position_LocSource_name = map[int32]string{
+ 0: "LOC_UNSET",
+ 1: "LOC_MANUAL",
+ 2: "LOC_INTERNAL",
+ 3: "LOC_EXTERNAL",
+ }
+ Position_LocSource_value = map[string]int32{
+ "LOC_UNSET": 0,
+ "LOC_MANUAL": 1,
+ "LOC_INTERNAL": 2,
+ "LOC_EXTERNAL": 3,
+ }
+)
+
+func (x Position_LocSource) Enum() *Position_LocSource {
+ p := new(Position_LocSource)
+ *p = x
+ return p
+}
+
+func (x Position_LocSource) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Position_LocSource) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_mesh_proto_enumTypes[5].Descriptor()
+}
+
+func (Position_LocSource) Type() protoreflect.EnumType {
+ return &file_meshtastic_mesh_proto_enumTypes[5]
+}
+
+func (x Position_LocSource) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Position_LocSource.Descriptor instead.
+func (Position_LocSource) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{0, 0}
+}
+
+// How the altitude was acquired: manual, GPS int/ext, etc
+// Default: same as location_source if present
+type Position_AltSource int32
+
+const (
+ // TODO: REPLACE
+ Position_ALT_UNSET Position_AltSource = 0
+ // TODO: REPLACE
+ Position_ALT_MANUAL Position_AltSource = 1
+ // TODO: REPLACE
+ Position_ALT_INTERNAL Position_AltSource = 2
+ // TODO: REPLACE
+ Position_ALT_EXTERNAL Position_AltSource = 3
+ // TODO: REPLACE
+ Position_ALT_BAROMETRIC Position_AltSource = 4
+)
+
+// Enum value maps for Position_AltSource.
+var (
+ Position_AltSource_name = map[int32]string{
+ 0: "ALT_UNSET",
+ 1: "ALT_MANUAL",
+ 2: "ALT_INTERNAL",
+ 3: "ALT_EXTERNAL",
+ 4: "ALT_BAROMETRIC",
+ }
+ Position_AltSource_value = map[string]int32{
+ "ALT_UNSET": 0,
+ "ALT_MANUAL": 1,
+ "ALT_INTERNAL": 2,
+ "ALT_EXTERNAL": 3,
+ "ALT_BAROMETRIC": 4,
+ }
+)
+
+func (x Position_AltSource) Enum() *Position_AltSource {
+ p := new(Position_AltSource)
+ *p = x
+ return p
+}
+
+func (x Position_AltSource) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Position_AltSource) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_mesh_proto_enumTypes[6].Descriptor()
+}
+
+func (Position_AltSource) Type() protoreflect.EnumType {
+ return &file_meshtastic_mesh_proto_enumTypes[6]
+}
+
+func (x Position_AltSource) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Position_AltSource.Descriptor instead.
+func (Position_AltSource) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{0, 1}
+}
+
+// A failure in delivering a message (usually used for routing control messages, but might be provided in addition to ack.fail_id to provide
+// details on the type of failure).
+type Routing_Error int32
+
+const (
+ // This message is not a failure
+ Routing_NONE Routing_Error = 0
+ // Our node doesn't have a route to the requested destination anymore.
+ Routing_NO_ROUTE Routing_Error = 1
+ // We received a nak while trying to forward on your behalf
+ Routing_GOT_NAK Routing_Error = 2
+ // TODO: REPLACE
+ Routing_TIMEOUT Routing_Error = 3
+ // No suitable interface could be found for delivering this packet
+ Routing_NO_INTERFACE Routing_Error = 4
+ // We reached the max retransmission count (typically for naive flood routing)
+ Routing_MAX_RETRANSMIT Routing_Error = 5
+ // No suitable channel was found for sending this packet (i.e. was requested channel index disabled?)
+ Routing_NO_CHANNEL Routing_Error = 6
+ // The packet was too big for sending (exceeds interface MTU after encoding)
+ Routing_TOO_LARGE Routing_Error = 7
+ // The request had want_response set, the request reached the destination node, but no service on that node wants to send a response
+ // (possibly due to bad channel permissions)
+ Routing_NO_RESPONSE Routing_Error = 8
+ // Cannot send currently because duty cycle regulations will be violated.
+ Routing_DUTY_CYCLE_LIMIT Routing_Error = 9
+ // The application layer service on the remote node received your request, but considered your request somehow invalid
+ Routing_BAD_REQUEST Routing_Error = 32
+ // The application layer service on the remote node received your request, but considered your request not authorized
+ // (i.e you did not send the request on the required bound channel)
+ Routing_NOT_AUTHORIZED Routing_Error = 33
+ // The client specified a PKI transport, but the node was unable to send the packet using PKI (and did not send the message at all)
+ Routing_PKI_FAILED Routing_Error = 34
+ // The receiving node does not have a Public Key to decode with
+ Routing_PKI_UNKNOWN_PUBKEY Routing_Error = 35
+ // Admin packet otherwise checks out, but uses a bogus or expired session key
+ Routing_ADMIN_BAD_SESSION_KEY Routing_Error = 36
+ // Admin packet sent using PKC, but not from a public key on the admin key list
+ Routing_ADMIN_PUBLIC_KEY_UNAUTHORIZED Routing_Error = 37
+ // Airtime fairness rate limit exceeded for a packet
+ // This typically enforced per portnum and is used to prevent a single node from monopolizing airtime
+ Routing_RATE_LIMIT_EXCEEDED Routing_Error = 38
+ // PKI encryption failed, due to no public key for the remote node
+ // This is different from PKI_UNKNOWN_PUBKEY which indicates a failure upon receiving a packet
+ Routing_PKI_SEND_FAIL_PUBLIC_KEY Routing_Error = 39
+)
+
+// Enum value maps for Routing_Error.
+var (
+ Routing_Error_name = map[int32]string{
+ 0: "NONE",
+ 1: "NO_ROUTE",
+ 2: "GOT_NAK",
+ 3: "TIMEOUT",
+ 4: "NO_INTERFACE",
+ 5: "MAX_RETRANSMIT",
+ 6: "NO_CHANNEL",
+ 7: "TOO_LARGE",
+ 8: "NO_RESPONSE",
+ 9: "DUTY_CYCLE_LIMIT",
+ 32: "BAD_REQUEST",
+ 33: "NOT_AUTHORIZED",
+ 34: "PKI_FAILED",
+ 35: "PKI_UNKNOWN_PUBKEY",
+ 36: "ADMIN_BAD_SESSION_KEY",
+ 37: "ADMIN_PUBLIC_KEY_UNAUTHORIZED",
+ 38: "RATE_LIMIT_EXCEEDED",
+ 39: "PKI_SEND_FAIL_PUBLIC_KEY",
+ }
+ Routing_Error_value = map[string]int32{
+ "NONE": 0,
+ "NO_ROUTE": 1,
+ "GOT_NAK": 2,
+ "TIMEOUT": 3,
+ "NO_INTERFACE": 4,
+ "MAX_RETRANSMIT": 5,
+ "NO_CHANNEL": 6,
+ "TOO_LARGE": 7,
+ "NO_RESPONSE": 8,
+ "DUTY_CYCLE_LIMIT": 9,
+ "BAD_REQUEST": 32,
+ "NOT_AUTHORIZED": 33,
+ "PKI_FAILED": 34,
+ "PKI_UNKNOWN_PUBKEY": 35,
+ "ADMIN_BAD_SESSION_KEY": 36,
+ "ADMIN_PUBLIC_KEY_UNAUTHORIZED": 37,
+ "RATE_LIMIT_EXCEEDED": 38,
+ "PKI_SEND_FAIL_PUBLIC_KEY": 39,
+ }
+)
+
+func (x Routing_Error) Enum() *Routing_Error {
+ p := new(Routing_Error)
+ *p = x
+ return p
+}
+
+func (x Routing_Error) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (Routing_Error) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_mesh_proto_enumTypes[7].Descriptor()
+}
+
+func (Routing_Error) Type() protoreflect.EnumType {
+ return &file_meshtastic_mesh_proto_enumTypes[7]
+}
+
+func (x Routing_Error) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use Routing_Error.Descriptor instead.
+func (Routing_Error) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{3, 0}
+}
+
+// Enum of message types
+type StoreForwardPlusPlus_SFPPMessageType int32
+
+const (
+ // Send an announcement of the canonical tip of a chain
+ StoreForwardPlusPlus_CANON_ANNOUNCE StoreForwardPlusPlus_SFPPMessageType = 0
+ // Query whether a specific link is on the chain
+ StoreForwardPlusPlus_CHAIN_QUERY StoreForwardPlusPlus_SFPPMessageType = 1
+ // Request the next link in the chain
+ StoreForwardPlusPlus_LINK_REQUEST StoreForwardPlusPlus_SFPPMessageType = 3
+ // Provide a link to add to the chain
+ StoreForwardPlusPlus_LINK_PROVIDE StoreForwardPlusPlus_SFPPMessageType = 4
+ // If we must fragment, send the first half
+ StoreForwardPlusPlus_LINK_PROVIDE_FIRSTHALF StoreForwardPlusPlus_SFPPMessageType = 5
+ // If we must fragment, send the second half
+ StoreForwardPlusPlus_LINK_PROVIDE_SECONDHALF StoreForwardPlusPlus_SFPPMessageType = 6
+)
+
+// Enum value maps for StoreForwardPlusPlus_SFPPMessageType.
+var (
+ StoreForwardPlusPlus_SFPPMessageType_name = map[int32]string{
+ 0: "CANON_ANNOUNCE",
+ 1: "CHAIN_QUERY",
+ 3: "LINK_REQUEST",
+ 4: "LINK_PROVIDE",
+ 5: "LINK_PROVIDE_FIRSTHALF",
+ 6: "LINK_PROVIDE_SECONDHALF",
+ }
+ StoreForwardPlusPlus_SFPPMessageType_value = map[string]int32{
+ "CANON_ANNOUNCE": 0,
+ "CHAIN_QUERY": 1,
+ "LINK_REQUEST": 3,
+ "LINK_PROVIDE": 4,
+ "LINK_PROVIDE_FIRSTHALF": 5,
+ "LINK_PROVIDE_SECONDHALF": 6,
+ }
+)
+
+func (x StoreForwardPlusPlus_SFPPMessageType) Enum() *StoreForwardPlusPlus_SFPPMessageType {
+ p := new(StoreForwardPlusPlus_SFPPMessageType)
+ *p = x
+ return p
+}
+
+func (x StoreForwardPlusPlus_SFPPMessageType) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (StoreForwardPlusPlus_SFPPMessageType) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_mesh_proto_enumTypes[8].Descriptor()
+}
+
+func (StoreForwardPlusPlus_SFPPMessageType) Type() protoreflect.EnumType {
+ return &file_meshtastic_mesh_proto_enumTypes[8]
+}
+
+func (x StoreForwardPlusPlus_SFPPMessageType) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use StoreForwardPlusPlus_SFPPMessageType.Descriptor instead.
+func (StoreForwardPlusPlus_SFPPMessageType) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{6, 0}
+}
+
+// The priority of this message for sending.
+// Higher priorities are sent first (when managing the transmit queue).
+// This field is never sent over the air, it is only used internally inside of a local device node.
+// API clients (either on the local node or connected directly to the node)
+// can set this parameter if necessary.
+// (values must be <= 127 to keep protobuf field to one byte in size.
+// Detailed background on this field:
+// I noticed a funny side effect of lora being so slow: Usually when making
+// a protocol there isn’t much need to use message priority to change the order
+// of transmission (because interfaces are fairly fast).
+// But for lora where packets can take a few seconds each, it is very important
+// to make sure that critical packets are sent ASAP.
+// In the case of meshtastic that means we want to send protocol acks as soon as possible
+// (to prevent unneeded retransmissions), we want routing messages to be sent next,
+// then messages marked as reliable and finally 'background' packets like periodic position updates.
+// So I bit the bullet and implemented a new (internal - not sent over the air)
+// field in MeshPacket called 'priority'.
+// And the transmission queue in the router object is now a priority queue.
+type MeshPacket_Priority int32
+
+const (
+ // Treated as Priority.DEFAULT
+ MeshPacket_UNSET MeshPacket_Priority = 0
+ // TODO: REPLACE
+ MeshPacket_MIN MeshPacket_Priority = 1
+ // Background position updates are sent with very low priority -
+ // if the link is super congested they might not go out at all
+ MeshPacket_BACKGROUND MeshPacket_Priority = 10
+ // This priority is used for most messages that don't have a priority set
+ MeshPacket_DEFAULT MeshPacket_Priority = 64
+ // If priority is unset but the message is marked as want_ack,
+ // assume it is important and use a slightly higher priority
+ MeshPacket_RELIABLE MeshPacket_Priority = 70
+ // If priority is unset but the packet is a response to a request, we want it to get there relatively quickly.
+ // Furthermore, responses stop relaying packets directed to a node early.
+ MeshPacket_RESPONSE MeshPacket_Priority = 80
+ // Higher priority for specific message types (portnums) to distinguish between other reliable packets.
+ MeshPacket_HIGH MeshPacket_Priority = 100
+ // Higher priority alert message used for critical alerts which take priority over other reliable packets.
+ MeshPacket_ALERT MeshPacket_Priority = 110
+ // Ack/naks are sent with very high priority to ensure that retransmission
+ // stops as soon as possible
+ MeshPacket_ACK MeshPacket_Priority = 120
+ // TODO: REPLACE
+ MeshPacket_MAX MeshPacket_Priority = 127
+)
+
+// Enum value maps for MeshPacket_Priority.
+var (
+ MeshPacket_Priority_name = map[int32]string{
+ 0: "UNSET",
+ 1: "MIN",
+ 10: "BACKGROUND",
+ 64: "DEFAULT",
+ 70: "RELIABLE",
+ 80: "RESPONSE",
+ 100: "HIGH",
+ 110: "ALERT",
+ 120: "ACK",
+ 127: "MAX",
+ }
+ MeshPacket_Priority_value = map[string]int32{
+ "UNSET": 0,
+ "MIN": 1,
+ "BACKGROUND": 10,
+ "DEFAULT": 64,
+ "RELIABLE": 70,
+ "RESPONSE": 80,
+ "HIGH": 100,
+ "ALERT": 110,
+ "ACK": 120,
+ "MAX": 127,
+ }
+)
+
+func (x MeshPacket_Priority) Enum() *MeshPacket_Priority {
+ p := new(MeshPacket_Priority)
+ *p = x
+ return p
+}
+
+func (x MeshPacket_Priority) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (MeshPacket_Priority) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_mesh_proto_enumTypes[9].Descriptor()
+}
+
+func (MeshPacket_Priority) Type() protoreflect.EnumType {
+ return &file_meshtastic_mesh_proto_enumTypes[9]
+}
+
+func (x MeshPacket_Priority) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use MeshPacket_Priority.Descriptor instead.
+func (MeshPacket_Priority) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{10, 0}
+}
+
+// Identify if this is a delayed packet
+type MeshPacket_Delayed int32
+
+const (
+ // If unset, the message is being sent in real time.
+ MeshPacket_NO_DELAY MeshPacket_Delayed = 0
+ // The message is delayed and was originally a broadcast
+ MeshPacket_DELAYED_BROADCAST MeshPacket_Delayed = 1
+ // The message is delayed and was originally a direct message
+ MeshPacket_DELAYED_DIRECT MeshPacket_Delayed = 2
+)
+
+// Enum value maps for MeshPacket_Delayed.
+var (
+ MeshPacket_Delayed_name = map[int32]string{
+ 0: "NO_DELAY",
+ 1: "DELAYED_BROADCAST",
+ 2: "DELAYED_DIRECT",
+ }
+ MeshPacket_Delayed_value = map[string]int32{
+ "NO_DELAY": 0,
+ "DELAYED_BROADCAST": 1,
+ "DELAYED_DIRECT": 2,
+ }
+)
+
+func (x MeshPacket_Delayed) Enum() *MeshPacket_Delayed {
+ p := new(MeshPacket_Delayed)
+ *p = x
+ return p
+}
+
+func (x MeshPacket_Delayed) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (MeshPacket_Delayed) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_mesh_proto_enumTypes[10].Descriptor()
+}
+
+func (MeshPacket_Delayed) Type() protoreflect.EnumType {
+ return &file_meshtastic_mesh_proto_enumTypes[10]
+}
+
+func (x MeshPacket_Delayed) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use MeshPacket_Delayed.Descriptor instead.
+func (MeshPacket_Delayed) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{10, 1}
+}
+
+// Enum to identify which transport mechanism this packet arrived over
+type MeshPacket_TransportMechanism int32
+
+const (
+ // The default case is that the node generated a packet itself
+ MeshPacket_TRANSPORT_INTERNAL MeshPacket_TransportMechanism = 0
+ // Arrived via the primary LoRa radio
+ MeshPacket_TRANSPORT_LORA MeshPacket_TransportMechanism = 1
+ // Arrived via a secondary LoRa radio
+ MeshPacket_TRANSPORT_LORA_ALT1 MeshPacket_TransportMechanism = 2
+ // Arrived via a tertiary LoRa radio
+ MeshPacket_TRANSPORT_LORA_ALT2 MeshPacket_TransportMechanism = 3
+ // Arrived via a quaternary LoRa radio
+ MeshPacket_TRANSPORT_LORA_ALT3 MeshPacket_TransportMechanism = 4
+ // Arrived via an MQTT connection
+ MeshPacket_TRANSPORT_MQTT MeshPacket_TransportMechanism = 5
+ // Arrived via Multicast UDP
+ MeshPacket_TRANSPORT_MULTICAST_UDP MeshPacket_TransportMechanism = 6
+ // Arrived via API connection
+ MeshPacket_TRANSPORT_API MeshPacket_TransportMechanism = 7
+)
+
+// Enum value maps for MeshPacket_TransportMechanism.
+var (
+ MeshPacket_TransportMechanism_name = map[int32]string{
+ 0: "TRANSPORT_INTERNAL",
+ 1: "TRANSPORT_LORA",
+ 2: "TRANSPORT_LORA_ALT1",
+ 3: "TRANSPORT_LORA_ALT2",
+ 4: "TRANSPORT_LORA_ALT3",
+ 5: "TRANSPORT_MQTT",
+ 6: "TRANSPORT_MULTICAST_UDP",
+ 7: "TRANSPORT_API",
+ }
+ MeshPacket_TransportMechanism_value = map[string]int32{
+ "TRANSPORT_INTERNAL": 0,
+ "TRANSPORT_LORA": 1,
+ "TRANSPORT_LORA_ALT1": 2,
+ "TRANSPORT_LORA_ALT2": 3,
+ "TRANSPORT_LORA_ALT3": 4,
+ "TRANSPORT_MQTT": 5,
+ "TRANSPORT_MULTICAST_UDP": 6,
+ "TRANSPORT_API": 7,
+ }
+)
+
+func (x MeshPacket_TransportMechanism) Enum() *MeshPacket_TransportMechanism {
+ p := new(MeshPacket_TransportMechanism)
+ *p = x
+ return p
+}
+
+func (x MeshPacket_TransportMechanism) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (MeshPacket_TransportMechanism) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_mesh_proto_enumTypes[11].Descriptor()
+}
+
+func (MeshPacket_TransportMechanism) Type() protoreflect.EnumType {
+ return &file_meshtastic_mesh_proto_enumTypes[11]
+}
+
+func (x MeshPacket_TransportMechanism) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use MeshPacket_TransportMechanism.Descriptor instead.
+func (MeshPacket_TransportMechanism) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{10, 2}
+}
+
+// Log levels, chosen to match python logging conventions.
+type LogRecord_Level int32
+
+const (
+ // Log levels, chosen to match python logging conventions.
+ LogRecord_UNSET LogRecord_Level = 0
+ // Log levels, chosen to match python logging conventions.
+ LogRecord_CRITICAL LogRecord_Level = 50
+ // Log levels, chosen to match python logging conventions.
+ LogRecord_ERROR LogRecord_Level = 40
+ // Log levels, chosen to match python logging conventions.
+ LogRecord_WARNING LogRecord_Level = 30
+ // Log levels, chosen to match python logging conventions.
+ LogRecord_INFO LogRecord_Level = 20
+ // Log levels, chosen to match python logging conventions.
+ LogRecord_DEBUG LogRecord_Level = 10
+ // Log levels, chosen to match python logging conventions.
+ LogRecord_TRACE LogRecord_Level = 5
+)
+
+// Enum value maps for LogRecord_Level.
+var (
+ LogRecord_Level_name = map[int32]string{
+ 0: "UNSET",
+ 50: "CRITICAL",
+ 40: "ERROR",
+ 30: "WARNING",
+ 20: "INFO",
+ 10: "DEBUG",
+ 5: "TRACE",
+ }
+ LogRecord_Level_value = map[string]int32{
+ "UNSET": 0,
+ "CRITICAL": 50,
+ "ERROR": 40,
+ "WARNING": 30,
+ "INFO": 20,
+ "DEBUG": 10,
+ "TRACE": 5,
+ }
+)
+
+func (x LogRecord_Level) Enum() *LogRecord_Level {
+ p := new(LogRecord_Level)
+ *p = x
+ return p
+}
+
+func (x LogRecord_Level) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (LogRecord_Level) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_mesh_proto_enumTypes[12].Descriptor()
+}
+
+func (LogRecord_Level) Type() protoreflect.EnumType {
+ return &file_meshtastic_mesh_proto_enumTypes[12]
+}
+
+func (x LogRecord_Level) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use LogRecord_Level.Descriptor instead.
+func (LogRecord_Level) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{13, 0}
+}
+
+// A GPS Position
+type Position struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The new preferred location encoding, multiply by 1e-7 to get degrees
+ // in floating point
+ LatitudeI *int32 `protobuf:"fixed32,1,opt,name=latitude_i,json=latitudeI,proto3,oneof" json:"latitudeI,omitempty"`
+ // TODO: REPLACE
+ LongitudeI *int32 `protobuf:"fixed32,2,opt,name=longitude_i,json=longitudeI,proto3,oneof" json:"longitudeI,omitempty"`
+ // In meters above MSL (but see issue #359)
+ Altitude *int32 `protobuf:"varint,3,opt,name=altitude,proto3,oneof" json:"altitude,omitempty"`
+ // This is usually not sent over the mesh (to save space), but it is sent
+ // from the phone so that the local device can set its time if it is sent over
+ // the mesh (because there are devices on the mesh without GPS or RTC).
+ // seconds since 1970
+ Time uint32 `protobuf:"fixed32,4,opt,name=time,proto3" json:"time,omitempty"`
+ // TODO: REPLACE
+ LocationSource Position_LocSource `protobuf:"varint,5,opt,name=location_source,json=locationSource,proto3,enum=meshtastic.Position_LocSource" json:"locationSource,omitempty"`
+ // TODO: REPLACE
+ AltitudeSource Position_AltSource `protobuf:"varint,6,opt,name=altitude_source,json=altitudeSource,proto3,enum=meshtastic.Position_AltSource" json:"altitudeSource,omitempty"`
+ // Positional timestamp (actual timestamp of GPS solution) in integer epoch seconds
+ Timestamp uint32 `protobuf:"fixed32,7,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+ // Pos. timestamp milliseconds adjustment (rarely available or required)
+ TimestampMillisAdjust int32 `protobuf:"varint,8,opt,name=timestamp_millis_adjust,json=timestampMillisAdjust,proto3" json:"timestampMillisAdjust,omitempty"`
+ // HAE altitude in meters - can be used instead of MSL altitude
+ AltitudeHae *int32 `protobuf:"zigzag32,9,opt,name=altitude_hae,json=altitudeHae,proto3,oneof" json:"altitudeHae,omitempty"`
+ // Geoidal separation in meters
+ AltitudeGeoidalSeparation *int32 `protobuf:"zigzag32,10,opt,name=altitude_geoidal_separation,json=altitudeGeoidalSeparation,proto3,oneof" json:"altitudeGeoidalSeparation,omitempty"`
+ // Horizontal, Vertical and Position Dilution of Precision, in 1/100 units
+ // - PDOP is sufficient for most cases
+ // - for higher precision scenarios, HDOP and VDOP can be used instead,
+ // in which case PDOP becomes redundant (PDOP=sqrt(HDOP^2 + VDOP^2))
+ //
+ // TODO: REMOVE/INTEGRATE
+ PDOP uint32 `protobuf:"varint,11,opt,name=PDOP,proto3" json:"PDOP,omitempty"`
+ // TODO: REPLACE
+ HDOP uint32 `protobuf:"varint,12,opt,name=HDOP,proto3" json:"HDOP,omitempty"`
+ // TODO: REPLACE
+ VDOP uint32 `protobuf:"varint,13,opt,name=VDOP,proto3" json:"VDOP,omitempty"`
+ // GPS accuracy (a hardware specific constant) in mm
+ //
+ // multiplied with DOP to calculate positional accuracy
+ //
+ // Default: "'bout three meters-ish" :)
+ GpsAccuracy uint32 `protobuf:"varint,14,opt,name=gps_accuracy,json=gpsAccuracy,proto3" json:"gpsAccuracy,omitempty"`
+ // Ground speed in m/s and True North TRACK in 1/100 degrees
+ // Clarification of terms:
+ // - "track" is the direction of motion (measured in horizontal plane)
+ // - "heading" is where the fuselage points (measured in horizontal plane)
+ // - "yaw" indicates a relative rotation about the vertical axis
+ // TODO: REMOVE/INTEGRATE
+ GroundSpeed *uint32 `protobuf:"varint,15,opt,name=ground_speed,json=groundSpeed,proto3,oneof" json:"groundSpeed,omitempty"`
+ // TODO: REPLACE
+ GroundTrack *uint32 `protobuf:"varint,16,opt,name=ground_track,json=groundTrack,proto3,oneof" json:"groundTrack,omitempty"`
+ // GPS fix quality (from NMEA GxGGA statement or similar)
+ FixQuality uint32 `protobuf:"varint,17,opt,name=fix_quality,json=fixQuality,proto3" json:"fixQuality,omitempty"`
+ // GPS fix type 2D/3D (from NMEA GxGSA statement)
+ FixType uint32 `protobuf:"varint,18,opt,name=fix_type,json=fixType,proto3" json:"fixType,omitempty"`
+ // GPS "Satellites in View" number
+ SatsInView uint32 `protobuf:"varint,19,opt,name=sats_in_view,json=satsInView,proto3" json:"satsInView,omitempty"`
+ // Sensor ID - in case multiple positioning sensors are being used
+ SensorId uint32 `protobuf:"varint,20,opt,name=sensor_id,json=sensorId,proto3" json:"sensorId,omitempty"`
+ // Estimated/expected time (in seconds) until next update:
+ // - if we update at fixed intervals of X seconds, use X
+ // - if we update at dynamic intervals (based on relative movement etc),
+ // but "AT LEAST every Y seconds", use Y
+ NextUpdate uint32 `protobuf:"varint,21,opt,name=next_update,json=nextUpdate,proto3" json:"nextUpdate,omitempty"`
+ // A sequence number, incremented with each Position message to help
+ //
+ // detect lost updates if needed
+ SeqNumber uint32 `protobuf:"varint,22,opt,name=seq_number,json=seqNumber,proto3" json:"seqNumber,omitempty"`
+ // Indicates the bits of precision set by the sending node
+ PrecisionBits uint32 `protobuf:"varint,23,opt,name=precision_bits,json=precisionBits,proto3" json:"precisionBits,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Position) Reset() {
+ *x = Position{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Position) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Position) ProtoMessage() {}
+
+func (x *Position) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Position.ProtoReflect.Descriptor instead.
+func (*Position) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *Position) GetLatitudeI() int32 {
+ if x != nil && x.LatitudeI != nil {
+ return *x.LatitudeI
+ }
+ return 0
+}
+
+func (x *Position) GetLongitudeI() int32 {
+ if x != nil && x.LongitudeI != nil {
+ return *x.LongitudeI
+ }
+ return 0
+}
+
+func (x *Position) GetAltitude() int32 {
+ if x != nil && x.Altitude != nil {
+ return *x.Altitude
+ }
+ return 0
+}
+
+func (x *Position) GetTime() uint32 {
+ if x != nil {
+ return x.Time
+ }
+ return 0
+}
+
+func (x *Position) GetLocationSource() Position_LocSource {
+ if x != nil {
+ return x.LocationSource
+ }
+ return Position_LOC_UNSET
+}
+
+func (x *Position) GetAltitudeSource() Position_AltSource {
+ if x != nil {
+ return x.AltitudeSource
+ }
+ return Position_ALT_UNSET
+}
+
+func (x *Position) GetTimestamp() uint32 {
+ if x != nil {
+ return x.Timestamp
+ }
+ return 0
+}
+
+func (x *Position) GetTimestampMillisAdjust() int32 {
+ if x != nil {
+ return x.TimestampMillisAdjust
+ }
+ return 0
+}
+
+func (x *Position) GetAltitudeHae() int32 {
+ if x != nil && x.AltitudeHae != nil {
+ return *x.AltitudeHae
+ }
+ return 0
+}
+
+func (x *Position) GetAltitudeGeoidalSeparation() int32 {
+ if x != nil && x.AltitudeGeoidalSeparation != nil {
+ return *x.AltitudeGeoidalSeparation
+ }
+ return 0
+}
+
+func (x *Position) GetPDOP() uint32 {
+ if x != nil {
+ return x.PDOP
+ }
+ return 0
+}
+
+func (x *Position) GetHDOP() uint32 {
+ if x != nil {
+ return x.HDOP
+ }
+ return 0
+}
+
+func (x *Position) GetVDOP() uint32 {
+ if x != nil {
+ return x.VDOP
+ }
+ return 0
+}
+
+func (x *Position) GetGpsAccuracy() uint32 {
+ if x != nil {
+ return x.GpsAccuracy
+ }
+ return 0
+}
+
+func (x *Position) GetGroundSpeed() uint32 {
+ if x != nil && x.GroundSpeed != nil {
+ return *x.GroundSpeed
+ }
+ return 0
+}
+
+func (x *Position) GetGroundTrack() uint32 {
+ if x != nil && x.GroundTrack != nil {
+ return *x.GroundTrack
+ }
+ return 0
+}
+
+func (x *Position) GetFixQuality() uint32 {
+ if x != nil {
+ return x.FixQuality
+ }
+ return 0
+}
+
+func (x *Position) GetFixType() uint32 {
+ if x != nil {
+ return x.FixType
+ }
+ return 0
+}
+
+func (x *Position) GetSatsInView() uint32 {
+ if x != nil {
+ return x.SatsInView
+ }
+ return 0
+}
+
+func (x *Position) GetSensorId() uint32 {
+ if x != nil {
+ return x.SensorId
+ }
+ return 0
+}
+
+func (x *Position) GetNextUpdate() uint32 {
+ if x != nil {
+ return x.NextUpdate
+ }
+ return 0
+}
+
+func (x *Position) GetSeqNumber() uint32 {
+ if x != nil {
+ return x.SeqNumber
+ }
+ return 0
+}
+
+func (x *Position) GetPrecisionBits() uint32 {
+ if x != nil {
+ return x.PrecisionBits
+ }
+ return 0
+}
+
+// Broadcast when a newly powered mesh node wants to find a node num it can use
+// Sent from the phone over bluetooth to set the user id for the owner of this node.
+// Also sent from nodes to each other when a new node signs on (so all clients can have this info)
+// The algorithm is as follows:
+// when a node starts up, it broadcasts their user and the normal flow is for all
+// other nodes to reply with their User as well (so the new node can build its nodedb)
+// If a node ever receives a User (not just the first broadcast) message where
+// the sender node number equals our node number, that indicates a collision has
+// occurred and the following steps should happen:
+// If the receiving node (that was already in the mesh)'s macaddr is LOWER than the
+// new User who just tried to sign in: it gets to keep its nodenum.
+// We send a broadcast message of OUR User (we use a broadcast so that the other node can
+// receive our message, considering we have the same id - it also serves to let
+// observers correct their nodedb) - this case is rare so it should be okay.
+// If any node receives a User where the macaddr is GTE than their local macaddr,
+// they have been vetoed and should pick a new random nodenum (filtering against
+// whatever it knows about the nodedb) and rebroadcast their User.
+// A few nodenums are reserved and will never be requested:
+// 0xff - broadcast
+// 0 through 3 - for future use
+type User struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // A globally unique ID string for this user.
+ // In the case of Signal that would mean +16504442323, for the default macaddr derived id it would be !<8 hexidecimal bytes>.
+ // Note: app developers are encouraged to also use the following standard
+ // node IDs "^all" (for broadcast), "^local" (for the locally connected node)
+ Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+ // A full name for this user, i.e. "Kevin Hester"
+ LongName string `protobuf:"bytes,2,opt,name=long_name,json=longName,proto3" json:"longName,omitempty"`
+ // A VERY short name, ideally two characters.
+ // Suitable for a tiny OLED screen
+ ShortName string `protobuf:"bytes,3,opt,name=short_name,json=shortName,proto3" json:"shortName,omitempty"`
+ // Deprecated in Meshtastic 2.1.x
+ // This is the addr of the radio.
+ // Not populated by the phone, but added by the esp32 when broadcasting
+ //
+ // Deprecated: Marked as deprecated in meshtastic/mesh.proto.
+ Macaddr []byte `protobuf:"bytes,4,opt,name=macaddr,proto3" json:"macaddr,omitempty"`
+ // 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.
+ HwModel HardwareModel `protobuf:"varint,5,opt,name=hw_model,json=hwModel,proto3,enum=meshtastic.HardwareModel" json:"hwModel,omitempty"`
+ // 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.
+ IsLicensed bool `protobuf:"varint,6,opt,name=is_licensed,json=isLicensed,proto3" json:"isLicensed,omitempty"`
+ // Indicates that the user's role in the mesh
+ Role Config_DeviceConfig_Role `protobuf:"varint,7,opt,name=role,proto3,enum=meshtastic.Config_DeviceConfig_Role" json:"role,omitempty"`
+ // 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.
+ PublicKey []byte `protobuf:"bytes,8,opt,name=public_key,json=publicKey,proto3" json:"publicKey,omitempty"`
+ // Whether or not the node can be messaged
+ IsUnmessagable *bool `protobuf:"varint,9,opt,name=is_unmessagable,json=isUnmessagable,proto3,oneof" json:"isUnmessagable,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *User) Reset() {
+ *x = User{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *User) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*User) ProtoMessage() {}
+
+func (x *User) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[1]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use User.ProtoReflect.Descriptor instead.
+func (*User) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *User) GetId() string {
+ if x != nil {
+ return x.Id
+ }
+ return ""
+}
+
+func (x *User) GetLongName() string {
+ if x != nil {
+ return x.LongName
+ }
+ return ""
+}
+
+func (x *User) GetShortName() string {
+ if x != nil {
+ return x.ShortName
+ }
+ return ""
+}
+
+// Deprecated: Marked as deprecated in meshtastic/mesh.proto.
+func (x *User) GetMacaddr() []byte {
+ if x != nil {
+ return x.Macaddr
+ }
+ return nil
+}
+
+func (x *User) GetHwModel() HardwareModel {
+ if x != nil {
+ return x.HwModel
+ }
+ return HardwareModel_UNSET
+}
+
+func (x *User) GetIsLicensed() bool {
+ if x != nil {
+ return x.IsLicensed
+ }
+ return false
+}
+
+func (x *User) GetRole() Config_DeviceConfig_Role {
+ if x != nil {
+ return x.Role
+ }
+ return Config_DeviceConfig_CLIENT
+}
+
+func (x *User) GetPublicKey() []byte {
+ if x != nil {
+ return x.PublicKey
+ }
+ return nil
+}
+
+func (x *User) GetIsUnmessagable() bool {
+ if x != nil && x.IsUnmessagable != nil {
+ return *x.IsUnmessagable
+ }
+ return false
+}
+
+// A message used in a traceroute
+type RouteDiscovery struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The list of nodenums this packet has visited so far to the destination.
+ Route []uint32 `protobuf:"fixed32,1,rep,packed,name=route,proto3" json:"route,omitempty"`
+ // The list of SNRs (in dB, scaled by 4) in the route towards the destination.
+ SnrTowards []int32 `protobuf:"varint,2,rep,packed,name=snr_towards,json=snrTowards,proto3" json:"snrTowards,omitempty"`
+ // The list of nodenums the packet has visited on the way back from the destination.
+ RouteBack []uint32 `protobuf:"fixed32,3,rep,packed,name=route_back,json=routeBack,proto3" json:"routeBack,omitempty"`
+ // The list of SNRs (in dB, scaled by 4) in the route back from the destination.
+ SnrBack []int32 `protobuf:"varint,4,rep,packed,name=snr_back,json=snrBack,proto3" json:"snrBack,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *RouteDiscovery) Reset() {
+ *x = RouteDiscovery{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *RouteDiscovery) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RouteDiscovery) ProtoMessage() {}
+
+func (x *RouteDiscovery) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[2]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use RouteDiscovery.ProtoReflect.Descriptor instead.
+func (*RouteDiscovery) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *RouteDiscovery) GetRoute() []uint32 {
+ if x != nil {
+ return x.Route
+ }
+ return nil
+}
+
+func (x *RouteDiscovery) GetSnrTowards() []int32 {
+ if x != nil {
+ return x.SnrTowards
+ }
+ return nil
+}
+
+func (x *RouteDiscovery) GetRouteBack() []uint32 {
+ if x != nil {
+ return x.RouteBack
+ }
+ return nil
+}
+
+func (x *RouteDiscovery) GetSnrBack() []int32 {
+ if x != nil {
+ return x.SnrBack
+ }
+ return nil
+}
+
+// A Routing control Data packet handled by the routing module
+type Routing struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Types that are valid to be assigned to Variant:
+ //
+ // *Routing_RouteRequest
+ // *Routing_RouteReply
+ // *Routing_ErrorReason
+ Variant isRouting_Variant `protobuf_oneof:"variant"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Routing) Reset() {
+ *x = Routing{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Routing) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Routing) ProtoMessage() {}
+
+func (x *Routing) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[3]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Routing.ProtoReflect.Descriptor instead.
+func (*Routing) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *Routing) GetVariant() isRouting_Variant {
+ if x != nil {
+ return x.Variant
+ }
+ return nil
+}
+
+func (x *Routing) GetRouteRequest() *RouteDiscovery {
+ if x != nil {
+ if x, ok := x.Variant.(*Routing_RouteRequest); ok {
+ return x.RouteRequest
+ }
+ }
+ return nil
+}
+
+func (x *Routing) GetRouteReply() *RouteDiscovery {
+ if x != nil {
+ if x, ok := x.Variant.(*Routing_RouteReply); ok {
+ return x.RouteReply
+ }
+ }
+ return nil
+}
+
+func (x *Routing) GetErrorReason() Routing_Error {
+ if x != nil {
+ if x, ok := x.Variant.(*Routing_ErrorReason); ok {
+ return x.ErrorReason
+ }
+ }
+ return Routing_NONE
+}
+
+type isRouting_Variant interface {
+ isRouting_Variant()
+}
+
+type Routing_RouteRequest struct {
+ // A route request going from the requester
+ RouteRequest *RouteDiscovery `protobuf:"bytes,1,opt,name=route_request,json=routeRequest,proto3,oneof"`
+}
+
+type Routing_RouteReply struct {
+ // A route reply
+ RouteReply *RouteDiscovery `protobuf:"bytes,2,opt,name=route_reply,json=routeReply,proto3,oneof"`
+}
+
+type Routing_ErrorReason struct {
+ // A failure in delivering a message (usually used for routing control messages, but might be provided
+ // in addition to ack.fail_id to provide details on the type of failure).
+ ErrorReason Routing_Error `protobuf:"varint,3,opt,name=error_reason,json=errorReason,proto3,enum=meshtastic.Routing_Error,oneof"`
+}
+
+func (*Routing_RouteRequest) isRouting_Variant() {}
+
+func (*Routing_RouteReply) isRouting_Variant() {}
+
+func (*Routing_ErrorReason) isRouting_Variant() {}
+
+// (Formerly called SubPacket)
+// The payload portion fo a packet, this is the actual bytes that are sent
+// inside a radio packet (because from/to are broken out by the comms library)
+type Data struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Formerly named typ and of type Type
+ Portnum PortNum `protobuf:"varint,1,opt,name=portnum,proto3,enum=meshtastic.PortNum" json:"portnum,omitempty"`
+ // TODO: REPLACE
+ Payload []byte `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"`
+ // Not normally used, but for testing a sender can request that recipient
+ // responds in kind (i.e. if it received a position, it should unicast back it's position).
+ // Note: that if you set this on a broadcast you will receive many replies.
+ WantResponse bool `protobuf:"varint,3,opt,name=want_response,json=wantResponse,proto3" json:"wantResponse,omitempty"`
+ // The address of the destination node.
+ // This field is is filled in by the mesh radio device software, application
+ // layer software should never need it.
+ // RouteDiscovery messages _must_ populate this.
+ // Other message types might need to if they are doing multihop routing.
+ Dest uint32 `protobuf:"fixed32,4,opt,name=dest,proto3" json:"dest,omitempty"`
+ // The address of the original sender for this message.
+ // This field should _only_ be populated for reliable multihop packets (to keep
+ // packets small).
+ Source uint32 `protobuf:"fixed32,5,opt,name=source,proto3" json:"source,omitempty"`
+ // Only used in routing or response messages.
+ // Indicates the original message ID that this message is reporting failure on. (formerly called original_id)
+ RequestId uint32 `protobuf:"fixed32,6,opt,name=request_id,json=requestId,proto3" json:"requestId,omitempty"`
+ // If set, this message is intened to be a reply to a previously sent message with the defined id.
+ ReplyId uint32 `protobuf:"fixed32,7,opt,name=reply_id,json=replyId,proto3" json:"replyId,omitempty"`
+ // Defaults to false. If true, then what is in the payload should be treated as an emoji like giving
+ // a message a heart or poop emoji.
+ Emoji uint32 `protobuf:"fixed32,8,opt,name=emoji,proto3" json:"emoji,omitempty"`
+ // Bitfield for extra flags. First use is to indicate that user approves the packet being uploaded to MQTT.
+ Bitfield *uint32 `protobuf:"varint,9,opt,name=bitfield,proto3,oneof" json:"bitfield,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Data) Reset() {
+ *x = Data{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Data) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Data) ProtoMessage() {}
+
+func (x *Data) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[4]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Data.ProtoReflect.Descriptor instead.
+func (*Data) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *Data) GetPortnum() PortNum {
+ if x != nil {
+ return x.Portnum
+ }
+ return PortNum_UNKNOWN_APP
+}
+
+func (x *Data) GetPayload() []byte {
+ if x != nil {
+ return x.Payload
+ }
+ return nil
+}
+
+func (x *Data) GetWantResponse() bool {
+ if x != nil {
+ return x.WantResponse
+ }
+ return false
+}
+
+func (x *Data) GetDest() uint32 {
+ if x != nil {
+ return x.Dest
+ }
+ return 0
+}
+
+func (x *Data) GetSource() uint32 {
+ if x != nil {
+ return x.Source
+ }
+ return 0
+}
+
+func (x *Data) GetRequestId() uint32 {
+ if x != nil {
+ return x.RequestId
+ }
+ return 0
+}
+
+func (x *Data) GetReplyId() uint32 {
+ if x != nil {
+ return x.ReplyId
+ }
+ return 0
+}
+
+func (x *Data) GetEmoji() uint32 {
+ if x != nil {
+ return x.Emoji
+ }
+ return 0
+}
+
+func (x *Data) GetBitfield() uint32 {
+ if x != nil && x.Bitfield != nil {
+ return *x.Bitfield
+ }
+ return 0
+}
+
+// The actual over-the-mesh message doing KeyVerification
+type KeyVerification struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // random value Selected by the requesting node
+ Nonce uint64 `protobuf:"varint,1,opt,name=nonce,proto3" json:"nonce,omitempty"`
+ // The final authoritative hash, only to be sent by NodeA at the end of the handshake
+ Hash1 []byte `protobuf:"bytes,2,opt,name=hash1,proto3" json:"hash1,omitempty"`
+ // The intermediary hash (actually derived from hash1),
+ // sent from NodeB to NodeA in response to the initial message.
+ Hash2 []byte `protobuf:"bytes,3,opt,name=hash2,proto3" json:"hash2,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *KeyVerification) Reset() {
+ *x = KeyVerification{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *KeyVerification) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*KeyVerification) ProtoMessage() {}
+
+func (x *KeyVerification) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[5]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use KeyVerification.ProtoReflect.Descriptor instead.
+func (*KeyVerification) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *KeyVerification) GetNonce() uint64 {
+ if x != nil {
+ return x.Nonce
+ }
+ return 0
+}
+
+func (x *KeyVerification) GetHash1() []byte {
+ if x != nil {
+ return x.Hash1
+ }
+ return nil
+}
+
+func (x *KeyVerification) GetHash2() []byte {
+ if x != nil {
+ return x.Hash2
+ }
+ return nil
+}
+
+// The actual over-the-mesh message doing store and forward++
+type StoreForwardPlusPlus struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Which message type is this
+ SfppMessageType StoreForwardPlusPlus_SFPPMessageType `protobuf:"varint,1,opt,name=sfpp_message_type,json=sfppMessageType,proto3,enum=meshtastic.StoreForwardPlusPlus_SFPPMessageType" json:"sfppMessageType,omitempty"`
+ // The hash of the specific message
+ MessageHash []byte `protobuf:"bytes,2,opt,name=message_hash,json=messageHash,proto3" json:"messageHash,omitempty"`
+ // The hash of a link on a chain
+ CommitHash []byte `protobuf:"bytes,3,opt,name=commit_hash,json=commitHash,proto3" json:"commitHash,omitempty"`
+ // the root hash of a chain
+ RootHash []byte `protobuf:"bytes,4,opt,name=root_hash,json=rootHash,proto3" json:"rootHash,omitempty"`
+ // The encrypted bytes from a message
+ Message []byte `protobuf:"bytes,5,opt,name=message,proto3" json:"message,omitempty"`
+ // Message ID of the contained message
+ EncapsulatedId uint32 `protobuf:"varint,6,opt,name=encapsulated_id,json=encapsulatedId,proto3" json:"encapsulatedId,omitempty"`
+ // Destination of the contained message
+ EncapsulatedTo uint32 `protobuf:"varint,7,opt,name=encapsulated_to,json=encapsulatedTo,proto3" json:"encapsulatedTo,omitempty"`
+ // Sender of the contained message
+ EncapsulatedFrom uint32 `protobuf:"varint,8,opt,name=encapsulated_from,json=encapsulatedFrom,proto3" json:"encapsulatedFrom,omitempty"`
+ // The receive time of the message in question
+ EncapsulatedRxtime uint32 `protobuf:"varint,9,opt,name=encapsulated_rxtime,json=encapsulatedRxtime,proto3" json:"encapsulatedRxtime,omitempty"`
+ // Used in a LINK_REQUEST to specify the message X spots back from head
+ ChainCount uint32 `protobuf:"varint,10,opt,name=chain_count,json=chainCount,proto3" json:"chainCount,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *StoreForwardPlusPlus) Reset() {
+ *x = StoreForwardPlusPlus{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *StoreForwardPlusPlus) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StoreForwardPlusPlus) ProtoMessage() {}
+
+func (x *StoreForwardPlusPlus) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[6]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use StoreForwardPlusPlus.ProtoReflect.Descriptor instead.
+func (*StoreForwardPlusPlus) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *StoreForwardPlusPlus) GetSfppMessageType() StoreForwardPlusPlus_SFPPMessageType {
+ if x != nil {
+ return x.SfppMessageType
+ }
+ return StoreForwardPlusPlus_CANON_ANNOUNCE
+}
+
+func (x *StoreForwardPlusPlus) GetMessageHash() []byte {
+ if x != nil {
+ return x.MessageHash
+ }
+ return nil
+}
+
+func (x *StoreForwardPlusPlus) GetCommitHash() []byte {
+ if x != nil {
+ return x.CommitHash
+ }
+ return nil
+}
+
+func (x *StoreForwardPlusPlus) GetRootHash() []byte {
+ if x != nil {
+ return x.RootHash
+ }
+ return nil
+}
+
+func (x *StoreForwardPlusPlus) GetMessage() []byte {
+ if x != nil {
+ return x.Message
+ }
+ return nil
+}
+
+func (x *StoreForwardPlusPlus) GetEncapsulatedId() uint32 {
+ if x != nil {
+ return x.EncapsulatedId
+ }
+ return 0
+}
+
+func (x *StoreForwardPlusPlus) GetEncapsulatedTo() uint32 {
+ if x != nil {
+ return x.EncapsulatedTo
+ }
+ return 0
+}
+
+func (x *StoreForwardPlusPlus) GetEncapsulatedFrom() uint32 {
+ if x != nil {
+ return x.EncapsulatedFrom
+ }
+ return 0
+}
+
+func (x *StoreForwardPlusPlus) GetEncapsulatedRxtime() uint32 {
+ if x != nil {
+ return x.EncapsulatedRxtime
+ }
+ return 0
+}
+
+func (x *StoreForwardPlusPlus) GetChainCount() uint32 {
+ if x != nil {
+ return x.ChainCount
+ }
+ return 0
+}
+
+// Waypoint message, used to share arbitrary locations across the mesh
+type Waypoint struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Id of the waypoint
+ Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
+ // latitude_i
+ LatitudeI *int32 `protobuf:"fixed32,2,opt,name=latitude_i,json=latitudeI,proto3,oneof" json:"latitudeI,omitempty"`
+ // longitude_i
+ LongitudeI *int32 `protobuf:"fixed32,3,opt,name=longitude_i,json=longitudeI,proto3,oneof" json:"longitudeI,omitempty"`
+ // Time the waypoint is to expire (epoch)
+ Expire uint32 `protobuf:"varint,4,opt,name=expire,proto3" json:"expire,omitempty"`
+ // If greater than zero, treat the value as a nodenum only allowing them to update the waypoint.
+ // If zero, the waypoint is open to be edited by any member of the mesh.
+ LockedTo uint32 `protobuf:"varint,5,opt,name=locked_to,json=lockedTo,proto3" json:"lockedTo,omitempty"`
+ // Name of the waypoint - max 30 chars
+ Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"`
+ // Description of the waypoint - max 100 chars
+ Description string `protobuf:"bytes,7,opt,name=description,proto3" json:"description,omitempty"`
+ // Designator icon for the waypoint in the form of a unicode emoji
+ Icon uint32 `protobuf:"fixed32,8,opt,name=icon,proto3" json:"icon,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Waypoint) Reset() {
+ *x = Waypoint{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Waypoint) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Waypoint) ProtoMessage() {}
+
+func (x *Waypoint) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[7]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Waypoint.ProtoReflect.Descriptor instead.
+func (*Waypoint) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *Waypoint) GetId() uint32 {
+ if x != nil {
+ return x.Id
+ }
+ return 0
+}
+
+func (x *Waypoint) GetLatitudeI() int32 {
+ if x != nil && x.LatitudeI != nil {
+ return *x.LatitudeI
+ }
+ return 0
+}
+
+func (x *Waypoint) GetLongitudeI() int32 {
+ if x != nil && x.LongitudeI != nil {
+ return *x.LongitudeI
+ }
+ return 0
+}
+
+func (x *Waypoint) GetExpire() uint32 {
+ if x != nil {
+ return x.Expire
+ }
+ return 0
+}
+
+func (x *Waypoint) GetLockedTo() uint32 {
+ if x != nil {
+ return x.LockedTo
+ }
+ return 0
+}
+
+func (x *Waypoint) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *Waypoint) GetDescription() string {
+ if x != nil {
+ return x.Description
+ }
+ return ""
+}
+
+func (x *Waypoint) GetIcon() uint32 {
+ if x != nil {
+ return x.Icon
+ }
+ return 0
+}
+
+// Message for node status
+type StatusMessage struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Status string `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *StatusMessage) Reset() {
+ *x = StatusMessage{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *StatusMessage) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StatusMessage) ProtoMessage() {}
+
+func (x *StatusMessage) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[8]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use StatusMessage.ProtoReflect.Descriptor instead.
+func (*StatusMessage) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *StatusMessage) GetStatus() string {
+ if x != nil {
+ return x.Status
+ }
+ return ""
+}
+
+// This message will be proxied over the PhoneAPI for the client to deliver to the MQTT server
+type MqttClientProxyMessage struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The MQTT topic this message will be sent /received on
+ Topic string `protobuf:"bytes,1,opt,name=topic,proto3" json:"topic,omitempty"`
+ // The actual service envelope payload or text for mqtt pub / sub
+ //
+ // Types that are valid to be assigned to PayloadVariant:
+ //
+ // *MqttClientProxyMessage_Data
+ // *MqttClientProxyMessage_Text
+ PayloadVariant isMqttClientProxyMessage_PayloadVariant `protobuf_oneof:"payload_variant"`
+ // Whether the message should be retained (or not)
+ Retained bool `protobuf:"varint,4,opt,name=retained,proto3" json:"retained,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *MqttClientProxyMessage) Reset() {
+ *x = MqttClientProxyMessage{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *MqttClientProxyMessage) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MqttClientProxyMessage) ProtoMessage() {}
+
+func (x *MqttClientProxyMessage) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[9]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use MqttClientProxyMessage.ProtoReflect.Descriptor instead.
+func (*MqttClientProxyMessage) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{9}
+}
+
+func (x *MqttClientProxyMessage) GetTopic() string {
+ if x != nil {
+ return x.Topic
+ }
+ return ""
+}
+
+func (x *MqttClientProxyMessage) GetPayloadVariant() isMqttClientProxyMessage_PayloadVariant {
+ if x != nil {
+ return x.PayloadVariant
+ }
+ return nil
+}
+
+func (x *MqttClientProxyMessage) GetData() []byte {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*MqttClientProxyMessage_Data); ok {
+ return x.Data
+ }
+ }
+ return nil
+}
+
+func (x *MqttClientProxyMessage) GetText() string {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*MqttClientProxyMessage_Text); ok {
+ return x.Text
+ }
+ }
+ return ""
+}
+
+func (x *MqttClientProxyMessage) GetRetained() bool {
+ if x != nil {
+ return x.Retained
+ }
+ return false
+}
+
+type isMqttClientProxyMessage_PayloadVariant interface {
+ isMqttClientProxyMessage_PayloadVariant()
+}
+
+type MqttClientProxyMessage_Data struct {
+ // Bytes
+ Data []byte `protobuf:"bytes,2,opt,name=data,proto3,oneof"`
+}
+
+type MqttClientProxyMessage_Text struct {
+ // Text
+ Text string `protobuf:"bytes,3,opt,name=text,proto3,oneof"`
+}
+
+func (*MqttClientProxyMessage_Data) isMqttClientProxyMessage_PayloadVariant() {}
+
+func (*MqttClientProxyMessage_Text) isMqttClientProxyMessage_PayloadVariant() {}
+
+// A packet envelope sent/received over the mesh
+// only payload_variant is sent in the payload portion of the LORA packet.
+// The other fields are either not sent at all, or sent in the special 16 byte LORA header.
+type MeshPacket struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The sending node number.
+ // Note: Our crypto implementation uses this field as well.
+ // See [crypto](/docs/overview/encryption) for details.
+ From uint32 `protobuf:"fixed32,1,opt,name=from,proto3" json:"from,omitempty"`
+ // The (immediate) destination for this packet
+ // If the value is 4,294,967,295 (maximum value of an unsigned 32bit integer), this indicates that the packet was
+ // not destined for a specific node, but for a channel as indicated by the value of `channel` below.
+ // If the value is another, this indicates that the packet was destined for a specific
+ // node (i.e. a kind of "Direct Message" to this node) and not broadcast on a channel.
+ To uint32 `protobuf:"fixed32,2,opt,name=to,proto3" json:"to,omitempty"`
+ // (Usually) If set, this indicates the index in the secondary_channels table that this packet was sent/received on.
+ // If unset, packet was on the primary channel.
+ // A particular node might know only a subset of channels in use on the mesh.
+ // Therefore channel_index is inherently a local concept and meaningless to send between nodes.
+ // Very briefly, while sending and receiving deep inside the device Router code, this field instead
+ // contains the 'channel hash' instead of the index.
+ // This 'trick' is only used while the payload_variant is an 'encrypted'.
+ Channel uint32 `protobuf:"varint,3,opt,name=channel,proto3" json:"channel,omitempty"`
+ // Types that are valid to be assigned to PayloadVariant:
+ //
+ // *MeshPacket_Decoded
+ // *MeshPacket_Encrypted
+ PayloadVariant isMeshPacket_PayloadVariant `protobuf_oneof:"payload_variant"`
+ // A unique ID for this packet.
+ // Always 0 for no-ack packets or non broadcast packets (and therefore take zero bytes of space).
+ // Otherwise a unique ID for this packet, useful for flooding algorithms.
+ // ID only needs to be unique on a _per sender_ basis, and it only
+ // needs to be unique for a few minutes (long enough to last for the length of
+ // any ACK or the completion of a mesh broadcast flood).
+ // Note: Our crypto implementation uses this id as well.
+ // See [crypto](/docs/overview/encryption) for details.
+ Id uint32 `protobuf:"fixed32,6,opt,name=id,proto3" json:"id,omitempty"`
+ // The time this message was received by the esp32 (secs since 1970).
+ // Note: this field is _never_ sent on the radio link itself (to save space) Times
+ // are typically not sent over the mesh, but they will be added to any Packet
+ // (chain of SubPacket) sent to the phone (so the phone can know exact time of reception)
+ RxTime uint32 `protobuf:"fixed32,7,opt,name=rx_time,json=rxTime,proto3" json:"rxTime,omitempty"`
+ // *Never* sent over the radio links.
+ // Set during reception to indicate the SNR of this packet.
+ // Used to collect statistics on current link quality.
+ RxSnr float32 `protobuf:"fixed32,8,opt,name=rx_snr,json=rxSnr,proto3" json:"rxSnr,omitempty"`
+ // If unset treated as zero (no forwarding, send to direct neighbor nodes only)
+ // if 1, allow hopping through one node, etc...
+ // For our usecase real world topologies probably have a max of about 3.
+ // This field is normally placed into a few of bits in the header.
+ HopLimit uint32 `protobuf:"varint,9,opt,name=hop_limit,json=hopLimit,proto3" json:"hopLimit,omitempty"`
+ // This packet is being sent as a reliable message, we would prefer it to arrive at the destination.
+ // We would like to receive a ack packet in response.
+ // Broadcasts messages treat this flag specially: Since acks for broadcasts would
+ // rapidly flood the channel, the normal ack behavior is suppressed.
+ // Instead, the original sender listens to see if at least one node is rebroadcasting this packet (because naive flooding algorithm).
+ // If it hears that the odds (given typical LoRa topologies) the odds are very high that every node should eventually receive the message.
+ // So FloodingRouter.cpp generates an implicit ack which is delivered to the original sender.
+ // If after some time we don't hear anyone rebroadcast our packet, we will timeout and retransmit, using the regular resend logic.
+ // Note: This flag is normally sent in a flag bit in the header when sent over the wire
+ WantAck bool `protobuf:"varint,10,opt,name=want_ack,json=wantAck,proto3" json:"wantAck,omitempty"`
+ // The priority of this message for sending.
+ // See MeshPacket.Priority description for more details.
+ Priority MeshPacket_Priority `protobuf:"varint,11,opt,name=priority,proto3,enum=meshtastic.MeshPacket_Priority" json:"priority,omitempty"`
+ // rssi of received packet. Only sent to phone for dispay purposes.
+ RxRssi int32 `protobuf:"varint,12,opt,name=rx_rssi,json=rxRssi,proto3" json:"rxRssi,omitempty"`
+ // Describe if this message is delayed
+ //
+ // Deprecated: Marked as deprecated in meshtastic/mesh.proto.
+ Delayed MeshPacket_Delayed `protobuf:"varint,13,opt,name=delayed,proto3,enum=meshtastic.MeshPacket_Delayed" json:"delayed,omitempty"`
+ // Describes whether this packet passed via MQTT somewhere along the path it currently took.
+ ViaMqtt bool `protobuf:"varint,14,opt,name=via_mqtt,json=viaMqtt,proto3" json:"viaMqtt,omitempty"`
+ // Hop limit with which the original packet started. Sent via LoRa using three bits in the unencrypted header.
+ // When receiving a packet, the difference between hop_start and hop_limit gives how many hops it traveled.
+ HopStart uint32 `protobuf:"varint,15,opt,name=hop_start,json=hopStart,proto3" json:"hopStart,omitempty"`
+ // Records the public key the packet was encrypted with, if applicable.
+ PublicKey []byte `protobuf:"bytes,16,opt,name=public_key,json=publicKey,proto3" json:"publicKey,omitempty"`
+ // Indicates whether the packet was en/decrypted using PKI
+ PkiEncrypted bool `protobuf:"varint,17,opt,name=pki_encrypted,json=pkiEncrypted,proto3" json:"pkiEncrypted,omitempty"`
+ // Last byte of the node number of the node that should be used as the next hop in routing.
+ // Set by the firmware internally, clients are not supposed to set this.
+ NextHop uint32 `protobuf:"varint,18,opt,name=next_hop,json=nextHop,proto3" json:"nextHop,omitempty"`
+ // Last byte of the node number of the node that will relay/relayed this packet.
+ // Set by the firmware internally, clients are not supposed to set this.
+ RelayNode uint32 `protobuf:"varint,19,opt,name=relay_node,json=relayNode,proto3" json:"relayNode,omitempty"`
+ // *Never* sent over the radio links.
+ // Timestamp after which this packet may be sent.
+ // Set by the firmware internally, clients are not supposed to set this.
+ TxAfter uint32 `protobuf:"varint,20,opt,name=tx_after,json=txAfter,proto3" json:"txAfter,omitempty"`
+ // Indicates which transport mechanism this packet arrived over
+ TransportMechanism MeshPacket_TransportMechanism `protobuf:"varint,21,opt,name=transport_mechanism,json=transportMechanism,proto3,enum=meshtastic.MeshPacket_TransportMechanism" json:"transportMechanism,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *MeshPacket) Reset() {
+ *x = MeshPacket{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[10]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *MeshPacket) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MeshPacket) ProtoMessage() {}
+
+func (x *MeshPacket) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[10]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use MeshPacket.ProtoReflect.Descriptor instead.
+func (*MeshPacket) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{10}
+}
+
+func (x *MeshPacket) GetFrom() uint32 {
+ if x != nil {
+ return x.From
+ }
+ return 0
+}
+
+func (x *MeshPacket) GetTo() uint32 {
+ if x != nil {
+ return x.To
+ }
+ return 0
+}
+
+func (x *MeshPacket) GetChannel() uint32 {
+ if x != nil {
+ return x.Channel
+ }
+ return 0
+}
+
+func (x *MeshPacket) GetPayloadVariant() isMeshPacket_PayloadVariant {
+ if x != nil {
+ return x.PayloadVariant
+ }
+ return nil
+}
+
+func (x *MeshPacket) GetDecoded() *Data {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*MeshPacket_Decoded); ok {
+ return x.Decoded
+ }
+ }
+ return nil
+}
+
+func (x *MeshPacket) GetEncrypted() []byte {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*MeshPacket_Encrypted); ok {
+ return x.Encrypted
+ }
+ }
+ return nil
+}
+
+func (x *MeshPacket) GetId() uint32 {
+ if x != nil {
+ return x.Id
+ }
+ return 0
+}
+
+func (x *MeshPacket) GetRxTime() uint32 {
+ if x != nil {
+ return x.RxTime
+ }
+ return 0
+}
+
+func (x *MeshPacket) GetRxSnr() float32 {
+ if x != nil {
+ return x.RxSnr
+ }
+ return 0
+}
+
+func (x *MeshPacket) GetHopLimit() uint32 {
+ if x != nil {
+ return x.HopLimit
+ }
+ return 0
+}
+
+func (x *MeshPacket) GetWantAck() bool {
+ if x != nil {
+ return x.WantAck
+ }
+ return false
+}
+
+func (x *MeshPacket) GetPriority() MeshPacket_Priority {
+ if x != nil {
+ return x.Priority
+ }
+ return MeshPacket_UNSET
+}
+
+func (x *MeshPacket) GetRxRssi() int32 {
+ if x != nil {
+ return x.RxRssi
+ }
+ return 0
+}
+
+// Deprecated: Marked as deprecated in meshtastic/mesh.proto.
+func (x *MeshPacket) GetDelayed() MeshPacket_Delayed {
+ if x != nil {
+ return x.Delayed
+ }
+ return MeshPacket_NO_DELAY
+}
+
+func (x *MeshPacket) GetViaMqtt() bool {
+ if x != nil {
+ return x.ViaMqtt
+ }
+ return false
+}
+
+func (x *MeshPacket) GetHopStart() uint32 {
+ if x != nil {
+ return x.HopStart
+ }
+ return 0
+}
+
+func (x *MeshPacket) GetPublicKey() []byte {
+ if x != nil {
+ return x.PublicKey
+ }
+ return nil
+}
+
+func (x *MeshPacket) GetPkiEncrypted() bool {
+ if x != nil {
+ return x.PkiEncrypted
+ }
+ return false
+}
+
+func (x *MeshPacket) GetNextHop() uint32 {
+ if x != nil {
+ return x.NextHop
+ }
+ return 0
+}
+
+func (x *MeshPacket) GetRelayNode() uint32 {
+ if x != nil {
+ return x.RelayNode
+ }
+ return 0
+}
+
+func (x *MeshPacket) GetTxAfter() uint32 {
+ if x != nil {
+ return x.TxAfter
+ }
+ return 0
+}
+
+func (x *MeshPacket) GetTransportMechanism() MeshPacket_TransportMechanism {
+ if x != nil {
+ return x.TransportMechanism
+ }
+ return MeshPacket_TRANSPORT_INTERNAL
+}
+
+type isMeshPacket_PayloadVariant interface {
+ isMeshPacket_PayloadVariant()
+}
+
+type MeshPacket_Decoded struct {
+ // TODO: REPLACE
+ Decoded *Data `protobuf:"bytes,4,opt,name=decoded,proto3,oneof"`
+}
+
+type MeshPacket_Encrypted struct {
+ // TODO: REPLACE
+ Encrypted []byte `protobuf:"bytes,5,opt,name=encrypted,proto3,oneof"`
+}
+
+func (*MeshPacket_Decoded) isMeshPacket_PayloadVariant() {}
+
+func (*MeshPacket_Encrypted) isMeshPacket_PayloadVariant() {}
+
+// The bluetooth to device link:
+// Old BTLE protocol docs from TODO, merge in above and make real docs...
+// use protocol buffers, and NanoPB
+// messages from device to phone:
+// POSITION_UPDATE (..., time)
+// TEXT_RECEIVED(from, text, time)
+// OPAQUE_RECEIVED(from, payload, time) (for signal messages or other applications)
+// messages from phone to device:
+// SET_MYID(id, human readable long, human readable short) (send down the unique ID
+// string used for this node, a human readable string shown for that id, and a very
+// short human readable string suitable for oled screen) SEND_OPAQUE(dest, payload)
+// (for signal messages or other applications) SEND_TEXT(dest, text) Get all
+// nodes() (returns list of nodes, with full info, last time seen, loc, battery
+// level etc) SET_CONFIG (switches device to a new set of radio params and
+// preshared key, drops all existing nodes, force our node to rejoin this new group)
+// Full information about a node on the mesh
+type NodeInfo struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The node number
+ Num uint32 `protobuf:"varint,1,opt,name=num,proto3" json:"num,omitempty"`
+ // The user info for this node
+ User *User `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"`
+ // This position data. Note: before 1.2.14 we would also store the last time we've heard from this node in position.time, that is no longer true.
+ // Position.time now indicates the last time we received a POSITION from that node.
+ Position *Position `protobuf:"bytes,3,opt,name=position,proto3" json:"position,omitempty"`
+ // Returns the Signal-to-noise ratio (SNR) of the last received message,
+ // as measured by the receiver. Return SNR of the last received message in dB
+ Snr float32 `protobuf:"fixed32,4,opt,name=snr,proto3" json:"snr,omitempty"`
+ // Set to indicate the last time we received a packet from this node
+ LastHeard uint32 `protobuf:"fixed32,5,opt,name=last_heard,json=lastHeard,proto3" json:"lastHeard,omitempty"`
+ // The latest device metrics for the node.
+ DeviceMetrics *DeviceMetrics `protobuf:"bytes,6,opt,name=device_metrics,json=deviceMetrics,proto3" json:"deviceMetrics,omitempty"`
+ // local channel index we heard that node on. Only populated if its not the default channel.
+ Channel uint32 `protobuf:"varint,7,opt,name=channel,proto3" json:"channel,omitempty"`
+ // True if we witnessed the node over MQTT instead of LoRA transport
+ ViaMqtt bool `protobuf:"varint,8,opt,name=via_mqtt,json=viaMqtt,proto3" json:"viaMqtt,omitempty"`
+ // Number of hops away from us this node is (0 if direct neighbor)
+ HopsAway *uint32 `protobuf:"varint,9,opt,name=hops_away,json=hopsAway,proto3,oneof" json:"hopsAway,omitempty"`
+ // True if node is in our favorites list
+ // Persists between NodeDB internal clean ups
+ IsFavorite bool `protobuf:"varint,10,opt,name=is_favorite,json=isFavorite,proto3" json:"isFavorite,omitempty"`
+ // True if node is in our ignored list
+ // Persists between NodeDB internal clean ups
+ IsIgnored bool `protobuf:"varint,11,opt,name=is_ignored,json=isIgnored,proto3" json:"isIgnored,omitempty"`
+ // True if node public key has been verified.
+ // Persists between NodeDB internal clean ups
+ // LSB 0 of the bitfield
+ IsKeyManuallyVerified bool `protobuf:"varint,12,opt,name=is_key_manually_verified,json=isKeyManuallyVerified,proto3" json:"isKeyManuallyVerified,omitempty"`
+ // True if node has been muted
+ // Persistes between NodeDB internal clean ups
+ IsMuted bool `protobuf:"varint,13,opt,name=is_muted,json=isMuted,proto3" json:"isMuted,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *NodeInfo) Reset() {
+ *x = NodeInfo{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[11]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *NodeInfo) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodeInfo) ProtoMessage() {}
+
+func (x *NodeInfo) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[11]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use NodeInfo.ProtoReflect.Descriptor instead.
+func (*NodeInfo) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{11}
+}
+
+func (x *NodeInfo) GetNum() uint32 {
+ if x != nil {
+ return x.Num
+ }
+ return 0
+}
+
+func (x *NodeInfo) GetUser() *User {
+ if x != nil {
+ return x.User
+ }
+ return nil
+}
+
+func (x *NodeInfo) GetPosition() *Position {
+ if x != nil {
+ return x.Position
+ }
+ return nil
+}
+
+func (x *NodeInfo) GetSnr() float32 {
+ if x != nil {
+ return x.Snr
+ }
+ return 0
+}
+
+func (x *NodeInfo) GetLastHeard() uint32 {
+ if x != nil {
+ return x.LastHeard
+ }
+ return 0
+}
+
+func (x *NodeInfo) GetDeviceMetrics() *DeviceMetrics {
+ if x != nil {
+ return x.DeviceMetrics
+ }
+ return nil
+}
+
+func (x *NodeInfo) GetChannel() uint32 {
+ if x != nil {
+ return x.Channel
+ }
+ return 0
+}
+
+func (x *NodeInfo) GetViaMqtt() bool {
+ if x != nil {
+ return x.ViaMqtt
+ }
+ return false
+}
+
+func (x *NodeInfo) GetHopsAway() uint32 {
+ if x != nil && x.HopsAway != nil {
+ return *x.HopsAway
+ }
+ return 0
+}
+
+func (x *NodeInfo) GetIsFavorite() bool {
+ if x != nil {
+ return x.IsFavorite
+ }
+ return false
+}
+
+func (x *NodeInfo) GetIsIgnored() bool {
+ if x != nil {
+ return x.IsIgnored
+ }
+ return false
+}
+
+func (x *NodeInfo) GetIsKeyManuallyVerified() bool {
+ if x != nil {
+ return x.IsKeyManuallyVerified
+ }
+ return false
+}
+
+func (x *NodeInfo) GetIsMuted() bool {
+ if x != nil {
+ return x.IsMuted
+ }
+ return false
+}
+
+// Unique local debugging info for this node
+// Note: we don't include position or the user info, because that will come in the
+// Sent to the phone in response to WantNodes.
+type MyNodeInfo struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Tells the phone what our node number is, default starting value is
+ // lowbyte of macaddr, but it will be fixed if that is already in use
+ MyNodeNum uint32 `protobuf:"varint,1,opt,name=my_node_num,json=myNodeNum,proto3" json:"myNodeNum,omitempty"`
+ // The total number of reboots this node has ever encountered
+ // (well - since the last time we discarded preferences)
+ RebootCount uint32 `protobuf:"varint,8,opt,name=reboot_count,json=rebootCount,proto3" json:"rebootCount,omitempty"`
+ // The minimum app version that can talk to this device.
+ // Phone/PC apps should compare this to their build number and if too low tell the user they must update their app
+ MinAppVersion uint32 `protobuf:"varint,11,opt,name=min_app_version,json=minAppVersion,proto3" json:"minAppVersion,omitempty"`
+ // Unique hardware identifier for this device
+ DeviceId []byte `protobuf:"bytes,12,opt,name=device_id,json=deviceId,proto3" json:"deviceId,omitempty"`
+ // The PlatformIO environment used to build this firmware
+ PioEnv string `protobuf:"bytes,13,opt,name=pio_env,json=pioEnv,proto3" json:"pioEnv,omitempty"`
+ // The indicator for whether this device is running event firmware and which
+ FirmwareEdition FirmwareEdition `protobuf:"varint,14,opt,name=firmware_edition,json=firmwareEdition,proto3,enum=meshtastic.FirmwareEdition" json:"firmwareEdition,omitempty"`
+ // The number of nodes in the nodedb.
+ // This is used by the phone to know how many NodeInfo packets to expect on want_config
+ NodedbCount uint32 `protobuf:"varint,15,opt,name=nodedb_count,json=nodedbCount,proto3" json:"nodedbCount,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *MyNodeInfo) Reset() {
+ *x = MyNodeInfo{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[12]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *MyNodeInfo) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MyNodeInfo) ProtoMessage() {}
+
+func (x *MyNodeInfo) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[12]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use MyNodeInfo.ProtoReflect.Descriptor instead.
+func (*MyNodeInfo) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{12}
+}
+
+func (x *MyNodeInfo) GetMyNodeNum() uint32 {
+ if x != nil {
+ return x.MyNodeNum
+ }
+ return 0
+}
+
+func (x *MyNodeInfo) GetRebootCount() uint32 {
+ if x != nil {
+ return x.RebootCount
+ }
+ return 0
+}
+
+func (x *MyNodeInfo) GetMinAppVersion() uint32 {
+ if x != nil {
+ return x.MinAppVersion
+ }
+ return 0
+}
+
+func (x *MyNodeInfo) GetDeviceId() []byte {
+ if x != nil {
+ return x.DeviceId
+ }
+ return nil
+}
+
+func (x *MyNodeInfo) GetPioEnv() string {
+ if x != nil {
+ return x.PioEnv
+ }
+ return ""
+}
+
+func (x *MyNodeInfo) GetFirmwareEdition() FirmwareEdition {
+ if x != nil {
+ return x.FirmwareEdition
+ }
+ return FirmwareEdition_VANILLA
+}
+
+func (x *MyNodeInfo) GetNodedbCount() uint32 {
+ if x != nil {
+ return x.NodedbCount
+ }
+ return 0
+}
+
+// Debug output from the device.
+// To minimize the size of records inside the device code, if a time/source/level is not set
+// on the message it is assumed to be a continuation of the previously sent message.
+// This allows the device code to use fixed maxlen 64 byte strings for messages,
+// and then extend as needed by emitting multiple records.
+type LogRecord struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Log levels, chosen to match python logging conventions.
+ Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"`
+ // Seconds since 1970 - or 0 for unknown/unset
+ Time uint32 `protobuf:"fixed32,2,opt,name=time,proto3" json:"time,omitempty"`
+ // Usually based on thread name - if known
+ Source string `protobuf:"bytes,3,opt,name=source,proto3" json:"source,omitempty"`
+ // Not yet set
+ Level LogRecord_Level `protobuf:"varint,4,opt,name=level,proto3,enum=meshtastic.LogRecord_Level" json:"level,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *LogRecord) Reset() {
+ *x = LogRecord{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[13]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *LogRecord) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*LogRecord) ProtoMessage() {}
+
+func (x *LogRecord) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[13]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use LogRecord.ProtoReflect.Descriptor instead.
+func (*LogRecord) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{13}
+}
+
+func (x *LogRecord) GetMessage() string {
+ if x != nil {
+ return x.Message
+ }
+ return ""
+}
+
+func (x *LogRecord) GetTime() uint32 {
+ if x != nil {
+ return x.Time
+ }
+ return 0
+}
+
+func (x *LogRecord) GetSource() string {
+ if x != nil {
+ return x.Source
+ }
+ return ""
+}
+
+func (x *LogRecord) GetLevel() LogRecord_Level {
+ if x != nil {
+ return x.Level
+ }
+ return LogRecord_UNSET
+}
+
+type QueueStatus struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Last attempt to queue status, ErrorCode
+ Res int32 `protobuf:"varint,1,opt,name=res,proto3" json:"res,omitempty"`
+ // Free entries in the outgoing queue
+ Free uint32 `protobuf:"varint,2,opt,name=free,proto3" json:"free,omitempty"`
+ // Maximum entries in the outgoing queue
+ Maxlen uint32 `protobuf:"varint,3,opt,name=maxlen,proto3" json:"maxlen,omitempty"`
+ // What was mesh packet id that generated this response?
+ MeshPacketId uint32 `protobuf:"varint,4,opt,name=mesh_packet_id,json=meshPacketId,proto3" json:"meshPacketId,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *QueueStatus) Reset() {
+ *x = QueueStatus{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[14]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *QueueStatus) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*QueueStatus) ProtoMessage() {}
+
+func (x *QueueStatus) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[14]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use QueueStatus.ProtoReflect.Descriptor instead.
+func (*QueueStatus) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{14}
+}
+
+func (x *QueueStatus) GetRes() int32 {
+ if x != nil {
+ return x.Res
+ }
+ return 0
+}
+
+func (x *QueueStatus) GetFree() uint32 {
+ if x != nil {
+ return x.Free
+ }
+ return 0
+}
+
+func (x *QueueStatus) GetMaxlen() uint32 {
+ if x != nil {
+ return x.Maxlen
+ }
+ return 0
+}
+
+func (x *QueueStatus) GetMeshPacketId() uint32 {
+ if x != nil {
+ return x.MeshPacketId
+ }
+ return 0
+}
+
+// Packets from the radio to the phone will appear on the fromRadio characteristic.
+// It will support READ and NOTIFY. When a new packet arrives the device will BLE notify?
+// It will sit in that descriptor until consumed by the phone,
+// at which point the next item in the FIFO will be populated.
+type FromRadio struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The packet id, used to allow the phone to request missing read packets from the FIFO,
+ // see our bluetooth docs
+ Id uint32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
+ // Log levels, chosen to match python logging conventions.
+ //
+ // Types that are valid to be assigned to PayloadVariant:
+ //
+ // *FromRadio_Packet
+ // *FromRadio_MyInfo
+ // *FromRadio_NodeInfo
+ // *FromRadio_Config
+ // *FromRadio_LogRecord
+ // *FromRadio_ConfigCompleteId
+ // *FromRadio_Rebooted
+ // *FromRadio_ModuleConfig
+ // *FromRadio_Channel
+ // *FromRadio_QueueStatus
+ // *FromRadio_XmodemPacket
+ // *FromRadio_Metadata
+ // *FromRadio_MqttClientProxyMessage
+ // *FromRadio_FileInfo
+ // *FromRadio_ClientNotification
+ // *FromRadio_DeviceuiConfig
+ PayloadVariant isFromRadio_PayloadVariant `protobuf_oneof:"payload_variant"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *FromRadio) Reset() {
+ *x = FromRadio{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[15]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *FromRadio) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FromRadio) ProtoMessage() {}
+
+func (x *FromRadio) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[15]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use FromRadio.ProtoReflect.Descriptor instead.
+func (*FromRadio) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{15}
+}
+
+func (x *FromRadio) GetId() uint32 {
+ if x != nil {
+ return x.Id
+ }
+ return 0
+}
+
+func (x *FromRadio) GetPayloadVariant() isFromRadio_PayloadVariant {
+ if x != nil {
+ return x.PayloadVariant
+ }
+ return nil
+}
+
+func (x *FromRadio) GetPacket() *MeshPacket {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*FromRadio_Packet); ok {
+ return x.Packet
+ }
+ }
+ return nil
+}
+
+func (x *FromRadio) GetMyInfo() *MyNodeInfo {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*FromRadio_MyInfo); ok {
+ return x.MyInfo
+ }
+ }
+ return nil
+}
+
+func (x *FromRadio) GetNodeInfo() *NodeInfo {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*FromRadio_NodeInfo); ok {
+ return x.NodeInfo
+ }
+ }
+ return nil
+}
+
+func (x *FromRadio) GetConfig() *Config {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*FromRadio_Config); ok {
+ return x.Config
+ }
+ }
+ return nil
+}
+
+func (x *FromRadio) GetLogRecord() *LogRecord {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*FromRadio_LogRecord); ok {
+ return x.LogRecord
+ }
+ }
+ return nil
+}
+
+func (x *FromRadio) GetConfigCompleteId() uint32 {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*FromRadio_ConfigCompleteId); ok {
+ return x.ConfigCompleteId
+ }
+ }
+ return 0
+}
+
+func (x *FromRadio) GetRebooted() bool {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*FromRadio_Rebooted); ok {
+ return x.Rebooted
+ }
+ }
+ return false
+}
+
+func (x *FromRadio) GetModuleConfig() *ModuleConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*FromRadio_ModuleConfig); ok {
+ return x.ModuleConfig
+ }
+ }
+ return nil
+}
+
+func (x *FromRadio) GetChannel() *Channel {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*FromRadio_Channel); ok {
+ return x.Channel
+ }
+ }
+ return nil
+}
+
+func (x *FromRadio) GetQueueStatus() *QueueStatus {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*FromRadio_QueueStatus); ok {
+ return x.QueueStatus
+ }
+ }
+ return nil
+}
+
+func (x *FromRadio) GetXmodemPacket() *XModem {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*FromRadio_XmodemPacket); ok {
+ return x.XmodemPacket
+ }
+ }
+ return nil
+}
+
+func (x *FromRadio) GetMetadata() *DeviceMetadata {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*FromRadio_Metadata); ok {
+ return x.Metadata
+ }
+ }
+ return nil
+}
+
+func (x *FromRadio) GetMqttClientProxyMessage() *MqttClientProxyMessage {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*FromRadio_MqttClientProxyMessage); ok {
+ return x.MqttClientProxyMessage
+ }
+ }
+ return nil
+}
+
+func (x *FromRadio) GetFileInfo() *FileInfo {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*FromRadio_FileInfo); ok {
+ return x.FileInfo
+ }
+ }
+ return nil
+}
+
+func (x *FromRadio) GetClientNotification() *ClientNotification {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*FromRadio_ClientNotification); ok {
+ return x.ClientNotification
+ }
+ }
+ return nil
+}
+
+func (x *FromRadio) GetDeviceuiConfig() *DeviceUIConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*FromRadio_DeviceuiConfig); ok {
+ return x.DeviceuiConfig
+ }
+ }
+ return nil
+}
+
+type isFromRadio_PayloadVariant interface {
+ isFromRadio_PayloadVariant()
+}
+
+type FromRadio_Packet struct {
+ // Log levels, chosen to match python logging conventions.
+ Packet *MeshPacket `protobuf:"bytes,2,opt,name=packet,proto3,oneof"`
+}
+
+type FromRadio_MyInfo struct {
+ // Tells the phone what our node number is, can be -1 if we've not yet joined a mesh.
+ // NOTE: This ID must not change - to keep (minimal) compatibility with <1.2 version of android apps.
+ MyInfo *MyNodeInfo `protobuf:"bytes,3,opt,name=my_info,json=myInfo,proto3,oneof"`
+}
+
+type FromRadio_NodeInfo struct {
+ // One packet is sent for each node in the on radio DB
+ // starts over with the first node in our DB
+ NodeInfo *NodeInfo `protobuf:"bytes,4,opt,name=node_info,json=nodeInfo,proto3,oneof"`
+}
+
+type FromRadio_Config struct {
+ // Include a part of the config (was: RadioConfig radio)
+ Config *Config `protobuf:"bytes,5,opt,name=config,proto3,oneof"`
+}
+
+type FromRadio_LogRecord struct {
+ // Set to send debug console output over our protobuf stream
+ LogRecord *LogRecord `protobuf:"bytes,6,opt,name=log_record,json=logRecord,proto3,oneof"`
+}
+
+type FromRadio_ConfigCompleteId struct {
+ // Sent as true once the device has finished sending all of the responses to want_config
+ // recipient should check if this ID matches our original request nonce, if
+ // not, it means your config responses haven't started yet.
+ // NOTE: This ID must not change - to keep (minimal) compatibility with <1.2 version of android apps.
+ ConfigCompleteId uint32 `protobuf:"varint,7,opt,name=config_complete_id,json=configCompleteId,proto3,oneof"`
+}
+
+type FromRadio_Rebooted struct {
+ // Sent to tell clients the radio has just rebooted.
+ // Set to true if present.
+ // Not used on all transports, currently just used for the serial console.
+ // NOTE: This ID must not change - to keep (minimal) compatibility with <1.2 version of android apps.
+ Rebooted bool `protobuf:"varint,8,opt,name=rebooted,proto3,oneof"`
+}
+
+type FromRadio_ModuleConfig struct {
+ // Include module config
+ ModuleConfig *ModuleConfig `protobuf:"bytes,9,opt,name=moduleConfig,proto3,oneof"`
+}
+
+type FromRadio_Channel struct {
+ // One packet is sent for each channel
+ Channel *Channel `protobuf:"bytes,10,opt,name=channel,proto3,oneof"`
+}
+
+type FromRadio_QueueStatus struct {
+ // Queue status info
+ QueueStatus *QueueStatus `protobuf:"bytes,11,opt,name=queueStatus,proto3,oneof"`
+}
+
+type FromRadio_XmodemPacket struct {
+ // File Transfer Chunk
+ XmodemPacket *XModem `protobuf:"bytes,12,opt,name=xmodemPacket,proto3,oneof"`
+}
+
+type FromRadio_Metadata struct {
+ // Device metadata message
+ Metadata *DeviceMetadata `protobuf:"bytes,13,opt,name=metadata,proto3,oneof"`
+}
+
+type FromRadio_MqttClientProxyMessage struct {
+ // MQTT Client Proxy Message (device sending to client / phone for publishing to MQTT)
+ MqttClientProxyMessage *MqttClientProxyMessage `protobuf:"bytes,14,opt,name=mqttClientProxyMessage,proto3,oneof"`
+}
+
+type FromRadio_FileInfo struct {
+ // File system manifest messages
+ FileInfo *FileInfo `protobuf:"bytes,15,opt,name=fileInfo,proto3,oneof"`
+}
+
+type FromRadio_ClientNotification struct {
+ // Notification message to the client
+ ClientNotification *ClientNotification `protobuf:"bytes,16,opt,name=clientNotification,proto3,oneof"`
+}
+
+type FromRadio_DeviceuiConfig struct {
+ // Persistent data for device-ui
+ DeviceuiConfig *DeviceUIConfig `protobuf:"bytes,17,opt,name=deviceuiConfig,proto3,oneof"`
+}
+
+func (*FromRadio_Packet) isFromRadio_PayloadVariant() {}
+
+func (*FromRadio_MyInfo) isFromRadio_PayloadVariant() {}
+
+func (*FromRadio_NodeInfo) isFromRadio_PayloadVariant() {}
+
+func (*FromRadio_Config) isFromRadio_PayloadVariant() {}
+
+func (*FromRadio_LogRecord) isFromRadio_PayloadVariant() {}
+
+func (*FromRadio_ConfigCompleteId) isFromRadio_PayloadVariant() {}
+
+func (*FromRadio_Rebooted) isFromRadio_PayloadVariant() {}
+
+func (*FromRadio_ModuleConfig) isFromRadio_PayloadVariant() {}
+
+func (*FromRadio_Channel) isFromRadio_PayloadVariant() {}
+
+func (*FromRadio_QueueStatus) isFromRadio_PayloadVariant() {}
+
+func (*FromRadio_XmodemPacket) isFromRadio_PayloadVariant() {}
+
+func (*FromRadio_Metadata) isFromRadio_PayloadVariant() {}
+
+func (*FromRadio_MqttClientProxyMessage) isFromRadio_PayloadVariant() {}
+
+func (*FromRadio_FileInfo) isFromRadio_PayloadVariant() {}
+
+func (*FromRadio_ClientNotification) isFromRadio_PayloadVariant() {}
+
+func (*FromRadio_DeviceuiConfig) isFromRadio_PayloadVariant() {}
+
+// A notification message from the device to the client
+// To be used for important messages that should to be displayed to the user
+// in the form of push notifications or validation messages when saving
+// invalid configuration.
+type ClientNotification struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The id of the packet we're notifying in response to
+ ReplyId *uint32 `protobuf:"varint,1,opt,name=reply_id,json=replyId,proto3,oneof" json:"replyId,omitempty"`
+ // Seconds since 1970 - or 0 for unknown/unset
+ Time uint32 `protobuf:"fixed32,2,opt,name=time,proto3" json:"time,omitempty"`
+ // The level type of notification
+ Level LogRecord_Level `protobuf:"varint,3,opt,name=level,proto3,enum=meshtastic.LogRecord_Level" json:"level,omitempty"`
+ // The message body of the notification
+ Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"`
+ // Types that are valid to be assigned to PayloadVariant:
+ //
+ // *ClientNotification_KeyVerificationNumberInform
+ // *ClientNotification_KeyVerificationNumberRequest
+ // *ClientNotification_KeyVerificationFinal
+ // *ClientNotification_DuplicatedPublicKey
+ // *ClientNotification_LowEntropyKey
+ PayloadVariant isClientNotification_PayloadVariant `protobuf_oneof:"payload_variant"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ClientNotification) Reset() {
+ *x = ClientNotification{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[16]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ClientNotification) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ClientNotification) ProtoMessage() {}
+
+func (x *ClientNotification) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[16]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ClientNotification.ProtoReflect.Descriptor instead.
+func (*ClientNotification) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{16}
+}
+
+func (x *ClientNotification) GetReplyId() uint32 {
+ if x != nil && x.ReplyId != nil {
+ return *x.ReplyId
+ }
+ return 0
+}
+
+func (x *ClientNotification) GetTime() uint32 {
+ if x != nil {
+ return x.Time
+ }
+ return 0
+}
+
+func (x *ClientNotification) GetLevel() LogRecord_Level {
+ if x != nil {
+ return x.Level
+ }
+ return LogRecord_UNSET
+}
+
+func (x *ClientNotification) GetMessage() string {
+ if x != nil {
+ return x.Message
+ }
+ return ""
+}
+
+func (x *ClientNotification) GetPayloadVariant() isClientNotification_PayloadVariant {
+ if x != nil {
+ return x.PayloadVariant
+ }
+ return nil
+}
+
+func (x *ClientNotification) GetKeyVerificationNumberInform() *KeyVerificationNumberInform {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ClientNotification_KeyVerificationNumberInform); ok {
+ return x.KeyVerificationNumberInform
+ }
+ }
+ return nil
+}
+
+func (x *ClientNotification) GetKeyVerificationNumberRequest() *KeyVerificationNumberRequest {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ClientNotification_KeyVerificationNumberRequest); ok {
+ return x.KeyVerificationNumberRequest
+ }
+ }
+ return nil
+}
+
+func (x *ClientNotification) GetKeyVerificationFinal() *KeyVerificationFinal {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ClientNotification_KeyVerificationFinal); ok {
+ return x.KeyVerificationFinal
+ }
+ }
+ return nil
+}
+
+func (x *ClientNotification) GetDuplicatedPublicKey() *DuplicatedPublicKey {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ClientNotification_DuplicatedPublicKey); ok {
+ return x.DuplicatedPublicKey
+ }
+ }
+ return nil
+}
+
+func (x *ClientNotification) GetLowEntropyKey() *LowEntropyKey {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ClientNotification_LowEntropyKey); ok {
+ return x.LowEntropyKey
+ }
+ }
+ return nil
+}
+
+type isClientNotification_PayloadVariant interface {
+ isClientNotification_PayloadVariant()
+}
+
+type ClientNotification_KeyVerificationNumberInform struct {
+ KeyVerificationNumberInform *KeyVerificationNumberInform `protobuf:"bytes,11,opt,name=key_verification_number_inform,json=keyVerificationNumberInform,proto3,oneof"`
+}
+
+type ClientNotification_KeyVerificationNumberRequest struct {
+ KeyVerificationNumberRequest *KeyVerificationNumberRequest `protobuf:"bytes,12,opt,name=key_verification_number_request,json=keyVerificationNumberRequest,proto3,oneof"`
+}
+
+type ClientNotification_KeyVerificationFinal struct {
+ KeyVerificationFinal *KeyVerificationFinal `protobuf:"bytes,13,opt,name=key_verification_final,json=keyVerificationFinal,proto3,oneof"`
+}
+
+type ClientNotification_DuplicatedPublicKey struct {
+ DuplicatedPublicKey *DuplicatedPublicKey `protobuf:"bytes,14,opt,name=duplicated_public_key,json=duplicatedPublicKey,proto3,oneof"`
+}
+
+type ClientNotification_LowEntropyKey struct {
+ LowEntropyKey *LowEntropyKey `protobuf:"bytes,15,opt,name=low_entropy_key,json=lowEntropyKey,proto3,oneof"`
+}
+
+func (*ClientNotification_KeyVerificationNumberInform) isClientNotification_PayloadVariant() {}
+
+func (*ClientNotification_KeyVerificationNumberRequest) isClientNotification_PayloadVariant() {}
+
+func (*ClientNotification_KeyVerificationFinal) isClientNotification_PayloadVariant() {}
+
+func (*ClientNotification_DuplicatedPublicKey) isClientNotification_PayloadVariant() {}
+
+func (*ClientNotification_LowEntropyKey) isClientNotification_PayloadVariant() {}
+
+type KeyVerificationNumberInform struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Nonce uint64 `protobuf:"varint,1,opt,name=nonce,proto3" json:"nonce,omitempty"`
+ RemoteLongname string `protobuf:"bytes,2,opt,name=remote_longname,json=remoteLongname,proto3" json:"remoteLongname,omitempty"`
+ SecurityNumber uint32 `protobuf:"varint,3,opt,name=security_number,json=securityNumber,proto3" json:"securityNumber,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *KeyVerificationNumberInform) Reset() {
+ *x = KeyVerificationNumberInform{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[17]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *KeyVerificationNumberInform) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*KeyVerificationNumberInform) ProtoMessage() {}
+
+func (x *KeyVerificationNumberInform) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[17]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use KeyVerificationNumberInform.ProtoReflect.Descriptor instead.
+func (*KeyVerificationNumberInform) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{17}
+}
+
+func (x *KeyVerificationNumberInform) GetNonce() uint64 {
+ if x != nil {
+ return x.Nonce
+ }
+ return 0
+}
+
+func (x *KeyVerificationNumberInform) GetRemoteLongname() string {
+ if x != nil {
+ return x.RemoteLongname
+ }
+ return ""
+}
+
+func (x *KeyVerificationNumberInform) GetSecurityNumber() uint32 {
+ if x != nil {
+ return x.SecurityNumber
+ }
+ return 0
+}
+
+type KeyVerificationNumberRequest struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Nonce uint64 `protobuf:"varint,1,opt,name=nonce,proto3" json:"nonce,omitempty"`
+ RemoteLongname string `protobuf:"bytes,2,opt,name=remote_longname,json=remoteLongname,proto3" json:"remoteLongname,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *KeyVerificationNumberRequest) Reset() {
+ *x = KeyVerificationNumberRequest{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[18]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *KeyVerificationNumberRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*KeyVerificationNumberRequest) ProtoMessage() {}
+
+func (x *KeyVerificationNumberRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[18]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use KeyVerificationNumberRequest.ProtoReflect.Descriptor instead.
+func (*KeyVerificationNumberRequest) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{18}
+}
+
+func (x *KeyVerificationNumberRequest) GetNonce() uint64 {
+ if x != nil {
+ return x.Nonce
+ }
+ return 0
+}
+
+func (x *KeyVerificationNumberRequest) GetRemoteLongname() string {
+ if x != nil {
+ return x.RemoteLongname
+ }
+ return ""
+}
+
+type KeyVerificationFinal struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Nonce uint64 `protobuf:"varint,1,opt,name=nonce,proto3" json:"nonce,omitempty"`
+ RemoteLongname string `protobuf:"bytes,2,opt,name=remote_longname,json=remoteLongname,proto3" json:"remoteLongname,omitempty"`
+ IsSender bool `protobuf:"varint,3,opt,name=isSender,proto3" json:"isSender,omitempty"`
+ VerificationCharacters string `protobuf:"bytes,4,opt,name=verification_characters,json=verificationCharacters,proto3" json:"verificationCharacters,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *KeyVerificationFinal) Reset() {
+ *x = KeyVerificationFinal{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[19]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *KeyVerificationFinal) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*KeyVerificationFinal) ProtoMessage() {}
+
+func (x *KeyVerificationFinal) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[19]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use KeyVerificationFinal.ProtoReflect.Descriptor instead.
+func (*KeyVerificationFinal) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{19}
+}
+
+func (x *KeyVerificationFinal) GetNonce() uint64 {
+ if x != nil {
+ return x.Nonce
+ }
+ return 0
+}
+
+func (x *KeyVerificationFinal) GetRemoteLongname() string {
+ if x != nil {
+ return x.RemoteLongname
+ }
+ return ""
+}
+
+func (x *KeyVerificationFinal) GetIsSender() bool {
+ if x != nil {
+ return x.IsSender
+ }
+ return false
+}
+
+func (x *KeyVerificationFinal) GetVerificationCharacters() string {
+ if x != nil {
+ return x.VerificationCharacters
+ }
+ return ""
+}
+
+type DuplicatedPublicKey struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *DuplicatedPublicKey) Reset() {
+ *x = DuplicatedPublicKey{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[20]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *DuplicatedPublicKey) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DuplicatedPublicKey) ProtoMessage() {}
+
+func (x *DuplicatedPublicKey) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[20]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DuplicatedPublicKey.ProtoReflect.Descriptor instead.
+func (*DuplicatedPublicKey) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{20}
+}
+
+type LowEntropyKey struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *LowEntropyKey) Reset() {
+ *x = LowEntropyKey{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[21]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *LowEntropyKey) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*LowEntropyKey) ProtoMessage() {}
+
+func (x *LowEntropyKey) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[21]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use LowEntropyKey.ProtoReflect.Descriptor instead.
+func (*LowEntropyKey) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{21}
+}
+
+// Individual File info for the device
+type FileInfo struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The fully qualified path of the file
+ FileName string `protobuf:"bytes,1,opt,name=file_name,json=fileName,proto3" json:"fileName,omitempty"`
+ // The size of the file in bytes
+ SizeBytes uint32 `protobuf:"varint,2,opt,name=size_bytes,json=sizeBytes,proto3" json:"sizeBytes,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *FileInfo) Reset() {
+ *x = FileInfo{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[22]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *FileInfo) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FileInfo) ProtoMessage() {}
+
+func (x *FileInfo) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[22]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use FileInfo.ProtoReflect.Descriptor instead.
+func (*FileInfo) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{22}
+}
+
+func (x *FileInfo) GetFileName() string {
+ if x != nil {
+ return x.FileName
+ }
+ return ""
+}
+
+func (x *FileInfo) GetSizeBytes() uint32 {
+ if x != nil {
+ return x.SizeBytes
+ }
+ return 0
+}
+
+// Packets/commands to the radio will be written (reliably) to the toRadio characteristic.
+// Once the write completes the phone can assume it is handled.
+type ToRadio struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Log levels, chosen to match python logging conventions.
+ //
+ // Types that are valid to be assigned to PayloadVariant:
+ //
+ // *ToRadio_Packet
+ // *ToRadio_WantConfigId
+ // *ToRadio_Disconnect
+ // *ToRadio_XmodemPacket
+ // *ToRadio_MqttClientProxyMessage
+ // *ToRadio_Heartbeat
+ PayloadVariant isToRadio_PayloadVariant `protobuf_oneof:"payload_variant"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ToRadio) Reset() {
+ *x = ToRadio{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[23]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ToRadio) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ToRadio) ProtoMessage() {}
+
+func (x *ToRadio) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[23]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ToRadio.ProtoReflect.Descriptor instead.
+func (*ToRadio) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{23}
+}
+
+func (x *ToRadio) GetPayloadVariant() isToRadio_PayloadVariant {
+ if x != nil {
+ return x.PayloadVariant
+ }
+ return nil
+}
+
+func (x *ToRadio) GetPacket() *MeshPacket {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ToRadio_Packet); ok {
+ return x.Packet
+ }
+ }
+ return nil
+}
+
+func (x *ToRadio) GetWantConfigId() uint32 {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ToRadio_WantConfigId); ok {
+ return x.WantConfigId
+ }
+ }
+ return 0
+}
+
+func (x *ToRadio) GetDisconnect() bool {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ToRadio_Disconnect); ok {
+ return x.Disconnect
+ }
+ }
+ return false
+}
+
+func (x *ToRadio) GetXmodemPacket() *XModem {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ToRadio_XmodemPacket); ok {
+ return x.XmodemPacket
+ }
+ }
+ return nil
+}
+
+func (x *ToRadio) GetMqttClientProxyMessage() *MqttClientProxyMessage {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ToRadio_MqttClientProxyMessage); ok {
+ return x.MqttClientProxyMessage
+ }
+ }
+ return nil
+}
+
+func (x *ToRadio) GetHeartbeat() *Heartbeat {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ToRadio_Heartbeat); ok {
+ return x.Heartbeat
+ }
+ }
+ return nil
+}
+
+type isToRadio_PayloadVariant interface {
+ isToRadio_PayloadVariant()
+}
+
+type ToRadio_Packet struct {
+ // Send this packet on the mesh
+ Packet *MeshPacket `protobuf:"bytes,1,opt,name=packet,proto3,oneof"`
+}
+
+type ToRadio_WantConfigId struct {
+ // Phone wants radio to send full node db to the phone, This is
+ // typically the first packet sent to the radio when the phone gets a
+ // bluetooth connection. The radio will respond by sending back a
+ // MyNodeInfo, a owner, a radio config and a series of
+ // FromRadio.node_infos, and config_complete
+ // the integer you write into this field will be reported back in the
+ // config_complete_id response this allows clients to never be confused by
+ // a stale old partially sent config.
+ WantConfigId uint32 `protobuf:"varint,3,opt,name=want_config_id,json=wantConfigId,proto3,oneof"`
+}
+
+type ToRadio_Disconnect struct {
+ // Tell API server we are disconnecting now.
+ // This is useful for serial links where there is no hardware/protocol based notification that the client has dropped the link.
+ // (Sending this message is optional for clients)
+ Disconnect bool `protobuf:"varint,4,opt,name=disconnect,proto3,oneof"`
+}
+
+type ToRadio_XmodemPacket struct {
+ XmodemPacket *XModem `protobuf:"bytes,5,opt,name=xmodemPacket,proto3,oneof"`
+}
+
+type ToRadio_MqttClientProxyMessage struct {
+ // MQTT Client Proxy Message (for client / phone subscribed to MQTT sending to device)
+ MqttClientProxyMessage *MqttClientProxyMessage `protobuf:"bytes,6,opt,name=mqttClientProxyMessage,proto3,oneof"`
+}
+
+type ToRadio_Heartbeat struct {
+ // Heartbeat message (used to keep the device connection awake on serial)
+ Heartbeat *Heartbeat `protobuf:"bytes,7,opt,name=heartbeat,proto3,oneof"`
+}
+
+func (*ToRadio_Packet) isToRadio_PayloadVariant() {}
+
+func (*ToRadio_WantConfigId) isToRadio_PayloadVariant() {}
+
+func (*ToRadio_Disconnect) isToRadio_PayloadVariant() {}
+
+func (*ToRadio_XmodemPacket) isToRadio_PayloadVariant() {}
+
+func (*ToRadio_MqttClientProxyMessage) isToRadio_PayloadVariant() {}
+
+func (*ToRadio_Heartbeat) isToRadio_PayloadVariant() {}
+
+// Compressed message payload
+type Compressed struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // PortNum to determine the how to handle the compressed payload.
+ Portnum PortNum `protobuf:"varint,1,opt,name=portnum,proto3,enum=meshtastic.PortNum" json:"portnum,omitempty"`
+ // Compressed data.
+ Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Compressed) Reset() {
+ *x = Compressed{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[24]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Compressed) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Compressed) ProtoMessage() {}
+
+func (x *Compressed) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[24]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Compressed.ProtoReflect.Descriptor instead.
+func (*Compressed) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{24}
+}
+
+func (x *Compressed) GetPortnum() PortNum {
+ if x != nil {
+ return x.Portnum
+ }
+ return PortNum_UNKNOWN_APP
+}
+
+func (x *Compressed) GetData() []byte {
+ if x != nil {
+ return x.Data
+ }
+ return nil
+}
+
+// Full info on edges for a single node
+type NeighborInfo struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The node ID of the node sending info on its neighbors
+ NodeId uint32 `protobuf:"varint,1,opt,name=node_id,json=nodeId,proto3" json:"nodeId,omitempty"`
+ // Field to pass neighbor info for the next sending cycle
+ LastSentById uint32 `protobuf:"varint,2,opt,name=last_sent_by_id,json=lastSentById,proto3" json:"lastSentById,omitempty"`
+ // Broadcast interval of the represented node (in seconds)
+ NodeBroadcastIntervalSecs uint32 `protobuf:"varint,3,opt,name=node_broadcast_interval_secs,json=nodeBroadcastIntervalSecs,proto3" json:"nodeBroadcastIntervalSecs,omitempty"`
+ // The list of out edges from this node
+ Neighbors []*Neighbor `protobuf:"bytes,4,rep,name=neighbors,proto3" json:"neighbors,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *NeighborInfo) Reset() {
+ *x = NeighborInfo{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[25]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *NeighborInfo) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NeighborInfo) ProtoMessage() {}
+
+func (x *NeighborInfo) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[25]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use NeighborInfo.ProtoReflect.Descriptor instead.
+func (*NeighborInfo) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{25}
+}
+
+func (x *NeighborInfo) GetNodeId() uint32 {
+ if x != nil {
+ return x.NodeId
+ }
+ return 0
+}
+
+func (x *NeighborInfo) GetLastSentById() uint32 {
+ if x != nil {
+ return x.LastSentById
+ }
+ return 0
+}
+
+func (x *NeighborInfo) GetNodeBroadcastIntervalSecs() uint32 {
+ if x != nil {
+ return x.NodeBroadcastIntervalSecs
+ }
+ return 0
+}
+
+func (x *NeighborInfo) GetNeighbors() []*Neighbor {
+ if x != nil {
+ return x.Neighbors
+ }
+ return nil
+}
+
+// A single edge in the mesh
+type Neighbor struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Node ID of neighbor
+ NodeId uint32 `protobuf:"varint,1,opt,name=node_id,json=nodeId,proto3" json:"nodeId,omitempty"`
+ // SNR of last heard message
+ Snr float32 `protobuf:"fixed32,2,opt,name=snr,proto3" json:"snr,omitempty"`
+ // Reception time (in secs since 1970) of last message that was last sent by this ID.
+ // Note: this is for local storage only and will not be sent out over the mesh.
+ LastRxTime uint32 `protobuf:"fixed32,3,opt,name=last_rx_time,json=lastRxTime,proto3" json:"lastRxTime,omitempty"`
+ // Broadcast interval of this neighbor (in seconds).
+ // Note: this is for local storage only and will not be sent out over the mesh.
+ NodeBroadcastIntervalSecs uint32 `protobuf:"varint,4,opt,name=node_broadcast_interval_secs,json=nodeBroadcastIntervalSecs,proto3" json:"nodeBroadcastIntervalSecs,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Neighbor) Reset() {
+ *x = Neighbor{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[26]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Neighbor) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Neighbor) ProtoMessage() {}
+
+func (x *Neighbor) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[26]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Neighbor.ProtoReflect.Descriptor instead.
+func (*Neighbor) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{26}
+}
+
+func (x *Neighbor) GetNodeId() uint32 {
+ if x != nil {
+ return x.NodeId
+ }
+ return 0
+}
+
+func (x *Neighbor) GetSnr() float32 {
+ if x != nil {
+ return x.Snr
+ }
+ return 0
+}
+
+func (x *Neighbor) GetLastRxTime() uint32 {
+ if x != nil {
+ return x.LastRxTime
+ }
+ return 0
+}
+
+func (x *Neighbor) GetNodeBroadcastIntervalSecs() uint32 {
+ if x != nil {
+ return x.NodeBroadcastIntervalSecs
+ }
+ return 0
+}
+
+// Device metadata response
+type DeviceMetadata struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Device firmware version string
+ FirmwareVersion string `protobuf:"bytes,1,opt,name=firmware_version,json=firmwareVersion,proto3" json:"firmwareVersion,omitempty"`
+ // Device state version
+ DeviceStateVersion uint32 `protobuf:"varint,2,opt,name=device_state_version,json=deviceStateVersion,proto3" json:"deviceStateVersion,omitempty"`
+ // Indicates whether the device can shutdown CPU natively or via power management chip
+ CanShutdown bool `protobuf:"varint,3,opt,name=canShutdown,proto3" json:"canShutdown,omitempty"`
+ // Indicates that the device has native wifi capability
+ HasWifi bool `protobuf:"varint,4,opt,name=hasWifi,proto3" json:"hasWifi,omitempty"`
+ // Indicates that the device has native bluetooth capability
+ HasBluetooth bool `protobuf:"varint,5,opt,name=hasBluetooth,proto3" json:"hasBluetooth,omitempty"`
+ // Indicates that the device has an ethernet peripheral
+ HasEthernet bool `protobuf:"varint,6,opt,name=hasEthernet,proto3" json:"hasEthernet,omitempty"`
+ // Indicates that the device's role in the mesh
+ Role Config_DeviceConfig_Role `protobuf:"varint,7,opt,name=role,proto3,enum=meshtastic.Config_DeviceConfig_Role" json:"role,omitempty"`
+ // Indicates the device's current enabled position flags
+ PositionFlags uint32 `protobuf:"varint,8,opt,name=position_flags,json=positionFlags,proto3" json:"positionFlags,omitempty"`
+ // Device hardware model
+ HwModel HardwareModel `protobuf:"varint,9,opt,name=hw_model,json=hwModel,proto3,enum=meshtastic.HardwareModel" json:"hwModel,omitempty"`
+ // Has Remote Hardware enabled
+ HasRemoteHardware bool `protobuf:"varint,10,opt,name=hasRemoteHardware,proto3" json:"hasRemoteHardware,omitempty"`
+ // Has PKC capabilities
+ HasPKC bool `protobuf:"varint,11,opt,name=hasPKC,proto3" json:"hasPKC,omitempty"`
+ // Bit field of boolean for excluded modules
+ // (bitwise OR of ExcludedModules)
+ ExcludedModules uint32 `protobuf:"varint,12,opt,name=excluded_modules,json=excludedModules,proto3" json:"excludedModules,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *DeviceMetadata) Reset() {
+ *x = DeviceMetadata{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[27]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *DeviceMetadata) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeviceMetadata) ProtoMessage() {}
+
+func (x *DeviceMetadata) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[27]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DeviceMetadata.ProtoReflect.Descriptor instead.
+func (*DeviceMetadata) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{27}
+}
+
+func (x *DeviceMetadata) GetFirmwareVersion() string {
+ if x != nil {
+ return x.FirmwareVersion
+ }
+ return ""
+}
+
+func (x *DeviceMetadata) GetDeviceStateVersion() uint32 {
+ if x != nil {
+ return x.DeviceStateVersion
+ }
+ return 0
+}
+
+func (x *DeviceMetadata) GetCanShutdown() bool {
+ if x != nil {
+ return x.CanShutdown
+ }
+ return false
+}
+
+func (x *DeviceMetadata) GetHasWifi() bool {
+ if x != nil {
+ return x.HasWifi
+ }
+ return false
+}
+
+func (x *DeviceMetadata) GetHasBluetooth() bool {
+ if x != nil {
+ return x.HasBluetooth
+ }
+ return false
+}
+
+func (x *DeviceMetadata) GetHasEthernet() bool {
+ if x != nil {
+ return x.HasEthernet
+ }
+ return false
+}
+
+func (x *DeviceMetadata) GetRole() Config_DeviceConfig_Role {
+ if x != nil {
+ return x.Role
+ }
+ return Config_DeviceConfig_CLIENT
+}
+
+func (x *DeviceMetadata) GetPositionFlags() uint32 {
+ if x != nil {
+ return x.PositionFlags
+ }
+ return 0
+}
+
+func (x *DeviceMetadata) GetHwModel() HardwareModel {
+ if x != nil {
+ return x.HwModel
+ }
+ return HardwareModel_UNSET
+}
+
+func (x *DeviceMetadata) GetHasRemoteHardware() bool {
+ if x != nil {
+ return x.HasRemoteHardware
+ }
+ return false
+}
+
+func (x *DeviceMetadata) GetHasPKC() bool {
+ if x != nil {
+ return x.HasPKC
+ }
+ return false
+}
+
+func (x *DeviceMetadata) GetExcludedModules() uint32 {
+ if x != nil {
+ return x.ExcludedModules
+ }
+ return 0
+}
+
+// A heartbeat message is sent to the node from the client to keep the connection alive.
+// This is currently only needed to keep serial connections alive, but can be used by any PhoneAPI.
+type Heartbeat struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The nonce of the heartbeat message
+ Nonce uint32 `protobuf:"varint,1,opt,name=nonce,proto3" json:"nonce,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Heartbeat) Reset() {
+ *x = Heartbeat{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[28]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Heartbeat) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Heartbeat) ProtoMessage() {}
+
+func (x *Heartbeat) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[28]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Heartbeat.ProtoReflect.Descriptor instead.
+func (*Heartbeat) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{28}
+}
+
+func (x *Heartbeat) GetNonce() uint32 {
+ if x != nil {
+ return x.Nonce
+ }
+ return 0
+}
+
+// RemoteHardwarePins associated with a node
+type NodeRemoteHardwarePin struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The node_num exposing the available gpio pin
+ NodeNum uint32 `protobuf:"varint,1,opt,name=node_num,json=nodeNum,proto3" json:"nodeNum,omitempty"`
+ // The the available gpio pin for usage with RemoteHardware module
+ Pin *RemoteHardwarePin `protobuf:"bytes,2,opt,name=pin,proto3" json:"pin,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *NodeRemoteHardwarePin) Reset() {
+ *x = NodeRemoteHardwarePin{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[29]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *NodeRemoteHardwarePin) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NodeRemoteHardwarePin) ProtoMessage() {}
+
+func (x *NodeRemoteHardwarePin) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[29]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use NodeRemoteHardwarePin.ProtoReflect.Descriptor instead.
+func (*NodeRemoteHardwarePin) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{29}
+}
+
+func (x *NodeRemoteHardwarePin) GetNodeNum() uint32 {
+ if x != nil {
+ return x.NodeNum
+ }
+ return 0
+}
+
+func (x *NodeRemoteHardwarePin) GetPin() *RemoteHardwarePin {
+ if x != nil {
+ return x.Pin
+ }
+ return nil
+}
+
+type ChunkedPayload struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The ID of the entire payload
+ PayloadId uint32 `protobuf:"varint,1,opt,name=payload_id,json=payloadId,proto3" json:"payloadId,omitempty"`
+ // The total number of chunks in the payload
+ ChunkCount uint32 `protobuf:"varint,2,opt,name=chunk_count,json=chunkCount,proto3" json:"chunkCount,omitempty"`
+ // The current chunk index in the total
+ ChunkIndex uint32 `protobuf:"varint,3,opt,name=chunk_index,json=chunkIndex,proto3" json:"chunkIndex,omitempty"`
+ // The binary data of the current chunk
+ PayloadChunk []byte `protobuf:"bytes,4,opt,name=payload_chunk,json=payloadChunk,proto3" json:"payloadChunk,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ChunkedPayload) Reset() {
+ *x = ChunkedPayload{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[30]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ChunkedPayload) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ChunkedPayload) ProtoMessage() {}
+
+func (x *ChunkedPayload) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[30]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ChunkedPayload.ProtoReflect.Descriptor instead.
+func (*ChunkedPayload) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{30}
+}
+
+func (x *ChunkedPayload) GetPayloadId() uint32 {
+ if x != nil {
+ return x.PayloadId
+ }
+ return 0
+}
+
+func (x *ChunkedPayload) GetChunkCount() uint32 {
+ if x != nil {
+ return x.ChunkCount
+ }
+ return 0
+}
+
+func (x *ChunkedPayload) GetChunkIndex() uint32 {
+ if x != nil {
+ return x.ChunkIndex
+ }
+ return 0
+}
+
+func (x *ChunkedPayload) GetPayloadChunk() []byte {
+ if x != nil {
+ return x.PayloadChunk
+ }
+ return nil
+}
+
+// Wrapper message for broken repeated oneof support
+type ResendChunks struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Chunks []uint32 `protobuf:"varint,1,rep,packed,name=chunks,proto3" json:"chunks,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ResendChunks) Reset() {
+ *x = ResendChunks{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[31]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ResendChunks) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ResendChunks) ProtoMessage() {}
+
+func (x *ResendChunks) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[31]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ResendChunks.ProtoReflect.Descriptor instead.
+func (*ResendChunks) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{31}
+}
+
+func (x *ResendChunks) GetChunks() []uint32 {
+ if x != nil {
+ return x.Chunks
+ }
+ return nil
+}
+
+// Responses to a ChunkedPayload request
+type ChunkedPayloadResponse struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The ID of the entire payload
+ PayloadId uint32 `protobuf:"varint,1,opt,name=payload_id,json=payloadId,proto3" json:"payloadId,omitempty"`
+ // Types that are valid to be assigned to PayloadVariant:
+ //
+ // *ChunkedPayloadResponse_RequestTransfer
+ // *ChunkedPayloadResponse_AcceptTransfer
+ // *ChunkedPayloadResponse_ResendChunks
+ PayloadVariant isChunkedPayloadResponse_PayloadVariant `protobuf_oneof:"payload_variant"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ChunkedPayloadResponse) Reset() {
+ *x = ChunkedPayloadResponse{}
+ mi := &file_meshtastic_mesh_proto_msgTypes[32]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ChunkedPayloadResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ChunkedPayloadResponse) ProtoMessage() {}
+
+func (x *ChunkedPayloadResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mesh_proto_msgTypes[32]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ChunkedPayloadResponse.ProtoReflect.Descriptor instead.
+func (*ChunkedPayloadResponse) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mesh_proto_rawDescGZIP(), []int{32}
+}
+
+func (x *ChunkedPayloadResponse) GetPayloadId() uint32 {
+ if x != nil {
+ return x.PayloadId
+ }
+ return 0
+}
+
+func (x *ChunkedPayloadResponse) GetPayloadVariant() isChunkedPayloadResponse_PayloadVariant {
+ if x != nil {
+ return x.PayloadVariant
+ }
+ return nil
+}
+
+func (x *ChunkedPayloadResponse) GetRequestTransfer() bool {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ChunkedPayloadResponse_RequestTransfer); ok {
+ return x.RequestTransfer
+ }
+ }
+ return false
+}
+
+func (x *ChunkedPayloadResponse) GetAcceptTransfer() bool {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ChunkedPayloadResponse_AcceptTransfer); ok {
+ return x.AcceptTransfer
+ }
+ }
+ return false
+}
+
+func (x *ChunkedPayloadResponse) GetResendChunks() *ResendChunks {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ChunkedPayloadResponse_ResendChunks); ok {
+ return x.ResendChunks
+ }
+ }
+ return nil
+}
+
+type isChunkedPayloadResponse_PayloadVariant interface {
+ isChunkedPayloadResponse_PayloadVariant()
+}
+
+type ChunkedPayloadResponse_RequestTransfer struct {
+ // Request to transfer chunked payload
+ RequestTransfer bool `protobuf:"varint,2,opt,name=request_transfer,json=requestTransfer,proto3,oneof"`
+}
+
+type ChunkedPayloadResponse_AcceptTransfer struct {
+ // Accept the transfer chunked payload
+ AcceptTransfer bool `protobuf:"varint,3,opt,name=accept_transfer,json=acceptTransfer,proto3,oneof"`
+}
+
+type ChunkedPayloadResponse_ResendChunks struct {
+ // Request missing indexes in the chunked payload
+ ResendChunks *ResendChunks `protobuf:"bytes,4,opt,name=resend_chunks,json=resendChunks,proto3,oneof"`
+}
+
+func (*ChunkedPayloadResponse_RequestTransfer) isChunkedPayloadResponse_PayloadVariant() {}
+
+func (*ChunkedPayloadResponse_AcceptTransfer) isChunkedPayloadResponse_PayloadVariant() {}
+
+func (*ChunkedPayloadResponse_ResendChunks) isChunkedPayloadResponse_PayloadVariant() {}
+
+var File_meshtastic_mesh_proto protoreflect.FileDescriptor
+
+const file_meshtastic_mesh_proto_rawDesc = "" +
+ "\n" +
+ "\x15meshtastic/mesh.proto\x12\n" +
+ "meshtastic\x1a\x18meshtastic/channel.proto\x1a\x17meshtastic/config.proto\x1a\x1ameshtastic/device_ui.proto\x1a\x1emeshtastic/module_config.proto\x1a\x19meshtastic/portnums.proto\x1a\x1ameshtastic/telemetry.proto\x1a\x17meshtastic/xmodem.proto\"\xa2\t\n" +
+ "\bPosition\x12\"\n" +
+ "\n" +
+ "latitude_i\x18\x01 \x01(\x0fH\x00R\tlatitudeI\x88\x01\x01\x12$\n" +
+ "\vlongitude_i\x18\x02 \x01(\x0fH\x01R\n" +
+ "longitudeI\x88\x01\x01\x12\x1f\n" +
+ "\baltitude\x18\x03 \x01(\x05H\x02R\baltitude\x88\x01\x01\x12\x12\n" +
+ "\x04time\x18\x04 \x01(\aR\x04time\x12G\n" +
+ "\x0flocation_source\x18\x05 \x01(\x0e2\x1e.meshtastic.Position.LocSourceR\x0elocationSource\x12G\n" +
+ "\x0faltitude_source\x18\x06 \x01(\x0e2\x1e.meshtastic.Position.AltSourceR\x0ealtitudeSource\x12\x1c\n" +
+ "\ttimestamp\x18\a \x01(\aR\ttimestamp\x126\n" +
+ "\x17timestamp_millis_adjust\x18\b \x01(\x05R\x15timestampMillisAdjust\x12&\n" +
+ "\faltitude_hae\x18\t \x01(\x11H\x03R\valtitudeHae\x88\x01\x01\x12C\n" +
+ "\x1baltitude_geoidal_separation\x18\n" +
+ " \x01(\x11H\x04R\x19altitudeGeoidalSeparation\x88\x01\x01\x12\x12\n" +
+ "\x04PDOP\x18\v \x01(\rR\x04PDOP\x12\x12\n" +
+ "\x04HDOP\x18\f \x01(\rR\x04HDOP\x12\x12\n" +
+ "\x04VDOP\x18\r \x01(\rR\x04VDOP\x12!\n" +
+ "\fgps_accuracy\x18\x0e \x01(\rR\vgpsAccuracy\x12&\n" +
+ "\fground_speed\x18\x0f \x01(\rH\x05R\vgroundSpeed\x88\x01\x01\x12&\n" +
+ "\fground_track\x18\x10 \x01(\rH\x06R\vgroundTrack\x88\x01\x01\x12\x1f\n" +
+ "\vfix_quality\x18\x11 \x01(\rR\n" +
+ "fixQuality\x12\x19\n" +
+ "\bfix_type\x18\x12 \x01(\rR\afixType\x12 \n" +
+ "\fsats_in_view\x18\x13 \x01(\rR\n" +
+ "satsInView\x12\x1b\n" +
+ "\tsensor_id\x18\x14 \x01(\rR\bsensorId\x12\x1f\n" +
+ "\vnext_update\x18\x15 \x01(\rR\n" +
+ "nextUpdate\x12\x1d\n" +
+ "\n" +
+ "seq_number\x18\x16 \x01(\rR\tseqNumber\x12%\n" +
+ "\x0eprecision_bits\x18\x17 \x01(\rR\rprecisionBits\"N\n" +
+ "\tLocSource\x12\r\n" +
+ "\tLOC_UNSET\x10\x00\x12\x0e\n" +
+ "\n" +
+ "LOC_MANUAL\x10\x01\x12\x10\n" +
+ "\fLOC_INTERNAL\x10\x02\x12\x10\n" +
+ "\fLOC_EXTERNAL\x10\x03\"b\n" +
+ "\tAltSource\x12\r\n" +
+ "\tALT_UNSET\x10\x00\x12\x0e\n" +
+ "\n" +
+ "ALT_MANUAL\x10\x01\x12\x10\n" +
+ "\fALT_INTERNAL\x10\x02\x12\x10\n" +
+ "\fALT_EXTERNAL\x10\x03\x12\x12\n" +
+ "\x0eALT_BAROMETRIC\x10\x04B\r\n" +
+ "\v_latitude_iB\x0e\n" +
+ "\f_longitude_iB\v\n" +
+ "\t_altitudeB\x0f\n" +
+ "\r_altitude_haeB\x1e\n" +
+ "\x1c_altitude_geoidal_separationB\x0f\n" +
+ "\r_ground_speedB\x0f\n" +
+ "\r_ground_track\"\xe2\x02\n" +
+ "\x04User\x12\x0e\n" +
+ "\x02id\x18\x01 \x01(\tR\x02id\x12\x1b\n" +
+ "\tlong_name\x18\x02 \x01(\tR\blongName\x12\x1d\n" +
+ "\n" +
+ "short_name\x18\x03 \x01(\tR\tshortName\x12\x1c\n" +
+ "\amacaddr\x18\x04 \x01(\fB\x02\x18\x01R\amacaddr\x124\n" +
+ "\bhw_model\x18\x05 \x01(\x0e2\x19.meshtastic.HardwareModelR\ahwModel\x12\x1f\n" +
+ "\vis_licensed\x18\x06 \x01(\bR\n" +
+ "isLicensed\x128\n" +
+ "\x04role\x18\a \x01(\x0e2$.meshtastic.Config.DeviceConfig.RoleR\x04role\x12\x1d\n" +
+ "\n" +
+ "public_key\x18\b \x01(\fR\tpublicKey\x12,\n" +
+ "\x0fis_unmessagable\x18\t \x01(\bH\x00R\x0eisUnmessagable\x88\x01\x01B\x12\n" +
+ "\x10_is_unmessagable\"\x81\x01\n" +
+ "\x0eRouteDiscovery\x12\x14\n" +
+ "\x05route\x18\x01 \x03(\aR\x05route\x12\x1f\n" +
+ "\vsnr_towards\x18\x02 \x03(\x05R\n" +
+ "snrTowards\x12\x1d\n" +
+ "\n" +
+ "route_back\x18\x03 \x03(\aR\trouteBack\x12\x19\n" +
+ "\bsnr_back\x18\x04 \x03(\x05R\asnrBack\"\xc0\x04\n" +
+ "\aRouting\x12A\n" +
+ "\rroute_request\x18\x01 \x01(\v2\x1a.meshtastic.RouteDiscoveryH\x00R\frouteRequest\x12=\n" +
+ "\vroute_reply\x18\x02 \x01(\v2\x1a.meshtastic.RouteDiscoveryH\x00R\n" +
+ "routeReply\x12>\n" +
+ "\ferror_reason\x18\x03 \x01(\x0e2\x19.meshtastic.Routing.ErrorH\x00R\verrorReason\"\xe7\x02\n" +
+ "\x05Error\x12\b\n" +
+ "\x04NONE\x10\x00\x12\f\n" +
+ "\bNO_ROUTE\x10\x01\x12\v\n" +
+ "\aGOT_NAK\x10\x02\x12\v\n" +
+ "\aTIMEOUT\x10\x03\x12\x10\n" +
+ "\fNO_INTERFACE\x10\x04\x12\x12\n" +
+ "\x0eMAX_RETRANSMIT\x10\x05\x12\x0e\n" +
+ "\n" +
+ "NO_CHANNEL\x10\x06\x12\r\n" +
+ "\tTOO_LARGE\x10\a\x12\x0f\n" +
+ "\vNO_RESPONSE\x10\b\x12\x14\n" +
+ "\x10DUTY_CYCLE_LIMIT\x10\t\x12\x0f\n" +
+ "\vBAD_REQUEST\x10 \x12\x12\n" +
+ "\x0eNOT_AUTHORIZED\x10!\x12\x0e\n" +
+ "\n" +
+ "PKI_FAILED\x10\"\x12\x16\n" +
+ "\x12PKI_UNKNOWN_PUBKEY\x10#\x12\x19\n" +
+ "\x15ADMIN_BAD_SESSION_KEY\x10$\x12!\n" +
+ "\x1dADMIN_PUBLIC_KEY_UNAUTHORIZED\x10%\x12\x17\n" +
+ "\x13RATE_LIMIT_EXCEEDED\x10&\x12\x1c\n" +
+ "\x18PKI_SEND_FAIL_PUBLIC_KEY\x10'B\t\n" +
+ "\avariant\"\x9e\x02\n" +
+ "\x04Data\x12-\n" +
+ "\aportnum\x18\x01 \x01(\x0e2\x13.meshtastic.PortNumR\aportnum\x12\x18\n" +
+ "\apayload\x18\x02 \x01(\fR\apayload\x12#\n" +
+ "\rwant_response\x18\x03 \x01(\bR\fwantResponse\x12\x12\n" +
+ "\x04dest\x18\x04 \x01(\aR\x04dest\x12\x16\n" +
+ "\x06source\x18\x05 \x01(\aR\x06source\x12\x1d\n" +
+ "\n" +
+ "request_id\x18\x06 \x01(\aR\trequestId\x12\x19\n" +
+ "\breply_id\x18\a \x01(\aR\areplyId\x12\x14\n" +
+ "\x05emoji\x18\b \x01(\aR\x05emoji\x12\x1f\n" +
+ "\bbitfield\x18\t \x01(\rH\x00R\bbitfield\x88\x01\x01B\v\n" +
+ "\t_bitfield\"S\n" +
+ "\x0fKeyVerification\x12\x14\n" +
+ "\x05nonce\x18\x01 \x01(\x04R\x05nonce\x12\x14\n" +
+ "\x05hash1\x18\x02 \x01(\fR\x05hash1\x12\x14\n" +
+ "\x05hash2\x18\x03 \x01(\fR\x05hash2\"\xda\x04\n" +
+ "\x14StoreForwardPlusPlus\x12^\n" +
+ "\x11sfpp_message_type\x18\x01 \x01(\x0e22.meshtastic.StoreForwardPlusPlus.SFPP_message_typeR\x0fsfppMessageType\x12!\n" +
+ "\fmessage_hash\x18\x02 \x01(\fR\vmessageHash\x12\x1f\n" +
+ "\vcommit_hash\x18\x03 \x01(\fR\n" +
+ "commitHash\x12\x1b\n" +
+ "\troot_hash\x18\x04 \x01(\fR\brootHash\x12\x18\n" +
+ "\amessage\x18\x05 \x01(\fR\amessage\x12'\n" +
+ "\x0fencapsulated_id\x18\x06 \x01(\rR\x0eencapsulatedId\x12'\n" +
+ "\x0fencapsulated_to\x18\a \x01(\rR\x0eencapsulatedTo\x12+\n" +
+ "\x11encapsulated_from\x18\b \x01(\rR\x10encapsulatedFrom\x12/\n" +
+ "\x13encapsulated_rxtime\x18\t \x01(\rR\x12encapsulatedRxtime\x12\x1f\n" +
+ "\vchain_count\x18\n" +
+ " \x01(\rR\n" +
+ "chainCount\"\x95\x01\n" +
+ "\x11SFPP_message_type\x12\x12\n" +
+ "\x0eCANON_ANNOUNCE\x10\x00\x12\x0f\n" +
+ "\vCHAIN_QUERY\x10\x01\x12\x10\n" +
+ "\fLINK_REQUEST\x10\x03\x12\x10\n" +
+ "\fLINK_PROVIDE\x10\x04\x12\x1a\n" +
+ "\x16LINK_PROVIDE_FIRSTHALF\x10\x05\x12\x1b\n" +
+ "\x17LINK_PROVIDE_SECONDHALF\x10\x06\"\x82\x02\n" +
+ "\bWaypoint\x12\x0e\n" +
+ "\x02id\x18\x01 \x01(\rR\x02id\x12\"\n" +
+ "\n" +
+ "latitude_i\x18\x02 \x01(\x0fH\x00R\tlatitudeI\x88\x01\x01\x12$\n" +
+ "\vlongitude_i\x18\x03 \x01(\x0fH\x01R\n" +
+ "longitudeI\x88\x01\x01\x12\x16\n" +
+ "\x06expire\x18\x04 \x01(\rR\x06expire\x12\x1b\n" +
+ "\tlocked_to\x18\x05 \x01(\rR\blockedTo\x12\x12\n" +
+ "\x04name\x18\x06 \x01(\tR\x04name\x12 \n" +
+ "\vdescription\x18\a \x01(\tR\vdescription\x12\x12\n" +
+ "\x04icon\x18\b \x01(\aR\x04iconB\r\n" +
+ "\v_latitude_iB\x0e\n" +
+ "\f_longitude_i\"'\n" +
+ "\rStatusMessage\x12\x16\n" +
+ "\x06status\x18\x01 \x01(\tR\x06status\"\x89\x01\n" +
+ "\x16MqttClientProxyMessage\x12\x14\n" +
+ "\x05topic\x18\x01 \x01(\tR\x05topic\x12\x14\n" +
+ "\x04data\x18\x02 \x01(\fH\x00R\x04data\x12\x14\n" +
+ "\x04text\x18\x03 \x01(\tH\x00R\x04text\x12\x1a\n" +
+ "\bretained\x18\x04 \x01(\bR\bretainedB\x11\n" +
+ "\x0fpayload_variant\"\xfa\b\n" +
+ "\n" +
+ "MeshPacket\x12\x12\n" +
+ "\x04from\x18\x01 \x01(\aR\x04from\x12\x0e\n" +
+ "\x02to\x18\x02 \x01(\aR\x02to\x12\x18\n" +
+ "\achannel\x18\x03 \x01(\rR\achannel\x12,\n" +
+ "\adecoded\x18\x04 \x01(\v2\x10.meshtastic.DataH\x00R\adecoded\x12\x1e\n" +
+ "\tencrypted\x18\x05 \x01(\fH\x00R\tencrypted\x12\x0e\n" +
+ "\x02id\x18\x06 \x01(\aR\x02id\x12\x17\n" +
+ "\arx_time\x18\a \x01(\aR\x06rxTime\x12\x15\n" +
+ "\x06rx_snr\x18\b \x01(\x02R\x05rxSnr\x12\x1b\n" +
+ "\thop_limit\x18\t \x01(\rR\bhopLimit\x12\x19\n" +
+ "\bwant_ack\x18\n" +
+ " \x01(\bR\awantAck\x12;\n" +
+ "\bpriority\x18\v \x01(\x0e2\x1f.meshtastic.MeshPacket.PriorityR\bpriority\x12\x17\n" +
+ "\arx_rssi\x18\f \x01(\x05R\x06rxRssi\x12<\n" +
+ "\adelayed\x18\r \x01(\x0e2\x1e.meshtastic.MeshPacket.DelayedB\x02\x18\x01R\adelayed\x12\x19\n" +
+ "\bvia_mqtt\x18\x0e \x01(\bR\aviaMqtt\x12\x1b\n" +
+ "\thop_start\x18\x0f \x01(\rR\bhopStart\x12\x1d\n" +
+ "\n" +
+ "public_key\x18\x10 \x01(\fR\tpublicKey\x12#\n" +
+ "\rpki_encrypted\x18\x11 \x01(\bR\fpkiEncrypted\x12\x19\n" +
+ "\bnext_hop\x18\x12 \x01(\rR\anextHop\x12\x1d\n" +
+ "\n" +
+ "relay_node\x18\x13 \x01(\rR\trelayNode\x12\x19\n" +
+ "\btx_after\x18\x14 \x01(\rR\atxAfter\x12Z\n" +
+ "\x13transport_mechanism\x18\x15 \x01(\x0e2).meshtastic.MeshPacket.TransportMechanismR\x12transportMechanism\"~\n" +
+ "\bPriority\x12\t\n" +
+ "\x05UNSET\x10\x00\x12\a\n" +
+ "\x03MIN\x10\x01\x12\x0e\n" +
+ "\n" +
+ "BACKGROUND\x10\n" +
+ "\x12\v\n" +
+ "\aDEFAULT\x10@\x12\f\n" +
+ "\bRELIABLE\x10F\x12\f\n" +
+ "\bRESPONSE\x10P\x12\b\n" +
+ "\x04HIGH\x10d\x12\t\n" +
+ "\x05ALERT\x10n\x12\a\n" +
+ "\x03ACK\x10x\x12\a\n" +
+ "\x03MAX\x10\x7f\"B\n" +
+ "\aDelayed\x12\f\n" +
+ "\bNO_DELAY\x10\x00\x12\x15\n" +
+ "\x11DELAYED_BROADCAST\x10\x01\x12\x12\n" +
+ "\x0eDELAYED_DIRECT\x10\x02\"\xcf\x01\n" +
+ "\x12TransportMechanism\x12\x16\n" +
+ "\x12TRANSPORT_INTERNAL\x10\x00\x12\x12\n" +
+ "\x0eTRANSPORT_LORA\x10\x01\x12\x17\n" +
+ "\x13TRANSPORT_LORA_ALT1\x10\x02\x12\x17\n" +
+ "\x13TRANSPORT_LORA_ALT2\x10\x03\x12\x17\n" +
+ "\x13TRANSPORT_LORA_ALT3\x10\x04\x12\x12\n" +
+ "\x0eTRANSPORT_MQTT\x10\x05\x12\x1b\n" +
+ "\x17TRANSPORT_MULTICAST_UDP\x10\x06\x12\x11\n" +
+ "\rTRANSPORT_API\x10\aB\x11\n" +
+ "\x0fpayload_variant\"\xe0\x03\n" +
+ "\bNodeInfo\x12\x10\n" +
+ "\x03num\x18\x01 \x01(\rR\x03num\x12$\n" +
+ "\x04user\x18\x02 \x01(\v2\x10.meshtastic.UserR\x04user\x120\n" +
+ "\bposition\x18\x03 \x01(\v2\x14.meshtastic.PositionR\bposition\x12\x10\n" +
+ "\x03snr\x18\x04 \x01(\x02R\x03snr\x12\x1d\n" +
+ "\n" +
+ "last_heard\x18\x05 \x01(\aR\tlastHeard\x12@\n" +
+ "\x0edevice_metrics\x18\x06 \x01(\v2\x19.meshtastic.DeviceMetricsR\rdeviceMetrics\x12\x18\n" +
+ "\achannel\x18\a \x01(\rR\achannel\x12\x19\n" +
+ "\bvia_mqtt\x18\b \x01(\bR\aviaMqtt\x12 \n" +
+ "\thops_away\x18\t \x01(\rH\x00R\bhopsAway\x88\x01\x01\x12\x1f\n" +
+ "\vis_favorite\x18\n" +
+ " \x01(\bR\n" +
+ "isFavorite\x12\x1d\n" +
+ "\n" +
+ "is_ignored\x18\v \x01(\bR\tisIgnored\x127\n" +
+ "\x18is_key_manually_verified\x18\f \x01(\bR\x15isKeyManuallyVerified\x12\x19\n" +
+ "\bis_muted\x18\r \x01(\bR\aisMutedB\f\n" +
+ "\n" +
+ "_hops_away\"\x98\x02\n" +
+ "\n" +
+ "MyNodeInfo\x12\x1e\n" +
+ "\vmy_node_num\x18\x01 \x01(\rR\tmyNodeNum\x12!\n" +
+ "\freboot_count\x18\b \x01(\rR\vrebootCount\x12&\n" +
+ "\x0fmin_app_version\x18\v \x01(\rR\rminAppVersion\x12\x1b\n" +
+ "\tdevice_id\x18\f \x01(\fR\bdeviceId\x12\x17\n" +
+ "\apio_env\x18\r \x01(\tR\x06pioEnv\x12F\n" +
+ "\x10firmware_edition\x18\x0e \x01(\x0e2\x1b.meshtastic.FirmwareEditionR\x0ffirmwareEdition\x12!\n" +
+ "\fnodedb_count\x18\x0f \x01(\rR\vnodedbCount\"\xde\x01\n" +
+ "\tLogRecord\x12\x18\n" +
+ "\amessage\x18\x01 \x01(\tR\amessage\x12\x12\n" +
+ "\x04time\x18\x02 \x01(\aR\x04time\x12\x16\n" +
+ "\x06source\x18\x03 \x01(\tR\x06source\x121\n" +
+ "\x05level\x18\x04 \x01(\x0e2\x1b.meshtastic.LogRecord.LevelR\x05level\"X\n" +
+ "\x05Level\x12\t\n" +
+ "\x05UNSET\x10\x00\x12\f\n" +
+ "\bCRITICAL\x102\x12\t\n" +
+ "\x05ERROR\x10(\x12\v\n" +
+ "\aWARNING\x10\x1e\x12\b\n" +
+ "\x04INFO\x10\x14\x12\t\n" +
+ "\x05DEBUG\x10\n" +
+ "\x12\t\n" +
+ "\x05TRACE\x10\x05\"q\n" +
+ "\vQueueStatus\x12\x10\n" +
+ "\x03res\x18\x01 \x01(\x05R\x03res\x12\x12\n" +
+ "\x04free\x18\x02 \x01(\rR\x04free\x12\x16\n" +
+ "\x06maxlen\x18\x03 \x01(\rR\x06maxlen\x12$\n" +
+ "\x0emesh_packet_id\x18\x04 \x01(\rR\fmeshPacketId\"\xc8\a\n" +
+ "\tFromRadio\x12\x0e\n" +
+ "\x02id\x18\x01 \x01(\rR\x02id\x120\n" +
+ "\x06packet\x18\x02 \x01(\v2\x16.meshtastic.MeshPacketH\x00R\x06packet\x121\n" +
+ "\amy_info\x18\x03 \x01(\v2\x16.meshtastic.MyNodeInfoH\x00R\x06myInfo\x123\n" +
+ "\tnode_info\x18\x04 \x01(\v2\x14.meshtastic.NodeInfoH\x00R\bnodeInfo\x12,\n" +
+ "\x06config\x18\x05 \x01(\v2\x12.meshtastic.ConfigH\x00R\x06config\x126\n" +
+ "\n" +
+ "log_record\x18\x06 \x01(\v2\x15.meshtastic.LogRecordH\x00R\tlogRecord\x12.\n" +
+ "\x12config_complete_id\x18\a \x01(\rH\x00R\x10configCompleteId\x12\x1c\n" +
+ "\brebooted\x18\b \x01(\bH\x00R\brebooted\x12>\n" +
+ "\fmoduleConfig\x18\t \x01(\v2\x18.meshtastic.ModuleConfigH\x00R\fmoduleConfig\x12/\n" +
+ "\achannel\x18\n" +
+ " \x01(\v2\x13.meshtastic.ChannelH\x00R\achannel\x12;\n" +
+ "\vqueueStatus\x18\v \x01(\v2\x17.meshtastic.QueueStatusH\x00R\vqueueStatus\x128\n" +
+ "\fxmodemPacket\x18\f \x01(\v2\x12.meshtastic.XModemH\x00R\fxmodemPacket\x128\n" +
+ "\bmetadata\x18\r \x01(\v2\x1a.meshtastic.DeviceMetadataH\x00R\bmetadata\x12\\\n" +
+ "\x16mqttClientProxyMessage\x18\x0e \x01(\v2\".meshtastic.MqttClientProxyMessageH\x00R\x16mqttClientProxyMessage\x122\n" +
+ "\bfileInfo\x18\x0f \x01(\v2\x14.meshtastic.FileInfoH\x00R\bfileInfo\x12P\n" +
+ "\x12clientNotification\x18\x10 \x01(\v2\x1e.meshtastic.ClientNotificationH\x00R\x12clientNotification\x12D\n" +
+ "\x0edeviceuiConfig\x18\x11 \x01(\v2\x1a.meshtastic.DeviceUIConfigH\x00R\x0edeviceuiConfigB\x11\n" +
+ "\x0fpayload_variant\"\x8e\x05\n" +
+ "\x12ClientNotification\x12\x1e\n" +
+ "\breply_id\x18\x01 \x01(\rH\x01R\areplyId\x88\x01\x01\x12\x12\n" +
+ "\x04time\x18\x02 \x01(\aR\x04time\x121\n" +
+ "\x05level\x18\x03 \x01(\x0e2\x1b.meshtastic.LogRecord.LevelR\x05level\x12\x18\n" +
+ "\amessage\x18\x04 \x01(\tR\amessage\x12n\n" +
+ "\x1ekey_verification_number_inform\x18\v \x01(\v2'.meshtastic.KeyVerificationNumberInformH\x00R\x1bkeyVerificationNumberInform\x12q\n" +
+ "\x1fkey_verification_number_request\x18\f \x01(\v2(.meshtastic.KeyVerificationNumberRequestH\x00R\x1ckeyVerificationNumberRequest\x12X\n" +
+ "\x16key_verification_final\x18\r \x01(\v2 .meshtastic.KeyVerificationFinalH\x00R\x14keyVerificationFinal\x12U\n" +
+ "\x15duplicated_public_key\x18\x0e \x01(\v2\x1f.meshtastic.DuplicatedPublicKeyH\x00R\x13duplicatedPublicKey\x12C\n" +
+ "\x0flow_entropy_key\x18\x0f \x01(\v2\x19.meshtastic.LowEntropyKeyH\x00R\rlowEntropyKeyB\x11\n" +
+ "\x0fpayload_variantB\v\n" +
+ "\t_reply_id\"\x85\x01\n" +
+ "\x1bKeyVerificationNumberInform\x12\x14\n" +
+ "\x05nonce\x18\x01 \x01(\x04R\x05nonce\x12'\n" +
+ "\x0fremote_longname\x18\x02 \x01(\tR\x0eremoteLongname\x12'\n" +
+ "\x0fsecurity_number\x18\x03 \x01(\rR\x0esecurityNumber\"]\n" +
+ "\x1cKeyVerificationNumberRequest\x12\x14\n" +
+ "\x05nonce\x18\x01 \x01(\x04R\x05nonce\x12'\n" +
+ "\x0fremote_longname\x18\x02 \x01(\tR\x0eremoteLongname\"\xaa\x01\n" +
+ "\x14KeyVerificationFinal\x12\x14\n" +
+ "\x05nonce\x18\x01 \x01(\x04R\x05nonce\x12'\n" +
+ "\x0fremote_longname\x18\x02 \x01(\tR\x0eremoteLongname\x12\x1a\n" +
+ "\bisSender\x18\x03 \x01(\bR\bisSender\x127\n" +
+ "\x17verification_characters\x18\x04 \x01(\tR\x16verificationCharacters\"\x15\n" +
+ "\x13DuplicatedPublicKey\"\x0f\n" +
+ "\rLowEntropyKey\"F\n" +
+ "\bFileInfo\x12\x1b\n" +
+ "\tfile_name\x18\x01 \x01(\tR\bfileName\x12\x1d\n" +
+ "\n" +
+ "size_bytes\x18\x02 \x01(\rR\tsizeBytes\"\xe7\x02\n" +
+ "\aToRadio\x120\n" +
+ "\x06packet\x18\x01 \x01(\v2\x16.meshtastic.MeshPacketH\x00R\x06packet\x12&\n" +
+ "\x0ewant_config_id\x18\x03 \x01(\rH\x00R\fwantConfigId\x12 \n" +
+ "\n" +
+ "disconnect\x18\x04 \x01(\bH\x00R\n" +
+ "disconnect\x128\n" +
+ "\fxmodemPacket\x18\x05 \x01(\v2\x12.meshtastic.XModemH\x00R\fxmodemPacket\x12\\\n" +
+ "\x16mqttClientProxyMessage\x18\x06 \x01(\v2\".meshtastic.MqttClientProxyMessageH\x00R\x16mqttClientProxyMessage\x125\n" +
+ "\theartbeat\x18\a \x01(\v2\x15.meshtastic.HeartbeatH\x00R\theartbeatB\x11\n" +
+ "\x0fpayload_variant\"O\n" +
+ "\n" +
+ "Compressed\x12-\n" +
+ "\aportnum\x18\x01 \x01(\x0e2\x13.meshtastic.PortNumR\aportnum\x12\x12\n" +
+ "\x04data\x18\x02 \x01(\fR\x04data\"\xc3\x01\n" +
+ "\fNeighborInfo\x12\x17\n" +
+ "\anode_id\x18\x01 \x01(\rR\x06nodeId\x12%\n" +
+ "\x0flast_sent_by_id\x18\x02 \x01(\rR\flastSentById\x12?\n" +
+ "\x1cnode_broadcast_interval_secs\x18\x03 \x01(\rR\x19nodeBroadcastIntervalSecs\x122\n" +
+ "\tneighbors\x18\x04 \x03(\v2\x14.meshtastic.NeighborR\tneighbors\"\x98\x01\n" +
+ "\bNeighbor\x12\x17\n" +
+ "\anode_id\x18\x01 \x01(\rR\x06nodeId\x12\x10\n" +
+ "\x03snr\x18\x02 \x01(\x02R\x03snr\x12 \n" +
+ "\flast_rx_time\x18\x03 \x01(\aR\n" +
+ "lastRxTime\x12?\n" +
+ "\x1cnode_broadcast_interval_secs\x18\x04 \x01(\rR\x19nodeBroadcastIntervalSecs\"\xf7\x03\n" +
+ "\x0eDeviceMetadata\x12)\n" +
+ "\x10firmware_version\x18\x01 \x01(\tR\x0ffirmwareVersion\x120\n" +
+ "\x14device_state_version\x18\x02 \x01(\rR\x12deviceStateVersion\x12 \n" +
+ "\vcanShutdown\x18\x03 \x01(\bR\vcanShutdown\x12\x18\n" +
+ "\ahasWifi\x18\x04 \x01(\bR\ahasWifi\x12\"\n" +
+ "\fhasBluetooth\x18\x05 \x01(\bR\fhasBluetooth\x12 \n" +
+ "\vhasEthernet\x18\x06 \x01(\bR\vhasEthernet\x128\n" +
+ "\x04role\x18\a \x01(\x0e2$.meshtastic.Config.DeviceConfig.RoleR\x04role\x12%\n" +
+ "\x0eposition_flags\x18\b \x01(\rR\rpositionFlags\x124\n" +
+ "\bhw_model\x18\t \x01(\x0e2\x19.meshtastic.HardwareModelR\ahwModel\x12,\n" +
+ "\x11hasRemoteHardware\x18\n" +
+ " \x01(\bR\x11hasRemoteHardware\x12\x16\n" +
+ "\x06hasPKC\x18\v \x01(\bR\x06hasPKC\x12)\n" +
+ "\x10excluded_modules\x18\f \x01(\rR\x0fexcludedModules\"!\n" +
+ "\tHeartbeat\x12\x14\n" +
+ "\x05nonce\x18\x01 \x01(\rR\x05nonce\"c\n" +
+ "\x15NodeRemoteHardwarePin\x12\x19\n" +
+ "\bnode_num\x18\x01 \x01(\rR\anodeNum\x12/\n" +
+ "\x03pin\x18\x02 \x01(\v2\x1d.meshtastic.RemoteHardwarePinR\x03pin\"\x96\x01\n" +
+ "\x0eChunkedPayload\x12\x1d\n" +
+ "\n" +
+ "payload_id\x18\x01 \x01(\rR\tpayloadId\x12\x1f\n" +
+ "\vchunk_count\x18\x02 \x01(\rR\n" +
+ "chunkCount\x12\x1f\n" +
+ "\vchunk_index\x18\x03 \x01(\rR\n" +
+ "chunkIndex\x12#\n" +
+ "\rpayload_chunk\x18\x04 \x01(\fR\fpayloadChunk\"'\n" +
+ "\rresend_chunks\x12\x16\n" +
+ "\x06chunks\x18\x01 \x03(\rR\x06chunks\"\xe4\x01\n" +
+ "\x16ChunkedPayloadResponse\x12\x1d\n" +
+ "\n" +
+ "payload_id\x18\x01 \x01(\rR\tpayloadId\x12+\n" +
+ "\x10request_transfer\x18\x02 \x01(\bH\x00R\x0frequestTransfer\x12)\n" +
+ "\x0faccept_transfer\x18\x03 \x01(\bH\x00R\x0eacceptTransfer\x12@\n" +
+ "\rresend_chunks\x18\x04 \x01(\v2\x19.meshtastic.resend_chunksH\x00R\fresendChunksB\x11\n" +
+ "\x0fpayload_variant*\xe6\x12\n" +
+ "\rHardwareModel\x12\t\n" +
+ "\x05UNSET\x10\x00\x12\f\n" +
+ "\bTLORA_V2\x10\x01\x12\f\n" +
+ "\bTLORA_V1\x10\x02\x12\x12\n" +
+ "\x0eTLORA_V2_1_1P6\x10\x03\x12\t\n" +
+ "\x05TBEAM\x10\x04\x12\x0f\n" +
+ "\vHELTEC_V2_0\x10\x05\x12\x0e\n" +
+ "\n" +
+ "TBEAM_V0P7\x10\x06\x12\n" +
+ "\n" +
+ "\x06T_ECHO\x10\a\x12\x10\n" +
+ "\fTLORA_V1_1P3\x10\b\x12\v\n" +
+ "\aRAK4631\x10\t\x12\x0f\n" +
+ "\vHELTEC_V2_1\x10\n" +
+ "\x12\r\n" +
+ "\tHELTEC_V1\x10\v\x12\x18\n" +
+ "\x14LILYGO_TBEAM_S3_CORE\x10\f\x12\f\n" +
+ "\bRAK11200\x10\r\x12\v\n" +
+ "\aNANO_G1\x10\x0e\x12\x12\n" +
+ "\x0eTLORA_V2_1_1P8\x10\x0f\x12\x0f\n" +
+ "\vTLORA_T3_S3\x10\x10\x12\x14\n" +
+ "\x10NANO_G1_EXPLORER\x10\x11\x12\x11\n" +
+ "\rNANO_G2_ULTRA\x10\x12\x12\r\n" +
+ "\tLORA_TYPE\x10\x13\x12\v\n" +
+ "\aWIPHONE\x10\x14\x12\x0e\n" +
+ "\n" +
+ "WIO_WM1110\x10\x15\x12\v\n" +
+ "\aRAK2560\x10\x16\x12\x13\n" +
+ "\x0fHELTEC_HRU_3601\x10\x17\x12\x1a\n" +
+ "\x16HELTEC_WIRELESS_BRIDGE\x10\x18\x12\x0e\n" +
+ "\n" +
+ "STATION_G1\x10\x19\x12\f\n" +
+ "\bRAK11310\x10\x1a\x12\x14\n" +
+ "\x10SENSELORA_RP2040\x10\x1b\x12\x10\n" +
+ "\fSENSELORA_S3\x10\x1c\x12\r\n" +
+ "\tCANARYONE\x10\x1d\x12\x0f\n" +
+ "\vRP2040_LORA\x10\x1e\x12\x0e\n" +
+ "\n" +
+ "STATION_G2\x10\x1f\x12\x11\n" +
+ "\rLORA_RELAY_V1\x10 \x12\x0f\n" +
+ "\vT_ECHO_PLUS\x10!\x12\a\n" +
+ "\x03PPR\x10\"\x12\x0f\n" +
+ "\vGENIEBLOCKS\x10#\x12\x11\n" +
+ "\rNRF52_UNKNOWN\x10$\x12\r\n" +
+ "\tPORTDUINO\x10%\x12\x0f\n" +
+ "\vANDROID_SIM\x10&\x12\n" +
+ "\n" +
+ "\x06DIY_V1\x10'\x12\x15\n" +
+ "\x11NRF52840_PCA10059\x10(\x12\n" +
+ "\n" +
+ "\x06DR_DEV\x10)\x12\v\n" +
+ "\aM5STACK\x10*\x12\r\n" +
+ "\tHELTEC_V3\x10+\x12\x11\n" +
+ "\rHELTEC_WSL_V3\x10,\x12\x13\n" +
+ "\x0fBETAFPV_2400_TX\x10-\x12\x17\n" +
+ "\x13BETAFPV_900_NANO_TX\x10.\x12\f\n" +
+ "\bRPI_PICO\x10/\x12\x1b\n" +
+ "\x17HELTEC_WIRELESS_TRACKER\x100\x12\x19\n" +
+ "\x15HELTEC_WIRELESS_PAPER\x101\x12\n" +
+ "\n" +
+ "\x06T_DECK\x102\x12\x0e\n" +
+ "\n" +
+ "T_WATCH_S3\x103\x12\x11\n" +
+ "\rPICOMPUTER_S3\x104\x12\x0f\n" +
+ "\vHELTEC_HT62\x105\x12\x12\n" +
+ "\x0eEBYTE_ESP32_S3\x106\x12\x11\n" +
+ "\rESP32_S3_PICO\x107\x12\r\n" +
+ "\tCHATTER_2\x108\x12\x1e\n" +
+ "\x1aHELTEC_WIRELESS_PAPER_V1_0\x109\x12 \n" +
+ "\x1cHELTEC_WIRELESS_TRACKER_V1_0\x10:\x12\v\n" +
+ "\aUNPHONE\x10;\x12\f\n" +
+ "\bTD_LORAC\x10<\x12\x13\n" +
+ "\x0fCDEBYTE_EORA_S3\x10=\x12\x0f\n" +
+ "\vTWC_MESH_V4\x10>\x12\x16\n" +
+ "\x12NRF52_PROMICRO_DIY\x10?\x12\x1f\n" +
+ "\x1bRADIOMASTER_900_BANDIT_NANO\x10@\x12\x1c\n" +
+ "\x18HELTEC_CAPSULE_SENSOR_V3\x10A\x12\x1d\n" +
+ "\x19HELTEC_VISION_MASTER_T190\x10B\x12\x1d\n" +
+ "\x19HELTEC_VISION_MASTER_E213\x10C\x12\x1d\n" +
+ "\x19HELTEC_VISION_MASTER_E290\x10D\x12\x19\n" +
+ "\x15HELTEC_MESH_NODE_T114\x10E\x12\x16\n" +
+ "\x12SENSECAP_INDICATOR\x10F\x12\x13\n" +
+ "\x0fTRACKER_T1000_E\x10G\x12\v\n" +
+ "\aRAK3172\x10H\x12\n" +
+ "\n" +
+ "\x06WIO_E5\x10I\x12\x1a\n" +
+ "\x16RADIOMASTER_900_BANDIT\x10J\x12\x13\n" +
+ "\x0fME25LS01_4Y10TD\x10K\x12\x18\n" +
+ "\x14RP2040_FEATHER_RFM95\x10L\x12\x15\n" +
+ "\x11M5STACK_COREBASIC\x10M\x12\x11\n" +
+ "\rM5STACK_CORE2\x10N\x12\r\n" +
+ "\tRPI_PICO2\x10O\x12\x12\n" +
+ "\x0eM5STACK_CORES3\x10P\x12\x11\n" +
+ "\rSEEED_XIAO_S3\x10Q\x12\v\n" +
+ "\aMS24SF1\x10R\x12\f\n" +
+ "\bTLORA_C6\x10S\x12\x0f\n" +
+ "\vWISMESH_TAP\x10T\x12\r\n" +
+ "\tROUTASTIC\x10U\x12\f\n" +
+ "\bMESH_TAB\x10V\x12\f\n" +
+ "\bMESHLINK\x10W\x12\x12\n" +
+ "\x0eXIAO_NRF52_KIT\x10X\x12\x10\n" +
+ "\fTHINKNODE_M1\x10Y\x12\x10\n" +
+ "\fTHINKNODE_M2\x10Z\x12\x0f\n" +
+ "\vT_ETH_ELITE\x10[\x12\x15\n" +
+ "\x11HELTEC_SENSOR_HUB\x10\\\x12\r\n" +
+ "\tMUZI_BASE\x10]\x12\x16\n" +
+ "\x12HELTEC_MESH_POCKET\x10^\x12\x14\n" +
+ "\x10SEEED_SOLAR_NODE\x10_\x12\x18\n" +
+ "\x14NOMADSTAR_METEOR_PRO\x10`\x12\r\n" +
+ "\tCROWPANEL\x10a\x12\v\n" +
+ "\aLINK_32\x10b\x12\x18\n" +
+ "\x14SEEED_WIO_TRACKER_L1\x10c\x12\x1d\n" +
+ "\x19SEEED_WIO_TRACKER_L1_EINK\x10d\x12\x0f\n" +
+ "\vMUZI_R1_NEO\x10e\x12\x0e\n" +
+ "\n" +
+ "T_DECK_PRO\x10f\x12\x10\n" +
+ "\fT_LORA_PAGER\x10g\x12\x14\n" +
+ "\x10M5STACK_RESERVED\x10h\x12\x0f\n" +
+ "\vWISMESH_TAG\x10i\x12\v\n" +
+ "\aRAK3312\x10j\x12\x10\n" +
+ "\fTHINKNODE_M5\x10k\x12\x15\n" +
+ "\x11HELTEC_MESH_SOLAR\x10l\x12\x0f\n" +
+ "\vT_ECHO_LITE\x10m\x12\r\n" +
+ "\tHELTEC_V4\x10n\x12\x0f\n" +
+ "\vM5STACK_C6L\x10o\x12\x19\n" +
+ "\x15M5STACK_CARDPUTER_ADV\x10p\x12\x1e\n" +
+ "\x1aHELTEC_WIRELESS_TRACKER_V2\x10q\x12\x11\n" +
+ "\rT_WATCH_ULTRA\x10r\x12\x10\n" +
+ "\fTHINKNODE_M3\x10s\x12\x12\n" +
+ "\x0eWISMESH_TAP_V2\x10t\x12\v\n" +
+ "\aRAK3401\x10u\x12\v\n" +
+ "\aRAK6421\x10v\x12\x10\n" +
+ "\fTHINKNODE_M4\x10w\x12\x10\n" +
+ "\fTHINKNODE_M6\x10x\x12\x12\n" +
+ "\x0eMESHSTICK_1262\x10y\x12\x10\n" +
+ "\fTBEAM_1_WATT\x10z\x12\x14\n" +
+ "\x10T5_S3_EPAPER_PRO\x10{\x12\r\n" +
+ "\tTBEAM_BPF\x10|\x12\x12\n" +
+ "\x0eMINI_EPAPER_S3\x10}\x12\x0f\n" +
+ "\n" +
+ "PRIVATE_HW\x10\xff\x01*,\n" +
+ "\tConstants\x12\b\n" +
+ "\x04ZERO\x10\x00\x12\x15\n" +
+ "\x10DATA_PAYLOAD_LEN\x10\xe9\x01*\xb4\x02\n" +
+ "\x11CriticalErrorCode\x12\b\n" +
+ "\x04NONE\x10\x00\x12\x0f\n" +
+ "\vTX_WATCHDOG\x10\x01\x12\x14\n" +
+ "\x10SLEEP_ENTER_WAIT\x10\x02\x12\f\n" +
+ "\bNO_RADIO\x10\x03\x12\x0f\n" +
+ "\vUNSPECIFIED\x10\x04\x12\x15\n" +
+ "\x11UBLOX_UNIT_FAILED\x10\x05\x12\r\n" +
+ "\tNO_AXP192\x10\x06\x12\x19\n" +
+ "\x15INVALID_RADIO_SETTING\x10\a\x12\x13\n" +
+ "\x0fTRANSMIT_FAILED\x10\b\x12\f\n" +
+ "\bBROWNOUT\x10\t\x12\x12\n" +
+ "\x0eSX1262_FAILURE\x10\n" +
+ "\x12\x11\n" +
+ "\rRADIO_SPI_BUG\x10\v\x12 \n" +
+ "\x1cFLASH_CORRUPTION_RECOVERABLE\x10\f\x12\"\n" +
+ "\x1eFLASH_CORRUPTION_UNRECOVERABLE\x10\r*\x7f\n" +
+ "\x0fFirmwareEdition\x12\v\n" +
+ "\aVANILLA\x10\x00\x12\x11\n" +
+ "\rSMART_CITIZEN\x10\x01\x12\x0e\n" +
+ "\n" +
+ "OPEN_SAUCE\x10\x10\x12\n" +
+ "\n" +
+ "\x06DEFCON\x10\x11\x12\x0f\n" +
+ "\vBURNING_MAN\x10\x12\x12\x0e\n" +
+ "\n" +
+ "HAMVENTION\x10\x13\x12\x0f\n" +
+ "\vDIY_EDITION\x10\x7f*\x80\x03\n" +
+ "\x0fExcludedModules\x12\x11\n" +
+ "\rEXCLUDED_NONE\x10\x00\x12\x0f\n" +
+ "\vMQTT_CONFIG\x10\x01\x12\x11\n" +
+ "\rSERIAL_CONFIG\x10\x02\x12\x13\n" +
+ "\x0fEXTNOTIF_CONFIG\x10\x04\x12\x17\n" +
+ "\x13STOREFORWARD_CONFIG\x10\b\x12\x14\n" +
+ "\x10RANGETEST_CONFIG\x10\x10\x12\x14\n" +
+ "\x10TELEMETRY_CONFIG\x10 \x12\x14\n" +
+ "\x10CANNEDMSG_CONFIG\x10@\x12\x11\n" +
+ "\fAUDIO_CONFIG\x10\x80\x01\x12\x1a\n" +
+ "\x15REMOTEHARDWARE_CONFIG\x10\x80\x02\x12\x18\n" +
+ "\x13NEIGHBORINFO_CONFIG\x10\x80\x04\x12\x1b\n" +
+ "\x16AMBIENTLIGHTING_CONFIG\x10\x80\b\x12\x1b\n" +
+ "\x16DETECTIONSENSOR_CONFIG\x10\x80\x10\x12\x16\n" +
+ "\x11PAXCOUNTER_CONFIG\x10\x80 \x12\x15\n" +
+ "\x10BLUETOOTH_CONFIG\x10\x80@\x12\x14\n" +
+ "\x0eNETWORK_CONFIG\x10\x80\x80\x01B`\n" +
+ "\x14org.meshtastic.protoB\n" +
+ "MeshProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00b\x06proto3"
+
+var (
+ file_meshtastic_mesh_proto_rawDescOnce sync.Once
+ file_meshtastic_mesh_proto_rawDescData []byte
+)
+
+func file_meshtastic_mesh_proto_rawDescGZIP() []byte {
+ file_meshtastic_mesh_proto_rawDescOnce.Do(func() {
+ file_meshtastic_mesh_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_meshtastic_mesh_proto_rawDesc), len(file_meshtastic_mesh_proto_rawDesc)))
+ })
+ return file_meshtastic_mesh_proto_rawDescData
+}
+
+var file_meshtastic_mesh_proto_enumTypes = make([]protoimpl.EnumInfo, 13)
+var file_meshtastic_mesh_proto_msgTypes = make([]protoimpl.MessageInfo, 33)
+var file_meshtastic_mesh_proto_goTypes = []any{
+ (HardwareModel)(0), // 0: meshtastic.HardwareModel
+ (Constants)(0), // 1: meshtastic.Constants
+ (CriticalErrorCode)(0), // 2: meshtastic.CriticalErrorCode
+ (FirmwareEdition)(0), // 3: meshtastic.FirmwareEdition
+ (ExcludedModules)(0), // 4: meshtastic.ExcludedModules
+ (Position_LocSource)(0), // 5: meshtastic.Position.LocSource
+ (Position_AltSource)(0), // 6: meshtastic.Position.AltSource
+ (Routing_Error)(0), // 7: meshtastic.Routing.Error
+ (StoreForwardPlusPlus_SFPPMessageType)(0), // 8: meshtastic.StoreForwardPlusPlus.SFPP_message_type
+ (MeshPacket_Priority)(0), // 9: meshtastic.MeshPacket.Priority
+ (MeshPacket_Delayed)(0), // 10: meshtastic.MeshPacket.Delayed
+ (MeshPacket_TransportMechanism)(0), // 11: meshtastic.MeshPacket.TransportMechanism
+ (LogRecord_Level)(0), // 12: meshtastic.LogRecord.Level
+ (*Position)(nil), // 13: meshtastic.Position
+ (*User)(nil), // 14: meshtastic.User
+ (*RouteDiscovery)(nil), // 15: meshtastic.RouteDiscovery
+ (*Routing)(nil), // 16: meshtastic.Routing
+ (*Data)(nil), // 17: meshtastic.Data
+ (*KeyVerification)(nil), // 18: meshtastic.KeyVerification
+ (*StoreForwardPlusPlus)(nil), // 19: meshtastic.StoreForwardPlusPlus
+ (*Waypoint)(nil), // 20: meshtastic.Waypoint
+ (*StatusMessage)(nil), // 21: meshtastic.StatusMessage
+ (*MqttClientProxyMessage)(nil), // 22: meshtastic.MqttClientProxyMessage
+ (*MeshPacket)(nil), // 23: meshtastic.MeshPacket
+ (*NodeInfo)(nil), // 24: meshtastic.NodeInfo
+ (*MyNodeInfo)(nil), // 25: meshtastic.MyNodeInfo
+ (*LogRecord)(nil), // 26: meshtastic.LogRecord
+ (*QueueStatus)(nil), // 27: meshtastic.QueueStatus
+ (*FromRadio)(nil), // 28: meshtastic.FromRadio
+ (*ClientNotification)(nil), // 29: meshtastic.ClientNotification
+ (*KeyVerificationNumberInform)(nil), // 30: meshtastic.KeyVerificationNumberInform
+ (*KeyVerificationNumberRequest)(nil), // 31: meshtastic.KeyVerificationNumberRequest
+ (*KeyVerificationFinal)(nil), // 32: meshtastic.KeyVerificationFinal
+ (*DuplicatedPublicKey)(nil), // 33: meshtastic.DuplicatedPublicKey
+ (*LowEntropyKey)(nil), // 34: meshtastic.LowEntropyKey
+ (*FileInfo)(nil), // 35: meshtastic.FileInfo
+ (*ToRadio)(nil), // 36: meshtastic.ToRadio
+ (*Compressed)(nil), // 37: meshtastic.Compressed
+ (*NeighborInfo)(nil), // 38: meshtastic.NeighborInfo
+ (*Neighbor)(nil), // 39: meshtastic.Neighbor
+ (*DeviceMetadata)(nil), // 40: meshtastic.DeviceMetadata
+ (*Heartbeat)(nil), // 41: meshtastic.Heartbeat
+ (*NodeRemoteHardwarePin)(nil), // 42: meshtastic.NodeRemoteHardwarePin
+ (*ChunkedPayload)(nil), // 43: meshtastic.ChunkedPayload
+ (*ResendChunks)(nil), // 44: meshtastic.resend_chunks
+ (*ChunkedPayloadResponse)(nil), // 45: meshtastic.ChunkedPayloadResponse
+ (Config_DeviceConfig_Role)(0), // 46: meshtastic.Config.DeviceConfig.Role
+ (PortNum)(0), // 47: meshtastic.PortNum
+ (*DeviceMetrics)(nil), // 48: meshtastic.DeviceMetrics
+ (*Config)(nil), // 49: meshtastic.Config
+ (*ModuleConfig)(nil), // 50: meshtastic.ModuleConfig
+ (*Channel)(nil), // 51: meshtastic.Channel
+ (*XModem)(nil), // 52: meshtastic.XModem
+ (*DeviceUIConfig)(nil), // 53: meshtastic.DeviceUIConfig
+ (*RemoteHardwarePin)(nil), // 54: meshtastic.RemoteHardwarePin
+}
+var file_meshtastic_mesh_proto_depIdxs = []int32{
+ 5, // 0: meshtastic.Position.location_source:type_name -> meshtastic.Position.LocSource
+ 6, // 1: meshtastic.Position.altitude_source:type_name -> meshtastic.Position.AltSource
+ 0, // 2: meshtastic.User.hw_model:type_name -> meshtastic.HardwareModel
+ 46, // 3: meshtastic.User.role:type_name -> meshtastic.Config.DeviceConfig.Role
+ 15, // 4: meshtastic.Routing.route_request:type_name -> meshtastic.RouteDiscovery
+ 15, // 5: meshtastic.Routing.route_reply:type_name -> meshtastic.RouteDiscovery
+ 7, // 6: meshtastic.Routing.error_reason:type_name -> meshtastic.Routing.Error
+ 47, // 7: meshtastic.Data.portnum:type_name -> meshtastic.PortNum
+ 8, // 8: meshtastic.StoreForwardPlusPlus.sfpp_message_type:type_name -> meshtastic.StoreForwardPlusPlus.SFPP_message_type
+ 17, // 9: meshtastic.MeshPacket.decoded:type_name -> meshtastic.Data
+ 9, // 10: meshtastic.MeshPacket.priority:type_name -> meshtastic.MeshPacket.Priority
+ 10, // 11: meshtastic.MeshPacket.delayed:type_name -> meshtastic.MeshPacket.Delayed
+ 11, // 12: meshtastic.MeshPacket.transport_mechanism:type_name -> meshtastic.MeshPacket.TransportMechanism
+ 14, // 13: meshtastic.NodeInfo.user:type_name -> meshtastic.User
+ 13, // 14: meshtastic.NodeInfo.position:type_name -> meshtastic.Position
+ 48, // 15: meshtastic.NodeInfo.device_metrics:type_name -> meshtastic.DeviceMetrics
+ 3, // 16: meshtastic.MyNodeInfo.firmware_edition:type_name -> meshtastic.FirmwareEdition
+ 12, // 17: meshtastic.LogRecord.level:type_name -> meshtastic.LogRecord.Level
+ 23, // 18: meshtastic.FromRadio.packet:type_name -> meshtastic.MeshPacket
+ 25, // 19: meshtastic.FromRadio.my_info:type_name -> meshtastic.MyNodeInfo
+ 24, // 20: meshtastic.FromRadio.node_info:type_name -> meshtastic.NodeInfo
+ 49, // 21: meshtastic.FromRadio.config:type_name -> meshtastic.Config
+ 26, // 22: meshtastic.FromRadio.log_record:type_name -> meshtastic.LogRecord
+ 50, // 23: meshtastic.FromRadio.moduleConfig:type_name -> meshtastic.ModuleConfig
+ 51, // 24: meshtastic.FromRadio.channel:type_name -> meshtastic.Channel
+ 27, // 25: meshtastic.FromRadio.queueStatus:type_name -> meshtastic.QueueStatus
+ 52, // 26: meshtastic.FromRadio.xmodemPacket:type_name -> meshtastic.XModem
+ 40, // 27: meshtastic.FromRadio.metadata:type_name -> meshtastic.DeviceMetadata
+ 22, // 28: meshtastic.FromRadio.mqttClientProxyMessage:type_name -> meshtastic.MqttClientProxyMessage
+ 35, // 29: meshtastic.FromRadio.fileInfo:type_name -> meshtastic.FileInfo
+ 29, // 30: meshtastic.FromRadio.clientNotification:type_name -> meshtastic.ClientNotification
+ 53, // 31: meshtastic.FromRadio.deviceuiConfig:type_name -> meshtastic.DeviceUIConfig
+ 12, // 32: meshtastic.ClientNotification.level:type_name -> meshtastic.LogRecord.Level
+ 30, // 33: meshtastic.ClientNotification.key_verification_number_inform:type_name -> meshtastic.KeyVerificationNumberInform
+ 31, // 34: meshtastic.ClientNotification.key_verification_number_request:type_name -> meshtastic.KeyVerificationNumberRequest
+ 32, // 35: meshtastic.ClientNotification.key_verification_final:type_name -> meshtastic.KeyVerificationFinal
+ 33, // 36: meshtastic.ClientNotification.duplicated_public_key:type_name -> meshtastic.DuplicatedPublicKey
+ 34, // 37: meshtastic.ClientNotification.low_entropy_key:type_name -> meshtastic.LowEntropyKey
+ 23, // 38: meshtastic.ToRadio.packet:type_name -> meshtastic.MeshPacket
+ 52, // 39: meshtastic.ToRadio.xmodemPacket:type_name -> meshtastic.XModem
+ 22, // 40: meshtastic.ToRadio.mqttClientProxyMessage:type_name -> meshtastic.MqttClientProxyMessage
+ 41, // 41: meshtastic.ToRadio.heartbeat:type_name -> meshtastic.Heartbeat
+ 47, // 42: meshtastic.Compressed.portnum:type_name -> meshtastic.PortNum
+ 39, // 43: meshtastic.NeighborInfo.neighbors:type_name -> meshtastic.Neighbor
+ 46, // 44: meshtastic.DeviceMetadata.role:type_name -> meshtastic.Config.DeviceConfig.Role
+ 0, // 45: meshtastic.DeviceMetadata.hw_model:type_name -> meshtastic.HardwareModel
+ 54, // 46: meshtastic.NodeRemoteHardwarePin.pin:type_name -> meshtastic.RemoteHardwarePin
+ 44, // 47: meshtastic.ChunkedPayloadResponse.resend_chunks:type_name -> meshtastic.resend_chunks
+ 48, // [48:48] is the sub-list for method output_type
+ 48, // [48:48] is the sub-list for method input_type
+ 48, // [48:48] is the sub-list for extension type_name
+ 48, // [48:48] is the sub-list for extension extendee
+ 0, // [0:48] is the sub-list for field type_name
+}
+
+func init() { file_meshtastic_mesh_proto_init() }
+func file_meshtastic_mesh_proto_init() {
+ if File_meshtastic_mesh_proto != nil {
+ return
+ }
+ file_meshtastic_channel_proto_init()
+ file_meshtastic_config_proto_init()
+ file_meshtastic_device_ui_proto_init()
+ file_meshtastic_module_config_proto_init()
+ file_meshtastic_portnums_proto_init()
+ file_meshtastic_telemetry_proto_init()
+ file_meshtastic_xmodem_proto_init()
+ file_meshtastic_mesh_proto_msgTypes[0].OneofWrappers = []any{}
+ file_meshtastic_mesh_proto_msgTypes[1].OneofWrappers = []any{}
+ file_meshtastic_mesh_proto_msgTypes[3].OneofWrappers = []any{
+ (*Routing_RouteRequest)(nil),
+ (*Routing_RouteReply)(nil),
+ (*Routing_ErrorReason)(nil),
+ }
+ file_meshtastic_mesh_proto_msgTypes[4].OneofWrappers = []any{}
+ file_meshtastic_mesh_proto_msgTypes[7].OneofWrappers = []any{}
+ file_meshtastic_mesh_proto_msgTypes[9].OneofWrappers = []any{
+ (*MqttClientProxyMessage_Data)(nil),
+ (*MqttClientProxyMessage_Text)(nil),
+ }
+ file_meshtastic_mesh_proto_msgTypes[10].OneofWrappers = []any{
+ (*MeshPacket_Decoded)(nil),
+ (*MeshPacket_Encrypted)(nil),
+ }
+ file_meshtastic_mesh_proto_msgTypes[11].OneofWrappers = []any{}
+ file_meshtastic_mesh_proto_msgTypes[15].OneofWrappers = []any{
+ (*FromRadio_Packet)(nil),
+ (*FromRadio_MyInfo)(nil),
+ (*FromRadio_NodeInfo)(nil),
+ (*FromRadio_Config)(nil),
+ (*FromRadio_LogRecord)(nil),
+ (*FromRadio_ConfigCompleteId)(nil),
+ (*FromRadio_Rebooted)(nil),
+ (*FromRadio_ModuleConfig)(nil),
+ (*FromRadio_Channel)(nil),
+ (*FromRadio_QueueStatus)(nil),
+ (*FromRadio_XmodemPacket)(nil),
+ (*FromRadio_Metadata)(nil),
+ (*FromRadio_MqttClientProxyMessage)(nil),
+ (*FromRadio_FileInfo)(nil),
+ (*FromRadio_ClientNotification)(nil),
+ (*FromRadio_DeviceuiConfig)(nil),
+ }
+ file_meshtastic_mesh_proto_msgTypes[16].OneofWrappers = []any{
+ (*ClientNotification_KeyVerificationNumberInform)(nil),
+ (*ClientNotification_KeyVerificationNumberRequest)(nil),
+ (*ClientNotification_KeyVerificationFinal)(nil),
+ (*ClientNotification_DuplicatedPublicKey)(nil),
+ (*ClientNotification_LowEntropyKey)(nil),
+ }
+ file_meshtastic_mesh_proto_msgTypes[23].OneofWrappers = []any{
+ (*ToRadio_Packet)(nil),
+ (*ToRadio_WantConfigId)(nil),
+ (*ToRadio_Disconnect)(nil),
+ (*ToRadio_XmodemPacket)(nil),
+ (*ToRadio_MqttClientProxyMessage)(nil),
+ (*ToRadio_Heartbeat)(nil),
+ }
+ file_meshtastic_mesh_proto_msgTypes[32].OneofWrappers = []any{
+ (*ChunkedPayloadResponse_RequestTransfer)(nil),
+ (*ChunkedPayloadResponse_AcceptTransfer)(nil),
+ (*ChunkedPayloadResponse_ResendChunks)(nil),
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_meshtastic_mesh_proto_rawDesc), len(file_meshtastic_mesh_proto_rawDesc)),
+ NumEnums: 13,
+ NumMessages: 33,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_meshtastic_mesh_proto_goTypes,
+ DependencyIndexes: file_meshtastic_mesh_proto_depIdxs,
+ EnumInfos: file_meshtastic_mesh_proto_enumTypes,
+ MessageInfos: file_meshtastic_mesh_proto_msgTypes,
+ }.Build()
+ File_meshtastic_mesh_proto = out.File
+ file_meshtastic_mesh_proto_goTypes = nil
+ file_meshtastic_mesh_proto_depIdxs = nil
+}
diff --git a/protocol/meshtastic/pb/module_config.pb.go b/protocol/meshtastic/pb/module_config.pb.go
new file mode 100644
index 0000000..94676e4
--- /dev/null
+++ b/protocol/meshtastic/pb/module_config.pb.go
@@ -0,0 +1,2979 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc v6.33.4
+// source: meshtastic/module_config.proto
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type RemoteHardwarePinType int32
+
+const (
+ // Unset/unused
+ RemoteHardwarePinType_UNKNOWN RemoteHardwarePinType = 0
+ // GPIO pin can be read (if it is high / low)
+ RemoteHardwarePinType_DIGITAL_READ RemoteHardwarePinType = 1
+ // GPIO pin can be written to (high / low)
+ RemoteHardwarePinType_DIGITAL_WRITE RemoteHardwarePinType = 2
+)
+
+// Enum value maps for RemoteHardwarePinType.
+var (
+ RemoteHardwarePinType_name = map[int32]string{
+ 0: "UNKNOWN",
+ 1: "DIGITAL_READ",
+ 2: "DIGITAL_WRITE",
+ }
+ RemoteHardwarePinType_value = map[string]int32{
+ "UNKNOWN": 0,
+ "DIGITAL_READ": 1,
+ "DIGITAL_WRITE": 2,
+ }
+)
+
+func (x RemoteHardwarePinType) Enum() *RemoteHardwarePinType {
+ p := new(RemoteHardwarePinType)
+ *p = x
+ return p
+}
+
+func (x RemoteHardwarePinType) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (RemoteHardwarePinType) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_module_config_proto_enumTypes[0].Descriptor()
+}
+
+func (RemoteHardwarePinType) Type() protoreflect.EnumType {
+ return &file_meshtastic_module_config_proto_enumTypes[0]
+}
+
+func (x RemoteHardwarePinType) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use RemoteHardwarePinType.Descriptor instead.
+func (RemoteHardwarePinType) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_module_config_proto_rawDescGZIP(), []int{0}
+}
+
+type ModuleConfig_DetectionSensorConfig_TriggerType int32
+
+const (
+ // Event is triggered if pin is low
+ ModuleConfig_DetectionSensorConfig_LOGIC_LOW ModuleConfig_DetectionSensorConfig_TriggerType = 0
+ // Event is triggered if pin is high
+ ModuleConfig_DetectionSensorConfig_LOGIC_HIGH ModuleConfig_DetectionSensorConfig_TriggerType = 1
+ // Event is triggered when pin goes high to low
+ ModuleConfig_DetectionSensorConfig_FALLING_EDGE ModuleConfig_DetectionSensorConfig_TriggerType = 2
+ // Event is triggered when pin goes low to high
+ ModuleConfig_DetectionSensorConfig_RISING_EDGE ModuleConfig_DetectionSensorConfig_TriggerType = 3
+ // Event is triggered on every pin state change, low is considered to be
+ // "active"
+ ModuleConfig_DetectionSensorConfig_EITHER_EDGE_ACTIVE_LOW ModuleConfig_DetectionSensorConfig_TriggerType = 4
+ // Event is triggered on every pin state change, high is considered to be
+ // "active"
+ ModuleConfig_DetectionSensorConfig_EITHER_EDGE_ACTIVE_HIGH ModuleConfig_DetectionSensorConfig_TriggerType = 5
+)
+
+// Enum value maps for ModuleConfig_DetectionSensorConfig_TriggerType.
+var (
+ ModuleConfig_DetectionSensorConfig_TriggerType_name = map[int32]string{
+ 0: "LOGIC_LOW",
+ 1: "LOGIC_HIGH",
+ 2: "FALLING_EDGE",
+ 3: "RISING_EDGE",
+ 4: "EITHER_EDGE_ACTIVE_LOW",
+ 5: "EITHER_EDGE_ACTIVE_HIGH",
+ }
+ ModuleConfig_DetectionSensorConfig_TriggerType_value = map[string]int32{
+ "LOGIC_LOW": 0,
+ "LOGIC_HIGH": 1,
+ "FALLING_EDGE": 2,
+ "RISING_EDGE": 3,
+ "EITHER_EDGE_ACTIVE_LOW": 4,
+ "EITHER_EDGE_ACTIVE_HIGH": 5,
+ }
+)
+
+func (x ModuleConfig_DetectionSensorConfig_TriggerType) Enum() *ModuleConfig_DetectionSensorConfig_TriggerType {
+ p := new(ModuleConfig_DetectionSensorConfig_TriggerType)
+ *p = x
+ return p
+}
+
+func (x ModuleConfig_DetectionSensorConfig_TriggerType) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (ModuleConfig_DetectionSensorConfig_TriggerType) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_module_config_proto_enumTypes[1].Descriptor()
+}
+
+func (ModuleConfig_DetectionSensorConfig_TriggerType) Type() protoreflect.EnumType {
+ return &file_meshtastic_module_config_proto_enumTypes[1]
+}
+
+func (x ModuleConfig_DetectionSensorConfig_TriggerType) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use ModuleConfig_DetectionSensorConfig_TriggerType.Descriptor instead.
+func (ModuleConfig_DetectionSensorConfig_TriggerType) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_module_config_proto_rawDescGZIP(), []int{0, 4, 0}
+}
+
+// Baudrate for codec2 voice
+type ModuleConfig_AudioConfig_Audio_Baud int32
+
+const (
+ ModuleConfig_AudioConfig_CODEC2_DEFAULT ModuleConfig_AudioConfig_Audio_Baud = 0
+ ModuleConfig_AudioConfig_CODEC2_3200 ModuleConfig_AudioConfig_Audio_Baud = 1
+ ModuleConfig_AudioConfig_CODEC2_2400 ModuleConfig_AudioConfig_Audio_Baud = 2
+ ModuleConfig_AudioConfig_CODEC2_1600 ModuleConfig_AudioConfig_Audio_Baud = 3
+ ModuleConfig_AudioConfig_CODEC2_1400 ModuleConfig_AudioConfig_Audio_Baud = 4
+ ModuleConfig_AudioConfig_CODEC2_1300 ModuleConfig_AudioConfig_Audio_Baud = 5
+ ModuleConfig_AudioConfig_CODEC2_1200 ModuleConfig_AudioConfig_Audio_Baud = 6
+ ModuleConfig_AudioConfig_CODEC2_700 ModuleConfig_AudioConfig_Audio_Baud = 7
+ ModuleConfig_AudioConfig_CODEC2_700B ModuleConfig_AudioConfig_Audio_Baud = 8
+)
+
+// Enum value maps for ModuleConfig_AudioConfig_Audio_Baud.
+var (
+ ModuleConfig_AudioConfig_Audio_Baud_name = map[int32]string{
+ 0: "CODEC2_DEFAULT",
+ 1: "CODEC2_3200",
+ 2: "CODEC2_2400",
+ 3: "CODEC2_1600",
+ 4: "CODEC2_1400",
+ 5: "CODEC2_1300",
+ 6: "CODEC2_1200",
+ 7: "CODEC2_700",
+ 8: "CODEC2_700B",
+ }
+ ModuleConfig_AudioConfig_Audio_Baud_value = map[string]int32{
+ "CODEC2_DEFAULT": 0,
+ "CODEC2_3200": 1,
+ "CODEC2_2400": 2,
+ "CODEC2_1600": 3,
+ "CODEC2_1400": 4,
+ "CODEC2_1300": 5,
+ "CODEC2_1200": 6,
+ "CODEC2_700": 7,
+ "CODEC2_700B": 8,
+ }
+)
+
+func (x ModuleConfig_AudioConfig_Audio_Baud) Enum() *ModuleConfig_AudioConfig_Audio_Baud {
+ p := new(ModuleConfig_AudioConfig_Audio_Baud)
+ *p = x
+ return p
+}
+
+func (x ModuleConfig_AudioConfig_Audio_Baud) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (ModuleConfig_AudioConfig_Audio_Baud) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_module_config_proto_enumTypes[2].Descriptor()
+}
+
+func (ModuleConfig_AudioConfig_Audio_Baud) Type() protoreflect.EnumType {
+ return &file_meshtastic_module_config_proto_enumTypes[2]
+}
+
+func (x ModuleConfig_AudioConfig_Audio_Baud) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use ModuleConfig_AudioConfig_Audio_Baud.Descriptor instead.
+func (ModuleConfig_AudioConfig_Audio_Baud) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_module_config_proto_rawDescGZIP(), []int{0, 5, 0}
+}
+
+// TODO: REPLACE
+type ModuleConfig_SerialConfig_Serial_Baud int32
+
+const (
+ ModuleConfig_SerialConfig_BAUD_DEFAULT ModuleConfig_SerialConfig_Serial_Baud = 0
+ ModuleConfig_SerialConfig_BAUD_110 ModuleConfig_SerialConfig_Serial_Baud = 1
+ ModuleConfig_SerialConfig_BAUD_300 ModuleConfig_SerialConfig_Serial_Baud = 2
+ ModuleConfig_SerialConfig_BAUD_600 ModuleConfig_SerialConfig_Serial_Baud = 3
+ ModuleConfig_SerialConfig_BAUD_1200 ModuleConfig_SerialConfig_Serial_Baud = 4
+ ModuleConfig_SerialConfig_BAUD_2400 ModuleConfig_SerialConfig_Serial_Baud = 5
+ ModuleConfig_SerialConfig_BAUD_4800 ModuleConfig_SerialConfig_Serial_Baud = 6
+ ModuleConfig_SerialConfig_BAUD_9600 ModuleConfig_SerialConfig_Serial_Baud = 7
+ ModuleConfig_SerialConfig_BAUD_19200 ModuleConfig_SerialConfig_Serial_Baud = 8
+ ModuleConfig_SerialConfig_BAUD_38400 ModuleConfig_SerialConfig_Serial_Baud = 9
+ ModuleConfig_SerialConfig_BAUD_57600 ModuleConfig_SerialConfig_Serial_Baud = 10
+ ModuleConfig_SerialConfig_BAUD_115200 ModuleConfig_SerialConfig_Serial_Baud = 11
+ ModuleConfig_SerialConfig_BAUD_230400 ModuleConfig_SerialConfig_Serial_Baud = 12
+ ModuleConfig_SerialConfig_BAUD_460800 ModuleConfig_SerialConfig_Serial_Baud = 13
+ ModuleConfig_SerialConfig_BAUD_576000 ModuleConfig_SerialConfig_Serial_Baud = 14
+ ModuleConfig_SerialConfig_BAUD_921600 ModuleConfig_SerialConfig_Serial_Baud = 15
+)
+
+// Enum value maps for ModuleConfig_SerialConfig_Serial_Baud.
+var (
+ ModuleConfig_SerialConfig_Serial_Baud_name = map[int32]string{
+ 0: "BAUD_DEFAULT",
+ 1: "BAUD_110",
+ 2: "BAUD_300",
+ 3: "BAUD_600",
+ 4: "BAUD_1200",
+ 5: "BAUD_2400",
+ 6: "BAUD_4800",
+ 7: "BAUD_9600",
+ 8: "BAUD_19200",
+ 9: "BAUD_38400",
+ 10: "BAUD_57600",
+ 11: "BAUD_115200",
+ 12: "BAUD_230400",
+ 13: "BAUD_460800",
+ 14: "BAUD_576000",
+ 15: "BAUD_921600",
+ }
+ ModuleConfig_SerialConfig_Serial_Baud_value = map[string]int32{
+ "BAUD_DEFAULT": 0,
+ "BAUD_110": 1,
+ "BAUD_300": 2,
+ "BAUD_600": 3,
+ "BAUD_1200": 4,
+ "BAUD_2400": 5,
+ "BAUD_4800": 6,
+ "BAUD_9600": 7,
+ "BAUD_19200": 8,
+ "BAUD_38400": 9,
+ "BAUD_57600": 10,
+ "BAUD_115200": 11,
+ "BAUD_230400": 12,
+ "BAUD_460800": 13,
+ "BAUD_576000": 14,
+ "BAUD_921600": 15,
+ }
+)
+
+func (x ModuleConfig_SerialConfig_Serial_Baud) Enum() *ModuleConfig_SerialConfig_Serial_Baud {
+ p := new(ModuleConfig_SerialConfig_Serial_Baud)
+ *p = x
+ return p
+}
+
+func (x ModuleConfig_SerialConfig_Serial_Baud) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (ModuleConfig_SerialConfig_Serial_Baud) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_module_config_proto_enumTypes[3].Descriptor()
+}
+
+func (ModuleConfig_SerialConfig_Serial_Baud) Type() protoreflect.EnumType {
+ return &file_meshtastic_module_config_proto_enumTypes[3]
+}
+
+func (x ModuleConfig_SerialConfig_Serial_Baud) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use ModuleConfig_SerialConfig_Serial_Baud.Descriptor instead.
+func (ModuleConfig_SerialConfig_Serial_Baud) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_module_config_proto_rawDescGZIP(), []int{0, 8, 0}
+}
+
+// TODO: REPLACE
+type ModuleConfig_SerialConfig_Serial_Mode int32
+
+const (
+ ModuleConfig_SerialConfig_DEFAULT ModuleConfig_SerialConfig_Serial_Mode = 0
+ ModuleConfig_SerialConfig_SIMPLE ModuleConfig_SerialConfig_Serial_Mode = 1
+ ModuleConfig_SerialConfig_PROTO ModuleConfig_SerialConfig_Serial_Mode = 2
+ ModuleConfig_SerialConfig_TEXTMSG ModuleConfig_SerialConfig_Serial_Mode = 3
+ ModuleConfig_SerialConfig_NMEA ModuleConfig_SerialConfig_Serial_Mode = 4
+ // NMEA messages specifically tailored for CalTopo
+ ModuleConfig_SerialConfig_CALTOPO ModuleConfig_SerialConfig_Serial_Mode = 5
+ // Ecowitt WS85 weather station
+ ModuleConfig_SerialConfig_WS85 ModuleConfig_SerialConfig_Serial_Mode = 6
+ // VE.Direct is a serial protocol used by Victron Energy products
+ // https://beta.ivc.no/wiki/index.php/Victron_VE_Direct_DIY_Cable
+ ModuleConfig_SerialConfig_VE_DIRECT ModuleConfig_SerialConfig_Serial_Mode = 7
+ // Used to configure and view some parameters of MeshSolar.
+ // https://heltec.org/project/meshsolar/
+ ModuleConfig_SerialConfig_MS_CONFIG ModuleConfig_SerialConfig_Serial_Mode = 8
+ // Logs mesh traffic to the serial pins, ideal for logging via openLog or similar.
+ ModuleConfig_SerialConfig_LOG ModuleConfig_SerialConfig_Serial_Mode = 9 // includes other packets
+ ModuleConfig_SerialConfig_LOGTEXT ModuleConfig_SerialConfig_Serial_Mode = 10 // only text (channel & DM)
+)
+
+// Enum value maps for ModuleConfig_SerialConfig_Serial_Mode.
+var (
+ ModuleConfig_SerialConfig_Serial_Mode_name = map[int32]string{
+ 0: "DEFAULT",
+ 1: "SIMPLE",
+ 2: "PROTO",
+ 3: "TEXTMSG",
+ 4: "NMEA",
+ 5: "CALTOPO",
+ 6: "WS85",
+ 7: "VE_DIRECT",
+ 8: "MS_CONFIG",
+ 9: "LOG",
+ 10: "LOGTEXT",
+ }
+ ModuleConfig_SerialConfig_Serial_Mode_value = map[string]int32{
+ "DEFAULT": 0,
+ "SIMPLE": 1,
+ "PROTO": 2,
+ "TEXTMSG": 3,
+ "NMEA": 4,
+ "CALTOPO": 5,
+ "WS85": 6,
+ "VE_DIRECT": 7,
+ "MS_CONFIG": 8,
+ "LOG": 9,
+ "LOGTEXT": 10,
+ }
+)
+
+func (x ModuleConfig_SerialConfig_Serial_Mode) Enum() *ModuleConfig_SerialConfig_Serial_Mode {
+ p := new(ModuleConfig_SerialConfig_Serial_Mode)
+ *p = x
+ return p
+}
+
+func (x ModuleConfig_SerialConfig_Serial_Mode) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (ModuleConfig_SerialConfig_Serial_Mode) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_module_config_proto_enumTypes[4].Descriptor()
+}
+
+func (ModuleConfig_SerialConfig_Serial_Mode) Type() protoreflect.EnumType {
+ return &file_meshtastic_module_config_proto_enumTypes[4]
+}
+
+func (x ModuleConfig_SerialConfig_Serial_Mode) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use ModuleConfig_SerialConfig_Serial_Mode.Descriptor instead.
+func (ModuleConfig_SerialConfig_Serial_Mode) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_module_config_proto_rawDescGZIP(), []int{0, 8, 1}
+}
+
+// TODO: REPLACE
+type ModuleConfig_CannedMessageConfig_InputEventChar int32
+
+const (
+ // TODO: REPLACE
+ ModuleConfig_CannedMessageConfig_NONE ModuleConfig_CannedMessageConfig_InputEventChar = 0
+ // TODO: REPLACE
+ ModuleConfig_CannedMessageConfig_UP ModuleConfig_CannedMessageConfig_InputEventChar = 17
+ // TODO: REPLACE
+ ModuleConfig_CannedMessageConfig_DOWN ModuleConfig_CannedMessageConfig_InputEventChar = 18
+ // TODO: REPLACE
+ ModuleConfig_CannedMessageConfig_LEFT ModuleConfig_CannedMessageConfig_InputEventChar = 19
+ // TODO: REPLACE
+ ModuleConfig_CannedMessageConfig_RIGHT ModuleConfig_CannedMessageConfig_InputEventChar = 20
+ // '\n'
+ ModuleConfig_CannedMessageConfig_SELECT ModuleConfig_CannedMessageConfig_InputEventChar = 10
+ // TODO: REPLACE
+ ModuleConfig_CannedMessageConfig_BACK ModuleConfig_CannedMessageConfig_InputEventChar = 27
+ // TODO: REPLACE
+ ModuleConfig_CannedMessageConfig_CANCEL ModuleConfig_CannedMessageConfig_InputEventChar = 24
+)
+
+// Enum value maps for ModuleConfig_CannedMessageConfig_InputEventChar.
+var (
+ ModuleConfig_CannedMessageConfig_InputEventChar_name = map[int32]string{
+ 0: "NONE",
+ 17: "UP",
+ 18: "DOWN",
+ 19: "LEFT",
+ 20: "RIGHT",
+ 10: "SELECT",
+ 27: "BACK",
+ 24: "CANCEL",
+ }
+ ModuleConfig_CannedMessageConfig_InputEventChar_value = map[string]int32{
+ "NONE": 0,
+ "UP": 17,
+ "DOWN": 18,
+ "LEFT": 19,
+ "RIGHT": 20,
+ "SELECT": 10,
+ "BACK": 27,
+ "CANCEL": 24,
+ }
+)
+
+func (x ModuleConfig_CannedMessageConfig_InputEventChar) Enum() *ModuleConfig_CannedMessageConfig_InputEventChar {
+ p := new(ModuleConfig_CannedMessageConfig_InputEventChar)
+ *p = x
+ return p
+}
+
+func (x ModuleConfig_CannedMessageConfig_InputEventChar) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (ModuleConfig_CannedMessageConfig_InputEventChar) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_module_config_proto_enumTypes[5].Descriptor()
+}
+
+func (ModuleConfig_CannedMessageConfig_InputEventChar) Type() protoreflect.EnumType {
+ return &file_meshtastic_module_config_proto_enumTypes[5]
+}
+
+func (x ModuleConfig_CannedMessageConfig_InputEventChar) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use ModuleConfig_CannedMessageConfig_InputEventChar.Descriptor instead.
+func (ModuleConfig_CannedMessageConfig_InputEventChar) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_module_config_proto_rawDescGZIP(), []int{0, 13, 0}
+}
+
+// Module Config
+type ModuleConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // TODO: REPLACE
+ //
+ // Types that are valid to be assigned to PayloadVariant:
+ //
+ // *ModuleConfig_Mqtt
+ // *ModuleConfig_Serial
+ // *ModuleConfig_ExternalNotification
+ // *ModuleConfig_StoreForward
+ // *ModuleConfig_RangeTest
+ // *ModuleConfig_Telemetry
+ // *ModuleConfig_CannedMessage
+ // *ModuleConfig_Audio
+ // *ModuleConfig_RemoteHardware
+ // *ModuleConfig_NeighborInfo
+ // *ModuleConfig_AmbientLighting
+ // *ModuleConfig_DetectionSensor
+ // *ModuleConfig_Paxcounter
+ // *ModuleConfig_Statusmessage
+ // *ModuleConfig_TrafficManagement
+ // *ModuleConfig_Tak
+ PayloadVariant isModuleConfig_PayloadVariant `protobuf_oneof:"payload_variant"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ModuleConfig) Reset() {
+ *x = ModuleConfig{}
+ mi := &file_meshtastic_module_config_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ModuleConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ModuleConfig) ProtoMessage() {}
+
+func (x *ModuleConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_module_config_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ModuleConfig.ProtoReflect.Descriptor instead.
+func (*ModuleConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_module_config_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *ModuleConfig) GetPayloadVariant() isModuleConfig_PayloadVariant {
+ if x != nil {
+ return x.PayloadVariant
+ }
+ return nil
+}
+
+func (x *ModuleConfig) GetMqtt() *ModuleConfig_MQTTConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ModuleConfig_Mqtt); ok {
+ return x.Mqtt
+ }
+ }
+ return nil
+}
+
+func (x *ModuleConfig) GetSerial() *ModuleConfig_SerialConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ModuleConfig_Serial); ok {
+ return x.Serial
+ }
+ }
+ return nil
+}
+
+func (x *ModuleConfig) GetExternalNotification() *ModuleConfig_ExternalNotificationConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ModuleConfig_ExternalNotification); ok {
+ return x.ExternalNotification
+ }
+ }
+ return nil
+}
+
+func (x *ModuleConfig) GetStoreForward() *ModuleConfig_StoreForwardConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ModuleConfig_StoreForward); ok {
+ return x.StoreForward
+ }
+ }
+ return nil
+}
+
+func (x *ModuleConfig) GetRangeTest() *ModuleConfig_RangeTestConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ModuleConfig_RangeTest); ok {
+ return x.RangeTest
+ }
+ }
+ return nil
+}
+
+func (x *ModuleConfig) GetTelemetry() *ModuleConfig_TelemetryConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ModuleConfig_Telemetry); ok {
+ return x.Telemetry
+ }
+ }
+ return nil
+}
+
+func (x *ModuleConfig) GetCannedMessage() *ModuleConfig_CannedMessageConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ModuleConfig_CannedMessage); ok {
+ return x.CannedMessage
+ }
+ }
+ return nil
+}
+
+func (x *ModuleConfig) GetAudio() *ModuleConfig_AudioConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ModuleConfig_Audio); ok {
+ return x.Audio
+ }
+ }
+ return nil
+}
+
+func (x *ModuleConfig) GetRemoteHardware() *ModuleConfig_RemoteHardwareConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ModuleConfig_RemoteHardware); ok {
+ return x.RemoteHardware
+ }
+ }
+ return nil
+}
+
+func (x *ModuleConfig) GetNeighborInfo() *ModuleConfig_NeighborInfoConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ModuleConfig_NeighborInfo); ok {
+ return x.NeighborInfo
+ }
+ }
+ return nil
+}
+
+func (x *ModuleConfig) GetAmbientLighting() *ModuleConfig_AmbientLightingConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ModuleConfig_AmbientLighting); ok {
+ return x.AmbientLighting
+ }
+ }
+ return nil
+}
+
+func (x *ModuleConfig) GetDetectionSensor() *ModuleConfig_DetectionSensorConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ModuleConfig_DetectionSensor); ok {
+ return x.DetectionSensor
+ }
+ }
+ return nil
+}
+
+func (x *ModuleConfig) GetPaxcounter() *ModuleConfig_PaxcounterConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ModuleConfig_Paxcounter); ok {
+ return x.Paxcounter
+ }
+ }
+ return nil
+}
+
+func (x *ModuleConfig) GetStatusmessage() *ModuleConfig_StatusMessageConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ModuleConfig_Statusmessage); ok {
+ return x.Statusmessage
+ }
+ }
+ return nil
+}
+
+func (x *ModuleConfig) GetTrafficManagement() *ModuleConfig_TrafficManagementConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ModuleConfig_TrafficManagement); ok {
+ return x.TrafficManagement
+ }
+ }
+ return nil
+}
+
+func (x *ModuleConfig) GetTak() *ModuleConfig_TAKConfig {
+ if x != nil {
+ if x, ok := x.PayloadVariant.(*ModuleConfig_Tak); ok {
+ return x.Tak
+ }
+ }
+ return nil
+}
+
+type isModuleConfig_PayloadVariant interface {
+ isModuleConfig_PayloadVariant()
+}
+
+type ModuleConfig_Mqtt struct {
+ // TODO: REPLACE
+ Mqtt *ModuleConfig_MQTTConfig `protobuf:"bytes,1,opt,name=mqtt,proto3,oneof"`
+}
+
+type ModuleConfig_Serial struct {
+ // TODO: REPLACE
+ Serial *ModuleConfig_SerialConfig `protobuf:"bytes,2,opt,name=serial,proto3,oneof"`
+}
+
+type ModuleConfig_ExternalNotification struct {
+ // TODO: REPLACE
+ ExternalNotification *ModuleConfig_ExternalNotificationConfig `protobuf:"bytes,3,opt,name=external_notification,json=externalNotification,proto3,oneof"`
+}
+
+type ModuleConfig_StoreForward struct {
+ // TODO: REPLACE
+ StoreForward *ModuleConfig_StoreForwardConfig `protobuf:"bytes,4,opt,name=store_forward,json=storeForward,proto3,oneof"`
+}
+
+type ModuleConfig_RangeTest struct {
+ // TODO: REPLACE
+ RangeTest *ModuleConfig_RangeTestConfig `protobuf:"bytes,5,opt,name=range_test,json=rangeTest,proto3,oneof"`
+}
+
+type ModuleConfig_Telemetry struct {
+ // TODO: REPLACE
+ Telemetry *ModuleConfig_TelemetryConfig `protobuf:"bytes,6,opt,name=telemetry,proto3,oneof"`
+}
+
+type ModuleConfig_CannedMessage struct {
+ // TODO: REPLACE
+ CannedMessage *ModuleConfig_CannedMessageConfig `protobuf:"bytes,7,opt,name=canned_message,json=cannedMessage,proto3,oneof"`
+}
+
+type ModuleConfig_Audio struct {
+ // TODO: REPLACE
+ Audio *ModuleConfig_AudioConfig `protobuf:"bytes,8,opt,name=audio,proto3,oneof"`
+}
+
+type ModuleConfig_RemoteHardware struct {
+ // TODO: REPLACE
+ RemoteHardware *ModuleConfig_RemoteHardwareConfig `protobuf:"bytes,9,opt,name=remote_hardware,json=remoteHardware,proto3,oneof"`
+}
+
+type ModuleConfig_NeighborInfo struct {
+ // TODO: REPLACE
+ NeighborInfo *ModuleConfig_NeighborInfoConfig `protobuf:"bytes,10,opt,name=neighbor_info,json=neighborInfo,proto3,oneof"`
+}
+
+type ModuleConfig_AmbientLighting struct {
+ // TODO: REPLACE
+ AmbientLighting *ModuleConfig_AmbientLightingConfig `protobuf:"bytes,11,opt,name=ambient_lighting,json=ambientLighting,proto3,oneof"`
+}
+
+type ModuleConfig_DetectionSensor struct {
+ // TODO: REPLACE
+ DetectionSensor *ModuleConfig_DetectionSensorConfig `protobuf:"bytes,12,opt,name=detection_sensor,json=detectionSensor,proto3,oneof"`
+}
+
+type ModuleConfig_Paxcounter struct {
+ // TODO: REPLACE
+ Paxcounter *ModuleConfig_PaxcounterConfig `protobuf:"bytes,13,opt,name=paxcounter,proto3,oneof"`
+}
+
+type ModuleConfig_Statusmessage struct {
+ // TODO: REPLACE
+ Statusmessage *ModuleConfig_StatusMessageConfig `protobuf:"bytes,14,opt,name=statusmessage,proto3,oneof"`
+}
+
+type ModuleConfig_TrafficManagement struct {
+ // Traffic management module config for mesh network optimization
+ TrafficManagement *ModuleConfig_TrafficManagementConfig `protobuf:"bytes,15,opt,name=traffic_management,json=trafficManagement,proto3,oneof"`
+}
+
+type ModuleConfig_Tak struct {
+ // TAK team/role configuration for TAK_TRACKER
+ Tak *ModuleConfig_TAKConfig `protobuf:"bytes,16,opt,name=tak,proto3,oneof"`
+}
+
+func (*ModuleConfig_Mqtt) isModuleConfig_PayloadVariant() {}
+
+func (*ModuleConfig_Serial) isModuleConfig_PayloadVariant() {}
+
+func (*ModuleConfig_ExternalNotification) isModuleConfig_PayloadVariant() {}
+
+func (*ModuleConfig_StoreForward) isModuleConfig_PayloadVariant() {}
+
+func (*ModuleConfig_RangeTest) isModuleConfig_PayloadVariant() {}
+
+func (*ModuleConfig_Telemetry) isModuleConfig_PayloadVariant() {}
+
+func (*ModuleConfig_CannedMessage) isModuleConfig_PayloadVariant() {}
+
+func (*ModuleConfig_Audio) isModuleConfig_PayloadVariant() {}
+
+func (*ModuleConfig_RemoteHardware) isModuleConfig_PayloadVariant() {}
+
+func (*ModuleConfig_NeighborInfo) isModuleConfig_PayloadVariant() {}
+
+func (*ModuleConfig_AmbientLighting) isModuleConfig_PayloadVariant() {}
+
+func (*ModuleConfig_DetectionSensor) isModuleConfig_PayloadVariant() {}
+
+func (*ModuleConfig_Paxcounter) isModuleConfig_PayloadVariant() {}
+
+func (*ModuleConfig_Statusmessage) isModuleConfig_PayloadVariant() {}
+
+func (*ModuleConfig_TrafficManagement) isModuleConfig_PayloadVariant() {}
+
+func (*ModuleConfig_Tak) isModuleConfig_PayloadVariant() {}
+
+// A GPIO pin definition for remote hardware module
+type RemoteHardwarePin struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // GPIO Pin number (must match Arduino)
+ GpioPin uint32 `protobuf:"varint,1,opt,name=gpio_pin,json=gpioPin,proto3" json:"gpioPin,omitempty"`
+ // Name for the GPIO pin (i.e. Front gate, mailbox, etc)
+ Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
+ // Type of GPIO access available to consumers on the mesh
+ Type RemoteHardwarePinType `protobuf:"varint,3,opt,name=type,proto3,enum=meshtastic.RemoteHardwarePinType" json:"type,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *RemoteHardwarePin) Reset() {
+ *x = RemoteHardwarePin{}
+ mi := &file_meshtastic_module_config_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *RemoteHardwarePin) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RemoteHardwarePin) ProtoMessage() {}
+
+func (x *RemoteHardwarePin) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_module_config_proto_msgTypes[1]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use RemoteHardwarePin.ProtoReflect.Descriptor instead.
+func (*RemoteHardwarePin) Descriptor() ([]byte, []int) {
+ return file_meshtastic_module_config_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *RemoteHardwarePin) GetGpioPin() uint32 {
+ if x != nil {
+ return x.GpioPin
+ }
+ return 0
+}
+
+func (x *RemoteHardwarePin) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *RemoteHardwarePin) GetType() RemoteHardwarePinType {
+ if x != nil {
+ return x.Type
+ }
+ return RemoteHardwarePinType_UNKNOWN
+}
+
+// MQTT Client Config
+type ModuleConfig_MQTTConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // If a meshtastic node is able to reach the internet it will normally attempt to gateway any channels that are marked as
+ // is_uplink_enabled or is_downlink_enabled.
+ Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
+ // The server to use for our MQTT global message gateway feature.
+ // If not set, the default server will be used
+ Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"`
+ // MQTT username to use (most useful for a custom MQTT server).
+ // If using a custom server, this will be honoured even if empty.
+ // If using the default server, this will only be honoured if set, otherwise the device will use the default username
+ Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"`
+ // MQTT password to use (most useful for a custom MQTT server).
+ // If using a custom server, this will be honoured even if empty.
+ // If using the default server, this will only be honoured if set, otherwise the device will use the default password
+ Password string `protobuf:"bytes,4,opt,name=password,proto3" json:"password,omitempty"`
+ // Whether to send encrypted or decrypted packets to MQTT.
+ // This parameter is only honoured if you also set server
+ // (the default official mqtt.meshtastic.org server can handle encrypted packets)
+ // Decrypted packets may be useful for external systems that want to consume meshtastic packets
+ EncryptionEnabled bool `protobuf:"varint,5,opt,name=encryption_enabled,json=encryptionEnabled,proto3" json:"encryptionEnabled,omitempty"`
+ // Whether to send / consume json packets on MQTT
+ JsonEnabled bool `protobuf:"varint,6,opt,name=json_enabled,json=jsonEnabled,proto3" json:"jsonEnabled,omitempty"`
+ // If true, we attempt to establish a secure connection using TLS
+ TlsEnabled bool `protobuf:"varint,7,opt,name=tls_enabled,json=tlsEnabled,proto3" json:"tlsEnabled,omitempty"`
+ // The root topic to use for MQTT messages. Default is "msh".
+ // This is useful if you want to use a single MQTT server for multiple meshtastic networks and separate them via ACLs
+ Root string `protobuf:"bytes,8,opt,name=root,proto3" json:"root,omitempty"`
+ // If true, we can use the connected phone / client to proxy messages to MQTT instead of a direct connection
+ ProxyToClientEnabled bool `protobuf:"varint,9,opt,name=proxy_to_client_enabled,json=proxyToClientEnabled,proto3" json:"proxyToClientEnabled,omitempty"`
+ // If true, we will periodically report unencrypted information about our node to a map via MQTT
+ MapReportingEnabled bool `protobuf:"varint,10,opt,name=map_reporting_enabled,json=mapReportingEnabled,proto3" json:"mapReportingEnabled,omitempty"`
+ // Settings for reporting information about our node to a map via MQTT
+ MapReportSettings *ModuleConfig_MapReportSettings `protobuf:"bytes,11,opt,name=map_report_settings,json=mapReportSettings,proto3" json:"mapReportSettings,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ModuleConfig_MQTTConfig) Reset() {
+ *x = ModuleConfig_MQTTConfig{}
+ mi := &file_meshtastic_module_config_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ModuleConfig_MQTTConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ModuleConfig_MQTTConfig) ProtoMessage() {}
+
+func (x *ModuleConfig_MQTTConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_module_config_proto_msgTypes[2]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ModuleConfig_MQTTConfig.ProtoReflect.Descriptor instead.
+func (*ModuleConfig_MQTTConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_module_config_proto_rawDescGZIP(), []int{0, 0}
+}
+
+func (x *ModuleConfig_MQTTConfig) GetEnabled() bool {
+ if x != nil {
+ return x.Enabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_MQTTConfig) GetAddress() string {
+ if x != nil {
+ return x.Address
+ }
+ return ""
+}
+
+func (x *ModuleConfig_MQTTConfig) GetUsername() string {
+ if x != nil {
+ return x.Username
+ }
+ return ""
+}
+
+func (x *ModuleConfig_MQTTConfig) GetPassword() string {
+ if x != nil {
+ return x.Password
+ }
+ return ""
+}
+
+func (x *ModuleConfig_MQTTConfig) GetEncryptionEnabled() bool {
+ if x != nil {
+ return x.EncryptionEnabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_MQTTConfig) GetJsonEnabled() bool {
+ if x != nil {
+ return x.JsonEnabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_MQTTConfig) GetTlsEnabled() bool {
+ if x != nil {
+ return x.TlsEnabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_MQTTConfig) GetRoot() string {
+ if x != nil {
+ return x.Root
+ }
+ return ""
+}
+
+func (x *ModuleConfig_MQTTConfig) GetProxyToClientEnabled() bool {
+ if x != nil {
+ return x.ProxyToClientEnabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_MQTTConfig) GetMapReportingEnabled() bool {
+ if x != nil {
+ return x.MapReportingEnabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_MQTTConfig) GetMapReportSettings() *ModuleConfig_MapReportSettings {
+ if x != nil {
+ return x.MapReportSettings
+ }
+ return nil
+}
+
+// Settings for reporting unencrypted information about our node to a map via MQTT
+type ModuleConfig_MapReportSettings struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // How often we should report our info to the map (in seconds)
+ PublishIntervalSecs uint32 `protobuf:"varint,1,opt,name=publish_interval_secs,json=publishIntervalSecs,proto3" json:"publishIntervalSecs,omitempty"`
+ // Bits of precision for the location sent (default of 32 is full precision).
+ PositionPrecision uint32 `protobuf:"varint,2,opt,name=position_precision,json=positionPrecision,proto3" json:"positionPrecision,omitempty"`
+ // Whether we have opted-in to report our location to the map
+ ShouldReportLocation bool `protobuf:"varint,3,opt,name=should_report_location,json=shouldReportLocation,proto3" json:"shouldReportLocation,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ModuleConfig_MapReportSettings) Reset() {
+ *x = ModuleConfig_MapReportSettings{}
+ mi := &file_meshtastic_module_config_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ModuleConfig_MapReportSettings) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ModuleConfig_MapReportSettings) ProtoMessage() {}
+
+func (x *ModuleConfig_MapReportSettings) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_module_config_proto_msgTypes[3]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ModuleConfig_MapReportSettings.ProtoReflect.Descriptor instead.
+func (*ModuleConfig_MapReportSettings) Descriptor() ([]byte, []int) {
+ return file_meshtastic_module_config_proto_rawDescGZIP(), []int{0, 1}
+}
+
+func (x *ModuleConfig_MapReportSettings) GetPublishIntervalSecs() uint32 {
+ if x != nil {
+ return x.PublishIntervalSecs
+ }
+ return 0
+}
+
+func (x *ModuleConfig_MapReportSettings) GetPositionPrecision() uint32 {
+ if x != nil {
+ return x.PositionPrecision
+ }
+ return 0
+}
+
+func (x *ModuleConfig_MapReportSettings) GetShouldReportLocation() bool {
+ if x != nil {
+ return x.ShouldReportLocation
+ }
+ return false
+}
+
+// RemoteHardwareModule Config
+type ModuleConfig_RemoteHardwareConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Whether the Module is enabled
+ Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
+ // Whether the Module allows consumers to read / write to pins not defined in available_pins
+ AllowUndefinedPinAccess bool `protobuf:"varint,2,opt,name=allow_undefined_pin_access,json=allowUndefinedPinAccess,proto3" json:"allowUndefinedPinAccess,omitempty"`
+ // Exposes the available pins to the mesh for reading and writing
+ AvailablePins []*RemoteHardwarePin `protobuf:"bytes,3,rep,name=available_pins,json=availablePins,proto3" json:"availablePins,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ModuleConfig_RemoteHardwareConfig) Reset() {
+ *x = ModuleConfig_RemoteHardwareConfig{}
+ mi := &file_meshtastic_module_config_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ModuleConfig_RemoteHardwareConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ModuleConfig_RemoteHardwareConfig) ProtoMessage() {}
+
+func (x *ModuleConfig_RemoteHardwareConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_module_config_proto_msgTypes[4]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ModuleConfig_RemoteHardwareConfig.ProtoReflect.Descriptor instead.
+func (*ModuleConfig_RemoteHardwareConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_module_config_proto_rawDescGZIP(), []int{0, 2}
+}
+
+func (x *ModuleConfig_RemoteHardwareConfig) GetEnabled() bool {
+ if x != nil {
+ return x.Enabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_RemoteHardwareConfig) GetAllowUndefinedPinAccess() bool {
+ if x != nil {
+ return x.AllowUndefinedPinAccess
+ }
+ return false
+}
+
+func (x *ModuleConfig_RemoteHardwareConfig) GetAvailablePins() []*RemoteHardwarePin {
+ if x != nil {
+ return x.AvailablePins
+ }
+ return nil
+}
+
+// NeighborInfoModule Config
+type ModuleConfig_NeighborInfoConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Whether the Module is enabled
+ Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
+ // Interval in seconds of how often we should try to send our
+ // Neighbor Info (minimum is 14400, i.e., 4 hours)
+ UpdateInterval uint32 `protobuf:"varint,2,opt,name=update_interval,json=updateInterval,proto3" json:"updateInterval,omitempty"`
+ // 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.
+ TransmitOverLora bool `protobuf:"varint,3,opt,name=transmit_over_lora,json=transmitOverLora,proto3" json:"transmitOverLora,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ModuleConfig_NeighborInfoConfig) Reset() {
+ *x = ModuleConfig_NeighborInfoConfig{}
+ mi := &file_meshtastic_module_config_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ModuleConfig_NeighborInfoConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ModuleConfig_NeighborInfoConfig) ProtoMessage() {}
+
+func (x *ModuleConfig_NeighborInfoConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_module_config_proto_msgTypes[5]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ModuleConfig_NeighborInfoConfig.ProtoReflect.Descriptor instead.
+func (*ModuleConfig_NeighborInfoConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_module_config_proto_rawDescGZIP(), []int{0, 3}
+}
+
+func (x *ModuleConfig_NeighborInfoConfig) GetEnabled() bool {
+ if x != nil {
+ return x.Enabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_NeighborInfoConfig) GetUpdateInterval() uint32 {
+ if x != nil {
+ return x.UpdateInterval
+ }
+ return 0
+}
+
+func (x *ModuleConfig_NeighborInfoConfig) GetTransmitOverLora() bool {
+ if x != nil {
+ return x.TransmitOverLora
+ }
+ return false
+}
+
+// Detection Sensor Module Config
+type ModuleConfig_DetectionSensorConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Whether the Module is enabled
+ Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
+ // Interval in seconds of how often we can send a message to the mesh when a
+ // trigger event is detected
+ MinimumBroadcastSecs uint32 `protobuf:"varint,2,opt,name=minimum_broadcast_secs,json=minimumBroadcastSecs,proto3" json:"minimumBroadcastSecs,omitempty"`
+ // Interval in seconds of how often we should send a message to the mesh
+ // with the current state regardless of trigger events When set to 0, only
+ // trigger events will be broadcasted Works as a sort of status heartbeat
+ // for peace of mind
+ StateBroadcastSecs uint32 `protobuf:"varint,3,opt,name=state_broadcast_secs,json=stateBroadcastSecs,proto3" json:"stateBroadcastSecs,omitempty"`
+ // Send ASCII bell with alert message
+ // Useful for triggering ext. notification on bell
+ SendBell bool `protobuf:"varint,4,opt,name=send_bell,json=sendBell,proto3" json:"sendBell,omitempty"`
+ // Friendly name used to format message sent to mesh
+ // Example: A name "Motion" would result in a message "Motion detected"
+ // Maximum length of 20 characters
+ Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"`
+ // GPIO pin to monitor for state changes
+ MonitorPin uint32 `protobuf:"varint,6,opt,name=monitor_pin,json=monitorPin,proto3" json:"monitorPin,omitempty"`
+ // The type of trigger event to be used
+ DetectionTriggerType ModuleConfig_DetectionSensorConfig_TriggerType `protobuf:"varint,7,opt,name=detection_trigger_type,json=detectionTriggerType,proto3,enum=meshtastic.ModuleConfig_DetectionSensorConfig_TriggerType" json:"detectionTriggerType,omitempty"`
+ // Whether or not use INPUT_PULLUP mode for GPIO pin
+ // Only applicable if the board uses pull-up resistors on the pin
+ UsePullup bool `protobuf:"varint,8,opt,name=use_pullup,json=usePullup,proto3" json:"usePullup,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ModuleConfig_DetectionSensorConfig) Reset() {
+ *x = ModuleConfig_DetectionSensorConfig{}
+ mi := &file_meshtastic_module_config_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ModuleConfig_DetectionSensorConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ModuleConfig_DetectionSensorConfig) ProtoMessage() {}
+
+func (x *ModuleConfig_DetectionSensorConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_module_config_proto_msgTypes[6]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ModuleConfig_DetectionSensorConfig.ProtoReflect.Descriptor instead.
+func (*ModuleConfig_DetectionSensorConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_module_config_proto_rawDescGZIP(), []int{0, 4}
+}
+
+func (x *ModuleConfig_DetectionSensorConfig) GetEnabled() bool {
+ if x != nil {
+ return x.Enabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_DetectionSensorConfig) GetMinimumBroadcastSecs() uint32 {
+ if x != nil {
+ return x.MinimumBroadcastSecs
+ }
+ return 0
+}
+
+func (x *ModuleConfig_DetectionSensorConfig) GetStateBroadcastSecs() uint32 {
+ if x != nil {
+ return x.StateBroadcastSecs
+ }
+ return 0
+}
+
+func (x *ModuleConfig_DetectionSensorConfig) GetSendBell() bool {
+ if x != nil {
+ return x.SendBell
+ }
+ return false
+}
+
+func (x *ModuleConfig_DetectionSensorConfig) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *ModuleConfig_DetectionSensorConfig) GetMonitorPin() uint32 {
+ if x != nil {
+ return x.MonitorPin
+ }
+ return 0
+}
+
+func (x *ModuleConfig_DetectionSensorConfig) GetDetectionTriggerType() ModuleConfig_DetectionSensorConfig_TriggerType {
+ if x != nil {
+ return x.DetectionTriggerType
+ }
+ return ModuleConfig_DetectionSensorConfig_LOGIC_LOW
+}
+
+func (x *ModuleConfig_DetectionSensorConfig) GetUsePullup() bool {
+ if x != nil {
+ return x.UsePullup
+ }
+ return false
+}
+
+// Audio Config for codec2 voice
+type ModuleConfig_AudioConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Whether Audio is enabled
+ Codec2Enabled bool `protobuf:"varint,1,opt,name=codec2_enabled,json=codec2Enabled,proto3" json:"codec2Enabled,omitempty"`
+ // PTT Pin
+ PttPin uint32 `protobuf:"varint,2,opt,name=ptt_pin,json=pttPin,proto3" json:"pttPin,omitempty"`
+ // The audio sample rate to use for codec2
+ Bitrate ModuleConfig_AudioConfig_Audio_Baud `protobuf:"varint,3,opt,name=bitrate,proto3,enum=meshtastic.ModuleConfig_AudioConfig_Audio_Baud" json:"bitrate,omitempty"`
+ // I2S Word Select
+ I2SWs uint32 `protobuf:"varint,4,opt,name=i2s_ws,json=i2sWs,proto3" json:"i2sWs,omitempty"`
+ // I2S Data IN
+ I2SSd uint32 `protobuf:"varint,5,opt,name=i2s_sd,json=i2sSd,proto3" json:"i2sSd,omitempty"`
+ // I2S Data OUT
+ I2SDin uint32 `protobuf:"varint,6,opt,name=i2s_din,json=i2sDin,proto3" json:"i2sDin,omitempty"`
+ // I2S Clock
+ I2SSck uint32 `protobuf:"varint,7,opt,name=i2s_sck,json=i2sSck,proto3" json:"i2sSck,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ModuleConfig_AudioConfig) Reset() {
+ *x = ModuleConfig_AudioConfig{}
+ mi := &file_meshtastic_module_config_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ModuleConfig_AudioConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ModuleConfig_AudioConfig) ProtoMessage() {}
+
+func (x *ModuleConfig_AudioConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_module_config_proto_msgTypes[7]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ModuleConfig_AudioConfig.ProtoReflect.Descriptor instead.
+func (*ModuleConfig_AudioConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_module_config_proto_rawDescGZIP(), []int{0, 5}
+}
+
+func (x *ModuleConfig_AudioConfig) GetCodec2Enabled() bool {
+ if x != nil {
+ return x.Codec2Enabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_AudioConfig) GetPttPin() uint32 {
+ if x != nil {
+ return x.PttPin
+ }
+ return 0
+}
+
+func (x *ModuleConfig_AudioConfig) GetBitrate() ModuleConfig_AudioConfig_Audio_Baud {
+ if x != nil {
+ return x.Bitrate
+ }
+ return ModuleConfig_AudioConfig_CODEC2_DEFAULT
+}
+
+func (x *ModuleConfig_AudioConfig) GetI2SWs() uint32 {
+ if x != nil {
+ return x.I2SWs
+ }
+ return 0
+}
+
+func (x *ModuleConfig_AudioConfig) GetI2SSd() uint32 {
+ if x != nil {
+ return x.I2SSd
+ }
+ return 0
+}
+
+func (x *ModuleConfig_AudioConfig) GetI2SDin() uint32 {
+ if x != nil {
+ return x.I2SDin
+ }
+ return 0
+}
+
+func (x *ModuleConfig_AudioConfig) GetI2SSck() uint32 {
+ if x != nil {
+ return x.I2SSck
+ }
+ return 0
+}
+
+// Config for the Paxcounter Module
+type ModuleConfig_PaxcounterConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Enable the Paxcounter Module
+ Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
+ PaxcounterUpdateInterval uint32 `protobuf:"varint,2,opt,name=paxcounter_update_interval,json=paxcounterUpdateInterval,proto3" json:"paxcounterUpdateInterval,omitempty"`
+ // WiFi RSSI threshold. Defaults to -80
+ WifiThreshold int32 `protobuf:"varint,3,opt,name=wifi_threshold,json=wifiThreshold,proto3" json:"wifiThreshold,omitempty"`
+ // BLE RSSI threshold. Defaults to -80
+ BleThreshold int32 `protobuf:"varint,4,opt,name=ble_threshold,json=bleThreshold,proto3" json:"bleThreshold,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ModuleConfig_PaxcounterConfig) Reset() {
+ *x = ModuleConfig_PaxcounterConfig{}
+ mi := &file_meshtastic_module_config_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ModuleConfig_PaxcounterConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ModuleConfig_PaxcounterConfig) ProtoMessage() {}
+
+func (x *ModuleConfig_PaxcounterConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_module_config_proto_msgTypes[8]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ModuleConfig_PaxcounterConfig.ProtoReflect.Descriptor instead.
+func (*ModuleConfig_PaxcounterConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_module_config_proto_rawDescGZIP(), []int{0, 6}
+}
+
+func (x *ModuleConfig_PaxcounterConfig) GetEnabled() bool {
+ if x != nil {
+ return x.Enabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_PaxcounterConfig) GetPaxcounterUpdateInterval() uint32 {
+ if x != nil {
+ return x.PaxcounterUpdateInterval
+ }
+ return 0
+}
+
+func (x *ModuleConfig_PaxcounterConfig) GetWifiThreshold() int32 {
+ if x != nil {
+ return x.WifiThreshold
+ }
+ return 0
+}
+
+func (x *ModuleConfig_PaxcounterConfig) GetBleThreshold() int32 {
+ if x != nil {
+ return x.BleThreshold
+ }
+ return 0
+}
+
+// Config for the Traffic Management module.
+// Provides packet inspection and traffic shaping to help reduce channel utilization
+type ModuleConfig_TrafficManagementConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Master enable for traffic management module
+ Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
+ // Enable position deduplication to drop redundant position broadcasts
+ PositionDedupEnabled bool `protobuf:"varint,2,opt,name=position_dedup_enabled,json=positionDedupEnabled,proto3" json:"positionDedupEnabled,omitempty"`
+ // Number of bits of precision for position deduplication (0-32)
+ PositionPrecisionBits uint32 `protobuf:"varint,3,opt,name=position_precision_bits,json=positionPrecisionBits,proto3" json:"positionPrecisionBits,omitempty"`
+ // Minimum interval in seconds between position updates from the same node
+ PositionMinIntervalSecs uint32 `protobuf:"varint,4,opt,name=position_min_interval_secs,json=positionMinIntervalSecs,proto3" json:"positionMinIntervalSecs,omitempty"`
+ // Enable direct response to NodeInfo requests from local cache
+ NodeinfoDirectResponse bool `protobuf:"varint,5,opt,name=nodeinfo_direct_response,json=nodeinfoDirectResponse,proto3" json:"nodeinfoDirectResponse,omitempty"`
+ // Minimum hop distance from requestor before responding to NodeInfo requests
+ NodeinfoDirectResponseMaxHops uint32 `protobuf:"varint,6,opt,name=nodeinfo_direct_response_max_hops,json=nodeinfoDirectResponseMaxHops,proto3" json:"nodeinfoDirectResponseMaxHops,omitempty"`
+ // Enable per-node rate limiting to throttle chatty nodes
+ RateLimitEnabled bool `protobuf:"varint,7,opt,name=rate_limit_enabled,json=rateLimitEnabled,proto3" json:"rateLimitEnabled,omitempty"`
+ // Time window in seconds for rate limiting calculations
+ RateLimitWindowSecs uint32 `protobuf:"varint,8,opt,name=rate_limit_window_secs,json=rateLimitWindowSecs,proto3" json:"rateLimitWindowSecs,omitempty"`
+ // Maximum packets allowed per node within the rate limit window
+ RateLimitMaxPackets uint32 `protobuf:"varint,9,opt,name=rate_limit_max_packets,json=rateLimitMaxPackets,proto3" json:"rateLimitMaxPackets,omitempty"`
+ // Enable dropping of unknown/undecryptable packets per rate_limit_window_secs
+ DropUnknownEnabled bool `protobuf:"varint,10,opt,name=drop_unknown_enabled,json=dropUnknownEnabled,proto3" json:"dropUnknownEnabled,omitempty"`
+ // Number of unknown packets before dropping from a node
+ UnknownPacketThreshold uint32 `protobuf:"varint,11,opt,name=unknown_packet_threshold,json=unknownPacketThreshold,proto3" json:"unknownPacketThreshold,omitempty"`
+ // Set hop_limit to 0 for relayed telemetry broadcasts (own packets unaffected)
+ ExhaustHopTelemetry bool `protobuf:"varint,12,opt,name=exhaust_hop_telemetry,json=exhaustHopTelemetry,proto3" json:"exhaustHopTelemetry,omitempty"`
+ // Set hop_limit to 0 for relayed position broadcasts (own packets unaffected)
+ ExhaustHopPosition bool `protobuf:"varint,13,opt,name=exhaust_hop_position,json=exhaustHopPosition,proto3" json:"exhaustHopPosition,omitempty"`
+ // Preserve hop_limit for router-to-router traffic
+ RouterPreserveHops bool `protobuf:"varint,14,opt,name=router_preserve_hops,json=routerPreserveHops,proto3" json:"routerPreserveHops,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ModuleConfig_TrafficManagementConfig) Reset() {
+ *x = ModuleConfig_TrafficManagementConfig{}
+ mi := &file_meshtastic_module_config_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ModuleConfig_TrafficManagementConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ModuleConfig_TrafficManagementConfig) ProtoMessage() {}
+
+func (x *ModuleConfig_TrafficManagementConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_module_config_proto_msgTypes[9]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ModuleConfig_TrafficManagementConfig.ProtoReflect.Descriptor instead.
+func (*ModuleConfig_TrafficManagementConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_module_config_proto_rawDescGZIP(), []int{0, 7}
+}
+
+func (x *ModuleConfig_TrafficManagementConfig) GetEnabled() bool {
+ if x != nil {
+ return x.Enabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_TrafficManagementConfig) GetPositionDedupEnabled() bool {
+ if x != nil {
+ return x.PositionDedupEnabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_TrafficManagementConfig) GetPositionPrecisionBits() uint32 {
+ if x != nil {
+ return x.PositionPrecisionBits
+ }
+ return 0
+}
+
+func (x *ModuleConfig_TrafficManagementConfig) GetPositionMinIntervalSecs() uint32 {
+ if x != nil {
+ return x.PositionMinIntervalSecs
+ }
+ return 0
+}
+
+func (x *ModuleConfig_TrafficManagementConfig) GetNodeinfoDirectResponse() bool {
+ if x != nil {
+ return x.NodeinfoDirectResponse
+ }
+ return false
+}
+
+func (x *ModuleConfig_TrafficManagementConfig) GetNodeinfoDirectResponseMaxHops() uint32 {
+ if x != nil {
+ return x.NodeinfoDirectResponseMaxHops
+ }
+ return 0
+}
+
+func (x *ModuleConfig_TrafficManagementConfig) GetRateLimitEnabled() bool {
+ if x != nil {
+ return x.RateLimitEnabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_TrafficManagementConfig) GetRateLimitWindowSecs() uint32 {
+ if x != nil {
+ return x.RateLimitWindowSecs
+ }
+ return 0
+}
+
+func (x *ModuleConfig_TrafficManagementConfig) GetRateLimitMaxPackets() uint32 {
+ if x != nil {
+ return x.RateLimitMaxPackets
+ }
+ return 0
+}
+
+func (x *ModuleConfig_TrafficManagementConfig) GetDropUnknownEnabled() bool {
+ if x != nil {
+ return x.DropUnknownEnabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_TrafficManagementConfig) GetUnknownPacketThreshold() uint32 {
+ if x != nil {
+ return x.UnknownPacketThreshold
+ }
+ return 0
+}
+
+func (x *ModuleConfig_TrafficManagementConfig) GetExhaustHopTelemetry() bool {
+ if x != nil {
+ return x.ExhaustHopTelemetry
+ }
+ return false
+}
+
+func (x *ModuleConfig_TrafficManagementConfig) GetExhaustHopPosition() bool {
+ if x != nil {
+ return x.ExhaustHopPosition
+ }
+ return false
+}
+
+func (x *ModuleConfig_TrafficManagementConfig) GetRouterPreserveHops() bool {
+ if x != nil {
+ return x.RouterPreserveHops
+ }
+ return false
+}
+
+// Serial Config
+type ModuleConfig_SerialConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Preferences for the SerialModule
+ Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
+ // TODO: REPLACE
+ Echo bool `protobuf:"varint,2,opt,name=echo,proto3" json:"echo,omitempty"`
+ // RX pin (should match Arduino gpio pin number)
+ Rxd uint32 `protobuf:"varint,3,opt,name=rxd,proto3" json:"rxd,omitempty"`
+ // TX pin (should match Arduino gpio pin number)
+ Txd uint32 `protobuf:"varint,4,opt,name=txd,proto3" json:"txd,omitempty"`
+ // Serial baud rate
+ Baud ModuleConfig_SerialConfig_Serial_Baud `protobuf:"varint,5,opt,name=baud,proto3,enum=meshtastic.ModuleConfig_SerialConfig_Serial_Baud" json:"baud,omitempty"`
+ // TODO: REPLACE
+ Timeout uint32 `protobuf:"varint,6,opt,name=timeout,proto3" json:"timeout,omitempty"`
+ // Mode for serial module operation
+ Mode ModuleConfig_SerialConfig_Serial_Mode `protobuf:"varint,7,opt,name=mode,proto3,enum=meshtastic.ModuleConfig_SerialConfig_Serial_Mode" json:"mode,omitempty"`
+ // Overrides the platform's defacto Serial port instance to use with Serial module config settings
+ // This is currently only usable in output modes like NMEA / CalTopo and may behave strangely or not work at all in other modes
+ // Existing logging over the Serial Console will still be present
+ OverrideConsoleSerialPort bool `protobuf:"varint,8,opt,name=override_console_serial_port,json=overrideConsoleSerialPort,proto3" json:"overrideConsoleSerialPort,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ModuleConfig_SerialConfig) Reset() {
+ *x = ModuleConfig_SerialConfig{}
+ mi := &file_meshtastic_module_config_proto_msgTypes[10]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ModuleConfig_SerialConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ModuleConfig_SerialConfig) ProtoMessage() {}
+
+func (x *ModuleConfig_SerialConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_module_config_proto_msgTypes[10]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ModuleConfig_SerialConfig.ProtoReflect.Descriptor instead.
+func (*ModuleConfig_SerialConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_module_config_proto_rawDescGZIP(), []int{0, 8}
+}
+
+func (x *ModuleConfig_SerialConfig) GetEnabled() bool {
+ if x != nil {
+ return x.Enabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_SerialConfig) GetEcho() bool {
+ if x != nil {
+ return x.Echo
+ }
+ return false
+}
+
+func (x *ModuleConfig_SerialConfig) GetRxd() uint32 {
+ if x != nil {
+ return x.Rxd
+ }
+ return 0
+}
+
+func (x *ModuleConfig_SerialConfig) GetTxd() uint32 {
+ if x != nil {
+ return x.Txd
+ }
+ return 0
+}
+
+func (x *ModuleConfig_SerialConfig) GetBaud() ModuleConfig_SerialConfig_Serial_Baud {
+ if x != nil {
+ return x.Baud
+ }
+ return ModuleConfig_SerialConfig_BAUD_DEFAULT
+}
+
+func (x *ModuleConfig_SerialConfig) GetTimeout() uint32 {
+ if x != nil {
+ return x.Timeout
+ }
+ return 0
+}
+
+func (x *ModuleConfig_SerialConfig) GetMode() ModuleConfig_SerialConfig_Serial_Mode {
+ if x != nil {
+ return x.Mode
+ }
+ return ModuleConfig_SerialConfig_DEFAULT
+}
+
+func (x *ModuleConfig_SerialConfig) GetOverrideConsoleSerialPort() bool {
+ if x != nil {
+ return x.OverrideConsoleSerialPort
+ }
+ return false
+}
+
+// External Notifications Config
+type ModuleConfig_ExternalNotificationConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Enable the ExternalNotificationModule
+ Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
+ // When using in On/Off mode, keep the output on for this many
+ // milliseconds. Default 1000ms (1 second).
+ OutputMs uint32 `protobuf:"varint,2,opt,name=output_ms,json=outputMs,proto3" json:"outputMs,omitempty"`
+ // Define the output pin GPIO setting Defaults to
+ // EXT_NOTIFY_OUT if set for the board.
+ // In standalone devices this pin should drive the LED to match the UI.
+ Output uint32 `protobuf:"varint,3,opt,name=output,proto3" json:"output,omitempty"`
+ // Optional: Define a secondary output pin for a vibra motor
+ // This is used in standalone devices to match the UI.
+ OutputVibra uint32 `protobuf:"varint,8,opt,name=output_vibra,json=outputVibra,proto3" json:"outputVibra,omitempty"`
+ // Optional: Define a tertiary output pin for an active buzzer
+ // This is used in standalone devices to to match the UI.
+ OutputBuzzer uint32 `protobuf:"varint,9,opt,name=output_buzzer,json=outputBuzzer,proto3" json:"outputBuzzer,omitempty"`
+ // IF this is true, the 'output' Pin will be pulled active high, false
+ // means active low.
+ Active bool `protobuf:"varint,4,opt,name=active,proto3" json:"active,omitempty"`
+ // True: Alert when a text message arrives (output)
+ AlertMessage bool `protobuf:"varint,5,opt,name=alert_message,json=alertMessage,proto3" json:"alertMessage,omitempty"`
+ // True: Alert when a text message arrives (output_vibra)
+ AlertMessageVibra bool `protobuf:"varint,10,opt,name=alert_message_vibra,json=alertMessageVibra,proto3" json:"alertMessageVibra,omitempty"`
+ // True: Alert when a text message arrives (output_buzzer)
+ AlertMessageBuzzer bool `protobuf:"varint,11,opt,name=alert_message_buzzer,json=alertMessageBuzzer,proto3" json:"alertMessageBuzzer,omitempty"`
+ // True: Alert when the bell character is received (output)
+ AlertBell bool `protobuf:"varint,6,opt,name=alert_bell,json=alertBell,proto3" json:"alertBell,omitempty"`
+ // True: Alert when the bell character is received (output_vibra)
+ AlertBellVibra bool `protobuf:"varint,12,opt,name=alert_bell_vibra,json=alertBellVibra,proto3" json:"alertBellVibra,omitempty"`
+ // True: Alert when the bell character is received (output_buzzer)
+ AlertBellBuzzer bool `protobuf:"varint,13,opt,name=alert_bell_buzzer,json=alertBellBuzzer,proto3" json:"alertBellBuzzer,omitempty"`
+ // use a PWM output instead of a simple on/off output. This will ignore
+ // the 'output', 'output_ms' and 'active' settings and use the
+ // device.buzzer_gpio instead.
+ UsePwm bool `protobuf:"varint,7,opt,name=use_pwm,json=usePwm,proto3" json:"usePwm,omitempty"`
+ // The notification will toggle with 'output_ms' for this time of seconds.
+ // Default is 0 which means don't repeat at all. 60 would mean blink
+ // and/or beep for 60 seconds
+ NagTimeout uint32 `protobuf:"varint,14,opt,name=nag_timeout,json=nagTimeout,proto3" json:"nagTimeout,omitempty"`
+ // When true, enables devices with native I2S audio output to use the RTTTL over speaker like a buzzer
+ // T-Watch S3 and T-Deck for example have this capability
+ UseI2SAsBuzzer bool `protobuf:"varint,15,opt,name=use_i2s_as_buzzer,json=useI2sAsBuzzer,proto3" json:"useI2sAsBuzzer,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ModuleConfig_ExternalNotificationConfig) Reset() {
+ *x = ModuleConfig_ExternalNotificationConfig{}
+ mi := &file_meshtastic_module_config_proto_msgTypes[11]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ModuleConfig_ExternalNotificationConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ModuleConfig_ExternalNotificationConfig) ProtoMessage() {}
+
+func (x *ModuleConfig_ExternalNotificationConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_module_config_proto_msgTypes[11]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ModuleConfig_ExternalNotificationConfig.ProtoReflect.Descriptor instead.
+func (*ModuleConfig_ExternalNotificationConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_module_config_proto_rawDescGZIP(), []int{0, 9}
+}
+
+func (x *ModuleConfig_ExternalNotificationConfig) GetEnabled() bool {
+ if x != nil {
+ return x.Enabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_ExternalNotificationConfig) GetOutputMs() uint32 {
+ if x != nil {
+ return x.OutputMs
+ }
+ return 0
+}
+
+func (x *ModuleConfig_ExternalNotificationConfig) GetOutput() uint32 {
+ if x != nil {
+ return x.Output
+ }
+ return 0
+}
+
+func (x *ModuleConfig_ExternalNotificationConfig) GetOutputVibra() uint32 {
+ if x != nil {
+ return x.OutputVibra
+ }
+ return 0
+}
+
+func (x *ModuleConfig_ExternalNotificationConfig) GetOutputBuzzer() uint32 {
+ if x != nil {
+ return x.OutputBuzzer
+ }
+ return 0
+}
+
+func (x *ModuleConfig_ExternalNotificationConfig) GetActive() bool {
+ if x != nil {
+ return x.Active
+ }
+ return false
+}
+
+func (x *ModuleConfig_ExternalNotificationConfig) GetAlertMessage() bool {
+ if x != nil {
+ return x.AlertMessage
+ }
+ return false
+}
+
+func (x *ModuleConfig_ExternalNotificationConfig) GetAlertMessageVibra() bool {
+ if x != nil {
+ return x.AlertMessageVibra
+ }
+ return false
+}
+
+func (x *ModuleConfig_ExternalNotificationConfig) GetAlertMessageBuzzer() bool {
+ if x != nil {
+ return x.AlertMessageBuzzer
+ }
+ return false
+}
+
+func (x *ModuleConfig_ExternalNotificationConfig) GetAlertBell() bool {
+ if x != nil {
+ return x.AlertBell
+ }
+ return false
+}
+
+func (x *ModuleConfig_ExternalNotificationConfig) GetAlertBellVibra() bool {
+ if x != nil {
+ return x.AlertBellVibra
+ }
+ return false
+}
+
+func (x *ModuleConfig_ExternalNotificationConfig) GetAlertBellBuzzer() bool {
+ if x != nil {
+ return x.AlertBellBuzzer
+ }
+ return false
+}
+
+func (x *ModuleConfig_ExternalNotificationConfig) GetUsePwm() bool {
+ if x != nil {
+ return x.UsePwm
+ }
+ return false
+}
+
+func (x *ModuleConfig_ExternalNotificationConfig) GetNagTimeout() uint32 {
+ if x != nil {
+ return x.NagTimeout
+ }
+ return 0
+}
+
+func (x *ModuleConfig_ExternalNotificationConfig) GetUseI2SAsBuzzer() bool {
+ if x != nil {
+ return x.UseI2SAsBuzzer
+ }
+ return false
+}
+
+// Store and Forward Module Config
+type ModuleConfig_StoreForwardConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Enable the Store and Forward Module
+ Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
+ // TODO: REPLACE
+ Heartbeat bool `protobuf:"varint,2,opt,name=heartbeat,proto3" json:"heartbeat,omitempty"`
+ // TODO: REPLACE
+ Records uint32 `protobuf:"varint,3,opt,name=records,proto3" json:"records,omitempty"`
+ // TODO: REPLACE
+ HistoryReturnMax uint32 `protobuf:"varint,4,opt,name=history_return_max,json=historyReturnMax,proto3" json:"historyReturnMax,omitempty"`
+ // TODO: REPLACE
+ HistoryReturnWindow uint32 `protobuf:"varint,5,opt,name=history_return_window,json=historyReturnWindow,proto3" json:"historyReturnWindow,omitempty"`
+ // Set to true to let this node act as a server that stores received messages and resends them upon request.
+ IsServer bool `protobuf:"varint,6,opt,name=is_server,json=isServer,proto3" json:"isServer,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ModuleConfig_StoreForwardConfig) Reset() {
+ *x = ModuleConfig_StoreForwardConfig{}
+ mi := &file_meshtastic_module_config_proto_msgTypes[12]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ModuleConfig_StoreForwardConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ModuleConfig_StoreForwardConfig) ProtoMessage() {}
+
+func (x *ModuleConfig_StoreForwardConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_module_config_proto_msgTypes[12]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ModuleConfig_StoreForwardConfig.ProtoReflect.Descriptor instead.
+func (*ModuleConfig_StoreForwardConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_module_config_proto_rawDescGZIP(), []int{0, 10}
+}
+
+func (x *ModuleConfig_StoreForwardConfig) GetEnabled() bool {
+ if x != nil {
+ return x.Enabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_StoreForwardConfig) GetHeartbeat() bool {
+ if x != nil {
+ return x.Heartbeat
+ }
+ return false
+}
+
+func (x *ModuleConfig_StoreForwardConfig) GetRecords() uint32 {
+ if x != nil {
+ return x.Records
+ }
+ return 0
+}
+
+func (x *ModuleConfig_StoreForwardConfig) GetHistoryReturnMax() uint32 {
+ if x != nil {
+ return x.HistoryReturnMax
+ }
+ return 0
+}
+
+func (x *ModuleConfig_StoreForwardConfig) GetHistoryReturnWindow() uint32 {
+ if x != nil {
+ return x.HistoryReturnWindow
+ }
+ return 0
+}
+
+func (x *ModuleConfig_StoreForwardConfig) GetIsServer() bool {
+ if x != nil {
+ return x.IsServer
+ }
+ return false
+}
+
+// Preferences for the RangeTestModule
+type ModuleConfig_RangeTestConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Enable the Range Test Module
+ Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"`
+ // Send out range test messages from this node
+ Sender uint32 `protobuf:"varint,2,opt,name=sender,proto3" json:"sender,omitempty"`
+ // Bool value indicating that this node should save a RangeTest.csv file.
+ // ESP32 Only
+ Save bool `protobuf:"varint,3,opt,name=save,proto3" json:"save,omitempty"`
+ // Bool indicating that the node should cleanup / destroy it's RangeTest.csv file.
+ // ESP32 Only
+ ClearOnReboot bool `protobuf:"varint,4,opt,name=clear_on_reboot,json=clearOnReboot,proto3" json:"clearOnReboot,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ModuleConfig_RangeTestConfig) Reset() {
+ *x = ModuleConfig_RangeTestConfig{}
+ mi := &file_meshtastic_module_config_proto_msgTypes[13]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ModuleConfig_RangeTestConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ModuleConfig_RangeTestConfig) ProtoMessage() {}
+
+func (x *ModuleConfig_RangeTestConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_module_config_proto_msgTypes[13]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ModuleConfig_RangeTestConfig.ProtoReflect.Descriptor instead.
+func (*ModuleConfig_RangeTestConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_module_config_proto_rawDescGZIP(), []int{0, 11}
+}
+
+func (x *ModuleConfig_RangeTestConfig) GetEnabled() bool {
+ if x != nil {
+ return x.Enabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_RangeTestConfig) GetSender() uint32 {
+ if x != nil {
+ return x.Sender
+ }
+ return 0
+}
+
+func (x *ModuleConfig_RangeTestConfig) GetSave() bool {
+ if x != nil {
+ return x.Save
+ }
+ return false
+}
+
+func (x *ModuleConfig_RangeTestConfig) GetClearOnReboot() bool {
+ if x != nil {
+ return x.ClearOnReboot
+ }
+ return false
+}
+
+// Configuration for both device and environment metrics
+type ModuleConfig_TelemetryConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Interval in seconds of how often we should try to send our
+ // device metrics to the mesh
+ DeviceUpdateInterval uint32 `protobuf:"varint,1,opt,name=device_update_interval,json=deviceUpdateInterval,proto3" json:"deviceUpdateInterval,omitempty"`
+ EnvironmentUpdateInterval uint32 `protobuf:"varint,2,opt,name=environment_update_interval,json=environmentUpdateInterval,proto3" json:"environmentUpdateInterval,omitempty"`
+ // Preferences for the Telemetry Module (Environment)
+ // Enable/Disable the telemetry measurement module measurement collection
+ EnvironmentMeasurementEnabled bool `protobuf:"varint,3,opt,name=environment_measurement_enabled,json=environmentMeasurementEnabled,proto3" json:"environmentMeasurementEnabled,omitempty"`
+ // Enable/Disable the telemetry measurement module on-device display
+ EnvironmentScreenEnabled bool `protobuf:"varint,4,opt,name=environment_screen_enabled,json=environmentScreenEnabled,proto3" json:"environmentScreenEnabled,omitempty"`
+ // We'll always read the sensor in Celsius, but sometimes we might want to
+ // display the results in Fahrenheit as a "user preference".
+ EnvironmentDisplayFahrenheit bool `protobuf:"varint,5,opt,name=environment_display_fahrenheit,json=environmentDisplayFahrenheit,proto3" json:"environmentDisplayFahrenheit,omitempty"`
+ // Enable/Disable the air quality metrics
+ AirQualityEnabled bool `protobuf:"varint,6,opt,name=air_quality_enabled,json=airQualityEnabled,proto3" json:"airQualityEnabled,omitempty"`
+ // Interval in seconds of how often we should try to send our
+ // air quality metrics to the mesh
+ AirQualityInterval uint32 `protobuf:"varint,7,opt,name=air_quality_interval,json=airQualityInterval,proto3" json:"airQualityInterval,omitempty"`
+ // Enable/disable Power metrics
+ PowerMeasurementEnabled bool `protobuf:"varint,8,opt,name=power_measurement_enabled,json=powerMeasurementEnabled,proto3" json:"powerMeasurementEnabled,omitempty"`
+ // Interval in seconds of how often we should try to send our
+ // power metrics to the mesh
+ PowerUpdateInterval uint32 `protobuf:"varint,9,opt,name=power_update_interval,json=powerUpdateInterval,proto3" json:"powerUpdateInterval,omitempty"`
+ // Enable/Disable the power measurement module on-device display
+ PowerScreenEnabled bool `protobuf:"varint,10,opt,name=power_screen_enabled,json=powerScreenEnabled,proto3" json:"powerScreenEnabled,omitempty"`
+ // Preferences for the (Health) Telemetry Module
+ // Enable/Disable the telemetry measurement module measurement collection
+ HealthMeasurementEnabled bool `protobuf:"varint,11,opt,name=health_measurement_enabled,json=healthMeasurementEnabled,proto3" json:"healthMeasurementEnabled,omitempty"`
+ // Interval in seconds of how often we should try to send our
+ // health metrics to the mesh
+ HealthUpdateInterval uint32 `protobuf:"varint,12,opt,name=health_update_interval,json=healthUpdateInterval,proto3" json:"healthUpdateInterval,omitempty"`
+ // Enable/Disable the health telemetry module on-device display
+ HealthScreenEnabled bool `protobuf:"varint,13,opt,name=health_screen_enabled,json=healthScreenEnabled,proto3" json:"healthScreenEnabled,omitempty"`
+ // 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
+ DeviceTelemetryEnabled bool `protobuf:"varint,14,opt,name=device_telemetry_enabled,json=deviceTelemetryEnabled,proto3" json:"deviceTelemetryEnabled,omitempty"`
+ // Enable/Disable the air quality telemetry measurement module on-device display
+ AirQualityScreenEnabled bool `protobuf:"varint,15,opt,name=air_quality_screen_enabled,json=airQualityScreenEnabled,proto3" json:"airQualityScreenEnabled,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ModuleConfig_TelemetryConfig) Reset() {
+ *x = ModuleConfig_TelemetryConfig{}
+ mi := &file_meshtastic_module_config_proto_msgTypes[14]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ModuleConfig_TelemetryConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ModuleConfig_TelemetryConfig) ProtoMessage() {}
+
+func (x *ModuleConfig_TelemetryConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_module_config_proto_msgTypes[14]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ModuleConfig_TelemetryConfig.ProtoReflect.Descriptor instead.
+func (*ModuleConfig_TelemetryConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_module_config_proto_rawDescGZIP(), []int{0, 12}
+}
+
+func (x *ModuleConfig_TelemetryConfig) GetDeviceUpdateInterval() uint32 {
+ if x != nil {
+ return x.DeviceUpdateInterval
+ }
+ return 0
+}
+
+func (x *ModuleConfig_TelemetryConfig) GetEnvironmentUpdateInterval() uint32 {
+ if x != nil {
+ return x.EnvironmentUpdateInterval
+ }
+ return 0
+}
+
+func (x *ModuleConfig_TelemetryConfig) GetEnvironmentMeasurementEnabled() bool {
+ if x != nil {
+ return x.EnvironmentMeasurementEnabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_TelemetryConfig) GetEnvironmentScreenEnabled() bool {
+ if x != nil {
+ return x.EnvironmentScreenEnabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_TelemetryConfig) GetEnvironmentDisplayFahrenheit() bool {
+ if x != nil {
+ return x.EnvironmentDisplayFahrenheit
+ }
+ return false
+}
+
+func (x *ModuleConfig_TelemetryConfig) GetAirQualityEnabled() bool {
+ if x != nil {
+ return x.AirQualityEnabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_TelemetryConfig) GetAirQualityInterval() uint32 {
+ if x != nil {
+ return x.AirQualityInterval
+ }
+ return 0
+}
+
+func (x *ModuleConfig_TelemetryConfig) GetPowerMeasurementEnabled() bool {
+ if x != nil {
+ return x.PowerMeasurementEnabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_TelemetryConfig) GetPowerUpdateInterval() uint32 {
+ if x != nil {
+ return x.PowerUpdateInterval
+ }
+ return 0
+}
+
+func (x *ModuleConfig_TelemetryConfig) GetPowerScreenEnabled() bool {
+ if x != nil {
+ return x.PowerScreenEnabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_TelemetryConfig) GetHealthMeasurementEnabled() bool {
+ if x != nil {
+ return x.HealthMeasurementEnabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_TelemetryConfig) GetHealthUpdateInterval() uint32 {
+ if x != nil {
+ return x.HealthUpdateInterval
+ }
+ return 0
+}
+
+func (x *ModuleConfig_TelemetryConfig) GetHealthScreenEnabled() bool {
+ if x != nil {
+ return x.HealthScreenEnabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_TelemetryConfig) GetDeviceTelemetryEnabled() bool {
+ if x != nil {
+ return x.DeviceTelemetryEnabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_TelemetryConfig) GetAirQualityScreenEnabled() bool {
+ if x != nil {
+ return x.AirQualityScreenEnabled
+ }
+ return false
+}
+
+// Canned Messages Module Config
+type ModuleConfig_CannedMessageConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Enable the rotary encoder #1. This is a 'dumb' encoder sending pulses on both A and B pins while rotating.
+ Rotary1Enabled bool `protobuf:"varint,1,opt,name=rotary1_enabled,json=rotary1Enabled,proto3" json:"rotary1Enabled,omitempty"`
+ // GPIO pin for rotary encoder A port.
+ InputbrokerPinA uint32 `protobuf:"varint,2,opt,name=inputbroker_pin_a,json=inputbrokerPinA,proto3" json:"inputbrokerPinA,omitempty"`
+ // GPIO pin for rotary encoder B port.
+ InputbrokerPinB uint32 `protobuf:"varint,3,opt,name=inputbroker_pin_b,json=inputbrokerPinB,proto3" json:"inputbrokerPinB,omitempty"`
+ // GPIO pin for rotary encoder Press port.
+ InputbrokerPinPress uint32 `protobuf:"varint,4,opt,name=inputbroker_pin_press,json=inputbrokerPinPress,proto3" json:"inputbrokerPinPress,omitempty"`
+ // Generate input event on CW of this kind.
+ InputbrokerEventCw ModuleConfig_CannedMessageConfig_InputEventChar `protobuf:"varint,5,opt,name=inputbroker_event_cw,json=inputbrokerEventCw,proto3,enum=meshtastic.ModuleConfig_CannedMessageConfig_InputEventChar" json:"inputbrokerEventCw,omitempty"`
+ // Generate input event on CCW of this kind.
+ InputbrokerEventCcw ModuleConfig_CannedMessageConfig_InputEventChar `protobuf:"varint,6,opt,name=inputbroker_event_ccw,json=inputbrokerEventCcw,proto3,enum=meshtastic.ModuleConfig_CannedMessageConfig_InputEventChar" json:"inputbrokerEventCcw,omitempty"`
+ // Generate input event on Press of this kind.
+ InputbrokerEventPress ModuleConfig_CannedMessageConfig_InputEventChar `protobuf:"varint,7,opt,name=inputbroker_event_press,json=inputbrokerEventPress,proto3,enum=meshtastic.ModuleConfig_CannedMessageConfig_InputEventChar" json:"inputbrokerEventPress,omitempty"`
+ // Enable the Up/Down/Select input device. Can be RAK rotary encoder or 3 buttons. Uses the a/b/press definitions from inputbroker.
+ Updown1Enabled bool `protobuf:"varint,8,opt,name=updown1_enabled,json=updown1Enabled,proto3" json:"updown1Enabled,omitempty"`
+ // Enable/disable CannedMessageModule.
+ //
+ // Deprecated: Marked as deprecated in meshtastic/module_config.proto.
+ Enabled bool `protobuf:"varint,9,opt,name=enabled,proto3" json:"enabled,omitempty"`
+ // Input event origin accepted by the canned message module.
+ // Can be e.g. "rotEnc1", "upDownEnc1", "scanAndSelect", "cardkb", "serialkb", or keyword "_any"
+ //
+ // Deprecated: Marked as deprecated in meshtastic/module_config.proto.
+ AllowInputSource string `protobuf:"bytes,10,opt,name=allow_input_source,json=allowInputSource,proto3" json:"allowInputSource,omitempty"`
+ // CannedMessageModule also sends a bell character with the messages.
+ // ExternalNotificationModule can benefit from this feature.
+ SendBell bool `protobuf:"varint,11,opt,name=send_bell,json=sendBell,proto3" json:"sendBell,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ModuleConfig_CannedMessageConfig) Reset() {
+ *x = ModuleConfig_CannedMessageConfig{}
+ mi := &file_meshtastic_module_config_proto_msgTypes[15]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ModuleConfig_CannedMessageConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ModuleConfig_CannedMessageConfig) ProtoMessage() {}
+
+func (x *ModuleConfig_CannedMessageConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_module_config_proto_msgTypes[15]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ModuleConfig_CannedMessageConfig.ProtoReflect.Descriptor instead.
+func (*ModuleConfig_CannedMessageConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_module_config_proto_rawDescGZIP(), []int{0, 13}
+}
+
+func (x *ModuleConfig_CannedMessageConfig) GetRotary1Enabled() bool {
+ if x != nil {
+ return x.Rotary1Enabled
+ }
+ return false
+}
+
+func (x *ModuleConfig_CannedMessageConfig) GetInputbrokerPinA() uint32 {
+ if x != nil {
+ return x.InputbrokerPinA
+ }
+ return 0
+}
+
+func (x *ModuleConfig_CannedMessageConfig) GetInputbrokerPinB() uint32 {
+ if x != nil {
+ return x.InputbrokerPinB
+ }
+ return 0
+}
+
+func (x *ModuleConfig_CannedMessageConfig) GetInputbrokerPinPress() uint32 {
+ if x != nil {
+ return x.InputbrokerPinPress
+ }
+ return 0
+}
+
+func (x *ModuleConfig_CannedMessageConfig) GetInputbrokerEventCw() ModuleConfig_CannedMessageConfig_InputEventChar {
+ if x != nil {
+ return x.InputbrokerEventCw
+ }
+ return ModuleConfig_CannedMessageConfig_NONE
+}
+
+func (x *ModuleConfig_CannedMessageConfig) GetInputbrokerEventCcw() ModuleConfig_CannedMessageConfig_InputEventChar {
+ if x != nil {
+ return x.InputbrokerEventCcw
+ }
+ return ModuleConfig_CannedMessageConfig_NONE
+}
+
+func (x *ModuleConfig_CannedMessageConfig) GetInputbrokerEventPress() ModuleConfig_CannedMessageConfig_InputEventChar {
+ if x != nil {
+ return x.InputbrokerEventPress
+ }
+ return ModuleConfig_CannedMessageConfig_NONE
+}
+
+func (x *ModuleConfig_CannedMessageConfig) GetUpdown1Enabled() bool {
+ if x != nil {
+ return x.Updown1Enabled
+ }
+ return false
+}
+
+// Deprecated: Marked as deprecated in meshtastic/module_config.proto.
+func (x *ModuleConfig_CannedMessageConfig) GetEnabled() bool {
+ if x != nil {
+ return x.Enabled
+ }
+ return false
+}
+
+// Deprecated: Marked as deprecated in meshtastic/module_config.proto.
+func (x *ModuleConfig_CannedMessageConfig) GetAllowInputSource() string {
+ if x != nil {
+ return x.AllowInputSource
+ }
+ return ""
+}
+
+func (x *ModuleConfig_CannedMessageConfig) GetSendBell() bool {
+ if x != nil {
+ return x.SendBell
+ }
+ return false
+}
+
+// Ambient Lighting Module - Settings for control of onboard LEDs to allow users to adjust the brightness levels and respective color levels.
+// Initially created for the RAK14001 RGB LED module.
+type ModuleConfig_AmbientLightingConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Sets LED to on or off.
+ LedState bool `protobuf:"varint,1,opt,name=led_state,json=ledState,proto3" json:"ledState,omitempty"`
+ // Sets the current for the LED output. Default is 10.
+ Current uint32 `protobuf:"varint,2,opt,name=current,proto3" json:"current,omitempty"`
+ // Sets the red LED level. Values are 0-255.
+ Red uint32 `protobuf:"varint,3,opt,name=red,proto3" json:"red,omitempty"`
+ // Sets the green LED level. Values are 0-255.
+ Green uint32 `protobuf:"varint,4,opt,name=green,proto3" json:"green,omitempty"`
+ // Sets the blue LED level. Values are 0-255.
+ Blue uint32 `protobuf:"varint,5,opt,name=blue,proto3" json:"blue,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ModuleConfig_AmbientLightingConfig) Reset() {
+ *x = ModuleConfig_AmbientLightingConfig{}
+ mi := &file_meshtastic_module_config_proto_msgTypes[16]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ModuleConfig_AmbientLightingConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ModuleConfig_AmbientLightingConfig) ProtoMessage() {}
+
+func (x *ModuleConfig_AmbientLightingConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_module_config_proto_msgTypes[16]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ModuleConfig_AmbientLightingConfig.ProtoReflect.Descriptor instead.
+func (*ModuleConfig_AmbientLightingConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_module_config_proto_rawDescGZIP(), []int{0, 14}
+}
+
+func (x *ModuleConfig_AmbientLightingConfig) GetLedState() bool {
+ if x != nil {
+ return x.LedState
+ }
+ return false
+}
+
+func (x *ModuleConfig_AmbientLightingConfig) GetCurrent() uint32 {
+ if x != nil {
+ return x.Current
+ }
+ return 0
+}
+
+func (x *ModuleConfig_AmbientLightingConfig) GetRed() uint32 {
+ if x != nil {
+ return x.Red
+ }
+ return 0
+}
+
+func (x *ModuleConfig_AmbientLightingConfig) GetGreen() uint32 {
+ if x != nil {
+ return x.Green
+ }
+ return 0
+}
+
+func (x *ModuleConfig_AmbientLightingConfig) GetBlue() uint32 {
+ if x != nil {
+ return x.Blue
+ }
+ return 0
+}
+
+// StatusMessage config - Allows setting a status message for a node to periodically rebroadcast
+type ModuleConfig_StatusMessageConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The actual status string
+ NodeStatus string `protobuf:"bytes,1,opt,name=node_status,json=nodeStatus,proto3" json:"nodeStatus,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ModuleConfig_StatusMessageConfig) Reset() {
+ *x = ModuleConfig_StatusMessageConfig{}
+ mi := &file_meshtastic_module_config_proto_msgTypes[17]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ModuleConfig_StatusMessageConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ModuleConfig_StatusMessageConfig) ProtoMessage() {}
+
+func (x *ModuleConfig_StatusMessageConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_module_config_proto_msgTypes[17]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ModuleConfig_StatusMessageConfig.ProtoReflect.Descriptor instead.
+func (*ModuleConfig_StatusMessageConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_module_config_proto_rawDescGZIP(), []int{0, 15}
+}
+
+func (x *ModuleConfig_StatusMessageConfig) GetNodeStatus() string {
+ if x != nil {
+ return x.NodeStatus
+ }
+ return ""
+}
+
+// TAK team/role configuration
+type ModuleConfig_TAKConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Team color.
+ // Default Unspecifed_Color -> firmware uses Cyan
+ Team Team `protobuf:"varint,1,opt,name=team,proto3,enum=meshtastic.Team" json:"team,omitempty"`
+ // Member role.
+ // Default Unspecifed -> firmware uses TeamMember
+ Role MemberRole `protobuf:"varint,2,opt,name=role,proto3,enum=meshtastic.MemberRole" json:"role,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ModuleConfig_TAKConfig) Reset() {
+ *x = ModuleConfig_TAKConfig{}
+ mi := &file_meshtastic_module_config_proto_msgTypes[18]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ModuleConfig_TAKConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ModuleConfig_TAKConfig) ProtoMessage() {}
+
+func (x *ModuleConfig_TAKConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_module_config_proto_msgTypes[18]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ModuleConfig_TAKConfig.ProtoReflect.Descriptor instead.
+func (*ModuleConfig_TAKConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_module_config_proto_rawDescGZIP(), []int{0, 16}
+}
+
+func (x *ModuleConfig_TAKConfig) GetTeam() Team {
+ if x != nil {
+ return x.Team
+ }
+ return Team_Unspecifed_Color
+}
+
+func (x *ModuleConfig_TAKConfig) GetRole() MemberRole {
+ if x != nil {
+ return x.Role
+ }
+ return MemberRole_Unspecifed
+}
+
+var File_meshtastic_module_config_proto protoreflect.FileDescriptor
+
+const file_meshtastic_module_config_proto_rawDesc = "" +
+ "\n" +
+ "\x1emeshtastic/module_config.proto\x12\n" +
+ "meshtastic\x1a\x15meshtastic/atak.proto\"\x8d=\n" +
+ "\fModuleConfig\x129\n" +
+ "\x04mqtt\x18\x01 \x01(\v2#.meshtastic.ModuleConfig.MQTTConfigH\x00R\x04mqtt\x12?\n" +
+ "\x06serial\x18\x02 \x01(\v2%.meshtastic.ModuleConfig.SerialConfigH\x00R\x06serial\x12j\n" +
+ "\x15external_notification\x18\x03 \x01(\v23.meshtastic.ModuleConfig.ExternalNotificationConfigH\x00R\x14externalNotification\x12R\n" +
+ "\rstore_forward\x18\x04 \x01(\v2+.meshtastic.ModuleConfig.StoreForwardConfigH\x00R\fstoreForward\x12I\n" +
+ "\n" +
+ "range_test\x18\x05 \x01(\v2(.meshtastic.ModuleConfig.RangeTestConfigH\x00R\trangeTest\x12H\n" +
+ "\ttelemetry\x18\x06 \x01(\v2(.meshtastic.ModuleConfig.TelemetryConfigH\x00R\ttelemetry\x12U\n" +
+ "\x0ecanned_message\x18\a \x01(\v2,.meshtastic.ModuleConfig.CannedMessageConfigH\x00R\rcannedMessage\x12<\n" +
+ "\x05audio\x18\b \x01(\v2$.meshtastic.ModuleConfig.AudioConfigH\x00R\x05audio\x12X\n" +
+ "\x0fremote_hardware\x18\t \x01(\v2-.meshtastic.ModuleConfig.RemoteHardwareConfigH\x00R\x0eremoteHardware\x12R\n" +
+ "\rneighbor_info\x18\n" +
+ " \x01(\v2+.meshtastic.ModuleConfig.NeighborInfoConfigH\x00R\fneighborInfo\x12[\n" +
+ "\x10ambient_lighting\x18\v \x01(\v2..meshtastic.ModuleConfig.AmbientLightingConfigH\x00R\x0fambientLighting\x12[\n" +
+ "\x10detection_sensor\x18\f \x01(\v2..meshtastic.ModuleConfig.DetectionSensorConfigH\x00R\x0fdetectionSensor\x12K\n" +
+ "\n" +
+ "paxcounter\x18\r \x01(\v2).meshtastic.ModuleConfig.PaxcounterConfigH\x00R\n" +
+ "paxcounter\x12T\n" +
+ "\rstatusmessage\x18\x0e \x01(\v2,.meshtastic.ModuleConfig.StatusMessageConfigH\x00R\rstatusmessage\x12a\n" +
+ "\x12traffic_management\x18\x0f \x01(\v20.meshtastic.ModuleConfig.TrafficManagementConfigH\x00R\x11trafficManagement\x126\n" +
+ "\x03tak\x18\x10 \x01(\v2\".meshtastic.ModuleConfig.TAKConfigH\x00R\x03tak\x1a\xc6\x03\n" +
+ "\n" +
+ "MQTTConfig\x12\x18\n" +
+ "\aenabled\x18\x01 \x01(\bR\aenabled\x12\x18\n" +
+ "\aaddress\x18\x02 \x01(\tR\aaddress\x12\x1a\n" +
+ "\busername\x18\x03 \x01(\tR\busername\x12\x1a\n" +
+ "\bpassword\x18\x04 \x01(\tR\bpassword\x12-\n" +
+ "\x12encryption_enabled\x18\x05 \x01(\bR\x11encryptionEnabled\x12!\n" +
+ "\fjson_enabled\x18\x06 \x01(\bR\vjsonEnabled\x12\x1f\n" +
+ "\vtls_enabled\x18\a \x01(\bR\n" +
+ "tlsEnabled\x12\x12\n" +
+ "\x04root\x18\b \x01(\tR\x04root\x125\n" +
+ "\x17proxy_to_client_enabled\x18\t \x01(\bR\x14proxyToClientEnabled\x122\n" +
+ "\x15map_reporting_enabled\x18\n" +
+ " \x01(\bR\x13mapReportingEnabled\x12Z\n" +
+ "\x13map_report_settings\x18\v \x01(\v2*.meshtastic.ModuleConfig.MapReportSettingsR\x11mapReportSettings\x1a\xac\x01\n" +
+ "\x11MapReportSettings\x122\n" +
+ "\x15publish_interval_secs\x18\x01 \x01(\rR\x13publishIntervalSecs\x12-\n" +
+ "\x12position_precision\x18\x02 \x01(\rR\x11positionPrecision\x124\n" +
+ "\x16should_report_location\x18\x03 \x01(\bR\x14shouldReportLocation\x1a\xb3\x01\n" +
+ "\x14RemoteHardwareConfig\x12\x18\n" +
+ "\aenabled\x18\x01 \x01(\bR\aenabled\x12;\n" +
+ "\x1aallow_undefined_pin_access\x18\x02 \x01(\bR\x17allowUndefinedPinAccess\x12D\n" +
+ "\x0eavailable_pins\x18\x03 \x03(\v2\x1d.meshtastic.RemoteHardwarePinR\ravailablePins\x1a\x85\x01\n" +
+ "\x12NeighborInfoConfig\x12\x18\n" +
+ "\aenabled\x18\x01 \x01(\bR\aenabled\x12'\n" +
+ "\x0fupdate_interval\x18\x02 \x01(\rR\x0eupdateInterval\x12,\n" +
+ "\x12transmit_over_lora\x18\x03 \x01(\bR\x10transmitOverLora\x1a\x87\x04\n" +
+ "\x15DetectionSensorConfig\x12\x18\n" +
+ "\aenabled\x18\x01 \x01(\bR\aenabled\x124\n" +
+ "\x16minimum_broadcast_secs\x18\x02 \x01(\rR\x14minimumBroadcastSecs\x120\n" +
+ "\x14state_broadcast_secs\x18\x03 \x01(\rR\x12stateBroadcastSecs\x12\x1b\n" +
+ "\tsend_bell\x18\x04 \x01(\bR\bsendBell\x12\x12\n" +
+ "\x04name\x18\x05 \x01(\tR\x04name\x12\x1f\n" +
+ "\vmonitor_pin\x18\x06 \x01(\rR\n" +
+ "monitorPin\x12p\n" +
+ "\x16detection_trigger_type\x18\a \x01(\x0e2:.meshtastic.ModuleConfig.DetectionSensorConfig.TriggerTypeR\x14detectionTriggerType\x12\x1d\n" +
+ "\n" +
+ "use_pullup\x18\b \x01(\bR\tusePullup\"\x88\x01\n" +
+ "\vTriggerType\x12\r\n" +
+ "\tLOGIC_LOW\x10\x00\x12\x0e\n" +
+ "\n" +
+ "LOGIC_HIGH\x10\x01\x12\x10\n" +
+ "\fFALLING_EDGE\x10\x02\x12\x0f\n" +
+ "\vRISING_EDGE\x10\x03\x12\x1a\n" +
+ "\x16EITHER_EDGE_ACTIVE_LOW\x10\x04\x12\x1b\n" +
+ "\x17EITHER_EDGE_ACTIVE_HIGH\x10\x05\x1a\xa2\x03\n" +
+ "\vAudioConfig\x12%\n" +
+ "\x0ecodec2_enabled\x18\x01 \x01(\bR\rcodec2Enabled\x12\x17\n" +
+ "\aptt_pin\x18\x02 \x01(\rR\x06pttPin\x12I\n" +
+ "\abitrate\x18\x03 \x01(\x0e2/.meshtastic.ModuleConfig.AudioConfig.Audio_BaudR\abitrate\x12\x15\n" +
+ "\x06i2s_ws\x18\x04 \x01(\rR\x05i2sWs\x12\x15\n" +
+ "\x06i2s_sd\x18\x05 \x01(\rR\x05i2sSd\x12\x17\n" +
+ "\ai2s_din\x18\x06 \x01(\rR\x06i2sDin\x12\x17\n" +
+ "\ai2s_sck\x18\a \x01(\rR\x06i2sSck\"\xa7\x01\n" +
+ "\n" +
+ "Audio_Baud\x12\x12\n" +
+ "\x0eCODEC2_DEFAULT\x10\x00\x12\x0f\n" +
+ "\vCODEC2_3200\x10\x01\x12\x0f\n" +
+ "\vCODEC2_2400\x10\x02\x12\x0f\n" +
+ "\vCODEC2_1600\x10\x03\x12\x0f\n" +
+ "\vCODEC2_1400\x10\x04\x12\x0f\n" +
+ "\vCODEC2_1300\x10\x05\x12\x0f\n" +
+ "\vCODEC2_1200\x10\x06\x12\x0e\n" +
+ "\n" +
+ "CODEC2_700\x10\a\x12\x0f\n" +
+ "\vCODEC2_700B\x10\b\x1a\xb6\x01\n" +
+ "\x10PaxcounterConfig\x12\x18\n" +
+ "\aenabled\x18\x01 \x01(\bR\aenabled\x12<\n" +
+ "\x1apaxcounter_update_interval\x18\x02 \x01(\rR\x18paxcounterUpdateInterval\x12%\n" +
+ "\x0ewifi_threshold\x18\x03 \x01(\x05R\rwifiThreshold\x12#\n" +
+ "\rble_threshold\x18\x04 \x01(\x05R\fbleThreshold\x1a\xfe\x05\n" +
+ "\x17TrafficManagementConfig\x12\x18\n" +
+ "\aenabled\x18\x01 \x01(\bR\aenabled\x124\n" +
+ "\x16position_dedup_enabled\x18\x02 \x01(\bR\x14positionDedupEnabled\x126\n" +
+ "\x17position_precision_bits\x18\x03 \x01(\rR\x15positionPrecisionBits\x12;\n" +
+ "\x1aposition_min_interval_secs\x18\x04 \x01(\rR\x17positionMinIntervalSecs\x128\n" +
+ "\x18nodeinfo_direct_response\x18\x05 \x01(\bR\x16nodeinfoDirectResponse\x12H\n" +
+ "!nodeinfo_direct_response_max_hops\x18\x06 \x01(\rR\x1dnodeinfoDirectResponseMaxHops\x12,\n" +
+ "\x12rate_limit_enabled\x18\a \x01(\bR\x10rateLimitEnabled\x123\n" +
+ "\x16rate_limit_window_secs\x18\b \x01(\rR\x13rateLimitWindowSecs\x123\n" +
+ "\x16rate_limit_max_packets\x18\t \x01(\rR\x13rateLimitMaxPackets\x120\n" +
+ "\x14drop_unknown_enabled\x18\n" +
+ " \x01(\bR\x12dropUnknownEnabled\x128\n" +
+ "\x18unknown_packet_threshold\x18\v \x01(\rR\x16unknownPacketThreshold\x122\n" +
+ "\x15exhaust_hop_telemetry\x18\f \x01(\bR\x13exhaustHopTelemetry\x120\n" +
+ "\x14exhaust_hop_position\x18\r \x01(\bR\x12exhaustHopPosition\x120\n" +
+ "\x14router_preserve_hops\x18\x0e \x01(\bR\x12routerPreserveHops\x1a\xec\x05\n" +
+ "\fSerialConfig\x12\x18\n" +
+ "\aenabled\x18\x01 \x01(\bR\aenabled\x12\x12\n" +
+ "\x04echo\x18\x02 \x01(\bR\x04echo\x12\x10\n" +
+ "\x03rxd\x18\x03 \x01(\rR\x03rxd\x12\x10\n" +
+ "\x03txd\x18\x04 \x01(\rR\x03txd\x12E\n" +
+ "\x04baud\x18\x05 \x01(\x0e21.meshtastic.ModuleConfig.SerialConfig.Serial_BaudR\x04baud\x12\x18\n" +
+ "\atimeout\x18\x06 \x01(\rR\atimeout\x12E\n" +
+ "\x04mode\x18\a \x01(\x0e21.meshtastic.ModuleConfig.SerialConfig.Serial_ModeR\x04mode\x12?\n" +
+ "\x1coverride_console_serial_port\x18\b \x01(\bR\x19overrideConsoleSerialPort\"\x8a\x02\n" +
+ "\vSerial_Baud\x12\x10\n" +
+ "\fBAUD_DEFAULT\x10\x00\x12\f\n" +
+ "\bBAUD_110\x10\x01\x12\f\n" +
+ "\bBAUD_300\x10\x02\x12\f\n" +
+ "\bBAUD_600\x10\x03\x12\r\n" +
+ "\tBAUD_1200\x10\x04\x12\r\n" +
+ "\tBAUD_2400\x10\x05\x12\r\n" +
+ "\tBAUD_4800\x10\x06\x12\r\n" +
+ "\tBAUD_9600\x10\a\x12\x0e\n" +
+ "\n" +
+ "BAUD_19200\x10\b\x12\x0e\n" +
+ "\n" +
+ "BAUD_38400\x10\t\x12\x0e\n" +
+ "\n" +
+ "BAUD_57600\x10\n" +
+ "\x12\x0f\n" +
+ "\vBAUD_115200\x10\v\x12\x0f\n" +
+ "\vBAUD_230400\x10\f\x12\x0f\n" +
+ "\vBAUD_460800\x10\r\x12\x0f\n" +
+ "\vBAUD_576000\x10\x0e\x12\x0f\n" +
+ "\vBAUD_921600\x10\x0f\"\x93\x01\n" +
+ "\vSerial_Mode\x12\v\n" +
+ "\aDEFAULT\x10\x00\x12\n" +
+ "\n" +
+ "\x06SIMPLE\x10\x01\x12\t\n" +
+ "\x05PROTO\x10\x02\x12\v\n" +
+ "\aTEXTMSG\x10\x03\x12\b\n" +
+ "\x04NMEA\x10\x04\x12\v\n" +
+ "\aCALTOPO\x10\x05\x12\b\n" +
+ "\x04WS85\x10\x06\x12\r\n" +
+ "\tVE_DIRECT\x10\a\x12\r\n" +
+ "\tMS_CONFIG\x10\b\x12\a\n" +
+ "\x03LOG\x10\t\x12\v\n" +
+ "\aLOGTEXT\x10\n" +
+ "\x1a\xac\x04\n" +
+ "\x1aExternalNotificationConfig\x12\x18\n" +
+ "\aenabled\x18\x01 \x01(\bR\aenabled\x12\x1b\n" +
+ "\toutput_ms\x18\x02 \x01(\rR\boutputMs\x12\x16\n" +
+ "\x06output\x18\x03 \x01(\rR\x06output\x12!\n" +
+ "\foutput_vibra\x18\b \x01(\rR\voutputVibra\x12#\n" +
+ "\routput_buzzer\x18\t \x01(\rR\foutputBuzzer\x12\x16\n" +
+ "\x06active\x18\x04 \x01(\bR\x06active\x12#\n" +
+ "\ralert_message\x18\x05 \x01(\bR\falertMessage\x12.\n" +
+ "\x13alert_message_vibra\x18\n" +
+ " \x01(\bR\x11alertMessageVibra\x120\n" +
+ "\x14alert_message_buzzer\x18\v \x01(\bR\x12alertMessageBuzzer\x12\x1d\n" +
+ "\n" +
+ "alert_bell\x18\x06 \x01(\bR\talertBell\x12(\n" +
+ "\x10alert_bell_vibra\x18\f \x01(\bR\x0ealertBellVibra\x12*\n" +
+ "\x11alert_bell_buzzer\x18\r \x01(\bR\x0falertBellBuzzer\x12\x17\n" +
+ "\ause_pwm\x18\a \x01(\bR\x06usePwm\x12\x1f\n" +
+ "\vnag_timeout\x18\x0e \x01(\rR\n" +
+ "nagTimeout\x12)\n" +
+ "\x11use_i2s_as_buzzer\x18\x0f \x01(\bR\x0euseI2sAsBuzzer\x1a\xe5\x01\n" +
+ "\x12StoreForwardConfig\x12\x18\n" +
+ "\aenabled\x18\x01 \x01(\bR\aenabled\x12\x1c\n" +
+ "\theartbeat\x18\x02 \x01(\bR\theartbeat\x12\x18\n" +
+ "\arecords\x18\x03 \x01(\rR\arecords\x12,\n" +
+ "\x12history_return_max\x18\x04 \x01(\rR\x10historyReturnMax\x122\n" +
+ "\x15history_return_window\x18\x05 \x01(\rR\x13historyReturnWindow\x12\x1b\n" +
+ "\tis_server\x18\x06 \x01(\bR\bisServer\x1a\x7f\n" +
+ "\x0fRangeTestConfig\x12\x18\n" +
+ "\aenabled\x18\x01 \x01(\bR\aenabled\x12\x16\n" +
+ "\x06sender\x18\x02 \x01(\rR\x06sender\x12\x12\n" +
+ "\x04save\x18\x03 \x01(\bR\x04save\x12&\n" +
+ "\x0fclear_on_reboot\x18\x04 \x01(\bR\rclearOnReboot\x1a\xf6\x06\n" +
+ "\x0fTelemetryConfig\x124\n" +
+ "\x16device_update_interval\x18\x01 \x01(\rR\x14deviceUpdateInterval\x12>\n" +
+ "\x1benvironment_update_interval\x18\x02 \x01(\rR\x19environmentUpdateInterval\x12F\n" +
+ "\x1fenvironment_measurement_enabled\x18\x03 \x01(\bR\x1denvironmentMeasurementEnabled\x12<\n" +
+ "\x1aenvironment_screen_enabled\x18\x04 \x01(\bR\x18environmentScreenEnabled\x12D\n" +
+ "\x1eenvironment_display_fahrenheit\x18\x05 \x01(\bR\x1cenvironmentDisplayFahrenheit\x12.\n" +
+ "\x13air_quality_enabled\x18\x06 \x01(\bR\x11airQualityEnabled\x120\n" +
+ "\x14air_quality_interval\x18\a \x01(\rR\x12airQualityInterval\x12:\n" +
+ "\x19power_measurement_enabled\x18\b \x01(\bR\x17powerMeasurementEnabled\x122\n" +
+ "\x15power_update_interval\x18\t \x01(\rR\x13powerUpdateInterval\x120\n" +
+ "\x14power_screen_enabled\x18\n" +
+ " \x01(\bR\x12powerScreenEnabled\x12<\n" +
+ "\x1ahealth_measurement_enabled\x18\v \x01(\bR\x18healthMeasurementEnabled\x124\n" +
+ "\x16health_update_interval\x18\f \x01(\rR\x14healthUpdateInterval\x122\n" +
+ "\x15health_screen_enabled\x18\r \x01(\bR\x13healthScreenEnabled\x128\n" +
+ "\x18device_telemetry_enabled\x18\x0e \x01(\bR\x16deviceTelemetryEnabled\x12;\n" +
+ "\x1aair_quality_screen_enabled\x18\x0f \x01(\bR\x17airQualityScreenEnabled\x1a\x9a\x06\n" +
+ "\x13CannedMessageConfig\x12'\n" +
+ "\x0frotary1_enabled\x18\x01 \x01(\bR\x0erotary1Enabled\x12*\n" +
+ "\x11inputbroker_pin_a\x18\x02 \x01(\rR\x0finputbrokerPinA\x12*\n" +
+ "\x11inputbroker_pin_b\x18\x03 \x01(\rR\x0finputbrokerPinB\x122\n" +
+ "\x15inputbroker_pin_press\x18\x04 \x01(\rR\x13inputbrokerPinPress\x12m\n" +
+ "\x14inputbroker_event_cw\x18\x05 \x01(\x0e2;.meshtastic.ModuleConfig.CannedMessageConfig.InputEventCharR\x12inputbrokerEventCw\x12o\n" +
+ "\x15inputbroker_event_ccw\x18\x06 \x01(\x0e2;.meshtastic.ModuleConfig.CannedMessageConfig.InputEventCharR\x13inputbrokerEventCcw\x12s\n" +
+ "\x17inputbroker_event_press\x18\a \x01(\x0e2;.meshtastic.ModuleConfig.CannedMessageConfig.InputEventCharR\x15inputbrokerEventPress\x12'\n" +
+ "\x0fupdown1_enabled\x18\b \x01(\bR\x0eupdown1Enabled\x12\x1c\n" +
+ "\aenabled\x18\t \x01(\bB\x02\x18\x01R\aenabled\x120\n" +
+ "\x12allow_input_source\x18\n" +
+ " \x01(\tB\x02\x18\x01R\x10allowInputSource\x12\x1b\n" +
+ "\tsend_bell\x18\v \x01(\bR\bsendBell\"c\n" +
+ "\x0eInputEventChar\x12\b\n" +
+ "\x04NONE\x10\x00\x12\x06\n" +
+ "\x02UP\x10\x11\x12\b\n" +
+ "\x04DOWN\x10\x12\x12\b\n" +
+ "\x04LEFT\x10\x13\x12\t\n" +
+ "\x05RIGHT\x10\x14\x12\n" +
+ "\n" +
+ "\x06SELECT\x10\n" +
+ "\x12\b\n" +
+ "\x04BACK\x10\x1b\x12\n" +
+ "\n" +
+ "\x06CANCEL\x10\x18\x1a\x8a\x01\n" +
+ "\x15AmbientLightingConfig\x12\x1b\n" +
+ "\tled_state\x18\x01 \x01(\bR\bledState\x12\x18\n" +
+ "\acurrent\x18\x02 \x01(\rR\acurrent\x12\x10\n" +
+ "\x03red\x18\x03 \x01(\rR\x03red\x12\x14\n" +
+ "\x05green\x18\x04 \x01(\rR\x05green\x12\x12\n" +
+ "\x04blue\x18\x05 \x01(\rR\x04blue\x1a6\n" +
+ "\x13StatusMessageConfig\x12\x1f\n" +
+ "\vnode_status\x18\x01 \x01(\tR\n" +
+ "nodeStatus\x1a]\n" +
+ "\tTAKConfig\x12$\n" +
+ "\x04team\x18\x01 \x01(\x0e2\x10.meshtastic.TeamR\x04team\x12*\n" +
+ "\x04role\x18\x02 \x01(\x0e2\x16.meshtastic.MemberRoleR\x04roleB\x11\n" +
+ "\x0fpayload_variant\"y\n" +
+ "\x11RemoteHardwarePin\x12\x19\n" +
+ "\bgpio_pin\x18\x01 \x01(\rR\agpioPin\x12\x12\n" +
+ "\x04name\x18\x02 \x01(\tR\x04name\x125\n" +
+ "\x04type\x18\x03 \x01(\x0e2!.meshtastic.RemoteHardwarePinTypeR\x04type*I\n" +
+ "\x15RemoteHardwarePinType\x12\v\n" +
+ "\aUNKNOWN\x10\x00\x12\x10\n" +
+ "\fDIGITAL_READ\x10\x01\x12\x11\n" +
+ "\rDIGITAL_WRITE\x10\x02Bh\n" +
+ "\x14org.meshtastic.protoB\x12ModuleConfigProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00b\x06proto3"
+
+var (
+ file_meshtastic_module_config_proto_rawDescOnce sync.Once
+ file_meshtastic_module_config_proto_rawDescData []byte
+)
+
+func file_meshtastic_module_config_proto_rawDescGZIP() []byte {
+ file_meshtastic_module_config_proto_rawDescOnce.Do(func() {
+ file_meshtastic_module_config_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_meshtastic_module_config_proto_rawDesc), len(file_meshtastic_module_config_proto_rawDesc)))
+ })
+ return file_meshtastic_module_config_proto_rawDescData
+}
+
+var file_meshtastic_module_config_proto_enumTypes = make([]protoimpl.EnumInfo, 6)
+var file_meshtastic_module_config_proto_msgTypes = make([]protoimpl.MessageInfo, 19)
+var file_meshtastic_module_config_proto_goTypes = []any{
+ (RemoteHardwarePinType)(0), // 0: meshtastic.RemoteHardwarePinType
+ (ModuleConfig_DetectionSensorConfig_TriggerType)(0), // 1: meshtastic.ModuleConfig.DetectionSensorConfig.TriggerType
+ (ModuleConfig_AudioConfig_Audio_Baud)(0), // 2: meshtastic.ModuleConfig.AudioConfig.Audio_Baud
+ (ModuleConfig_SerialConfig_Serial_Baud)(0), // 3: meshtastic.ModuleConfig.SerialConfig.Serial_Baud
+ (ModuleConfig_SerialConfig_Serial_Mode)(0), // 4: meshtastic.ModuleConfig.SerialConfig.Serial_Mode
+ (ModuleConfig_CannedMessageConfig_InputEventChar)(0), // 5: meshtastic.ModuleConfig.CannedMessageConfig.InputEventChar
+ (*ModuleConfig)(nil), // 6: meshtastic.ModuleConfig
+ (*RemoteHardwarePin)(nil), // 7: meshtastic.RemoteHardwarePin
+ (*ModuleConfig_MQTTConfig)(nil), // 8: meshtastic.ModuleConfig.MQTTConfig
+ (*ModuleConfig_MapReportSettings)(nil), // 9: meshtastic.ModuleConfig.MapReportSettings
+ (*ModuleConfig_RemoteHardwareConfig)(nil), // 10: meshtastic.ModuleConfig.RemoteHardwareConfig
+ (*ModuleConfig_NeighborInfoConfig)(nil), // 11: meshtastic.ModuleConfig.NeighborInfoConfig
+ (*ModuleConfig_DetectionSensorConfig)(nil), // 12: meshtastic.ModuleConfig.DetectionSensorConfig
+ (*ModuleConfig_AudioConfig)(nil), // 13: meshtastic.ModuleConfig.AudioConfig
+ (*ModuleConfig_PaxcounterConfig)(nil), // 14: meshtastic.ModuleConfig.PaxcounterConfig
+ (*ModuleConfig_TrafficManagementConfig)(nil), // 15: meshtastic.ModuleConfig.TrafficManagementConfig
+ (*ModuleConfig_SerialConfig)(nil), // 16: meshtastic.ModuleConfig.SerialConfig
+ (*ModuleConfig_ExternalNotificationConfig)(nil), // 17: meshtastic.ModuleConfig.ExternalNotificationConfig
+ (*ModuleConfig_StoreForwardConfig)(nil), // 18: meshtastic.ModuleConfig.StoreForwardConfig
+ (*ModuleConfig_RangeTestConfig)(nil), // 19: meshtastic.ModuleConfig.RangeTestConfig
+ (*ModuleConfig_TelemetryConfig)(nil), // 20: meshtastic.ModuleConfig.TelemetryConfig
+ (*ModuleConfig_CannedMessageConfig)(nil), // 21: meshtastic.ModuleConfig.CannedMessageConfig
+ (*ModuleConfig_AmbientLightingConfig)(nil), // 22: meshtastic.ModuleConfig.AmbientLightingConfig
+ (*ModuleConfig_StatusMessageConfig)(nil), // 23: meshtastic.ModuleConfig.StatusMessageConfig
+ (*ModuleConfig_TAKConfig)(nil), // 24: meshtastic.ModuleConfig.TAKConfig
+ (Team)(0), // 25: meshtastic.Team
+ (MemberRole)(0), // 26: meshtastic.MemberRole
+}
+var file_meshtastic_module_config_proto_depIdxs = []int32{
+ 8, // 0: meshtastic.ModuleConfig.mqtt:type_name -> meshtastic.ModuleConfig.MQTTConfig
+ 16, // 1: meshtastic.ModuleConfig.serial:type_name -> meshtastic.ModuleConfig.SerialConfig
+ 17, // 2: meshtastic.ModuleConfig.external_notification:type_name -> meshtastic.ModuleConfig.ExternalNotificationConfig
+ 18, // 3: meshtastic.ModuleConfig.store_forward:type_name -> meshtastic.ModuleConfig.StoreForwardConfig
+ 19, // 4: meshtastic.ModuleConfig.range_test:type_name -> meshtastic.ModuleConfig.RangeTestConfig
+ 20, // 5: meshtastic.ModuleConfig.telemetry:type_name -> meshtastic.ModuleConfig.TelemetryConfig
+ 21, // 6: meshtastic.ModuleConfig.canned_message:type_name -> meshtastic.ModuleConfig.CannedMessageConfig
+ 13, // 7: meshtastic.ModuleConfig.audio:type_name -> meshtastic.ModuleConfig.AudioConfig
+ 10, // 8: meshtastic.ModuleConfig.remote_hardware:type_name -> meshtastic.ModuleConfig.RemoteHardwareConfig
+ 11, // 9: meshtastic.ModuleConfig.neighbor_info:type_name -> meshtastic.ModuleConfig.NeighborInfoConfig
+ 22, // 10: meshtastic.ModuleConfig.ambient_lighting:type_name -> meshtastic.ModuleConfig.AmbientLightingConfig
+ 12, // 11: meshtastic.ModuleConfig.detection_sensor:type_name -> meshtastic.ModuleConfig.DetectionSensorConfig
+ 14, // 12: meshtastic.ModuleConfig.paxcounter:type_name -> meshtastic.ModuleConfig.PaxcounterConfig
+ 23, // 13: meshtastic.ModuleConfig.statusmessage:type_name -> meshtastic.ModuleConfig.StatusMessageConfig
+ 15, // 14: meshtastic.ModuleConfig.traffic_management:type_name -> meshtastic.ModuleConfig.TrafficManagementConfig
+ 24, // 15: meshtastic.ModuleConfig.tak:type_name -> meshtastic.ModuleConfig.TAKConfig
+ 0, // 16: meshtastic.RemoteHardwarePin.type:type_name -> meshtastic.RemoteHardwarePinType
+ 9, // 17: meshtastic.ModuleConfig.MQTTConfig.map_report_settings:type_name -> meshtastic.ModuleConfig.MapReportSettings
+ 7, // 18: meshtastic.ModuleConfig.RemoteHardwareConfig.available_pins:type_name -> meshtastic.RemoteHardwarePin
+ 1, // 19: meshtastic.ModuleConfig.DetectionSensorConfig.detection_trigger_type:type_name -> meshtastic.ModuleConfig.DetectionSensorConfig.TriggerType
+ 2, // 20: meshtastic.ModuleConfig.AudioConfig.bitrate:type_name -> meshtastic.ModuleConfig.AudioConfig.Audio_Baud
+ 3, // 21: meshtastic.ModuleConfig.SerialConfig.baud:type_name -> meshtastic.ModuleConfig.SerialConfig.Serial_Baud
+ 4, // 22: meshtastic.ModuleConfig.SerialConfig.mode:type_name -> meshtastic.ModuleConfig.SerialConfig.Serial_Mode
+ 5, // 23: meshtastic.ModuleConfig.CannedMessageConfig.inputbroker_event_cw:type_name -> meshtastic.ModuleConfig.CannedMessageConfig.InputEventChar
+ 5, // 24: meshtastic.ModuleConfig.CannedMessageConfig.inputbroker_event_ccw:type_name -> meshtastic.ModuleConfig.CannedMessageConfig.InputEventChar
+ 5, // 25: meshtastic.ModuleConfig.CannedMessageConfig.inputbroker_event_press:type_name -> meshtastic.ModuleConfig.CannedMessageConfig.InputEventChar
+ 25, // 26: meshtastic.ModuleConfig.TAKConfig.team:type_name -> meshtastic.Team
+ 26, // 27: meshtastic.ModuleConfig.TAKConfig.role:type_name -> meshtastic.MemberRole
+ 28, // [28:28] is the sub-list for method output_type
+ 28, // [28:28] is the sub-list for method input_type
+ 28, // [28:28] is the sub-list for extension type_name
+ 28, // [28:28] is the sub-list for extension extendee
+ 0, // [0:28] is the sub-list for field type_name
+}
+
+func init() { file_meshtastic_module_config_proto_init() }
+func file_meshtastic_module_config_proto_init() {
+ if File_meshtastic_module_config_proto != nil {
+ return
+ }
+ file_meshtastic_atak_proto_init()
+ file_meshtastic_module_config_proto_msgTypes[0].OneofWrappers = []any{
+ (*ModuleConfig_Mqtt)(nil),
+ (*ModuleConfig_Serial)(nil),
+ (*ModuleConfig_ExternalNotification)(nil),
+ (*ModuleConfig_StoreForward)(nil),
+ (*ModuleConfig_RangeTest)(nil),
+ (*ModuleConfig_Telemetry)(nil),
+ (*ModuleConfig_CannedMessage)(nil),
+ (*ModuleConfig_Audio)(nil),
+ (*ModuleConfig_RemoteHardware)(nil),
+ (*ModuleConfig_NeighborInfo)(nil),
+ (*ModuleConfig_AmbientLighting)(nil),
+ (*ModuleConfig_DetectionSensor)(nil),
+ (*ModuleConfig_Paxcounter)(nil),
+ (*ModuleConfig_Statusmessage)(nil),
+ (*ModuleConfig_TrafficManagement)(nil),
+ (*ModuleConfig_Tak)(nil),
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_meshtastic_module_config_proto_rawDesc), len(file_meshtastic_module_config_proto_rawDesc)),
+ NumEnums: 6,
+ NumMessages: 19,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_meshtastic_module_config_proto_goTypes,
+ DependencyIndexes: file_meshtastic_module_config_proto_depIdxs,
+ EnumInfos: file_meshtastic_module_config_proto_enumTypes,
+ MessageInfos: file_meshtastic_module_config_proto_msgTypes,
+ }.Build()
+ File_meshtastic_module_config_proto = out.File
+ file_meshtastic_module_config_proto_goTypes = nil
+ file_meshtastic_module_config_proto_depIdxs = nil
+}
diff --git a/protocol/meshtastic/pb/mqtt.pb.go b/protocol/meshtastic/pb/mqtt.pb.go
new file mode 100644
index 0000000..8cc7566
--- /dev/null
+++ b/protocol/meshtastic/pb/mqtt.pb.go
@@ -0,0 +1,349 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc v6.33.4
+// source: meshtastic/mqtt.proto
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// This message wraps a MeshPacket with extra metadata about the sender and how it arrived.
+type ServiceEnvelope struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The (probably encrypted) packet
+ Packet *MeshPacket `protobuf:"bytes,1,opt,name=packet,proto3" json:"packet,omitempty"`
+ // The global channel ID it was sent on
+ ChannelId string `protobuf:"bytes,2,opt,name=channel_id,json=channelId,proto3" json:"channelId,omitempty"`
+ // The sending gateway node ID. Can we use this to authenticate/prevent fake
+ // nodeid impersonation for senders? - i.e. use gateway/mesh id (which is authenticated) + local node id as
+ // the globally trusted nodenum
+ GatewayId string `protobuf:"bytes,3,opt,name=gateway_id,json=gatewayId,proto3" json:"gatewayId,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *ServiceEnvelope) Reset() {
+ *x = ServiceEnvelope{}
+ mi := &file_meshtastic_mqtt_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *ServiceEnvelope) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ServiceEnvelope) ProtoMessage() {}
+
+func (x *ServiceEnvelope) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mqtt_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use ServiceEnvelope.ProtoReflect.Descriptor instead.
+func (*ServiceEnvelope) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mqtt_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *ServiceEnvelope) GetPacket() *MeshPacket {
+ if x != nil {
+ return x.Packet
+ }
+ return nil
+}
+
+func (x *ServiceEnvelope) GetChannelId() string {
+ if x != nil {
+ return x.ChannelId
+ }
+ return ""
+}
+
+func (x *ServiceEnvelope) GetGatewayId() string {
+ if x != nil {
+ return x.GatewayId
+ }
+ return ""
+}
+
+// Information about a node intended to be reported unencrypted to a map using MQTT.
+type MapReport struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // A full name for this user, i.e. "Kevin Hester"
+ LongName string `protobuf:"bytes,1,opt,name=long_name,json=longName,proto3" json:"longName,omitempty"`
+ // A VERY short name, ideally two characters.
+ // Suitable for a tiny OLED screen
+ ShortName string `protobuf:"bytes,2,opt,name=short_name,json=shortName,proto3" json:"shortName,omitempty"`
+ // Role of the node that applies specific settings for a particular use-case
+ Role Config_DeviceConfig_Role `protobuf:"varint,3,opt,name=role,proto3,enum=meshtastic.Config_DeviceConfig_Role" json:"role,omitempty"`
+ // Hardware model of the node, i.e. T-Beam, Heltec V3, etc...
+ HwModel HardwareModel `protobuf:"varint,4,opt,name=hw_model,json=hwModel,proto3,enum=meshtastic.HardwareModel" json:"hwModel,omitempty"`
+ // Device firmware version string
+ FirmwareVersion string `protobuf:"bytes,5,opt,name=firmware_version,json=firmwareVersion,proto3" json:"firmwareVersion,omitempty"`
+ // The region code for the radio (US, CN, EU433, etc...)
+ Region Config_LoRaConfig_RegionCode `protobuf:"varint,6,opt,name=region,proto3,enum=meshtastic.Config_LoRaConfig_RegionCode" json:"region,omitempty"`
+ // Modem preset used by the radio (LongFast, MediumSlow, etc...)
+ ModemPreset Config_LoRaConfig_ModemPreset `protobuf:"varint,7,opt,name=modem_preset,json=modemPreset,proto3,enum=meshtastic.Config_LoRaConfig_ModemPreset" json:"modemPreset,omitempty"`
+ // Whether the node has a channel with default PSK and name (LongFast, MediumSlow, etc...)
+ // and it uses the default frequency slot given the region and modem preset.
+ HasDefaultChannel bool `protobuf:"varint,8,opt,name=has_default_channel,json=hasDefaultChannel,proto3" json:"hasDefaultChannel,omitempty"`
+ // Latitude: multiply by 1e-7 to get degrees in floating point
+ LatitudeI int32 `protobuf:"fixed32,9,opt,name=latitude_i,json=latitudeI,proto3" json:"latitudeI,omitempty"`
+ // Longitude: multiply by 1e-7 to get degrees in floating point
+ LongitudeI int32 `protobuf:"fixed32,10,opt,name=longitude_i,json=longitudeI,proto3" json:"longitudeI,omitempty"`
+ // Altitude in meters above MSL
+ Altitude int32 `protobuf:"varint,11,opt,name=altitude,proto3" json:"altitude,omitempty"`
+ // Indicates the bits of precision for latitude and longitude set by the sending node
+ PositionPrecision uint32 `protobuf:"varint,12,opt,name=position_precision,json=positionPrecision,proto3" json:"positionPrecision,omitempty"`
+ // Number of online nodes (heard in the last 2 hours) this node has in its list that were received locally (not via MQTT)
+ NumOnlineLocalNodes uint32 `protobuf:"varint,13,opt,name=num_online_local_nodes,json=numOnlineLocalNodes,proto3" json:"numOnlineLocalNodes,omitempty"`
+ // User has opted in to share their location (map report) with the mqtt server
+ // Controlled by map_report.should_report_location
+ HasOptedReportLocation bool `protobuf:"varint,14,opt,name=has_opted_report_location,json=hasOptedReportLocation,proto3" json:"hasOptedReportLocation,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *MapReport) Reset() {
+ *x = MapReport{}
+ mi := &file_meshtastic_mqtt_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *MapReport) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MapReport) ProtoMessage() {}
+
+func (x *MapReport) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_mqtt_proto_msgTypes[1]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use MapReport.ProtoReflect.Descriptor instead.
+func (*MapReport) Descriptor() ([]byte, []int) {
+ return file_meshtastic_mqtt_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *MapReport) GetLongName() string {
+ if x != nil {
+ return x.LongName
+ }
+ return ""
+}
+
+func (x *MapReport) GetShortName() string {
+ if x != nil {
+ return x.ShortName
+ }
+ return ""
+}
+
+func (x *MapReport) GetRole() Config_DeviceConfig_Role {
+ if x != nil {
+ return x.Role
+ }
+ return Config_DeviceConfig_CLIENT
+}
+
+func (x *MapReport) GetHwModel() HardwareModel {
+ if x != nil {
+ return x.HwModel
+ }
+ return HardwareModel_UNSET
+}
+
+func (x *MapReport) GetFirmwareVersion() string {
+ if x != nil {
+ return x.FirmwareVersion
+ }
+ return ""
+}
+
+func (x *MapReport) GetRegion() Config_LoRaConfig_RegionCode {
+ if x != nil {
+ return x.Region
+ }
+ return Config_LoRaConfig_UNSET
+}
+
+func (x *MapReport) GetModemPreset() Config_LoRaConfig_ModemPreset {
+ if x != nil {
+ return x.ModemPreset
+ }
+ return Config_LoRaConfig_LONG_FAST
+}
+
+func (x *MapReport) GetHasDefaultChannel() bool {
+ if x != nil {
+ return x.HasDefaultChannel
+ }
+ return false
+}
+
+func (x *MapReport) GetLatitudeI() int32 {
+ if x != nil {
+ return x.LatitudeI
+ }
+ return 0
+}
+
+func (x *MapReport) GetLongitudeI() int32 {
+ if x != nil {
+ return x.LongitudeI
+ }
+ return 0
+}
+
+func (x *MapReport) GetAltitude() int32 {
+ if x != nil {
+ return x.Altitude
+ }
+ return 0
+}
+
+func (x *MapReport) GetPositionPrecision() uint32 {
+ if x != nil {
+ return x.PositionPrecision
+ }
+ return 0
+}
+
+func (x *MapReport) GetNumOnlineLocalNodes() uint32 {
+ if x != nil {
+ return x.NumOnlineLocalNodes
+ }
+ return 0
+}
+
+func (x *MapReport) GetHasOptedReportLocation() bool {
+ if x != nil {
+ return x.HasOptedReportLocation
+ }
+ return false
+}
+
+var File_meshtastic_mqtt_proto protoreflect.FileDescriptor
+
+const file_meshtastic_mqtt_proto_rawDesc = "" +
+ "\n" +
+ "\x15meshtastic/mqtt.proto\x12\n" +
+ "meshtastic\x1a\x17meshtastic/config.proto\x1a\x15meshtastic/mesh.proto\"\x7f\n" +
+ "\x0fServiceEnvelope\x12.\n" +
+ "\x06packet\x18\x01 \x01(\v2\x16.meshtastic.MeshPacketR\x06packet\x12\x1d\n" +
+ "\n" +
+ "channel_id\x18\x02 \x01(\tR\tchannelId\x12\x1d\n" +
+ "\n" +
+ "gateway_id\x18\x03 \x01(\tR\tgatewayId\"\x9d\x05\n" +
+ "\tMapReport\x12\x1b\n" +
+ "\tlong_name\x18\x01 \x01(\tR\blongName\x12\x1d\n" +
+ "\n" +
+ "short_name\x18\x02 \x01(\tR\tshortName\x128\n" +
+ "\x04role\x18\x03 \x01(\x0e2$.meshtastic.Config.DeviceConfig.RoleR\x04role\x124\n" +
+ "\bhw_model\x18\x04 \x01(\x0e2\x19.meshtastic.HardwareModelR\ahwModel\x12)\n" +
+ "\x10firmware_version\x18\x05 \x01(\tR\x0ffirmwareVersion\x12@\n" +
+ "\x06region\x18\x06 \x01(\x0e2(.meshtastic.Config.LoRaConfig.RegionCodeR\x06region\x12L\n" +
+ "\fmodem_preset\x18\a \x01(\x0e2).meshtastic.Config.LoRaConfig.ModemPresetR\vmodemPreset\x12.\n" +
+ "\x13has_default_channel\x18\b \x01(\bR\x11hasDefaultChannel\x12\x1d\n" +
+ "\n" +
+ "latitude_i\x18\t \x01(\x0fR\tlatitudeI\x12\x1f\n" +
+ "\vlongitude_i\x18\n" +
+ " \x01(\x0fR\n" +
+ "longitudeI\x12\x1a\n" +
+ "\baltitude\x18\v \x01(\x05R\baltitude\x12-\n" +
+ "\x12position_precision\x18\f \x01(\rR\x11positionPrecision\x123\n" +
+ "\x16num_online_local_nodes\x18\r \x01(\rR\x13numOnlineLocalNodes\x129\n" +
+ "\x19has_opted_report_location\x18\x0e \x01(\bR\x16hasOptedReportLocationB`\n" +
+ "\x14org.meshtastic.protoB\n" +
+ "MQTTProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00b\x06proto3"
+
+var (
+ file_meshtastic_mqtt_proto_rawDescOnce sync.Once
+ file_meshtastic_mqtt_proto_rawDescData []byte
+)
+
+func file_meshtastic_mqtt_proto_rawDescGZIP() []byte {
+ file_meshtastic_mqtt_proto_rawDescOnce.Do(func() {
+ file_meshtastic_mqtt_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_meshtastic_mqtt_proto_rawDesc), len(file_meshtastic_mqtt_proto_rawDesc)))
+ })
+ return file_meshtastic_mqtt_proto_rawDescData
+}
+
+var file_meshtastic_mqtt_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_meshtastic_mqtt_proto_goTypes = []any{
+ (*ServiceEnvelope)(nil), // 0: meshtastic.ServiceEnvelope
+ (*MapReport)(nil), // 1: meshtastic.MapReport
+ (*MeshPacket)(nil), // 2: meshtastic.MeshPacket
+ (Config_DeviceConfig_Role)(0), // 3: meshtastic.Config.DeviceConfig.Role
+ (HardwareModel)(0), // 4: meshtastic.HardwareModel
+ (Config_LoRaConfig_RegionCode)(0), // 5: meshtastic.Config.LoRaConfig.RegionCode
+ (Config_LoRaConfig_ModemPreset)(0), // 6: meshtastic.Config.LoRaConfig.ModemPreset
+}
+var file_meshtastic_mqtt_proto_depIdxs = []int32{
+ 2, // 0: meshtastic.ServiceEnvelope.packet:type_name -> meshtastic.MeshPacket
+ 3, // 1: meshtastic.MapReport.role:type_name -> meshtastic.Config.DeviceConfig.Role
+ 4, // 2: meshtastic.MapReport.hw_model:type_name -> meshtastic.HardwareModel
+ 5, // 3: meshtastic.MapReport.region:type_name -> meshtastic.Config.LoRaConfig.RegionCode
+ 6, // 4: meshtastic.MapReport.modem_preset:type_name -> meshtastic.Config.LoRaConfig.ModemPreset
+ 5, // [5:5] is the sub-list for method output_type
+ 5, // [5:5] is the sub-list for method input_type
+ 5, // [5:5] is the sub-list for extension type_name
+ 5, // [5:5] is the sub-list for extension extendee
+ 0, // [0:5] is the sub-list for field type_name
+}
+
+func init() { file_meshtastic_mqtt_proto_init() }
+func file_meshtastic_mqtt_proto_init() {
+ if File_meshtastic_mqtt_proto != nil {
+ return
+ }
+ file_meshtastic_config_proto_init()
+ file_meshtastic_mesh_proto_init()
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_meshtastic_mqtt_proto_rawDesc), len(file_meshtastic_mqtt_proto_rawDesc)),
+ NumEnums: 0,
+ NumMessages: 2,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_meshtastic_mqtt_proto_goTypes,
+ DependencyIndexes: file_meshtastic_mqtt_proto_depIdxs,
+ MessageInfos: file_meshtastic_mqtt_proto_msgTypes,
+ }.Build()
+ File_meshtastic_mqtt_proto = out.File
+ file_meshtastic_mqtt_proto_goTypes = nil
+ file_meshtastic_mqtt_proto_depIdxs = nil
+}
diff --git a/protocol/meshtastic/pb/nanopb.pb.go b/protocol/meshtastic/pb/nanopb.pb.go
new file mode 100644
index 0000000..8f5d950
--- /dev/null
+++ b/protocol/meshtastic/pb/nanopb.pb.go
@@ -0,0 +1,849 @@
+// Custom options for defining:
+// - Maximum size of string/bytes
+// - Maximum number of elements in array
+//
+// These are used by nanopb to generate statically allocable structures
+// for memory-limited environments.
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc v6.33.4
+// source: nanopb.proto
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ descriptorpb "google.golang.org/protobuf/types/descriptorpb"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type FieldType int32
+
+const (
+ FieldType_FT_DEFAULT FieldType = 0 // Automatically decide field type, generate static field if possible.
+ FieldType_FT_CALLBACK FieldType = 1 // Always generate a callback field.
+ FieldType_FT_POINTER FieldType = 4 // Always generate a dynamically allocated field.
+ FieldType_FT_STATIC FieldType = 2 // Generate a static field or raise an exception if not possible.
+ FieldType_FT_IGNORE FieldType = 3 // Ignore the field completely.
+ FieldType_FT_INLINE FieldType = 5 // Legacy option, use the separate 'fixed_length' option instead
+)
+
+// Enum value maps for FieldType.
+var (
+ FieldType_name = map[int32]string{
+ 0: "FT_DEFAULT",
+ 1: "FT_CALLBACK",
+ 4: "FT_POINTER",
+ 2: "FT_STATIC",
+ 3: "FT_IGNORE",
+ 5: "FT_INLINE",
+ }
+ FieldType_value = map[string]int32{
+ "FT_DEFAULT": 0,
+ "FT_CALLBACK": 1,
+ "FT_POINTER": 4,
+ "FT_STATIC": 2,
+ "FT_IGNORE": 3,
+ "FT_INLINE": 5,
+ }
+)
+
+func (x FieldType) Enum() *FieldType {
+ p := new(FieldType)
+ *p = x
+ return p
+}
+
+func (x FieldType) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (FieldType) Descriptor() protoreflect.EnumDescriptor {
+ return file_nanopb_proto_enumTypes[0].Descriptor()
+}
+
+func (FieldType) Type() protoreflect.EnumType {
+ return &file_nanopb_proto_enumTypes[0]
+}
+
+func (x FieldType) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Do not use.
+func (x *FieldType) UnmarshalJSON(b []byte) error {
+ num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)
+ if err != nil {
+ return err
+ }
+ *x = FieldType(num)
+ return nil
+}
+
+// Deprecated: Use FieldType.Descriptor instead.
+func (FieldType) EnumDescriptor() ([]byte, []int) {
+ return file_nanopb_proto_rawDescGZIP(), []int{0}
+}
+
+type IntSize int32
+
+const (
+ IntSize_IS_DEFAULT IntSize = 0 // Default, 32/64bit based on type in .proto
+ IntSize_IS_8 IntSize = 8
+ IntSize_IS_16 IntSize = 16
+ IntSize_IS_32 IntSize = 32
+ IntSize_IS_64 IntSize = 64
+)
+
+// Enum value maps for IntSize.
+var (
+ IntSize_name = map[int32]string{
+ 0: "IS_DEFAULT",
+ 8: "IS_8",
+ 16: "IS_16",
+ 32: "IS_32",
+ 64: "IS_64",
+ }
+ IntSize_value = map[string]int32{
+ "IS_DEFAULT": 0,
+ "IS_8": 8,
+ "IS_16": 16,
+ "IS_32": 32,
+ "IS_64": 64,
+ }
+)
+
+func (x IntSize) Enum() *IntSize {
+ p := new(IntSize)
+ *p = x
+ return p
+}
+
+func (x IntSize) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (IntSize) Descriptor() protoreflect.EnumDescriptor {
+ return file_nanopb_proto_enumTypes[1].Descriptor()
+}
+
+func (IntSize) Type() protoreflect.EnumType {
+ return &file_nanopb_proto_enumTypes[1]
+}
+
+func (x IntSize) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Do not use.
+func (x *IntSize) UnmarshalJSON(b []byte) error {
+ num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)
+ if err != nil {
+ return err
+ }
+ *x = IntSize(num)
+ return nil
+}
+
+// Deprecated: Use IntSize.Descriptor instead.
+func (IntSize) EnumDescriptor() ([]byte, []int) {
+ return file_nanopb_proto_rawDescGZIP(), []int{1}
+}
+
+type TypenameMangling int32
+
+const (
+ TypenameMangling_M_NONE TypenameMangling = 0 // Default, no typename mangling
+ TypenameMangling_M_STRIP_PACKAGE TypenameMangling = 1 // Strip current package name
+ TypenameMangling_M_FLATTEN TypenameMangling = 2 // Only use last path component
+ TypenameMangling_M_PACKAGE_INITIALS TypenameMangling = 3 // Replace the package name by the initials
+)
+
+// Enum value maps for TypenameMangling.
+var (
+ TypenameMangling_name = map[int32]string{
+ 0: "M_NONE",
+ 1: "M_STRIP_PACKAGE",
+ 2: "M_FLATTEN",
+ 3: "M_PACKAGE_INITIALS",
+ }
+ TypenameMangling_value = map[string]int32{
+ "M_NONE": 0,
+ "M_STRIP_PACKAGE": 1,
+ "M_FLATTEN": 2,
+ "M_PACKAGE_INITIALS": 3,
+ }
+)
+
+func (x TypenameMangling) Enum() *TypenameMangling {
+ p := new(TypenameMangling)
+ *p = x
+ return p
+}
+
+func (x TypenameMangling) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (TypenameMangling) Descriptor() protoreflect.EnumDescriptor {
+ return file_nanopb_proto_enumTypes[2].Descriptor()
+}
+
+func (TypenameMangling) Type() protoreflect.EnumType {
+ return &file_nanopb_proto_enumTypes[2]
+}
+
+func (x TypenameMangling) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Do not use.
+func (x *TypenameMangling) UnmarshalJSON(b []byte) error {
+ num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)
+ if err != nil {
+ return err
+ }
+ *x = TypenameMangling(num)
+ return nil
+}
+
+// Deprecated: Use TypenameMangling.Descriptor instead.
+func (TypenameMangling) EnumDescriptor() ([]byte, []int) {
+ return file_nanopb_proto_rawDescGZIP(), []int{2}
+}
+
+type DescriptorSize int32
+
+const (
+ DescriptorSize_DS_AUTO DescriptorSize = 0 // Select minimal size based on field type
+ DescriptorSize_DS_1 DescriptorSize = 1 // 1 word; up to 15 byte fields, no arrays
+ DescriptorSize_DS_2 DescriptorSize = 2 // 2 words; up to 4095 byte fields, 4095 entry arrays
+ DescriptorSize_DS_4 DescriptorSize = 4 // 4 words; up to 2^32-1 byte fields, 2^16-1 entry arrays
+ DescriptorSize_DS_8 DescriptorSize = 8 // 8 words; up to 2^32-1 entry arrays
+)
+
+// Enum value maps for DescriptorSize.
+var (
+ DescriptorSize_name = map[int32]string{
+ 0: "DS_AUTO",
+ 1: "DS_1",
+ 2: "DS_2",
+ 4: "DS_4",
+ 8: "DS_8",
+ }
+ DescriptorSize_value = map[string]int32{
+ "DS_AUTO": 0,
+ "DS_1": 1,
+ "DS_2": 2,
+ "DS_4": 4,
+ "DS_8": 8,
+ }
+)
+
+func (x DescriptorSize) Enum() *DescriptorSize {
+ p := new(DescriptorSize)
+ *p = x
+ return p
+}
+
+func (x DescriptorSize) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (DescriptorSize) Descriptor() protoreflect.EnumDescriptor {
+ return file_nanopb_proto_enumTypes[3].Descriptor()
+}
+
+func (DescriptorSize) Type() protoreflect.EnumType {
+ return &file_nanopb_proto_enumTypes[3]
+}
+
+func (x DescriptorSize) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Do not use.
+func (x *DescriptorSize) UnmarshalJSON(b []byte) error {
+ num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)
+ if err != nil {
+ return err
+ }
+ *x = DescriptorSize(num)
+ return nil
+}
+
+// Deprecated: Use DescriptorSize.Descriptor instead.
+func (DescriptorSize) EnumDescriptor() ([]byte, []int) {
+ return file_nanopb_proto_rawDescGZIP(), []int{3}
+}
+
+// This is the inner options message, which basically defines options for
+// a field. When it is used in message or file scope, it applies to all
+// fields.
+type NanoPBOptions struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Allocated size for 'bytes' and 'string' fields.
+ // For string fields, this should include the space for null terminator.
+ MaxSize *int32 `protobuf:"varint,1,opt,name=max_size,json=maxSize" json:"maxSize,omitempty"`
+ // Maximum length for 'string' fields. Setting this is equivalent
+ // to setting max_size to a value of length+1.
+ MaxLength *int32 `protobuf:"varint,14,opt,name=max_length,json=maxLength" json:"maxLength,omitempty"`
+ // Allocated number of entries in arrays ('repeated' fields)
+ MaxCount *int32 `protobuf:"varint,2,opt,name=max_count,json=maxCount" json:"maxCount,omitempty"`
+ // Size of integer fields. Can save some memory if you don't need
+ // full 32 bits for the value.
+ IntSize *IntSize `protobuf:"varint,7,opt,name=int_size,json=intSize,enum=IntSize,def=0" json:"intSize,omitempty"`
+ // Force type of field (callback or static allocation)
+ Type *FieldType `protobuf:"varint,3,opt,name=type,enum=FieldType,def=0" json:"type,omitempty"`
+ // Use long names for enums, i.e. EnumName_EnumValue.
+ LongNames *bool `protobuf:"varint,4,opt,name=long_names,json=longNames,def=1" json:"longNames,omitempty"`
+ // Add 'packed' attribute to generated structs.
+ // Note: this cannot be used on CPUs that break on unaligned
+ // accesses to variables.
+ PackedStruct *bool `protobuf:"varint,5,opt,name=packed_struct,json=packedStruct,def=0" json:"packedStruct,omitempty"`
+ // Add 'packed' attribute to generated enums.
+ PackedEnum *bool `protobuf:"varint,10,opt,name=packed_enum,json=packedEnum,def=0" json:"packedEnum,omitempty"`
+ // Skip this message
+ SkipMessage *bool `protobuf:"varint,6,opt,name=skip_message,json=skipMessage,def=0" json:"skipMessage,omitempty"`
+ // Generate oneof fields as normal optional fields instead of union.
+ NoUnions *bool `protobuf:"varint,8,opt,name=no_unions,json=noUnions,def=0" json:"noUnions,omitempty"`
+ // integer type tag for a message
+ Msgid *uint32 `protobuf:"varint,9,opt,name=msgid" json:"msgid,omitempty"`
+ // decode oneof as anonymous union
+ AnonymousOneof *bool `protobuf:"varint,11,opt,name=anonymous_oneof,json=anonymousOneof,def=0" json:"anonymousOneof,omitempty"`
+ // Proto3 singular field does not generate a "has_" flag
+ Proto3 *bool `protobuf:"varint,12,opt,name=proto3,def=0" json:"proto3,omitempty"`
+ // Force proto3 messages to have no "has_" flag.
+ // This was default behavior until nanopb-0.4.0.
+ Proto3SingularMsgs *bool `protobuf:"varint,21,opt,name=proto3_singular_msgs,json=proto3SingularMsgs,def=0" json:"proto3SingularMsgs,omitempty"`
+ // Generate an enum->string mapping function (can take up lots of space).
+ EnumToString *bool `protobuf:"varint,13,opt,name=enum_to_string,json=enumToString,def=0" json:"enumToString,omitempty"`
+ // Generate bytes arrays with fixed length
+ FixedLength *bool `protobuf:"varint,15,opt,name=fixed_length,json=fixedLength,def=0" json:"fixedLength,omitempty"`
+ // Generate repeated field with fixed count
+ FixedCount *bool `protobuf:"varint,16,opt,name=fixed_count,json=fixedCount,def=0" json:"fixedCount,omitempty"`
+ // Generate message-level callback that is called before decoding submessages.
+ // This can be used to set callback fields for submsgs inside oneofs.
+ SubmsgCallback *bool `protobuf:"varint,22,opt,name=submsg_callback,json=submsgCallback,def=0" json:"submsgCallback,omitempty"`
+ // Shorten or remove package names from type names.
+ // This option applies only on the file level.
+ MangleNames *TypenameMangling `protobuf:"varint,17,opt,name=mangle_names,json=mangleNames,enum=TypenameMangling,def=0" json:"mangleNames,omitempty"`
+ // Data type for storage associated with callback fields.
+ CallbackDatatype *string `protobuf:"bytes,18,opt,name=callback_datatype,json=callbackDatatype,def=pb_callback_t" json:"callbackDatatype,omitempty"`
+ // Callback function used for encoding and decoding.
+ // Prior to nanopb-0.4.0, the callback was specified in per-field pb_callback_t
+ // structure. This is still supported, but does not work inside e.g. oneof or pointer
+ // fields. Instead, a new method allows specifying a per-message callback that
+ // will be called for all callback fields in a message type.
+ CallbackFunction *string `protobuf:"bytes,19,opt,name=callback_function,json=callbackFunction,def=pb_default_field_callback" json:"callbackFunction,omitempty"`
+ // Select the size of field descriptors. This option has to be defined
+ // for the whole message, not per-field. Usually automatic selection is
+ // ok, but if it results in compilation errors you can increase the field
+ // size here.
+ Descriptorsize *DescriptorSize `protobuf:"varint,20,opt,name=descriptorsize,enum=DescriptorSize,def=0" json:"descriptorsize,omitempty"`
+ // Set default value for has_ fields.
+ DefaultHas *bool `protobuf:"varint,23,opt,name=default_has,json=defaultHas,def=0" json:"defaultHas,omitempty"`
+ // Extra files to include in generated `.pb.h`
+ Include []string `protobuf:"bytes,24,rep,name=include" json:"include,omitempty"`
+ // Automatic includes to exclude from generated `.pb.h`
+ // Same as nanopb_generator.py command line flag -x.
+ Exclude []string `protobuf:"bytes,26,rep,name=exclude" json:"exclude,omitempty"`
+ // Package name that applies only for nanopb.
+ Package *string `protobuf:"bytes,25,opt,name=package" json:"package,omitempty"`
+ // Override type of the field in generated C code. Only to be used with related field types
+ TypeOverride *descriptorpb.FieldDescriptorProto_Type `protobuf:"varint,27,opt,name=type_override,json=typeOverride,enum=google.protobuf.FieldDescriptorProto_Type" json:"typeOverride,omitempty"`
+ // Due to historical reasons, nanopb orders fields in structs by their tag number
+ // instead of the order in .proto. Set this to false to keep the .proto order.
+ // The default value will probably change to false in nanopb-0.5.0.
+ SortByTag *bool `protobuf:"varint,28,opt,name=sort_by_tag,json=sortByTag,def=1" json:"sortByTag,omitempty"`
+ // Set the FT_DEFAULT field conversion strategy.
+ // A field that can become a static member of a c struct (e.g. int, bool, etc)
+ // will be a a static field.
+ // Fields with dynamic length are converted to either a pointer or a callback.
+ FallbackType *FieldType `protobuf:"varint,29,opt,name=fallback_type,json=fallbackType,enum=FieldType,def=1" json:"fallbackType,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+// Default values for NanoPBOptions fields.
+const (
+ Default_NanoPBOptions_IntSize = IntSize_IS_DEFAULT
+ Default_NanoPBOptions_Type = FieldType_FT_DEFAULT
+ Default_NanoPBOptions_LongNames = bool(true)
+ Default_NanoPBOptions_PackedStruct = bool(false)
+ Default_NanoPBOptions_PackedEnum = bool(false)
+ Default_NanoPBOptions_SkipMessage = bool(false)
+ Default_NanoPBOptions_NoUnions = bool(false)
+ Default_NanoPBOptions_AnonymousOneof = bool(false)
+ Default_NanoPBOptions_Proto3 = bool(false)
+ Default_NanoPBOptions_Proto3SingularMsgs = bool(false)
+ Default_NanoPBOptions_EnumToString = bool(false)
+ Default_NanoPBOptions_FixedLength = bool(false)
+ Default_NanoPBOptions_FixedCount = bool(false)
+ Default_NanoPBOptions_SubmsgCallback = bool(false)
+ Default_NanoPBOptions_MangleNames = TypenameMangling_M_NONE
+ Default_NanoPBOptions_CallbackDatatype = string("pb_callback_t")
+ Default_NanoPBOptions_CallbackFunction = string("pb_default_field_callback")
+ Default_NanoPBOptions_Descriptorsize = DescriptorSize_DS_AUTO
+ Default_NanoPBOptions_DefaultHas = bool(false)
+ Default_NanoPBOptions_SortByTag = bool(true)
+ Default_NanoPBOptions_FallbackType = FieldType_FT_CALLBACK
+)
+
+func (x *NanoPBOptions) Reset() {
+ *x = NanoPBOptions{}
+ mi := &file_nanopb_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *NanoPBOptions) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NanoPBOptions) ProtoMessage() {}
+
+func (x *NanoPBOptions) ProtoReflect() protoreflect.Message {
+ mi := &file_nanopb_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use NanoPBOptions.ProtoReflect.Descriptor instead.
+func (*NanoPBOptions) Descriptor() ([]byte, []int) {
+ return file_nanopb_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *NanoPBOptions) GetMaxSize() int32 {
+ if x != nil && x.MaxSize != nil {
+ return *x.MaxSize
+ }
+ return 0
+}
+
+func (x *NanoPBOptions) GetMaxLength() int32 {
+ if x != nil && x.MaxLength != nil {
+ return *x.MaxLength
+ }
+ return 0
+}
+
+func (x *NanoPBOptions) GetMaxCount() int32 {
+ if x != nil && x.MaxCount != nil {
+ return *x.MaxCount
+ }
+ return 0
+}
+
+func (x *NanoPBOptions) GetIntSize() IntSize {
+ if x != nil && x.IntSize != nil {
+ return *x.IntSize
+ }
+ return Default_NanoPBOptions_IntSize
+}
+
+func (x *NanoPBOptions) GetType() FieldType {
+ if x != nil && x.Type != nil {
+ return *x.Type
+ }
+ return Default_NanoPBOptions_Type
+}
+
+func (x *NanoPBOptions) GetLongNames() bool {
+ if x != nil && x.LongNames != nil {
+ return *x.LongNames
+ }
+ return Default_NanoPBOptions_LongNames
+}
+
+func (x *NanoPBOptions) GetPackedStruct() bool {
+ if x != nil && x.PackedStruct != nil {
+ return *x.PackedStruct
+ }
+ return Default_NanoPBOptions_PackedStruct
+}
+
+func (x *NanoPBOptions) GetPackedEnum() bool {
+ if x != nil && x.PackedEnum != nil {
+ return *x.PackedEnum
+ }
+ return Default_NanoPBOptions_PackedEnum
+}
+
+func (x *NanoPBOptions) GetSkipMessage() bool {
+ if x != nil && x.SkipMessage != nil {
+ return *x.SkipMessage
+ }
+ return Default_NanoPBOptions_SkipMessage
+}
+
+func (x *NanoPBOptions) GetNoUnions() bool {
+ if x != nil && x.NoUnions != nil {
+ return *x.NoUnions
+ }
+ return Default_NanoPBOptions_NoUnions
+}
+
+func (x *NanoPBOptions) GetMsgid() uint32 {
+ if x != nil && x.Msgid != nil {
+ return *x.Msgid
+ }
+ return 0
+}
+
+func (x *NanoPBOptions) GetAnonymousOneof() bool {
+ if x != nil && x.AnonymousOneof != nil {
+ return *x.AnonymousOneof
+ }
+ return Default_NanoPBOptions_AnonymousOneof
+}
+
+func (x *NanoPBOptions) GetProto3() bool {
+ if x != nil && x.Proto3 != nil {
+ return *x.Proto3
+ }
+ return Default_NanoPBOptions_Proto3
+}
+
+func (x *NanoPBOptions) GetProto3SingularMsgs() bool {
+ if x != nil && x.Proto3SingularMsgs != nil {
+ return *x.Proto3SingularMsgs
+ }
+ return Default_NanoPBOptions_Proto3SingularMsgs
+}
+
+func (x *NanoPBOptions) GetEnumToString() bool {
+ if x != nil && x.EnumToString != nil {
+ return *x.EnumToString
+ }
+ return Default_NanoPBOptions_EnumToString
+}
+
+func (x *NanoPBOptions) GetFixedLength() bool {
+ if x != nil && x.FixedLength != nil {
+ return *x.FixedLength
+ }
+ return Default_NanoPBOptions_FixedLength
+}
+
+func (x *NanoPBOptions) GetFixedCount() bool {
+ if x != nil && x.FixedCount != nil {
+ return *x.FixedCount
+ }
+ return Default_NanoPBOptions_FixedCount
+}
+
+func (x *NanoPBOptions) GetSubmsgCallback() bool {
+ if x != nil && x.SubmsgCallback != nil {
+ return *x.SubmsgCallback
+ }
+ return Default_NanoPBOptions_SubmsgCallback
+}
+
+func (x *NanoPBOptions) GetMangleNames() TypenameMangling {
+ if x != nil && x.MangleNames != nil {
+ return *x.MangleNames
+ }
+ return Default_NanoPBOptions_MangleNames
+}
+
+func (x *NanoPBOptions) GetCallbackDatatype() string {
+ if x != nil && x.CallbackDatatype != nil {
+ return *x.CallbackDatatype
+ }
+ return Default_NanoPBOptions_CallbackDatatype
+}
+
+func (x *NanoPBOptions) GetCallbackFunction() string {
+ if x != nil && x.CallbackFunction != nil {
+ return *x.CallbackFunction
+ }
+ return Default_NanoPBOptions_CallbackFunction
+}
+
+func (x *NanoPBOptions) GetDescriptorsize() DescriptorSize {
+ if x != nil && x.Descriptorsize != nil {
+ return *x.Descriptorsize
+ }
+ return Default_NanoPBOptions_Descriptorsize
+}
+
+func (x *NanoPBOptions) GetDefaultHas() bool {
+ if x != nil && x.DefaultHas != nil {
+ return *x.DefaultHas
+ }
+ return Default_NanoPBOptions_DefaultHas
+}
+
+func (x *NanoPBOptions) GetInclude() []string {
+ if x != nil {
+ return x.Include
+ }
+ return nil
+}
+
+func (x *NanoPBOptions) GetExclude() []string {
+ if x != nil {
+ return x.Exclude
+ }
+ return nil
+}
+
+func (x *NanoPBOptions) GetPackage() string {
+ if x != nil && x.Package != nil {
+ return *x.Package
+ }
+ return ""
+}
+
+func (x *NanoPBOptions) GetTypeOverride() descriptorpb.FieldDescriptorProto_Type {
+ if x != nil && x.TypeOverride != nil {
+ return *x.TypeOverride
+ }
+ return descriptorpb.FieldDescriptorProto_Type(1)
+}
+
+func (x *NanoPBOptions) GetSortByTag() bool {
+ if x != nil && x.SortByTag != nil {
+ return *x.SortByTag
+ }
+ return Default_NanoPBOptions_SortByTag
+}
+
+func (x *NanoPBOptions) GetFallbackType() FieldType {
+ if x != nil && x.FallbackType != nil {
+ return *x.FallbackType
+ }
+ return Default_NanoPBOptions_FallbackType
+}
+
+var file_nanopb_proto_extTypes = []protoimpl.ExtensionInfo{
+ {
+ ExtendedType: (*descriptorpb.FileOptions)(nil),
+ ExtensionType: (*NanoPBOptions)(nil),
+ Field: 1010,
+ Name: "nanopb_fileopt",
+ Tag: "bytes,1010,opt,name=nanopb_fileopt",
+ Filename: "nanopb.proto",
+ },
+ {
+ ExtendedType: (*descriptorpb.MessageOptions)(nil),
+ ExtensionType: (*NanoPBOptions)(nil),
+ Field: 1010,
+ Name: "nanopb_msgopt",
+ Tag: "bytes,1010,opt,name=nanopb_msgopt",
+ Filename: "nanopb.proto",
+ },
+ {
+ ExtendedType: (*descriptorpb.EnumOptions)(nil),
+ ExtensionType: (*NanoPBOptions)(nil),
+ Field: 1010,
+ Name: "nanopb_enumopt",
+ Tag: "bytes,1010,opt,name=nanopb_enumopt",
+ Filename: "nanopb.proto",
+ },
+ {
+ ExtendedType: (*descriptorpb.FieldOptions)(nil),
+ ExtensionType: (*NanoPBOptions)(nil),
+ Field: 1010,
+ Name: "nanopb",
+ Tag: "bytes,1010,opt,name=nanopb",
+ Filename: "nanopb.proto",
+ },
+}
+
+// Extension fields to descriptorpb.FileOptions.
+var (
+ // optional NanoPBOptions nanopb_fileopt = 1010;
+ E_NanopbFileopt = &file_nanopb_proto_extTypes[0]
+)
+
+// Extension fields to descriptorpb.MessageOptions.
+var (
+ // optional NanoPBOptions nanopb_msgopt = 1010;
+ E_NanopbMsgopt = &file_nanopb_proto_extTypes[1]
+)
+
+// Extension fields to descriptorpb.EnumOptions.
+var (
+ // optional NanoPBOptions nanopb_enumopt = 1010;
+ E_NanopbEnumopt = &file_nanopb_proto_extTypes[2]
+)
+
+// Extension fields to descriptorpb.FieldOptions.
+var (
+ // optional NanoPBOptions nanopb = 1010;
+ E_Nanopb = &file_nanopb_proto_extTypes[3]
+)
+
+var File_nanopb_proto protoreflect.FileDescriptor
+
+const file_nanopb_proto_rawDesc = "" +
+ "\n" +
+ "\fnanopb.proto\x1a google/protobuf/descriptor.proto\"\x86\n" +
+ "\n" +
+ "\rNanoPBOptions\x12\x19\n" +
+ "\bmax_size\x18\x01 \x01(\x05R\amaxSize\x12\x1d\n" +
+ "\n" +
+ "max_length\x18\x0e \x01(\x05R\tmaxLength\x12\x1b\n" +
+ "\tmax_count\x18\x02 \x01(\x05R\bmaxCount\x12/\n" +
+ "\bint_size\x18\a \x01(\x0e2\b.IntSize:\n" +
+ "IS_DEFAULTR\aintSize\x12*\n" +
+ "\x04type\x18\x03 \x01(\x0e2\n" +
+ ".FieldType:\n" +
+ "FT_DEFAULTR\x04type\x12#\n" +
+ "\n" +
+ "long_names\x18\x04 \x01(\b:\x04trueR\tlongNames\x12*\n" +
+ "\rpacked_struct\x18\x05 \x01(\b:\x05falseR\fpackedStruct\x12&\n" +
+ "\vpacked_enum\x18\n" +
+ " \x01(\b:\x05falseR\n" +
+ "packedEnum\x12(\n" +
+ "\fskip_message\x18\x06 \x01(\b:\x05falseR\vskipMessage\x12\"\n" +
+ "\tno_unions\x18\b \x01(\b:\x05falseR\bnoUnions\x12\x14\n" +
+ "\x05msgid\x18\t \x01(\rR\x05msgid\x12.\n" +
+ "\x0fanonymous_oneof\x18\v \x01(\b:\x05falseR\x0eanonymousOneof\x12\x1d\n" +
+ "\x06proto3\x18\f \x01(\b:\x05falseR\x06proto3\x127\n" +
+ "\x14proto3_singular_msgs\x18\x15 \x01(\b:\x05falseR\x12proto3SingularMsgs\x12+\n" +
+ "\x0eenum_to_string\x18\r \x01(\b:\x05falseR\fenumToString\x12(\n" +
+ "\ffixed_length\x18\x0f \x01(\b:\x05falseR\vfixedLength\x12&\n" +
+ "\vfixed_count\x18\x10 \x01(\b:\x05falseR\n" +
+ "fixedCount\x12.\n" +
+ "\x0fsubmsg_callback\x18\x16 \x01(\b:\x05falseR\x0esubmsgCallback\x12<\n" +
+ "\fmangle_names\x18\x11 \x01(\x0e2\x11.TypenameMangling:\x06M_NONER\vmangleNames\x12:\n" +
+ "\x11callback_datatype\x18\x12 \x01(\t:\rpb_callback_tR\x10callbackDatatype\x12F\n" +
+ "\x11callback_function\x18\x13 \x01(\t:\x19pb_default_field_callbackR\x10callbackFunction\x12@\n" +
+ "\x0edescriptorsize\x18\x14 \x01(\x0e2\x0f.DescriptorSize:\aDS_AUTOR\x0edescriptorsize\x12&\n" +
+ "\vdefault_has\x18\x17 \x01(\b:\x05falseR\n" +
+ "defaultHas\x12\x18\n" +
+ "\ainclude\x18\x18 \x03(\tR\ainclude\x12\x18\n" +
+ "\aexclude\x18\x1a \x03(\tR\aexclude\x12\x18\n" +
+ "\apackage\x18\x19 \x01(\tR\apackage\x12O\n" +
+ "\rtype_override\x18\x1b \x01(\x0e2*.google.protobuf.FieldDescriptorProto.TypeR\ftypeOverride\x12$\n" +
+ "\vsort_by_tag\x18\x1c \x01(\b:\x04trueR\tsortByTag\x12<\n" +
+ "\rfallback_type\x18\x1d \x01(\x0e2\n" +
+ ".FieldType:\vFT_CALLBACKR\ffallbackType*i\n" +
+ "\tFieldType\x12\x0e\n" +
+ "\n" +
+ "FT_DEFAULT\x10\x00\x12\x0f\n" +
+ "\vFT_CALLBACK\x10\x01\x12\x0e\n" +
+ "\n" +
+ "FT_POINTER\x10\x04\x12\r\n" +
+ "\tFT_STATIC\x10\x02\x12\r\n" +
+ "\tFT_IGNORE\x10\x03\x12\r\n" +
+ "\tFT_INLINE\x10\x05*D\n" +
+ "\aIntSize\x12\x0e\n" +
+ "\n" +
+ "IS_DEFAULT\x10\x00\x12\b\n" +
+ "\x04IS_8\x10\b\x12\t\n" +
+ "\x05IS_16\x10\x10\x12\t\n" +
+ "\x05IS_32\x10 \x12\t\n" +
+ "\x05IS_64\x10@*Z\n" +
+ "\x10TypenameMangling\x12\n" +
+ "\n" +
+ "\x06M_NONE\x10\x00\x12\x13\n" +
+ "\x0fM_STRIP_PACKAGE\x10\x01\x12\r\n" +
+ "\tM_FLATTEN\x10\x02\x12\x16\n" +
+ "\x12M_PACKAGE_INITIALS\x10\x03*E\n" +
+ "\x0eDescriptorSize\x12\v\n" +
+ "\aDS_AUTO\x10\x00\x12\b\n" +
+ "\x04DS_1\x10\x01\x12\b\n" +
+ "\x04DS_2\x10\x02\x12\b\n" +
+ "\x04DS_4\x10\x04\x12\b\n" +
+ "\x04DS_8\x10\b:T\n" +
+ "\x0enanopb_fileopt\x12\x1c.google.protobuf.FileOptions\x18\xf2\a \x01(\v2\x0e.NanoPBOptionsR\rnanopbFileopt:U\n" +
+ "\rnanopb_msgopt\x12\x1f.google.protobuf.MessageOptions\x18\xf2\a \x01(\v2\x0e.NanoPBOptionsR\fnanopbMsgopt:T\n" +
+ "\x0enanopb_enumopt\x12\x1c.google.protobuf.EnumOptions\x18\xf2\a \x01(\v2\x0e.NanoPBOptionsR\rnanopbEnumopt:F\n" +
+ "\x06nanopb\x12\x1d.google.protobuf.FieldOptions\x18\xf2\a \x01(\v2\x0e.NanoPBOptionsR\x06nanopbB>\n" +
+ "\x18fi.kapsi.koti.jpa.nanopbZ\"github.com/meshtastic/go/generated"
+
+var (
+ file_nanopb_proto_rawDescOnce sync.Once
+ file_nanopb_proto_rawDescData []byte
+)
+
+func file_nanopb_proto_rawDescGZIP() []byte {
+ file_nanopb_proto_rawDescOnce.Do(func() {
+ file_nanopb_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_nanopb_proto_rawDesc), len(file_nanopb_proto_rawDesc)))
+ })
+ return file_nanopb_proto_rawDescData
+}
+
+var file_nanopb_proto_enumTypes = make([]protoimpl.EnumInfo, 4)
+var file_nanopb_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
+var file_nanopb_proto_goTypes = []any{
+ (FieldType)(0), // 0: FieldType
+ (IntSize)(0), // 1: IntSize
+ (TypenameMangling)(0), // 2: TypenameMangling
+ (DescriptorSize)(0), // 3: DescriptorSize
+ (*NanoPBOptions)(nil), // 4: NanoPBOptions
+ (descriptorpb.FieldDescriptorProto_Type)(0), // 5: google.protobuf.FieldDescriptorProto.Type
+ (*descriptorpb.FileOptions)(nil), // 6: google.protobuf.FileOptions
+ (*descriptorpb.MessageOptions)(nil), // 7: google.protobuf.MessageOptions
+ (*descriptorpb.EnumOptions)(nil), // 8: google.protobuf.EnumOptions
+ (*descriptorpb.FieldOptions)(nil), // 9: google.protobuf.FieldOptions
+}
+var file_nanopb_proto_depIdxs = []int32{
+ 1, // 0: NanoPBOptions.int_size:type_name -> IntSize
+ 0, // 1: NanoPBOptions.type:type_name -> FieldType
+ 2, // 2: NanoPBOptions.mangle_names:type_name -> TypenameMangling
+ 3, // 3: NanoPBOptions.descriptorsize:type_name -> DescriptorSize
+ 5, // 4: NanoPBOptions.type_override:type_name -> google.protobuf.FieldDescriptorProto.Type
+ 0, // 5: NanoPBOptions.fallback_type:type_name -> FieldType
+ 6, // 6: nanopb_fileopt:extendee -> google.protobuf.FileOptions
+ 7, // 7: nanopb_msgopt:extendee -> google.protobuf.MessageOptions
+ 8, // 8: nanopb_enumopt:extendee -> google.protobuf.EnumOptions
+ 9, // 9: nanopb:extendee -> google.protobuf.FieldOptions
+ 4, // 10: nanopb_fileopt:type_name -> NanoPBOptions
+ 4, // 11: nanopb_msgopt:type_name -> NanoPBOptions
+ 4, // 12: nanopb_enumopt:type_name -> NanoPBOptions
+ 4, // 13: nanopb:type_name -> NanoPBOptions
+ 14, // [14:14] is the sub-list for method output_type
+ 14, // [14:14] is the sub-list for method input_type
+ 10, // [10:14] is the sub-list for extension type_name
+ 6, // [6:10] is the sub-list for extension extendee
+ 0, // [0:6] is the sub-list for field type_name
+}
+
+func init() { file_nanopb_proto_init() }
+func file_nanopb_proto_init() {
+ if File_nanopb_proto != nil {
+ return
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_nanopb_proto_rawDesc), len(file_nanopb_proto_rawDesc)),
+ NumEnums: 4,
+ NumMessages: 1,
+ NumExtensions: 4,
+ NumServices: 0,
+ },
+ GoTypes: file_nanopb_proto_goTypes,
+ DependencyIndexes: file_nanopb_proto_depIdxs,
+ EnumInfos: file_nanopb_proto_enumTypes,
+ MessageInfos: file_nanopb_proto_msgTypes,
+ ExtensionInfos: file_nanopb_proto_extTypes,
+ }.Build()
+ File_nanopb_proto = out.File
+ file_nanopb_proto_goTypes = nil
+ file_nanopb_proto_depIdxs = nil
+}
diff --git a/protocol/meshtastic/pb/paxcount.pb.go b/protocol/meshtastic/pb/paxcount.pb.go
new file mode 100644
index 0000000..12fd051
--- /dev/null
+++ b/protocol/meshtastic/pb/paxcount.pb.go
@@ -0,0 +1,146 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc v6.33.4
+// source: meshtastic/paxcount.proto
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// TODO: REPLACE
+type Paxcount struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // seen Wifi devices
+ Wifi uint32 `protobuf:"varint,1,opt,name=wifi,proto3" json:"wifi,omitempty"`
+ // Seen BLE devices
+ Ble uint32 `protobuf:"varint,2,opt,name=ble,proto3" json:"ble,omitempty"`
+ // Uptime in seconds
+ Uptime uint32 `protobuf:"varint,3,opt,name=uptime,proto3" json:"uptime,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Paxcount) Reset() {
+ *x = Paxcount{}
+ mi := &file_meshtastic_paxcount_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Paxcount) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Paxcount) ProtoMessage() {}
+
+func (x *Paxcount) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_paxcount_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Paxcount.ProtoReflect.Descriptor instead.
+func (*Paxcount) Descriptor() ([]byte, []int) {
+ return file_meshtastic_paxcount_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *Paxcount) GetWifi() uint32 {
+ if x != nil {
+ return x.Wifi
+ }
+ return 0
+}
+
+func (x *Paxcount) GetBle() uint32 {
+ if x != nil {
+ return x.Ble
+ }
+ return 0
+}
+
+func (x *Paxcount) GetUptime() uint32 {
+ if x != nil {
+ return x.Uptime
+ }
+ return 0
+}
+
+var File_meshtastic_paxcount_proto protoreflect.FileDescriptor
+
+const file_meshtastic_paxcount_proto_rawDesc = "" +
+ "\n" +
+ "\x19meshtastic/paxcount.proto\x12\n" +
+ "meshtastic\"H\n" +
+ "\bPaxcount\x12\x12\n" +
+ "\x04wifi\x18\x01 \x01(\rR\x04wifi\x12\x10\n" +
+ "\x03ble\x18\x02 \x01(\rR\x03ble\x12\x16\n" +
+ "\x06uptime\x18\x03 \x01(\rR\x06uptimeBd\n" +
+ "\x14org.meshtastic.protoB\x0ePaxcountProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00b\x06proto3"
+
+var (
+ file_meshtastic_paxcount_proto_rawDescOnce sync.Once
+ file_meshtastic_paxcount_proto_rawDescData []byte
+)
+
+func file_meshtastic_paxcount_proto_rawDescGZIP() []byte {
+ file_meshtastic_paxcount_proto_rawDescOnce.Do(func() {
+ file_meshtastic_paxcount_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_meshtastic_paxcount_proto_rawDesc), len(file_meshtastic_paxcount_proto_rawDesc)))
+ })
+ return file_meshtastic_paxcount_proto_rawDescData
+}
+
+var file_meshtastic_paxcount_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
+var file_meshtastic_paxcount_proto_goTypes = []any{
+ (*Paxcount)(nil), // 0: meshtastic.Paxcount
+}
+var file_meshtastic_paxcount_proto_depIdxs = []int32{
+ 0, // [0:0] is the sub-list for method output_type
+ 0, // [0:0] is the sub-list for method input_type
+ 0, // [0:0] is the sub-list for extension type_name
+ 0, // [0:0] is the sub-list for extension extendee
+ 0, // [0:0] is the sub-list for field type_name
+}
+
+func init() { file_meshtastic_paxcount_proto_init() }
+func file_meshtastic_paxcount_proto_init() {
+ if File_meshtastic_paxcount_proto != nil {
+ return
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_meshtastic_paxcount_proto_rawDesc), len(file_meshtastic_paxcount_proto_rawDesc)),
+ NumEnums: 0,
+ NumMessages: 1,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_meshtastic_paxcount_proto_goTypes,
+ DependencyIndexes: file_meshtastic_paxcount_proto_depIdxs,
+ MessageInfos: file_meshtastic_paxcount_proto_msgTypes,
+ }.Build()
+ File_meshtastic_paxcount_proto = out.File
+ file_meshtastic_paxcount_proto_goTypes = nil
+ file_meshtastic_paxcount_proto_depIdxs = nil
+}
diff --git a/protocol/meshtastic/pb/portnums.pb.go b/protocol/meshtastic/pb/portnums.pb.go
new file mode 100644
index 0000000..04c5bb5
--- /dev/null
+++ b/protocol/meshtastic/pb/portnums.pb.go
@@ -0,0 +1,374 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc v6.33.4
+// source: meshtastic/portnums.proto
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// For any new 'apps' that run on the device or via sister apps on phones/PCs they should pick and use a
+// unique 'portnum' for their application.
+// If you are making a new app using meshtastic, please send in a pull request to add your 'portnum' to this
+// master table.
+// PortNums should be assigned in the following range:
+// 0-63 Core Meshtastic use, do not use for third party apps
+// 64-127 Registered 3rd party apps, send in a pull request that adds a new entry to portnums.proto to register your application
+// 256-511 Use one of these portnums for your private applications that you don't want to register publically
+// All other values are reserved.
+// Note: This was formerly a Type enum named 'typ' with the same id #
+// We have change to this 'portnum' based scheme for specifying app handlers for particular payloads.
+// This change is backwards compatible by treating the legacy OPAQUE/CLEAR_TEXT values identically.
+type PortNum int32
+
+const (
+ // Deprecated: do not use in new code (formerly called OPAQUE)
+ // A message sent from a device outside of the mesh, in a form the mesh does not understand
+ // NOTE: This must be 0, because it is documented in IMeshService.aidl to be so
+ // ENCODING: binary undefined
+ PortNum_UNKNOWN_APP PortNum = 0
+ // A simple UTF-8 text message, which even the little micros in the mesh
+ // can understand and show on their screen eventually in some circumstances
+ // even signal might send messages in this form (see below)
+ // ENCODING: UTF-8 Plaintext (?)
+ PortNum_TEXT_MESSAGE_APP PortNum = 1
+ // Reserved for built-in GPIO/example app.
+ // See remote_hardware.proto/HardwareMessage for details on the message sent/received to this port number
+ // ENCODING: Protobuf
+ PortNum_REMOTE_HARDWARE_APP PortNum = 2
+ // The built-in position messaging app.
+ // Payload is a Position message.
+ // ENCODING: Protobuf
+ PortNum_POSITION_APP PortNum = 3
+ // The built-in user info app.
+ // Payload is a User message.
+ // ENCODING: Protobuf
+ PortNum_NODEINFO_APP PortNum = 4
+ // Protocol control packets for mesh protocol use.
+ // Payload is a Routing message.
+ // ENCODING: Protobuf
+ PortNum_ROUTING_APP PortNum = 5
+ // Admin control packets.
+ // Payload is a AdminMessage message.
+ // ENCODING: Protobuf
+ PortNum_ADMIN_APP PortNum = 6
+ // Compressed TEXT_MESSAGE payloads.
+ // ENCODING: UTF-8 Plaintext (?) with Unishox2 Compression
+ // NOTE: The Device Firmware converts a TEXT_MESSAGE_APP to TEXT_MESSAGE_COMPRESSED_APP if the compressed
+ // payload is shorter. There's no need for app developers to do this themselves. Also the firmware will decompress
+ // any incoming TEXT_MESSAGE_COMPRESSED_APP payload and convert to TEXT_MESSAGE_APP.
+ PortNum_TEXT_MESSAGE_COMPRESSED_APP PortNum = 7
+ // Waypoint payloads.
+ // Payload is a Waypoint message.
+ // ENCODING: Protobuf
+ PortNum_WAYPOINT_APP PortNum = 8
+ // Audio Payloads.
+ // Encapsulated codec2 packets. On 2.4 GHZ Bandwidths only for now
+ // ENCODING: codec2 audio frames
+ // NOTE: audio frames contain a 3 byte header (0xc0 0xde 0xc2) and a one byte marker for the decompressed bitrate.
+ // This marker comes from the 'moduleConfig.audio.bitrate' enum minus one.
+ PortNum_AUDIO_APP PortNum = 9
+ // Same as Text Message but originating from Detection Sensor Module.
+ // NOTE: This portnum traffic is not sent to the public MQTT starting at firmware version 2.2.9
+ PortNum_DETECTION_SENSOR_APP PortNum = 10
+ // Same as Text Message but used for critical alerts.
+ PortNum_ALERT_APP PortNum = 11
+ // Module/port for handling key verification requests.
+ PortNum_KEY_VERIFICATION_APP PortNum = 12
+ // Provides a 'ping' service that replies to any packet it receives.
+ // Also serves as a small example module.
+ // ENCODING: ASCII Plaintext
+ PortNum_REPLY_APP PortNum = 32
+ // Used for the python IP tunnel feature
+ // ENCODING: IP Packet. Handled by the python API, firmware ignores this one and pases on.
+ PortNum_IP_TUNNEL_APP PortNum = 33
+ // Paxcounter lib included in the firmware
+ // ENCODING: protobuf
+ PortNum_PAXCOUNTER_APP PortNum = 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.
+ PortNum_STORE_FORWARD_PLUSPLUS_APP PortNum = 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.
+ PortNum_NODE_STATUS_APP PortNum = 36
+ // 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
+ // network is forwarded to the RX pin while sending a packet to TX will go out to the Mesh network.
+ // Maximum packet size of 240 bytes.
+ // Module is disabled by default can be turned on by setting SERIAL_MODULE_ENABLED = 1 in SerialPlugh.cpp.
+ // ENCODING: binary undefined
+ PortNum_SERIAL_APP PortNum = 64
+ // STORE_FORWARD_APP (Work in Progress)
+ // Maintained by Jm Casler (MC Hamster) : jm@casler.org
+ // ENCODING: Protobuf
+ PortNum_STORE_FORWARD_APP PortNum = 65
+ // Optional port for messages for the range test module.
+ // ENCODING: ASCII Plaintext
+ // NOTE: This portnum traffic is not sent to the public MQTT starting at firmware version 2.2.9
+ PortNum_RANGE_TEST_APP PortNum = 66
+ // Provides a format to send and receive telemetry data from the Meshtastic network.
+ // Maintained by Charles Crossan (crossan007) : crossan007@gmail.com
+ // ENCODING: Protobuf
+ PortNum_TELEMETRY_APP PortNum = 67
+ // Experimental tools for estimating node position without a GPS
+ // Maintained by Github user a-f-G-U-C (a Meshtastic contributor)
+ // Project files at https://github.com/a-f-G-U-C/Meshtastic-ZPS
+ // ENCODING: arrays of int64 fields
+ PortNum_ZPS_APP PortNum = 68
+ // Used to let multiple instances of Linux native applications communicate
+ // as if they did using their LoRa chip.
+ // Maintained by GitHub user GUVWAF.
+ // Project files at https://github.com/GUVWAF/Meshtasticator
+ // ENCODING: Protobuf (?)
+ PortNum_SIMULATOR_APP PortNum = 69
+ // 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.
+ // ENCODING: Protobuf
+ PortNum_TRACEROUTE_APP PortNum = 70
+ // Aggregates edge info for the network by sending out a list of each node's neighbors
+ // ENCODING: Protobuf
+ PortNum_NEIGHBORINFO_APP PortNum = 71
+ // ATAK Plugin
+ // Portnum for payloads from the official Meshtastic ATAK plugin
+ PortNum_ATAK_PLUGIN PortNum = 72
+ // Provides unencrypted information about a node for consumption by a map via MQTT
+ PortNum_MAP_REPORT_APP PortNum = 73
+ // PowerStress based monitoring support (for automated power consumption testing)
+ PortNum_POWERSTRESS_APP PortNum = 74
+ // LoraWAN Payload Transport
+ // ENCODING: compact binary LoRaWAN uplink (10-byte RF metadata + PHY payload) - see LoRaWANBridgeModule
+ PortNum_LORAWAN_BRIDGE PortNum = 75
+ // Reticulum Network Stack Tunnel App
+ // ENCODING: Fragmented RNS Packet. Handled by Meshtastic RNS interface
+ PortNum_RETICULUM_TUNNEL_APP PortNum = 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
+ PortNum_CAYENNE_APP PortNum = 77
+ // Private applications should use portnums >= 256.
+ // To simplify initial development and testing you can use "PRIVATE_APP"
+ // in your code without needing to rebuild protobuf files (via [regen-protos.sh](https://github.com/meshtastic/firmware/blob/master/bin/regen-protos.sh))
+ PortNum_PRIVATE_APP PortNum = 256
+ // ATAK Forwarder Module https://github.com/paulmandal/atak-forwarder
+ // ENCODING: libcotshrink
+ PortNum_ATAK_FORWARDER PortNum = 257
+ // Currently we limit port nums to no higher than this value
+ PortNum_MAX PortNum = 511
+)
+
+// Enum value maps for PortNum.
+var (
+ PortNum_name = map[int32]string{
+ 0: "UNKNOWN_APP",
+ 1: "TEXT_MESSAGE_APP",
+ 2: "REMOTE_HARDWARE_APP",
+ 3: "POSITION_APP",
+ 4: "NODEINFO_APP",
+ 5: "ROUTING_APP",
+ 6: "ADMIN_APP",
+ 7: "TEXT_MESSAGE_COMPRESSED_APP",
+ 8: "WAYPOINT_APP",
+ 9: "AUDIO_APP",
+ 10: "DETECTION_SENSOR_APP",
+ 11: "ALERT_APP",
+ 12: "KEY_VERIFICATION_APP",
+ 32: "REPLY_APP",
+ 33: "IP_TUNNEL_APP",
+ 34: "PAXCOUNTER_APP",
+ 35: "STORE_FORWARD_PLUSPLUS_APP",
+ 36: "NODE_STATUS_APP",
+ 64: "SERIAL_APP",
+ 65: "STORE_FORWARD_APP",
+ 66: "RANGE_TEST_APP",
+ 67: "TELEMETRY_APP",
+ 68: "ZPS_APP",
+ 69: "SIMULATOR_APP",
+ 70: "TRACEROUTE_APP",
+ 71: "NEIGHBORINFO_APP",
+ 72: "ATAK_PLUGIN",
+ 73: "MAP_REPORT_APP",
+ 74: "POWERSTRESS_APP",
+ 75: "LORAWAN_BRIDGE",
+ 76: "RETICULUM_TUNNEL_APP",
+ 77: "CAYENNE_APP",
+ 256: "PRIVATE_APP",
+ 257: "ATAK_FORWARDER",
+ 511: "MAX",
+ }
+ PortNum_value = map[string]int32{
+ "UNKNOWN_APP": 0,
+ "TEXT_MESSAGE_APP": 1,
+ "REMOTE_HARDWARE_APP": 2,
+ "POSITION_APP": 3,
+ "NODEINFO_APP": 4,
+ "ROUTING_APP": 5,
+ "ADMIN_APP": 6,
+ "TEXT_MESSAGE_COMPRESSED_APP": 7,
+ "WAYPOINT_APP": 8,
+ "AUDIO_APP": 9,
+ "DETECTION_SENSOR_APP": 10,
+ "ALERT_APP": 11,
+ "KEY_VERIFICATION_APP": 12,
+ "REPLY_APP": 32,
+ "IP_TUNNEL_APP": 33,
+ "PAXCOUNTER_APP": 34,
+ "STORE_FORWARD_PLUSPLUS_APP": 35,
+ "NODE_STATUS_APP": 36,
+ "SERIAL_APP": 64,
+ "STORE_FORWARD_APP": 65,
+ "RANGE_TEST_APP": 66,
+ "TELEMETRY_APP": 67,
+ "ZPS_APP": 68,
+ "SIMULATOR_APP": 69,
+ "TRACEROUTE_APP": 70,
+ "NEIGHBORINFO_APP": 71,
+ "ATAK_PLUGIN": 72,
+ "MAP_REPORT_APP": 73,
+ "POWERSTRESS_APP": 74,
+ "LORAWAN_BRIDGE": 75,
+ "RETICULUM_TUNNEL_APP": 76,
+ "CAYENNE_APP": 77,
+ "PRIVATE_APP": 256,
+ "ATAK_FORWARDER": 257,
+ "MAX": 511,
+ }
+)
+
+func (x PortNum) Enum() *PortNum {
+ p := new(PortNum)
+ *p = x
+ return p
+}
+
+func (x PortNum) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (PortNum) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_portnums_proto_enumTypes[0].Descriptor()
+}
+
+func (PortNum) Type() protoreflect.EnumType {
+ return &file_meshtastic_portnums_proto_enumTypes[0]
+}
+
+func (x PortNum) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use PortNum.Descriptor instead.
+func (PortNum) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_portnums_proto_rawDescGZIP(), []int{0}
+}
+
+var File_meshtastic_portnums_proto protoreflect.FileDescriptor
+
+const file_meshtastic_portnums_proto_rawDesc = "" +
+ "\n" +
+ "\x19meshtastic/portnums.proto\x12\n" +
+ "meshtastic*\xbf\x05\n" +
+ "\aPortNum\x12\x0f\n" +
+ "\vUNKNOWN_APP\x10\x00\x12\x14\n" +
+ "\x10TEXT_MESSAGE_APP\x10\x01\x12\x17\n" +
+ "\x13REMOTE_HARDWARE_APP\x10\x02\x12\x10\n" +
+ "\fPOSITION_APP\x10\x03\x12\x10\n" +
+ "\fNODEINFO_APP\x10\x04\x12\x0f\n" +
+ "\vROUTING_APP\x10\x05\x12\r\n" +
+ "\tADMIN_APP\x10\x06\x12\x1f\n" +
+ "\x1bTEXT_MESSAGE_COMPRESSED_APP\x10\a\x12\x10\n" +
+ "\fWAYPOINT_APP\x10\b\x12\r\n" +
+ "\tAUDIO_APP\x10\t\x12\x18\n" +
+ "\x14DETECTION_SENSOR_APP\x10\n" +
+ "\x12\r\n" +
+ "\tALERT_APP\x10\v\x12\x18\n" +
+ "\x14KEY_VERIFICATION_APP\x10\f\x12\r\n" +
+ "\tREPLY_APP\x10 \x12\x11\n" +
+ "\rIP_TUNNEL_APP\x10!\x12\x12\n" +
+ "\x0ePAXCOUNTER_APP\x10\"\x12\x1e\n" +
+ "\x1aSTORE_FORWARD_PLUSPLUS_APP\x10#\x12\x13\n" +
+ "\x0fNODE_STATUS_APP\x10$\x12\x0e\n" +
+ "\n" +
+ "SERIAL_APP\x10@\x12\x15\n" +
+ "\x11STORE_FORWARD_APP\x10A\x12\x12\n" +
+ "\x0eRANGE_TEST_APP\x10B\x12\x11\n" +
+ "\rTELEMETRY_APP\x10C\x12\v\n" +
+ "\aZPS_APP\x10D\x12\x11\n" +
+ "\rSIMULATOR_APP\x10E\x12\x12\n" +
+ "\x0eTRACEROUTE_APP\x10F\x12\x14\n" +
+ "\x10NEIGHBORINFO_APP\x10G\x12\x0f\n" +
+ "\vATAK_PLUGIN\x10H\x12\x12\n" +
+ "\x0eMAP_REPORT_APP\x10I\x12\x13\n" +
+ "\x0fPOWERSTRESS_APP\x10J\x12\x12\n" +
+ "\x0eLORAWAN_BRIDGE\x10K\x12\x18\n" +
+ "\x14RETICULUM_TUNNEL_APP\x10L\x12\x0f\n" +
+ "\vCAYENNE_APP\x10M\x12\x10\n" +
+ "\vPRIVATE_APP\x10\x80\x02\x12\x13\n" +
+ "\x0eATAK_FORWARDER\x10\x81\x02\x12\b\n" +
+ "\x03MAX\x10\xff\x03B^\n" +
+ "\x14org.meshtastic.protoB\bPortnumsZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00b\x06proto3"
+
+var (
+ file_meshtastic_portnums_proto_rawDescOnce sync.Once
+ file_meshtastic_portnums_proto_rawDescData []byte
+)
+
+func file_meshtastic_portnums_proto_rawDescGZIP() []byte {
+ file_meshtastic_portnums_proto_rawDescOnce.Do(func() {
+ file_meshtastic_portnums_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_meshtastic_portnums_proto_rawDesc), len(file_meshtastic_portnums_proto_rawDesc)))
+ })
+ return file_meshtastic_portnums_proto_rawDescData
+}
+
+var file_meshtastic_portnums_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_meshtastic_portnums_proto_goTypes = []any{
+ (PortNum)(0), // 0: meshtastic.PortNum
+}
+var file_meshtastic_portnums_proto_depIdxs = []int32{
+ 0, // [0:0] is the sub-list for method output_type
+ 0, // [0:0] is the sub-list for method input_type
+ 0, // [0:0] is the sub-list for extension type_name
+ 0, // [0:0] is the sub-list for extension extendee
+ 0, // [0:0] is the sub-list for field type_name
+}
+
+func init() { file_meshtastic_portnums_proto_init() }
+func file_meshtastic_portnums_proto_init() {
+ if File_meshtastic_portnums_proto != nil {
+ return
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_meshtastic_portnums_proto_rawDesc), len(file_meshtastic_portnums_proto_rawDesc)),
+ NumEnums: 1,
+ NumMessages: 0,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_meshtastic_portnums_proto_goTypes,
+ DependencyIndexes: file_meshtastic_portnums_proto_depIdxs,
+ EnumInfos: file_meshtastic_portnums_proto_enumTypes,
+ }.Build()
+ File_meshtastic_portnums_proto = out.File
+ file_meshtastic_portnums_proto_goTypes = nil
+ file_meshtastic_portnums_proto_depIdxs = nil
+}
diff --git a/protocol/meshtastic/pb/powermon.pb.go b/protocol/meshtastic/pb/powermon.pb.go
new file mode 100644
index 0000000..a46d031
--- /dev/null
+++ b/protocol/meshtastic/pb/powermon.pb.go
@@ -0,0 +1,418 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc v6.33.4
+// source: meshtastic/powermon.proto
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// 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.
+type PowerMon_State int32
+
+const (
+ PowerMon_None PowerMon_State = 0
+ PowerMon_CPU_DeepSleep PowerMon_State = 1
+ PowerMon_CPU_LightSleep PowerMon_State = 2
+ // 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)
+ PowerMon_Vext1_On PowerMon_State = 4
+ PowerMon_Lora_RXOn PowerMon_State = 8
+ PowerMon_Lora_TXOn PowerMon_State = 16
+ PowerMon_Lora_RXActive PowerMon_State = 32
+ PowerMon_BT_On PowerMon_State = 64
+ PowerMon_LED_On PowerMon_State = 128
+ PowerMon_Screen_On PowerMon_State = 256
+ PowerMon_Screen_Drawing PowerMon_State = 512
+ PowerMon_Wifi_On PowerMon_State = 1024
+ // GPS is actively trying to find our location
+ // See GPSPowerState for more details
+ PowerMon_GPS_Active PowerMon_State = 2048
+)
+
+// Enum value maps for PowerMon_State.
+var (
+ PowerMon_State_name = map[int32]string{
+ 0: "None",
+ 1: "CPU_DeepSleep",
+ 2: "CPU_LightSleep",
+ 4: "Vext1_On",
+ 8: "Lora_RXOn",
+ 16: "Lora_TXOn",
+ 32: "Lora_RXActive",
+ 64: "BT_On",
+ 128: "LED_On",
+ 256: "Screen_On",
+ 512: "Screen_Drawing",
+ 1024: "Wifi_On",
+ 2048: "GPS_Active",
+ }
+ PowerMon_State_value = map[string]int32{
+ "None": 0,
+ "CPU_DeepSleep": 1,
+ "CPU_LightSleep": 2,
+ "Vext1_On": 4,
+ "Lora_RXOn": 8,
+ "Lora_TXOn": 16,
+ "Lora_RXActive": 32,
+ "BT_On": 64,
+ "LED_On": 128,
+ "Screen_On": 256,
+ "Screen_Drawing": 512,
+ "Wifi_On": 1024,
+ "GPS_Active": 2048,
+ }
+)
+
+func (x PowerMon_State) Enum() *PowerMon_State {
+ p := new(PowerMon_State)
+ *p = x
+ return p
+}
+
+func (x PowerMon_State) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (PowerMon_State) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_powermon_proto_enumTypes[0].Descriptor()
+}
+
+func (PowerMon_State) Type() protoreflect.EnumType {
+ return &file_meshtastic_powermon_proto_enumTypes[0]
+}
+
+func (x PowerMon_State) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use PowerMon_State.Descriptor instead.
+func (PowerMon_State) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_powermon_proto_rawDescGZIP(), []int{0, 0}
+}
+
+// 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
+type PowerStressMessage_Opcode int32
+
+const (
+ // Unset/unused
+ PowerStressMessage_UNSET PowerStressMessage_Opcode = 0
+ PowerStressMessage_PRINT_INFO PowerStressMessage_Opcode = 1 // Print board version slog and send an ack that we are alive and ready to process commands
+ PowerStressMessage_FORCE_QUIET PowerStressMessage_Opcode = 2 // Try to turn off all automatic processing of packets, screen, sleeping, etc (to make it easier to measure in isolation)
+ PowerStressMessage_END_QUIET PowerStressMessage_Opcode = 3 // Stop powerstress processing - probably by just rebooting the board
+ PowerStressMessage_SCREEN_ON PowerStressMessage_Opcode = 16 // Turn the screen on
+ PowerStressMessage_SCREEN_OFF PowerStressMessage_Opcode = 17 // Turn the screen off
+ PowerStressMessage_CPU_IDLE PowerStressMessage_Opcode = 32 // Let the CPU run but we assume mostly idling for num_seconds
+ PowerStressMessage_CPU_DEEPSLEEP PowerStressMessage_Opcode = 33 // Force deep sleep for FIXME seconds
+ PowerStressMessage_CPU_FULLON PowerStressMessage_Opcode = 34 // Spin the CPU as fast as possible for num_seconds
+ PowerStressMessage_LED_ON PowerStressMessage_Opcode = 48 // Turn the LED on for num_seconds (and leave it on - for baseline power measurement purposes)
+ PowerStressMessage_LED_OFF PowerStressMessage_Opcode = 49 // Force the LED off for num_seconds
+ PowerStressMessage_LORA_OFF PowerStressMessage_Opcode = 64 // Completely turn off the LORA radio for num_seconds
+ PowerStressMessage_LORA_TX PowerStressMessage_Opcode = 65 // Send Lora packets for num_seconds
+ PowerStressMessage_LORA_RX PowerStressMessage_Opcode = 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)
+ PowerStressMessage_BT_OFF PowerStressMessage_Opcode = 80 // Turn off the BT radio for num_seconds
+ PowerStressMessage_BT_ON PowerStressMessage_Opcode = 81 // Turn on the BT radio for num_seconds
+ PowerStressMessage_WIFI_OFF PowerStressMessage_Opcode = 96 // Turn off the WIFI radio for num_seconds
+ PowerStressMessage_WIFI_ON PowerStressMessage_Opcode = 97 // Turn on the WIFI radio for num_seconds
+ PowerStressMessage_GPS_OFF PowerStressMessage_Opcode = 112 // Turn off the GPS radio for num_seconds
+ PowerStressMessage_GPS_ON PowerStressMessage_Opcode = 113 // Turn on the GPS radio for num_seconds
+)
+
+// Enum value maps for PowerStressMessage_Opcode.
+var (
+ PowerStressMessage_Opcode_name = map[int32]string{
+ 0: "UNSET",
+ 1: "PRINT_INFO",
+ 2: "FORCE_QUIET",
+ 3: "END_QUIET",
+ 16: "SCREEN_ON",
+ 17: "SCREEN_OFF",
+ 32: "CPU_IDLE",
+ 33: "CPU_DEEPSLEEP",
+ 34: "CPU_FULLON",
+ 48: "LED_ON",
+ 49: "LED_OFF",
+ 64: "LORA_OFF",
+ 65: "LORA_TX",
+ 66: "LORA_RX",
+ 80: "BT_OFF",
+ 81: "BT_ON",
+ 96: "WIFI_OFF",
+ 97: "WIFI_ON",
+ 112: "GPS_OFF",
+ 113: "GPS_ON",
+ }
+ PowerStressMessage_Opcode_value = map[string]int32{
+ "UNSET": 0,
+ "PRINT_INFO": 1,
+ "FORCE_QUIET": 2,
+ "END_QUIET": 3,
+ "SCREEN_ON": 16,
+ "SCREEN_OFF": 17,
+ "CPU_IDLE": 32,
+ "CPU_DEEPSLEEP": 33,
+ "CPU_FULLON": 34,
+ "LED_ON": 48,
+ "LED_OFF": 49,
+ "LORA_OFF": 64,
+ "LORA_TX": 65,
+ "LORA_RX": 66,
+ "BT_OFF": 80,
+ "BT_ON": 81,
+ "WIFI_OFF": 96,
+ "WIFI_ON": 97,
+ "GPS_OFF": 112,
+ "GPS_ON": 113,
+ }
+)
+
+func (x PowerStressMessage_Opcode) Enum() *PowerStressMessage_Opcode {
+ p := new(PowerStressMessage_Opcode)
+ *p = x
+ return p
+}
+
+func (x PowerStressMessage_Opcode) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (PowerStressMessage_Opcode) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_powermon_proto_enumTypes[1].Descriptor()
+}
+
+func (PowerStressMessage_Opcode) Type() protoreflect.EnumType {
+ return &file_meshtastic_powermon_proto_enumTypes[1]
+}
+
+func (x PowerStressMessage_Opcode) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use PowerStressMessage_Opcode.Descriptor instead.
+func (PowerStressMessage_Opcode) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_powermon_proto_rawDescGZIP(), []int{1, 0}
+}
+
+// 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)
+type PowerMon struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *PowerMon) Reset() {
+ *x = PowerMon{}
+ mi := &file_meshtastic_powermon_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *PowerMon) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PowerMon) ProtoMessage() {}
+
+func (x *PowerMon) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_powermon_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use PowerMon.ProtoReflect.Descriptor instead.
+func (*PowerMon) Descriptor() ([]byte, []int) {
+ return file_meshtastic_powermon_proto_rawDescGZIP(), []int{0}
+}
+
+// PowerStress testing support via the C++ PowerStress module
+type PowerStressMessage struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // What type of HardwareMessage is this?
+ Cmd PowerStressMessage_Opcode `protobuf:"varint,1,opt,name=cmd,proto3,enum=meshtastic.PowerStressMessage_Opcode" json:"cmd,omitempty"`
+ NumSeconds float32 `protobuf:"fixed32,2,opt,name=num_seconds,json=numSeconds,proto3" json:"numSeconds,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *PowerStressMessage) Reset() {
+ *x = PowerStressMessage{}
+ mi := &file_meshtastic_powermon_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *PowerStressMessage) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PowerStressMessage) ProtoMessage() {}
+
+func (x *PowerStressMessage) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_powermon_proto_msgTypes[1]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use PowerStressMessage.ProtoReflect.Descriptor instead.
+func (*PowerStressMessage) Descriptor() ([]byte, []int) {
+ return file_meshtastic_powermon_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *PowerStressMessage) GetCmd() PowerStressMessage_Opcode {
+ if x != nil {
+ return x.Cmd
+ }
+ return PowerStressMessage_UNSET
+}
+
+func (x *PowerStressMessage) GetNumSeconds() float32 {
+ if x != nil {
+ return x.NumSeconds
+ }
+ return 0
+}
+
+var File_meshtastic_powermon_proto protoreflect.FileDescriptor
+
+const file_meshtastic_powermon_proto_rawDesc = "" +
+ "\n" +
+ "\x19meshtastic/powermon.proto\x12\n" +
+ "meshtastic\"\xe0\x01\n" +
+ "\bPowerMon\"\xd3\x01\n" +
+ "\x05State\x12\b\n" +
+ "\x04None\x10\x00\x12\x11\n" +
+ "\rCPU_DeepSleep\x10\x01\x12\x12\n" +
+ "\x0eCPU_LightSleep\x10\x02\x12\f\n" +
+ "\bVext1_On\x10\x04\x12\r\n" +
+ "\tLora_RXOn\x10\b\x12\r\n" +
+ "\tLora_TXOn\x10\x10\x12\x11\n" +
+ "\rLora_RXActive\x10 \x12\t\n" +
+ "\x05BT_On\x10@\x12\v\n" +
+ "\x06LED_On\x10\x80\x01\x12\x0e\n" +
+ "\tScreen_On\x10\x80\x02\x12\x13\n" +
+ "\x0eScreen_Drawing\x10\x80\x04\x12\f\n" +
+ "\aWifi_On\x10\x80\b\x12\x0f\n" +
+ "\n" +
+ "GPS_Active\x10\x80\x10\"\x90\x03\n" +
+ "\x12PowerStressMessage\x127\n" +
+ "\x03cmd\x18\x01 \x01(\x0e2%.meshtastic.PowerStressMessage.OpcodeR\x03cmd\x12\x1f\n" +
+ "\vnum_seconds\x18\x02 \x01(\x02R\n" +
+ "numSeconds\"\x9f\x02\n" +
+ "\x06Opcode\x12\t\n" +
+ "\x05UNSET\x10\x00\x12\x0e\n" +
+ "\n" +
+ "PRINT_INFO\x10\x01\x12\x0f\n" +
+ "\vFORCE_QUIET\x10\x02\x12\r\n" +
+ "\tEND_QUIET\x10\x03\x12\r\n" +
+ "\tSCREEN_ON\x10\x10\x12\x0e\n" +
+ "\n" +
+ "SCREEN_OFF\x10\x11\x12\f\n" +
+ "\bCPU_IDLE\x10 \x12\x11\n" +
+ "\rCPU_DEEPSLEEP\x10!\x12\x0e\n" +
+ "\n" +
+ "CPU_FULLON\x10\"\x12\n" +
+ "\n" +
+ "\x06LED_ON\x100\x12\v\n" +
+ "\aLED_OFF\x101\x12\f\n" +
+ "\bLORA_OFF\x10@\x12\v\n" +
+ "\aLORA_TX\x10A\x12\v\n" +
+ "\aLORA_RX\x10B\x12\n" +
+ "\n" +
+ "\x06BT_OFF\x10P\x12\t\n" +
+ "\x05BT_ON\x10Q\x12\f\n" +
+ "\bWIFI_OFF\x10`\x12\v\n" +
+ "\aWIFI_ON\x10a\x12\v\n" +
+ "\aGPS_OFF\x10p\x12\n" +
+ "\n" +
+ "\x06GPS_ON\x10qBd\n" +
+ "\x14org.meshtastic.protoB\x0ePowerMonProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00b\x06proto3"
+
+var (
+ file_meshtastic_powermon_proto_rawDescOnce sync.Once
+ file_meshtastic_powermon_proto_rawDescData []byte
+)
+
+func file_meshtastic_powermon_proto_rawDescGZIP() []byte {
+ file_meshtastic_powermon_proto_rawDescOnce.Do(func() {
+ file_meshtastic_powermon_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_meshtastic_powermon_proto_rawDesc), len(file_meshtastic_powermon_proto_rawDesc)))
+ })
+ return file_meshtastic_powermon_proto_rawDescData
+}
+
+var file_meshtastic_powermon_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
+var file_meshtastic_powermon_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_meshtastic_powermon_proto_goTypes = []any{
+ (PowerMon_State)(0), // 0: meshtastic.PowerMon.State
+ (PowerStressMessage_Opcode)(0), // 1: meshtastic.PowerStressMessage.Opcode
+ (*PowerMon)(nil), // 2: meshtastic.PowerMon
+ (*PowerStressMessage)(nil), // 3: meshtastic.PowerStressMessage
+}
+var file_meshtastic_powermon_proto_depIdxs = []int32{
+ 1, // 0: meshtastic.PowerStressMessage.cmd:type_name -> meshtastic.PowerStressMessage.Opcode
+ 1, // [1:1] is the sub-list for method output_type
+ 1, // [1:1] is the sub-list for method input_type
+ 1, // [1:1] is the sub-list for extension type_name
+ 1, // [1:1] is the sub-list for extension extendee
+ 0, // [0:1] is the sub-list for field type_name
+}
+
+func init() { file_meshtastic_powermon_proto_init() }
+func file_meshtastic_powermon_proto_init() {
+ if File_meshtastic_powermon_proto != nil {
+ return
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_meshtastic_powermon_proto_rawDesc), len(file_meshtastic_powermon_proto_rawDesc)),
+ NumEnums: 2,
+ NumMessages: 2,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_meshtastic_powermon_proto_goTypes,
+ DependencyIndexes: file_meshtastic_powermon_proto_depIdxs,
+ EnumInfos: file_meshtastic_powermon_proto_enumTypes,
+ MessageInfos: file_meshtastic_powermon_proto_msgTypes,
+ }.Build()
+ File_meshtastic_powermon_proto = out.File
+ file_meshtastic_powermon_proto_goTypes = nil
+ file_meshtastic_powermon_proto_depIdxs = nil
+}
diff --git a/protocol/meshtastic/pb/remote_hardware.pb.go b/protocol/meshtastic/pb/remote_hardware.pb.go
new file mode 100644
index 0000000..f5d00c2
--- /dev/null
+++ b/protocol/meshtastic/pb/remote_hardware.pb.go
@@ -0,0 +1,235 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc v6.33.4
+// source: meshtastic/remote_hardware.proto
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// TODO: REPLACE
+type HardwareMessage_Type int32
+
+const (
+ // Unset/unused
+ HardwareMessage_UNSET HardwareMessage_Type = 0
+ // Set gpio gpios based on gpio_mask/gpio_value
+ HardwareMessage_WRITE_GPIOS HardwareMessage_Type = 1
+ // We are now interested in watching the gpio_mask gpios.
+ // If the selected gpios change, please broadcast GPIOS_CHANGED.
+ // Will implicitly change the gpios requested to be INPUT gpios.
+ HardwareMessage_WATCH_GPIOS HardwareMessage_Type = 2
+ // The gpios listed in gpio_mask have changed, the new values are listed in gpio_value
+ HardwareMessage_GPIOS_CHANGED HardwareMessage_Type = 3
+ // Read the gpios specified in gpio_mask, send back a READ_GPIOS_REPLY reply with gpio_value populated
+ HardwareMessage_READ_GPIOS HardwareMessage_Type = 4
+ // A reply to READ_GPIOS. gpio_mask and gpio_value will be populated
+ HardwareMessage_READ_GPIOS_REPLY HardwareMessage_Type = 5
+)
+
+// Enum value maps for HardwareMessage_Type.
+var (
+ HardwareMessage_Type_name = map[int32]string{
+ 0: "UNSET",
+ 1: "WRITE_GPIOS",
+ 2: "WATCH_GPIOS",
+ 3: "GPIOS_CHANGED",
+ 4: "READ_GPIOS",
+ 5: "READ_GPIOS_REPLY",
+ }
+ HardwareMessage_Type_value = map[string]int32{
+ "UNSET": 0,
+ "WRITE_GPIOS": 1,
+ "WATCH_GPIOS": 2,
+ "GPIOS_CHANGED": 3,
+ "READ_GPIOS": 4,
+ "READ_GPIOS_REPLY": 5,
+ }
+)
+
+func (x HardwareMessage_Type) Enum() *HardwareMessage_Type {
+ p := new(HardwareMessage_Type)
+ *p = x
+ return p
+}
+
+func (x HardwareMessage_Type) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (HardwareMessage_Type) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_remote_hardware_proto_enumTypes[0].Descriptor()
+}
+
+func (HardwareMessage_Type) Type() protoreflect.EnumType {
+ return &file_meshtastic_remote_hardware_proto_enumTypes[0]
+}
+
+func (x HardwareMessage_Type) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use HardwareMessage_Type.Descriptor instead.
+func (HardwareMessage_Type) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_remote_hardware_proto_rawDescGZIP(), []int{0, 0}
+}
+
+// An example app to show off the module system. This message is used for
+// REMOTE_HARDWARE_APP PortNums.
+// Also provides easy remote access to any GPIO.
+// In the future other remote hardware operations can be added based on user interest
+// (i.e. serial output, spi/i2c input/output).
+// FIXME - currently this feature is turned on by default which is dangerous
+// because no security yet (beyond the channel mechanism).
+// It should be off by default and then protected based on some TBD mechanism
+// (a special channel once multichannel support is included?)
+type HardwareMessage struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // What type of HardwareMessage is this?
+ Type HardwareMessage_Type `protobuf:"varint,1,opt,name=type,proto3,enum=meshtastic.HardwareMessage_Type" json:"type,omitempty"`
+ // What gpios are we changing. Not used for all MessageTypes, see MessageType for details
+ GpioMask uint64 `protobuf:"varint,2,opt,name=gpio_mask,json=gpioMask,proto3" json:"gpioMask,omitempty"`
+ // For gpios that were listed in gpio_mask as valid, what are the signal levels for those gpios.
+ // Not used for all MessageTypes, see MessageType for details
+ GpioValue uint64 `protobuf:"varint,3,opt,name=gpio_value,json=gpioValue,proto3" json:"gpioValue,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *HardwareMessage) Reset() {
+ *x = HardwareMessage{}
+ mi := &file_meshtastic_remote_hardware_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *HardwareMessage) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HardwareMessage) ProtoMessage() {}
+
+func (x *HardwareMessage) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_remote_hardware_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use HardwareMessage.ProtoReflect.Descriptor instead.
+func (*HardwareMessage) Descriptor() ([]byte, []int) {
+ return file_meshtastic_remote_hardware_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *HardwareMessage) GetType() HardwareMessage_Type {
+ if x != nil {
+ return x.Type
+ }
+ return HardwareMessage_UNSET
+}
+
+func (x *HardwareMessage) GetGpioMask() uint64 {
+ if x != nil {
+ return x.GpioMask
+ }
+ return 0
+}
+
+func (x *HardwareMessage) GetGpioValue() uint64 {
+ if x != nil {
+ return x.GpioValue
+ }
+ return 0
+}
+
+var File_meshtastic_remote_hardware_proto protoreflect.FileDescriptor
+
+const file_meshtastic_remote_hardware_proto_rawDesc = "" +
+ "\n" +
+ " meshtastic/remote_hardware.proto\x12\n" +
+ "meshtastic\"\xf1\x01\n" +
+ "\x0fHardwareMessage\x124\n" +
+ "\x04type\x18\x01 \x01(\x0e2 .meshtastic.HardwareMessage.TypeR\x04type\x12\x1b\n" +
+ "\tgpio_mask\x18\x02 \x01(\x04R\bgpioMask\x12\x1d\n" +
+ "\n" +
+ "gpio_value\x18\x03 \x01(\x04R\tgpioValue\"l\n" +
+ "\x04Type\x12\t\n" +
+ "\x05UNSET\x10\x00\x12\x0f\n" +
+ "\vWRITE_GPIOS\x10\x01\x12\x0f\n" +
+ "\vWATCH_GPIOS\x10\x02\x12\x11\n" +
+ "\rGPIOS_CHANGED\x10\x03\x12\x0e\n" +
+ "\n" +
+ "READ_GPIOS\x10\x04\x12\x14\n" +
+ "\x10READ_GPIOS_REPLY\x10\x05Bd\n" +
+ "\x14org.meshtastic.protoB\x0eRemoteHardwareZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00b\x06proto3"
+
+var (
+ file_meshtastic_remote_hardware_proto_rawDescOnce sync.Once
+ file_meshtastic_remote_hardware_proto_rawDescData []byte
+)
+
+func file_meshtastic_remote_hardware_proto_rawDescGZIP() []byte {
+ file_meshtastic_remote_hardware_proto_rawDescOnce.Do(func() {
+ file_meshtastic_remote_hardware_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_meshtastic_remote_hardware_proto_rawDesc), len(file_meshtastic_remote_hardware_proto_rawDesc)))
+ })
+ return file_meshtastic_remote_hardware_proto_rawDescData
+}
+
+var file_meshtastic_remote_hardware_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_meshtastic_remote_hardware_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
+var file_meshtastic_remote_hardware_proto_goTypes = []any{
+ (HardwareMessage_Type)(0), // 0: meshtastic.HardwareMessage.Type
+ (*HardwareMessage)(nil), // 1: meshtastic.HardwareMessage
+}
+var file_meshtastic_remote_hardware_proto_depIdxs = []int32{
+ 0, // 0: meshtastic.HardwareMessage.type:type_name -> meshtastic.HardwareMessage.Type
+ 1, // [1:1] is the sub-list for method output_type
+ 1, // [1:1] is the sub-list for method input_type
+ 1, // [1:1] is the sub-list for extension type_name
+ 1, // [1:1] is the sub-list for extension extendee
+ 0, // [0:1] is the sub-list for field type_name
+}
+
+func init() { file_meshtastic_remote_hardware_proto_init() }
+func file_meshtastic_remote_hardware_proto_init() {
+ if File_meshtastic_remote_hardware_proto != nil {
+ return
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_meshtastic_remote_hardware_proto_rawDesc), len(file_meshtastic_remote_hardware_proto_rawDesc)),
+ NumEnums: 1,
+ NumMessages: 1,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_meshtastic_remote_hardware_proto_goTypes,
+ DependencyIndexes: file_meshtastic_remote_hardware_proto_depIdxs,
+ EnumInfos: file_meshtastic_remote_hardware_proto_enumTypes,
+ MessageInfos: file_meshtastic_remote_hardware_proto_msgTypes,
+ }.Build()
+ File_meshtastic_remote_hardware_proto = out.File
+ file_meshtastic_remote_hardware_proto_goTypes = nil
+ file_meshtastic_remote_hardware_proto_depIdxs = nil
+}
diff --git a/protocol/meshtastic/pb/rtttl.pb.go b/protocol/meshtastic/pb/rtttl.pb.go
new file mode 100644
index 0000000..91449f2
--- /dev/null
+++ b/protocol/meshtastic/pb/rtttl.pb.go
@@ -0,0 +1,126 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc v6.33.4
+// source: meshtastic/rtttl.proto
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// Canned message module configuration.
+type RTTTLConfig struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Ringtone for PWM Buzzer in RTTTL Format.
+ Ringtone string `protobuf:"bytes,1,opt,name=ringtone,proto3" json:"ringtone,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *RTTTLConfig) Reset() {
+ *x = RTTTLConfig{}
+ mi := &file_meshtastic_rtttl_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *RTTTLConfig) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*RTTTLConfig) ProtoMessage() {}
+
+func (x *RTTTLConfig) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_rtttl_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use RTTTLConfig.ProtoReflect.Descriptor instead.
+func (*RTTTLConfig) Descriptor() ([]byte, []int) {
+ return file_meshtastic_rtttl_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *RTTTLConfig) GetRingtone() string {
+ if x != nil {
+ return x.Ringtone
+ }
+ return ""
+}
+
+var File_meshtastic_rtttl_proto protoreflect.FileDescriptor
+
+const file_meshtastic_rtttl_proto_rawDesc = "" +
+ "\n" +
+ "\x16meshtastic/rtttl.proto\x12\n" +
+ "meshtastic\")\n" +
+ "\vRTTTLConfig\x12\x1a\n" +
+ "\bringtone\x18\x01 \x01(\tR\bringtoneBg\n" +
+ "\x14org.meshtastic.protoB\x11RTTTLConfigProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00b\x06proto3"
+
+var (
+ file_meshtastic_rtttl_proto_rawDescOnce sync.Once
+ file_meshtastic_rtttl_proto_rawDescData []byte
+)
+
+func file_meshtastic_rtttl_proto_rawDescGZIP() []byte {
+ file_meshtastic_rtttl_proto_rawDescOnce.Do(func() {
+ file_meshtastic_rtttl_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_meshtastic_rtttl_proto_rawDesc), len(file_meshtastic_rtttl_proto_rawDesc)))
+ })
+ return file_meshtastic_rtttl_proto_rawDescData
+}
+
+var file_meshtastic_rtttl_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
+var file_meshtastic_rtttl_proto_goTypes = []any{
+ (*RTTTLConfig)(nil), // 0: meshtastic.RTTTLConfig
+}
+var file_meshtastic_rtttl_proto_depIdxs = []int32{
+ 0, // [0:0] is the sub-list for method output_type
+ 0, // [0:0] is the sub-list for method input_type
+ 0, // [0:0] is the sub-list for extension type_name
+ 0, // [0:0] is the sub-list for extension extendee
+ 0, // [0:0] is the sub-list for field type_name
+}
+
+func init() { file_meshtastic_rtttl_proto_init() }
+func file_meshtastic_rtttl_proto_init() {
+ if File_meshtastic_rtttl_proto != nil {
+ return
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_meshtastic_rtttl_proto_rawDesc), len(file_meshtastic_rtttl_proto_rawDesc)),
+ NumEnums: 0,
+ NumMessages: 1,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_meshtastic_rtttl_proto_goTypes,
+ DependencyIndexes: file_meshtastic_rtttl_proto_depIdxs,
+ MessageInfos: file_meshtastic_rtttl_proto_msgTypes,
+ }.Build()
+ File_meshtastic_rtttl_proto = out.File
+ file_meshtastic_rtttl_proto_goTypes = nil
+ file_meshtastic_rtttl_proto_depIdxs = nil
+}
diff --git a/protocol/meshtastic/pb/storeforward.pb.go b/protocol/meshtastic/pb/storeforward.pb.go
new file mode 100644
index 0000000..09e7193
--- /dev/null
+++ b/protocol/meshtastic/pb/storeforward.pb.go
@@ -0,0 +1,613 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc v6.33.4
+// source: meshtastic/storeforward.proto
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// 001 - 063 = From Router
+// 064 - 127 = From Client
+type StoreAndForward_RequestResponse int32
+
+const (
+ // Unset/unused
+ StoreAndForward_UNSET StoreAndForward_RequestResponse = 0
+ // Router is an in error state.
+ StoreAndForward_ROUTER_ERROR StoreAndForward_RequestResponse = 1
+ // Router heartbeat
+ StoreAndForward_ROUTER_HEARTBEAT StoreAndForward_RequestResponse = 2
+ // Router has requested the client respond. This can work as a
+ // "are you there" message.
+ StoreAndForward_ROUTER_PING StoreAndForward_RequestResponse = 3
+ // The response to a "Ping"
+ StoreAndForward_ROUTER_PONG StoreAndForward_RequestResponse = 4
+ // Router is currently busy. Please try again later.
+ StoreAndForward_ROUTER_BUSY StoreAndForward_RequestResponse = 5
+ // Router is responding to a request for history.
+ StoreAndForward_ROUTER_HISTORY StoreAndForward_RequestResponse = 6
+ // Router is responding to a request for stats.
+ StoreAndForward_ROUTER_STATS StoreAndForward_RequestResponse = 7
+ // Router sends a text message from its history that was a direct message.
+ StoreAndForward_ROUTER_TEXT_DIRECT StoreAndForward_RequestResponse = 8
+ // Router sends a text message from its history that was a broadcast.
+ StoreAndForward_ROUTER_TEXT_BROADCAST StoreAndForward_RequestResponse = 9
+ // Client is an in error state.
+ StoreAndForward_CLIENT_ERROR StoreAndForward_RequestResponse = 64
+ // Client has requested a replay from the router.
+ StoreAndForward_CLIENT_HISTORY StoreAndForward_RequestResponse = 65
+ // Client has requested stats from the router.
+ StoreAndForward_CLIENT_STATS StoreAndForward_RequestResponse = 66
+ // Client has requested the router respond. This can work as a
+ // "are you there" message.
+ StoreAndForward_CLIENT_PING StoreAndForward_RequestResponse = 67
+ // The response to a "Ping"
+ StoreAndForward_CLIENT_PONG StoreAndForward_RequestResponse = 68
+ // Client has requested that the router abort processing the client's request
+ StoreAndForward_CLIENT_ABORT StoreAndForward_RequestResponse = 106
+)
+
+// Enum value maps for StoreAndForward_RequestResponse.
+var (
+ StoreAndForward_RequestResponse_name = map[int32]string{
+ 0: "UNSET",
+ 1: "ROUTER_ERROR",
+ 2: "ROUTER_HEARTBEAT",
+ 3: "ROUTER_PING",
+ 4: "ROUTER_PONG",
+ 5: "ROUTER_BUSY",
+ 6: "ROUTER_HISTORY",
+ 7: "ROUTER_STATS",
+ 8: "ROUTER_TEXT_DIRECT",
+ 9: "ROUTER_TEXT_BROADCAST",
+ 64: "CLIENT_ERROR",
+ 65: "CLIENT_HISTORY",
+ 66: "CLIENT_STATS",
+ 67: "CLIENT_PING",
+ 68: "CLIENT_PONG",
+ 106: "CLIENT_ABORT",
+ }
+ StoreAndForward_RequestResponse_value = map[string]int32{
+ "UNSET": 0,
+ "ROUTER_ERROR": 1,
+ "ROUTER_HEARTBEAT": 2,
+ "ROUTER_PING": 3,
+ "ROUTER_PONG": 4,
+ "ROUTER_BUSY": 5,
+ "ROUTER_HISTORY": 6,
+ "ROUTER_STATS": 7,
+ "ROUTER_TEXT_DIRECT": 8,
+ "ROUTER_TEXT_BROADCAST": 9,
+ "CLIENT_ERROR": 64,
+ "CLIENT_HISTORY": 65,
+ "CLIENT_STATS": 66,
+ "CLIENT_PING": 67,
+ "CLIENT_PONG": 68,
+ "CLIENT_ABORT": 106,
+ }
+)
+
+func (x StoreAndForward_RequestResponse) Enum() *StoreAndForward_RequestResponse {
+ p := new(StoreAndForward_RequestResponse)
+ *p = x
+ return p
+}
+
+func (x StoreAndForward_RequestResponse) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (StoreAndForward_RequestResponse) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_storeforward_proto_enumTypes[0].Descriptor()
+}
+
+func (StoreAndForward_RequestResponse) Type() protoreflect.EnumType {
+ return &file_meshtastic_storeforward_proto_enumTypes[0]
+}
+
+func (x StoreAndForward_RequestResponse) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use StoreAndForward_RequestResponse.Descriptor instead.
+func (StoreAndForward_RequestResponse) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_storeforward_proto_rawDescGZIP(), []int{0, 0}
+}
+
+// TODO: REPLACE
+type StoreAndForward struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // TODO: REPLACE
+ Rr StoreAndForward_RequestResponse `protobuf:"varint,1,opt,name=rr,proto3,enum=meshtastic.StoreAndForward_RequestResponse" json:"rr,omitempty"`
+ // TODO: REPLACE
+ //
+ // Types that are valid to be assigned to Variant:
+ //
+ // *StoreAndForward_Stats
+ // *StoreAndForward_History_
+ // *StoreAndForward_Heartbeat_
+ // *StoreAndForward_Text
+ Variant isStoreAndForward_Variant `protobuf_oneof:"variant"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *StoreAndForward) Reset() {
+ *x = StoreAndForward{}
+ mi := &file_meshtastic_storeforward_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *StoreAndForward) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StoreAndForward) ProtoMessage() {}
+
+func (x *StoreAndForward) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_storeforward_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use StoreAndForward.ProtoReflect.Descriptor instead.
+func (*StoreAndForward) Descriptor() ([]byte, []int) {
+ return file_meshtastic_storeforward_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *StoreAndForward) GetRr() StoreAndForward_RequestResponse {
+ if x != nil {
+ return x.Rr
+ }
+ return StoreAndForward_UNSET
+}
+
+func (x *StoreAndForward) GetVariant() isStoreAndForward_Variant {
+ if x != nil {
+ return x.Variant
+ }
+ return nil
+}
+
+func (x *StoreAndForward) GetStats() *StoreAndForward_Statistics {
+ if x != nil {
+ if x, ok := x.Variant.(*StoreAndForward_Stats); ok {
+ return x.Stats
+ }
+ }
+ return nil
+}
+
+func (x *StoreAndForward) GetHistory() *StoreAndForward_History {
+ if x != nil {
+ if x, ok := x.Variant.(*StoreAndForward_History_); ok {
+ return x.History
+ }
+ }
+ return nil
+}
+
+func (x *StoreAndForward) GetHeartbeat() *StoreAndForward_Heartbeat {
+ if x != nil {
+ if x, ok := x.Variant.(*StoreAndForward_Heartbeat_); ok {
+ return x.Heartbeat
+ }
+ }
+ return nil
+}
+
+func (x *StoreAndForward) GetText() []byte {
+ if x != nil {
+ if x, ok := x.Variant.(*StoreAndForward_Text); ok {
+ return x.Text
+ }
+ }
+ return nil
+}
+
+type isStoreAndForward_Variant interface {
+ isStoreAndForward_Variant()
+}
+
+type StoreAndForward_Stats struct {
+ // TODO: REPLACE
+ Stats *StoreAndForward_Statistics `protobuf:"bytes,2,opt,name=stats,proto3,oneof"`
+}
+
+type StoreAndForward_History_ struct {
+ // TODO: REPLACE
+ History *StoreAndForward_History `protobuf:"bytes,3,opt,name=history,proto3,oneof"`
+}
+
+type StoreAndForward_Heartbeat_ struct {
+ // TODO: REPLACE
+ Heartbeat *StoreAndForward_Heartbeat `protobuf:"bytes,4,opt,name=heartbeat,proto3,oneof"`
+}
+
+type StoreAndForward_Text struct {
+ // Text from history message.
+ Text []byte `protobuf:"bytes,5,opt,name=text,proto3,oneof"`
+}
+
+func (*StoreAndForward_Stats) isStoreAndForward_Variant() {}
+
+func (*StoreAndForward_History_) isStoreAndForward_Variant() {}
+
+func (*StoreAndForward_Heartbeat_) isStoreAndForward_Variant() {}
+
+func (*StoreAndForward_Text) isStoreAndForward_Variant() {}
+
+// TODO: REPLACE
+type StoreAndForward_Statistics struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Number of messages we have ever seen
+ MessagesTotal uint32 `protobuf:"varint,1,opt,name=messages_total,json=messagesTotal,proto3" json:"messagesTotal,omitempty"`
+ // Number of messages we have currently saved our history.
+ MessagesSaved uint32 `protobuf:"varint,2,opt,name=messages_saved,json=messagesSaved,proto3" json:"messagesSaved,omitempty"`
+ // Maximum number of messages we will save
+ MessagesMax uint32 `protobuf:"varint,3,opt,name=messages_max,json=messagesMax,proto3" json:"messagesMax,omitempty"`
+ // Router uptime in seconds
+ UpTime uint32 `protobuf:"varint,4,opt,name=up_time,json=upTime,proto3" json:"upTime,omitempty"`
+ // Number of times any client sent a request to the S&F.
+ Requests uint32 `protobuf:"varint,5,opt,name=requests,proto3" json:"requests,omitempty"`
+ // Number of times the history was requested.
+ RequestsHistory uint32 `protobuf:"varint,6,opt,name=requests_history,json=requestsHistory,proto3" json:"requestsHistory,omitempty"`
+ // Is the heartbeat enabled on the server?
+ Heartbeat bool `protobuf:"varint,7,opt,name=heartbeat,proto3" json:"heartbeat,omitempty"`
+ // Maximum number of messages the server will return.
+ ReturnMax uint32 `protobuf:"varint,8,opt,name=return_max,json=returnMax,proto3" json:"returnMax,omitempty"`
+ // Maximum history window in minutes the server will return messages from.
+ ReturnWindow uint32 `protobuf:"varint,9,opt,name=return_window,json=returnWindow,proto3" json:"returnWindow,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *StoreAndForward_Statistics) Reset() {
+ *x = StoreAndForward_Statistics{}
+ mi := &file_meshtastic_storeforward_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *StoreAndForward_Statistics) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StoreAndForward_Statistics) ProtoMessage() {}
+
+func (x *StoreAndForward_Statistics) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_storeforward_proto_msgTypes[1]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use StoreAndForward_Statistics.ProtoReflect.Descriptor instead.
+func (*StoreAndForward_Statistics) Descriptor() ([]byte, []int) {
+ return file_meshtastic_storeforward_proto_rawDescGZIP(), []int{0, 0}
+}
+
+func (x *StoreAndForward_Statistics) GetMessagesTotal() uint32 {
+ if x != nil {
+ return x.MessagesTotal
+ }
+ return 0
+}
+
+func (x *StoreAndForward_Statistics) GetMessagesSaved() uint32 {
+ if x != nil {
+ return x.MessagesSaved
+ }
+ return 0
+}
+
+func (x *StoreAndForward_Statistics) GetMessagesMax() uint32 {
+ if x != nil {
+ return x.MessagesMax
+ }
+ return 0
+}
+
+func (x *StoreAndForward_Statistics) GetUpTime() uint32 {
+ if x != nil {
+ return x.UpTime
+ }
+ return 0
+}
+
+func (x *StoreAndForward_Statistics) GetRequests() uint32 {
+ if x != nil {
+ return x.Requests
+ }
+ return 0
+}
+
+func (x *StoreAndForward_Statistics) GetRequestsHistory() uint32 {
+ if x != nil {
+ return x.RequestsHistory
+ }
+ return 0
+}
+
+func (x *StoreAndForward_Statistics) GetHeartbeat() bool {
+ if x != nil {
+ return x.Heartbeat
+ }
+ return false
+}
+
+func (x *StoreAndForward_Statistics) GetReturnMax() uint32 {
+ if x != nil {
+ return x.ReturnMax
+ }
+ return 0
+}
+
+func (x *StoreAndForward_Statistics) GetReturnWindow() uint32 {
+ if x != nil {
+ return x.ReturnWindow
+ }
+ return 0
+}
+
+// TODO: REPLACE
+type StoreAndForward_History struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Number of that will be sent to the client
+ HistoryMessages uint32 `protobuf:"varint,1,opt,name=history_messages,json=historyMessages,proto3" json:"historyMessages,omitempty"`
+ // The window of messages that was used to filter the history client requested
+ Window uint32 `protobuf:"varint,2,opt,name=window,proto3" json:"window,omitempty"`
+ // Index in the packet history of the last message sent in a previous request to the server.
+ // Will be sent to the client before sending the history and can be set in a subsequent request to avoid getting packets the server already sent to the client.
+ LastRequest uint32 `protobuf:"varint,3,opt,name=last_request,json=lastRequest,proto3" json:"lastRequest,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *StoreAndForward_History) Reset() {
+ *x = StoreAndForward_History{}
+ mi := &file_meshtastic_storeforward_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *StoreAndForward_History) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StoreAndForward_History) ProtoMessage() {}
+
+func (x *StoreAndForward_History) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_storeforward_proto_msgTypes[2]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use StoreAndForward_History.ProtoReflect.Descriptor instead.
+func (*StoreAndForward_History) Descriptor() ([]byte, []int) {
+ return file_meshtastic_storeforward_proto_rawDescGZIP(), []int{0, 1}
+}
+
+func (x *StoreAndForward_History) GetHistoryMessages() uint32 {
+ if x != nil {
+ return x.HistoryMessages
+ }
+ return 0
+}
+
+func (x *StoreAndForward_History) GetWindow() uint32 {
+ if x != nil {
+ return x.Window
+ }
+ return 0
+}
+
+func (x *StoreAndForward_History) GetLastRequest() uint32 {
+ if x != nil {
+ return x.LastRequest
+ }
+ return 0
+}
+
+// TODO: REPLACE
+type StoreAndForward_Heartbeat struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Period in seconds that the heartbeat is sent out that will be sent to the client
+ Period uint32 `protobuf:"varint,1,opt,name=period,proto3" json:"period,omitempty"`
+ // If set, this is not the primary Store & Forward router on the mesh
+ Secondary uint32 `protobuf:"varint,2,opt,name=secondary,proto3" json:"secondary,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *StoreAndForward_Heartbeat) Reset() {
+ *x = StoreAndForward_Heartbeat{}
+ mi := &file_meshtastic_storeforward_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *StoreAndForward_Heartbeat) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StoreAndForward_Heartbeat) ProtoMessage() {}
+
+func (x *StoreAndForward_Heartbeat) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_storeforward_proto_msgTypes[3]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use StoreAndForward_Heartbeat.ProtoReflect.Descriptor instead.
+func (*StoreAndForward_Heartbeat) Descriptor() ([]byte, []int) {
+ return file_meshtastic_storeforward_proto_rawDescGZIP(), []int{0, 2}
+}
+
+func (x *StoreAndForward_Heartbeat) GetPeriod() uint32 {
+ if x != nil {
+ return x.Period
+ }
+ return 0
+}
+
+func (x *StoreAndForward_Heartbeat) GetSecondary() uint32 {
+ if x != nil {
+ return x.Secondary
+ }
+ return 0
+}
+
+var File_meshtastic_storeforward_proto protoreflect.FileDescriptor
+
+const file_meshtastic_storeforward_proto_rawDesc = "" +
+ "\n" +
+ "\x1dmeshtastic/storeforward.proto\x12\n" +
+ "meshtastic\"\xec\b\n" +
+ "\x0fStoreAndForward\x12;\n" +
+ "\x02rr\x18\x01 \x01(\x0e2+.meshtastic.StoreAndForward.RequestResponseR\x02rr\x12>\n" +
+ "\x05stats\x18\x02 \x01(\v2&.meshtastic.StoreAndForward.StatisticsH\x00R\x05stats\x12?\n" +
+ "\ahistory\x18\x03 \x01(\v2#.meshtastic.StoreAndForward.HistoryH\x00R\ahistory\x12E\n" +
+ "\theartbeat\x18\x04 \x01(\v2%.meshtastic.StoreAndForward.HeartbeatH\x00R\theartbeat\x12\x14\n" +
+ "\x04text\x18\x05 \x01(\fH\x00R\x04text\x1a\xbf\x02\n" +
+ "\n" +
+ "Statistics\x12%\n" +
+ "\x0emessages_total\x18\x01 \x01(\rR\rmessagesTotal\x12%\n" +
+ "\x0emessages_saved\x18\x02 \x01(\rR\rmessagesSaved\x12!\n" +
+ "\fmessages_max\x18\x03 \x01(\rR\vmessagesMax\x12\x17\n" +
+ "\aup_time\x18\x04 \x01(\rR\x06upTime\x12\x1a\n" +
+ "\brequests\x18\x05 \x01(\rR\brequests\x12)\n" +
+ "\x10requests_history\x18\x06 \x01(\rR\x0frequestsHistory\x12\x1c\n" +
+ "\theartbeat\x18\a \x01(\bR\theartbeat\x12\x1d\n" +
+ "\n" +
+ "return_max\x18\b \x01(\rR\treturnMax\x12#\n" +
+ "\rreturn_window\x18\t \x01(\rR\freturnWindow\x1ao\n" +
+ "\aHistory\x12)\n" +
+ "\x10history_messages\x18\x01 \x01(\rR\x0fhistoryMessages\x12\x16\n" +
+ "\x06window\x18\x02 \x01(\rR\x06window\x12!\n" +
+ "\flast_request\x18\x03 \x01(\rR\vlastRequest\x1aA\n" +
+ "\tHeartbeat\x12\x16\n" +
+ "\x06period\x18\x01 \x01(\rR\x06period\x12\x1c\n" +
+ "\tsecondary\x18\x02 \x01(\rR\tsecondary\"\xbc\x02\n" +
+ "\x0fRequestResponse\x12\t\n" +
+ "\x05UNSET\x10\x00\x12\x10\n" +
+ "\fROUTER_ERROR\x10\x01\x12\x14\n" +
+ "\x10ROUTER_HEARTBEAT\x10\x02\x12\x0f\n" +
+ "\vROUTER_PING\x10\x03\x12\x0f\n" +
+ "\vROUTER_PONG\x10\x04\x12\x0f\n" +
+ "\vROUTER_BUSY\x10\x05\x12\x12\n" +
+ "\x0eROUTER_HISTORY\x10\x06\x12\x10\n" +
+ "\fROUTER_STATS\x10\a\x12\x16\n" +
+ "\x12ROUTER_TEXT_DIRECT\x10\b\x12\x19\n" +
+ "\x15ROUTER_TEXT_BROADCAST\x10\t\x12\x10\n" +
+ "\fCLIENT_ERROR\x10@\x12\x12\n" +
+ "\x0eCLIENT_HISTORY\x10A\x12\x10\n" +
+ "\fCLIENT_STATS\x10B\x12\x0f\n" +
+ "\vCLIENT_PING\x10C\x12\x0f\n" +
+ "\vCLIENT_PONG\x10D\x12\x10\n" +
+ "\fCLIENT_ABORT\x10jB\t\n" +
+ "\avariantBk\n" +
+ "\x14org.meshtastic.protoB\x15StoreAndForwardProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00b\x06proto3"
+
+var (
+ file_meshtastic_storeforward_proto_rawDescOnce sync.Once
+ file_meshtastic_storeforward_proto_rawDescData []byte
+)
+
+func file_meshtastic_storeforward_proto_rawDescGZIP() []byte {
+ file_meshtastic_storeforward_proto_rawDescOnce.Do(func() {
+ file_meshtastic_storeforward_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_meshtastic_storeforward_proto_rawDesc), len(file_meshtastic_storeforward_proto_rawDesc)))
+ })
+ return file_meshtastic_storeforward_proto_rawDescData
+}
+
+var file_meshtastic_storeforward_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_meshtastic_storeforward_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
+var file_meshtastic_storeforward_proto_goTypes = []any{
+ (StoreAndForward_RequestResponse)(0), // 0: meshtastic.StoreAndForward.RequestResponse
+ (*StoreAndForward)(nil), // 1: meshtastic.StoreAndForward
+ (*StoreAndForward_Statistics)(nil), // 2: meshtastic.StoreAndForward.Statistics
+ (*StoreAndForward_History)(nil), // 3: meshtastic.StoreAndForward.History
+ (*StoreAndForward_Heartbeat)(nil), // 4: meshtastic.StoreAndForward.Heartbeat
+}
+var file_meshtastic_storeforward_proto_depIdxs = []int32{
+ 0, // 0: meshtastic.StoreAndForward.rr:type_name -> meshtastic.StoreAndForward.RequestResponse
+ 2, // 1: meshtastic.StoreAndForward.stats:type_name -> meshtastic.StoreAndForward.Statistics
+ 3, // 2: meshtastic.StoreAndForward.history:type_name -> meshtastic.StoreAndForward.History
+ 4, // 3: meshtastic.StoreAndForward.heartbeat:type_name -> meshtastic.StoreAndForward.Heartbeat
+ 4, // [4:4] is the sub-list for method output_type
+ 4, // [4:4] is the sub-list for method input_type
+ 4, // [4:4] is the sub-list for extension type_name
+ 4, // [4:4] is the sub-list for extension extendee
+ 0, // [0:4] is the sub-list for field type_name
+}
+
+func init() { file_meshtastic_storeforward_proto_init() }
+func file_meshtastic_storeforward_proto_init() {
+ if File_meshtastic_storeforward_proto != nil {
+ return
+ }
+ file_meshtastic_storeforward_proto_msgTypes[0].OneofWrappers = []any{
+ (*StoreAndForward_Stats)(nil),
+ (*StoreAndForward_History_)(nil),
+ (*StoreAndForward_Heartbeat_)(nil),
+ (*StoreAndForward_Text)(nil),
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_meshtastic_storeforward_proto_rawDesc), len(file_meshtastic_storeforward_proto_rawDesc)),
+ NumEnums: 1,
+ NumMessages: 4,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_meshtastic_storeforward_proto_goTypes,
+ DependencyIndexes: file_meshtastic_storeforward_proto_depIdxs,
+ EnumInfos: file_meshtastic_storeforward_proto_enumTypes,
+ MessageInfos: file_meshtastic_storeforward_proto_msgTypes,
+ }.Build()
+ File_meshtastic_storeforward_proto = out.File
+ file_meshtastic_storeforward_proto_goTypes = nil
+ file_meshtastic_storeforward_proto_depIdxs = nil
+}
diff --git a/protocol/meshtastic/pb/telemetry.pb.go b/protocol/meshtastic/pb/telemetry.pb.go
new file mode 100644
index 0000000..62d1faa
--- /dev/null
+++ b/protocol/meshtastic/pb/telemetry.pb.go
@@ -0,0 +1,2233 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc v6.33.4
+// source: meshtastic/telemetry.proto
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+// Supported I2C Sensors for telemetry in Meshtastic
+type TelemetrySensorType int32
+
+const (
+ // No external telemetry sensor explicitly set
+ TelemetrySensorType_SENSOR_UNSET TelemetrySensorType = 0
+ // High accuracy temperature, pressure, humidity
+ TelemetrySensorType_BME280 TelemetrySensorType = 1
+ // High accuracy temperature, pressure, humidity, and air resistance
+ TelemetrySensorType_BME680 TelemetrySensorType = 2
+ // Very high accuracy temperature
+ TelemetrySensorType_MCP9808 TelemetrySensorType = 3
+ // Moderate accuracy current and voltage
+ TelemetrySensorType_INA260 TelemetrySensorType = 4
+ // Moderate accuracy current and voltage
+ TelemetrySensorType_INA219 TelemetrySensorType = 5
+ // High accuracy temperature and pressure
+ TelemetrySensorType_BMP280 TelemetrySensorType = 6
+ // High accuracy temperature and humidity
+ TelemetrySensorType_SHTC3 TelemetrySensorType = 7
+ // High accuracy pressure
+ TelemetrySensorType_LPS22 TelemetrySensorType = 8
+ // 3-Axis magnetic sensor
+ TelemetrySensorType_QMC6310 TelemetrySensorType = 9
+ // 6-Axis inertial measurement sensor
+ TelemetrySensorType_QMI8658 TelemetrySensorType = 10
+ // 3-Axis magnetic sensor
+ TelemetrySensorType_QMC5883L TelemetrySensorType = 11
+ // High accuracy temperature and humidity
+ TelemetrySensorType_SHT31 TelemetrySensorType = 12
+ // PM2.5 air quality sensor
+ TelemetrySensorType_PMSA003I TelemetrySensorType = 13
+ // INA3221 3 Channel Voltage / Current Sensor
+ TelemetrySensorType_INA3221 TelemetrySensorType = 14
+ // BMP085/BMP180 High accuracy temperature and pressure (older Version of BMP280)
+ TelemetrySensorType_BMP085 TelemetrySensorType = 15
+ // RCWL-9620 Doppler Radar Distance Sensor, used for water level detection
+ TelemetrySensorType_RCWL9620 TelemetrySensorType = 16
+ // Sensirion High accuracy temperature and humidity
+ TelemetrySensorType_SHT4X TelemetrySensorType = 17
+ // VEML7700 high accuracy ambient light(Lux) digital 16-bit resolution sensor.
+ TelemetrySensorType_VEML7700 TelemetrySensorType = 18
+ // MLX90632 non-contact IR temperature sensor.
+ TelemetrySensorType_MLX90632 TelemetrySensorType = 19
+ // TI OPT3001 Ambient Light Sensor
+ TelemetrySensorType_OPT3001 TelemetrySensorType = 20
+ // Lite On LTR-390UV-01 UV Light Sensor
+ TelemetrySensorType_LTR390UV TelemetrySensorType = 21
+ // AMS TSL25911FN RGB Light Sensor
+ TelemetrySensorType_TSL25911FN TelemetrySensorType = 22
+ // AHT10 Integrated temperature and humidity sensor
+ TelemetrySensorType_AHT10 TelemetrySensorType = 23
+ // DFRobot Lark Weather station (temperature, humidity, pressure, wind speed and direction)
+ TelemetrySensorType_DFROBOT_LARK TelemetrySensorType = 24
+ // NAU7802 Scale Chip or compatible
+ TelemetrySensorType_NAU7802 TelemetrySensorType = 25
+ // BMP3XX High accuracy temperature and pressure
+ TelemetrySensorType_BMP3XX TelemetrySensorType = 26
+ // ICM-20948 9-Axis digital motion processor
+ TelemetrySensorType_ICM20948 TelemetrySensorType = 27
+ // MAX17048 1S lipo battery sensor (voltage, state of charge, time to go)
+ TelemetrySensorType_MAX17048 TelemetrySensorType = 28
+ // Custom I2C sensor implementation based on https://github.com/meshtastic/i2c-sensor
+ TelemetrySensorType_CUSTOM_SENSOR TelemetrySensorType = 29
+ // MAX30102 Pulse Oximeter and Heart-Rate Sensor
+ TelemetrySensorType_MAX30102 TelemetrySensorType = 30
+ // MLX90614 non-contact IR temperature sensor
+ TelemetrySensorType_MLX90614 TelemetrySensorType = 31
+ // SCD40/SCD41 CO2, humidity, temperature sensor
+ TelemetrySensorType_SCD4X TelemetrySensorType = 32
+ // ClimateGuard RadSens, radiation, Geiger-Muller Tube
+ TelemetrySensorType_RADSENS TelemetrySensorType = 33
+ // High accuracy current and voltage
+ TelemetrySensorType_INA226 TelemetrySensorType = 34
+ // DFRobot Gravity tipping bucket rain gauge
+ TelemetrySensorType_DFROBOT_RAIN TelemetrySensorType = 35
+ // Infineon DPS310 High accuracy pressure and temperature
+ TelemetrySensorType_DPS310 TelemetrySensorType = 36
+ // RAKWireless RAK12035 Soil Moisture Sensor Module
+ TelemetrySensorType_RAK12035 TelemetrySensorType = 37
+ // MAX17261 lipo battery gauge
+ TelemetrySensorType_MAX17261 TelemetrySensorType = 38
+ // PCT2075 Temperature Sensor
+ TelemetrySensorType_PCT2075 TelemetrySensorType = 39
+ // ADS1X15 ADC
+ TelemetrySensorType_ADS1X15 TelemetrySensorType = 40
+ // ADS1X15 ADC_ALT
+ TelemetrySensorType_ADS1X15_ALT TelemetrySensorType = 41
+ // Sensirion SFA30 Formaldehyde sensor
+ TelemetrySensorType_SFA30 TelemetrySensorType = 42
+ // SEN5X PM SENSORS
+ TelemetrySensorType_SEN5X TelemetrySensorType = 43
+ // TSL2561 light sensor
+ TelemetrySensorType_TSL2561 TelemetrySensorType = 44
+ // BH1750 light sensor
+ TelemetrySensorType_BH1750 TelemetrySensorType = 45
+ // HDC1080 Temperature and Humidity Sensor
+ TelemetrySensorType_HDC1080 TelemetrySensorType = 46
+ // STH21 Temperature and R. Humidity sensor
+ TelemetrySensorType_SHT21 TelemetrySensorType = 47
+ // Sensirion STC31 CO2 sensor
+ TelemetrySensorType_STC31 TelemetrySensorType = 48
+ // SCD30 CO2, humidity, temperature sensor
+ TelemetrySensorType_SCD30 TelemetrySensorType = 49
+)
+
+// Enum value maps for TelemetrySensorType.
+var (
+ TelemetrySensorType_name = map[int32]string{
+ 0: "SENSOR_UNSET",
+ 1: "BME280",
+ 2: "BME680",
+ 3: "MCP9808",
+ 4: "INA260",
+ 5: "INA219",
+ 6: "BMP280",
+ 7: "SHTC3",
+ 8: "LPS22",
+ 9: "QMC6310",
+ 10: "QMI8658",
+ 11: "QMC5883L",
+ 12: "SHT31",
+ 13: "PMSA003I",
+ 14: "INA3221",
+ 15: "BMP085",
+ 16: "RCWL9620",
+ 17: "SHT4X",
+ 18: "VEML7700",
+ 19: "MLX90632",
+ 20: "OPT3001",
+ 21: "LTR390UV",
+ 22: "TSL25911FN",
+ 23: "AHT10",
+ 24: "DFROBOT_LARK",
+ 25: "NAU7802",
+ 26: "BMP3XX",
+ 27: "ICM20948",
+ 28: "MAX17048",
+ 29: "CUSTOM_SENSOR",
+ 30: "MAX30102",
+ 31: "MLX90614",
+ 32: "SCD4X",
+ 33: "RADSENS",
+ 34: "INA226",
+ 35: "DFROBOT_RAIN",
+ 36: "DPS310",
+ 37: "RAK12035",
+ 38: "MAX17261",
+ 39: "PCT2075",
+ 40: "ADS1X15",
+ 41: "ADS1X15_ALT",
+ 42: "SFA30",
+ 43: "SEN5X",
+ 44: "TSL2561",
+ 45: "BH1750",
+ 46: "HDC1080",
+ 47: "SHT21",
+ 48: "STC31",
+ 49: "SCD30",
+ }
+ TelemetrySensorType_value = map[string]int32{
+ "SENSOR_UNSET": 0,
+ "BME280": 1,
+ "BME680": 2,
+ "MCP9808": 3,
+ "INA260": 4,
+ "INA219": 5,
+ "BMP280": 6,
+ "SHTC3": 7,
+ "LPS22": 8,
+ "QMC6310": 9,
+ "QMI8658": 10,
+ "QMC5883L": 11,
+ "SHT31": 12,
+ "PMSA003I": 13,
+ "INA3221": 14,
+ "BMP085": 15,
+ "RCWL9620": 16,
+ "SHT4X": 17,
+ "VEML7700": 18,
+ "MLX90632": 19,
+ "OPT3001": 20,
+ "LTR390UV": 21,
+ "TSL25911FN": 22,
+ "AHT10": 23,
+ "DFROBOT_LARK": 24,
+ "NAU7802": 25,
+ "BMP3XX": 26,
+ "ICM20948": 27,
+ "MAX17048": 28,
+ "CUSTOM_SENSOR": 29,
+ "MAX30102": 30,
+ "MLX90614": 31,
+ "SCD4X": 32,
+ "RADSENS": 33,
+ "INA226": 34,
+ "DFROBOT_RAIN": 35,
+ "DPS310": 36,
+ "RAK12035": 37,
+ "MAX17261": 38,
+ "PCT2075": 39,
+ "ADS1X15": 40,
+ "ADS1X15_ALT": 41,
+ "SFA30": 42,
+ "SEN5X": 43,
+ "TSL2561": 44,
+ "BH1750": 45,
+ "HDC1080": 46,
+ "SHT21": 47,
+ "STC31": 48,
+ "SCD30": 49,
+ }
+)
+
+func (x TelemetrySensorType) Enum() *TelemetrySensorType {
+ p := new(TelemetrySensorType)
+ *p = x
+ return p
+}
+
+func (x TelemetrySensorType) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (TelemetrySensorType) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_telemetry_proto_enumTypes[0].Descriptor()
+}
+
+func (TelemetrySensorType) Type() protoreflect.EnumType {
+ return &file_meshtastic_telemetry_proto_enumTypes[0]
+}
+
+func (x TelemetrySensorType) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use TelemetrySensorType.Descriptor instead.
+func (TelemetrySensorType) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_telemetry_proto_rawDescGZIP(), []int{0}
+}
+
+// Key native device metrics such as battery level
+type DeviceMetrics struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // 0-100 (>100 means powered)
+ BatteryLevel *uint32 `protobuf:"varint,1,opt,name=battery_level,json=batteryLevel,proto3,oneof" json:"batteryLevel,omitempty"`
+ // Voltage measured
+ Voltage *float32 `protobuf:"fixed32,2,opt,name=voltage,proto3,oneof" json:"voltage,omitempty"`
+ // Utilization for the current channel, including well formed TX, RX and malformed RX (aka noise).
+ ChannelUtilization *float32 `protobuf:"fixed32,3,opt,name=channel_utilization,json=channelUtilization,proto3,oneof" json:"channelUtilization,omitempty"`
+ // Percent of airtime for transmission used within the last hour.
+ AirUtilTx *float32 `protobuf:"fixed32,4,opt,name=air_util_tx,json=airUtilTx,proto3,oneof" json:"airUtilTx,omitempty"`
+ // How long the device has been running since the last reboot (in seconds)
+ UptimeSeconds *uint32 `protobuf:"varint,5,opt,name=uptime_seconds,json=uptimeSeconds,proto3,oneof" json:"uptimeSeconds,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *DeviceMetrics) Reset() {
+ *x = DeviceMetrics{}
+ mi := &file_meshtastic_telemetry_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *DeviceMetrics) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeviceMetrics) ProtoMessage() {}
+
+func (x *DeviceMetrics) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_telemetry_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use DeviceMetrics.ProtoReflect.Descriptor instead.
+func (*DeviceMetrics) Descriptor() ([]byte, []int) {
+ return file_meshtastic_telemetry_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *DeviceMetrics) GetBatteryLevel() uint32 {
+ if x != nil && x.BatteryLevel != nil {
+ return *x.BatteryLevel
+ }
+ return 0
+}
+
+func (x *DeviceMetrics) GetVoltage() float32 {
+ if x != nil && x.Voltage != nil {
+ return *x.Voltage
+ }
+ return 0
+}
+
+func (x *DeviceMetrics) GetChannelUtilization() float32 {
+ if x != nil && x.ChannelUtilization != nil {
+ return *x.ChannelUtilization
+ }
+ return 0
+}
+
+func (x *DeviceMetrics) GetAirUtilTx() float32 {
+ if x != nil && x.AirUtilTx != nil {
+ return *x.AirUtilTx
+ }
+ return 0
+}
+
+func (x *DeviceMetrics) GetUptimeSeconds() uint32 {
+ if x != nil && x.UptimeSeconds != nil {
+ return *x.UptimeSeconds
+ }
+ return 0
+}
+
+// Weather station or other environmental metrics
+type EnvironmentMetrics struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Temperature measured
+ Temperature *float32 `protobuf:"fixed32,1,opt,name=temperature,proto3,oneof" json:"temperature,omitempty"`
+ // Relative humidity percent measured
+ RelativeHumidity *float32 `protobuf:"fixed32,2,opt,name=relative_humidity,json=relativeHumidity,proto3,oneof" json:"relativeHumidity,omitempty"`
+ // Barometric pressure in hPA measured
+ BarometricPressure *float32 `protobuf:"fixed32,3,opt,name=barometric_pressure,json=barometricPressure,proto3,oneof" json:"barometricPressure,omitempty"`
+ // Gas resistance in MOhm measured
+ GasResistance *float32 `protobuf:"fixed32,4,opt,name=gas_resistance,json=gasResistance,proto3,oneof" json:"gasResistance,omitempty"`
+ // Voltage measured (To be depreciated in favor of PowerMetrics in Meshtastic 3.x)
+ Voltage *float32 `protobuf:"fixed32,5,opt,name=voltage,proto3,oneof" json:"voltage,omitempty"`
+ // Current measured (To be depreciated in favor of PowerMetrics in Meshtastic 3.x)
+ Current *float32 `protobuf:"fixed32,6,opt,name=current,proto3,oneof" json:"current,omitempty"`
+ // 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.
+ Iaq *uint32 `protobuf:"varint,7,opt,name=iaq,proto3,oneof" json:"iaq,omitempty"`
+ // RCWL9620 Doppler Radar Distance Sensor, used for water level detection. Float value in mm.
+ Distance *float32 `protobuf:"fixed32,8,opt,name=distance,proto3,oneof" json:"distance,omitempty"`
+ // VEML7700 high accuracy ambient light(Lux) digital 16-bit resolution sensor.
+ Lux *float32 `protobuf:"fixed32,9,opt,name=lux,proto3,oneof" json:"lux,omitempty"`
+ // VEML7700 high accuracy white light(irradiance) not calibrated digital 16-bit resolution sensor.
+ WhiteLux *float32 `protobuf:"fixed32,10,opt,name=white_lux,json=whiteLux,proto3,oneof" json:"whiteLux,omitempty"`
+ // Infrared lux
+ IrLux *float32 `protobuf:"fixed32,11,opt,name=ir_lux,json=irLux,proto3,oneof" json:"irLux,omitempty"`
+ // Ultraviolet lux
+ UvLux *float32 `protobuf:"fixed32,12,opt,name=uv_lux,json=uvLux,proto3,oneof" json:"uvLux,omitempty"`
+ // Wind direction in degrees
+ // 0 degrees = North, 90 = East, etc...
+ WindDirection *uint32 `protobuf:"varint,13,opt,name=wind_direction,json=windDirection,proto3,oneof" json:"windDirection,omitempty"`
+ // Wind speed in m/s
+ WindSpeed *float32 `protobuf:"fixed32,14,opt,name=wind_speed,json=windSpeed,proto3,oneof" json:"windSpeed,omitempty"`
+ // Weight in KG
+ Weight *float32 `protobuf:"fixed32,15,opt,name=weight,proto3,oneof" json:"weight,omitempty"`
+ // Wind gust in m/s
+ WindGust *float32 `protobuf:"fixed32,16,opt,name=wind_gust,json=windGust,proto3,oneof" json:"windGust,omitempty"`
+ // Wind lull in m/s
+ WindLull *float32 `protobuf:"fixed32,17,opt,name=wind_lull,json=windLull,proto3,oneof" json:"windLull,omitempty"`
+ // Radiation in µR/h
+ Radiation *float32 `protobuf:"fixed32,18,opt,name=radiation,proto3,oneof" json:"radiation,omitempty"`
+ // Rainfall in the last hour in mm
+ Rainfall_1H *float32 `protobuf:"fixed32,19,opt,name=rainfall_1h,json=rainfall1h,proto3,oneof" json:"rainfall1h,omitempty"`
+ // Rainfall in the last 24 hours in mm
+ Rainfall_24H *float32 `protobuf:"fixed32,20,opt,name=rainfall_24h,json=rainfall24h,proto3,oneof" json:"rainfall24h,omitempty"`
+ // Soil moisture measured (% 1-100)
+ SoilMoisture *uint32 `protobuf:"varint,21,opt,name=soil_moisture,json=soilMoisture,proto3,oneof" json:"soilMoisture,omitempty"`
+ // Soil temperature measured (*C)
+ SoilTemperature *float32 `protobuf:"fixed32,22,opt,name=soil_temperature,json=soilTemperature,proto3,oneof" json:"soilTemperature,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *EnvironmentMetrics) Reset() {
+ *x = EnvironmentMetrics{}
+ mi := &file_meshtastic_telemetry_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *EnvironmentMetrics) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*EnvironmentMetrics) ProtoMessage() {}
+
+func (x *EnvironmentMetrics) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_telemetry_proto_msgTypes[1]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use EnvironmentMetrics.ProtoReflect.Descriptor instead.
+func (*EnvironmentMetrics) Descriptor() ([]byte, []int) {
+ return file_meshtastic_telemetry_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *EnvironmentMetrics) GetTemperature() float32 {
+ if x != nil && x.Temperature != nil {
+ return *x.Temperature
+ }
+ return 0
+}
+
+func (x *EnvironmentMetrics) GetRelativeHumidity() float32 {
+ if x != nil && x.RelativeHumidity != nil {
+ return *x.RelativeHumidity
+ }
+ return 0
+}
+
+func (x *EnvironmentMetrics) GetBarometricPressure() float32 {
+ if x != nil && x.BarometricPressure != nil {
+ return *x.BarometricPressure
+ }
+ return 0
+}
+
+func (x *EnvironmentMetrics) GetGasResistance() float32 {
+ if x != nil && x.GasResistance != nil {
+ return *x.GasResistance
+ }
+ return 0
+}
+
+func (x *EnvironmentMetrics) GetVoltage() float32 {
+ if x != nil && x.Voltage != nil {
+ return *x.Voltage
+ }
+ return 0
+}
+
+func (x *EnvironmentMetrics) GetCurrent() float32 {
+ if x != nil && x.Current != nil {
+ return *x.Current
+ }
+ return 0
+}
+
+func (x *EnvironmentMetrics) GetIaq() uint32 {
+ if x != nil && x.Iaq != nil {
+ return *x.Iaq
+ }
+ return 0
+}
+
+func (x *EnvironmentMetrics) GetDistance() float32 {
+ if x != nil && x.Distance != nil {
+ return *x.Distance
+ }
+ return 0
+}
+
+func (x *EnvironmentMetrics) GetLux() float32 {
+ if x != nil && x.Lux != nil {
+ return *x.Lux
+ }
+ return 0
+}
+
+func (x *EnvironmentMetrics) GetWhiteLux() float32 {
+ if x != nil && x.WhiteLux != nil {
+ return *x.WhiteLux
+ }
+ return 0
+}
+
+func (x *EnvironmentMetrics) GetIrLux() float32 {
+ if x != nil && x.IrLux != nil {
+ return *x.IrLux
+ }
+ return 0
+}
+
+func (x *EnvironmentMetrics) GetUvLux() float32 {
+ if x != nil && x.UvLux != nil {
+ return *x.UvLux
+ }
+ return 0
+}
+
+func (x *EnvironmentMetrics) GetWindDirection() uint32 {
+ if x != nil && x.WindDirection != nil {
+ return *x.WindDirection
+ }
+ return 0
+}
+
+func (x *EnvironmentMetrics) GetWindSpeed() float32 {
+ if x != nil && x.WindSpeed != nil {
+ return *x.WindSpeed
+ }
+ return 0
+}
+
+func (x *EnvironmentMetrics) GetWeight() float32 {
+ if x != nil && x.Weight != nil {
+ return *x.Weight
+ }
+ return 0
+}
+
+func (x *EnvironmentMetrics) GetWindGust() float32 {
+ if x != nil && x.WindGust != nil {
+ return *x.WindGust
+ }
+ return 0
+}
+
+func (x *EnvironmentMetrics) GetWindLull() float32 {
+ if x != nil && x.WindLull != nil {
+ return *x.WindLull
+ }
+ return 0
+}
+
+func (x *EnvironmentMetrics) GetRadiation() float32 {
+ if x != nil && x.Radiation != nil {
+ return *x.Radiation
+ }
+ return 0
+}
+
+func (x *EnvironmentMetrics) GetRainfall_1H() float32 {
+ if x != nil && x.Rainfall_1H != nil {
+ return *x.Rainfall_1H
+ }
+ return 0
+}
+
+func (x *EnvironmentMetrics) GetRainfall_24H() float32 {
+ if x != nil && x.Rainfall_24H != nil {
+ return *x.Rainfall_24H
+ }
+ return 0
+}
+
+func (x *EnvironmentMetrics) GetSoilMoisture() uint32 {
+ if x != nil && x.SoilMoisture != nil {
+ return *x.SoilMoisture
+ }
+ return 0
+}
+
+func (x *EnvironmentMetrics) GetSoilTemperature() float32 {
+ if x != nil && x.SoilTemperature != nil {
+ return *x.SoilTemperature
+ }
+ return 0
+}
+
+// Power Metrics (voltage / current / etc)
+type PowerMetrics struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Voltage (Ch1)
+ Ch1Voltage *float32 `protobuf:"fixed32,1,opt,name=ch1_voltage,json=ch1Voltage,proto3,oneof" json:"ch1Voltage,omitempty"`
+ // Current (Ch1)
+ Ch1Current *float32 `protobuf:"fixed32,2,opt,name=ch1_current,json=ch1Current,proto3,oneof" json:"ch1Current,omitempty"`
+ // Voltage (Ch2)
+ Ch2Voltage *float32 `protobuf:"fixed32,3,opt,name=ch2_voltage,json=ch2Voltage,proto3,oneof" json:"ch2Voltage,omitempty"`
+ // Current (Ch2)
+ Ch2Current *float32 `protobuf:"fixed32,4,opt,name=ch2_current,json=ch2Current,proto3,oneof" json:"ch2Current,omitempty"`
+ // Voltage (Ch3)
+ Ch3Voltage *float32 `protobuf:"fixed32,5,opt,name=ch3_voltage,json=ch3Voltage,proto3,oneof" json:"ch3Voltage,omitempty"`
+ // Current (Ch3)
+ Ch3Current *float32 `protobuf:"fixed32,6,opt,name=ch3_current,json=ch3Current,proto3,oneof" json:"ch3Current,omitempty"`
+ // Voltage (Ch4)
+ Ch4Voltage *float32 `protobuf:"fixed32,7,opt,name=ch4_voltage,json=ch4Voltage,proto3,oneof" json:"ch4Voltage,omitempty"`
+ // Current (Ch4)
+ Ch4Current *float32 `protobuf:"fixed32,8,opt,name=ch4_current,json=ch4Current,proto3,oneof" json:"ch4Current,omitempty"`
+ // Voltage (Ch5)
+ Ch5Voltage *float32 `protobuf:"fixed32,9,opt,name=ch5_voltage,json=ch5Voltage,proto3,oneof" json:"ch5Voltage,omitempty"`
+ // Current (Ch5)
+ Ch5Current *float32 `protobuf:"fixed32,10,opt,name=ch5_current,json=ch5Current,proto3,oneof" json:"ch5Current,omitempty"`
+ // Voltage (Ch6)
+ Ch6Voltage *float32 `protobuf:"fixed32,11,opt,name=ch6_voltage,json=ch6Voltage,proto3,oneof" json:"ch6Voltage,omitempty"`
+ // Current (Ch6)
+ Ch6Current *float32 `protobuf:"fixed32,12,opt,name=ch6_current,json=ch6Current,proto3,oneof" json:"ch6Current,omitempty"`
+ // Voltage (Ch7)
+ Ch7Voltage *float32 `protobuf:"fixed32,13,opt,name=ch7_voltage,json=ch7Voltage,proto3,oneof" json:"ch7Voltage,omitempty"`
+ // Current (Ch7)
+ Ch7Current *float32 `protobuf:"fixed32,14,opt,name=ch7_current,json=ch7Current,proto3,oneof" json:"ch7Current,omitempty"`
+ // Voltage (Ch8)
+ Ch8Voltage *float32 `protobuf:"fixed32,15,opt,name=ch8_voltage,json=ch8Voltage,proto3,oneof" json:"ch8Voltage,omitempty"`
+ // Current (Ch8)
+ Ch8Current *float32 `protobuf:"fixed32,16,opt,name=ch8_current,json=ch8Current,proto3,oneof" json:"ch8Current,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *PowerMetrics) Reset() {
+ *x = PowerMetrics{}
+ mi := &file_meshtastic_telemetry_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *PowerMetrics) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PowerMetrics) ProtoMessage() {}
+
+func (x *PowerMetrics) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_telemetry_proto_msgTypes[2]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use PowerMetrics.ProtoReflect.Descriptor instead.
+func (*PowerMetrics) Descriptor() ([]byte, []int) {
+ return file_meshtastic_telemetry_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *PowerMetrics) GetCh1Voltage() float32 {
+ if x != nil && x.Ch1Voltage != nil {
+ return *x.Ch1Voltage
+ }
+ return 0
+}
+
+func (x *PowerMetrics) GetCh1Current() float32 {
+ if x != nil && x.Ch1Current != nil {
+ return *x.Ch1Current
+ }
+ return 0
+}
+
+func (x *PowerMetrics) GetCh2Voltage() float32 {
+ if x != nil && x.Ch2Voltage != nil {
+ return *x.Ch2Voltage
+ }
+ return 0
+}
+
+func (x *PowerMetrics) GetCh2Current() float32 {
+ if x != nil && x.Ch2Current != nil {
+ return *x.Ch2Current
+ }
+ return 0
+}
+
+func (x *PowerMetrics) GetCh3Voltage() float32 {
+ if x != nil && x.Ch3Voltage != nil {
+ return *x.Ch3Voltage
+ }
+ return 0
+}
+
+func (x *PowerMetrics) GetCh3Current() float32 {
+ if x != nil && x.Ch3Current != nil {
+ return *x.Ch3Current
+ }
+ return 0
+}
+
+func (x *PowerMetrics) GetCh4Voltage() float32 {
+ if x != nil && x.Ch4Voltage != nil {
+ return *x.Ch4Voltage
+ }
+ return 0
+}
+
+func (x *PowerMetrics) GetCh4Current() float32 {
+ if x != nil && x.Ch4Current != nil {
+ return *x.Ch4Current
+ }
+ return 0
+}
+
+func (x *PowerMetrics) GetCh5Voltage() float32 {
+ if x != nil && x.Ch5Voltage != nil {
+ return *x.Ch5Voltage
+ }
+ return 0
+}
+
+func (x *PowerMetrics) GetCh5Current() float32 {
+ if x != nil && x.Ch5Current != nil {
+ return *x.Ch5Current
+ }
+ return 0
+}
+
+func (x *PowerMetrics) GetCh6Voltage() float32 {
+ if x != nil && x.Ch6Voltage != nil {
+ return *x.Ch6Voltage
+ }
+ return 0
+}
+
+func (x *PowerMetrics) GetCh6Current() float32 {
+ if x != nil && x.Ch6Current != nil {
+ return *x.Ch6Current
+ }
+ return 0
+}
+
+func (x *PowerMetrics) GetCh7Voltage() float32 {
+ if x != nil && x.Ch7Voltage != nil {
+ return *x.Ch7Voltage
+ }
+ return 0
+}
+
+func (x *PowerMetrics) GetCh7Current() float32 {
+ if x != nil && x.Ch7Current != nil {
+ return *x.Ch7Current
+ }
+ return 0
+}
+
+func (x *PowerMetrics) GetCh8Voltage() float32 {
+ if x != nil && x.Ch8Voltage != nil {
+ return *x.Ch8Voltage
+ }
+ return 0
+}
+
+func (x *PowerMetrics) GetCh8Current() float32 {
+ if x != nil && x.Ch8Current != nil {
+ return *x.Ch8Current
+ }
+ return 0
+}
+
+// Air quality metrics
+type AirQualityMetrics struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Concentration Units Standard PM1.0 in ug/m3
+ Pm10Standard *uint32 `protobuf:"varint,1,opt,name=pm10_standard,json=pm10Standard,proto3,oneof" json:"pm10Standard,omitempty"`
+ // Concentration Units Standard PM2.5 in ug/m3
+ Pm25Standard *uint32 `protobuf:"varint,2,opt,name=pm25_standard,json=pm25Standard,proto3,oneof" json:"pm25Standard,omitempty"`
+ // Concentration Units Standard PM10.0 in ug/m3
+ Pm100Standard *uint32 `protobuf:"varint,3,opt,name=pm100_standard,json=pm100Standard,proto3,oneof" json:"pm100Standard,omitempty"`
+ // Concentration Units Environmental PM1.0 in ug/m3
+ Pm10Environmental *uint32 `protobuf:"varint,4,opt,name=pm10_environmental,json=pm10Environmental,proto3,oneof" json:"pm10Environmental,omitempty"`
+ // Concentration Units Environmental PM2.5 in ug/m3
+ Pm25Environmental *uint32 `protobuf:"varint,5,opt,name=pm25_environmental,json=pm25Environmental,proto3,oneof" json:"pm25Environmental,omitempty"`
+ // Concentration Units Environmental PM10.0 in ug/m3
+ Pm100Environmental *uint32 `protobuf:"varint,6,opt,name=pm100_environmental,json=pm100Environmental,proto3,oneof" json:"pm100Environmental,omitempty"`
+ // 0.3um Particle Count in #/0.1l
+ Particles_03Um *uint32 `protobuf:"varint,7,opt,name=particles_03um,json=particles03um,proto3,oneof" json:"particles03um,omitempty"`
+ // 0.5um Particle Count in #/0.1l
+ Particles_05Um *uint32 `protobuf:"varint,8,opt,name=particles_05um,json=particles05um,proto3,oneof" json:"particles05um,omitempty"`
+ // 1.0um Particle Count in #/0.1l
+ Particles_10Um *uint32 `protobuf:"varint,9,opt,name=particles_10um,json=particles10um,proto3,oneof" json:"particles10um,omitempty"`
+ // 2.5um Particle Count in #/0.1l
+ Particles_25Um *uint32 `protobuf:"varint,10,opt,name=particles_25um,json=particles25um,proto3,oneof" json:"particles25um,omitempty"`
+ // 5.0um Particle Count in #/0.1l
+ Particles_50Um *uint32 `protobuf:"varint,11,opt,name=particles_50um,json=particles50um,proto3,oneof" json:"particles50um,omitempty"`
+ // 10.0um Particle Count in #/0.1l
+ Particles_100Um *uint32 `protobuf:"varint,12,opt,name=particles_100um,json=particles100um,proto3,oneof" json:"particles100um,omitempty"`
+ // CO2 concentration in ppm
+ Co2 *uint32 `protobuf:"varint,13,opt,name=co2,proto3,oneof" json:"co2,omitempty"`
+ // CO2 sensor temperature in degC
+ Co2Temperature *float32 `protobuf:"fixed32,14,opt,name=co2_temperature,json=co2Temperature,proto3,oneof" json:"co2Temperature,omitempty"`
+ // CO2 sensor relative humidity in %
+ Co2Humidity *float32 `protobuf:"fixed32,15,opt,name=co2_humidity,json=co2Humidity,proto3,oneof" json:"co2Humidity,omitempty"`
+ // Formaldehyde sensor formaldehyde concentration in ppb
+ FormFormaldehyde *float32 `protobuf:"fixed32,16,opt,name=form_formaldehyde,json=formFormaldehyde,proto3,oneof" json:"formFormaldehyde,omitempty"`
+ // Formaldehyde sensor relative humidity in %RH
+ FormHumidity *float32 `protobuf:"fixed32,17,opt,name=form_humidity,json=formHumidity,proto3,oneof" json:"formHumidity,omitempty"`
+ // Formaldehyde sensor temperature in degrees Celsius
+ FormTemperature *float32 `protobuf:"fixed32,18,opt,name=form_temperature,json=formTemperature,proto3,oneof" json:"formTemperature,omitempty"`
+ // Concentration Units Standard PM4.0 in ug/m3
+ Pm40Standard *uint32 `protobuf:"varint,19,opt,name=pm40_standard,json=pm40Standard,proto3,oneof" json:"pm40Standard,omitempty"`
+ // 4.0um Particle Count in #/0.1l
+ Particles_40Um *uint32 `protobuf:"varint,20,opt,name=particles_40um,json=particles40um,proto3,oneof" json:"particles40um,omitempty"`
+ // PM Sensor Temperature
+ PmTemperature *float32 `protobuf:"fixed32,21,opt,name=pm_temperature,json=pmTemperature,proto3,oneof" json:"pmTemperature,omitempty"`
+ // PM Sensor humidity
+ PmHumidity *float32 `protobuf:"fixed32,22,opt,name=pm_humidity,json=pmHumidity,proto3,oneof" json:"pmHumidity,omitempty"`
+ // PM Sensor VOC Index
+ PmVocIdx *float32 `protobuf:"fixed32,23,opt,name=pm_voc_idx,json=pmVocIdx,proto3,oneof" json:"pmVocIdx,omitempty"`
+ // PM Sensor NOx Index
+ PmNoxIdx *float32 `protobuf:"fixed32,24,opt,name=pm_nox_idx,json=pmNoxIdx,proto3,oneof" json:"pmNoxIdx,omitempty"`
+ // Typical Particle Size in um
+ ParticlesTps *float32 `protobuf:"fixed32,25,opt,name=particles_tps,json=particlesTps,proto3,oneof" json:"particlesTps,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *AirQualityMetrics) Reset() {
+ *x = AirQualityMetrics{}
+ mi := &file_meshtastic_telemetry_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *AirQualityMetrics) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AirQualityMetrics) ProtoMessage() {}
+
+func (x *AirQualityMetrics) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_telemetry_proto_msgTypes[3]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use AirQualityMetrics.ProtoReflect.Descriptor instead.
+func (*AirQualityMetrics) Descriptor() ([]byte, []int) {
+ return file_meshtastic_telemetry_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *AirQualityMetrics) GetPm10Standard() uint32 {
+ if x != nil && x.Pm10Standard != nil {
+ return *x.Pm10Standard
+ }
+ return 0
+}
+
+func (x *AirQualityMetrics) GetPm25Standard() uint32 {
+ if x != nil && x.Pm25Standard != nil {
+ return *x.Pm25Standard
+ }
+ return 0
+}
+
+func (x *AirQualityMetrics) GetPm100Standard() uint32 {
+ if x != nil && x.Pm100Standard != nil {
+ return *x.Pm100Standard
+ }
+ return 0
+}
+
+func (x *AirQualityMetrics) GetPm10Environmental() uint32 {
+ if x != nil && x.Pm10Environmental != nil {
+ return *x.Pm10Environmental
+ }
+ return 0
+}
+
+func (x *AirQualityMetrics) GetPm25Environmental() uint32 {
+ if x != nil && x.Pm25Environmental != nil {
+ return *x.Pm25Environmental
+ }
+ return 0
+}
+
+func (x *AirQualityMetrics) GetPm100Environmental() uint32 {
+ if x != nil && x.Pm100Environmental != nil {
+ return *x.Pm100Environmental
+ }
+ return 0
+}
+
+func (x *AirQualityMetrics) GetParticles_03Um() uint32 {
+ if x != nil && x.Particles_03Um != nil {
+ return *x.Particles_03Um
+ }
+ return 0
+}
+
+func (x *AirQualityMetrics) GetParticles_05Um() uint32 {
+ if x != nil && x.Particles_05Um != nil {
+ return *x.Particles_05Um
+ }
+ return 0
+}
+
+func (x *AirQualityMetrics) GetParticles_10Um() uint32 {
+ if x != nil && x.Particles_10Um != nil {
+ return *x.Particles_10Um
+ }
+ return 0
+}
+
+func (x *AirQualityMetrics) GetParticles_25Um() uint32 {
+ if x != nil && x.Particles_25Um != nil {
+ return *x.Particles_25Um
+ }
+ return 0
+}
+
+func (x *AirQualityMetrics) GetParticles_50Um() uint32 {
+ if x != nil && x.Particles_50Um != nil {
+ return *x.Particles_50Um
+ }
+ return 0
+}
+
+func (x *AirQualityMetrics) GetParticles_100Um() uint32 {
+ if x != nil && x.Particles_100Um != nil {
+ return *x.Particles_100Um
+ }
+ return 0
+}
+
+func (x *AirQualityMetrics) GetCo2() uint32 {
+ if x != nil && x.Co2 != nil {
+ return *x.Co2
+ }
+ return 0
+}
+
+func (x *AirQualityMetrics) GetCo2Temperature() float32 {
+ if x != nil && x.Co2Temperature != nil {
+ return *x.Co2Temperature
+ }
+ return 0
+}
+
+func (x *AirQualityMetrics) GetCo2Humidity() float32 {
+ if x != nil && x.Co2Humidity != nil {
+ return *x.Co2Humidity
+ }
+ return 0
+}
+
+func (x *AirQualityMetrics) GetFormFormaldehyde() float32 {
+ if x != nil && x.FormFormaldehyde != nil {
+ return *x.FormFormaldehyde
+ }
+ return 0
+}
+
+func (x *AirQualityMetrics) GetFormHumidity() float32 {
+ if x != nil && x.FormHumidity != nil {
+ return *x.FormHumidity
+ }
+ return 0
+}
+
+func (x *AirQualityMetrics) GetFormTemperature() float32 {
+ if x != nil && x.FormTemperature != nil {
+ return *x.FormTemperature
+ }
+ return 0
+}
+
+func (x *AirQualityMetrics) GetPm40Standard() uint32 {
+ if x != nil && x.Pm40Standard != nil {
+ return *x.Pm40Standard
+ }
+ return 0
+}
+
+func (x *AirQualityMetrics) GetParticles_40Um() uint32 {
+ if x != nil && x.Particles_40Um != nil {
+ return *x.Particles_40Um
+ }
+ return 0
+}
+
+func (x *AirQualityMetrics) GetPmTemperature() float32 {
+ if x != nil && x.PmTemperature != nil {
+ return *x.PmTemperature
+ }
+ return 0
+}
+
+func (x *AirQualityMetrics) GetPmHumidity() float32 {
+ if x != nil && x.PmHumidity != nil {
+ return *x.PmHumidity
+ }
+ return 0
+}
+
+func (x *AirQualityMetrics) GetPmVocIdx() float32 {
+ if x != nil && x.PmVocIdx != nil {
+ return *x.PmVocIdx
+ }
+ return 0
+}
+
+func (x *AirQualityMetrics) GetPmNoxIdx() float32 {
+ if x != nil && x.PmNoxIdx != nil {
+ return *x.PmNoxIdx
+ }
+ return 0
+}
+
+func (x *AirQualityMetrics) GetParticlesTps() float32 {
+ if x != nil && x.ParticlesTps != nil {
+ return *x.ParticlesTps
+ }
+ return 0
+}
+
+// Local device mesh statistics
+type LocalStats struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // How long the device has been running since the last reboot (in seconds)
+ UptimeSeconds uint32 `protobuf:"varint,1,opt,name=uptime_seconds,json=uptimeSeconds,proto3" json:"uptimeSeconds,omitempty"`
+ // Utilization for the current channel, including well formed TX, RX and malformed RX (aka noise).
+ ChannelUtilization float32 `protobuf:"fixed32,2,opt,name=channel_utilization,json=channelUtilization,proto3" json:"channelUtilization,omitempty"`
+ // Percent of airtime for transmission used within the last hour.
+ AirUtilTx float32 `protobuf:"fixed32,3,opt,name=air_util_tx,json=airUtilTx,proto3" json:"airUtilTx,omitempty"`
+ // Number of packets sent
+ NumPacketsTx uint32 `protobuf:"varint,4,opt,name=num_packets_tx,json=numPacketsTx,proto3" json:"numPacketsTx,omitempty"`
+ // Number of packets received (both good and bad)
+ NumPacketsRx uint32 `protobuf:"varint,5,opt,name=num_packets_rx,json=numPacketsRx,proto3" json:"numPacketsRx,omitempty"`
+ // Number of packets received that are malformed or violate the protocol
+ NumPacketsRxBad uint32 `protobuf:"varint,6,opt,name=num_packets_rx_bad,json=numPacketsRxBad,proto3" json:"numPacketsRxBad,omitempty"`
+ // Number of nodes online (in the past 2 hours)
+ NumOnlineNodes uint32 `protobuf:"varint,7,opt,name=num_online_nodes,json=numOnlineNodes,proto3" json:"numOnlineNodes,omitempty"`
+ // Number of nodes total
+ NumTotalNodes uint32 `protobuf:"varint,8,opt,name=num_total_nodes,json=numTotalNodes,proto3" json:"numTotalNodes,omitempty"`
+ // 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.
+ NumRxDupe uint32 `protobuf:"varint,9,opt,name=num_rx_dupe,json=numRxDupe,proto3" json:"numRxDupe,omitempty"`
+ // Number of packets we transmitted that were a relay for others (not originating from ourselves).
+ NumTxRelay uint32 `protobuf:"varint,10,opt,name=num_tx_relay,json=numTxRelay,proto3" json:"numTxRelay,omitempty"`
+ // 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.
+ NumTxRelayCanceled uint32 `protobuf:"varint,11,opt,name=num_tx_relay_canceled,json=numTxRelayCanceled,proto3" json:"numTxRelayCanceled,omitempty"`
+ // Number of bytes used in the heap
+ HeapTotalBytes uint32 `protobuf:"varint,12,opt,name=heap_total_bytes,json=heapTotalBytes,proto3" json:"heapTotalBytes,omitempty"`
+ // Number of bytes free in the heap
+ HeapFreeBytes uint32 `protobuf:"varint,13,opt,name=heap_free_bytes,json=heapFreeBytes,proto3" json:"heapFreeBytes,omitempty"`
+ // Number of packets that were dropped because the transmit queue was full.
+ NumTxDropped uint32 `protobuf:"varint,14,opt,name=num_tx_dropped,json=numTxDropped,proto3" json:"numTxDropped,omitempty"`
+ // Noise floor value measured in dBm
+ NoiseFloor int32 `protobuf:"varint,15,opt,name=noise_floor,json=noiseFloor,proto3" json:"noiseFloor,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *LocalStats) Reset() {
+ *x = LocalStats{}
+ mi := &file_meshtastic_telemetry_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *LocalStats) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*LocalStats) ProtoMessage() {}
+
+func (x *LocalStats) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_telemetry_proto_msgTypes[4]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use LocalStats.ProtoReflect.Descriptor instead.
+func (*LocalStats) Descriptor() ([]byte, []int) {
+ return file_meshtastic_telemetry_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *LocalStats) GetUptimeSeconds() uint32 {
+ if x != nil {
+ return x.UptimeSeconds
+ }
+ return 0
+}
+
+func (x *LocalStats) GetChannelUtilization() float32 {
+ if x != nil {
+ return x.ChannelUtilization
+ }
+ return 0
+}
+
+func (x *LocalStats) GetAirUtilTx() float32 {
+ if x != nil {
+ return x.AirUtilTx
+ }
+ return 0
+}
+
+func (x *LocalStats) GetNumPacketsTx() uint32 {
+ if x != nil {
+ return x.NumPacketsTx
+ }
+ return 0
+}
+
+func (x *LocalStats) GetNumPacketsRx() uint32 {
+ if x != nil {
+ return x.NumPacketsRx
+ }
+ return 0
+}
+
+func (x *LocalStats) GetNumPacketsRxBad() uint32 {
+ if x != nil {
+ return x.NumPacketsRxBad
+ }
+ return 0
+}
+
+func (x *LocalStats) GetNumOnlineNodes() uint32 {
+ if x != nil {
+ return x.NumOnlineNodes
+ }
+ return 0
+}
+
+func (x *LocalStats) GetNumTotalNodes() uint32 {
+ if x != nil {
+ return x.NumTotalNodes
+ }
+ return 0
+}
+
+func (x *LocalStats) GetNumRxDupe() uint32 {
+ if x != nil {
+ return x.NumRxDupe
+ }
+ return 0
+}
+
+func (x *LocalStats) GetNumTxRelay() uint32 {
+ if x != nil {
+ return x.NumTxRelay
+ }
+ return 0
+}
+
+func (x *LocalStats) GetNumTxRelayCanceled() uint32 {
+ if x != nil {
+ return x.NumTxRelayCanceled
+ }
+ return 0
+}
+
+func (x *LocalStats) GetHeapTotalBytes() uint32 {
+ if x != nil {
+ return x.HeapTotalBytes
+ }
+ return 0
+}
+
+func (x *LocalStats) GetHeapFreeBytes() uint32 {
+ if x != nil {
+ return x.HeapFreeBytes
+ }
+ return 0
+}
+
+func (x *LocalStats) GetNumTxDropped() uint32 {
+ if x != nil {
+ return x.NumTxDropped
+ }
+ return 0
+}
+
+func (x *LocalStats) GetNoiseFloor() int32 {
+ if x != nil {
+ return x.NoiseFloor
+ }
+ return 0
+}
+
+// Traffic management statistics for mesh network optimization
+type TrafficManagementStats struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Total number of packets inspected by traffic management
+ PacketsInspected uint32 `protobuf:"varint,1,opt,name=packets_inspected,json=packetsInspected,proto3" json:"packetsInspected,omitempty"`
+ // Number of position packets dropped due to deduplication
+ PositionDedupDrops uint32 `protobuf:"varint,2,opt,name=position_dedup_drops,json=positionDedupDrops,proto3" json:"positionDedupDrops,omitempty"`
+ // Number of NodeInfo requests answered from cache
+ NodeinfoCacheHits uint32 `protobuf:"varint,3,opt,name=nodeinfo_cache_hits,json=nodeinfoCacheHits,proto3" json:"nodeinfoCacheHits,omitempty"`
+ // Number of packets dropped due to rate limiting
+ RateLimitDrops uint32 `protobuf:"varint,4,opt,name=rate_limit_drops,json=rateLimitDrops,proto3" json:"rateLimitDrops,omitempty"`
+ // Number of unknown/undecryptable packets dropped
+ UnknownPacketDrops uint32 `protobuf:"varint,5,opt,name=unknown_packet_drops,json=unknownPacketDrops,proto3" json:"unknownPacketDrops,omitempty"`
+ // Number of packets with hop_limit exhausted for local-only broadcast
+ HopExhaustedPackets uint32 `protobuf:"varint,6,opt,name=hop_exhausted_packets,json=hopExhaustedPackets,proto3" json:"hopExhaustedPackets,omitempty"`
+ // Number of times router hop preservation was applied
+ RouterHopsPreserved uint32 `protobuf:"varint,7,opt,name=router_hops_preserved,json=routerHopsPreserved,proto3" json:"routerHopsPreserved,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *TrafficManagementStats) Reset() {
+ *x = TrafficManagementStats{}
+ mi := &file_meshtastic_telemetry_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *TrafficManagementStats) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TrafficManagementStats) ProtoMessage() {}
+
+func (x *TrafficManagementStats) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_telemetry_proto_msgTypes[5]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use TrafficManagementStats.ProtoReflect.Descriptor instead.
+func (*TrafficManagementStats) Descriptor() ([]byte, []int) {
+ return file_meshtastic_telemetry_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *TrafficManagementStats) GetPacketsInspected() uint32 {
+ if x != nil {
+ return x.PacketsInspected
+ }
+ return 0
+}
+
+func (x *TrafficManagementStats) GetPositionDedupDrops() uint32 {
+ if x != nil {
+ return x.PositionDedupDrops
+ }
+ return 0
+}
+
+func (x *TrafficManagementStats) GetNodeinfoCacheHits() uint32 {
+ if x != nil {
+ return x.NodeinfoCacheHits
+ }
+ return 0
+}
+
+func (x *TrafficManagementStats) GetRateLimitDrops() uint32 {
+ if x != nil {
+ return x.RateLimitDrops
+ }
+ return 0
+}
+
+func (x *TrafficManagementStats) GetUnknownPacketDrops() uint32 {
+ if x != nil {
+ return x.UnknownPacketDrops
+ }
+ return 0
+}
+
+func (x *TrafficManagementStats) GetHopExhaustedPackets() uint32 {
+ if x != nil {
+ return x.HopExhaustedPackets
+ }
+ return 0
+}
+
+func (x *TrafficManagementStats) GetRouterHopsPreserved() uint32 {
+ if x != nil {
+ return x.RouterHopsPreserved
+ }
+ return 0
+}
+
+// Health telemetry metrics
+type HealthMetrics struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Heart rate (beats per minute)
+ HeartBpm *uint32 `protobuf:"varint,1,opt,name=heart_bpm,json=heartBpm,proto3,oneof" json:"heartBpm,omitempty"`
+ // SpO2 (blood oxygen saturation) level
+ SpO2 *uint32 `protobuf:"varint,2,opt,name=spO2,proto3,oneof" json:"spO2,omitempty"`
+ // Body temperature in degrees Celsius
+ Temperature *float32 `protobuf:"fixed32,3,opt,name=temperature,proto3,oneof" json:"temperature,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *HealthMetrics) Reset() {
+ *x = HealthMetrics{}
+ mi := &file_meshtastic_telemetry_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *HealthMetrics) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HealthMetrics) ProtoMessage() {}
+
+func (x *HealthMetrics) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_telemetry_proto_msgTypes[6]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use HealthMetrics.ProtoReflect.Descriptor instead.
+func (*HealthMetrics) Descriptor() ([]byte, []int) {
+ return file_meshtastic_telemetry_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *HealthMetrics) GetHeartBpm() uint32 {
+ if x != nil && x.HeartBpm != nil {
+ return *x.HeartBpm
+ }
+ return 0
+}
+
+func (x *HealthMetrics) GetSpO2() uint32 {
+ if x != nil && x.SpO2 != nil {
+ return *x.SpO2
+ }
+ return 0
+}
+
+func (x *HealthMetrics) GetTemperature() float32 {
+ if x != nil && x.Temperature != nil {
+ return *x.Temperature
+ }
+ return 0
+}
+
+// Linux host metrics
+type HostMetrics struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Host system uptime
+ UptimeSeconds uint32 `protobuf:"varint,1,opt,name=uptime_seconds,json=uptimeSeconds,proto3" json:"uptimeSeconds,omitempty"`
+ // Host system free memory
+ FreememBytes uint64 `protobuf:"varint,2,opt,name=freemem_bytes,json=freememBytes,proto3" json:"freememBytes,omitempty"`
+ // Host system disk space free for /
+ Diskfree1Bytes uint64 `protobuf:"varint,3,opt,name=diskfree1_bytes,json=diskfree1Bytes,proto3" json:"diskfree1Bytes,omitempty"`
+ // Secondary system disk space free
+ Diskfree2Bytes *uint64 `protobuf:"varint,4,opt,name=diskfree2_bytes,json=diskfree2Bytes,proto3,oneof" json:"diskfree2Bytes,omitempty"`
+ // Tertiary disk space free
+ Diskfree3Bytes *uint64 `protobuf:"varint,5,opt,name=diskfree3_bytes,json=diskfree3Bytes,proto3,oneof" json:"diskfree3Bytes,omitempty"`
+ // Host system one minute load in 1/100ths
+ Load1 uint32 `protobuf:"varint,6,opt,name=load1,proto3" json:"load1,omitempty"`
+ // Host system five minute load in 1/100ths
+ Load5 uint32 `protobuf:"varint,7,opt,name=load5,proto3" json:"load5,omitempty"`
+ // Host system fifteen minute load in 1/100ths
+ Load15 uint32 `protobuf:"varint,8,opt,name=load15,proto3" json:"load15,omitempty"`
+ // Optional User-provided string for arbitrary host system information
+ // that doesn't make sense as a dedicated entry.
+ UserString *string `protobuf:"bytes,9,opt,name=user_string,json=userString,proto3,oneof" json:"userString,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *HostMetrics) Reset() {
+ *x = HostMetrics{}
+ mi := &file_meshtastic_telemetry_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *HostMetrics) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*HostMetrics) ProtoMessage() {}
+
+func (x *HostMetrics) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_telemetry_proto_msgTypes[7]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use HostMetrics.ProtoReflect.Descriptor instead.
+func (*HostMetrics) Descriptor() ([]byte, []int) {
+ return file_meshtastic_telemetry_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *HostMetrics) GetUptimeSeconds() uint32 {
+ if x != nil {
+ return x.UptimeSeconds
+ }
+ return 0
+}
+
+func (x *HostMetrics) GetFreememBytes() uint64 {
+ if x != nil {
+ return x.FreememBytes
+ }
+ return 0
+}
+
+func (x *HostMetrics) GetDiskfree1Bytes() uint64 {
+ if x != nil {
+ return x.Diskfree1Bytes
+ }
+ return 0
+}
+
+func (x *HostMetrics) GetDiskfree2Bytes() uint64 {
+ if x != nil && x.Diskfree2Bytes != nil {
+ return *x.Diskfree2Bytes
+ }
+ return 0
+}
+
+func (x *HostMetrics) GetDiskfree3Bytes() uint64 {
+ if x != nil && x.Diskfree3Bytes != nil {
+ return *x.Diskfree3Bytes
+ }
+ return 0
+}
+
+func (x *HostMetrics) GetLoad1() uint32 {
+ if x != nil {
+ return x.Load1
+ }
+ return 0
+}
+
+func (x *HostMetrics) GetLoad5() uint32 {
+ if x != nil {
+ return x.Load5
+ }
+ return 0
+}
+
+func (x *HostMetrics) GetLoad15() uint32 {
+ if x != nil {
+ return x.Load15
+ }
+ return 0
+}
+
+func (x *HostMetrics) GetUserString() string {
+ if x != nil && x.UserString != nil {
+ return *x.UserString
+ }
+ return ""
+}
+
+// Types of Measurements the telemetry module is equipped to handle
+type Telemetry struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Seconds since 1970 - or 0 for unknown/unset
+ Time uint32 `protobuf:"fixed32,1,opt,name=time,proto3" json:"time,omitempty"`
+ // Types that are valid to be assigned to Variant:
+ //
+ // *Telemetry_DeviceMetrics
+ // *Telemetry_EnvironmentMetrics
+ // *Telemetry_AirQualityMetrics
+ // *Telemetry_PowerMetrics
+ // *Telemetry_LocalStats
+ // *Telemetry_HealthMetrics
+ // *Telemetry_HostMetrics
+ // *Telemetry_TrafficManagementStats
+ Variant isTelemetry_Variant `protobuf_oneof:"variant"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Telemetry) Reset() {
+ *x = Telemetry{}
+ mi := &file_meshtastic_telemetry_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Telemetry) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Telemetry) ProtoMessage() {}
+
+func (x *Telemetry) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_telemetry_proto_msgTypes[8]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Telemetry.ProtoReflect.Descriptor instead.
+func (*Telemetry) Descriptor() ([]byte, []int) {
+ return file_meshtastic_telemetry_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *Telemetry) GetTime() uint32 {
+ if x != nil {
+ return x.Time
+ }
+ return 0
+}
+
+func (x *Telemetry) GetVariant() isTelemetry_Variant {
+ if x != nil {
+ return x.Variant
+ }
+ return nil
+}
+
+func (x *Telemetry) GetDeviceMetrics() *DeviceMetrics {
+ if x != nil {
+ if x, ok := x.Variant.(*Telemetry_DeviceMetrics); ok {
+ return x.DeviceMetrics
+ }
+ }
+ return nil
+}
+
+func (x *Telemetry) GetEnvironmentMetrics() *EnvironmentMetrics {
+ if x != nil {
+ if x, ok := x.Variant.(*Telemetry_EnvironmentMetrics); ok {
+ return x.EnvironmentMetrics
+ }
+ }
+ return nil
+}
+
+func (x *Telemetry) GetAirQualityMetrics() *AirQualityMetrics {
+ if x != nil {
+ if x, ok := x.Variant.(*Telemetry_AirQualityMetrics); ok {
+ return x.AirQualityMetrics
+ }
+ }
+ return nil
+}
+
+func (x *Telemetry) GetPowerMetrics() *PowerMetrics {
+ if x != nil {
+ if x, ok := x.Variant.(*Telemetry_PowerMetrics); ok {
+ return x.PowerMetrics
+ }
+ }
+ return nil
+}
+
+func (x *Telemetry) GetLocalStats() *LocalStats {
+ if x != nil {
+ if x, ok := x.Variant.(*Telemetry_LocalStats); ok {
+ return x.LocalStats
+ }
+ }
+ return nil
+}
+
+func (x *Telemetry) GetHealthMetrics() *HealthMetrics {
+ if x != nil {
+ if x, ok := x.Variant.(*Telemetry_HealthMetrics); ok {
+ return x.HealthMetrics
+ }
+ }
+ return nil
+}
+
+func (x *Telemetry) GetHostMetrics() *HostMetrics {
+ if x != nil {
+ if x, ok := x.Variant.(*Telemetry_HostMetrics); ok {
+ return x.HostMetrics
+ }
+ }
+ return nil
+}
+
+func (x *Telemetry) GetTrafficManagementStats() *TrafficManagementStats {
+ if x != nil {
+ if x, ok := x.Variant.(*Telemetry_TrafficManagementStats); ok {
+ return x.TrafficManagementStats
+ }
+ }
+ return nil
+}
+
+type isTelemetry_Variant interface {
+ isTelemetry_Variant()
+}
+
+type Telemetry_DeviceMetrics struct {
+ // Key native device metrics such as battery level
+ DeviceMetrics *DeviceMetrics `protobuf:"bytes,2,opt,name=device_metrics,json=deviceMetrics,proto3,oneof"`
+}
+
+type Telemetry_EnvironmentMetrics struct {
+ // Weather station or other environmental metrics
+ EnvironmentMetrics *EnvironmentMetrics `protobuf:"bytes,3,opt,name=environment_metrics,json=environmentMetrics,proto3,oneof"`
+}
+
+type Telemetry_AirQualityMetrics struct {
+ // Air quality metrics
+ AirQualityMetrics *AirQualityMetrics `protobuf:"bytes,4,opt,name=air_quality_metrics,json=airQualityMetrics,proto3,oneof"`
+}
+
+type Telemetry_PowerMetrics struct {
+ // Power Metrics
+ PowerMetrics *PowerMetrics `protobuf:"bytes,5,opt,name=power_metrics,json=powerMetrics,proto3,oneof"`
+}
+
+type Telemetry_LocalStats struct {
+ // Local device mesh statistics
+ LocalStats *LocalStats `protobuf:"bytes,6,opt,name=local_stats,json=localStats,proto3,oneof"`
+}
+
+type Telemetry_HealthMetrics struct {
+ // Health telemetry metrics
+ HealthMetrics *HealthMetrics `protobuf:"bytes,7,opt,name=health_metrics,json=healthMetrics,proto3,oneof"`
+}
+
+type Telemetry_HostMetrics struct {
+ // Linux host metrics
+ HostMetrics *HostMetrics `protobuf:"bytes,8,opt,name=host_metrics,json=hostMetrics,proto3,oneof"`
+}
+
+type Telemetry_TrafficManagementStats struct {
+ // Traffic management statistics
+ TrafficManagementStats *TrafficManagementStats `protobuf:"bytes,9,opt,name=traffic_management_stats,json=trafficManagementStats,proto3,oneof"`
+}
+
+func (*Telemetry_DeviceMetrics) isTelemetry_Variant() {}
+
+func (*Telemetry_EnvironmentMetrics) isTelemetry_Variant() {}
+
+func (*Telemetry_AirQualityMetrics) isTelemetry_Variant() {}
+
+func (*Telemetry_PowerMetrics) isTelemetry_Variant() {}
+
+func (*Telemetry_LocalStats) isTelemetry_Variant() {}
+
+func (*Telemetry_HealthMetrics) isTelemetry_Variant() {}
+
+func (*Telemetry_HostMetrics) isTelemetry_Variant() {}
+
+func (*Telemetry_TrafficManagementStats) isTelemetry_Variant() {}
+
+// NAU7802 Telemetry configuration, for saving to flash
+type Nau7802Config struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // The offset setting for the NAU7802
+ ZeroOffset int32 `protobuf:"varint,1,opt,name=zeroOffset,proto3" json:"zeroOffset,omitempty"`
+ // The calibration factor for the NAU7802
+ CalibrationFactor float32 `protobuf:"fixed32,2,opt,name=calibrationFactor,proto3" json:"calibrationFactor,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *Nau7802Config) Reset() {
+ *x = Nau7802Config{}
+ mi := &file_meshtastic_telemetry_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *Nau7802Config) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Nau7802Config) ProtoMessage() {}
+
+func (x *Nau7802Config) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_telemetry_proto_msgTypes[9]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use Nau7802Config.ProtoReflect.Descriptor instead.
+func (*Nau7802Config) Descriptor() ([]byte, []int) {
+ return file_meshtastic_telemetry_proto_rawDescGZIP(), []int{9}
+}
+
+func (x *Nau7802Config) GetZeroOffset() int32 {
+ if x != nil {
+ return x.ZeroOffset
+ }
+ return 0
+}
+
+func (x *Nau7802Config) GetCalibrationFactor() float32 {
+ if x != nil {
+ return x.CalibrationFactor
+ }
+ return 0
+}
+
+// SEN5X State, for saving to flash
+type SEN5XState struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ // Last cleaning time for SEN5X
+ LastCleaningTime uint32 `protobuf:"varint,1,opt,name=last_cleaning_time,json=lastCleaningTime,proto3" json:"lastCleaningTime,omitempty"`
+ // Last cleaning time for SEN5X - valid flag
+ LastCleaningValid bool `protobuf:"varint,2,opt,name=last_cleaning_valid,json=lastCleaningValid,proto3" json:"lastCleaningValid,omitempty"`
+ // Config flag for one-shot mode (see admin.proto)
+ OneShotMode bool `protobuf:"varint,3,opt,name=one_shot_mode,json=oneShotMode,proto3" json:"oneShotMode,omitempty"`
+ // Last VOC state time for SEN55
+ VocStateTime *uint32 `protobuf:"varint,4,opt,name=voc_state_time,json=vocStateTime,proto3,oneof" json:"vocStateTime,omitempty"`
+ // Last VOC state validity flag for SEN55
+ VocStateValid *bool `protobuf:"varint,5,opt,name=voc_state_valid,json=vocStateValid,proto3,oneof" json:"vocStateValid,omitempty"`
+ // VOC state array (8x uint8t) for SEN55
+ VocStateArray *uint64 `protobuf:"fixed64,6,opt,name=voc_state_array,json=vocStateArray,proto3,oneof" json:"vocStateArray,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *SEN5XState) Reset() {
+ *x = SEN5XState{}
+ mi := &file_meshtastic_telemetry_proto_msgTypes[10]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *SEN5XState) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SEN5XState) ProtoMessage() {}
+
+func (x *SEN5XState) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_telemetry_proto_msgTypes[10]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use SEN5XState.ProtoReflect.Descriptor instead.
+func (*SEN5XState) Descriptor() ([]byte, []int) {
+ return file_meshtastic_telemetry_proto_rawDescGZIP(), []int{10}
+}
+
+func (x *SEN5XState) GetLastCleaningTime() uint32 {
+ if x != nil {
+ return x.LastCleaningTime
+ }
+ return 0
+}
+
+func (x *SEN5XState) GetLastCleaningValid() bool {
+ if x != nil {
+ return x.LastCleaningValid
+ }
+ return false
+}
+
+func (x *SEN5XState) GetOneShotMode() bool {
+ if x != nil {
+ return x.OneShotMode
+ }
+ return false
+}
+
+func (x *SEN5XState) GetVocStateTime() uint32 {
+ if x != nil && x.VocStateTime != nil {
+ return *x.VocStateTime
+ }
+ return 0
+}
+
+func (x *SEN5XState) GetVocStateValid() bool {
+ if x != nil && x.VocStateValid != nil {
+ return *x.VocStateValid
+ }
+ return false
+}
+
+func (x *SEN5XState) GetVocStateArray() uint64 {
+ if x != nil && x.VocStateArray != nil {
+ return *x.VocStateArray
+ }
+ return 0
+}
+
+var File_meshtastic_telemetry_proto protoreflect.FileDescriptor
+
+const file_meshtastic_telemetry_proto_rawDesc = "" +
+ "\n" +
+ "\x1ameshtastic/telemetry.proto\x12\n" +
+ "meshtastic\"\xb8\x02\n" +
+ "\rDeviceMetrics\x12(\n" +
+ "\rbattery_level\x18\x01 \x01(\rH\x00R\fbatteryLevel\x88\x01\x01\x12\x1d\n" +
+ "\avoltage\x18\x02 \x01(\x02H\x01R\avoltage\x88\x01\x01\x124\n" +
+ "\x13channel_utilization\x18\x03 \x01(\x02H\x02R\x12channelUtilization\x88\x01\x01\x12#\n" +
+ "\vair_util_tx\x18\x04 \x01(\x02H\x03R\tairUtilTx\x88\x01\x01\x12*\n" +
+ "\x0euptime_seconds\x18\x05 \x01(\rH\x04R\ruptimeSeconds\x88\x01\x01B\x10\n" +
+ "\x0e_battery_levelB\n" +
+ "\n" +
+ "\b_voltageB\x16\n" +
+ "\x14_channel_utilizationB\x0e\n" +
+ "\f_air_util_txB\x11\n" +
+ "\x0f_uptime_seconds\"\xfb\b\n" +
+ "\x12EnvironmentMetrics\x12%\n" +
+ "\vtemperature\x18\x01 \x01(\x02H\x00R\vtemperature\x88\x01\x01\x120\n" +
+ "\x11relative_humidity\x18\x02 \x01(\x02H\x01R\x10relativeHumidity\x88\x01\x01\x124\n" +
+ "\x13barometric_pressure\x18\x03 \x01(\x02H\x02R\x12barometricPressure\x88\x01\x01\x12*\n" +
+ "\x0egas_resistance\x18\x04 \x01(\x02H\x03R\rgasResistance\x88\x01\x01\x12\x1d\n" +
+ "\avoltage\x18\x05 \x01(\x02H\x04R\avoltage\x88\x01\x01\x12\x1d\n" +
+ "\acurrent\x18\x06 \x01(\x02H\x05R\acurrent\x88\x01\x01\x12\x15\n" +
+ "\x03iaq\x18\a \x01(\rH\x06R\x03iaq\x88\x01\x01\x12\x1f\n" +
+ "\bdistance\x18\b \x01(\x02H\aR\bdistance\x88\x01\x01\x12\x15\n" +
+ "\x03lux\x18\t \x01(\x02H\bR\x03lux\x88\x01\x01\x12 \n" +
+ "\twhite_lux\x18\n" +
+ " \x01(\x02H\tR\bwhiteLux\x88\x01\x01\x12\x1a\n" +
+ "\x06ir_lux\x18\v \x01(\x02H\n" +
+ "R\x05irLux\x88\x01\x01\x12\x1a\n" +
+ "\x06uv_lux\x18\f \x01(\x02H\vR\x05uvLux\x88\x01\x01\x12*\n" +
+ "\x0ewind_direction\x18\r \x01(\rH\fR\rwindDirection\x88\x01\x01\x12\"\n" +
+ "\n" +
+ "wind_speed\x18\x0e \x01(\x02H\rR\twindSpeed\x88\x01\x01\x12\x1b\n" +
+ "\x06weight\x18\x0f \x01(\x02H\x0eR\x06weight\x88\x01\x01\x12 \n" +
+ "\twind_gust\x18\x10 \x01(\x02H\x0fR\bwindGust\x88\x01\x01\x12 \n" +
+ "\twind_lull\x18\x11 \x01(\x02H\x10R\bwindLull\x88\x01\x01\x12!\n" +
+ "\tradiation\x18\x12 \x01(\x02H\x11R\tradiation\x88\x01\x01\x12$\n" +
+ "\vrainfall_1h\x18\x13 \x01(\x02H\x12R\n" +
+ "rainfall1h\x88\x01\x01\x12&\n" +
+ "\frainfall_24h\x18\x14 \x01(\x02H\x13R\vrainfall24h\x88\x01\x01\x12(\n" +
+ "\rsoil_moisture\x18\x15 \x01(\rH\x14R\fsoilMoisture\x88\x01\x01\x12.\n" +
+ "\x10soil_temperature\x18\x16 \x01(\x02H\x15R\x0fsoilTemperature\x88\x01\x01B\x0e\n" +
+ "\f_temperatureB\x14\n" +
+ "\x12_relative_humidityB\x16\n" +
+ "\x14_barometric_pressureB\x11\n" +
+ "\x0f_gas_resistanceB\n" +
+ "\n" +
+ "\b_voltageB\n" +
+ "\n" +
+ "\b_currentB\x06\n" +
+ "\x04_iaqB\v\n" +
+ "\t_distanceB\x06\n" +
+ "\x04_luxB\f\n" +
+ "\n" +
+ "_white_luxB\t\n" +
+ "\a_ir_luxB\t\n" +
+ "\a_uv_luxB\x11\n" +
+ "\x0f_wind_directionB\r\n" +
+ "\v_wind_speedB\t\n" +
+ "\a_weightB\f\n" +
+ "\n" +
+ "_wind_gustB\f\n" +
+ "\n" +
+ "_wind_lullB\f\n" +
+ "\n" +
+ "_radiationB\x0e\n" +
+ "\f_rainfall_1hB\x0f\n" +
+ "\r_rainfall_24hB\x10\n" +
+ "\x0e_soil_moistureB\x13\n" +
+ "\x11_soil_temperature\"\xee\x06\n" +
+ "\fPowerMetrics\x12$\n" +
+ "\vch1_voltage\x18\x01 \x01(\x02H\x00R\n" +
+ "ch1Voltage\x88\x01\x01\x12$\n" +
+ "\vch1_current\x18\x02 \x01(\x02H\x01R\n" +
+ "ch1Current\x88\x01\x01\x12$\n" +
+ "\vch2_voltage\x18\x03 \x01(\x02H\x02R\n" +
+ "ch2Voltage\x88\x01\x01\x12$\n" +
+ "\vch2_current\x18\x04 \x01(\x02H\x03R\n" +
+ "ch2Current\x88\x01\x01\x12$\n" +
+ "\vch3_voltage\x18\x05 \x01(\x02H\x04R\n" +
+ "ch3Voltage\x88\x01\x01\x12$\n" +
+ "\vch3_current\x18\x06 \x01(\x02H\x05R\n" +
+ "ch3Current\x88\x01\x01\x12$\n" +
+ "\vch4_voltage\x18\a \x01(\x02H\x06R\n" +
+ "ch4Voltage\x88\x01\x01\x12$\n" +
+ "\vch4_current\x18\b \x01(\x02H\aR\n" +
+ "ch4Current\x88\x01\x01\x12$\n" +
+ "\vch5_voltage\x18\t \x01(\x02H\bR\n" +
+ "ch5Voltage\x88\x01\x01\x12$\n" +
+ "\vch5_current\x18\n" +
+ " \x01(\x02H\tR\n" +
+ "ch5Current\x88\x01\x01\x12$\n" +
+ "\vch6_voltage\x18\v \x01(\x02H\n" +
+ "R\n" +
+ "ch6Voltage\x88\x01\x01\x12$\n" +
+ "\vch6_current\x18\f \x01(\x02H\vR\n" +
+ "ch6Current\x88\x01\x01\x12$\n" +
+ "\vch7_voltage\x18\r \x01(\x02H\fR\n" +
+ "ch7Voltage\x88\x01\x01\x12$\n" +
+ "\vch7_current\x18\x0e \x01(\x02H\rR\n" +
+ "ch7Current\x88\x01\x01\x12$\n" +
+ "\vch8_voltage\x18\x0f \x01(\x02H\x0eR\n" +
+ "ch8Voltage\x88\x01\x01\x12$\n" +
+ "\vch8_current\x18\x10 \x01(\x02H\x0fR\n" +
+ "ch8Current\x88\x01\x01B\x0e\n" +
+ "\f_ch1_voltageB\x0e\n" +
+ "\f_ch1_currentB\x0e\n" +
+ "\f_ch2_voltageB\x0e\n" +
+ "\f_ch2_currentB\x0e\n" +
+ "\f_ch3_voltageB\x0e\n" +
+ "\f_ch3_currentB\x0e\n" +
+ "\f_ch4_voltageB\x0e\n" +
+ "\f_ch4_currentB\x0e\n" +
+ "\f_ch5_voltageB\x0e\n" +
+ "\f_ch5_currentB\x0e\n" +
+ "\f_ch6_voltageB\x0e\n" +
+ "\f_ch6_currentB\x0e\n" +
+ "\f_ch7_voltageB\x0e\n" +
+ "\f_ch7_currentB\x0e\n" +
+ "\f_ch8_voltageB\x0e\n" +
+ "\f_ch8_current\"\x9e\f\n" +
+ "\x11AirQualityMetrics\x12(\n" +
+ "\rpm10_standard\x18\x01 \x01(\rH\x00R\fpm10Standard\x88\x01\x01\x12(\n" +
+ "\rpm25_standard\x18\x02 \x01(\rH\x01R\fpm25Standard\x88\x01\x01\x12*\n" +
+ "\x0epm100_standard\x18\x03 \x01(\rH\x02R\rpm100Standard\x88\x01\x01\x122\n" +
+ "\x12pm10_environmental\x18\x04 \x01(\rH\x03R\x11pm10Environmental\x88\x01\x01\x122\n" +
+ "\x12pm25_environmental\x18\x05 \x01(\rH\x04R\x11pm25Environmental\x88\x01\x01\x124\n" +
+ "\x13pm100_environmental\x18\x06 \x01(\rH\x05R\x12pm100Environmental\x88\x01\x01\x12*\n" +
+ "\x0eparticles_03um\x18\a \x01(\rH\x06R\rparticles03um\x88\x01\x01\x12*\n" +
+ "\x0eparticles_05um\x18\b \x01(\rH\aR\rparticles05um\x88\x01\x01\x12*\n" +
+ "\x0eparticles_10um\x18\t \x01(\rH\bR\rparticles10um\x88\x01\x01\x12*\n" +
+ "\x0eparticles_25um\x18\n" +
+ " \x01(\rH\tR\rparticles25um\x88\x01\x01\x12*\n" +
+ "\x0eparticles_50um\x18\v \x01(\rH\n" +
+ "R\rparticles50um\x88\x01\x01\x12,\n" +
+ "\x0fparticles_100um\x18\f \x01(\rH\vR\x0eparticles100um\x88\x01\x01\x12\x15\n" +
+ "\x03co2\x18\r \x01(\rH\fR\x03co2\x88\x01\x01\x12,\n" +
+ "\x0fco2_temperature\x18\x0e \x01(\x02H\rR\x0eco2Temperature\x88\x01\x01\x12&\n" +
+ "\fco2_humidity\x18\x0f \x01(\x02H\x0eR\vco2Humidity\x88\x01\x01\x120\n" +
+ "\x11form_formaldehyde\x18\x10 \x01(\x02H\x0fR\x10formFormaldehyde\x88\x01\x01\x12(\n" +
+ "\rform_humidity\x18\x11 \x01(\x02H\x10R\fformHumidity\x88\x01\x01\x12.\n" +
+ "\x10form_temperature\x18\x12 \x01(\x02H\x11R\x0fformTemperature\x88\x01\x01\x12(\n" +
+ "\rpm40_standard\x18\x13 \x01(\rH\x12R\fpm40Standard\x88\x01\x01\x12*\n" +
+ "\x0eparticles_40um\x18\x14 \x01(\rH\x13R\rparticles40um\x88\x01\x01\x12*\n" +
+ "\x0epm_temperature\x18\x15 \x01(\x02H\x14R\rpmTemperature\x88\x01\x01\x12$\n" +
+ "\vpm_humidity\x18\x16 \x01(\x02H\x15R\n" +
+ "pmHumidity\x88\x01\x01\x12!\n" +
+ "\n" +
+ "pm_voc_idx\x18\x17 \x01(\x02H\x16R\bpmVocIdx\x88\x01\x01\x12!\n" +
+ "\n" +
+ "pm_nox_idx\x18\x18 \x01(\x02H\x17R\bpmNoxIdx\x88\x01\x01\x12(\n" +
+ "\rparticles_tps\x18\x19 \x01(\x02H\x18R\fparticlesTps\x88\x01\x01B\x10\n" +
+ "\x0e_pm10_standardB\x10\n" +
+ "\x0e_pm25_standardB\x11\n" +
+ "\x0f_pm100_standardB\x15\n" +
+ "\x13_pm10_environmentalB\x15\n" +
+ "\x13_pm25_environmentalB\x16\n" +
+ "\x14_pm100_environmentalB\x11\n" +
+ "\x0f_particles_03umB\x11\n" +
+ "\x0f_particles_05umB\x11\n" +
+ "\x0f_particles_10umB\x11\n" +
+ "\x0f_particles_25umB\x11\n" +
+ "\x0f_particles_50umB\x12\n" +
+ "\x10_particles_100umB\x06\n" +
+ "\x04_co2B\x12\n" +
+ "\x10_co2_temperatureB\x0f\n" +
+ "\r_co2_humidityB\x14\n" +
+ "\x12_form_formaldehydeB\x10\n" +
+ "\x0e_form_humidityB\x13\n" +
+ "\x11_form_temperatureB\x10\n" +
+ "\x0e_pm40_standardB\x11\n" +
+ "\x0f_particles_40umB\x11\n" +
+ "\x0f_pm_temperatureB\x0e\n" +
+ "\f_pm_humidityB\r\n" +
+ "\v_pm_voc_idxB\r\n" +
+ "\v_pm_nox_idxB\x10\n" +
+ "\x0e_particles_tps\"\xdd\x04\n" +
+ "\n" +
+ "LocalStats\x12%\n" +
+ "\x0euptime_seconds\x18\x01 \x01(\rR\ruptimeSeconds\x12/\n" +
+ "\x13channel_utilization\x18\x02 \x01(\x02R\x12channelUtilization\x12\x1e\n" +
+ "\vair_util_tx\x18\x03 \x01(\x02R\tairUtilTx\x12$\n" +
+ "\x0enum_packets_tx\x18\x04 \x01(\rR\fnumPacketsTx\x12$\n" +
+ "\x0enum_packets_rx\x18\x05 \x01(\rR\fnumPacketsRx\x12+\n" +
+ "\x12num_packets_rx_bad\x18\x06 \x01(\rR\x0fnumPacketsRxBad\x12(\n" +
+ "\x10num_online_nodes\x18\a \x01(\rR\x0enumOnlineNodes\x12&\n" +
+ "\x0fnum_total_nodes\x18\b \x01(\rR\rnumTotalNodes\x12\x1e\n" +
+ "\vnum_rx_dupe\x18\t \x01(\rR\tnumRxDupe\x12 \n" +
+ "\fnum_tx_relay\x18\n" +
+ " \x01(\rR\n" +
+ "numTxRelay\x121\n" +
+ "\x15num_tx_relay_canceled\x18\v \x01(\rR\x12numTxRelayCanceled\x12(\n" +
+ "\x10heap_total_bytes\x18\f \x01(\rR\x0eheapTotalBytes\x12&\n" +
+ "\x0fheap_free_bytes\x18\r \x01(\rR\rheapFreeBytes\x12$\n" +
+ "\x0enum_tx_dropped\x18\x0e \x01(\rR\fnumTxDropped\x12\x1f\n" +
+ "\vnoise_floor\x18\x0f \x01(\x05R\n" +
+ "noiseFloor\"\xeb\x02\n" +
+ "\x16TrafficManagementStats\x12+\n" +
+ "\x11packets_inspected\x18\x01 \x01(\rR\x10packetsInspected\x120\n" +
+ "\x14position_dedup_drops\x18\x02 \x01(\rR\x12positionDedupDrops\x12.\n" +
+ "\x13nodeinfo_cache_hits\x18\x03 \x01(\rR\x11nodeinfoCacheHits\x12(\n" +
+ "\x10rate_limit_drops\x18\x04 \x01(\rR\x0erateLimitDrops\x120\n" +
+ "\x14unknown_packet_drops\x18\x05 \x01(\rR\x12unknownPacketDrops\x122\n" +
+ "\x15hop_exhausted_packets\x18\x06 \x01(\rR\x13hopExhaustedPackets\x122\n" +
+ "\x15router_hops_preserved\x18\a \x01(\rR\x13routerHopsPreserved\"\x98\x01\n" +
+ "\rHealthMetrics\x12 \n" +
+ "\theart_bpm\x18\x01 \x01(\rH\x00R\bheartBpm\x88\x01\x01\x12\x17\n" +
+ "\x04spO2\x18\x02 \x01(\rH\x01R\x04spO2\x88\x01\x01\x12%\n" +
+ "\vtemperature\x18\x03 \x01(\x02H\x02R\vtemperature\x88\x01\x01B\f\n" +
+ "\n" +
+ "_heart_bpmB\a\n" +
+ "\x05_spO2B\x0e\n" +
+ "\f_temperature\"\x80\x03\n" +
+ "\vHostMetrics\x12%\n" +
+ "\x0euptime_seconds\x18\x01 \x01(\rR\ruptimeSeconds\x12#\n" +
+ "\rfreemem_bytes\x18\x02 \x01(\x04R\ffreememBytes\x12'\n" +
+ "\x0fdiskfree1_bytes\x18\x03 \x01(\x04R\x0ediskfree1Bytes\x12,\n" +
+ "\x0fdiskfree2_bytes\x18\x04 \x01(\x04H\x00R\x0ediskfree2Bytes\x88\x01\x01\x12,\n" +
+ "\x0fdiskfree3_bytes\x18\x05 \x01(\x04H\x01R\x0ediskfree3Bytes\x88\x01\x01\x12\x14\n" +
+ "\x05load1\x18\x06 \x01(\rR\x05load1\x12\x14\n" +
+ "\x05load5\x18\a \x01(\rR\x05load5\x12\x16\n" +
+ "\x06load15\x18\b \x01(\rR\x06load15\x12$\n" +
+ "\vuser_string\x18\t \x01(\tH\x02R\n" +
+ "userString\x88\x01\x01B\x12\n" +
+ "\x10_diskfree2_bytesB\x12\n" +
+ "\x10_diskfree3_bytesB\x0e\n" +
+ "\f_user_string\"\xf0\x04\n" +
+ "\tTelemetry\x12\x12\n" +
+ "\x04time\x18\x01 \x01(\aR\x04time\x12B\n" +
+ "\x0edevice_metrics\x18\x02 \x01(\v2\x19.meshtastic.DeviceMetricsH\x00R\rdeviceMetrics\x12Q\n" +
+ "\x13environment_metrics\x18\x03 \x01(\v2\x1e.meshtastic.EnvironmentMetricsH\x00R\x12environmentMetrics\x12O\n" +
+ "\x13air_quality_metrics\x18\x04 \x01(\v2\x1d.meshtastic.AirQualityMetricsH\x00R\x11airQualityMetrics\x12?\n" +
+ "\rpower_metrics\x18\x05 \x01(\v2\x18.meshtastic.PowerMetricsH\x00R\fpowerMetrics\x129\n" +
+ "\vlocal_stats\x18\x06 \x01(\v2\x16.meshtastic.LocalStatsH\x00R\n" +
+ "localStats\x12B\n" +
+ "\x0ehealth_metrics\x18\a \x01(\v2\x19.meshtastic.HealthMetricsH\x00R\rhealthMetrics\x12<\n" +
+ "\fhost_metrics\x18\b \x01(\v2\x17.meshtastic.HostMetricsH\x00R\vhostMetrics\x12^\n" +
+ "\x18traffic_management_stats\x18\t \x01(\v2\".meshtastic.TrafficManagementStatsH\x00R\x16trafficManagementStatsB\t\n" +
+ "\avariant\"]\n" +
+ "\rNau7802Config\x12\x1e\n" +
+ "\n" +
+ "zeroOffset\x18\x01 \x01(\x05R\n" +
+ "zeroOffset\x12,\n" +
+ "\x11calibrationFactor\x18\x02 \x01(\x02R\x11calibrationFactor\"\xce\x02\n" +
+ "\n" +
+ "SEN5XState\x12,\n" +
+ "\x12last_cleaning_time\x18\x01 \x01(\rR\x10lastCleaningTime\x12.\n" +
+ "\x13last_cleaning_valid\x18\x02 \x01(\bR\x11lastCleaningValid\x12\"\n" +
+ "\rone_shot_mode\x18\x03 \x01(\bR\voneShotMode\x12)\n" +
+ "\x0evoc_state_time\x18\x04 \x01(\rH\x00R\fvocStateTime\x88\x01\x01\x12+\n" +
+ "\x0fvoc_state_valid\x18\x05 \x01(\bH\x01R\rvocStateValid\x88\x01\x01\x12+\n" +
+ "\x0fvoc_state_array\x18\x06 \x01(\x06H\x02R\rvocStateArray\x88\x01\x01B\x11\n" +
+ "\x0f_voc_state_timeB\x12\n" +
+ "\x10_voc_state_validB\x12\n" +
+ "\x10_voc_state_array*\xa7\x05\n" +
+ "\x13TelemetrySensorType\x12\x10\n" +
+ "\fSENSOR_UNSET\x10\x00\x12\n" +
+ "\n" +
+ "\x06BME280\x10\x01\x12\n" +
+ "\n" +
+ "\x06BME680\x10\x02\x12\v\n" +
+ "\aMCP9808\x10\x03\x12\n" +
+ "\n" +
+ "\x06INA260\x10\x04\x12\n" +
+ "\n" +
+ "\x06INA219\x10\x05\x12\n" +
+ "\n" +
+ "\x06BMP280\x10\x06\x12\t\n" +
+ "\x05SHTC3\x10\a\x12\t\n" +
+ "\x05LPS22\x10\b\x12\v\n" +
+ "\aQMC6310\x10\t\x12\v\n" +
+ "\aQMI8658\x10\n" +
+ "\x12\f\n" +
+ "\bQMC5883L\x10\v\x12\t\n" +
+ "\x05SHT31\x10\f\x12\f\n" +
+ "\bPMSA003I\x10\r\x12\v\n" +
+ "\aINA3221\x10\x0e\x12\n" +
+ "\n" +
+ "\x06BMP085\x10\x0f\x12\f\n" +
+ "\bRCWL9620\x10\x10\x12\t\n" +
+ "\x05SHT4X\x10\x11\x12\f\n" +
+ "\bVEML7700\x10\x12\x12\f\n" +
+ "\bMLX90632\x10\x13\x12\v\n" +
+ "\aOPT3001\x10\x14\x12\f\n" +
+ "\bLTR390UV\x10\x15\x12\x0e\n" +
+ "\n" +
+ "TSL25911FN\x10\x16\x12\t\n" +
+ "\x05AHT10\x10\x17\x12\x10\n" +
+ "\fDFROBOT_LARK\x10\x18\x12\v\n" +
+ "\aNAU7802\x10\x19\x12\n" +
+ "\n" +
+ "\x06BMP3XX\x10\x1a\x12\f\n" +
+ "\bICM20948\x10\x1b\x12\f\n" +
+ "\bMAX17048\x10\x1c\x12\x11\n" +
+ "\rCUSTOM_SENSOR\x10\x1d\x12\f\n" +
+ "\bMAX30102\x10\x1e\x12\f\n" +
+ "\bMLX90614\x10\x1f\x12\t\n" +
+ "\x05SCD4X\x10 \x12\v\n" +
+ "\aRADSENS\x10!\x12\n" +
+ "\n" +
+ "\x06INA226\x10\"\x12\x10\n" +
+ "\fDFROBOT_RAIN\x10#\x12\n" +
+ "\n" +
+ "\x06DPS310\x10$\x12\f\n" +
+ "\bRAK12035\x10%\x12\f\n" +
+ "\bMAX17261\x10&\x12\v\n" +
+ "\aPCT2075\x10'\x12\v\n" +
+ "\aADS1X15\x10(\x12\x0f\n" +
+ "\vADS1X15_ALT\x10)\x12\t\n" +
+ "\x05SFA30\x10*\x12\t\n" +
+ "\x05SEN5X\x10+\x12\v\n" +
+ "\aTSL2561\x10,\x12\n" +
+ "\n" +
+ "\x06BH1750\x10-\x12\v\n" +
+ "\aHDC1080\x10.\x12\t\n" +
+ "\x05SHT21\x10/\x12\t\n" +
+ "\x05STC31\x100\x12\t\n" +
+ "\x05SCD30\x101Be\n" +
+ "\x14org.meshtastic.protoB\x0fTelemetryProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00b\x06proto3"
+
+var (
+ file_meshtastic_telemetry_proto_rawDescOnce sync.Once
+ file_meshtastic_telemetry_proto_rawDescData []byte
+)
+
+func file_meshtastic_telemetry_proto_rawDescGZIP() []byte {
+ file_meshtastic_telemetry_proto_rawDescOnce.Do(func() {
+ file_meshtastic_telemetry_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_meshtastic_telemetry_proto_rawDesc), len(file_meshtastic_telemetry_proto_rawDesc)))
+ })
+ return file_meshtastic_telemetry_proto_rawDescData
+}
+
+var file_meshtastic_telemetry_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_meshtastic_telemetry_proto_msgTypes = make([]protoimpl.MessageInfo, 11)
+var file_meshtastic_telemetry_proto_goTypes = []any{
+ (TelemetrySensorType)(0), // 0: meshtastic.TelemetrySensorType
+ (*DeviceMetrics)(nil), // 1: meshtastic.DeviceMetrics
+ (*EnvironmentMetrics)(nil), // 2: meshtastic.EnvironmentMetrics
+ (*PowerMetrics)(nil), // 3: meshtastic.PowerMetrics
+ (*AirQualityMetrics)(nil), // 4: meshtastic.AirQualityMetrics
+ (*LocalStats)(nil), // 5: meshtastic.LocalStats
+ (*TrafficManagementStats)(nil), // 6: meshtastic.TrafficManagementStats
+ (*HealthMetrics)(nil), // 7: meshtastic.HealthMetrics
+ (*HostMetrics)(nil), // 8: meshtastic.HostMetrics
+ (*Telemetry)(nil), // 9: meshtastic.Telemetry
+ (*Nau7802Config)(nil), // 10: meshtastic.Nau7802Config
+ (*SEN5XState)(nil), // 11: meshtastic.SEN5XState
+}
+var file_meshtastic_telemetry_proto_depIdxs = []int32{
+ 1, // 0: meshtastic.Telemetry.device_metrics:type_name -> meshtastic.DeviceMetrics
+ 2, // 1: meshtastic.Telemetry.environment_metrics:type_name -> meshtastic.EnvironmentMetrics
+ 4, // 2: meshtastic.Telemetry.air_quality_metrics:type_name -> meshtastic.AirQualityMetrics
+ 3, // 3: meshtastic.Telemetry.power_metrics:type_name -> meshtastic.PowerMetrics
+ 5, // 4: meshtastic.Telemetry.local_stats:type_name -> meshtastic.LocalStats
+ 7, // 5: meshtastic.Telemetry.health_metrics:type_name -> meshtastic.HealthMetrics
+ 8, // 6: meshtastic.Telemetry.host_metrics:type_name -> meshtastic.HostMetrics
+ 6, // 7: meshtastic.Telemetry.traffic_management_stats:type_name -> meshtastic.TrafficManagementStats
+ 8, // [8:8] is the sub-list for method output_type
+ 8, // [8:8] is the sub-list for method input_type
+ 8, // [8:8] is the sub-list for extension type_name
+ 8, // [8:8] is the sub-list for extension extendee
+ 0, // [0:8] is the sub-list for field type_name
+}
+
+func init() { file_meshtastic_telemetry_proto_init() }
+func file_meshtastic_telemetry_proto_init() {
+ if File_meshtastic_telemetry_proto != nil {
+ return
+ }
+ file_meshtastic_telemetry_proto_msgTypes[0].OneofWrappers = []any{}
+ file_meshtastic_telemetry_proto_msgTypes[1].OneofWrappers = []any{}
+ file_meshtastic_telemetry_proto_msgTypes[2].OneofWrappers = []any{}
+ file_meshtastic_telemetry_proto_msgTypes[3].OneofWrappers = []any{}
+ file_meshtastic_telemetry_proto_msgTypes[6].OneofWrappers = []any{}
+ file_meshtastic_telemetry_proto_msgTypes[7].OneofWrappers = []any{}
+ file_meshtastic_telemetry_proto_msgTypes[8].OneofWrappers = []any{
+ (*Telemetry_DeviceMetrics)(nil),
+ (*Telemetry_EnvironmentMetrics)(nil),
+ (*Telemetry_AirQualityMetrics)(nil),
+ (*Telemetry_PowerMetrics)(nil),
+ (*Telemetry_LocalStats)(nil),
+ (*Telemetry_HealthMetrics)(nil),
+ (*Telemetry_HostMetrics)(nil),
+ (*Telemetry_TrafficManagementStats)(nil),
+ }
+ file_meshtastic_telemetry_proto_msgTypes[10].OneofWrappers = []any{}
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_meshtastic_telemetry_proto_rawDesc), len(file_meshtastic_telemetry_proto_rawDesc)),
+ NumEnums: 1,
+ NumMessages: 11,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_meshtastic_telemetry_proto_goTypes,
+ DependencyIndexes: file_meshtastic_telemetry_proto_depIdxs,
+ EnumInfos: file_meshtastic_telemetry_proto_enumTypes,
+ MessageInfos: file_meshtastic_telemetry_proto_msgTypes,
+ }.Build()
+ File_meshtastic_telemetry_proto = out.File
+ file_meshtastic_telemetry_proto_goTypes = nil
+ file_meshtastic_telemetry_proto_depIdxs = nil
+}
diff --git a/protocol/meshtastic/pb/xmodem.pb.go b/protocol/meshtastic/pb/xmodem.pb.go
new file mode 100644
index 0000000..4d0ff08
--- /dev/null
+++ b/protocol/meshtastic/pb/xmodem.pb.go
@@ -0,0 +1,228 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.36.11
+// protoc v6.33.4
+// source: meshtastic/xmodem.proto
+
+package pb
+
+import (
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ reflect "reflect"
+ sync "sync"
+ unsafe "unsafe"
+)
+
+const (
+ // Verify that this generated code is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+ // Verify that runtime/protoimpl is sufficiently up-to-date.
+ _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
+
+type XModem_Control int32
+
+const (
+ XModem_NUL XModem_Control = 0
+ XModem_SOH XModem_Control = 1
+ XModem_STX XModem_Control = 2
+ XModem_EOT XModem_Control = 4
+ XModem_ACK XModem_Control = 6
+ XModem_NAK XModem_Control = 21
+ XModem_CAN XModem_Control = 24
+ XModem_CTRLZ XModem_Control = 26
+)
+
+// Enum value maps for XModem_Control.
+var (
+ XModem_Control_name = map[int32]string{
+ 0: "NUL",
+ 1: "SOH",
+ 2: "STX",
+ 4: "EOT",
+ 6: "ACK",
+ 21: "NAK",
+ 24: "CAN",
+ 26: "CTRLZ",
+ }
+ XModem_Control_value = map[string]int32{
+ "NUL": 0,
+ "SOH": 1,
+ "STX": 2,
+ "EOT": 4,
+ "ACK": 6,
+ "NAK": 21,
+ "CAN": 24,
+ "CTRLZ": 26,
+ }
+)
+
+func (x XModem_Control) Enum() *XModem_Control {
+ p := new(XModem_Control)
+ *p = x
+ return p
+}
+
+func (x XModem_Control) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (XModem_Control) Descriptor() protoreflect.EnumDescriptor {
+ return file_meshtastic_xmodem_proto_enumTypes[0].Descriptor()
+}
+
+func (XModem_Control) Type() protoreflect.EnumType {
+ return &file_meshtastic_xmodem_proto_enumTypes[0]
+}
+
+func (x XModem_Control) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use XModem_Control.Descriptor instead.
+func (XModem_Control) EnumDescriptor() ([]byte, []int) {
+ return file_meshtastic_xmodem_proto_rawDescGZIP(), []int{0, 0}
+}
+
+type XModem struct {
+ state protoimpl.MessageState `protogen:"open.v1"`
+ Control XModem_Control `protobuf:"varint,1,opt,name=control,proto3,enum=meshtastic.XModem_Control" json:"control,omitempty"`
+ Seq uint32 `protobuf:"varint,2,opt,name=seq,proto3" json:"seq,omitempty"`
+ Crc16 uint32 `protobuf:"varint,3,opt,name=crc16,proto3" json:"crc16,omitempty"`
+ Buffer []byte `protobuf:"bytes,4,opt,name=buffer,proto3" json:"buffer,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
+}
+
+func (x *XModem) Reset() {
+ *x = XModem{}
+ mi := &file_meshtastic_xmodem_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+}
+
+func (x *XModem) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*XModem) ProtoMessage() {}
+
+func (x *XModem) ProtoReflect() protoreflect.Message {
+ mi := &file_meshtastic_xmodem_proto_msgTypes[0]
+ if x != nil {
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ if ms.LoadMessageInfo() == nil {
+ ms.StoreMessageInfo(mi)
+ }
+ return ms
+ }
+ return mi.MessageOf(x)
+}
+
+// Deprecated: Use XModem.ProtoReflect.Descriptor instead.
+func (*XModem) Descriptor() ([]byte, []int) {
+ return file_meshtastic_xmodem_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *XModem) GetControl() XModem_Control {
+ if x != nil {
+ return x.Control
+ }
+ return XModem_NUL
+}
+
+func (x *XModem) GetSeq() uint32 {
+ if x != nil {
+ return x.Seq
+ }
+ return 0
+}
+
+func (x *XModem) GetCrc16() uint32 {
+ if x != nil {
+ return x.Crc16
+ }
+ return 0
+}
+
+func (x *XModem) GetBuffer() []byte {
+ if x != nil {
+ return x.Buffer
+ }
+ return nil
+}
+
+var File_meshtastic_xmodem_proto protoreflect.FileDescriptor
+
+const file_meshtastic_xmodem_proto_rawDesc = "" +
+ "\n" +
+ "\x17meshtastic/xmodem.proto\x12\n" +
+ "meshtastic\"\xd3\x01\n" +
+ "\x06XModem\x124\n" +
+ "\acontrol\x18\x01 \x01(\x0e2\x1a.meshtastic.XModem.ControlR\acontrol\x12\x10\n" +
+ "\x03seq\x18\x02 \x01(\rR\x03seq\x12\x14\n" +
+ "\x05crc16\x18\x03 \x01(\rR\x05crc16\x12\x16\n" +
+ "\x06buffer\x18\x04 \x01(\fR\x06buffer\"S\n" +
+ "\aControl\x12\a\n" +
+ "\x03NUL\x10\x00\x12\a\n" +
+ "\x03SOH\x10\x01\x12\a\n" +
+ "\x03STX\x10\x02\x12\a\n" +
+ "\x03EOT\x10\x04\x12\a\n" +
+ "\x03ACK\x10\x06\x12\a\n" +
+ "\x03NAK\x10\x15\x12\a\n" +
+ "\x03CAN\x10\x18\x12\t\n" +
+ "\x05CTRLZ\x10\x1aBb\n" +
+ "\x14org.meshtastic.protoB\fXmodemProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00b\x06proto3"
+
+var (
+ file_meshtastic_xmodem_proto_rawDescOnce sync.Once
+ file_meshtastic_xmodem_proto_rawDescData []byte
+)
+
+func file_meshtastic_xmodem_proto_rawDescGZIP() []byte {
+ file_meshtastic_xmodem_proto_rawDescOnce.Do(func() {
+ file_meshtastic_xmodem_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_meshtastic_xmodem_proto_rawDesc), len(file_meshtastic_xmodem_proto_rawDesc)))
+ })
+ return file_meshtastic_xmodem_proto_rawDescData
+}
+
+var file_meshtastic_xmodem_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_meshtastic_xmodem_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
+var file_meshtastic_xmodem_proto_goTypes = []any{
+ (XModem_Control)(0), // 0: meshtastic.XModem.Control
+ (*XModem)(nil), // 1: meshtastic.XModem
+}
+var file_meshtastic_xmodem_proto_depIdxs = []int32{
+ 0, // 0: meshtastic.XModem.control:type_name -> meshtastic.XModem.Control
+ 1, // [1:1] is the sub-list for method output_type
+ 1, // [1:1] is the sub-list for method input_type
+ 1, // [1:1] is the sub-list for extension type_name
+ 1, // [1:1] is the sub-list for extension extendee
+ 0, // [0:1] is the sub-list for field type_name
+}
+
+func init() { file_meshtastic_xmodem_proto_init() }
+func file_meshtastic_xmodem_proto_init() {
+ if File_meshtastic_xmodem_proto != nil {
+ return
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: unsafe.Slice(unsafe.StringData(file_meshtastic_xmodem_proto_rawDesc), len(file_meshtastic_xmodem_proto_rawDesc)),
+ NumEnums: 1,
+ NumMessages: 1,
+ NumExtensions: 0,
+ NumServices: 0,
+ },
+ GoTypes: file_meshtastic_xmodem_proto_goTypes,
+ DependencyIndexes: file_meshtastic_xmodem_proto_depIdxs,
+ EnumInfos: file_meshtastic_xmodem_proto_enumTypes,
+ MessageInfos: file_meshtastic_xmodem_proto_msgTypes,
+ }.Build()
+ File_meshtastic_xmodem_proto = out.File
+ file_meshtastic_xmodem_proto_goTypes = nil
+ file_meshtastic_xmodem_proto_depIdxs = nil
+}