├── .gitignore
├── .gitmodules
├── .trunk
├── .gitignore
├── configs
│ ├── .clang-format
│ ├── .flake8
│ ├── .hadolint.yaml
│ ├── .isort.cfg
│ ├── .markdownlint.yaml
│ ├── .shellcheckrc
│ └── .yamllint.yaml
└── trunk.yaml
├── .vscode
└── settings.json
├── LICENSE
├── README.md
├── bin
├── littlefsbuilder.py
├── mklittlefs
├── regen-protos.bat
└── regen-protos.sh
├── boards
├── ESP-4848S040.json
├── heltec-wireless-tracker.json
├── lilygo-t-hmi.json
├── seeed-sensecap-indicator.json
├── t-deck.json
├── t-watch-s3.json
└── wt32-sc01-plus.json
├── docs
├── ESP32-4848S040.jpg
├── T-HMI.jpg
├── WT32-SC01-Plus.jpg
└── native-mui.png
├── etc
├── MUI.desktop
└── MUI.png
├── lib
├── log
│ ├── Log.cpp
│ └── Log.h
└── mesh
│ ├── external_callbacks.cpp
│ ├── generated
│ └── meshtastic
│ │ ├── admin.pb.cpp
│ │ ├── admin.pb.h
│ │ ├── apponly.pb.cpp
│ │ ├── apponly.pb.h
│ │ ├── atak.pb.cpp
│ │ ├── atak.pb.h
│ │ ├── cannedmessages.pb.cpp
│ │ ├── cannedmessages.pb.h
│ │ ├── channel.pb.cpp
│ │ ├── channel.pb.h
│ │ ├── clientonly.pb.cpp
│ │ ├── clientonly.pb.h
│ │ ├── config.pb.cpp
│ │ ├── config.pb.h
│ │ ├── connection_status.pb.cpp
│ │ ├── connection_status.pb.h
│ │ ├── device_ui.pb.cpp
│ │ ├── device_ui.pb.h
│ │ ├── deviceonly.pb.cpp
│ │ ├── deviceonly.pb.h
│ │ ├── interdevice.pb.cpp
│ │ ├── interdevice.pb.h
│ │ ├── localonly.pb.cpp
│ │ ├── localonly.pb.h
│ │ ├── mesh.pb.cpp
│ │ ├── mesh.pb.h
│ │ ├── module_config.pb.cpp
│ │ ├── module_config.pb.h
│ │ ├── mqtt.pb.cpp
│ │ ├── mqtt.pb.h
│ │ ├── paxcount.pb.cpp
│ │ ├── paxcount.pb.h
│ │ ├── portnums.pb.cpp
│ │ ├── portnums.pb.h
│ │ ├── powermon.pb.cpp
│ │ ├── powermon.pb.h
│ │ ├── remote_hardware.pb.cpp
│ │ ├── remote_hardware.pb.h
│ │ ├── rtttl.pb.cpp
│ │ ├── rtttl.pb.h
│ │ ├── storeforward.pb.cpp
│ │ ├── storeforward.pb.h
│ │ ├── telemetry.pb.cpp
│ │ ├── telemetry.pb.h
│ │ ├── xmodem.pb.cpp
│ │ └── xmodem.pb.h
│ ├── mesh-pb-constants.cpp
│ └── mesh-pb-constants.h
├── platformio.ini
├── squareline
├── t-deck
│ ├── T_Deck_Meshtastic.sll
│ └── T_Deck_Meshtastic.spj
└── t-watch-s3
│ ├── T_Watch_Meshtastic.sll
│ └── T_Watch_Meshtastic.spj
├── src
└── main.cpp
├── test
├── definitions.cpp
└── test_MeshEnvelope.cpp
└── variants
├── esp-4848s040
└── pins_arduino.h
├── heltec-wireless-tracker
└── pins_arduino.h
├── makerfabs-480x480
└── pins_arduino.h
├── seeed-sensecap-indicator
└── pins_arduino.h
├── t-deck
└── pins_arduino.h
├── t-watch-s3
└── pins_arduino.h
└── wt32-sc01-plus
└── pins_arduino.h
/.gitignore:
--------------------------------------------------------------------------------
1 | .pio
2 | .vscode/.browse.c_cpp.db*
3 | .vscode/c_cpp_properties.json
4 | .vscode/extensions.json
5 | .vscode/launch.json
6 | .vscode/ipch
7 | squareline
8 | .vscode/extensions.json
9 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "protobufs"]
2 | path = protobufs
3 | url = https://github.com/meshtastic/protobufs
4 |
--------------------------------------------------------------------------------
/.trunk/.gitignore:
--------------------------------------------------------------------------------
1 | *out
2 | *logs
3 | *actions
4 | *notifications
5 | *tools
6 | plugins
7 | user_trunk.yaml
8 | user.yaml
9 | tmp
10 |
--------------------------------------------------------------------------------
/.trunk/configs/.clang-format:
--------------------------------------------------------------------------------
1 | Language: Cpp
2 | IndentWidth: 4
3 | ColumnLimit: 130
4 | PointerAlignment: Right
5 | BreakBeforeBraces: Linux
6 | AllowShortFunctionsOnASingleLine: Inline
7 |
--------------------------------------------------------------------------------
/.trunk/configs/.flake8:
--------------------------------------------------------------------------------
1 | # Autoformatter friendly flake8 config (all formatting rules disabled)
2 | [flake8]
3 | extend-ignore = D1, D2, E1, E2, E3, E501, W1, W2, W3, W5
4 |
--------------------------------------------------------------------------------
/.trunk/configs/.hadolint.yaml:
--------------------------------------------------------------------------------
1 | # Following source doesn't work in most setups
2 | ignored:
3 | - SC1090
4 | - SC1091
5 |
--------------------------------------------------------------------------------
/.trunk/configs/.isort.cfg:
--------------------------------------------------------------------------------
1 | [settings]
2 | profile=black
3 |
--------------------------------------------------------------------------------
/.trunk/configs/.markdownlint.yaml:
--------------------------------------------------------------------------------
1 | # Autoformatter friendly markdownlint config (all formatting rules disabled)
2 | default: true
3 | blank_lines: false
4 | bullet: false
5 | html: false
6 | indentation: false
7 | line_length: false
8 | spaces: false
9 | url: false
10 | whitespace: false
11 |
--------------------------------------------------------------------------------
/.trunk/configs/.shellcheckrc:
--------------------------------------------------------------------------------
1 | enable=all
2 | source-path=SCRIPTDIR
3 | disable=SC2154
4 | disable=SC2248
5 | disable=SC2250
6 |
7 | # If you're having issues with shellcheck following source, disable the errors via:
8 | # disable=SC1090
9 | # disable=SC1091
10 | #
--------------------------------------------------------------------------------
/.trunk/configs/.yamllint.yaml:
--------------------------------------------------------------------------------
1 | rules:
2 | quoted-strings:
3 | required: only-when-needed
4 | extra-allowed: ["{|}"]
5 | empty-values:
6 | forbid-in-block-mappings: false
7 | forbid-in-flow-mappings: true
8 | key-duplicates: {}
9 | octal-values:
10 | forbid-implicit-octal: true
11 |
--------------------------------------------------------------------------------
/.trunk/trunk.yaml:
--------------------------------------------------------------------------------
1 | # This file controls the behavior of Trunk: https://docs.trunk.io/cli
2 | # To learn more about the format of this file, see https://docs.trunk.io/reference/trunk-yaml
3 | version: 0.1
4 | cli:
5 | version: 1.22.11
6 | # Trunk provides extensibility via plugins. (https://docs.trunk.io/plugins)
7 | plugins:
8 | sources:
9 | - id: trunk
10 | ref: v1.6.7
11 | uri: https://github.com/trunk-io/plugins
12 | # Many linters and tools depend on runtimes - configure them here. (https://docs.trunk.io/runtimes)
13 | runtimes:
14 | enabled:
15 | - go@1.21.0
16 | - node@18.20.5
17 | - python@3.10.8
18 | # This is the section where you manage your linters. (https://docs.trunk.io/check/configuration)
19 | lint:
20 | enabled:
21 | - trufflehog@3.88.18
22 | - yamllint@1.36.2
23 | - bandit@1.8.3
24 | - checkov@3.2.390
25 | - terrascan@1.19.1
26 | - trivy@0.60.0
27 | - taplo@0.9.3
28 | - ruff@0.11.1
29 | - isort@6.0.1
30 | - markdownlint@0.44.0
31 | - oxipng@9.1.4
32 | - svgo@3.3.2
33 | - actionlint@1.7.7
34 | - flake8@7.1.2
35 | - hadolint@2.12.1-beta
36 | - shfmt@3.6.0
37 | - shellcheck@0.10.0
38 | - black@25.1.0
39 | - git-diff-check
40 | - gitleaks@8.24.0
41 | - clang-format@16.0.3
42 | - prettier@3.5.3
43 | ignore:
44 | - linters: [ALL]
45 | paths:
46 | # Ignore generated files
47 | - generated/**
48 | actions:
49 | disabled:
50 | - trunk-announce
51 | enabled:
52 | - trunk-check-pre-push
53 | - trunk-fmt-pre-commit
54 | - trunk-upgrade-available
55 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "files.associations": {
3 | "lv_api_map.h": "c",
4 | "arduino.h": "c",
5 | "displaysettings": "cpp",
6 | "cstdint": "cpp",
7 | "array": "cpp",
8 | "atomic": "cpp",
9 | "*.tcc": "cpp",
10 | "cctype": "cpp",
11 | "chrono": "cpp",
12 | "clocale": "cpp",
13 | "cmath": "cpp",
14 | "condition_variable": "cpp",
15 | "cstdarg": "cpp",
16 | "cstddef": "cpp",
17 | "cstdio": "cpp",
18 | "cstdlib": "cpp",
19 | "cstring": "cpp",
20 | "ctime": "cpp",
21 | "cwchar": "cpp",
22 | "cwctype": "cpp",
23 | "deque": "cpp",
24 | "list": "cpp",
25 | "unordered_map": "cpp",
26 | "unordered_set": "cpp",
27 | "vector": "cpp",
28 | "exception": "cpp",
29 | "algorithm": "cpp",
30 | "functional": "cpp",
31 | "iterator": "cpp",
32 | "map": "cpp",
33 | "memory": "cpp",
34 | "memory_resource": "cpp",
35 | "numeric": "cpp",
36 | "optional": "cpp",
37 | "random": "cpp",
38 | "ratio": "cpp",
39 | "string": "cpp",
40 | "string_view": "cpp",
41 | "system_error": "cpp",
42 | "tuple": "cpp",
43 | "type_traits": "cpp",
44 | "utility": "cpp",
45 | "fstream": "cpp",
46 | "initializer_list": "cpp",
47 | "iomanip": "cpp",
48 | "iosfwd": "cpp",
49 | "istream": "cpp",
50 | "limits": "cpp",
51 | "mutex": "cpp",
52 | "new": "cpp",
53 | "ostream": "cpp",
54 | "sstream": "cpp",
55 | "stdexcept": "cpp",
56 | "streambuf": "cpp",
57 | "thread": "cpp",
58 | "cinttypes": "cpp",
59 | "typeinfo": "cpp",
60 | "lv_hal_tick.h": "c",
61 | "compare": "cpp",
62 | "lv_drv_conf.h": "c",
63 | "gc9a01.h": "c"
64 | },
65 | "cmake.configureOnOpen": false,
66 | "C_Cpp.default.compilerPath": "/usr/lib64/ccache/g++"
67 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | #
2 |
3 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | Vectors and icons by SVG Repo
25 | Graphics using LVGL library
26 |
27 |
28 | ## :wave: Introduction
29 |
30 | ### PlatformIO projects for standalone display devices
31 |
32 | This repository provides firmware source code for the following MUI devices and scenarios:
33 |
34 |
35 |
36 | - LilyGo T-HMI 2.8inch TFT (esp32-s3) - serial
37 | - ESP32-4848S040 4.0inch TFT (esp32-s3) - serial
38 | - WT32-SC01 Plus 3.5inch TFT (esp32-s3) - serial
39 | - Native linux X11 local/remote application - ethernet TCP/IP
40 |
41 | 


42 |
43 |
44 |
45 | ## :computer: Build & Flash
46 |
47 | Please follow the prerequisites for setting up the Linux Development Environment and the general build instructions.
48 | Then either install a Linux native device or use a esp32-s3 TFT device connected to a LoRa device via serial .
49 | Finally build the MUI standalone firmware using a linux terminal as follows:
50 |
51 | ```bash
52 | # checkout the repository from github
53 | git clone --depth=1 --recursive https://github.com/meshtastic/standalone-ui
54 | cd standalone-ui
55 |
56 | # activate the pio environment
57 | source $HOME/.platformio/bin/penv/activate
58 |
59 | # build and optionally upload the target(s) to your device(s)
60 | pio run -e t-hmi-mui -t upload
61 | pio run -e diy-replicator-mui -t upload
62 | pio run -e wt32-sc01-plus-mui -t upload
63 |
64 | # when connecting to another LoRa device its serial interface must be configured:
65 | meshtastic --set serial.enabled true --set serial.baud 38400 --set serial.mode PROTO
66 | # please configure the right GPIO serial ports for rx/tx, e.g. for RAK4631
67 | meshtastic --set serial.rxd 8 --set serial.txd 6
68 |
69 | # build the native MUI
70 | pio run -e native-mui
71 |
72 | # install MUI desktop icon
73 | mkdir -p $HOME/.icons $HOME/.local/share/applications $HOME/.local/bin
74 | cp etc/MUI.desktop $HOME/.local/share/applications
75 | cp etc/MUI.png $HOME/.icons
76 | cp .pio/build/native-mui/program $HOME/.local/bin/native-mui
77 |
78 | # run MUI native from CLI to connect to meshtasticd daemon
79 | .pio/build/native-mui/program
80 | ```
81 |
82 | ## Stats
83 |
84 | 
85 |
--------------------------------------------------------------------------------
/bin/littlefsbuilder.py:
--------------------------------------------------------------------------------
1 | Import("env")
2 | env.Replace(
3 | MKFSTOOL=env.get("PROJECT_DIR") + "/bin/mklittlefs"
4 | ) # PlatformIO now believes it has actually created a SPIFFS
5 |
--------------------------------------------------------------------------------
/bin/mklittlefs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/meshtastic/standalone-ui/c6068bc6d6418c3ac42976c99e8d56c3e93424d5/bin/mklittlefs
--------------------------------------------------------------------------------
/bin/regen-protos.bat:
--------------------------------------------------------------------------------
1 | cd protobufs && ..\nanopb-0.4.8\generator-bin\protoc.exe --nanopb_out=-v:..\src -I=..\protobufs meshtastic\*.proto
2 |
--------------------------------------------------------------------------------
/bin/regen-protos.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | set -e
4 |
5 | echo "This script requires https://jpa.kapsi.fi/nanopb/download/ version 0.4.9.1 to be located in the"
6 | echo "firmware root directory if the following step fails, you should download the correct"
7 | echo "prebuilt binaries for your computer into nanopb-0.4.9.1"
8 |
9 | # the nanopb tool seems to require that the .options file be in the current directory!
10 | cd protobufs
11 | ../../nanopb-0.4.9.1/generator/protoc "--nanopb_out=-S.cpp -v:../lib/mesh/generated/" -I=../protobufs meshtastic/*.proto --experimental_allow_proto3_optional
12 |
13 | #echo "Regenerating protobuf documentation - if you see an error message"
14 | #echo "you can ignore it unless doing a new protobuf release to github."
15 | #bin/regen-docs.sh
16 |
--------------------------------------------------------------------------------
/boards/ESP-4848S040.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "arduino": {
4 | "ldscript": "esp32s3_out.ld",
5 | "memory_type": "qio_opi",
6 | "partitions": "default_16MB.csv"
7 | },
8 | "core": "esp32",
9 | "extra_flags": [
10 | "-DBOARD_HAS_PSRAM",
11 | "-DARDUINO_USB_CDC_ON_BOOT=0",
12 | "-DARDUINO_USB_MODE=1",
13 | "-DARDUINO_RUNNING_CORE=1",
14 | "-DARDUINO_EVENT_RUNNING_CORE=0"
15 | ],
16 | "f_cpu": "240000000L",
17 | "f_flash": "80000000L",
18 | "flash_mode": "qio",
19 | "hwids": [["0x1A86", "0x7523"]],
20 | "mcu": "esp32s3",
21 | "variant": "esp32s3"
22 | },
23 | "connectivity": ["wifi", "bluetooth"],
24 | "debug": {
25 | "default_tool": "esp-builtin",
26 | "onboard_tools": ["esp-builtin"],
27 | "openocd_target": "esp32s3.cfg"
28 | },
29 | "frameworks": ["arduino", "espidf"],
30 | "name": "ESP32-4848S040 (16 MB FLASH, 8 MB PSRAM)",
31 | "upload": {
32 | "flash_size": "16MB",
33 | "maximum_ram_size": 327680,
34 | "maximum_size": 16777216,
35 | "require_upload_port": true,
36 | "speed": 921600
37 | },
38 | "monitor": {
39 | "speed": 115200
40 | },
41 | "url": "https://vi.aliexpress.com/item/1005006478501734.html",
42 | "vendor": "Caturda"
43 | }
44 |
--------------------------------------------------------------------------------
/boards/heltec-wireless-tracker.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "arduino": {
4 | "ldscript": "esp32s3_out.ld",
5 | "partitions": "max_app_8MB.csv"
6 | },
7 | "core": "esp32",
8 | "extra_flags": [
9 | "-DARDUINO_USB_CDC_ON_BOOT=1",
10 | "-DARDUINO_USB_MODE=1",
11 | "-DARDUINO_RUNNING_CORE=1",
12 | "-DARDUINO_EVENT_RUNNING_CORE=1"
13 | ],
14 | "f_cpu": "240000000L",
15 | "f_flash": "80000000L",
16 | "flash_mode": "qio",
17 | "hwids": [["0x303A", "0x1001"]],
18 | "mcu": "esp32s3",
19 | "variant": "heltec-wireless-tracker"
20 | },
21 | "connectivity": ["wifi", "bluetooth", "lora"],
22 | "debug": {
23 | "default_tool": "esp-builtin",
24 | "onboard_tools": ["esp-builtin"],
25 | "openocd_target": "esp32s3.cfg"
26 | },
27 | "frameworks": ["arduino", "espidf"],
28 | "name": "Heltec Wireless Tracker (8MB Flash)",
29 | "upload": {
30 | "flash_size": "8MB",
31 | "maximum_ram_size": 327680,
32 | "maximum_size": 8388608,
33 | "require_upload_port": true,
34 | "speed": 921600
35 | },
36 | "monitor": {
37 | "speed" : 115200
38 | },
39 | "url": "https://heltec.org/project/wireless-tracker/",
40 | "vendor": "Heltec"
41 | }
42 |
--------------------------------------------------------------------------------
/boards/lilygo-t-hmi.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "arduino": {
4 | "ldscript": "esp32s3_out.ld",
5 | "memory_type": "qio_opi",
6 | "partitions": "default_16MB.csv"
7 | },
8 | "core": "esp32",
9 | "extra_flags": [
10 | "-DBOARD_HAS_PSRAM",
11 | "-DARDUINO_USB_CDC_ON_BOOT=1",
12 | "-DARDUINO_USB_MODE=1",
13 | "-DARDUINO_RUNNING_CORE=1",
14 | "-DARDUINO_EVENT_RUNNING_CORE=0"
15 | ],
16 | "f_cpu": "240000000L",
17 | "f_flash": "80000000L",
18 | "flash_mode": "qio",
19 | "hwids": [["0x303A", "0x1001"]],
20 | "mcu": "esp32s3",
21 | "variant": "esp32s3"
22 | },
23 | "connectivity": ["wifi", "bluetooth"],
24 | "debug": {
25 | "default_tool": "esp-builtin",
26 | "onboard_tools": ["esp-builtin"],
27 | "openocd_target": "esp32s3.cfg"
28 | },
29 | "frameworks": ["arduino", "espidf"],
30 | "name": "LILYGO T-HMI (16 MB FLASH, 8 MB PSRAM)",
31 | "upload": {
32 | "flash_size": "16MB",
33 | "maximum_ram_size": 327680,
34 | "maximum_size": 16777216,
35 | "require_upload_port": true,
36 | "speed": 921600
37 | },
38 | "monitor": {
39 | "speed": 115200
40 | },
41 | "url": "https://www.lilygo.cc/en-pl/products/t-hmi",
42 | "vendor": "LILYGO"
43 | }
44 |
--------------------------------------------------------------------------------
/boards/seeed-sensecap-indicator.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "arduino": {
4 | "ldscript": "esp32s3_out.ld",
5 | "partitions": "default_8MB.csv",
6 | "memory_type": "qio_opi"
7 | },
8 | "core": "esp32",
9 | "extra_flags": [
10 | "-DBOARD_HAS_PSRAM",
11 | "-DARDUINO_USB_CDC_ON_BOOT=0",
12 | "-DARDUINO_USB_MODE=1",
13 | "-DARDUINO_RUNNING_CORE=1",
14 | "-DARDUINO_EVENT_RUNNING_CORE=1"
15 | ],
16 | "f_cpu": "240000000L",
17 | "f_flash": "80000000L",
18 | "flash_mode": "qio",
19 | "hwids": [["0x1A86", "0x7523"]],
20 | "mcu": "esp32s3",
21 | "variant": "esp32s3"
22 | },
23 | "connectivity": ["wifi", "bluetooth", "lora"],
24 | "debug": {
25 | "default_tool": "esp-builtin",
26 | "onboard_tools": ["esp-builtin"],
27 | "openocd_target": "esp32s3.cfg"
28 | },
29 | "frameworks": ["arduino"],
30 | "name": "Seeed Studio SenseCAP Indicator",
31 | "upload": {
32 | "flash_size": "8MB",
33 | "maximum_ram_size": 327680,
34 | "maximum_size": 8388608,
35 | "require_upload_port": true,
36 | "use_1200bps_touch": true,
37 | "wait_for_upload_port": true,
38 | "speed": 921600
39 | },
40 | "url": "https://www.seeedstudio.com/Indicator-for-Meshtastic.html",
41 | "vendor": "Seeed Studio"
42 | }
43 |
--------------------------------------------------------------------------------
/boards/t-deck.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "arduino": {
4 | "ldscript": "esp32s3_out.ld",
5 | "memory_type": "qio_opi",
6 | "partitions": "default_16MB.csv"
7 | },
8 | "core": "esp32",
9 | "extra_flags": [
10 | "-DBOARD_HAS_PSRAM",
11 | "-DARDUINO_USB_CDC_ON_BOOT=1",
12 | "-DARDUINO_USB_MODE=1",
13 | "-DARDUINO_RUNNING_CORE=1",
14 | "-DARDUINO_EVENT_RUNNING_CORE=0"
15 | ],
16 | "f_cpu": "240000000L",
17 | "f_flash": "80000000L",
18 | "flash_mode": "qio",
19 | "hwids": [["0x303A", "0x1001"]],
20 | "mcu": "esp32s3",
21 | "variant": "t-deck"
22 | },
23 | "connectivity": ["wifi", "bluetooth", "lora"],
24 | "debug": {
25 | "default_tool": "esp-builtin",
26 | "onboard_tools": ["esp-builtin"],
27 | "openocd_target": "esp32s3.cfg"
28 | },
29 | "frameworks": ["arduino", "espidf"],
30 | "name": "LilyGO T-Deck (16 MB FLASH, 8 MB PSRAM)",
31 | "upload": {
32 | "flash_size": "16MB",
33 | "maximum_ram_size": 327680,
34 | "maximum_size": 16777216,
35 | "require_upload_port": true,
36 | "speed": 921600
37 | },
38 | "monitor": {
39 | "speed" : 115200
40 | },
41 | "url": "https://www.lilygo.cc/en-pl/products/t-deck",
42 | "vendor": "LilyGO"
43 | }
44 |
--------------------------------------------------------------------------------
/boards/t-watch-s3.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "arduino": {
4 | "ldscript": "esp32s3_out.ld",
5 | "memory_type": "qio_opi",
6 | "partitions": "default_16MB.csv"
7 | },
8 | "core": "esp32",
9 | "extra_flags": [
10 | "-DBOARD_HAS_PSRAM",
11 | "-DARDUINO_USB_CDC_ON_BOOT=1",
12 | "-DARDUINO_USB_MODE=1",
13 | "-DARDUINO_RUNNING_CORE=1",
14 | "-DARDUINO_EVENT_RUNNING_CORE=1"
15 | ],
16 | "f_cpu": "240000000L",
17 | "f_flash": "80000000L",
18 | "flash_mode": "qio",
19 | "hwids": [["0x303A", "0x0002"]],
20 | "mcu": "esp32s3",
21 | "variant": "t-watch-s3"
22 | },
23 | "connectivity": ["wifi", "bluetooth", "lora"],
24 | "debug": {
25 | "default_tool": "esp-builtin",
26 | "onboard_tools": ["esp-builtin"],
27 | "openocd_target": "esp32s3.cfg"
28 | },
29 | "frameworks": ["arduino"],
30 | "name": "LilyGo T-Watch S3 (16M Flash, 8M PSRAM)",
31 | "upload": {
32 | "flash_size": "16MB",
33 | "maximum_ram_size": 327680,
34 | "maximum_size": 16777216,
35 | "require_upload_port": true,
36 | "speed": 921600
37 | },
38 | "monitor": {
39 | "speed" : 115200
40 | },
41 | "url": "https://www.lilygo.cc/en-pl/products/t-watch-s3",
42 | "vendor": "LilyGo"
43 | }
44 |
--------------------------------------------------------------------------------
/boards/wt32-sc01-plus.json:
--------------------------------------------------------------------------------
1 | {
2 | "build": {
3 | "arduino": {
4 | "ldscript": "esp32s3_out.ld",
5 | "memory_type": "qio_qspi",
6 | "partitions": "default_16MB.csv"
7 | },
8 | "core": "esp32",
9 | "extra_flags": [
10 | "-DBOARD_HAS_PSRAM",
11 | "-DARDUINO_USB_CDC_ON_BOOT=1",
12 | "-DARDUINO_USB_MODE=1",
13 | "-DARDUINO_RUNNING_CORE=1",
14 | "-DARDUINO_EVENT_RUNNING_CORE=1"
15 | ],
16 | "f_cpu": "240000000L",
17 | "f_flash": "80000000L",
18 | "flash_mode": "qio",
19 | "hwids": [["0x303A", "0x80D0"]],
20 | "mcu": "esp32s3",
21 | "variant": "wt32-sc01-plus"
22 | },
23 | "connectivity": ["wifi", "bluetooth"],
24 | "debug": {
25 | "default_tool": "esp-builtin",
26 | "onboard_tools": ["esp-builtin"],
27 | "openocd_target": "esp32s3.cfg"
28 | },
29 | "frameworks": ["arduino", "espidf"],
30 | "name": "WT32-SC01 Plus (16 MB Flash, 8 MB PSRAM)",
31 | "upload": {
32 | "flash_size": "16MB",
33 | "maximum_ram_size": 327680,
34 | "maximum_size": 16777216,
35 | "require_upload_port": true,
36 | "speed": 921600
37 | },
38 | "monitor": {
39 | "speed" : 115200
40 | },
41 | "url": "http://en.wireless-tag.com/product-item-26.html",
42 | "vendor": "wireless-tag"
43 | }
44 |
--------------------------------------------------------------------------------
/docs/ESP32-4848S040.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/meshtastic/standalone-ui/c6068bc6d6418c3ac42976c99e8d56c3e93424d5/docs/ESP32-4848S040.jpg
--------------------------------------------------------------------------------
/docs/T-HMI.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/meshtastic/standalone-ui/c6068bc6d6418c3ac42976c99e8d56c3e93424d5/docs/T-HMI.jpg
--------------------------------------------------------------------------------
/docs/WT32-SC01-Plus.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/meshtastic/standalone-ui/c6068bc6d6418c3ac42976c99e8d56c3e93424d5/docs/WT32-SC01-Plus.jpg
--------------------------------------------------------------------------------
/docs/native-mui.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/meshtastic/standalone-ui/c6068bc6d6418c3ac42976c99e8d56c3e93424d5/docs/native-mui.png
--------------------------------------------------------------------------------
/etc/MUI.desktop:
--------------------------------------------------------------------------------
1 | [Desktop Entry]
2 | Version=2.6
3 | Type=Application
4 | Name=MUI
5 | Comment=Meshtastic UI Client
6 | Exec=native-mui
7 | Icon=MUI.png
8 | Terminal=false
9 | Type=Application
10 | Categories=Network,Utility
11 |
12 |
--------------------------------------------------------------------------------
/etc/MUI.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/meshtastic/standalone-ui/c6068bc6d6418c3ac42976c99e8d56c3e93424d5/etc/MUI.png
--------------------------------------------------------------------------------
/lib/log/Log.cpp:
--------------------------------------------------------------------------------
1 | #include "Log.h"
2 | #include "stdarg.h"
3 | #include
4 | #include
5 |
6 | #define CL_LIGHTRED "\033[01;31m" //!< Light red.
7 | #define CL_RED "\033[22;31m" //!< Red.
8 | #define CL_YELLOW "\033[01;33m" //!< Yellow.
9 | #define CL_WHITE "\033[01;37m" //!< White.
10 | #define CL_DARKGRAY "\033[01;30m" //!< Dark gray.
11 | #define NORMAL "\x1B[0m" //!< Normal.
12 |
13 | #if defined(ARCH_ESP32)
14 | // simply forward all logs into the esp log forwarder
15 | #define VA_START(LVL, ARG, FMT) \
16 | esp_log_write(LVL, "TFT", "%s | %s %d [%s] ", lvl[LVL], getTime(), int(millis() / 1000), "TFT"); \
17 | va_start(ARG, FMT)
18 | #define LOG_FWD(LVL, TAG, FMT, ARG) esp_log_writev(LVL, TAG, FMT, ARG)
19 | #define LOG_CRLF(LVL, TAG) esp_log_write(LVL, TAG, "\n")
20 | #elif defined(ARCH_PORTDUINO)
21 | // #define _GNU_SOURCE
22 | #include
23 | #define VA_START(LVL, ARG, FMT) \
24 | pthread_getname_np(pthread_self(), threadname, sizeof(threadname)); \
25 | printf("%s | %s %d [%s] ", lvl[LVL], getTime(), int(millis() / 1000), threadname); \
26 | va_start(ARG, FMT)
27 | #define LOG_FWD(LVL, TAG, FMT, ARG) vprintf(FMT, ARG)
28 | #define LOG_CRLF(LVL, TAG) printf(NORMAL "\n")
29 | #define esp_log_level_set(...)
30 | #endif
31 |
32 | extern "C" unsigned long millis(void);
33 |
34 | static time_t rawtime;
35 | struct tm *timeinfo;
36 | char buffer[20];
37 | char threadname[16];
38 | const char *lvl[] = {"NONE", CL_RED "ERROR", CL_YELLOW "WARN ", CL_WHITE "INFO ", "DEBUG", CL_DARKGRAY "TRACE"};
39 | Log logger;
40 |
41 | char *getTime()
42 | {
43 | time(&rawtime);
44 | timeinfo = localtime(&rawtime);
45 | strftime(buffer, sizeof(buffer), "%H:%M:%S ", timeinfo);
46 | return buffer;
47 | }
48 |
49 | void Log::setDebugLevel(esp_log_level_t lvl)
50 | {
51 | esp_log_level_set("*", lvl);
52 | }
53 |
54 | void Log::log_debug(const char *format, ...)
55 | {
56 | va_list arg;
57 | VA_START(ESP_LOG_DEBUG, arg, format);
58 | LOG_FWD(ESP_LOG_DEBUG, "TFT", format, arg);
59 | va_end(arg);
60 | LOG_CRLF(ESP_LOG_DEBUG, "TFT");
61 | }
62 |
63 | void Log::log_info(const char *format, ...)
64 | {
65 | va_list arg;
66 | VA_START(ESP_LOG_INFO, arg, format);
67 | LOG_FWD(ESP_LOG_INFO, "TFT", format, arg);
68 | va_end(arg);
69 | LOG_CRLF(ESP_LOG_INFO, "TFT");
70 | }
71 |
72 | void Log::log_warn(const char *format, ...)
73 | {
74 | va_list arg;
75 | VA_START(ESP_LOG_WARN, arg, format);
76 | LOG_FWD(ESP_LOG_WARN, "TFT", format, arg);
77 | va_end(arg);
78 | LOG_CRLF(ESP_LOG_WARN, "TFT");
79 | }
80 |
81 | void Log::log_error(const char *format, ...)
82 | {
83 | va_list arg;
84 | VA_START(ESP_LOG_ERROR, arg, format);
85 | LOG_FWD(ESP_LOG_ERROR, "TFT", format, arg);
86 | va_end(arg);
87 | LOG_CRLF(ESP_LOG_ERROR, "TFT");
88 | }
89 |
90 | void Log::log_crit(const char *format, ...)
91 | {
92 | va_list arg;
93 | VA_START(ESP_LOG_ERROR, arg, format);
94 | LOG_FWD(ESP_LOG_ERROR, "TFT", format, arg);
95 | va_end(arg);
96 | LOG_CRLF(ESP_LOG_ERROR, "TFT");
97 | }
98 |
99 | void Log::log_trace(const char *format, ...)
100 | {
101 | va_list arg;
102 | VA_START(ESP_LOG_VERBOSE, arg, format);
103 | LOG_FWD(ESP_LOG_VERBOSE, "TFT", format, arg);
104 | va_end(arg);
105 | LOG_CRLF(ESP_LOG_VERBOSE, "TFT");
106 | }
107 |
--------------------------------------------------------------------------------
/lib/log/Log.h:
--------------------------------------------------------------------------------
1 | #include "util/ILog.h"
2 |
3 | #if defined(ARCH_ESP32)
4 | #include "esp_log.h"
5 | #elif defined(ARCH_PORTDUINO)
6 | typedef enum { ESP_LOG_NONE, ESP_LOG_ERROR, ESP_LOG_WARN, ESP_LOG_INFO, ESP_LOG_DEBUG, ESP_LOG_VERBOSE } esp_log_level_t;
7 | #endif
8 |
9 | class Log : public ILog
10 | {
11 | public:
12 | Log() : ILog(this) { setDebugLevel(ESP_LOG_VERBOSE); }
13 | void setDebugLevel(esp_log_level_t lvl);
14 |
15 | protected:
16 | virtual void log_debug(const char *format, ...) override;
17 | virtual void log_info(const char *format, ...) override;
18 | virtual void log_warn(const char *format, ...) override;
19 | virtual void log_error(const char *format, ...) override;
20 | virtual void log_crit(const char *format, ...) override;
21 | virtual void log_trace(const char *format, ...) override;
22 | };
23 |
24 | extern Log logger;
25 |
--------------------------------------------------------------------------------
/lib/mesh/external_callbacks.cpp:
--------------------------------------------------------------------------------
1 | #include "mesh-pb-constants.h"
2 |
3 | #include
4 | #include
5 | #include
6 |
7 | bool meshtastic_DeviceState_callback(pb_istream_t *istream, pb_ostream_t *ostream, const pb_field_iter_t *field)
8 | {
9 | if (ostream) {
10 | std::vector *vec = (std::vector *)field->pData;
11 | for (auto item : *vec) {
12 | if (!pb_encode_tag_for_field(ostream, field))
13 | return false;
14 | pb_encode_submessage(ostream, meshtastic_NodeInfoLite_fields, &item);
15 | }
16 | }
17 | if (istream) {
18 | meshtastic_NodeInfoLite node; // this gets good data
19 | std::vector *vec = (std::vector *)field->pData;
20 |
21 | if (istream->bytes_left && pb_decode(istream, meshtastic_NodeInfoLite_fields, &node))
22 | vec->push_back(node);
23 | }
24 | return true;
25 | }
26 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/admin.pb.cpp:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb constant definitions */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #include "meshtastic/admin.pb.h"
5 | #if PB_PROTO_HEADER_VERSION != 40
6 | #error Regenerate this file with the current version of nanopb generator.
7 | #endif
8 |
9 | PB_BIND(meshtastic_AdminMessage, meshtastic_AdminMessage, 2)
10 |
11 | PB_BIND(meshtastic_HamParameters, meshtastic_HamParameters, AUTO)
12 |
13 | PB_BIND(meshtastic_NodeRemoteHardwarePinsResponse, meshtastic_NodeRemoteHardwarePinsResponse, 2)
14 |
15 | PB_BIND(meshtastic_SharedContact, meshtastic_SharedContact, AUTO)
16 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/apponly.pb.cpp:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb constant definitions */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #include "meshtastic/apponly.pb.h"
5 | #if PB_PROTO_HEADER_VERSION != 40
6 | #error Regenerate this file with the current version of nanopb generator.
7 | #endif
8 |
9 | PB_BIND(meshtastic_ChannelSet, meshtastic_ChannelSet, 2)
10 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/apponly.pb.h:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb header */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #ifndef PB_MESHTASTIC_MESHTASTIC_APPONLY_PB_H_INCLUDED
5 | #define PB_MESHTASTIC_MESHTASTIC_APPONLY_PB_H_INCLUDED
6 | #include "meshtastic/channel.pb.h"
7 | #include "meshtastic/config.pb.h"
8 | #include
9 |
10 | #if PB_PROTO_HEADER_VERSION != 40
11 | #error Regenerate this file with the current version of nanopb generator.
12 | #endif
13 |
14 | /* Struct definitions */
15 | /* This is the most compact possible representation for a set of channels.
16 | It includes only one PRIMARY channel (which must be first) and
17 | any SECONDARY channels.
18 | No DISABLED channels are included.
19 | This abstraction is used only on the the 'app side' of the world (ie python, javascript and android etc) to show a group of
20 | Channels as a (long) URL */
21 | typedef struct _meshtastic_ChannelSet {
22 | /* Channel list with settings */
23 | pb_size_t settings_count;
24 | meshtastic_ChannelSettings settings[8];
25 | /* LoRa config */
26 | bool has_lora_config;
27 | meshtastic_Config_LoRaConfig lora_config;
28 | } meshtastic_ChannelSet;
29 |
30 | #ifdef __cplusplus
31 | extern "C" {
32 | #endif
33 |
34 | /* Initializer values for message structs */
35 | #define meshtastic_ChannelSet_init_default \
36 | { \
37 | 0, {meshtastic_ChannelSettings_init_default, meshtastic_ChannelSettings_init_default, \
38 | meshtastic_ChannelSettings_init_default, meshtastic_ChannelSettings_init_default, \
39 | meshtastic_ChannelSettings_init_default, meshtastic_ChannelSettings_init_default, \
40 | meshtastic_ChannelSettings_init_default, meshtastic_ChannelSettings_init_default}, \
41 | false, meshtastic_Config_LoRaConfig_init_default \
42 | }
43 | #define meshtastic_ChannelSet_init_zero \
44 | { \
45 | 0, {meshtastic_ChannelSettings_init_zero, meshtastic_ChannelSettings_init_zero, meshtastic_ChannelSettings_init_zero, \
46 | meshtastic_ChannelSettings_init_zero, meshtastic_ChannelSettings_init_zero, meshtastic_ChannelSettings_init_zero, \
47 | meshtastic_ChannelSettings_init_zero, meshtastic_ChannelSettings_init_zero}, \
48 | false, meshtastic_Config_LoRaConfig_init_zero \
49 | }
50 |
51 | /* Field tags (for use in manual encoding/decoding) */
52 | #define meshtastic_ChannelSet_settings_tag 1
53 | #define meshtastic_ChannelSet_lora_config_tag 2
54 |
55 | /* Struct field encoding specification for nanopb */
56 | #define meshtastic_ChannelSet_FIELDLIST(X, a) \
57 | X(a, STATIC, REPEATED, MESSAGE, settings, 1) \
58 | X(a, STATIC, OPTIONAL, MESSAGE, lora_config, 2)
59 | #define meshtastic_ChannelSet_CALLBACK NULL
60 | #define meshtastic_ChannelSet_DEFAULT NULL
61 | #define meshtastic_ChannelSet_settings_MSGTYPE meshtastic_ChannelSettings
62 | #define meshtastic_ChannelSet_lora_config_MSGTYPE meshtastic_Config_LoRaConfig
63 |
64 | extern const pb_msgdesc_t meshtastic_ChannelSet_msg;
65 |
66 | /* Defines for backwards compatibility with code written before nanopb-0.4.0 */
67 | #define meshtastic_ChannelSet_fields &meshtastic_ChannelSet_msg
68 |
69 | /* Maximum encoded size of messages (where known) */
70 | #define MESHTASTIC_MESHTASTIC_APPONLY_PB_H_MAX_SIZE meshtastic_ChannelSet_size
71 | #define meshtastic_ChannelSet_size 679
72 |
73 | #ifdef __cplusplus
74 | } /* extern "C" */
75 | #endif
76 |
77 | #endif
78 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/atak.pb.cpp:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb constant definitions */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #include "meshtastic/atak.pb.h"
5 | #if PB_PROTO_HEADER_VERSION != 40
6 | #error Regenerate this file with the current version of nanopb generator.
7 | #endif
8 |
9 | PB_BIND(meshtastic_TAKPacket, meshtastic_TAKPacket, 2)
10 |
11 | PB_BIND(meshtastic_GeoChat, meshtastic_GeoChat, 2)
12 |
13 | PB_BIND(meshtastic_Group, meshtastic_Group, AUTO)
14 |
15 | PB_BIND(meshtastic_Status, meshtastic_Status, AUTO)
16 |
17 | PB_BIND(meshtastic_Contact, meshtastic_Contact, AUTO)
18 |
19 | PB_BIND(meshtastic_PLI, meshtastic_PLI, AUTO)
20 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/cannedmessages.pb.cpp:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb constant definitions */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #include "meshtastic/cannedmessages.pb.h"
5 | #if PB_PROTO_HEADER_VERSION != 40
6 | #error Regenerate this file with the current version of nanopb generator.
7 | #endif
8 |
9 | PB_BIND(meshtastic_CannedMessageModuleConfig, meshtastic_CannedMessageModuleConfig, AUTO)
10 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/cannedmessages.pb.h:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb header */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #ifndef PB_MESHTASTIC_MESHTASTIC_CANNEDMESSAGES_PB_H_INCLUDED
5 | #define PB_MESHTASTIC_MESHTASTIC_CANNEDMESSAGES_PB_H_INCLUDED
6 | #include
7 |
8 | #if PB_PROTO_HEADER_VERSION != 40
9 | #error Regenerate this file with the current version of nanopb generator.
10 | #endif
11 |
12 | /* Struct definitions */
13 | /* Canned message module configuration. */
14 | typedef struct _meshtastic_CannedMessageModuleConfig {
15 | /* Predefined messages for canned message module separated by '|' characters. */
16 | char messages[201];
17 | } meshtastic_CannedMessageModuleConfig;
18 |
19 | #ifdef __cplusplus
20 | extern "C" {
21 | #endif
22 |
23 | /* Initializer values for message structs */
24 | #define meshtastic_CannedMessageModuleConfig_init_default \
25 | { \
26 | "" \
27 | }
28 | #define meshtastic_CannedMessageModuleConfig_init_zero \
29 | { \
30 | "" \
31 | }
32 |
33 | /* Field tags (for use in manual encoding/decoding) */
34 | #define meshtastic_CannedMessageModuleConfig_messages_tag 1
35 |
36 | /* Struct field encoding specification for nanopb */
37 | #define meshtastic_CannedMessageModuleConfig_FIELDLIST(X, a) X(a, STATIC, SINGULAR, STRING, messages, 1)
38 | #define meshtastic_CannedMessageModuleConfig_CALLBACK NULL
39 | #define meshtastic_CannedMessageModuleConfig_DEFAULT NULL
40 |
41 | extern const pb_msgdesc_t meshtastic_CannedMessageModuleConfig_msg;
42 |
43 | /* Defines for backwards compatibility with code written before nanopb-0.4.0 */
44 | #define meshtastic_CannedMessageModuleConfig_fields &meshtastic_CannedMessageModuleConfig_msg
45 |
46 | /* Maximum encoded size of messages (where known) */
47 | #define MESHTASTIC_MESHTASTIC_CANNEDMESSAGES_PB_H_MAX_SIZE meshtastic_CannedMessageModuleConfig_size
48 | #define meshtastic_CannedMessageModuleConfig_size 203
49 |
50 | #ifdef __cplusplus
51 | } /* extern "C" */
52 | #endif
53 |
54 | #endif
55 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/channel.pb.cpp:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb constant definitions */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #include "meshtastic/channel.pb.h"
5 | #if PB_PROTO_HEADER_VERSION != 40
6 | #error Regenerate this file with the current version of nanopb generator.
7 | #endif
8 |
9 | PB_BIND(meshtastic_ChannelSettings, meshtastic_ChannelSettings, AUTO)
10 |
11 | PB_BIND(meshtastic_ModuleSettings, meshtastic_ModuleSettings, AUTO)
12 |
13 | PB_BIND(meshtastic_Channel, meshtastic_Channel, AUTO)
14 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/channel.pb.h:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb header */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #ifndef PB_MESHTASTIC_MESHTASTIC_CHANNEL_PB_H_INCLUDED
5 | #define PB_MESHTASTIC_MESHTASTIC_CHANNEL_PB_H_INCLUDED
6 | #include
7 |
8 | #if PB_PROTO_HEADER_VERSION != 40
9 | #error Regenerate this file with the current version of nanopb generator.
10 | #endif
11 |
12 | /* Enum definitions */
13 | /* How this channel is being used (or not).
14 | Note: this field is an enum to give us options for the future.
15 | In particular, someday we might make a 'SCANNING' option.
16 | SCANNING channels could have different frequencies and the radio would
17 | occasionally check that freq to see if anything is being transmitted.
18 | For devices that have multiple physical radios attached, we could keep multiple PRIMARY/SCANNING channels active at once to allow
19 | cross band routing as needed.
20 | If a device has only a single radio (the common case) only one channel can be PRIMARY at a time
21 | (but any number of SECONDARY channels can't be sent received on that common frequency) */
22 | typedef enum _meshtastic_Channel_Role {
23 | /* This channel is not in use right now */
24 | meshtastic_Channel_Role_DISABLED = 0,
25 | /* This channel is used to set the frequency for the radio - all other enabled channels must be SECONDARY */
26 | meshtastic_Channel_Role_PRIMARY = 1,
27 | /* Secondary channels are only used for encryption/decryption/authentication purposes.
28 | Their radio settings (freq etc) are ignored, only psk is used. */
29 | meshtastic_Channel_Role_SECONDARY = 2
30 | } meshtastic_Channel_Role;
31 |
32 | /* Struct definitions */
33 | /* This message is specifically for modules to store per-channel configuration data. */
34 | typedef struct _meshtastic_ModuleSettings {
35 | /* Bits of precision for the location sent in position packets. */
36 | uint32_t position_precision;
37 | /* Controls whether or not the phone / clients should mute the current channel
38 | Useful for noisy public channels you don't necessarily want to disable */
39 | bool is_client_muted;
40 | } meshtastic_ModuleSettings;
41 |
42 | typedef PB_BYTES_ARRAY_T(32) meshtastic_ChannelSettings_psk_t;
43 | /* This information can be encoded as a QRcode/url so that other users can configure
44 | their radio to join the same channel.
45 | A note about how channel names are shown to users: channelname-X
46 | poundsymbol is a prefix used to indicate this is a channel name (idea from @professr).
47 | Where X is a letter from A-Z (base 26) representing a hash of the PSK for this
48 | channel - so that if the user changes anything about the channel (which does
49 | force a new PSK) this letter will also change. Thus preventing user confusion if
50 | two friends try to type in a channel name of "BobsChan" and then can't talk
51 | because their PSKs will be different.
52 | The PSK is hashed into this letter by "0x41 + [xor all bytes of the psk ] modulo 26"
53 | This also allows the option of someday if people have the PSK off (zero), the
54 | users COULD type in a channel name and be able to talk.
55 | FIXME: Add description of multi-channel support and how primary vs secondary channels are used.
56 | FIXME: explain how apps use channels for security.
57 | explain how remote settings and remote gpio are managed as an example */
58 | typedef struct _meshtastic_ChannelSettings {
59 | /* Deprecated in favor of LoraConfig.channel_num */
60 | uint32_t channel_num;
61 | /* A simple pre-shared key for now for crypto.
62 | Must be either 0 bytes (no crypto), 16 bytes (AES128), or 32 bytes (AES256).
63 | A special shorthand is used for 1 byte long psks.
64 | These psks should be treated as only minimally secure,
65 | because they are listed in this source code.
66 | Those bytes are mapped using the following scheme:
67 | `0` = No crypto
68 | `1` = The special "default" channel key: {0xd4, 0xf1, 0xbb, 0x3a, 0x20, 0x29, 0x07, 0x59, 0xf0, 0xbc, 0xff, 0xab, 0xcf, 0x4e,
69 | 0x69, 0x01} `2` through 10 = The default channel key, except with 1 through 9 added to the last byte. Shown to user as simple1
70 | through 10 */
71 | meshtastic_ChannelSettings_psk_t psk;
72 | /* A SHORT name that will be packed into the URL.
73 | Less than 12 bytes.
74 | Something for end users to call the channel
75 | If this is the empty string it is assumed that this channel
76 | is the special (minimally secure) "Default"channel.
77 | In user interfaces it should be rendered as a local language translation of "X".
78 | For channel_num hashing empty string will be treated as "X".
79 | Where "X" is selected based on the English words listed above for ModemPreset */
80 | char name[12];
81 | /* Used to construct a globally unique channel ID.
82 | The full globally unique ID will be: "name.id" where ID is shown as base36.
83 | Assuming that the number of meshtastic users is below 20K (true for a long time)
84 | the chance of this 64 bit random number colliding with anyone else is super low.
85 | And the penalty for collision is low as well, it just means that anyone trying to decrypt channel messages might need to
86 | try multiple candidate channels.
87 | Any time a non wire compatible change is made to a channel, this field should be regenerated.
88 | There are a small number of 'special' globally known (and fairly) insecure standard channels.
89 | Those channels do not have a numeric id included in the settings, but instead it is pulled from
90 | a table of well known IDs.
91 | (see Well Known Channels FIXME) */
92 | uint32_t id;
93 | /* If true, messages on the mesh will be sent to the *public* internet by any gateway ndoe */
94 | bool uplink_enabled;
95 | /* If true, messages seen on the internet will be forwarded to the local mesh. */
96 | bool downlink_enabled;
97 | /* Per-channel module settings. */
98 | bool has_module_settings;
99 | meshtastic_ModuleSettings module_settings;
100 | } meshtastic_ChannelSettings;
101 |
102 | /* A pair of a channel number, mode and the (sharable) settings for that channel */
103 | typedef struct _meshtastic_Channel {
104 | /* The index of this channel in the channel table (from 0 to MAX_NUM_CHANNELS-1)
105 | (Someday - not currently implemented) An index of -1 could be used to mean "set by name",
106 | in which case the target node will find and set the channel by settings.name. */
107 | int8_t index;
108 | /* The new settings, or NULL to disable that channel */
109 | bool has_settings;
110 | meshtastic_ChannelSettings settings;
111 | /* TODO: REPLACE */
112 | meshtastic_Channel_Role role;
113 | } meshtastic_Channel;
114 |
115 | #ifdef __cplusplus
116 | extern "C" {
117 | #endif
118 |
119 | /* Helper constants for enums */
120 | #define _meshtastic_Channel_Role_MIN meshtastic_Channel_Role_DISABLED
121 | #define _meshtastic_Channel_Role_MAX meshtastic_Channel_Role_SECONDARY
122 | #define _meshtastic_Channel_Role_ARRAYSIZE ((meshtastic_Channel_Role)(meshtastic_Channel_Role_SECONDARY + 1))
123 |
124 | #define meshtastic_Channel_role_ENUMTYPE meshtastic_Channel_Role
125 |
126 | /* Initializer values for message structs */
127 | #define meshtastic_ChannelSettings_init_default \
128 | { \
129 | 0, {0, {0}}, "", 0, 0, 0, false, meshtastic_ModuleSettings_init_default \
130 | }
131 | #define meshtastic_ModuleSettings_init_default \
132 | { \
133 | 0, 0 \
134 | }
135 | #define meshtastic_Channel_init_default \
136 | { \
137 | 0, false, meshtastic_ChannelSettings_init_default, _meshtastic_Channel_Role_MIN \
138 | }
139 | #define meshtastic_ChannelSettings_init_zero \
140 | { \
141 | 0, {0, {0}}, "", 0, 0, 0, false, meshtastic_ModuleSettings_init_zero \
142 | }
143 | #define meshtastic_ModuleSettings_init_zero \
144 | { \
145 | 0, 0 \
146 | }
147 | #define meshtastic_Channel_init_zero \
148 | { \
149 | 0, false, meshtastic_ChannelSettings_init_zero, _meshtastic_Channel_Role_MIN \
150 | }
151 |
152 | /* Field tags (for use in manual encoding/decoding) */
153 | #define meshtastic_ModuleSettings_position_precision_tag 1
154 | #define meshtastic_ModuleSettings_is_client_muted_tag 2
155 | #define meshtastic_ChannelSettings_channel_num_tag 1
156 | #define meshtastic_ChannelSettings_psk_tag 2
157 | #define meshtastic_ChannelSettings_name_tag 3
158 | #define meshtastic_ChannelSettings_id_tag 4
159 | #define meshtastic_ChannelSettings_uplink_enabled_tag 5
160 | #define meshtastic_ChannelSettings_downlink_enabled_tag 6
161 | #define meshtastic_ChannelSettings_module_settings_tag 7
162 | #define meshtastic_Channel_index_tag 1
163 | #define meshtastic_Channel_settings_tag 2
164 | #define meshtastic_Channel_role_tag 3
165 |
166 | /* Struct field encoding specification for nanopb */
167 | #define meshtastic_ChannelSettings_FIELDLIST(X, a) \
168 | X(a, STATIC, SINGULAR, UINT32, channel_num, 1) \
169 | X(a, STATIC, SINGULAR, BYTES, psk, 2) \
170 | X(a, STATIC, SINGULAR, STRING, name, 3) \
171 | X(a, STATIC, SINGULAR, FIXED32, id, 4) \
172 | X(a, STATIC, SINGULAR, BOOL, uplink_enabled, 5) \
173 | X(a, STATIC, SINGULAR, BOOL, downlink_enabled, 6) \
174 | X(a, STATIC, OPTIONAL, MESSAGE, module_settings, 7)
175 | #define meshtastic_ChannelSettings_CALLBACK NULL
176 | #define meshtastic_ChannelSettings_DEFAULT NULL
177 | #define meshtastic_ChannelSettings_module_settings_MSGTYPE meshtastic_ModuleSettings
178 |
179 | #define meshtastic_ModuleSettings_FIELDLIST(X, a) \
180 | X(a, STATIC, SINGULAR, UINT32, position_precision, 1) \
181 | X(a, STATIC, SINGULAR, BOOL, is_client_muted, 2)
182 | #define meshtastic_ModuleSettings_CALLBACK NULL
183 | #define meshtastic_ModuleSettings_DEFAULT NULL
184 |
185 | #define meshtastic_Channel_FIELDLIST(X, a) \
186 | X(a, STATIC, SINGULAR, INT32, index, 1) \
187 | X(a, STATIC, OPTIONAL, MESSAGE, settings, 2) \
188 | X(a, STATIC, SINGULAR, UENUM, role, 3)
189 | #define meshtastic_Channel_CALLBACK NULL
190 | #define meshtastic_Channel_DEFAULT NULL
191 | #define meshtastic_Channel_settings_MSGTYPE meshtastic_ChannelSettings
192 |
193 | extern const pb_msgdesc_t meshtastic_ChannelSettings_msg;
194 | extern const pb_msgdesc_t meshtastic_ModuleSettings_msg;
195 | extern const pb_msgdesc_t meshtastic_Channel_msg;
196 |
197 | /* Defines for backwards compatibility with code written before nanopb-0.4.0 */
198 | #define meshtastic_ChannelSettings_fields &meshtastic_ChannelSettings_msg
199 | #define meshtastic_ModuleSettings_fields &meshtastic_ModuleSettings_msg
200 | #define meshtastic_Channel_fields &meshtastic_Channel_msg
201 |
202 | /* Maximum encoded size of messages (where known) */
203 | #define MESHTASTIC_MESHTASTIC_CHANNEL_PB_H_MAX_SIZE meshtastic_Channel_size
204 | #define meshtastic_ChannelSettings_size 72
205 | #define meshtastic_Channel_size 87
206 | #define meshtastic_ModuleSettings_size 8
207 |
208 | #ifdef __cplusplus
209 | } /* extern "C" */
210 | #endif
211 |
212 | #endif
213 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/clientonly.pb.cpp:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb constant definitions */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #include "meshtastic/clientonly.pb.h"
5 | #if PB_PROTO_HEADER_VERSION != 40
6 | #error Regenerate this file with the current version of nanopb generator.
7 | #endif
8 |
9 | PB_BIND(meshtastic_DeviceProfile, meshtastic_DeviceProfile, 2)
10 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/clientonly.pb.h:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb header */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #ifndef PB_MESHTASTIC_MESHTASTIC_CLIENTONLY_PB_H_INCLUDED
5 | #define PB_MESHTASTIC_MESHTASTIC_CLIENTONLY_PB_H_INCLUDED
6 | #include "meshtastic/localonly.pb.h"
7 | #include "meshtastic/mesh.pb.h"
8 | #include
9 |
10 | #if PB_PROTO_HEADER_VERSION != 40
11 | #error Regenerate this file with the current version of nanopb generator.
12 | #endif
13 |
14 | /* Struct definitions */
15 | /* This abstraction is used to contain any configuration for provisioning a node on any client.
16 | It is useful for importing and exporting configurations. */
17 | typedef struct _meshtastic_DeviceProfile {
18 | /* Long name for the node */
19 | bool has_long_name;
20 | char long_name[40];
21 | /* Short name of the node */
22 | bool has_short_name;
23 | char short_name[5];
24 | /* The url of the channels from our node */
25 | pb_callback_t channel_url;
26 | /* The Config of the node */
27 | bool has_config;
28 | meshtastic_LocalConfig config;
29 | /* The ModuleConfig of the node */
30 | bool has_module_config;
31 | meshtastic_LocalModuleConfig module_config;
32 | /* Fixed position data */
33 | bool has_fixed_position;
34 | meshtastic_Position fixed_position;
35 | /* Ringtone for ExternalNotification */
36 | bool has_ringtone;
37 | char ringtone[231];
38 | /* Predefined messages for CannedMessage */
39 | bool has_canned_messages;
40 | char canned_messages[201];
41 | } meshtastic_DeviceProfile;
42 |
43 | #ifdef __cplusplus
44 | extern "C" {
45 | #endif
46 |
47 | /* Initializer values for message structs */
48 | #define meshtastic_DeviceProfile_init_default \
49 | { \
50 | false, "", false, "", {{NULL}, NULL}, false, meshtastic_LocalConfig_init_default, false, \
51 | meshtastic_LocalModuleConfig_init_default, false, meshtastic_Position_init_default, false, "", false, "" \
52 | }
53 | #define meshtastic_DeviceProfile_init_zero \
54 | { \
55 | false, "", false, "", {{NULL}, NULL}, false, meshtastic_LocalConfig_init_zero, false, \
56 | meshtastic_LocalModuleConfig_init_zero, false, meshtastic_Position_init_zero, false, "", false, "" \
57 | }
58 |
59 | /* Field tags (for use in manual encoding/decoding) */
60 | #define meshtastic_DeviceProfile_long_name_tag 1
61 | #define meshtastic_DeviceProfile_short_name_tag 2
62 | #define meshtastic_DeviceProfile_channel_url_tag 3
63 | #define meshtastic_DeviceProfile_config_tag 4
64 | #define meshtastic_DeviceProfile_module_config_tag 5
65 | #define meshtastic_DeviceProfile_fixed_position_tag 6
66 | #define meshtastic_DeviceProfile_ringtone_tag 7
67 | #define meshtastic_DeviceProfile_canned_messages_tag 8
68 |
69 | /* Struct field encoding specification for nanopb */
70 | #define meshtastic_DeviceProfile_FIELDLIST(X, a) \
71 | X(a, STATIC, OPTIONAL, STRING, long_name, 1) \
72 | X(a, STATIC, OPTIONAL, STRING, short_name, 2) \
73 | X(a, CALLBACK, OPTIONAL, STRING, channel_url, 3) \
74 | X(a, STATIC, OPTIONAL, MESSAGE, config, 4) \
75 | X(a, STATIC, OPTIONAL, MESSAGE, module_config, 5) \
76 | X(a, STATIC, OPTIONAL, MESSAGE, fixed_position, 6) \
77 | X(a, STATIC, OPTIONAL, STRING, ringtone, 7) \
78 | X(a, STATIC, OPTIONAL, STRING, canned_messages, 8)
79 | #define meshtastic_DeviceProfile_CALLBACK pb_default_field_callback
80 | #define meshtastic_DeviceProfile_DEFAULT NULL
81 | #define meshtastic_DeviceProfile_config_MSGTYPE meshtastic_LocalConfig
82 | #define meshtastic_DeviceProfile_module_config_MSGTYPE meshtastic_LocalModuleConfig
83 | #define meshtastic_DeviceProfile_fixed_position_MSGTYPE meshtastic_Position
84 |
85 | extern const pb_msgdesc_t meshtastic_DeviceProfile_msg;
86 |
87 | /* Defines for backwards compatibility with code written before nanopb-0.4.0 */
88 | #define meshtastic_DeviceProfile_fields &meshtastic_DeviceProfile_msg
89 |
90 | /* Maximum encoded size of messages (where known) */
91 | /* meshtastic_DeviceProfile_size depends on runtime parameters */
92 |
93 | #ifdef __cplusplus
94 | } /* extern "C" */
95 | #endif
96 |
97 | #endif
98 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/config.pb.cpp:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb constant definitions */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #include "meshtastic/config.pb.h"
5 | #if PB_PROTO_HEADER_VERSION != 40
6 | #error Regenerate this file with the current version of nanopb generator.
7 | #endif
8 |
9 | PB_BIND(meshtastic_Config, meshtastic_Config, AUTO)
10 |
11 | PB_BIND(meshtastic_Config_DeviceConfig, meshtastic_Config_DeviceConfig, AUTO)
12 |
13 | PB_BIND(meshtastic_Config_PositionConfig, meshtastic_Config_PositionConfig, AUTO)
14 |
15 | PB_BIND(meshtastic_Config_PowerConfig, meshtastic_Config_PowerConfig, AUTO)
16 |
17 | PB_BIND(meshtastic_Config_NetworkConfig, meshtastic_Config_NetworkConfig, AUTO)
18 |
19 | PB_BIND(meshtastic_Config_NetworkConfig_IpV4Config, meshtastic_Config_NetworkConfig_IpV4Config, AUTO)
20 |
21 | PB_BIND(meshtastic_Config_DisplayConfig, meshtastic_Config_DisplayConfig, AUTO)
22 |
23 | PB_BIND(meshtastic_Config_LoRaConfig, meshtastic_Config_LoRaConfig, 2)
24 |
25 | PB_BIND(meshtastic_Config_BluetoothConfig, meshtastic_Config_BluetoothConfig, AUTO)
26 |
27 | PB_BIND(meshtastic_Config_SecurityConfig, meshtastic_Config_SecurityConfig, AUTO)
28 |
29 | PB_BIND(meshtastic_Config_SessionkeyConfig, meshtastic_Config_SessionkeyConfig, AUTO)
30 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/connection_status.pb.cpp:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb constant definitions */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #include "meshtastic/connection_status.pb.h"
5 | #if PB_PROTO_HEADER_VERSION != 40
6 | #error Regenerate this file with the current version of nanopb generator.
7 | #endif
8 |
9 | PB_BIND(meshtastic_DeviceConnectionStatus, meshtastic_DeviceConnectionStatus, AUTO)
10 |
11 | PB_BIND(meshtastic_WifiConnectionStatus, meshtastic_WifiConnectionStatus, AUTO)
12 |
13 | PB_BIND(meshtastic_EthernetConnectionStatus, meshtastic_EthernetConnectionStatus, AUTO)
14 |
15 | PB_BIND(meshtastic_NetworkConnectionStatus, meshtastic_NetworkConnectionStatus, AUTO)
16 |
17 | PB_BIND(meshtastic_BluetoothConnectionStatus, meshtastic_BluetoothConnectionStatus, AUTO)
18 |
19 | PB_BIND(meshtastic_SerialConnectionStatus, meshtastic_SerialConnectionStatus, AUTO)
20 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/connection_status.pb.h:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb header */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #ifndef PB_MESHTASTIC_MESHTASTIC_CONNECTION_STATUS_PB_H_INCLUDED
5 | #define PB_MESHTASTIC_MESHTASTIC_CONNECTION_STATUS_PB_H_INCLUDED
6 | #include
7 |
8 | #if PB_PROTO_HEADER_VERSION != 40
9 | #error Regenerate this file with the current version of nanopb generator.
10 | #endif
11 |
12 | /* Struct definitions */
13 | /* Ethernet or WiFi connection status */
14 | typedef struct _meshtastic_NetworkConnectionStatus {
15 | /* IP address of device */
16 | uint32_t ip_address;
17 | /* Whether the device has an active connection or not */
18 | bool is_connected;
19 | /* Whether the device has an active connection to an MQTT broker or not */
20 | bool is_mqtt_connected;
21 | /* Whether the device is actively remote syslogging or not */
22 | bool is_syslog_connected;
23 | } meshtastic_NetworkConnectionStatus;
24 |
25 | /* WiFi connection status */
26 | typedef struct _meshtastic_WifiConnectionStatus {
27 | /* Connection status */
28 | bool has_status;
29 | meshtastic_NetworkConnectionStatus status;
30 | /* WiFi access point SSID */
31 | char ssid[33];
32 | /* RSSI of wireless connection */
33 | int32_t rssi;
34 | } meshtastic_WifiConnectionStatus;
35 |
36 | /* Ethernet connection status */
37 | typedef struct _meshtastic_EthernetConnectionStatus {
38 | /* Connection status */
39 | bool has_status;
40 | meshtastic_NetworkConnectionStatus status;
41 | } meshtastic_EthernetConnectionStatus;
42 |
43 | /* Bluetooth connection status */
44 | typedef struct _meshtastic_BluetoothConnectionStatus {
45 | /* The pairing PIN for bluetooth */
46 | uint32_t pin;
47 | /* RSSI of bluetooth connection */
48 | int32_t rssi;
49 | /* Whether the device has an active connection or not */
50 | bool is_connected;
51 | } meshtastic_BluetoothConnectionStatus;
52 |
53 | /* Serial connection status */
54 | typedef struct _meshtastic_SerialConnectionStatus {
55 | /* Serial baud rate */
56 | uint32_t baud;
57 | /* Whether the device has an active connection or not */
58 | bool is_connected;
59 | } meshtastic_SerialConnectionStatus;
60 |
61 | typedef struct _meshtastic_DeviceConnectionStatus {
62 | /* WiFi Status */
63 | bool has_wifi;
64 | meshtastic_WifiConnectionStatus wifi;
65 | /* WiFi Status */
66 | bool has_ethernet;
67 | meshtastic_EthernetConnectionStatus ethernet;
68 | /* Bluetooth Status */
69 | bool has_bluetooth;
70 | meshtastic_BluetoothConnectionStatus bluetooth;
71 | /* Serial Status */
72 | bool has_serial;
73 | meshtastic_SerialConnectionStatus serial;
74 | } meshtastic_DeviceConnectionStatus;
75 |
76 | #ifdef __cplusplus
77 | extern "C" {
78 | #endif
79 |
80 | /* Initializer values for message structs */
81 | #define meshtastic_DeviceConnectionStatus_init_default \
82 | { \
83 | false, meshtastic_WifiConnectionStatus_init_default, false, meshtastic_EthernetConnectionStatus_init_default, false, \
84 | meshtastic_BluetoothConnectionStatus_init_default, false, meshtastic_SerialConnectionStatus_init_default \
85 | }
86 | #define meshtastic_WifiConnectionStatus_init_default \
87 | { \
88 | false, meshtastic_NetworkConnectionStatus_init_default, "", 0 \
89 | }
90 | #define meshtastic_EthernetConnectionStatus_init_default \
91 | { \
92 | false, meshtastic_NetworkConnectionStatus_init_default \
93 | }
94 | #define meshtastic_NetworkConnectionStatus_init_default \
95 | { \
96 | 0, 0, 0, 0 \
97 | }
98 | #define meshtastic_BluetoothConnectionStatus_init_default \
99 | { \
100 | 0, 0, 0 \
101 | }
102 | #define meshtastic_SerialConnectionStatus_init_default \
103 | { \
104 | 0, 0 \
105 | }
106 | #define meshtastic_DeviceConnectionStatus_init_zero \
107 | { \
108 | false, meshtastic_WifiConnectionStatus_init_zero, false, meshtastic_EthernetConnectionStatus_init_zero, false, \
109 | meshtastic_BluetoothConnectionStatus_init_zero, false, meshtastic_SerialConnectionStatus_init_zero \
110 | }
111 | #define meshtastic_WifiConnectionStatus_init_zero \
112 | { \
113 | false, meshtastic_NetworkConnectionStatus_init_zero, "", 0 \
114 | }
115 | #define meshtastic_EthernetConnectionStatus_init_zero \
116 | { \
117 | false, meshtastic_NetworkConnectionStatus_init_zero \
118 | }
119 | #define meshtastic_NetworkConnectionStatus_init_zero \
120 | { \
121 | 0, 0, 0, 0 \
122 | }
123 | #define meshtastic_BluetoothConnectionStatus_init_zero \
124 | { \
125 | 0, 0, 0 \
126 | }
127 | #define meshtastic_SerialConnectionStatus_init_zero \
128 | { \
129 | 0, 0 \
130 | }
131 |
132 | /* Field tags (for use in manual encoding/decoding) */
133 | #define meshtastic_NetworkConnectionStatus_ip_address_tag 1
134 | #define meshtastic_NetworkConnectionStatus_is_connected_tag 2
135 | #define meshtastic_NetworkConnectionStatus_is_mqtt_connected_tag 3
136 | #define meshtastic_NetworkConnectionStatus_is_syslog_connected_tag 4
137 | #define meshtastic_WifiConnectionStatus_status_tag 1
138 | #define meshtastic_WifiConnectionStatus_ssid_tag 2
139 | #define meshtastic_WifiConnectionStatus_rssi_tag 3
140 | #define meshtastic_EthernetConnectionStatus_status_tag 1
141 | #define meshtastic_BluetoothConnectionStatus_pin_tag 1
142 | #define meshtastic_BluetoothConnectionStatus_rssi_tag 2
143 | #define meshtastic_BluetoothConnectionStatus_is_connected_tag 3
144 | #define meshtastic_SerialConnectionStatus_baud_tag 1
145 | #define meshtastic_SerialConnectionStatus_is_connected_tag 2
146 | #define meshtastic_DeviceConnectionStatus_wifi_tag 1
147 | #define meshtastic_DeviceConnectionStatus_ethernet_tag 2
148 | #define meshtastic_DeviceConnectionStatus_bluetooth_tag 3
149 | #define meshtastic_DeviceConnectionStatus_serial_tag 4
150 |
151 | /* Struct field encoding specification for nanopb */
152 | #define meshtastic_DeviceConnectionStatus_FIELDLIST(X, a) \
153 | X(a, STATIC, OPTIONAL, MESSAGE, wifi, 1) \
154 | X(a, STATIC, OPTIONAL, MESSAGE, ethernet, 2) \
155 | X(a, STATIC, OPTIONAL, MESSAGE, bluetooth, 3) \
156 | X(a, STATIC, OPTIONAL, MESSAGE, serial, 4)
157 | #define meshtastic_DeviceConnectionStatus_CALLBACK NULL
158 | #define meshtastic_DeviceConnectionStatus_DEFAULT NULL
159 | #define meshtastic_DeviceConnectionStatus_wifi_MSGTYPE meshtastic_WifiConnectionStatus
160 | #define meshtastic_DeviceConnectionStatus_ethernet_MSGTYPE meshtastic_EthernetConnectionStatus
161 | #define meshtastic_DeviceConnectionStatus_bluetooth_MSGTYPE meshtastic_BluetoothConnectionStatus
162 | #define meshtastic_DeviceConnectionStatus_serial_MSGTYPE meshtastic_SerialConnectionStatus
163 |
164 | #define meshtastic_WifiConnectionStatus_FIELDLIST(X, a) \
165 | X(a, STATIC, OPTIONAL, MESSAGE, status, 1) \
166 | X(a, STATIC, SINGULAR, STRING, ssid, 2) \
167 | X(a, STATIC, SINGULAR, INT32, rssi, 3)
168 | #define meshtastic_WifiConnectionStatus_CALLBACK NULL
169 | #define meshtastic_WifiConnectionStatus_DEFAULT NULL
170 | #define meshtastic_WifiConnectionStatus_status_MSGTYPE meshtastic_NetworkConnectionStatus
171 |
172 | #define meshtastic_EthernetConnectionStatus_FIELDLIST(X, a) X(a, STATIC, OPTIONAL, MESSAGE, status, 1)
173 | #define meshtastic_EthernetConnectionStatus_CALLBACK NULL
174 | #define meshtastic_EthernetConnectionStatus_DEFAULT NULL
175 | #define meshtastic_EthernetConnectionStatus_status_MSGTYPE meshtastic_NetworkConnectionStatus
176 |
177 | #define meshtastic_NetworkConnectionStatus_FIELDLIST(X, a) \
178 | X(a, STATIC, SINGULAR, FIXED32, ip_address, 1) \
179 | X(a, STATIC, SINGULAR, BOOL, is_connected, 2) \
180 | X(a, STATIC, SINGULAR, BOOL, is_mqtt_connected, 3) \
181 | X(a, STATIC, SINGULAR, BOOL, is_syslog_connected, 4)
182 | #define meshtastic_NetworkConnectionStatus_CALLBACK NULL
183 | #define meshtastic_NetworkConnectionStatus_DEFAULT NULL
184 |
185 | #define meshtastic_BluetoothConnectionStatus_FIELDLIST(X, a) \
186 | X(a, STATIC, SINGULAR, UINT32, pin, 1) \
187 | X(a, STATIC, SINGULAR, INT32, rssi, 2) \
188 | X(a, STATIC, SINGULAR, BOOL, is_connected, 3)
189 | #define meshtastic_BluetoothConnectionStatus_CALLBACK NULL
190 | #define meshtastic_BluetoothConnectionStatus_DEFAULT NULL
191 |
192 | #define meshtastic_SerialConnectionStatus_FIELDLIST(X, a) \
193 | X(a, STATIC, SINGULAR, UINT32, baud, 1) \
194 | X(a, STATIC, SINGULAR, BOOL, is_connected, 2)
195 | #define meshtastic_SerialConnectionStatus_CALLBACK NULL
196 | #define meshtastic_SerialConnectionStatus_DEFAULT NULL
197 |
198 | extern const pb_msgdesc_t meshtastic_DeviceConnectionStatus_msg;
199 | extern const pb_msgdesc_t meshtastic_WifiConnectionStatus_msg;
200 | extern const pb_msgdesc_t meshtastic_EthernetConnectionStatus_msg;
201 | extern const pb_msgdesc_t meshtastic_NetworkConnectionStatus_msg;
202 | extern const pb_msgdesc_t meshtastic_BluetoothConnectionStatus_msg;
203 | extern const pb_msgdesc_t meshtastic_SerialConnectionStatus_msg;
204 |
205 | /* Defines for backwards compatibility with code written before nanopb-0.4.0 */
206 | #define meshtastic_DeviceConnectionStatus_fields &meshtastic_DeviceConnectionStatus_msg
207 | #define meshtastic_WifiConnectionStatus_fields &meshtastic_WifiConnectionStatus_msg
208 | #define meshtastic_EthernetConnectionStatus_fields &meshtastic_EthernetConnectionStatus_msg
209 | #define meshtastic_NetworkConnectionStatus_fields &meshtastic_NetworkConnectionStatus_msg
210 | #define meshtastic_BluetoothConnectionStatus_fields &meshtastic_BluetoothConnectionStatus_msg
211 | #define meshtastic_SerialConnectionStatus_fields &meshtastic_SerialConnectionStatus_msg
212 |
213 | /* Maximum encoded size of messages (where known) */
214 | #define MESHTASTIC_MESHTASTIC_CONNECTION_STATUS_PB_H_MAX_SIZE meshtastic_DeviceConnectionStatus_size
215 | #define meshtastic_BluetoothConnectionStatus_size 19
216 | #define meshtastic_DeviceConnectionStatus_size 106
217 | #define meshtastic_EthernetConnectionStatus_size 13
218 | #define meshtastic_NetworkConnectionStatus_size 11
219 | #define meshtastic_SerialConnectionStatus_size 8
220 | #define meshtastic_WifiConnectionStatus_size 58
221 |
222 | #ifdef __cplusplus
223 | } /* extern "C" */
224 | #endif
225 |
226 | #endif
227 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/device_ui.pb.cpp:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb constant definitions */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #include "meshtastic/device_ui.pb.h"
5 | #if PB_PROTO_HEADER_VERSION != 40
6 | #error Regenerate this file with the current version of nanopb generator.
7 | #endif
8 |
9 | PB_BIND(meshtastic_DeviceUIConfig, meshtastic_DeviceUIConfig, AUTO)
10 |
11 | PB_BIND(meshtastic_NodeFilter, meshtastic_NodeFilter, AUTO)
12 |
13 | PB_BIND(meshtastic_NodeHighlight, meshtastic_NodeHighlight, AUTO)
14 |
15 | PB_BIND(meshtastic_GeoPoint, meshtastic_GeoPoint, AUTO)
16 |
17 | PB_BIND(meshtastic_Map, meshtastic_Map, AUTO)
18 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/deviceonly.pb.cpp:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb constant definitions */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #include "meshtastic/deviceonly.pb.h"
5 | #if PB_PROTO_HEADER_VERSION != 40
6 | #error Regenerate this file with the current version of nanopb generator.
7 | #endif
8 |
9 | PB_BIND(meshtastic_PositionLite, meshtastic_PositionLite, AUTO)
10 |
11 | PB_BIND(meshtastic_UserLite, meshtastic_UserLite, AUTO)
12 |
13 | PB_BIND(meshtastic_NodeInfoLite, meshtastic_NodeInfoLite, AUTO)
14 |
15 | PB_BIND(meshtastic_DeviceState, meshtastic_DeviceState, 2)
16 |
17 | PB_BIND(meshtastic_NodeDatabase, meshtastic_NodeDatabase, AUTO)
18 |
19 | PB_BIND(meshtastic_ChannelFile, meshtastic_ChannelFile, 2)
20 |
21 | PB_BIND(meshtastic_BackupPreferences, meshtastic_BackupPreferences, 2)
22 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/interdevice.pb.cpp:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb constant definitions */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #include "meshtastic/interdevice.pb.h"
5 | #if PB_PROTO_HEADER_VERSION != 40
6 | #error Regenerate this file with the current version of nanopb generator.
7 | #endif
8 |
9 | PB_BIND(meshtastic_SensorData, meshtastic_SensorData, AUTO)
10 |
11 | PB_BIND(meshtastic_InterdeviceMessage, meshtastic_InterdeviceMessage, 2)
12 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/interdevice.pb.h:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb header */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #ifndef PB_MESHTASTIC_MESHTASTIC_INTERDEVICE_PB_H_INCLUDED
5 | #define PB_MESHTASTIC_MESHTASTIC_INTERDEVICE_PB_H_INCLUDED
6 | #include
7 |
8 | #if PB_PROTO_HEADER_VERSION != 40
9 | #error Regenerate this file with the current version of nanopb generator.
10 | #endif
11 |
12 | /* Enum definitions */
13 | typedef enum _meshtastic_MessageType {
14 | meshtastic_MessageType_ACK = 0,
15 | meshtastic_MessageType_COLLECT_INTERVAL = 160, /* in ms */
16 | meshtastic_MessageType_BEEP_ON = 161, /* duration ms */
17 | meshtastic_MessageType_BEEP_OFF = 162, /* cancel prematurely */
18 | meshtastic_MessageType_SHUTDOWN = 163,
19 | meshtastic_MessageType_POWER_ON = 164,
20 | meshtastic_MessageType_SCD41_TEMP = 176,
21 | meshtastic_MessageType_SCD41_HUMIDITY = 177,
22 | meshtastic_MessageType_SCD41_CO2 = 178,
23 | meshtastic_MessageType_AHT20_TEMP = 179,
24 | meshtastic_MessageType_AHT20_HUMIDITY = 180,
25 | meshtastic_MessageType_TVOC_INDEX = 181
26 | } meshtastic_MessageType;
27 |
28 | /* Struct definitions */
29 | typedef struct _meshtastic_SensorData {
30 | /* The message type */
31 | meshtastic_MessageType type;
32 | pb_size_t which_data;
33 | union _meshtastic_SensorData_data {
34 | float float_value;
35 | uint32_t uint32_value;
36 | } data;
37 | } meshtastic_SensorData;
38 |
39 | typedef struct _meshtastic_InterdeviceMessage {
40 | pb_size_t which_data;
41 | union _meshtastic_InterdeviceMessage_data {
42 | char nmea[1024];
43 | meshtastic_SensorData sensor;
44 | } data;
45 | } meshtastic_InterdeviceMessage;
46 |
47 | #ifdef __cplusplus
48 | extern "C" {
49 | #endif
50 |
51 | /* Helper constants for enums */
52 | #define _meshtastic_MessageType_MIN meshtastic_MessageType_ACK
53 | #define _meshtastic_MessageType_MAX meshtastic_MessageType_TVOC_INDEX
54 | #define _meshtastic_MessageType_ARRAYSIZE ((meshtastic_MessageType)(meshtastic_MessageType_TVOC_INDEX + 1))
55 |
56 | #define meshtastic_SensorData_type_ENUMTYPE meshtastic_MessageType
57 |
58 | /* Initializer values for message structs */
59 | #define meshtastic_SensorData_init_default \
60 | { \
61 | _meshtastic_MessageType_MIN, 0, \
62 | { \
63 | 0 \
64 | } \
65 | }
66 | #define meshtastic_InterdeviceMessage_init_default \
67 | { \
68 | 0, \
69 | { \
70 | "" \
71 | } \
72 | }
73 | #define meshtastic_SensorData_init_zero \
74 | { \
75 | _meshtastic_MessageType_MIN, 0, \
76 | { \
77 | 0 \
78 | } \
79 | }
80 | #define meshtastic_InterdeviceMessage_init_zero \
81 | { \
82 | 0, \
83 | { \
84 | "" \
85 | } \
86 | }
87 |
88 | /* Field tags (for use in manual encoding/decoding) */
89 | #define meshtastic_SensorData_type_tag 1
90 | #define meshtastic_SensorData_float_value_tag 2
91 | #define meshtastic_SensorData_uint32_value_tag 3
92 | #define meshtastic_InterdeviceMessage_nmea_tag 1
93 | #define meshtastic_InterdeviceMessage_sensor_tag 2
94 |
95 | /* Struct field encoding specification for nanopb */
96 | #define meshtastic_SensorData_FIELDLIST(X, a) \
97 | X(a, STATIC, SINGULAR, UENUM, type, 1) \
98 | X(a, STATIC, ONEOF, FLOAT, (data, float_value, data.float_value), 2) \
99 | X(a, STATIC, ONEOF, UINT32, (data, uint32_value, data.uint32_value), 3)
100 | #define meshtastic_SensorData_CALLBACK NULL
101 | #define meshtastic_SensorData_DEFAULT NULL
102 |
103 | #define meshtastic_InterdeviceMessage_FIELDLIST(X, a) \
104 | X(a, STATIC, ONEOF, STRING, (data, nmea, data.nmea), 1) \
105 | X(a, STATIC, ONEOF, MESSAGE, (data, sensor, data.sensor), 2)
106 | #define meshtastic_InterdeviceMessage_CALLBACK NULL
107 | #define meshtastic_InterdeviceMessage_DEFAULT NULL
108 | #define meshtastic_InterdeviceMessage_data_sensor_MSGTYPE meshtastic_SensorData
109 |
110 | extern const pb_msgdesc_t meshtastic_SensorData_msg;
111 | extern const pb_msgdesc_t meshtastic_InterdeviceMessage_msg;
112 |
113 | /* Defines for backwards compatibility with code written before nanopb-0.4.0 */
114 | #define meshtastic_SensorData_fields &meshtastic_SensorData_msg
115 | #define meshtastic_InterdeviceMessage_fields &meshtastic_InterdeviceMessage_msg
116 |
117 | /* Maximum encoded size of messages (where known) */
118 | #define MESHTASTIC_MESHTASTIC_INTERDEVICE_PB_H_MAX_SIZE meshtastic_InterdeviceMessage_size
119 | #define meshtastic_InterdeviceMessage_size 1026
120 | #define meshtastic_SensorData_size 9
121 |
122 | #ifdef __cplusplus
123 | } /* extern "C" */
124 | #endif
125 |
126 | #endif
127 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/localonly.pb.cpp:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb constant definitions */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #include "meshtastic/localonly.pb.h"
5 | #if PB_PROTO_HEADER_VERSION != 40
6 | #error Regenerate this file with the current version of nanopb generator.
7 | #endif
8 |
9 | PB_BIND(meshtastic_LocalConfig, meshtastic_LocalConfig, 2)
10 |
11 | PB_BIND(meshtastic_LocalModuleConfig, meshtastic_LocalModuleConfig, 2)
12 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/mesh.pb.cpp:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb constant definitions */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #include "meshtastic/mesh.pb.h"
5 | #if PB_PROTO_HEADER_VERSION != 40
6 | #error Regenerate this file with the current version of nanopb generator.
7 | #endif
8 |
9 | PB_BIND(meshtastic_Position, meshtastic_Position, AUTO)
10 |
11 | PB_BIND(meshtastic_User, meshtastic_User, AUTO)
12 |
13 | PB_BIND(meshtastic_RouteDiscovery, meshtastic_RouteDiscovery, AUTO)
14 |
15 | PB_BIND(meshtastic_Routing, meshtastic_Routing, AUTO)
16 |
17 | PB_BIND(meshtastic_Data, meshtastic_Data, 2)
18 |
19 | PB_BIND(meshtastic_Waypoint, meshtastic_Waypoint, AUTO)
20 |
21 | PB_BIND(meshtastic_MqttClientProxyMessage, meshtastic_MqttClientProxyMessage, 2)
22 |
23 | PB_BIND(meshtastic_MeshPacket, meshtastic_MeshPacket, 2)
24 |
25 | PB_BIND(meshtastic_NodeInfo, meshtastic_NodeInfo, 2)
26 |
27 | PB_BIND(meshtastic_MyNodeInfo, meshtastic_MyNodeInfo, AUTO)
28 |
29 | PB_BIND(meshtastic_LogRecord, meshtastic_LogRecord, 2)
30 |
31 | PB_BIND(meshtastic_QueueStatus, meshtastic_QueueStatus, AUTO)
32 |
33 | PB_BIND(meshtastic_FromRadio, meshtastic_FromRadio, 2)
34 |
35 | PB_BIND(meshtastic_ClientNotification, meshtastic_ClientNotification, 2)
36 |
37 | PB_BIND(meshtastic_FileInfo, meshtastic_FileInfo, AUTO)
38 |
39 | PB_BIND(meshtastic_ToRadio, meshtastic_ToRadio, 2)
40 |
41 | PB_BIND(meshtastic_Compressed, meshtastic_Compressed, AUTO)
42 |
43 | PB_BIND(meshtastic_NeighborInfo, meshtastic_NeighborInfo, AUTO)
44 |
45 | PB_BIND(meshtastic_Neighbor, meshtastic_Neighbor, AUTO)
46 |
47 | PB_BIND(meshtastic_DeviceMetadata, meshtastic_DeviceMetadata, AUTO)
48 |
49 | PB_BIND(meshtastic_Heartbeat, meshtastic_Heartbeat, AUTO)
50 |
51 | PB_BIND(meshtastic_NodeRemoteHardwarePin, meshtastic_NodeRemoteHardwarePin, AUTO)
52 |
53 | PB_BIND(meshtastic_ChunkedPayload, meshtastic_ChunkedPayload, AUTO)
54 |
55 | PB_BIND(meshtastic_resend_chunks, meshtastic_resend_chunks, AUTO)
56 |
57 | PB_BIND(meshtastic_ChunkedPayloadResponse, meshtastic_ChunkedPayloadResponse, AUTO)
58 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/module_config.pb.cpp:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb constant definitions */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #include "meshtastic/module_config.pb.h"
5 | #if PB_PROTO_HEADER_VERSION != 40
6 | #error Regenerate this file with the current version of nanopb generator.
7 | #endif
8 |
9 | PB_BIND(meshtastic_ModuleConfig, meshtastic_ModuleConfig, AUTO)
10 |
11 | PB_BIND(meshtastic_ModuleConfig_MQTTConfig, meshtastic_ModuleConfig_MQTTConfig, AUTO)
12 |
13 | PB_BIND(meshtastic_ModuleConfig_MapReportSettings, meshtastic_ModuleConfig_MapReportSettings, AUTO)
14 |
15 | PB_BIND(meshtastic_ModuleConfig_RemoteHardwareConfig, meshtastic_ModuleConfig_RemoteHardwareConfig, AUTO)
16 |
17 | PB_BIND(meshtastic_ModuleConfig_NeighborInfoConfig, meshtastic_ModuleConfig_NeighborInfoConfig, AUTO)
18 |
19 | PB_BIND(meshtastic_ModuleConfig_DetectionSensorConfig, meshtastic_ModuleConfig_DetectionSensorConfig, AUTO)
20 |
21 | PB_BIND(meshtastic_ModuleConfig_AudioConfig, meshtastic_ModuleConfig_AudioConfig, AUTO)
22 |
23 | PB_BIND(meshtastic_ModuleConfig_PaxcounterConfig, meshtastic_ModuleConfig_PaxcounterConfig, AUTO)
24 |
25 | PB_BIND(meshtastic_ModuleConfig_SerialConfig, meshtastic_ModuleConfig_SerialConfig, AUTO)
26 |
27 | PB_BIND(meshtastic_ModuleConfig_ExternalNotificationConfig, meshtastic_ModuleConfig_ExternalNotificationConfig, AUTO)
28 |
29 | PB_BIND(meshtastic_ModuleConfig_StoreForwardConfig, meshtastic_ModuleConfig_StoreForwardConfig, AUTO)
30 |
31 | PB_BIND(meshtastic_ModuleConfig_RangeTestConfig, meshtastic_ModuleConfig_RangeTestConfig, AUTO)
32 |
33 | PB_BIND(meshtastic_ModuleConfig_TelemetryConfig, meshtastic_ModuleConfig_TelemetryConfig, AUTO)
34 |
35 | PB_BIND(meshtastic_ModuleConfig_CannedMessageConfig, meshtastic_ModuleConfig_CannedMessageConfig, AUTO)
36 |
37 | PB_BIND(meshtastic_ModuleConfig_AmbientLightingConfig, meshtastic_ModuleConfig_AmbientLightingConfig, AUTO)
38 |
39 | PB_BIND(meshtastic_RemoteHardwarePin, meshtastic_RemoteHardwarePin, AUTO)
40 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/mqtt.pb.cpp:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb constant definitions */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #include "meshtastic/mqtt.pb.h"
5 | #if PB_PROTO_HEADER_VERSION != 40
6 | #error Regenerate this file with the current version of nanopb generator.
7 | #endif
8 |
9 | PB_BIND(meshtastic_ServiceEnvelope, meshtastic_ServiceEnvelope, AUTO)
10 |
11 | PB_BIND(meshtastic_MapReport, meshtastic_MapReport, AUTO)
12 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/mqtt.pb.h:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb header */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #ifndef PB_MESHTASTIC_MESHTASTIC_MQTT_PB_H_INCLUDED
5 | #define PB_MESHTASTIC_MESHTASTIC_MQTT_PB_H_INCLUDED
6 | #include "meshtastic/config.pb.h"
7 | #include "meshtastic/mesh.pb.h"
8 | #include
9 |
10 | #if PB_PROTO_HEADER_VERSION != 40
11 | #error Regenerate this file with the current version of nanopb generator.
12 | #endif
13 |
14 | /* Struct definitions */
15 | /* This message wraps a MeshPacket with extra metadata about the sender and how it arrived. */
16 | typedef struct _meshtastic_ServiceEnvelope {
17 | /* The (probably encrypted) packet */
18 | struct _meshtastic_MeshPacket *packet;
19 | /* The global channel ID it was sent on */
20 | char *channel_id;
21 | /* The sending gateway node ID. Can we use this to authenticate/prevent fake
22 | nodeid impersonation for senders? - i.e. use gateway/mesh id (which is authenticated) + local node id as
23 | the globally trusted nodenum */
24 | char *gateway_id;
25 | } meshtastic_ServiceEnvelope;
26 |
27 | /* Information about a node intended to be reported unencrypted to a map using MQTT. */
28 | typedef struct _meshtastic_MapReport {
29 | /* A full name for this user, i.e. "Kevin Hester" */
30 | char long_name[40];
31 | /* A VERY short name, ideally two characters.
32 | Suitable for a tiny OLED screen */
33 | char short_name[5];
34 | /* Role of the node that applies specific settings for a particular use-case */
35 | meshtastic_Config_DeviceConfig_Role role;
36 | /* Hardware model of the node, i.e. T-Beam, Heltec V3, etc... */
37 | meshtastic_HardwareModel hw_model;
38 | /* Device firmware version string */
39 | char firmware_version[18];
40 | /* The region code for the radio (US, CN, EU433, etc...) */
41 | meshtastic_Config_LoRaConfig_RegionCode region;
42 | /* Modem preset used by the radio (LongFast, MediumSlow, etc...) */
43 | meshtastic_Config_LoRaConfig_ModemPreset modem_preset;
44 | /* Whether the node has a channel with default PSK and name (LongFast, MediumSlow, etc...)
45 | and it uses the default frequency slot given the region and modem preset. */
46 | bool has_default_channel;
47 | /* Latitude: multiply by 1e-7 to get degrees in floating point */
48 | int32_t latitude_i;
49 | /* Longitude: multiply by 1e-7 to get degrees in floating point */
50 | int32_t longitude_i;
51 | /* Altitude in meters above MSL */
52 | int32_t altitude;
53 | /* Indicates the bits of precision for latitude and longitude set by the sending node */
54 | uint32_t position_precision;
55 | /* Number of online nodes (heard in the last 2 hours) this node has in its list that were received locally (not via MQTT) */
56 | uint16_t num_online_local_nodes;
57 | /* User has opted in to share their location (map report) with the mqtt server
58 | Controlled by map_report.should_report_location */
59 | bool has_opted_report_location;
60 | } meshtastic_MapReport;
61 |
62 | #ifdef __cplusplus
63 | extern "C" {
64 | #endif
65 |
66 | /* Initializer values for message structs */
67 | #define meshtastic_ServiceEnvelope_init_default \
68 | { \
69 | NULL, NULL, NULL \
70 | }
71 | #define meshtastic_MapReport_init_default \
72 | { \
73 | "", "", _meshtastic_Config_DeviceConfig_Role_MIN, _meshtastic_HardwareModel_MIN, "", \
74 | _meshtastic_Config_LoRaConfig_RegionCode_MIN, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, 0, 0, 0, 0, 0, 0, 0 \
75 | }
76 | #define meshtastic_ServiceEnvelope_init_zero \
77 | { \
78 | NULL, NULL, NULL \
79 | }
80 | #define meshtastic_MapReport_init_zero \
81 | { \
82 | "", "", _meshtastic_Config_DeviceConfig_Role_MIN, _meshtastic_HardwareModel_MIN, "", \
83 | _meshtastic_Config_LoRaConfig_RegionCode_MIN, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, 0, 0, 0, 0, 0, 0, 0 \
84 | }
85 |
86 | /* Field tags (for use in manual encoding/decoding) */
87 | #define meshtastic_ServiceEnvelope_packet_tag 1
88 | #define meshtastic_ServiceEnvelope_channel_id_tag 2
89 | #define meshtastic_ServiceEnvelope_gateway_id_tag 3
90 | #define meshtastic_MapReport_long_name_tag 1
91 | #define meshtastic_MapReport_short_name_tag 2
92 | #define meshtastic_MapReport_role_tag 3
93 | #define meshtastic_MapReport_hw_model_tag 4
94 | #define meshtastic_MapReport_firmware_version_tag 5
95 | #define meshtastic_MapReport_region_tag 6
96 | #define meshtastic_MapReport_modem_preset_tag 7
97 | #define meshtastic_MapReport_has_default_channel_tag 8
98 | #define meshtastic_MapReport_latitude_i_tag 9
99 | #define meshtastic_MapReport_longitude_i_tag 10
100 | #define meshtastic_MapReport_altitude_tag 11
101 | #define meshtastic_MapReport_position_precision_tag 12
102 | #define meshtastic_MapReport_num_online_local_nodes_tag 13
103 | #define meshtastic_MapReport_has_opted_report_location_tag 14
104 |
105 | /* Struct field encoding specification for nanopb */
106 | #define meshtastic_ServiceEnvelope_FIELDLIST(X, a) \
107 | X(a, POINTER, OPTIONAL, MESSAGE, packet, 1) \
108 | X(a, POINTER, SINGULAR, STRING, channel_id, 2) \
109 | X(a, POINTER, SINGULAR, STRING, gateway_id, 3)
110 | #define meshtastic_ServiceEnvelope_CALLBACK NULL
111 | #define meshtastic_ServiceEnvelope_DEFAULT NULL
112 | #define meshtastic_ServiceEnvelope_packet_MSGTYPE meshtastic_MeshPacket
113 |
114 | #define meshtastic_MapReport_FIELDLIST(X, a) \
115 | X(a, STATIC, SINGULAR, STRING, long_name, 1) \
116 | X(a, STATIC, SINGULAR, STRING, short_name, 2) \
117 | X(a, STATIC, SINGULAR, UENUM, role, 3) \
118 | X(a, STATIC, SINGULAR, UENUM, hw_model, 4) \
119 | X(a, STATIC, SINGULAR, STRING, firmware_version, 5) \
120 | X(a, STATIC, SINGULAR, UENUM, region, 6) \
121 | X(a, STATIC, SINGULAR, UENUM, modem_preset, 7) \
122 | X(a, STATIC, SINGULAR, BOOL, has_default_channel, 8) \
123 | X(a, STATIC, SINGULAR, SFIXED32, latitude_i, 9) \
124 | X(a, STATIC, SINGULAR, SFIXED32, longitude_i, 10) \
125 | X(a, STATIC, SINGULAR, INT32, altitude, 11) \
126 | X(a, STATIC, SINGULAR, UINT32, position_precision, 12) \
127 | X(a, STATIC, SINGULAR, UINT32, num_online_local_nodes, 13) \
128 | X(a, STATIC, SINGULAR, BOOL, has_opted_report_location, 14)
129 | #define meshtastic_MapReport_CALLBACK NULL
130 | #define meshtastic_MapReport_DEFAULT NULL
131 |
132 | extern const pb_msgdesc_t meshtastic_ServiceEnvelope_msg;
133 | extern const pb_msgdesc_t meshtastic_MapReport_msg;
134 |
135 | /* Defines for backwards compatibility with code written before nanopb-0.4.0 */
136 | #define meshtastic_ServiceEnvelope_fields &meshtastic_ServiceEnvelope_msg
137 | #define meshtastic_MapReport_fields &meshtastic_MapReport_msg
138 |
139 | /* Maximum encoded size of messages (where known) */
140 | /* meshtastic_ServiceEnvelope_size depends on runtime parameters */
141 | #define MESHTASTIC_MESHTASTIC_MQTT_PB_H_MAX_SIZE meshtastic_MapReport_size
142 | #define meshtastic_MapReport_size 110
143 |
144 | #ifdef __cplusplus
145 | } /* extern "C" */
146 | #endif
147 |
148 | #endif
149 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/paxcount.pb.cpp:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb constant definitions */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #include "meshtastic/paxcount.pb.h"
5 | #if PB_PROTO_HEADER_VERSION != 40
6 | #error Regenerate this file with the current version of nanopb generator.
7 | #endif
8 |
9 | PB_BIND(meshtastic_Paxcount, meshtastic_Paxcount, AUTO)
10 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/paxcount.pb.h:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb header */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #ifndef PB_MESHTASTIC_MESHTASTIC_PAXCOUNT_PB_H_INCLUDED
5 | #define PB_MESHTASTIC_MESHTASTIC_PAXCOUNT_PB_H_INCLUDED
6 | #include
7 |
8 | #if PB_PROTO_HEADER_VERSION != 40
9 | #error Regenerate this file with the current version of nanopb generator.
10 | #endif
11 |
12 | /* Struct definitions */
13 | /* TODO: REPLACE */
14 | typedef struct _meshtastic_Paxcount {
15 | /* seen Wifi devices */
16 | uint32_t wifi;
17 | /* Seen BLE devices */
18 | uint32_t ble;
19 | /* Uptime in seconds */
20 | uint32_t uptime;
21 | } meshtastic_Paxcount;
22 |
23 | #ifdef __cplusplus
24 | extern "C" {
25 | #endif
26 |
27 | /* Initializer values for message structs */
28 | #define meshtastic_Paxcount_init_default \
29 | { \
30 | 0, 0, 0 \
31 | }
32 | #define meshtastic_Paxcount_init_zero \
33 | { \
34 | 0, 0, 0 \
35 | }
36 |
37 | /* Field tags (for use in manual encoding/decoding) */
38 | #define meshtastic_Paxcount_wifi_tag 1
39 | #define meshtastic_Paxcount_ble_tag 2
40 | #define meshtastic_Paxcount_uptime_tag 3
41 |
42 | /* Struct field encoding specification for nanopb */
43 | #define meshtastic_Paxcount_FIELDLIST(X, a) \
44 | X(a, STATIC, SINGULAR, UINT32, wifi, 1) \
45 | X(a, STATIC, SINGULAR, UINT32, ble, 2) \
46 | X(a, STATIC, SINGULAR, UINT32, uptime, 3)
47 | #define meshtastic_Paxcount_CALLBACK NULL
48 | #define meshtastic_Paxcount_DEFAULT NULL
49 |
50 | extern const pb_msgdesc_t meshtastic_Paxcount_msg;
51 |
52 | /* Defines for backwards compatibility with code written before nanopb-0.4.0 */
53 | #define meshtastic_Paxcount_fields &meshtastic_Paxcount_msg
54 |
55 | /* Maximum encoded size of messages (where known) */
56 | #define MESHTASTIC_MESHTASTIC_PAXCOUNT_PB_H_MAX_SIZE meshtastic_Paxcount_size
57 | #define meshtastic_Paxcount_size 18
58 |
59 | #ifdef __cplusplus
60 | } /* extern "C" */
61 | #endif
62 |
63 | #endif
64 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/portnums.pb.cpp:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb constant definitions */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #include "meshtastic/portnums.pb.h"
5 | #if PB_PROTO_HEADER_VERSION != 40
6 | #error Regenerate this file with the current version of nanopb generator.
7 | #endif
8 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/portnums.pb.h:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb header */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #ifndef PB_MESHTASTIC_MESHTASTIC_PORTNUMS_PB_H_INCLUDED
5 | #define PB_MESHTASTIC_MESHTASTIC_PORTNUMS_PB_H_INCLUDED
6 | #include
7 |
8 | #if PB_PROTO_HEADER_VERSION != 40
9 | #error Regenerate this file with the current version of nanopb generator.
10 | #endif
11 |
12 | /* Enum definitions */
13 | /* For any new 'apps' that run on the device or via sister apps on phones/PCs they should pick and use a
14 | unique 'portnum' for their application.
15 | If you are making a new app using meshtastic, please send in a pull request to add your 'portnum' to this
16 | master table.
17 | PortNums should be assigned in the following range:
18 | 0-63 Core Meshtastic use, do not use for third party apps
19 | 64-127 Registered 3rd party apps, send in a pull request that adds a new entry to portnums.proto to register your application
20 | 256-511 Use one of these portnums for your private applications that you don't want to register publically
21 | All other values are reserved.
22 | Note: This was formerly a Type enum named 'typ' with the same id #
23 | We have change to this 'portnum' based scheme for specifying app handlers for particular payloads.
24 | This change is backwards compatible by treating the legacy OPAQUE/CLEAR_TEXT values identically. */
25 | typedef enum _meshtastic_PortNum {
26 | /* Deprecated: do not use in new code (formerly called OPAQUE)
27 | A message sent from a device outside of the mesh, in a form the mesh does not understand
28 | NOTE: This must be 0, because it is documented in IMeshService.aidl to be so
29 | ENCODING: binary undefined */
30 | meshtastic_PortNum_UNKNOWN_APP = 0,
31 | /* A simple UTF-8 text message, which even the little micros in the mesh
32 | can understand and show on their screen eventually in some circumstances
33 | even signal might send messages in this form (see below)
34 | ENCODING: UTF-8 Plaintext (?) */
35 | meshtastic_PortNum_TEXT_MESSAGE_APP = 1,
36 | /* Reserved for built-in GPIO/example app.
37 | See remote_hardware.proto/HardwareMessage for details on the message sent/received to this port number
38 | ENCODING: Protobuf */
39 | meshtastic_PortNum_REMOTE_HARDWARE_APP = 2,
40 | /* The built-in position messaging app.
41 | Payload is a Position message.
42 | ENCODING: Protobuf */
43 | meshtastic_PortNum_POSITION_APP = 3,
44 | /* The built-in user info app.
45 | Payload is a User message.
46 | ENCODING: Protobuf */
47 | meshtastic_PortNum_NODEINFO_APP = 4,
48 | /* Protocol control packets for mesh protocol use.
49 | Payload is a Routing message.
50 | ENCODING: Protobuf */
51 | meshtastic_PortNum_ROUTING_APP = 5,
52 | /* Admin control packets.
53 | Payload is a AdminMessage message.
54 | ENCODING: Protobuf */
55 | meshtastic_PortNum_ADMIN_APP = 6,
56 | /* Compressed TEXT_MESSAGE payloads.
57 | ENCODING: UTF-8 Plaintext (?) with Unishox2 Compression
58 | NOTE: The Device Firmware converts a TEXT_MESSAGE_APP to TEXT_MESSAGE_COMPRESSED_APP if the compressed
59 | payload is shorter. There's no need for app developers to do this themselves. Also the firmware will decompress
60 | any incoming TEXT_MESSAGE_COMPRESSED_APP payload and convert to TEXT_MESSAGE_APP. */
61 | meshtastic_PortNum_TEXT_MESSAGE_COMPRESSED_APP = 7,
62 | /* Waypoint payloads.
63 | Payload is a Waypoint message.
64 | ENCODING: Protobuf */
65 | meshtastic_PortNum_WAYPOINT_APP = 8,
66 | /* Audio Payloads.
67 | Encapsulated codec2 packets. On 2.4 GHZ Bandwidths only for now
68 | ENCODING: codec2 audio frames
69 | NOTE: audio frames contain a 3 byte header (0xc0 0xde 0xc2) and a one byte marker for the decompressed bitrate.
70 | This marker comes from the 'moduleConfig.audio.bitrate' enum minus one. */
71 | meshtastic_PortNum_AUDIO_APP = 9,
72 | /* Same as Text Message but originating from Detection Sensor Module.
73 | NOTE: This portnum traffic is not sent to the public MQTT starting at firmware version 2.2.9 */
74 | meshtastic_PortNum_DETECTION_SENSOR_APP = 10,
75 | /* Same as Text Message but used for critical alerts. */
76 | meshtastic_PortNum_ALERT_APP = 11,
77 | /* Provides a 'ping' service that replies to any packet it receives.
78 | Also serves as a small example module.
79 | ENCODING: ASCII Plaintext */
80 | meshtastic_PortNum_REPLY_APP = 32,
81 | /* Used for the python IP tunnel feature
82 | ENCODING: IP Packet. Handled by the python API, firmware ignores this one and pases on. */
83 | meshtastic_PortNum_IP_TUNNEL_APP = 33,
84 | /* Paxcounter lib included in the firmware
85 | ENCODING: protobuf */
86 | meshtastic_PortNum_PAXCOUNTER_APP = 34,
87 | /* Provides a hardware serial interface to send and receive from the Meshtastic network.
88 | Connect to the RX/TX pins of a device with 38400 8N1. Packets received from the Meshtastic
89 | network is forwarded to the RX pin while sending a packet to TX will go out to the Mesh network.
90 | Maximum packet size of 240 bytes.
91 | Module is disabled by default can be turned on by setting SERIAL_MODULE_ENABLED = 1 in SerialPlugh.cpp.
92 | ENCODING: binary undefined */
93 | meshtastic_PortNum_SERIAL_APP = 64,
94 | /* STORE_FORWARD_APP (Work in Progress)
95 | Maintained by Jm Casler (MC Hamster) : jm@casler.org
96 | ENCODING: Protobuf */
97 | meshtastic_PortNum_STORE_FORWARD_APP = 65,
98 | /* Optional port for messages for the range test module.
99 | ENCODING: ASCII Plaintext
100 | NOTE: This portnum traffic is not sent to the public MQTT starting at firmware version 2.2.9 */
101 | meshtastic_PortNum_RANGE_TEST_APP = 66,
102 | /* Provides a format to send and receive telemetry data from the Meshtastic network.
103 | Maintained by Charles Crossan (crossan007) : crossan007@gmail.com
104 | ENCODING: Protobuf */
105 | meshtastic_PortNum_TELEMETRY_APP = 67,
106 | /* Experimental tools for estimating node position without a GPS
107 | Maintained by Github user a-f-G-U-C (a Meshtastic contributor)
108 | Project files at https://github.com/a-f-G-U-C/Meshtastic-ZPS
109 | ENCODING: arrays of int64 fields */
110 | meshtastic_PortNum_ZPS_APP = 68,
111 | /* Used to let multiple instances of Linux native applications communicate
112 | as if they did using their LoRa chip.
113 | Maintained by GitHub user GUVWAF.
114 | Project files at https://github.com/GUVWAF/Meshtasticator
115 | ENCODING: Protobuf (?) */
116 | meshtastic_PortNum_SIMULATOR_APP = 69,
117 | /* Provides a traceroute functionality to show the route a packet towards
118 | a certain destination would take on the mesh. Contains a RouteDiscovery message as payload.
119 | ENCODING: Protobuf */
120 | meshtastic_PortNum_TRACEROUTE_APP = 70,
121 | /* Aggregates edge info for the network by sending out a list of each node's neighbors
122 | ENCODING: Protobuf */
123 | meshtastic_PortNum_NEIGHBORINFO_APP = 71,
124 | /* ATAK Plugin
125 | Portnum for payloads from the official Meshtastic ATAK plugin */
126 | meshtastic_PortNum_ATAK_PLUGIN = 72,
127 | /* Provides unencrypted information about a node for consumption by a map via MQTT */
128 | meshtastic_PortNum_MAP_REPORT_APP = 73,
129 | /* PowerStress based monitoring support (for automated power consumption testing) */
130 | meshtastic_PortNum_POWERSTRESS_APP = 74,
131 | /* Reticulum Network Stack Tunnel App
132 | ENCODING: Fragmented RNS Packet. Handled by Meshtastic RNS interface */
133 | meshtastic_PortNum_RETICULUM_TUNNEL_APP = 76,
134 | /* Private applications should use portnums >= 256.
135 | To simplify initial development and testing you can use "PRIVATE_APP"
136 | in your code without needing to rebuild protobuf files (via
137 | [regen-protos.sh](https://github.com/meshtastic/firmware/blob/master/bin/regen-protos.sh)) */
138 | meshtastic_PortNum_PRIVATE_APP = 256,
139 | /* ATAK Forwarder Module https://github.com/paulmandal/atak-forwarder
140 | ENCODING: libcotshrink */
141 | meshtastic_PortNum_ATAK_FORWARDER = 257,
142 | /* Currently we limit port nums to no higher than this value */
143 | meshtastic_PortNum_MAX = 511
144 | } meshtastic_PortNum;
145 |
146 | #ifdef __cplusplus
147 | extern "C" {
148 | #endif
149 |
150 | /* Helper constants for enums */
151 | #define _meshtastic_PortNum_MIN meshtastic_PortNum_UNKNOWN_APP
152 | #define _meshtastic_PortNum_MAX meshtastic_PortNum_MAX
153 | #define _meshtastic_PortNum_ARRAYSIZE ((meshtastic_PortNum)(meshtastic_PortNum_MAX + 1))
154 |
155 | #ifdef __cplusplus
156 | } /* extern "C" */
157 | #endif
158 |
159 | #endif
160 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/powermon.pb.cpp:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb constant definitions */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #include "meshtastic/powermon.pb.h"
5 | #if PB_PROTO_HEADER_VERSION != 40
6 | #error Regenerate this file with the current version of nanopb generator.
7 | #endif
8 |
9 | PB_BIND(meshtastic_PowerMon, meshtastic_PowerMon, AUTO)
10 |
11 | PB_BIND(meshtastic_PowerStressMessage, meshtastic_PowerStressMessage, AUTO)
12 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/powermon.pb.h:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb header */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #ifndef PB_MESHTASTIC_MESHTASTIC_POWERMON_PB_H_INCLUDED
5 | #define PB_MESHTASTIC_MESHTASTIC_POWERMON_PB_H_INCLUDED
6 | #include
7 |
8 | #if PB_PROTO_HEADER_VERSION != 40
9 | #error Regenerate this file with the current version of nanopb generator.
10 | #endif
11 |
12 | /* Enum definitions */
13 | /* Any significant power changing event in meshtastic should be tagged with a powermon state transition.
14 | If you are making new meshtastic features feel free to add new entries at the end of this definition. */
15 | typedef enum _meshtastic_PowerMon_State {
16 | meshtastic_PowerMon_State_None = 0,
17 | meshtastic_PowerMon_State_CPU_DeepSleep = 1,
18 | meshtastic_PowerMon_State_CPU_LightSleep = 2,
19 | /* The external Vext1 power is on. Many boards have auxillary power rails that the CPU turns on only
20 | occasionally. In cases where that rail has multiple devices on it we usually want to have logging on
21 | the state of that rail as an independent record.
22 | For instance on the Heltec Tracker 1.1 board, this rail is the power source for the GPS and screen.
23 |
24 | The log messages will be short and complete (see PowerMon.Event in the protobufs for details).
25 | something like "S:PM:C,0x00001234,REASON" where the hex number is the bitmask of all current states.
26 | (We use a bitmask for states so that if a log message gets lost it won't be fatal) */
27 | meshtastic_PowerMon_State_Vext1_On = 4,
28 | meshtastic_PowerMon_State_Lora_RXOn = 8,
29 | meshtastic_PowerMon_State_Lora_TXOn = 16,
30 | meshtastic_PowerMon_State_Lora_RXActive = 32,
31 | meshtastic_PowerMon_State_BT_On = 64,
32 | meshtastic_PowerMon_State_LED_On = 128,
33 | meshtastic_PowerMon_State_Screen_On = 256,
34 | meshtastic_PowerMon_State_Screen_Drawing = 512,
35 | meshtastic_PowerMon_State_Wifi_On = 1024,
36 | /* GPS is actively trying to find our location
37 | See GPSPowerState for more details */
38 | meshtastic_PowerMon_State_GPS_Active = 2048
39 | } meshtastic_PowerMon_State;
40 |
41 | /* What operation would we like the UUT to perform.
42 | note: senders should probably set want_response in their request packets, so that they can know when the state
43 | machine has started processing their request */
44 | typedef enum _meshtastic_PowerStressMessage_Opcode {
45 | /* Unset/unused */
46 | meshtastic_PowerStressMessage_Opcode_UNSET = 0,
47 | meshtastic_PowerStressMessage_Opcode_PRINT_INFO =
48 | 1, /* Print board version slog and send an ack that we are alive and ready to process commands */
49 | meshtastic_PowerStressMessage_Opcode_FORCE_QUIET = 2, /* Try to turn off all automatic processing of packets, screen,
50 | sleeping, etc (to make it easier to measure in isolation) */
51 | meshtastic_PowerStressMessage_Opcode_END_QUIET = 3, /* Stop powerstress processing - probably by just rebooting the board */
52 | meshtastic_PowerStressMessage_Opcode_SCREEN_ON = 16, /* Turn the screen on */
53 | meshtastic_PowerStressMessage_Opcode_SCREEN_OFF = 17, /* Turn the screen off */
54 | meshtastic_PowerStressMessage_Opcode_CPU_IDLE = 32, /* Let the CPU run but we assume mostly idling for num_seconds */
55 | meshtastic_PowerStressMessage_Opcode_CPU_DEEPSLEEP = 33, /* Force deep sleep for FIXME seconds */
56 | meshtastic_PowerStressMessage_Opcode_CPU_FULLON = 34, /* Spin the CPU as fast as possible for num_seconds */
57 | meshtastic_PowerStressMessage_Opcode_LED_ON =
58 | 48, /* Turn the LED on for num_seconds (and leave it on - for baseline power measurement purposes) */
59 | meshtastic_PowerStressMessage_Opcode_LED_OFF = 49, /* Force the LED off for num_seconds */
60 | meshtastic_PowerStressMessage_Opcode_LORA_OFF = 64, /* Completely turn off the LORA radio for num_seconds */
61 | meshtastic_PowerStressMessage_Opcode_LORA_TX = 65, /* Send Lora packets for num_seconds */
62 | meshtastic_PowerStressMessage_Opcode_LORA_RX =
63 | 66, /* Receive Lora packets for num_seconds (node will be mostly just listening, unless an external agent is helping
64 | stress this by sending packets on the current channel) */
65 | meshtastic_PowerStressMessage_Opcode_BT_OFF = 80, /* Turn off the BT radio for num_seconds */
66 | meshtastic_PowerStressMessage_Opcode_BT_ON = 81, /* Turn on the BT radio for num_seconds */
67 | meshtastic_PowerStressMessage_Opcode_WIFI_OFF = 96, /* Turn off the WIFI radio for num_seconds */
68 | meshtastic_PowerStressMessage_Opcode_WIFI_ON = 97, /* Turn on the WIFI radio for num_seconds */
69 | meshtastic_PowerStressMessage_Opcode_GPS_OFF = 112, /* Turn off the GPS radio for num_seconds */
70 | meshtastic_PowerStressMessage_Opcode_GPS_ON = 113 /* Turn on the GPS radio for num_seconds */
71 | } meshtastic_PowerStressMessage_Opcode;
72 |
73 | /* Struct definitions */
74 | /* Note: There are no 'PowerMon' messages normally in use (PowerMons are sent only as structured logs - slogs).
75 | But we wrap our State enum in this message to effectively nest a namespace (without our linter yelling at us) */
76 | typedef struct _meshtastic_PowerMon {
77 | char dummy_field;
78 | } meshtastic_PowerMon;
79 |
80 | /* PowerStress testing support via the C++ PowerStress module */
81 | typedef struct _meshtastic_PowerStressMessage {
82 | /* What type of HardwareMessage is this? */
83 | meshtastic_PowerStressMessage_Opcode cmd;
84 | float num_seconds;
85 | } meshtastic_PowerStressMessage;
86 |
87 | #ifdef __cplusplus
88 | extern "C" {
89 | #endif
90 |
91 | /* Helper constants for enums */
92 | #define _meshtastic_PowerMon_State_MIN meshtastic_PowerMon_State_None
93 | #define _meshtastic_PowerMon_State_MAX meshtastic_PowerMon_State_GPS_Active
94 | #define _meshtastic_PowerMon_State_ARRAYSIZE ((meshtastic_PowerMon_State)(meshtastic_PowerMon_State_GPS_Active + 1))
95 |
96 | #define _meshtastic_PowerStressMessage_Opcode_MIN meshtastic_PowerStressMessage_Opcode_UNSET
97 | #define _meshtastic_PowerStressMessage_Opcode_MAX meshtastic_PowerStressMessage_Opcode_GPS_ON
98 | #define _meshtastic_PowerStressMessage_Opcode_ARRAYSIZE \
99 | ((meshtastic_PowerStressMessage_Opcode)(meshtastic_PowerStressMessage_Opcode_GPS_ON + 1))
100 |
101 | #define meshtastic_PowerStressMessage_cmd_ENUMTYPE meshtastic_PowerStressMessage_Opcode
102 |
103 | /* Initializer values for message structs */
104 | #define meshtastic_PowerMon_init_default \
105 | { \
106 | 0 \
107 | }
108 | #define meshtastic_PowerStressMessage_init_default \
109 | { \
110 | _meshtastic_PowerStressMessage_Opcode_MIN, 0 \
111 | }
112 | #define meshtastic_PowerMon_init_zero \
113 | { \
114 | 0 \
115 | }
116 | #define meshtastic_PowerStressMessage_init_zero \
117 | { \
118 | _meshtastic_PowerStressMessage_Opcode_MIN, 0 \
119 | }
120 |
121 | /* Field tags (for use in manual encoding/decoding) */
122 | #define meshtastic_PowerStressMessage_cmd_tag 1
123 | #define meshtastic_PowerStressMessage_num_seconds_tag 2
124 |
125 | /* Struct field encoding specification for nanopb */
126 | #define meshtastic_PowerMon_FIELDLIST(X, a)
127 |
128 | #define meshtastic_PowerMon_CALLBACK NULL
129 | #define meshtastic_PowerMon_DEFAULT NULL
130 |
131 | #define meshtastic_PowerStressMessage_FIELDLIST(X, a) \
132 | X(a, STATIC, SINGULAR, UENUM, cmd, 1) \
133 | X(a, STATIC, SINGULAR, FLOAT, num_seconds, 2)
134 | #define meshtastic_PowerStressMessage_CALLBACK NULL
135 | #define meshtastic_PowerStressMessage_DEFAULT NULL
136 |
137 | extern const pb_msgdesc_t meshtastic_PowerMon_msg;
138 | extern const pb_msgdesc_t meshtastic_PowerStressMessage_msg;
139 |
140 | /* Defines for backwards compatibility with code written before nanopb-0.4.0 */
141 | #define meshtastic_PowerMon_fields &meshtastic_PowerMon_msg
142 | #define meshtastic_PowerStressMessage_fields &meshtastic_PowerStressMessage_msg
143 |
144 | /* Maximum encoded size of messages (where known) */
145 | #define MESHTASTIC_MESHTASTIC_POWERMON_PB_H_MAX_SIZE meshtastic_PowerStressMessage_size
146 | #define meshtastic_PowerMon_size 0
147 | #define meshtastic_PowerStressMessage_size 7
148 |
149 | #ifdef __cplusplus
150 | } /* extern "C" */
151 | #endif
152 |
153 | #endif
154 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/remote_hardware.pb.cpp:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb constant definitions */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #include "meshtastic/remote_hardware.pb.h"
5 | #if PB_PROTO_HEADER_VERSION != 40
6 | #error Regenerate this file with the current version of nanopb generator.
7 | #endif
8 |
9 | PB_BIND(meshtastic_HardwareMessage, meshtastic_HardwareMessage, AUTO)
10 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/remote_hardware.pb.h:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb header */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #ifndef PB_MESHTASTIC_MESHTASTIC_REMOTE_HARDWARE_PB_H_INCLUDED
5 | #define PB_MESHTASTIC_MESHTASTIC_REMOTE_HARDWARE_PB_H_INCLUDED
6 | #include
7 |
8 | #if PB_PROTO_HEADER_VERSION != 40
9 | #error Regenerate this file with the current version of nanopb generator.
10 | #endif
11 |
12 | /* Enum definitions */
13 | /* TODO: REPLACE */
14 | typedef enum _meshtastic_HardwareMessage_Type {
15 | /* Unset/unused */
16 | meshtastic_HardwareMessage_Type_UNSET = 0,
17 | /* Set gpio gpios based on gpio_mask/gpio_value */
18 | meshtastic_HardwareMessage_Type_WRITE_GPIOS = 1,
19 | /* We are now interested in watching the gpio_mask gpios.
20 | If the selected gpios change, please broadcast GPIOS_CHANGED.
21 | Will implicitly change the gpios requested to be INPUT gpios. */
22 | meshtastic_HardwareMessage_Type_WATCH_GPIOS = 2,
23 | /* The gpios listed in gpio_mask have changed, the new values are listed in gpio_value */
24 | meshtastic_HardwareMessage_Type_GPIOS_CHANGED = 3,
25 | /* Read the gpios specified in gpio_mask, send back a READ_GPIOS_REPLY reply with gpio_value populated */
26 | meshtastic_HardwareMessage_Type_READ_GPIOS = 4,
27 | /* A reply to READ_GPIOS. gpio_mask and gpio_value will be populated */
28 | meshtastic_HardwareMessage_Type_READ_GPIOS_REPLY = 5
29 | } meshtastic_HardwareMessage_Type;
30 |
31 | /* Struct definitions */
32 | /* An example app to show off the module system. This message is used for
33 | REMOTE_HARDWARE_APP PortNums.
34 | Also provides easy remote access to any GPIO.
35 | In the future other remote hardware operations can be added based on user interest
36 | (i.e. serial output, spi/i2c input/output).
37 | FIXME - currently this feature is turned on by default which is dangerous
38 | because no security yet (beyond the channel mechanism).
39 | It should be off by default and then protected based on some TBD mechanism
40 | (a special channel once multichannel support is included?) */
41 | typedef struct _meshtastic_HardwareMessage {
42 | /* What type of HardwareMessage is this? */
43 | meshtastic_HardwareMessage_Type type;
44 | /* What gpios are we changing. Not used for all MessageTypes, see MessageType for details */
45 | uint64_t gpio_mask;
46 | /* For gpios that were listed in gpio_mask as valid, what are the signal levels for those gpios.
47 | Not used for all MessageTypes, see MessageType for details */
48 | uint64_t gpio_value;
49 | } meshtastic_HardwareMessage;
50 |
51 | #ifdef __cplusplus
52 | extern "C" {
53 | #endif
54 |
55 | /* Helper constants for enums */
56 | #define _meshtastic_HardwareMessage_Type_MIN meshtastic_HardwareMessage_Type_UNSET
57 | #define _meshtastic_HardwareMessage_Type_MAX meshtastic_HardwareMessage_Type_READ_GPIOS_REPLY
58 | #define _meshtastic_HardwareMessage_Type_ARRAYSIZE \
59 | ((meshtastic_HardwareMessage_Type)(meshtastic_HardwareMessage_Type_READ_GPIOS_REPLY + 1))
60 |
61 | #define meshtastic_HardwareMessage_type_ENUMTYPE meshtastic_HardwareMessage_Type
62 |
63 | /* Initializer values for message structs */
64 | #define meshtastic_HardwareMessage_init_default \
65 | { \
66 | _meshtastic_HardwareMessage_Type_MIN, 0, 0 \
67 | }
68 | #define meshtastic_HardwareMessage_init_zero \
69 | { \
70 | _meshtastic_HardwareMessage_Type_MIN, 0, 0 \
71 | }
72 |
73 | /* Field tags (for use in manual encoding/decoding) */
74 | #define meshtastic_HardwareMessage_type_tag 1
75 | #define meshtastic_HardwareMessage_gpio_mask_tag 2
76 | #define meshtastic_HardwareMessage_gpio_value_tag 3
77 |
78 | /* Struct field encoding specification for nanopb */
79 | #define meshtastic_HardwareMessage_FIELDLIST(X, a) \
80 | X(a, STATIC, SINGULAR, UENUM, type, 1) \
81 | X(a, STATIC, SINGULAR, UINT64, gpio_mask, 2) \
82 | X(a, STATIC, SINGULAR, UINT64, gpio_value, 3)
83 | #define meshtastic_HardwareMessage_CALLBACK NULL
84 | #define meshtastic_HardwareMessage_DEFAULT NULL
85 |
86 | extern const pb_msgdesc_t meshtastic_HardwareMessage_msg;
87 |
88 | /* Defines for backwards compatibility with code written before nanopb-0.4.0 */
89 | #define meshtastic_HardwareMessage_fields &meshtastic_HardwareMessage_msg
90 |
91 | /* Maximum encoded size of messages (where known) */
92 | #define MESHTASTIC_MESHTASTIC_REMOTE_HARDWARE_PB_H_MAX_SIZE meshtastic_HardwareMessage_size
93 | #define meshtastic_HardwareMessage_size 24
94 |
95 | #ifdef __cplusplus
96 | } /* extern "C" */
97 | #endif
98 |
99 | #endif
100 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/rtttl.pb.cpp:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb constant definitions */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #include "meshtastic/rtttl.pb.h"
5 | #if PB_PROTO_HEADER_VERSION != 40
6 | #error Regenerate this file with the current version of nanopb generator.
7 | #endif
8 |
9 | PB_BIND(meshtastic_RTTTLConfig, meshtastic_RTTTLConfig, AUTO)
10 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/rtttl.pb.h:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb header */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #ifndef PB_MESHTASTIC_MESHTASTIC_RTTTL_PB_H_INCLUDED
5 | #define PB_MESHTASTIC_MESHTASTIC_RTTTL_PB_H_INCLUDED
6 | #include
7 |
8 | #if PB_PROTO_HEADER_VERSION != 40
9 | #error Regenerate this file with the current version of nanopb generator.
10 | #endif
11 |
12 | /* Struct definitions */
13 | /* Canned message module configuration. */
14 | typedef struct _meshtastic_RTTTLConfig {
15 | /* Ringtone for PWM Buzzer in RTTTL Format. */
16 | char ringtone[231];
17 | } meshtastic_RTTTLConfig;
18 |
19 | #ifdef __cplusplus
20 | extern "C" {
21 | #endif
22 |
23 | /* Initializer values for message structs */
24 | #define meshtastic_RTTTLConfig_init_default \
25 | { \
26 | "" \
27 | }
28 | #define meshtastic_RTTTLConfig_init_zero \
29 | { \
30 | "" \
31 | }
32 |
33 | /* Field tags (for use in manual encoding/decoding) */
34 | #define meshtastic_RTTTLConfig_ringtone_tag 1
35 |
36 | /* Struct field encoding specification for nanopb */
37 | #define meshtastic_RTTTLConfig_FIELDLIST(X, a) X(a, STATIC, SINGULAR, STRING, ringtone, 1)
38 | #define meshtastic_RTTTLConfig_CALLBACK NULL
39 | #define meshtastic_RTTTLConfig_DEFAULT NULL
40 |
41 | extern const pb_msgdesc_t meshtastic_RTTTLConfig_msg;
42 |
43 | /* Defines for backwards compatibility with code written before nanopb-0.4.0 */
44 | #define meshtastic_RTTTLConfig_fields &meshtastic_RTTTLConfig_msg
45 |
46 | /* Maximum encoded size of messages (where known) */
47 | #define MESHTASTIC_MESHTASTIC_RTTTL_PB_H_MAX_SIZE meshtastic_RTTTLConfig_size
48 | #define meshtastic_RTTTLConfig_size 233
49 |
50 | #ifdef __cplusplus
51 | } /* extern "C" */
52 | #endif
53 |
54 | #endif
55 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/storeforward.pb.cpp:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb constant definitions */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #include "meshtastic/storeforward.pb.h"
5 | #if PB_PROTO_HEADER_VERSION != 40
6 | #error Regenerate this file with the current version of nanopb generator.
7 | #endif
8 |
9 | PB_BIND(meshtastic_StoreAndForward, meshtastic_StoreAndForward, AUTO)
10 |
11 | PB_BIND(meshtastic_StoreAndForward_Statistics, meshtastic_StoreAndForward_Statistics, AUTO)
12 |
13 | PB_BIND(meshtastic_StoreAndForward_History, meshtastic_StoreAndForward_History, AUTO)
14 |
15 | PB_BIND(meshtastic_StoreAndForward_Heartbeat, meshtastic_StoreAndForward_Heartbeat, AUTO)
16 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/storeforward.pb.h:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb header */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #ifndef PB_MESHTASTIC_MESHTASTIC_STOREFORWARD_PB_H_INCLUDED
5 | #define PB_MESHTASTIC_MESHTASTIC_STOREFORWARD_PB_H_INCLUDED
6 | #include
7 |
8 | #if PB_PROTO_HEADER_VERSION != 40
9 | #error Regenerate this file with the current version of nanopb generator.
10 | #endif
11 |
12 | /* Enum definitions */
13 | /* 001 - 063 = From Router
14 | 064 - 127 = From Client */
15 | typedef enum _meshtastic_StoreAndForward_RequestResponse {
16 | /* Unset/unused */
17 | meshtastic_StoreAndForward_RequestResponse_UNSET = 0,
18 | /* Router is an in error state. */
19 | meshtastic_StoreAndForward_RequestResponse_ROUTER_ERROR = 1,
20 | /* Router heartbeat */
21 | meshtastic_StoreAndForward_RequestResponse_ROUTER_HEARTBEAT = 2,
22 | /* Router has requested the client respond. This can work as a
23 | "are you there" message. */
24 | meshtastic_StoreAndForward_RequestResponse_ROUTER_PING = 3,
25 | /* The response to a "Ping" */
26 | meshtastic_StoreAndForward_RequestResponse_ROUTER_PONG = 4,
27 | /* Router is currently busy. Please try again later. */
28 | meshtastic_StoreAndForward_RequestResponse_ROUTER_BUSY = 5,
29 | /* Router is responding to a request for history. */
30 | meshtastic_StoreAndForward_RequestResponse_ROUTER_HISTORY = 6,
31 | /* Router is responding to a request for stats. */
32 | meshtastic_StoreAndForward_RequestResponse_ROUTER_STATS = 7,
33 | /* Router sends a text message from its history that was a direct message. */
34 | meshtastic_StoreAndForward_RequestResponse_ROUTER_TEXT_DIRECT = 8,
35 | /* Router sends a text message from its history that was a broadcast. */
36 | meshtastic_StoreAndForward_RequestResponse_ROUTER_TEXT_BROADCAST = 9,
37 | /* Client is an in error state. */
38 | meshtastic_StoreAndForward_RequestResponse_CLIENT_ERROR = 64,
39 | /* Client has requested a replay from the router. */
40 | meshtastic_StoreAndForward_RequestResponse_CLIENT_HISTORY = 65,
41 | /* Client has requested stats from the router. */
42 | meshtastic_StoreAndForward_RequestResponse_CLIENT_STATS = 66,
43 | /* Client has requested the router respond. This can work as a
44 | "are you there" message. */
45 | meshtastic_StoreAndForward_RequestResponse_CLIENT_PING = 67,
46 | /* The response to a "Ping" */
47 | meshtastic_StoreAndForward_RequestResponse_CLIENT_PONG = 68,
48 | /* Client has requested that the router abort processing the client's request */
49 | meshtastic_StoreAndForward_RequestResponse_CLIENT_ABORT = 106
50 | } meshtastic_StoreAndForward_RequestResponse;
51 |
52 | /* Struct definitions */
53 | /* TODO: REPLACE */
54 | typedef struct _meshtastic_StoreAndForward_Statistics {
55 | /* Number of messages we have ever seen */
56 | uint32_t messages_total;
57 | /* Number of messages we have currently saved our history. */
58 | uint32_t messages_saved;
59 | /* Maximum number of messages we will save */
60 | uint32_t messages_max;
61 | /* Router uptime in seconds */
62 | uint32_t up_time;
63 | /* Number of times any client sent a request to the S&F. */
64 | uint32_t requests;
65 | /* Number of times the history was requested. */
66 | uint32_t requests_history;
67 | /* Is the heartbeat enabled on the server? */
68 | bool heartbeat;
69 | /* Maximum number of messages the server will return. */
70 | uint32_t return_max;
71 | /* Maximum history window in minutes the server will return messages from. */
72 | uint32_t return_window;
73 | } meshtastic_StoreAndForward_Statistics;
74 |
75 | /* TODO: REPLACE */
76 | typedef struct _meshtastic_StoreAndForward_History {
77 | /* Number of that will be sent to the client */
78 | uint32_t history_messages;
79 | /* The window of messages that was used to filter the history client requested */
80 | uint32_t window;
81 | /* Index in the packet history of the last message sent in a previous request to the server.
82 | Will be sent to the client before sending the history and can be set in a subsequent request to avoid getting packets the server
83 | already sent to the client. */
84 | uint32_t last_request;
85 | } meshtastic_StoreAndForward_History;
86 |
87 | /* TODO: REPLACE */
88 | typedef struct _meshtastic_StoreAndForward_Heartbeat {
89 | /* Period in seconds that the heartbeat is sent out that will be sent to the client */
90 | uint32_t period;
91 | /* If set, this is not the primary Store & Forward router on the mesh */
92 | uint32_t secondary;
93 | } meshtastic_StoreAndForward_Heartbeat;
94 |
95 | typedef PB_BYTES_ARRAY_T(233) meshtastic_StoreAndForward_text_t;
96 | /* TODO: REPLACE */
97 | typedef struct _meshtastic_StoreAndForward {
98 | /* TODO: REPLACE */
99 | meshtastic_StoreAndForward_RequestResponse rr;
100 | pb_size_t which_variant;
101 | union _meshtastic_StoreAndForward_variant {
102 | /* TODO: REPLACE */
103 | meshtastic_StoreAndForward_Statistics stats;
104 | /* TODO: REPLACE */
105 | meshtastic_StoreAndForward_History history;
106 | /* TODO: REPLACE */
107 | meshtastic_StoreAndForward_Heartbeat heartbeat;
108 | /* Text from history message. */
109 | meshtastic_StoreAndForward_text_t text;
110 | } variant;
111 | } meshtastic_StoreAndForward;
112 |
113 | #ifdef __cplusplus
114 | extern "C" {
115 | #endif
116 |
117 | /* Helper constants for enums */
118 | #define _meshtastic_StoreAndForward_RequestResponse_MIN meshtastic_StoreAndForward_RequestResponse_UNSET
119 | #define _meshtastic_StoreAndForward_RequestResponse_MAX meshtastic_StoreAndForward_RequestResponse_CLIENT_ABORT
120 | #define _meshtastic_StoreAndForward_RequestResponse_ARRAYSIZE \
121 | ((meshtastic_StoreAndForward_RequestResponse)(meshtastic_StoreAndForward_RequestResponse_CLIENT_ABORT + 1))
122 |
123 | #define meshtastic_StoreAndForward_rr_ENUMTYPE meshtastic_StoreAndForward_RequestResponse
124 |
125 | /* Initializer values for message structs */
126 | #define meshtastic_StoreAndForward_init_default \
127 | { \
128 | _meshtastic_StoreAndForward_RequestResponse_MIN, 0, \
129 | { \
130 | meshtastic_StoreAndForward_Statistics_init_default \
131 | } \
132 | }
133 | #define meshtastic_StoreAndForward_Statistics_init_default \
134 | { \
135 | 0, 0, 0, 0, 0, 0, 0, 0, 0 \
136 | }
137 | #define meshtastic_StoreAndForward_History_init_default \
138 | { \
139 | 0, 0, 0 \
140 | }
141 | #define meshtastic_StoreAndForward_Heartbeat_init_default \
142 | { \
143 | 0, 0 \
144 | }
145 | #define meshtastic_StoreAndForward_init_zero \
146 | { \
147 | _meshtastic_StoreAndForward_RequestResponse_MIN, 0, \
148 | { \
149 | meshtastic_StoreAndForward_Statistics_init_zero \
150 | } \
151 | }
152 | #define meshtastic_StoreAndForward_Statistics_init_zero \
153 | { \
154 | 0, 0, 0, 0, 0, 0, 0, 0, 0 \
155 | }
156 | #define meshtastic_StoreAndForward_History_init_zero \
157 | { \
158 | 0, 0, 0 \
159 | }
160 | #define meshtastic_StoreAndForward_Heartbeat_init_zero \
161 | { \
162 | 0, 0 \
163 | }
164 |
165 | /* Field tags (for use in manual encoding/decoding) */
166 | #define meshtastic_StoreAndForward_Statistics_messages_total_tag 1
167 | #define meshtastic_StoreAndForward_Statistics_messages_saved_tag 2
168 | #define meshtastic_StoreAndForward_Statistics_messages_max_tag 3
169 | #define meshtastic_StoreAndForward_Statistics_up_time_tag 4
170 | #define meshtastic_StoreAndForward_Statistics_requests_tag 5
171 | #define meshtastic_StoreAndForward_Statistics_requests_history_tag 6
172 | #define meshtastic_StoreAndForward_Statistics_heartbeat_tag 7
173 | #define meshtastic_StoreAndForward_Statistics_return_max_tag 8
174 | #define meshtastic_StoreAndForward_Statistics_return_window_tag 9
175 | #define meshtastic_StoreAndForward_History_history_messages_tag 1
176 | #define meshtastic_StoreAndForward_History_window_tag 2
177 | #define meshtastic_StoreAndForward_History_last_request_tag 3
178 | #define meshtastic_StoreAndForward_Heartbeat_period_tag 1
179 | #define meshtastic_StoreAndForward_Heartbeat_secondary_tag 2
180 | #define meshtastic_StoreAndForward_rr_tag 1
181 | #define meshtastic_StoreAndForward_stats_tag 2
182 | #define meshtastic_StoreAndForward_history_tag 3
183 | #define meshtastic_StoreAndForward_heartbeat_tag 4
184 | #define meshtastic_StoreAndForward_text_tag 5
185 |
186 | /* Struct field encoding specification for nanopb */
187 | #define meshtastic_StoreAndForward_FIELDLIST(X, a) \
188 | X(a, STATIC, SINGULAR, UENUM, rr, 1) \
189 | X(a, STATIC, ONEOF, MESSAGE, (variant, stats, variant.stats), 2) \
190 | X(a, STATIC, ONEOF, MESSAGE, (variant, history, variant.history), 3) \
191 | X(a, STATIC, ONEOF, MESSAGE, (variant, heartbeat, variant.heartbeat), 4) \
192 | X(a, STATIC, ONEOF, BYTES, (variant, text, variant.text), 5)
193 | #define meshtastic_StoreAndForward_CALLBACK NULL
194 | #define meshtastic_StoreAndForward_DEFAULT NULL
195 | #define meshtastic_StoreAndForward_variant_stats_MSGTYPE meshtastic_StoreAndForward_Statistics
196 | #define meshtastic_StoreAndForward_variant_history_MSGTYPE meshtastic_StoreAndForward_History
197 | #define meshtastic_StoreAndForward_variant_heartbeat_MSGTYPE meshtastic_StoreAndForward_Heartbeat
198 |
199 | #define meshtastic_StoreAndForward_Statistics_FIELDLIST(X, a) \
200 | X(a, STATIC, SINGULAR, UINT32, messages_total, 1) \
201 | X(a, STATIC, SINGULAR, UINT32, messages_saved, 2) \
202 | X(a, STATIC, SINGULAR, UINT32, messages_max, 3) \
203 | X(a, STATIC, SINGULAR, UINT32, up_time, 4) \
204 | X(a, STATIC, SINGULAR, UINT32, requests, 5) \
205 | X(a, STATIC, SINGULAR, UINT32, requests_history, 6) \
206 | X(a, STATIC, SINGULAR, BOOL, heartbeat, 7) \
207 | X(a, STATIC, SINGULAR, UINT32, return_max, 8) \
208 | X(a, STATIC, SINGULAR, UINT32, return_window, 9)
209 | #define meshtastic_StoreAndForward_Statistics_CALLBACK NULL
210 | #define meshtastic_StoreAndForward_Statistics_DEFAULT NULL
211 |
212 | #define meshtastic_StoreAndForward_History_FIELDLIST(X, a) \
213 | X(a, STATIC, SINGULAR, UINT32, history_messages, 1) \
214 | X(a, STATIC, SINGULAR, UINT32, window, 2) \
215 | X(a, STATIC, SINGULAR, UINT32, last_request, 3)
216 | #define meshtastic_StoreAndForward_History_CALLBACK NULL
217 | #define meshtastic_StoreAndForward_History_DEFAULT NULL
218 |
219 | #define meshtastic_StoreAndForward_Heartbeat_FIELDLIST(X, a) \
220 | X(a, STATIC, SINGULAR, UINT32, period, 1) \
221 | X(a, STATIC, SINGULAR, UINT32, secondary, 2)
222 | #define meshtastic_StoreAndForward_Heartbeat_CALLBACK NULL
223 | #define meshtastic_StoreAndForward_Heartbeat_DEFAULT NULL
224 |
225 | extern const pb_msgdesc_t meshtastic_StoreAndForward_msg;
226 | extern const pb_msgdesc_t meshtastic_StoreAndForward_Statistics_msg;
227 | extern const pb_msgdesc_t meshtastic_StoreAndForward_History_msg;
228 | extern const pb_msgdesc_t meshtastic_StoreAndForward_Heartbeat_msg;
229 |
230 | /* Defines for backwards compatibility with code written before nanopb-0.4.0 */
231 | #define meshtastic_StoreAndForward_fields &meshtastic_StoreAndForward_msg
232 | #define meshtastic_StoreAndForward_Statistics_fields &meshtastic_StoreAndForward_Statistics_msg
233 | #define meshtastic_StoreAndForward_History_fields &meshtastic_StoreAndForward_History_msg
234 | #define meshtastic_StoreAndForward_Heartbeat_fields &meshtastic_StoreAndForward_Heartbeat_msg
235 |
236 | /* Maximum encoded size of messages (where known) */
237 | #define MESHTASTIC_MESHTASTIC_STOREFORWARD_PB_H_MAX_SIZE meshtastic_StoreAndForward_size
238 | #define meshtastic_StoreAndForward_Heartbeat_size 12
239 | #define meshtastic_StoreAndForward_History_size 18
240 | #define meshtastic_StoreAndForward_Statistics_size 50
241 | #define meshtastic_StoreAndForward_size 238
242 |
243 | #ifdef __cplusplus
244 | } /* extern "C" */
245 | #endif
246 |
247 | #endif
248 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/telemetry.pb.cpp:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb constant definitions */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #include "meshtastic/telemetry.pb.h"
5 | #if PB_PROTO_HEADER_VERSION != 40
6 | #error Regenerate this file with the current version of nanopb generator.
7 | #endif
8 |
9 | PB_BIND(meshtastic_DeviceMetrics, meshtastic_DeviceMetrics, AUTO)
10 |
11 | PB_BIND(meshtastic_EnvironmentMetrics, meshtastic_EnvironmentMetrics, AUTO)
12 |
13 | PB_BIND(meshtastic_PowerMetrics, meshtastic_PowerMetrics, AUTO)
14 |
15 | PB_BIND(meshtastic_AirQualityMetrics, meshtastic_AirQualityMetrics, AUTO)
16 |
17 | PB_BIND(meshtastic_LocalStats, meshtastic_LocalStats, AUTO)
18 |
19 | PB_BIND(meshtastic_HealthMetrics, meshtastic_HealthMetrics, AUTO)
20 |
21 | PB_BIND(meshtastic_HostMetrics, meshtastic_HostMetrics, 2)
22 |
23 | PB_BIND(meshtastic_Telemetry, meshtastic_Telemetry, 2)
24 |
25 | PB_BIND(meshtastic_Nau7802Config, meshtastic_Nau7802Config, AUTO)
26 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/xmodem.pb.cpp:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb constant definitions */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #include "meshtastic/xmodem.pb.h"
5 | #if PB_PROTO_HEADER_VERSION != 40
6 | #error Regenerate this file with the current version of nanopb generator.
7 | #endif
8 |
9 | PB_BIND(meshtastic_XModem, meshtastic_XModem, AUTO)
10 |
--------------------------------------------------------------------------------
/lib/mesh/generated/meshtastic/xmodem.pb.h:
--------------------------------------------------------------------------------
1 | /* Automatically generated nanopb header */
2 | /* Generated by nanopb-1.0.0-dev */
3 |
4 | #ifndef PB_MESHTASTIC_MESHTASTIC_XMODEM_PB_H_INCLUDED
5 | #define PB_MESHTASTIC_MESHTASTIC_XMODEM_PB_H_INCLUDED
6 | #include
7 |
8 | #if PB_PROTO_HEADER_VERSION != 40
9 | #error Regenerate this file with the current version of nanopb generator.
10 | #endif
11 |
12 | /* Enum definitions */
13 | typedef enum _meshtastic_XModem_Control {
14 | meshtastic_XModem_Control_NUL = 0,
15 | meshtastic_XModem_Control_SOH = 1,
16 | meshtastic_XModem_Control_STX = 2,
17 | meshtastic_XModem_Control_EOT = 4,
18 | meshtastic_XModem_Control_ACK = 6,
19 | meshtastic_XModem_Control_NAK = 21,
20 | meshtastic_XModem_Control_CAN = 24,
21 | meshtastic_XModem_Control_CTRLZ = 26
22 | } meshtastic_XModem_Control;
23 |
24 | /* Struct definitions */
25 | typedef PB_BYTES_ARRAY_T(128) meshtastic_XModem_buffer_t;
26 | typedef struct _meshtastic_XModem {
27 | meshtastic_XModem_Control control;
28 | uint16_t seq;
29 | uint16_t crc16;
30 | meshtastic_XModem_buffer_t buffer;
31 | } meshtastic_XModem;
32 |
33 | #ifdef __cplusplus
34 | extern "C" {
35 | #endif
36 |
37 | /* Helper constants for enums */
38 | #define _meshtastic_XModem_Control_MIN meshtastic_XModem_Control_NUL
39 | #define _meshtastic_XModem_Control_MAX meshtastic_XModem_Control_CTRLZ
40 | #define _meshtastic_XModem_Control_ARRAYSIZE ((meshtastic_XModem_Control)(meshtastic_XModem_Control_CTRLZ + 1))
41 |
42 | #define meshtastic_XModem_control_ENUMTYPE meshtastic_XModem_Control
43 |
44 | /* Initializer values for message structs */
45 | #define meshtastic_XModem_init_default \
46 | { \
47 | _meshtastic_XModem_Control_MIN, 0, 0, \
48 | { \
49 | 0, \
50 | { \
51 | 0 \
52 | } \
53 | } \
54 | }
55 | #define meshtastic_XModem_init_zero \
56 | { \
57 | _meshtastic_XModem_Control_MIN, 0, 0, \
58 | { \
59 | 0, \
60 | { \
61 | 0 \
62 | } \
63 | } \
64 | }
65 |
66 | /* Field tags (for use in manual encoding/decoding) */
67 | #define meshtastic_XModem_control_tag 1
68 | #define meshtastic_XModem_seq_tag 2
69 | #define meshtastic_XModem_crc16_tag 3
70 | #define meshtastic_XModem_buffer_tag 4
71 |
72 | /* Struct field encoding specification for nanopb */
73 | #define meshtastic_XModem_FIELDLIST(X, a) \
74 | X(a, STATIC, SINGULAR, UENUM, control, 1) \
75 | X(a, STATIC, SINGULAR, UINT32, seq, 2) \
76 | X(a, STATIC, SINGULAR, UINT32, crc16, 3) \
77 | X(a, STATIC, SINGULAR, BYTES, buffer, 4)
78 | #define meshtastic_XModem_CALLBACK NULL
79 | #define meshtastic_XModem_DEFAULT NULL
80 |
81 | extern const pb_msgdesc_t meshtastic_XModem_msg;
82 |
83 | /* Defines for backwards compatibility with code written before nanopb-0.4.0 */
84 | #define meshtastic_XModem_fields &meshtastic_XModem_msg
85 |
86 | /* Maximum encoded size of messages (where known) */
87 | #define MESHTASTIC_MESHTASTIC_XMODEM_PB_H_MAX_SIZE meshtastic_XModem_size
88 | #define meshtastic_XModem_size 141
89 |
90 | #ifdef __cplusplus
91 | } /* extern "C" */
92 | #endif
93 |
94 | #endif
95 |
--------------------------------------------------------------------------------
/lib/mesh/mesh-pb-constants.cpp:
--------------------------------------------------------------------------------
1 | #include "mesh-pb-constants.h"
2 | //@Ve #include "FSCommon.h"
3 | //#include "configuration.h"
4 | #include
5 | #include
6 | #include
7 | #include
8 |
9 | /// helper function for encoding a record as a protobuf, any failures to encode are fatal and we will panic
10 | /// returns the encoded packet size
11 | size_t pb_encode_to_bytes(uint8_t *destbuf, size_t destbufsize, const pb_msgdesc_t *fields, const void *src_struct)
12 | {
13 | pb_ostream_t stream = pb_ostream_from_buffer(destbuf, destbufsize);
14 | if (!pb_encode(&stream, fields, src_struct)) {
15 | //@Ve LOG_ERROR("Panic: can't encode protobuf reason='%s'\n", PB_GET_ERROR(&stream));
16 | assert(
17 | 0); // If this assert fails it probably means you made a field too large for the max limits specified in mesh.options
18 | } else {
19 | return stream.bytes_written;
20 | }
21 | }
22 |
23 | /// helper function for decoding a record as a protobuf, we will return false if the decoding failed
24 | bool pb_decode_from_bytes(const uint8_t *srcbuf, size_t srcbufsize, const pb_msgdesc_t *fields, void *dest_struct)
25 | {
26 | pb_istream_t stream = pb_istream_from_buffer(srcbuf, srcbufsize);
27 | if (!pb_decode(&stream, fields, dest_struct)) {
28 | //@Ve LOG_ERROR("Can't decode protobuf reason='%s', pb_msgdesc %p\n", PB_GET_ERROR(&stream), fields);
29 | return false;
30 | } else {
31 | return true;
32 | }
33 | }
34 |
35 | #ifdef FSCom
36 | /// Read from an Arduino File
37 | bool readcb(pb_istream_t *stream, uint8_t *buf, size_t count)
38 | {
39 | bool status = false;
40 | File *file = (File *)stream->state;
41 |
42 | if (buf == NULL) {
43 | while (count-- && file->read() != EOF)
44 | ;
45 | return count == 0;
46 | }
47 |
48 | status = (file->read(buf, count) == (int)count);
49 |
50 | if (file->available() == 0)
51 | stream->bytes_left = 0;
52 |
53 | return status;
54 | }
55 |
56 | /// Write to an arduino file
57 | bool writecb(pb_ostream_t *stream, const uint8_t *buf, size_t count)
58 | {
59 | File *file = (File *)stream->state;
60 | // LOG_DEBUG("writing %d bytes to protobuf file\n", count);
61 | return file->write(buf, count) == count;
62 | }
63 | #endif
64 |
65 | bool is_in_helper(uint32_t n, const uint32_t *array, pb_size_t count)
66 | {
67 | for (pb_size_t i = 0; i < count; i++)
68 | if (array[i] == n)
69 | return true;
70 |
71 | return false;
72 | }
73 |
--------------------------------------------------------------------------------
/lib/mesh/mesh-pb-constants.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 | #include
3 |
4 | #include "mesh/generated/meshtastic/admin.pb.h"
5 | #include "mesh/generated/meshtastic/deviceonly.pb.h"
6 | #include "mesh/generated/meshtastic/localonly.pb.h"
7 | #include "mesh/generated/meshtastic/mesh.pb.h"
8 |
9 | // this file defines constants which come from mesh.options
10 |
11 | // Tricky macro to let you find the sizeof a type member
12 | #define member_size(type, member) sizeof(((type *)0)->member)
13 |
14 | /// max number of packets which can be waiting for delivery to android - note, this value comes from mesh.options protobuf
15 | // FIXME - max_count is actually 32 but we save/load this as one long string of preencoded MeshPacket bytes - not a big array in
16 | // RAM #define MAX_RX_TOPHONE (member_size(DeviceState, receive_queue) / member_size(DeviceState, receive_queue[0]))
17 | #ifndef MAX_RX_TOPHONE
18 | #define MAX_RX_TOPHONE 32
19 | #endif
20 |
21 | /// max number of nodes allowed in the mesh
22 | #ifndef MAX_NUM_NODES
23 | #define MAX_NUM_NODES 100
24 | #endif
25 |
26 | /// Max number of channels allowed
27 | #define MAX_NUM_CHANNELS (member_size(meshtastic_ChannelFile, channels) / member_size(meshtastic_ChannelFile, channels[0]))
28 |
29 | /// helper function for encoding a record as a protobuf, any failures to encode are fatal and we will panic
30 | /// returns the encoded packet size
31 | size_t pb_encode_to_bytes(uint8_t *destbuf, size_t destbufsize, const pb_msgdesc_t *fields, const void *src_struct);
32 |
33 | /// helper function for decoding a record as a protobuf, we will return false if the decoding failed
34 | bool pb_decode_from_bytes(const uint8_t *srcbuf, size_t srcbufsize, const pb_msgdesc_t *fields, void *dest_struct);
35 |
36 | /// Read from an Arduino File
37 | bool readcb(pb_istream_t *stream, uint8_t *buf, size_t count);
38 |
39 | /// Write to an arduino file
40 | bool writecb(pb_ostream_t *stream, const uint8_t *buf, size_t count);
41 |
42 | /** is_in_repeated is a macro/function that returns true if a specified word appears in a repeated protobuf array.
43 | * It relies on the following naming conventions from nanopb:
44 | *
45 | * pb_size_t ignore_incoming_count;
46 | * uint32_t ignore_incoming[3];
47 | */
48 | bool is_in_helper(uint32_t n, const uint32_t *array, pb_size_t count);
49 |
50 | #define is_in_repeated(name, n) is_in_helper(n, name, name##_count)
--------------------------------------------------------------------------------
/platformio.ini:
--------------------------------------------------------------------------------
1 | ; PlatformIO Project Configuration File
2 | ;
3 | ; Build options: build flags, source filter
4 | ; Upload options: custom upload port, speed and extra flags
5 | ; Library options: dependencies, extra library storages
6 | ; Advanced options: extra scripting
7 | ;
8 | ; Please visit documentation for the other options and examples
9 | ; https://docs.platformio.org/page/projectconf.html
10 |
11 | [platformio]
12 | default_envs = native-mui
13 |
14 | [device-ui_base]
15 | lib_deps =
16 | https://github.com/meshtastic/device-ui/archive/405ca495322b7dc3b61f7588d28267d49b2ebc38.zip
17 | nanopb/Nanopb@^0.4.91
18 |
19 |
20 | [env]
21 | platform = espressif32@6.9.0
22 | framework = arduino
23 | upload_protocol = esp-builtin
24 | board_build.filesystem = littlefs
25 | extra_scripts = ./bin/littlefsbuilder.py
26 | build_type = release
27 | build_flags = -std=c++17 -Os
28 | -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_VERBOSE
29 | -DLOG_LOCAL_LEVEL=ESP_LOG_VERBOSE
30 | -DCONFIG_ARDUHAL_ESP_LOG
31 | -DCONFIG_ARDUHAL_LOG_COLORS=1
32 | -DLV_LVGL_H_INCLUDE_SIMPLE
33 | -DLV_CONF_INCLUDE_SIMPLE
34 | -DLV_COMP_CONF_INCLUDE_SIMPLE
35 | -DLV_BUILD_TEST=0
36 | -I src
37 | -I src/mesh/generated
38 | lib_deps =
39 | ${device-ui_base.lib_deps}
40 | lovyan03/LovyanGFX@1.2.0
41 |
42 | [env:wt32-sc01-plus-mui]
43 | board = wt32-sc01-plus
44 | board_build.partitions = default_16MB.csv
45 | build_type = release
46 | build_flags = ${env.build_flags} -O2
47 | -D ARCH_ESP32
48 | -D WT32_SC01
49 | -D USE_ILOG
50 | -D LV_USE_LOG=0
51 | -D USE_SERIAL2
52 | -D WAIT_FOR_SERIAL0
53 | -D SERIAL_RX=10
54 | -D SERIAL_TX=11
55 | -D HAS_TFT=1
56 | -D RAM_SIZE=1560
57 | -D LV_CACHE_DEF_SIZE=1179648
58 | -D DISPLAY_SET_RESOLUTION
59 | -D LGFX_DRIVER=LGFX_WT_SC01_PLUS
60 | -D VIEW_320x240
61 | -D LV_USE_SYSMON=0
62 | -D LV_USE_PROFILER=0
63 | -D LV_USE_PERF_MONITOR=0
64 | -D LV_USE_MEM_MONITOR=0
65 | -D DONT_USE_ESP_TIMER
66 | -D HAS_SDCARD
67 | -D SDCARD_USE_SPI1
68 | -D SD_SPI_FREQUENCY=10000000
69 | -D MAP_FULL_REDRAW
70 | ;-D USE_LANDSCAPE
71 | -I lib
72 | -I lib/mesh/generated
73 | -I variants/wt32-sc01-plus
74 | build_src_filter = ${env.build_src_filter}
75 | +<../lib/mesh>
76 | lib_deps = ${env.lib_deps}
77 | LittleFS
78 |
79 | ; CYD original - this is the variant from Sunton store
80 | [env:cyd-2432S028-rv1-mui]
81 | board = esp32dev
82 | board_build.partitions = huge_app.csv
83 | upload_protocol = esptool
84 | build_flags = ${env.build_flags} -Wl,-Map,output.map -fno-omit-frame-pointer
85 | -D ARCH_ESP32
86 | -D ESP32_2432S028RV1
87 | -D USE_ILOG
88 | -D LV_USE_LOG=0
89 | -D WAKE_ON_SERIAL
90 | -D USE_SERIAL0 ; for header P1 power supply base (no debug output)
91 | ; -D SERIAL_RX=35 ; header P3 extended I/O (use with SERIAL1/2 for debugging)
92 | ; -D SERIAL_TX=22 ; header P3 extended I/O
93 | -D SERIAL_RX=3 ; header P1 power supply base (use with SERIAL0 in "production")
94 | -D SERIAL_TX=1 ; header P1 power supply base
95 | ; -D CALIBRATE_TOUCH=0
96 | -D LV_USE_PERF_MONITOR=0
97 | -D LV_USE_MEM_MONITOR=0
98 | -D HAS_TFT=1
99 | -D RAM_SIZE=96
100 | -D LGFX_DRIVER=LGFX_ESP2432S028RV1
101 | -D VIEW_320x240
102 | -I lib
103 | -I lib/mesh/generated
104 | -I variants/esp32_2432S028R
105 | build_src_filter = ${env.build_src_filter}
106 | +<../lib/mesh>
107 | lib_deps = ${env.lib_deps}
108 | LittleFS
109 |
110 | ; CYD clone - this is the variant from Estardyn store with USB-C
111 | [env:cyd-2432S028-rv2-mui]
112 | board = esp32dev
113 | board_build.partitions = huge_app.csv
114 | upload_protocol = esptool
115 | build_flags = ${env.build_flags} -Wl,-Map,output.map -fno-omit-frame-pointer
116 | -D ARCH_ESP32
117 | -D ESP32_2432S028RV2
118 | -D USE_ILOG
119 | -D LV_USE_LOG=0
120 | -D WAKE_ON_SERIAL
121 | -D USE_SERIAL0 ; Serial0 is for debug output
122 | ; -D SERIAL_RX=35 ; header P3 extended I/O (use with SERIAL1/2 for debugging)
123 | ; -D SERIAL_TX=22 ; header P3 extended I/O
124 | -D SERIAL_RX=3 ; header P1 power supply base (use with SERIAL0 in "production")
125 | -D SERIAL_TX=1 ; header P1 power supply base
126 | ; -D CALIBRATE_TOUCH=1
127 | -D LV_USE_PERF_MONITOR=1
128 | -D LV_USE_MEM_MONITOR=1
129 | -D RAM_SIZE=96
130 | -D HAS_TFT=1
131 | -D LGFX_DRIVER=LGFX_ESP2432S028RV2
132 | -D VIEW_320x240
133 | -I lib
134 | -I lib/mesh/generated
135 | -I variants/esp32_2432S028R
136 | build_src_filter = ${env.build_src_filter}
137 | +<../lib/mesh>
138 | lib_deps = ${env.lib_deps}
139 | LittleFS
140 |
141 | ; CYD 2.2inch variant - with MCU8080 ST7789 8bit parallel interface
142 | [env:cyd-2432S022-mui]
143 | board = esp32dev
144 | upload_protocol = esptool
145 | build_flags = ${env.build_flags} -Wl,-Map,output.map -fno-omit-frame-pointer
146 | -D ARCH_ESP32
147 | -D ESP32_2432S022
148 | -D USE_ILOG
149 | -D LV_USE_LOG=0
150 | -D WAKE_ON_SERIAL
151 | -D USE_SERIAL2 ; Serial0 is for debug output
152 | ; -D SERIAL_RX=35 ; header P3 extended I/O (use with SERIAL1/2 for debugging)
153 | ; -D SERIAL_TX=22 ; header P3 extended I/O
154 | ; -D SERIAL_RX=3 ; header P1 power supply base (use with SERIAL0 in "production")
155 | ; -D SERIAL_TX=1 ; header P1 power supply base
156 | -D CALIBRATE_TOUCH=0
157 | -D LV_USE_PERF_MONITOR=0
158 | -D LV_USE_MEM_MONITOR=0
159 | -D LV_LOG_LEVEL=LV_LOG_LEVEL_TRACE
160 | -D RAM_SIZE=96
161 | -D HAS_TFT=1
162 | -D LGFX_DRIVER=LGFX_ESP2432S022
163 | -D BUFFER_LINES=100
164 | -D VIEW_320x240
165 | -I lib
166 | -I lib/mesh/generated
167 | build_src_filter = ${env.build_src_filter}
168 | +<../lib/mesh>
169 | lib_deps = ${env.lib_deps}
170 | LittleFS
171 |
172 | [env:diy-nodemcu-ili9341-mui] ; diy project with nodemcu dev board and ILI9341 TFT touch display
173 | board = nodemcu-32s
174 | ;platform_packages = espressif/toolchain-xtensa-esp32@12.2.0+20230208
175 | upload_protocol = esptool
176 | build_flags = ${env.build_flags} -Os -Wl,-Map,output.map -fno-omit-frame-pointer
177 | -D ARCH_ESP32
178 | -D NODEMCU_32S
179 | -D USE_ILOG
180 | -D LV_USE_LOG=0
181 | -D USE_SERIAL2
182 | ; -D SERIAL_RX=16
183 | ; -D SERIAL_TX=17
184 | ; -D CALIBRATE_TOUCH=0
185 | -D RAM_SIZE=56
186 | -D HAS_TFT=1
187 | -D LGFX_DRIVER=LGFX_ESPILI9341XPT2046
188 | -D VIEW_320x240
189 | -I lib
190 | -I lib/mesh/generated
191 | build_src_filter = ${env.build_src_filter}
192 | +<../lib/mesh>
193 | lib_deps = ${env.lib_deps}
194 | LittleFS
195 |
196 | [env:diy-s2-mini-st7789-mui]
197 | board = lolin_s2_mini
198 | board_build.partitions = huge_app.csv
199 | # Name, Type, SubType, Offset, Size, Flags
200 | # nvs, data, nvs, 0x9000, 0x5000,
201 | # otadata, data, ota, 0xe000, 0x2000,
202 | # app0, app, ota_0, 0x10000, 0x300000,
203 | # spiffs, data, spiffs, 0x310000,0xE0000,
204 | # coredump, data, coredump,0x3F0000,0x10000,
205 | upload_protocol = esptool
206 |
207 | build_flags = ${env.build_flags} -Os -Wl,-Map,output.map -fno-omit-frame-pointer
208 | -D ARCH_ESP32
209 | -D TINY_S3
210 | -D USE_ILOG
211 | -D USE_SERIAL2
212 | ; -D SERIAL_RX=16
213 | ; -D SERIAL_TX=17
214 | -D RAM_SIZE=1024
215 | -D HAS_TFT=1
216 | -D LV_USE_LOG=0
217 | -D LV_USE_SYSMON=0
218 | -D LV_USE_PROFILER=0
219 | -D LV_USE_PERF_MONITOR=0
220 | -D LV_USE_MEM_MONITOR=0
221 | -D LGFX_DRIVER_TEMPLATE
222 | -D LGFX_DRIVER=LGFX_GENERIC
223 | -D LGFX_PANEL=ST7789
224 | -D LGFX_OFFSET_ROTATION=1
225 | -D LGFX_TOUCH=XPT2046
226 | -D LGFX_PIN_SCK=7
227 | -D LGFX_PIN_MOSI=11
228 | -D LGFX_PIN_MISO=9
229 | -D LGFX_PIN_CS=12
230 | -D LGFX_PIN_DC=3
231 | -D LGFX_PIN_RST=4
232 | -D LGFX_PIN_BL=16
233 | -D LGFX_TOUCH_INT=-1
234 | -D LGFX_TOUCH_CS=-1
235 | -D LGFX_TOUCH_CLK=-1
236 | -D LGFX_TOUCH_DO=-1
237 | -D LGFX_TOUCH_DIN=-1
238 | -D LGFX_TOUCH_X_MIN=300
239 | -D LGFX_TOUCH_X_MAX=3900
240 | -D LGFX_TOUCH_Y_MIN=400
241 | -D LGFX_TOUCH_Y_MAX=3900
242 | -D VIEW_320x240
243 | -I lib
244 | -I lib/mesh/generated
245 | build_src_filter = ${env.build_src_filter}
246 | +<../lib/mesh>
247 | lib_deps = ${env.lib_deps}
248 | LittleFS
249 |
250 |
251 | [env:t-hmi-mui]
252 | board = lilygo-t-hmi
253 | board_build.partitions = default_16MB.csv
254 | upload_protocol = esptool
255 | build_flags = ${env.build_flags} -fno-omit-frame-pointer
256 | -D ARCH_ESP32
257 | -D T_HMI
258 | -D USE_ILOG
259 | -D LV_USE_LOG=0
260 | ;-D WAIT_FOR_SERIAL0
261 | ;-D WAKE_ON_SERIAL
262 | -D USE_SERIAL1
263 | -D SERIAL_RX=15
264 | -D SERIAL_TX=16
265 | -D BUTTON_PIN=0
266 | -D INPUTDRIVER_BUTTON_TYPE=0
267 | -D PWR_ON_PIN=14
268 | -D PWR_EN_PIN=10
269 | -D HAS_SDCARD
270 | -D HAS_SD_MMC
271 | -D MAP_FULL_REDRAW
272 | -D SD_SCLK_PIN=12
273 | -D SD_MISO_PIN=13
274 | -D SD_MOSI_PIN=11
275 | -D BOARD_MAX_SDMMC_FREQ=56000
276 | -D HAS_TFT=1
277 | -D RAM_SIZE=5120
278 | -D LV_USE_SYSMON=0
279 | -D LV_USE_PROFILER=0
280 | -D LV_USE_PERF_MONITOR=0
281 | -D LV_USE_MEM_MONITOR=0
282 | -D DONT_USE_ESP_TIMER
283 | -D LGFX_DRIVER=LGFX_T_HMI
284 | -D VIEW_320x240
285 | -I lib
286 | -I lib/mesh/generated
287 | build_src_filter = ${env.build_src_filter}
288 | +<../lib/mesh>
289 | lib_deps = ${env.lib_deps}
290 | LittleFS
291 |
292 | [env:t-deck-mui]
293 | board = t-deck
294 | board_build.partitions = default_16MB.csv
295 | build_flags = ${env.build_flags}
296 | -D ARCH_ESP32
297 | -D T_DECK
298 | -D USE_ILOG
299 | -D USE_DUMMY_SERIAL
300 | -D CALIBRATE_TOUCH=0
301 | -D KB_POWERON=10
302 | -D HAS_TFT=1
303 | -D RAM_SIZE=5120
304 | -D LGFX_DRIVER=LGFX_TDECK
305 | -D VIEW_320x240
306 | -I lib
307 | -I lib/mesh/generated
308 | -I variants/t-deck
309 | build_src_filter = ${env.build_src_filter}
310 | +<../lib/mesh>
311 | lib_deps = ${env.lib_deps}
312 | LittleFS
313 |
314 | [env:t-watch-s3-mui]
315 | board = t-watch-s3
316 | board_build.partitions = default_16MB.csv
317 | upload_protocol = esptool
318 | build_flags = ${env.build_flags}
319 | -D ARCH_ESP32
320 | -D T_WATCH_S3
321 | -D USE_ILOG
322 | -D USE_DUMMY_SERIAL
323 | -D HAS_TFT=1
324 | -D RAM_SIZE=512
325 | -D LGFX_DRIVER=LGFX_TWATCH_S3
326 | -D VIEW_240x240
327 | -D TFT_BL=45
328 | -I lib
329 | -I lib/mesh/generated
330 | -I variants/t-watch-s3
331 | build_src_filter = ${env.build_src_filter}
332 | +<../lib/mesh>
333 | lib_deps = ${env.lib_deps}
334 | LittleFS
335 |
336 | [env:seeed-sensecap-indicator-mui] ; WIP
337 | platform_packages =
338 | ; platformio/framework-arduinoespressif32 @ symlink:///home/manuel/Documents/PlatformIO/Projects/arduino-esp32-fork
339 | platformio/framework-arduinoespressif32 @ https://github.com/mverch67/arduino-esp32.git#add_tca9535 ; based on 2.0.16
340 | board = seeed-sensecap-indicator
341 | board_build.partitions = default_8MB.csv
342 | upload_protocol = esptool
343 | build_flags = ${env.build_flags}
344 | -D ARCH_ESP32
345 | -D SENSECAP_INDICATOR
346 | -D IO_EXPANDER=0x40
347 | -D USE_ILOG
348 | -D USE_DUMMY_SERIAL
349 | ;-D CALIBRATE_TOUCH=0
350 | -D HAS_TFT=1
351 | -D RAM_SIZE=6144
352 | -D LV_CACHE_DEF_SIZE=2621440
353 | -D DISPLAY_SET_RESOLUTION
354 | -D LGFX_DRIVER=LGFX_INDICATOR
355 | -D VIEW_320x240
356 | -D LV_USE_SYSMON=0
357 | -D LV_USE_PROFILER=0
358 | -D LV_USE_PERF_MONITOR=0
359 | -D LV_USE_MEM_MONITOR=0
360 | -D LV_USE_LOG=0
361 | -I lib
362 | -I lib/mesh/generated
363 | -I variants/seeed-sensecap-indicator
364 | build_src_filter = ${env.build_src_filter}
365 | +<../lib/mesh>
366 | lib_deps = ${env.lib_deps}
367 | LittleFS
368 |
369 | ; https://vi.aliexpress.com/item/1005006478501734.html
370 | [env:diy-replicator-mui]
371 | board = ESP-4848S040
372 | board_build.partitions = default_8MB.csv
373 | upload_protocol = esptool
374 | debug_tool = esp-builtin
375 | debug_init_break = tbreak setup
376 | debug_port = /dev/ttyUSB0
377 | build_flags = ${env.build_flags}
378 | -D ARCH_ESP32
379 | -D ESP_4848S040
380 | -D USE_ILOG
381 | ; -D WAIT_FOR_SERIAL0
382 | ; -D WAKE_ON_SERIAL
383 | -D USE_SERIAL0
384 | -D SERIAL_RX=43
385 | -D SERIAL_TX=44
386 | ; -D BUTTON_PIN=0
387 | -D HAS_TFT=1
388 | -D RAM_SIZE=6144
389 | -D LV_CACHE_DEF_SIZE=3145728
390 | -D DISPLAY_SET_RESOLUTION
391 | -D LGFX_DRIVER=LGFX_4848S040
392 | -D VIEW_320x240
393 | -D LV_USE_SYSMON=0
394 | -D LV_USE_PROFILER=0
395 | -D LV_USE_PERF_MONITOR=0
396 | -D LV_USE_MEM_MONITOR=0
397 | -D LV_USE_LOG=0
398 | -D HAS_SDCARD
399 | -D MAP_FULL_REDRAW
400 | -I lib
401 | -I lib/mesh/generated
402 | -I variants/esp-4848s040
403 | build_src_filter = ${env.build_src_filter}
404 | +<../lib/mesh>
405 | lib_deps = ${env.lib_deps}
406 | LittleFS
407 |
408 | ; https://www.makerfabs.com/esp32-s3-parallel-tft-with-touch-4-inch.html
409 | [env:dyi-makerfabs-480x480-mui]
410 | board = ESP-4848S040
411 | board_build.partitions = default_8MB.csv
412 | upload_protocol = esptool
413 | debug_tool = esp-builtin
414 | debug_init_break = tbreak setup
415 | debug_port = /dev/ttyUSB0
416 | build_flags = ${env.build_flags}
417 | -D ARCH_ESP32
418 | -D MAKERFABS_480X480
419 | -D USE_ILOG
420 | ; -D WAIT_FOR_SERIAL0
421 | ; -D WAKE_ON_SERIAL
422 | ; -D USE_DUMMY_SERIAL
423 | -D USE_SERIAL0
424 | -D SERIAL_RX=20
425 | -D SERIAL_TX=19
426 | -D HAS_TFT=1
427 | -D RAM_SIZE=6144
428 | -D LV_CACHE_DEF_SIZE=2621440
429 | -D DISPLAY_SET_RESOLUTION
430 | -D LGFX_DRIVER=LGFX_MAKERFABS480X480
431 | -D VIEW_320x240
432 | -D LV_USE_SYSMON=0
433 | -D LV_USE_PROFILER=0
434 | -D LV_USE_PERF_MONITOR=0
435 | -D LV_USE_MEM_MONITOR=0
436 | -D LV_USE_LOG=0
437 | -I lib
438 | -I lib/mesh/generated
439 | -I variants/makerfabs-480x480
440 | build_src_filter = ${env.build_src_filter}
441 | +<../lib/mesh>
442 | lib_deps = ${env.lib_deps}
443 | LittleFS
444 |
445 | [env:heltec-tracker-mui] ; WIP
446 | board = heltec-wireless-tracker
447 | build_flags = ${env.build_flags}
448 | -D ARCH_ESP32
449 | -D HELTEC_TRACKER
450 | -D USE_ILOG
451 | -D USE_DUMMY_SERIAL
452 | -D RAM_SIZE=96
453 | -D LGFX_DRIVER=LGFX_HELTEC_TRACKER
454 | -D VIEW_160x80
455 | -I lib
456 | -I lib/mesh/generated
457 | -I variants/heltec-wireless-tracker
458 | build_src_filter = ${env.build_src_filter}
459 | +<../lib/mesh>
460 | lib_deps = ${env.lib_deps}
461 | LittleFS
462 |
463 |
464 | [env:diy-pico-oled-mui]
465 | platform = https://github.com/maxgerhardt/platform-raspberrypi.git
466 | board = pico
467 | board_build.filesystem_size = 0.5m
468 | board_build.core = earlephilhower
469 | upload_protocol = cmsis-dap
470 | debug_speed = 5000
471 | debug_init_break = tbreak setup
472 | debug_port = /dev/ttyACM0
473 | debug_tool = cmsis-dap
474 | build_flags = ${env.build_flags} -I.
475 | -D ARCH_RP2040
476 | -D PICO
477 | ;-D LIB_PICO_STDIO_USB ; for printf() via USB serial, not UART
478 | -D PICO_USB ; activate tinyusb
479 | -D USE_ILOG
480 | -D RAM_SIZE=64
481 | -D OLED_DRIVER=OLED
482 | -D VIEW_128x64
483 | -I lib
484 | -I lib/mesh/generated
485 | build_src_filter = ${env.build_src_filter}
486 | +<../lib/mesh>
487 |
488 | [env:native-mui]
489 | platform = https://github.com/meshtastic/platform-native.git#622341c6de8a239704318b10c3dbb00c21a3eab3
490 | board = cross_platform
491 | debug_test = *
492 | build_flags = ${env.build_flags} -O2 -Wall -Wextra -ffunction-sections -fdata-sections -fPIC -lstdc++fs -lgpiod -lX11 -linput -lxkbcommon -li2c
493 | -I src/platform/portduino
494 | -D RADIOLIB_EEPROM_UNSUPPORTED
495 | -D PORTDUINO_LINUX_HARDWARE
496 | -D ARCH_PORTDUINO
497 | -D USE_ILOG
498 | -D USE_X11
499 | -D HAS_TFT=1
500 | -D RAM_SIZE=16384
501 | -D LV_CACHE_DEF_SIZE=3145728
502 | -D LV_USE_LOG=0
503 | -D LV_USE_SYSMON=0
504 | -D LV_USE_PERF_MONITOR=0
505 | -D LV_USE_MEM_MONITOR=0
506 | -D LV_USE_PROFILER=0
507 | -D LV_USE_LIBINPUT=1
508 | -D VIEW_320x240
509 | -D MAP_FULL_REDRAW
510 | -I lib
511 | -I lib/mesh/generated
512 |
--------------------------------------------------------------------------------
/squareline/t-watch-s3/T_Watch_Meshtastic.sll:
--------------------------------------------------------------------------------
1 | {"name":"T_Watch_Meshtastic.spj","depth":1,"width":240,"height":240,"rotation":0,"offset_x":0,"offset_y":0,"shape":"RECTANGLE","multilang":"DISABLE","description":"","board":"VSCode with lovyanGFX","board_version":"v1.0.0","editor_version":"1.3.4","image":"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","force_export_images":false,"flat_export":false,"pointfilter":false,"theme_simplified":false,"theme_dark":false,"theme_color1":5,"theme_color2":0,"uiExportFolderPath":"/home/manuel/SquareLine/Projects/T_Watch_Meshtastic/export/T_Watch_Meshtastic/src/ui","projectExportFolderPath":"/home/manuel/SquareLine/Projects/T_Watch_Meshtastic/export","backup_cnt":32,"autosave_cnt":0,"lvgl_version":"8.3.6","callfuncsexport":"CPP_FILE","lvgl_include_path":""}
--------------------------------------------------------------------------------
/src/main.cpp:
--------------------------------------------------------------------------------
1 | #ifndef PIO_UNIT_TESTING
2 |
3 | #include "Arduino.h"
4 | #include "Log.h"
5 | #include "comms/EthClient.h"
6 | #include "comms/UARTClient.h"
7 | #include "graphics/DeviceScreen.h"
8 |
9 | #if defined(ARCH_PORTDUINO)
10 | #include
11 | #define FSBegin() true
12 | #else
13 | #include "LittleFS.h"
14 | #define FSCom LittleFS
15 | #define FSBegin() LittleFS.begin(true)
16 | #endif
17 |
18 | #if defined(I2C_SDA) || defined(I2C_SDA1)
19 | #include "Wire.h"
20 | #endif
21 |
22 | // this is pulled in by the device-ui library
23 | const char *firmware_version = "2.6.8";
24 |
25 | #ifdef USE_DUMMY_SERIAL
26 | class DummyClient : public IClientBase
27 | {
28 | public:
29 | DummyClient() = default;
30 | void init(void) override {}
31 | bool connect(void) override { return true; }
32 | bool disconnect(void) override { return true; }
33 | bool isConnected(void) override { return false; }
34 | bool send(meshtastic_ToRadio &&to) override { return false; }
35 | meshtastic_FromRadio receive(void) override
36 | {
37 | meshtastic_FromRadio dummy{};
38 | return dummy;
39 | }
40 | ~DummyClient(){};
41 | } serial;
42 | #else
43 | IClientBase *client = nullptr;
44 | #endif
45 |
46 | DeviceScreen *screen = nullptr;
47 |
48 | void setup()
49 | {
50 | #if defined(__APPLE__)
51 | pthread_setname_np("setup");
52 | #elif defined(__linux__)
53 | pthread_setname_np(pthread_self(), "setup");
54 | #endif
55 | #ifdef KB_POWERON
56 | digitalWrite(KB_POWERON, HIGH);
57 | pinMode(KB_POWERON, OUTPUT);
58 | delay(200); // wait until keyboard mcu startup finished
59 | #endif
60 |
61 | #ifdef PWR_ON_PIN
62 | pinMode(PWR_ON_PIN, OUTPUT);
63 | digitalWrite(PWR_ON_PIN, HIGH);
64 | #endif
65 |
66 | #ifdef PWR_EN_PIN
67 | pinMode(PWR_EN_PIN, OUTPUT);
68 | digitalWrite(PWR_EN_PIN, HIGH);
69 | #endif
70 |
71 | #ifndef USE_SERIAL0
72 | #ifdef WAIT_FOR_SERIAL0
73 | delay(2000);
74 | #endif
75 | Serial.begin(115200);
76 | #ifdef WAIT_FOR_SERIAL0
77 | time_t timeout = millis();
78 | while (!Serial && (millis() - timeout) < 2000)
79 | ;
80 | #endif
81 | logger.setDebugLevel(ESP_LOG_DEBUG); // use ESP_LOG_VERBOSE for trace category
82 | #else
83 | logger.setDebugLevel(ESP_LOG_NONE); // do not log when connected over serial0
84 | #endif
85 |
86 | #ifdef I2C_SDA
87 | if (!Wire.begin(I2C_SDA, I2C_SCL, 400000))
88 | ILOG_ERROR("*** Failed to access I2C0(%d, %d)", I2C_SDA, I2C_SCL);
89 | #endif
90 | #ifdef I2C_SDA1
91 | if (!Wire.begin(I2C_SDA1, I2C_SCL1, 400000))
92 | ILOG_ERROR("*** Failed to access I2C1(%d, %d)", I2C_SDA1, I2C_SCL1);
93 | #endif
94 |
95 | ILOG_INFO("\n//\\ E S H T /\\ S T / C U I\n");
96 | #ifdef ARDUINO_ARCH_ESP32
97 | uint64_t chipid;
98 | chipid = ESP.getEfuseMac(); // The chip ID is essentially its MAC address(length: 6 bytes).
99 | ILOG_DEBUG(" ESP32 Chip ID = %04X %08X", (uint16_t)(chipid >> 32), (uint32_t)chipid);
100 | ILOG_DEBUG(" Flash size: %8d bytes", ESP.getFlashChipSize());
101 | ILOG_DEBUG(" Heap size : %8d bytes", ESP.getHeapSize());
102 | ILOG_DEBUG(" Free heap : %8d bytes", ESP.getFreeHeap());
103 | ILOG_DEBUG(" PSRAM : %8d bytes", ESP.getFreePsram());
104 | ILOG_DEBUG(" PSRAM max : %8d bytes", heap_caps_get_largest_free_block(MALLOC_CAP_SPIRAM));
105 | ILOG_DEBUG("*****************************************");
106 | #endif
107 |
108 | if (!FSBegin()) {
109 | ILOG_ERROR("LittleFS mount failed!");
110 | }
111 |
112 | #ifdef ARCH_PORTDUINO
113 | const char *hostname = getenv("MUI_SERVER");
114 | if (hostname == nullptr) {
115 | client = new EthClient();
116 | } else {
117 | client = new EthClient(hostname);
118 | }
119 | int16_t x = 480;
120 | int16_t y = 480;
121 | const char *size = getenv("MUI_SIZE");
122 | if (size != nullptr) {
123 | sscanf(size, "%" PRId16 "x%" PRId16, &x, &y);
124 | }
125 | if (x < 320 || x > 800)
126 | x = 480;
127 | if (y < 240 || y > 800)
128 | y = 480;
129 | screen = &DeviceScreen::create(DisplayDriverConfig(DisplayDriverConfig::device_t::X11, x, y));
130 | #else
131 | client = new UARTClient();
132 | screen = &DeviceScreen::create();
133 | #endif
134 |
135 | screen->init(client);
136 |
137 | #ifdef ARDUINO_ARCH_ESP32
138 | ILOG_DEBUG("Free heap : %8d bytes", ESP.getFreeHeap());
139 | ILOG_DEBUG("PSRAM : %8d bytes", ESP.getFreePsram());
140 | #endif
141 |
142 | #ifdef ARCH_PORTDUINO
143 | // create separate thread to handle lvgl X11 GUI simulation
144 | // otherwise the GUI will slow down the main thread
145 | extern void tft_task_handler(void *param = nullptr);
146 | new std::thread([] {
147 | #ifdef __APPLE__
148 | pthread_setname_np("tft");
149 | #else
150 | pthread_setname_np(pthread_self(), "tft");
151 | #endif
152 | tft_task_handler();
153 | });
154 | #endif
155 |
156 | ILOG_DEBUG("Setup done.");
157 | #if defined(__APPLE__)
158 | pthread_setname_np("loop");
159 | #elif defined(__linux__)
160 | pthread_setname_np(pthread_self(), "loop");
161 | #endif
162 | }
163 |
164 | #if defined(ARCH_ESP32)
165 | void loop()
166 | {
167 | screen->task_handler();
168 | screen->sleep(5);
169 | }
170 |
171 | #elif defined(ARCH_PORTDUINO)
172 | void loop()
173 | {
174 | delay(1000);
175 | fflush(nullptr);
176 | }
177 |
178 | void tft_task_handler(void *)
179 | {
180 | ILOG_INFO("tft_task_handler started");
181 | while (true) {
182 | screen->task_handler();
183 | screen->sleep(5);
184 | }
185 | }
186 | #else
187 | #error "Unsupported architecture"
188 | #endif
189 |
190 | #endif
--------------------------------------------------------------------------------
/test/definitions.cpp:
--------------------------------------------------------------------------------
1 | // make linker happy during pio unit testing
2 |
3 | #include "Arduino.h"
4 | #include "graphics/DeviceScreen.h"
5 | #include "Log.h"
6 |
7 | #ifdef USE_ILOG
8 | #include "util/ILog.h"
9 |
10 | ILog *ILog::_logger = nullptr;
11 | #endif
12 |
13 | Log *testLog = new Log;
14 |
15 | const char *firmware_version = "2.3.3";
16 |
17 | DeviceScreen *screen = nullptr;
18 |
19 | #if defined(ARCH_PORTDUINO)
20 | void tft_task_handler(void *)
21 | {
22 | // linker-error in test build screen->task_handler();
23 | delay(5);
24 | }
25 | #endif
--------------------------------------------------------------------------------
/test/test_MeshEnvelope.cpp:
--------------------------------------------------------------------------------
1 | #include "comms/MeshEnvelope.h"
2 | #include
3 |
4 | uint8_t buffer[512];
5 | char* buf = (char*)buffer;
6 | size_t size;
7 | size_t payload;
8 |
9 |
10 | void tearDown(void) {
11 | // clean stuff up here
12 | }
13 |
14 | void test_MeshEnvelope_ctor1(void) {
15 | MeshEnvelope envelope;
16 | }
17 |
18 | void test_MeshEnvelope_ctor2(void) {
19 | strcpy(buf, "\x01");
20 | TEST_ASSERT_EQUAL(42, 42);
21 | }
22 |
23 | void test_MeshEnvelope_validate_size(void) {
24 | strcpy(buf, "\x01\x00");
25 | size = 1;
26 | TEST_ASSERT_FALSE(MeshEnvelope::validate(buffer, size, payload));
27 | }
28 |
29 | void test_MeshEnvelope_validate_wrong_magic1(void) {
30 | strcpy(buf, "\x01\x00");
31 | size = 5;
32 | TEST_ASSERT_FALSE(MeshEnvelope::validate(buffer, size, payload));
33 | }
34 |
35 | void test_MeshEnvelope_validate_wrong_magic2(void) {
36 | strcpy(buf, "\x94\x94\x00");
37 | size = 5;
38 | TEST_ASSERT_FALSE(MeshEnvelope::validate(buffer, size, payload));
39 | }
40 |
41 | void test_MeshEnvelope_validate_wrong_size(void) {
42 | memcpy(buf, "\x94\xc3\x00\x02", 4);
43 | size = 5;
44 | TEST_ASSERT_FALSE(MeshEnvelope::validate(buffer, size, payload));
45 | TEST_ASSERT_EQUAL(2, payload);
46 | }
47 |
48 | void test_MeshEnvelope_validate_right_size(void) {
49 | memcpy(buf, "\x94\xc3\x00\x01", 4);
50 | size = 5;
51 | TEST_ASSERT_TRUE(MeshEnvelope::validate(buffer, size, payload));
52 | TEST_ASSERT_EQUAL(payload, 1);
53 | }
54 |
55 | void test_MeshEnvelope_validate_partial_packet(void) {
56 | memcpy(buf, "\x94\xc3\x00\x03", 4);
57 | size = 5;
58 | TEST_ASSERT_FALSE(MeshEnvelope::validate(buffer, size, payload));
59 | TEST_ASSERT_EQUAL(3, payload);
60 | }
61 |
62 | void test_MeshEnvelope_validate_skip_bytes(void) {
63 | memcpy(buf, "\x22\x23\x24\x94\xc3\x00\x04", 7);
64 | size = 9;
65 | TEST_ASSERT_FALSE(MeshEnvelope::validate(buffer, size, payload));
66 | TEST_ASSERT_EQUAL(4, payload);
67 | TEST_ASSERT_EQUAL(0x94, buffer[0]);
68 | TEST_ASSERT_EQUAL(0xc3, buffer[1]);
69 | TEST_ASSERT_EQUAL(0x00, buffer[2]);
70 | TEST_ASSERT_EQUAL(0x04, buffer[3]);
71 | }
72 |
73 | void test_MeshEnvelope_validate_packet_with_skip_bytes(void) {
74 | memcpy(buf, "\x22\x23\x24\x94\xc3\x00\x05", 7);
75 | size = 15;
76 | TEST_ASSERT_TRUE(MeshEnvelope::validate(buffer, size, payload));
77 | TEST_ASSERT_EQUAL(5, payload);
78 | TEST_ASSERT_EQUAL(0x94, buffer[0]);
79 | TEST_ASSERT_EQUAL(0xc3, buffer[1]);
80 | TEST_ASSERT_EQUAL(0x00, buffer[2]);
81 | TEST_ASSERT_EQUAL(0x05, buffer[3]);
82 | }
83 |
84 |
85 | void RUN_UNITY_TESTS() {
86 | UNITY_BEGIN();
87 | RUN_TEST(test_MeshEnvelope_ctor1);
88 | RUN_TEST(test_MeshEnvelope_ctor2);
89 | RUN_TEST(test_MeshEnvelope_validate_size);
90 | RUN_TEST(test_MeshEnvelope_validate_wrong_magic1);
91 | RUN_TEST(test_MeshEnvelope_validate_wrong_magic2);
92 | RUN_TEST(test_MeshEnvelope_validate_wrong_size);
93 | RUN_TEST(test_MeshEnvelope_validate_right_size);
94 | RUN_TEST(test_MeshEnvelope_validate_partial_packet);
95 | RUN_TEST(test_MeshEnvelope_validate_skip_bytes);
96 | RUN_TEST(test_MeshEnvelope_validate_packet_with_skip_bytes);
97 | UNITY_END();
98 | }
99 |
100 | #ifdef ARDUINO
101 |
102 | #include
103 | void setup() {
104 | size = 0;
105 | payload = 0;
106 | // NOTE!!! Wait for >2 secs
107 | // if board doesn't support software reset via Serial.DTR/RTS
108 | //delay(2000);
109 |
110 | RUN_UNITY_TESTS();
111 | }
112 |
113 | void loop() {
114 | // digitalWrite(13, HIGH);
115 | // delay(100);
116 | // digitalWrite(13, LOW);
117 | // delay(500);
118 | }
119 |
120 | #else
121 |
122 | int main(int argc, char **argv) {
123 | RUN_UNITY_TESTS();
124 | return 0;
125 | }
126 |
127 | #endif
128 |
--------------------------------------------------------------------------------
/variants/esp-4848s040/pins_arduino.h:
--------------------------------------------------------------------------------
1 | #ifndef Pins_Arduino_h
2 | #define Pins_Arduino_h
3 |
4 | #include
5 |
6 | // static const uint8_t LED_BUILTIN = -1;
7 |
8 | #define SD_SPI_FREQUENCY 75000000U
9 |
10 | static const uint8_t RELAY_PIN = 40;
11 |
12 | static const uint8_t SPI_MOSI = 47;
13 | static const uint8_t SPI_SCK = 48;
14 | static const uint8_t SPI_MISO = 41;
15 | static const uint8_t SPI_CS = 42;
16 | static const uint8_t SDCARD_CS = SPI_CS;
17 |
18 | static const uint8_t TX = 43;
19 | static const uint8_t RX = 44;
20 |
21 | static const uint8_t SDA = 19;
22 | static const uint8_t SCL = 45;
23 |
24 | static const uint8_t SS = 39;
25 | static const uint8_t MOSI = 47;
26 | static const uint8_t MISO = 41;
27 | static const uint8_t SCK = 48;
28 |
29 | static const uint8_t A0 = 1;
30 | static const uint8_t A1 = 2;
31 | static const uint8_t A2 = 3;
32 | static const uint8_t A3 = 4;
33 | static const uint8_t A4 = 5;
34 | static const uint8_t A5 = 6;
35 | static const uint8_t A6 = 7;
36 | static const uint8_t A7 = 8;
37 | static const uint8_t A8 = 9;
38 | static const uint8_t A9 = 10;
39 | static const uint8_t A10 = 11;
40 | static const uint8_t A11 = 12;
41 | static const uint8_t A12 = 13;
42 | static const uint8_t A13 = 14;
43 | static const uint8_t A14 = 15;
44 | static const uint8_t A15 = 16;
45 | static const uint8_t A16 = 17;
46 | static const uint8_t A17 = 18;
47 | static const uint8_t A18 = 19;
48 | static const uint8_t A19 = 20;
49 |
50 | static const uint8_t T1 = 1;
51 | static const uint8_t T2 = 2;
52 | static const uint8_t T3 = 3;
53 | static const uint8_t T4 = 4;
54 | static const uint8_t T5 = 5;
55 | static const uint8_t T6 = 6;
56 | static const uint8_t T7 = 7;
57 | static const uint8_t T8 = 8;
58 | static const uint8_t T9 = 9;
59 | static const uint8_t T10 = 10;
60 | static const uint8_t T11 = 11;
61 | static const uint8_t T12 = 12;
62 | static const uint8_t T13 = 13;
63 | static const uint8_t T14 = 14;
64 |
65 | #endif /* Pins_Arduino_h */
--------------------------------------------------------------------------------
/variants/heltec-wireless-tracker/pins_arduino.h:
--------------------------------------------------------------------------------
1 | #ifndef Pins_Arduino_h
2 | #define Pins_Arduino_h
3 |
4 | #include "soc/soc_caps.h"
5 | #include
6 |
7 | #define WIFI_LoRa_32_V3 true
8 | #define DISPLAY_HEIGHT 64
9 | #define DISPLAY_WIDTH 128
10 |
11 | #define USB_VID 0x303a
12 | #define USB_PID 0x1001
13 |
14 | #define EXTERNAL_NUM_INTERRUPTS 46
15 | #define NUM_DIGITAL_PINS 48
16 | #define NUM_ANALOG_INPUTS 20
17 |
18 | static const uint8_t LED_BUILTIN = 18;
19 | #define BUILTIN_LED LED_BUILTIN // backward compatibility
20 | #define LED_BUILTIN LED_BUILTIN
21 |
22 | #define analogInputToDigitalPin(p) (((p) < 20) ? (analogChannelToDigitalPin(p)) : -1)
23 | #define digitalPinToInterrupt(p) (((p) < 48) ? (p) : -1)
24 | #define digitalPinHasPWM(p) (p < 46)
25 |
26 | static const uint8_t TX = 43;
27 | static const uint8_t RX = 44;
28 |
29 | static const uint8_t SDA = 41;
30 | static const uint8_t SCL = 42;
31 |
32 | static const uint8_t SS = 8;
33 | static const uint8_t MOSI = 10;
34 | static const uint8_t MISO = 11;
35 | static const uint8_t SCK = 9;
36 |
37 | static const uint8_t A0 = 1;
38 | static const uint8_t A1 = 2;
39 | static const uint8_t A2 = 3;
40 | static const uint8_t A3 = 4;
41 | static const uint8_t A4 = 5;
42 | static const uint8_t A5 = 6;
43 | static const uint8_t A6 = 7;
44 | static const uint8_t A7 = 8;
45 | static const uint8_t A8 = 9;
46 | static const uint8_t A9 = 10;
47 | static const uint8_t A10 = 11;
48 | static const uint8_t A11 = 12;
49 | static const uint8_t A12 = 13;
50 | static const uint8_t A13 = 14;
51 | static const uint8_t A14 = 15;
52 | static const uint8_t A15 = 16;
53 | static const uint8_t A16 = 17;
54 | static const uint8_t A17 = 18;
55 | static const uint8_t A18 = 19;
56 | static const uint8_t A19 = 20;
57 |
58 | static const uint8_t T1 = 1;
59 | static const uint8_t T2 = 2;
60 | static const uint8_t T3 = 3;
61 | static const uint8_t T4 = 4;
62 | static const uint8_t T5 = 5;
63 | static const uint8_t T6 = 6;
64 | static const uint8_t T7 = 7;
65 | static const uint8_t T8 = 8;
66 | static const uint8_t T9 = 9;
67 | static const uint8_t T10 = 10;
68 | static const uint8_t T11 = 11;
69 | static const uint8_t T12 = 12;
70 | static const uint8_t T13 = 13;
71 | static const uint8_t T14 = 14;
72 |
73 | static const uint8_t Vext = 36;
74 | static const uint8_t LED = 18;
75 |
76 | static const uint8_t RST_LoRa = 12;
77 | static const uint8_t BUSY_LoRa = 13;
78 | static const uint8_t DIO0 = 14;
79 |
80 | #endif /* Pins_Arduino_h */
81 |
--------------------------------------------------------------------------------
/variants/makerfabs-480x480/pins_arduino.h:
--------------------------------------------------------------------------------
1 | #ifndef Pins_Arduino_h
2 | #define Pins_Arduino_h
3 |
4 | #include
5 |
6 | // static const uint8_t LED_BUILTIN = -1;
7 |
8 | static const uint8_t TX = 19;
9 | static const uint8_t RX = 20;
10 |
11 | static const uint8_t SDA = 17;
12 | static const uint8_t SCL = 18;
13 |
14 | // Default SPI will be mapped to Radio
15 | static const uint8_t SS = 10;
16 | static const uint8_t MOSI = 11;
17 | static const uint8_t MISO = 13;
18 | static const uint8_t SCK = 12;
19 |
20 | static const uint8_t A0 = 1;
21 | static const uint8_t A1 = 2;
22 | static const uint8_t A2 = 3;
23 | static const uint8_t A3 = 4;
24 | static const uint8_t A4 = 5;
25 | static const uint8_t A5 = 6;
26 | static const uint8_t A6 = 7;
27 | static const uint8_t A7 = 8;
28 | static const uint8_t A8 = 9;
29 | static const uint8_t A9 = 10;
30 | static const uint8_t A10 = 11;
31 | static const uint8_t A11 = 12;
32 | static const uint8_t A12 = 13;
33 | static const uint8_t A13 = 14;
34 | static const uint8_t A14 = 15;
35 | static const uint8_t A15 = 16;
36 | static const uint8_t A16 = 17;
37 | static const uint8_t A17 = 18;
38 | static const uint8_t A18 = 19;
39 | static const uint8_t A19 = 20;
40 |
41 | static const uint8_t T1 = 1;
42 | static const uint8_t T2 = 2;
43 | static const uint8_t T3 = 3;
44 | static const uint8_t T4 = 4;
45 | static const uint8_t T5 = 5;
46 | static const uint8_t T6 = 6;
47 | static const uint8_t T7 = 7;
48 | static const uint8_t T8 = 8;
49 | static const uint8_t T9 = 9;
50 | static const uint8_t T10 = 10;
51 | static const uint8_t T11 = 11;
52 | static const uint8_t T12 = 12;
53 | static const uint8_t T13 = 13;
54 | static const uint8_t T14 = 14;
55 |
56 | #endif /* Pins_Arduino_h */
57 |
--------------------------------------------------------------------------------
/variants/seeed-sensecap-indicator/pins_arduino.h:
--------------------------------------------------------------------------------
1 | #ifndef Pins_Arduino_h
2 | #define Pins_Arduino_h
3 |
4 | #include
5 |
6 | // static const uint8_t LED_BUILTIN = -1;
7 |
8 | // static const uint8_t TX = 43;
9 | // static const uint8_t RX = 44;
10 |
11 | static const uint8_t SDA = 39;
12 | static const uint8_t SCL = 40;
13 |
14 | // Default SPI will be mapped to Radio
15 | static const uint8_t SS = -1;
16 | static const uint8_t MOSI = 48;
17 | static const uint8_t MISO = 47;
18 | static const uint8_t SCK = 41;
19 |
20 | static const uint8_t A0 = 1;
21 | static const uint8_t A1 = 2;
22 | static const uint8_t A2 = 3;
23 | static const uint8_t A3 = 4;
24 | static const uint8_t A4 = 5;
25 | static const uint8_t A5 = 6;
26 | static const uint8_t A6 = 7;
27 | static const uint8_t A7 = 8;
28 | static const uint8_t A8 = 9;
29 | static const uint8_t A9 = 10;
30 | static const uint8_t A10 = 11;
31 | static const uint8_t A11 = 12;
32 | static const uint8_t A12 = 13;
33 | static const uint8_t A13 = 14;
34 | static const uint8_t A14 = 15;
35 | static const uint8_t A15 = 16;
36 | static const uint8_t A16 = 17;
37 | static const uint8_t A17 = 18;
38 | static const uint8_t A18 = 19;
39 | static const uint8_t A19 = 20;
40 |
41 | static const uint8_t T1 = 1;
42 | static const uint8_t T2 = 2;
43 | static const uint8_t T3 = 3;
44 | static const uint8_t T4 = 4;
45 | static const uint8_t T5 = 5;
46 | static const uint8_t T6 = 6;
47 | static const uint8_t T7 = 7;
48 | static const uint8_t T8 = 8;
49 | static const uint8_t T9 = 9;
50 | static const uint8_t T10 = 10;
51 | static const uint8_t T11 = 11;
52 | static const uint8_t T12 = 12;
53 | static const uint8_t T13 = 13;
54 | static const uint8_t T14 = 14;
55 |
56 | #endif /* Pins_Arduino_h */
--------------------------------------------------------------------------------
/variants/t-deck/pins_arduino.h:
--------------------------------------------------------------------------------
1 | #ifndef Pins_Arduino_h
2 | #define Pins_Arduino_h
3 |
4 | #include
5 |
6 | #define USB_VID 0x303a
7 | #define USB_PID 0x1001
8 |
9 | #define EXTERNAL_NUM_INTERRUPTS 46
10 | #define NUM_DIGITAL_PINS 48
11 | #define NUM_ANALOG_INPUTS 20
12 |
13 | #define analogInputToDigitalPin(p) (((p) < NUM_ANALOG_INPUTS) ? (analogChannelToDigitalPin(p)) : -1)
14 | #define digitalPinToInterrupt(p) (((p) < NUM_DIGITAL_PINS) ? (p) : -1)
15 | #define digitalPinHasPWM(p) (p < EXTERNAL_NUM_INTERRUPTS)
16 |
17 | // static const uint8_t LED_BUILTIN = -1;
18 |
19 | static const uint8_t TX = 43;
20 | static const uint8_t RX = 44;
21 |
22 | static const uint8_t SDA = 18;
23 | static const uint8_t SCL = 8;
24 |
25 | // Default SPI will be mapped to Radio
26 | static const uint8_t SS = 9;
27 | static const uint8_t MOSI = 41;
28 | static const uint8_t MISO = 38;
29 | static const uint8_t SCK = 40;
30 |
31 | static const uint8_t A0 = 1;
32 | static const uint8_t A1 = 2;
33 | static const uint8_t A2 = 3;
34 | static const uint8_t A3 = 4;
35 | static const uint8_t A4 = 5;
36 | static const uint8_t A5 = 6;
37 | static const uint8_t A6 = 7;
38 | static const uint8_t A7 = 8;
39 | static const uint8_t A8 = 9;
40 | static const uint8_t A9 = 10;
41 | static const uint8_t A10 = 11;
42 | static const uint8_t A11 = 12;
43 | static const uint8_t A12 = 13;
44 | static const uint8_t A13 = 14;
45 | static const uint8_t A14 = 15;
46 | static const uint8_t A15 = 16;
47 | static const uint8_t A16 = 17;
48 | static const uint8_t A17 = 18;
49 | static const uint8_t A18 = 19;
50 | static const uint8_t A19 = 20;
51 |
52 | static const uint8_t T1 = 1;
53 | static const uint8_t T2 = 2;
54 | static const uint8_t T3 = 3;
55 | static const uint8_t T4 = 4;
56 | static const uint8_t T5 = 5;
57 | static const uint8_t T6 = 6;
58 | static const uint8_t T7 = 7;
59 | static const uint8_t T8 = 8;
60 | static const uint8_t T9 = 9;
61 | static const uint8_t T10 = 10;
62 | static const uint8_t T11 = 11;
63 | static const uint8_t T12 = 12;
64 | static const uint8_t T13 = 13;
65 | static const uint8_t T14 = 14;
66 |
67 | static const uint8_t BAT_ADC_PIN = 4;
68 |
69 | #endif /* Pins_Arduino_h */
70 |
--------------------------------------------------------------------------------
/variants/t-watch-s3/pins_arduino.h:
--------------------------------------------------------------------------------
1 | #ifndef Pins_Arduino_h
2 | #define Pins_Arduino_h
3 |
4 | #include
5 |
6 | #define EXTERNAL_NUM_INTERRUPTS 46
7 | #define NUM_DIGITAL_PINS 48
8 | #define NUM_ANALOG_INPUTS 20
9 |
10 | #define analogInputToDigitalPin(p) (((p) < NUM_ANALOG_INPUTS) ? (analogChannelToDigitalPin(p)) : -1)
11 | #define digitalPinToInterrupt(p) (((p) < NUM_DIGITAL_PINS) ? (p) : -1)
12 | #define digitalPinHasPWM(p) (p < EXTERNAL_NUM_INTERRUPTS)
13 |
14 | // static const uint8_t LED_BUILTIN = -1;
15 |
16 | // static const uint8_t TX = 43;
17 | // static const uint8_t RX = 44;
18 |
19 | static const uint8_t SDA = 10;
20 | static const uint8_t SCL = 11;
21 |
22 | // Default SPI will be mapped to Radio
23 | static const uint8_t SS = 5;
24 | static const uint8_t MOSI = 1;
25 | static const uint8_t MISO = 4;
26 | static const uint8_t SCK = 3;
27 |
28 | static const uint8_t A0 = 1;
29 | static const uint8_t A1 = 2;
30 | static const uint8_t A2 = 3;
31 | static const uint8_t A3 = 4;
32 | static const uint8_t A4 = 5;
33 | static const uint8_t A5 = 6;
34 | static const uint8_t A6 = 7;
35 | static const uint8_t A7 = 8;
36 | static const uint8_t A8 = 9;
37 | static const uint8_t A9 = 10;
38 | static const uint8_t A10 = 11;
39 | static const uint8_t A11 = 12;
40 | static const uint8_t A12 = 13;
41 | static const uint8_t A13 = 14;
42 | static const uint8_t A14 = 15;
43 | static const uint8_t A15 = 16;
44 | static const uint8_t A16 = 17;
45 | static const uint8_t A17 = 18;
46 | static const uint8_t A18 = 19;
47 | static const uint8_t A19 = 20;
48 |
49 | static const uint8_t T1 = 1;
50 | static const uint8_t T2 = 2;
51 | static const uint8_t T3 = 3;
52 | static const uint8_t T4 = 4;
53 | static const uint8_t T5 = 5;
54 | static const uint8_t T6 = 6;
55 | static const uint8_t T7 = 7;
56 | static const uint8_t T8 = 8;
57 | static const uint8_t T9 = 9;
58 | static const uint8_t T10 = 10;
59 | static const uint8_t T11 = 11;
60 | static const uint8_t T12 = 12;
61 | static const uint8_t T13 = 13;
62 | static const uint8_t T14 = 14;
63 |
64 | #endif /* Pins_Arduino_h */
--------------------------------------------------------------------------------
/variants/wt32-sc01-plus/pins_arduino.h:
--------------------------------------------------------------------------------
1 | #ifndef Pins_Arduino_h
2 | #define Pins_Arduino_h
3 |
4 | #include
5 |
6 | #define USB_VID 0x303A
7 | #define USB_PID 0x80D0
8 | #define USB_MANUFACTURER "wireless-tag"
9 | #define USB_PRODUCT "WT32-SC01 Plus"
10 | #define USB_SERIAL ""
11 |
12 | // #define EXTERNAL_NUM_INTERRUPTS 46
13 | // #define NUM_DIGITAL_PINS 17
14 | // #define NUM_ANALOG_INPUTS 9
15 |
16 | // #define analogInputToDigitalPin(p) (((p)<20)?(analogChannelToDigitalPin(p)):-1)
17 | // #define digitalPinToInterrupt(p) (((p)<48)?(p):-1)
18 | // #define digitalPinHasPWM(p) (p < 46)
19 |
20 | static const uint8_t SPI_MOSI = 40;
21 | static const uint8_t SPI_SCK = 39;
22 | static const uint8_t SPI_MISO = 38;
23 | static const uint8_t SPI_CS = 41;
24 | static const uint8_t SDCARD_CS = SPI_CS;
25 |
26 | static const uint8_t TX = 43;
27 | static const uint8_t RX = 44;
28 |
29 | static const uint8_t SDA = 8;
30 | static const uint8_t SCL = 9;
31 |
32 | static const uint8_t SS = 34;
33 | static const uint8_t MOSI = 35;
34 | static const uint8_t MISO = 37;
35 | static const uint8_t SDO = 35;
36 | static const uint8_t SDI = 37;
37 | static const uint8_t SCK = 36;
38 |
39 | static const uint8_t A0 = 1;
40 | static const uint8_t A1 = 2;
41 | static const uint8_t A2 = 3;
42 | static const uint8_t A3 = 4;
43 | static const uint8_t A4 = 5;
44 | static const uint8_t A5 = 6;
45 | static const uint8_t A6 = 7;
46 | static const uint8_t A7 = 8;
47 | static const uint8_t A8 = 9;
48 |
49 | static const uint8_t T1 = 1;
50 | static const uint8_t T2 = 2;
51 | static const uint8_t T3 = 3;
52 | static const uint8_t T4 = 4;
53 | static const uint8_t T5 = 5;
54 | static const uint8_t T6 = 6;
55 | static const uint8_t T7 = 7;
56 | static const uint8_t T8 = 8;
57 | static const uint8_t T9 = 9;
58 |
59 | static const uint8_t VBAT_SENSE = 10;
60 | static const uint8_t VBUS_SENSE = 33;
61 |
62 | static const uint8_t RGB_DATA = 18;
63 | static const uint8_t RGB_PWR = 17;
64 |
65 | #endif /* Pins_Arduino_h */
66 |
--------------------------------------------------------------------------------