Merge branch 'master' into sx126x-rx-boosted-gain
This commit is contained in:
@@ -41,6 +41,9 @@ jobs:
|
|||||||
id: base
|
id: base
|
||||||
uses: ./.github/actions/setup-base
|
uses: ./.github/actions/setup-base
|
||||||
|
|
||||||
|
- name: Trunk Check
|
||||||
|
uses: trunk-io/trunk-action@v1
|
||||||
|
|
||||||
- name: Check ${{ matrix.board }}
|
- name: Check ${{ matrix.board }}
|
||||||
run: bin/check-all.sh ${{ matrix.board }}
|
run: bin/check-all.sh ${{ matrix.board }}
|
||||||
|
|
||||||
@@ -109,14 +112,14 @@ jobs:
|
|||||||
uses: ./.github/actions/setup-base
|
uses: ./.github/actions/setup-base
|
||||||
|
|
||||||
# We now run integration test before other build steps (to quickly see runtime failures)
|
# We now run integration test before other build steps (to quickly see runtime failures)
|
||||||
- name: Build for native
|
#- name: Build for native
|
||||||
run: platformio run -e native
|
# run: platformio run -e native
|
||||||
- name: Integration test
|
#- name: Integration test
|
||||||
run: |
|
# run: |
|
||||||
.pio/build/native/program &
|
#.pio/build/native/program
|
||||||
sleep 20 # 5 seconds was not enough
|
#& sleep 20 # 5 seconds was not enough
|
||||||
echo "Simulator started, launching python test..."
|
#echo "Simulator started, launching python test..."
|
||||||
python3 -c 'from meshtastic.test import testSimulator; testSimulator()'
|
#python3 -c 'from meshtastic.test import testSimulator; testSimulator()'
|
||||||
|
|
||||||
- name: Build Native
|
- name: Build Native
|
||||||
run: bin/build-native.sh
|
run: bin/build-native.sh
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
name: Nightly
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: 0 8 * * 1-5
|
||||||
|
workflow_dispatch: {}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
trunk_check:
|
||||||
|
name: Trunk Check Upload
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Trunk Check
|
||||||
|
uses: trunk-io/trunk-action@v1
|
||||||
|
with:
|
||||||
|
trunk-token: ${{ secrets.TRUNK_TOKEN }}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
*out
|
||||||
|
*logs
|
||||||
|
*actions
|
||||||
|
*notifications
|
||||||
|
plugins
|
||||||
|
user_trunk.yaml
|
||||||
|
user.yaml
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
# Following source doesn't work in most setups
|
||||||
|
ignored:
|
||||||
|
- SC1090
|
||||||
|
- SC1091
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
# Autoformatter friendly markdownlint config (all formatting rules disabled)
|
||||||
|
default: true
|
||||||
|
blank_lines: false
|
||||||
|
bullet: false
|
||||||
|
html: false
|
||||||
|
indentation: false
|
||||||
|
line_length: false
|
||||||
|
spaces: false
|
||||||
|
url: false
|
||||||
|
whitespace: false
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
enable=all
|
||||||
|
source-path=SCRIPTDIR
|
||||||
|
disable=SC2154
|
||||||
|
|
||||||
|
# If you're having issues with shellcheck following source, disable the errors via:
|
||||||
|
# disable=SC1090
|
||||||
|
# disable=SC1091
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
module.exports = {
|
||||||
|
plugins: [
|
||||||
|
{
|
||||||
|
name: "preset-default",
|
||||||
|
params: {
|
||||||
|
overrides: {
|
||||||
|
removeViewBox: false, // https://github.com/svg/svgo/issues/1128
|
||||||
|
sortAttrs: true,
|
||||||
|
removeOffCanvasPaths: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
version: 0.1
|
||||||
|
cli:
|
||||||
|
version: 1.3.1
|
||||||
|
plugins:
|
||||||
|
sources:
|
||||||
|
- id: trunk
|
||||||
|
ref: v0.0.8
|
||||||
|
uri: https://github.com/trunk-io/plugins
|
||||||
|
lint:
|
||||||
|
enabled:
|
||||||
|
- shellcheck@0.9.0
|
||||||
|
- shfmt@3.5.0
|
||||||
|
- oxipng@8.0.0
|
||||||
|
- actionlint@1.6.22
|
||||||
|
- git-diff-check
|
||||||
|
- gitleaks@8.15.2
|
||||||
|
- markdownlint@0.33.0
|
||||||
|
- hadolint@2.12.0
|
||||||
|
- clang-format@14.0.0
|
||||||
|
- prettier@2.8.3
|
||||||
|
- svgo@3.0.2
|
||||||
|
runtimes:
|
||||||
|
enabled:
|
||||||
|
- go@1.18.3
|
||||||
|
- node@18.12.1
|
||||||
|
actions:
|
||||||
|
disabled:
|
||||||
|
- trunk-announce
|
||||||
|
- trunk-check-pre-push
|
||||||
|
- trunk-fmt-pre-commit
|
||||||
|
enabled:
|
||||||
|
- trunk-upgrade-available
|
||||||
Vendored
+2
-4
@@ -2,10 +2,8 @@
|
|||||||
// See http://go.microsoft.com/fwlink/?LinkId=827846
|
// See http://go.microsoft.com/fwlink/?LinkId=827846
|
||||||
// for the documentation about the extensions.json format
|
// for the documentation about the extensions.json format
|
||||||
"recommendations": [
|
"recommendations": [
|
||||||
|
"ms-vscode.cpptools",
|
||||||
"platformio.platformio-ide",
|
"platformio.platformio-ide",
|
||||||
"xaver.clang-format"
|
"trunk.io"
|
||||||
],
|
],
|
||||||
"unwantedRecommendations": [
|
|
||||||
"ms-vscode.cpptools-extension-pack"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+2
-78
@@ -1,80 +1,4 @@
|
|||||||
{
|
{
|
||||||
"files.associations": {
|
"editor.formatOnSave": true,
|
||||||
"type_traits": "cpp",
|
"editor.defaultFormatter": "trunk.io"
|
||||||
"array": "cpp",
|
|
||||||
"*.tcc": "cpp",
|
|
||||||
"cctype": "cpp",
|
|
||||||
"clocale": "cpp",
|
|
||||||
"cmath": "cpp",
|
|
||||||
"cstdarg": "cpp",
|
|
||||||
"cstddef": "cpp",
|
|
||||||
"cstdint": "cpp",
|
|
||||||
"cstdio": "cpp",
|
|
||||||
"cstdlib": "cpp",
|
|
||||||
"cstring": "cpp",
|
|
||||||
"ctime": "cpp",
|
|
||||||
"cwchar": "cpp",
|
|
||||||
"cwctype": "cpp",
|
|
||||||
"deque": "cpp",
|
|
||||||
"unordered_map": "cpp",
|
|
||||||
"unordered_set": "cpp",
|
|
||||||
"vector": "cpp",
|
|
||||||
"exception": "cpp",
|
|
||||||
"algorithm": "cpp",
|
|
||||||
"functional": "cpp",
|
|
||||||
"system_error": "cpp",
|
|
||||||
"tuple": "cpp",
|
|
||||||
"fstream": "cpp",
|
|
||||||
"initializer_list": "cpp",
|
|
||||||
"iomanip": "cpp",
|
|
||||||
"iosfwd": "cpp",
|
|
||||||
"istream": "cpp",
|
|
||||||
"limits": "cpp",
|
|
||||||
"memory": "cpp",
|
|
||||||
"new": "cpp",
|
|
||||||
"ostream": "cpp",
|
|
||||||
"numeric": "cpp",
|
|
||||||
"sstream": "cpp",
|
|
||||||
"stdexcept": "cpp",
|
|
||||||
"streambuf": "cpp",
|
|
||||||
"cinttypes": "cpp",
|
|
||||||
"utility": "cpp",
|
|
||||||
"typeinfo": "cpp",
|
|
||||||
"string": "cpp",
|
|
||||||
"*.xbm": "cpp",
|
|
||||||
"list": "cpp",
|
|
||||||
"atomic": "cpp",
|
|
||||||
"memory_resource": "cpp",
|
|
||||||
"optional": "cpp",
|
|
||||||
"string_view": "cpp",
|
|
||||||
"cassert": "cpp",
|
|
||||||
"iterator": "cpp",
|
|
||||||
"shared_mutex": "cpp",
|
|
||||||
"iostream": "cpp",
|
|
||||||
"esp_nimble_hci.h": "c",
|
|
||||||
"map": "cpp",
|
|
||||||
"random": "cpp",
|
|
||||||
"*.tpp": "cpp"
|
|
||||||
},
|
|
||||||
"cSpell.words": [
|
|
||||||
"Blox",
|
|
||||||
"EINK",
|
|
||||||
"HFSR",
|
|
||||||
"Meshtastic",
|
|
||||||
"NEMAGPS",
|
|
||||||
"NMEAGPS",
|
|
||||||
"RDEF",
|
|
||||||
"Ublox",
|
|
||||||
"bkpt",
|
|
||||||
"cfsr",
|
|
||||||
"descs",
|
|
||||||
"ocrypto",
|
|
||||||
"protobufs",
|
|
||||||
"wifi"
|
|
||||||
],
|
|
||||||
"C_Cpp.dimInactiveRegions": true,
|
|
||||||
"cmake.configureOnOpen": true,
|
|
||||||
"protoc": {
|
|
||||||
"compile_on_save": false,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -1 +1 @@
|
|||||||
cd protobufs && ..\nanopb-0.4.7\generator-bin\protoc.exe --nanopb_out=-v:..\src\mesh\generated -I=..\protobufs *.proto
|
cd protobufs && ..\nanopb-0.4.7\generator-bin\protoc.exe --nanopb_out=-v:..\src\mesh\generated\meshtastic -I=..\protobufs meshtastic\*.proto
|
||||||
|
|||||||
+6
-1
@@ -8,7 +8,12 @@ echo "prebuilt binaries for your computer into nanopb-0.4.7"
|
|||||||
|
|
||||||
# the nanopb tool seems to require that the .options file be in the current directory!
|
# the nanopb tool seems to require that the .options file be in the current directory!
|
||||||
cd protobufs
|
cd protobufs
|
||||||
../nanopb-0.4.7/generator-bin/protoc --nanopb_out=-v:../src/mesh/generated -I=../protobufs *.proto
|
../nanopb-0.4.7/generator-bin/protoc --nanopb_out=-v:../src/mesh/generated/ -I=../protobufs meshtastic/*.proto
|
||||||
|
|
||||||
|
cd ../src/mesh/generated/meshtastic
|
||||||
|
sed -i 's/#include "meshtastic/#include "./g' *
|
||||||
|
|
||||||
|
sed -i 's/meshtastic_//g' *
|
||||||
|
|
||||||
#echo "Regenerating protobuf documentation - if you see an error message"
|
#echo "Regenerating protobuf documentation - if you see an error message"
|
||||||
#echo "you can ignore it unless doing a new protobuf release to github."
|
#echo "you can ignore it unless doing a new protobuf release to github."
|
||||||
|
|||||||
+1
-1
Submodule protobufs updated: 1763fe4a38...aaa6e08b2e
+19
-18
@@ -1,11 +1,11 @@
|
|||||||
#include "../configuration.h"
|
#include "../configuration.h"
|
||||||
#include "../main.h"
|
#include "../main.h"
|
||||||
|
#include "mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
#include <Wire.h>
|
#include <Wire.h>
|
||||||
#include "mesh/generated/telemetry.pb.h"
|
|
||||||
|
|
||||||
// AXP192 and AXP2101 have the same device address, we just need to identify it in Power.cpp
|
// AXP192 and AXP2101 have the same device address, we just need to identify it in Power.cpp
|
||||||
#ifndef XPOWERS_AXP192_AXP2101_ADDRESS
|
#ifndef XPOWERS_AXP192_AXP2101_ADDRESS
|
||||||
#define XPOWERS_AXP192_AXP2101_ADDRESS 0x34
|
#define XPOWERS_AXP192_AXP2101_ADDRESS 0x34
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HAS_WIRE
|
#if HAS_WIRE
|
||||||
@@ -16,27 +16,27 @@ void printATECCInfo()
|
|||||||
atecc.readConfigZone(false);
|
atecc.readConfigZone(false);
|
||||||
|
|
||||||
LOG_DEBUG("ATECC608B Serial Number: ");
|
LOG_DEBUG("ATECC608B Serial Number: ");
|
||||||
for (int i = 0 ; i < 9 ; i++) {
|
for (int i = 0; i < 9; i++) {
|
||||||
LOG_DEBUG("%02x",atecc.serialNumber[i]);
|
LOG_DEBUG("%02x", atecc.serialNumber[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_DEBUG(", Rev Number: ");
|
LOG_DEBUG(", Rev Number: ");
|
||||||
for (int i = 0 ; i < 4 ; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
LOG_DEBUG("%02x",atecc.revisionNumber[i]);
|
LOG_DEBUG("%02x", atecc.revisionNumber[i]);
|
||||||
}
|
}
|
||||||
LOG_DEBUG("\n");
|
LOG_DEBUG("\n");
|
||||||
|
|
||||||
LOG_DEBUG("ATECC608B Config %s",atecc.configLockStatus ? "Locked" : "Unlocked");
|
LOG_DEBUG("ATECC608B Config %s", atecc.configLockStatus ? "Locked" : "Unlocked");
|
||||||
LOG_DEBUG(", Data %s",atecc.dataOTPLockStatus ? "Locked" : "Unlocked");
|
LOG_DEBUG(", Data %s", atecc.dataOTPLockStatus ? "Locked" : "Unlocked");
|
||||||
LOG_DEBUG(", Slot 0 %s\n",atecc.slot0LockStatus ? "Locked" : "Unlocked");
|
LOG_DEBUG(", Slot 0 %s\n", atecc.slot0LockStatus ? "Locked" : "Unlocked");
|
||||||
|
|
||||||
if (atecc.configLockStatus && atecc.dataOTPLockStatus && atecc.slot0LockStatus) {
|
if (atecc.configLockStatus && atecc.dataOTPLockStatus && atecc.slot0LockStatus) {
|
||||||
if (atecc.generatePublicKey() == false) {
|
if (atecc.generatePublicKey() == false) {
|
||||||
LOG_DEBUG("ATECC608B Error generating public key\n");
|
LOG_DEBUG("ATECC608B Error generating public key\n");
|
||||||
} else {
|
} else {
|
||||||
LOG_DEBUG("ATECC608B Public Key: ");
|
LOG_DEBUG("ATECC608B Public Key: ");
|
||||||
for (int i = 0 ; i < 64 ; i++) {
|
for (int i = 0; i < 64; i++) {
|
||||||
LOG_DEBUG("%02x",atecc.publicKey64Bytes[i]);
|
LOG_DEBUG("%02x", atecc.publicKey64Bytes[i]);
|
||||||
}
|
}
|
||||||
LOG_DEBUG("\n");
|
LOG_DEBUG("\n");
|
||||||
}
|
}
|
||||||
@@ -44,7 +44,8 @@ void printATECCInfo()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t getRegisterValue(uint8_t address, uint8_t reg, uint8_t length) {
|
uint16_t getRegisterValue(uint8_t address, uint8_t reg, uint8_t length)
|
||||||
|
{
|
||||||
uint16_t value = 0x00;
|
uint16_t value = 0x00;
|
||||||
Wire.beginTransmission(address);
|
Wire.beginTransmission(address);
|
||||||
Wire.write(reg);
|
Wire.write(reg);
|
||||||
@@ -81,7 +82,7 @@ uint8_t oled_probe(byte addr)
|
|||||||
|
|
||||||
if (r == 0x08 || r == 0x00) {
|
if (r == 0x08 || r == 0x00) {
|
||||||
o_probe = 2; // SH1106
|
o_probe = 2; // SH1106
|
||||||
} else if ( r == 0x03 || r == 0x04 || r == 0x06 || r == 0x07) {
|
} else if (r == 0x03 || r == 0x04 || r == 0x06 || r == 0x07) {
|
||||||
o_probe = 1; // SSD1306
|
o_probe = 1; // SSD1306
|
||||||
}
|
}
|
||||||
c++;
|
c++;
|
||||||
@@ -126,17 +127,17 @@ void scanI2Cdevice()
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef RV3028_RTC
|
#ifdef RV3028_RTC
|
||||||
if (addr == RV3028_RTC){
|
if (addr == RV3028_RTC) {
|
||||||
rtc_found = addr;
|
rtc_found = addr;
|
||||||
LOG_INFO("RV3028 RTC found\n");
|
LOG_INFO("RV3028 RTC found\n");
|
||||||
Melopero_RV3028 rtc;
|
Melopero_RV3028 rtc;
|
||||||
rtc.initI2C();
|
rtc.initI2C();
|
||||||
rtc.writeToRegister(0x35,0x07); // no Clkout
|
rtc.writeToRegister(0x35, 0x07); // no Clkout
|
||||||
rtc.writeToRegister(0x37,0xB4);
|
rtc.writeToRegister(0x37, 0xB4);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef PCF8563_RTC
|
#ifdef PCF8563_RTC
|
||||||
if (addr == PCF8563_RTC){
|
if (addr == PCF8563_RTC) {
|
||||||
rtc_found = addr;
|
rtc_found = addr;
|
||||||
LOG_INFO("PCF8563 RTC found\n");
|
LOG_INFO("PCF8563 RTC found\n");
|
||||||
}
|
}
|
||||||
@@ -225,7 +226,7 @@ void scanI2Cdevice()
|
|||||||
if (nDevices == 0)
|
if (nDevices == 0)
|
||||||
LOG_INFO("No I2C devices found\n");
|
LOG_INFO("No I2C devices found\n");
|
||||||
else
|
else
|
||||||
LOG_INFO("%i I2C devices found\n",nDevices);
|
LOG_INFO("%i I2C devices found\n", nDevices);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
void scanI2Cdevice() {}
|
void scanI2Cdevice() {}
|
||||||
|
|||||||
+3
-2
@@ -2,10 +2,11 @@
|
|||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
#include "mesh/generated/mesh.pb.h" // For CriticalErrorCode
|
#include "mesh/generated/meshtastic/mesh.pb.h" // For CriticalErrorCode
|
||||||
|
|
||||||
/// A macro that include filename and line
|
/// A macro that include filename and line
|
||||||
#define RECORD_CRITICALERROR(code) recordCriticalError(code, __LINE__, __FILE__)
|
#define RECORD_CRITICALERROR(code) recordCriticalError(code, __LINE__, __FILE__)
|
||||||
|
|
||||||
/// Record an error that should be reported via analytics
|
/// Record an error that should be reported via analytics
|
||||||
void recordCriticalError(CriticalErrorCode code = CriticalErrorCode_UNSPECIFIED, uint32_t address = 0, const char *filename = NULL);
|
void recordCriticalError(CriticalErrorCode code = CriticalErrorCode_UNSPECIFIED, uint32_t address = 0,
|
||||||
|
const char *filename = NULL);
|
||||||
|
|||||||
+75
-67
@@ -33,9 +33,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "mesh-pb-constants.h"
|
#include "mesh-pb-constants.h"
|
||||||
#include "mesh/Channels.h"
|
#include "mesh/Channels.h"
|
||||||
#include "mesh/generated/deviceonly.pb.h"
|
#include "mesh/generated/meshtastic/deviceonly.pb.h"
|
||||||
#include "modules/TextMessageModule.h"
|
|
||||||
#include "modules/ExternalNotificationModule.h"
|
#include "modules/ExternalNotificationModule.h"
|
||||||
|
#include "modules/TextMessageModule.h"
|
||||||
#include "sleep.h"
|
#include "sleep.h"
|
||||||
#include "target_specific.h"
|
#include "target_specific.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
@@ -97,9 +97,9 @@ static uint16_t displayWidth, displayHeight;
|
|||||||
|
|
||||||
#if defined(USE_EINK) || defined(ILI9341_DRIVER) || defined(ST7735_CS)
|
#if defined(USE_EINK) || defined(ILI9341_DRIVER) || defined(ST7735_CS)
|
||||||
// The screen is bigger so use bigger fonts
|
// The screen is bigger so use bigger fonts
|
||||||
#define FONT_SMALL ArialMT_Plain_16 // Height: 19
|
#define FONT_SMALL ArialMT_Plain_16 // Height: 19
|
||||||
#define FONT_MEDIUM ArialMT_Plain_24 // Height: 28
|
#define FONT_MEDIUM ArialMT_Plain_24 // Height: 28
|
||||||
#define FONT_LARGE ArialMT_Plain_24 // Height: 28
|
#define FONT_LARGE ArialMT_Plain_24 // Height: 28
|
||||||
#else
|
#else
|
||||||
#ifdef OLED_RU
|
#ifdef OLED_RU
|
||||||
#define FONT_SMALL ArialMT_Plain_10_RU
|
#define FONT_SMALL ArialMT_Plain_10_RU
|
||||||
@@ -107,7 +107,7 @@ static uint16_t displayWidth, displayHeight;
|
|||||||
#define FONT_SMALL ArialMT_Plain_10 // Height: 13
|
#define FONT_SMALL ArialMT_Plain_10 // Height: 13
|
||||||
#endif
|
#endif
|
||||||
#define FONT_MEDIUM ArialMT_Plain_16 // Height: 19
|
#define FONT_MEDIUM ArialMT_Plain_16 // Height: 19
|
||||||
#define FONT_LARGE ArialMT_Plain_24 // Height: 28
|
#define FONT_LARGE ArialMT_Plain_24 // Height: 28
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define fontHeight(font) ((font)[1] + 1) // height is position 1
|
#define fontHeight(font) ((font)[1] + 1) // height is position 1
|
||||||
@@ -118,7 +118,6 @@ static uint16_t displayWidth, displayHeight;
|
|||||||
|
|
||||||
#define getStringCenteredX(s) ((SCREEN_WIDTH - display->getStringWidth(s)) / 2)
|
#define getStringCenteredX(s) ((SCREEN_WIDTH - display->getStringWidth(s)) / 2)
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Draw the icon with extra info printed around the corners
|
* Draw the icon with extra info printed around the corners
|
||||||
*/
|
*/
|
||||||
@@ -292,7 +291,7 @@ static void drawFrameBluetooth(OLEDDisplay *display, OLEDDisplayUiState *state,
|
|||||||
display->drawString(x_offset + x, y_offset + y, "Bluetooth");
|
display->drawString(x_offset + x, y_offset + y, "Bluetooth");
|
||||||
|
|
||||||
display->setFont(FONT_SMALL);
|
display->setFont(FONT_SMALL);
|
||||||
y_offset = display->height() == 64 ? y_offset + FONT_HEIGHT_MEDIUM -4 : y_offset + FONT_HEIGHT_MEDIUM + 5;
|
y_offset = display->height() == 64 ? y_offset + FONT_HEIGHT_MEDIUM - 4 : y_offset + FONT_HEIGHT_MEDIUM + 5;
|
||||||
display->drawString(x_offset + x, y_offset + y, "Enter this code");
|
display->drawString(x_offset + x, y_offset + y, "Enter this code");
|
||||||
|
|
||||||
display->setFont(FONT_LARGE);
|
display->setFont(FONT_LARGE);
|
||||||
@@ -302,7 +301,7 @@ static void drawFrameBluetooth(OLEDDisplay *display, OLEDDisplayUiState *state,
|
|||||||
display->drawString(x_offset + x, y_offset + y, pin);
|
display->drawString(x_offset + x, y_offset + y, pin);
|
||||||
|
|
||||||
display->setFont(FONT_SMALL);
|
display->setFont(FONT_SMALL);
|
||||||
String deviceName = "Name: ";
|
String deviceName = "Name: ";
|
||||||
deviceName.concat(getDeviceName());
|
deviceName.concat(getDeviceName());
|
||||||
y_offset = display->height() == 64 ? y_offset + FONT_HEIGHT_LARGE - 6 : y_offset + FONT_HEIGHT_LARGE + 5;
|
y_offset = display->height() == 64 ? y_offset + FONT_HEIGHT_LARGE - 6 : y_offset + FONT_HEIGHT_LARGE + 5;
|
||||||
display->drawString(x_offset + x, y_offset + y, deviceName);
|
display->drawString(x_offset + x, y_offset + y, deviceName);
|
||||||
@@ -332,7 +331,8 @@ static void drawFrameFirmware(OLEDDisplay *display, OLEDDisplayUiState *state, i
|
|||||||
|
|
||||||
display->setFont(FONT_SMALL);
|
display->setFont(FONT_SMALL);
|
||||||
display->setTextAlignment(TEXT_ALIGN_LEFT);
|
display->setTextAlignment(TEXT_ALIGN_LEFT);
|
||||||
display->drawStringMaxWidth(0 + x, 2 + y + FONT_HEIGHT_SMALL *2, x + display->getWidth(), "Please be patient and do not power off.");
|
display->drawStringMaxWidth(0 + x, 2 + y + FONT_HEIGHT_SMALL * 2, x + display->getWidth(),
|
||||||
|
"Please be patient and do not power off.");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Draw the last text message we received
|
/// Draw the last text message we received
|
||||||
@@ -354,8 +354,7 @@ static void drawCriticalFaultFrame(OLEDDisplay *display, OLEDDisplayUiState *sta
|
|||||||
// Ignore messages orginating from phone (from the current node 0x0) unless range test or store and forward module are enabled
|
// Ignore messages orginating from phone (from the current node 0x0) unless range test or store and forward module are enabled
|
||||||
static bool shouldDrawMessage(const MeshPacket *packet)
|
static bool shouldDrawMessage(const MeshPacket *packet)
|
||||||
{
|
{
|
||||||
return packet->from != 0 && !moduleConfig.range_test.enabled &&
|
return packet->from != 0 && !moduleConfig.range_test.enabled && !moduleConfig.store_forward.enabled;
|
||||||
!moduleConfig.store_forward.enabled;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Draw the last text message we received
|
/// Draw the last text message we received
|
||||||
@@ -381,7 +380,7 @@ static void drawTextMessageFrame(OLEDDisplay *display, OLEDDisplayUiState *state
|
|||||||
display->setColor(BLACK);
|
display->setColor(BLACK);
|
||||||
}
|
}
|
||||||
display->drawStringf(0 + x, 0 + y, tempBuf, "From: %s", (node && node->has_user) ? node->user.short_name : "???");
|
display->drawStringf(0 + x, 0 + y, tempBuf, "From: %s", (node && node->has_user) ? node->user.short_name : "???");
|
||||||
if(config.display.heading_bold) {
|
if (config.display.heading_bold) {
|
||||||
display->drawStringf(1 + x, 0 + y, tempBuf, "From: %s", (node && node->has_user) ? node->user.short_name : "???");
|
display->drawStringf(1 + x, 0 + y, tempBuf, "From: %s", (node && node->has_user) ? node->user.short_name : "???");
|
||||||
}
|
}
|
||||||
display->setColor(WHITE);
|
display->setColor(WHITE);
|
||||||
@@ -477,7 +476,7 @@ static void drawNodes(OLEDDisplay *display, int16_t x, int16_t y, NodeStatus *no
|
|||||||
display->drawFastImage(x, y, 8, 8, imgUser);
|
display->drawFastImage(x, y, 8, 8, imgUser);
|
||||||
#endif
|
#endif
|
||||||
display->drawString(x + 10, y - 2, usersString);
|
display->drawString(x + 10, y - 2, usersString);
|
||||||
if(config.display.heading_bold)
|
if (config.display.heading_bold)
|
||||||
display->drawString(x + 11, y - 2, usersString);
|
display->drawString(x + 11, y - 2, usersString);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -487,20 +486,20 @@ static void drawGPS(OLEDDisplay *display, int16_t x, int16_t y, const GPSStatus
|
|||||||
if (config.position.fixed_position) {
|
if (config.position.fixed_position) {
|
||||||
// GPS coordinates are currently fixed
|
// GPS coordinates are currently fixed
|
||||||
display->drawString(x - 1, y - 2, "Fixed GPS");
|
display->drawString(x - 1, y - 2, "Fixed GPS");
|
||||||
if(config.display.heading_bold)
|
if (config.display.heading_bold)
|
||||||
display->drawString(x, y - 2, "Fixed GPS");
|
display->drawString(x, y - 2, "Fixed GPS");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!gps->getIsConnected()) {
|
if (!gps->getIsConnected()) {
|
||||||
display->drawString(x, y - 2, "No GPS");
|
display->drawString(x, y - 2, "No GPS");
|
||||||
if(config.display.heading_bold)
|
if (config.display.heading_bold)
|
||||||
display->drawString(x + 1, y - 2, "No GPS");
|
display->drawString(x + 1, y - 2, "No GPS");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
display->drawFastImage(x, y, 6, 8, gps->getHasLock() ? imgPositionSolid : imgPositionEmpty);
|
display->drawFastImage(x, y, 6, 8, gps->getHasLock() ? imgPositionSolid : imgPositionEmpty);
|
||||||
if (!gps->getHasLock()) {
|
if (!gps->getHasLock()) {
|
||||||
display->drawString(x + 8, y - 2, "No sats");
|
display->drawString(x + 8, y - 2, "No sats");
|
||||||
if(config.display.heading_bold)
|
if (config.display.heading_bold)
|
||||||
display->drawString(x + 9, y - 2, "No sats");
|
display->drawString(x + 9, y - 2, "No sats");
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
@@ -523,24 +522,24 @@ static void drawGPS(OLEDDisplay *display, int16_t x, int16_t y, const GPSStatus
|
|||||||
// Draw the number of satellites
|
// Draw the number of satellites
|
||||||
snprintf(satsString, sizeof(satsString), "%u", gps->getNumSatellites());
|
snprintf(satsString, sizeof(satsString), "%u", gps->getNumSatellites());
|
||||||
display->drawString(x + 34, y - 2, satsString);
|
display->drawString(x + 34, y - 2, satsString);
|
||||||
if(config.display.heading_bold)
|
if (config.display.heading_bold)
|
||||||
display->drawString(x + 35, y - 2, satsString);
|
display->drawString(x + 35, y - 2, satsString);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Draw status when gps is disabled by PMU
|
// Draw status when gps is disabled by PMU
|
||||||
static void drawGPSpowerstat(OLEDDisplay *display, int16_t x, int16_t y, const GPSStatus *gps)
|
static void drawGPSpowerstat(OLEDDisplay *display, int16_t x, int16_t y, const GPSStatus *gps)
|
||||||
{
|
{
|
||||||
#ifdef HAS_PMU
|
#ifdef HAS_PMU
|
||||||
String displayLine = "GPS disabled";
|
String displayLine = "GPS disabled";
|
||||||
int16_t xPos = display->getStringWidth(displayLine);
|
int16_t xPos = display->getStringWidth(displayLine);
|
||||||
|
|
||||||
if (!config.position.gps_enabled){
|
if (!config.position.gps_enabled) {
|
||||||
display->drawString(x + xPos, y, displayLine);
|
display->drawString(x + xPos, y, displayLine);
|
||||||
#ifdef GPS_POWER_TOGGLE
|
#ifdef GPS_POWER_TOGGLE
|
||||||
display->drawString(x + xPos, y - 2 + FONT_HEIGHT_SMALL, " by button");
|
display->drawString(x + xPos, y - 2 + FONT_HEIGHT_SMALL, " by button");
|
||||||
#endif
|
#endif
|
||||||
//display->drawString(x + xPos, y + 2, displayLine);
|
// display->drawString(x + xPos, y + 2, displayLine);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -582,22 +581,23 @@ static void drawGPScoordinates(OLEDDisplay *display, int16_t x, int16_t y, const
|
|||||||
if (gpsFormat != Config_DisplayConfig_GpsCoordinateFormat_DMS) {
|
if (gpsFormat != Config_DisplayConfig_GpsCoordinateFormat_DMS) {
|
||||||
char coordinateLine[22];
|
char coordinateLine[22];
|
||||||
if (gpsFormat == Config_DisplayConfig_GpsCoordinateFormat_DEC) { // Decimal Degrees
|
if (gpsFormat == Config_DisplayConfig_GpsCoordinateFormat_DEC) { // Decimal Degrees
|
||||||
snprintf(coordinateLine, sizeof(coordinateLine), "%f %f", geoCoord.getLatitude() * 1e-7, geoCoord.getLongitude() * 1e-7);
|
snprintf(coordinateLine, sizeof(coordinateLine), "%f %f", geoCoord.getLatitude() * 1e-7,
|
||||||
|
geoCoord.getLongitude() * 1e-7);
|
||||||
} else if (gpsFormat == Config_DisplayConfig_GpsCoordinateFormat_UTM) { // Universal Transverse Mercator
|
} else if (gpsFormat == Config_DisplayConfig_GpsCoordinateFormat_UTM) { // Universal Transverse Mercator
|
||||||
snprintf(coordinateLine, sizeof(coordinateLine), "%2i%1c %06u %07u", geoCoord.getUTMZone(), geoCoord.getUTMBand(),
|
snprintf(coordinateLine, sizeof(coordinateLine), "%2i%1c %06u %07u", geoCoord.getUTMZone(), geoCoord.getUTMBand(),
|
||||||
geoCoord.getUTMEasting(), geoCoord.getUTMNorthing());
|
geoCoord.getUTMEasting(), geoCoord.getUTMNorthing());
|
||||||
} else if (gpsFormat == Config_DisplayConfig_GpsCoordinateFormat_MGRS) { // Military Grid Reference System
|
} else if (gpsFormat == Config_DisplayConfig_GpsCoordinateFormat_MGRS) { // Military Grid Reference System
|
||||||
snprintf(coordinateLine, sizeof(coordinateLine), "%2i%1c %1c%1c %05u %05u", geoCoord.getMGRSZone(), geoCoord.getMGRSBand(),
|
snprintf(coordinateLine, sizeof(coordinateLine), "%2i%1c %1c%1c %05u %05u", geoCoord.getMGRSZone(),
|
||||||
geoCoord.getMGRSEast100k(), geoCoord.getMGRSNorth100k(), geoCoord.getMGRSEasting(),
|
geoCoord.getMGRSBand(), geoCoord.getMGRSEast100k(), geoCoord.getMGRSNorth100k(),
|
||||||
geoCoord.getMGRSNorthing());
|
geoCoord.getMGRSEasting(), geoCoord.getMGRSNorthing());
|
||||||
} else if (gpsFormat == Config_DisplayConfig_GpsCoordinateFormat_OLC) { // Open Location Code
|
} else if (gpsFormat == Config_DisplayConfig_GpsCoordinateFormat_OLC) { // Open Location Code
|
||||||
geoCoord.getOLCCode(coordinateLine);
|
geoCoord.getOLCCode(coordinateLine);
|
||||||
} else if (gpsFormat == Config_DisplayConfig_GpsCoordinateFormat_OSGR) { // Ordnance Survey Grid Reference
|
} else if (gpsFormat == Config_DisplayConfig_GpsCoordinateFormat_OSGR) { // Ordnance Survey Grid Reference
|
||||||
if (geoCoord.getOSGRE100k() == 'I' || geoCoord.getOSGRN100k() == 'I') // OSGR is only valid around the UK region
|
if (geoCoord.getOSGRE100k() == 'I' || geoCoord.getOSGRN100k() == 'I') // OSGR is only valid around the UK region
|
||||||
snprintf(coordinateLine, sizeof(coordinateLine), "%s", "Out of Boundary");
|
snprintf(coordinateLine, sizeof(coordinateLine), "%s", "Out of Boundary");
|
||||||
else
|
else
|
||||||
snprintf(coordinateLine, sizeof(coordinateLine), "%1c%1c %05u %05u", geoCoord.getOSGRE100k(), geoCoord.getOSGRN100k(),
|
snprintf(coordinateLine, sizeof(coordinateLine), "%1c%1c %05u %05u", geoCoord.getOSGRE100k(),
|
||||||
geoCoord.getOSGREasting(), geoCoord.getOSGRNorthing());
|
geoCoord.getOSGRN100k(), geoCoord.getOSGREasting(), geoCoord.getOSGRNorthing());
|
||||||
}
|
}
|
||||||
|
|
||||||
// If fixed position, display text "Fixed GPS" alternating with the coordinates.
|
// If fixed position, display text "Fixed GPS" alternating with the coordinates.
|
||||||
@@ -614,10 +614,10 @@ static void drawGPScoordinates(OLEDDisplay *display, int16_t x, int16_t y, const
|
|||||||
} else {
|
} else {
|
||||||
char latLine[22];
|
char latLine[22];
|
||||||
char lonLine[22];
|
char lonLine[22];
|
||||||
snprintf(latLine, sizeof(latLine), "%2i° %2i' %2u\" %1c", geoCoord.getDMSLatDeg(), geoCoord.getDMSLatMin(), geoCoord.getDMSLatSec(),
|
snprintf(latLine, sizeof(latLine), "%2i° %2i' %2u\" %1c", geoCoord.getDMSLatDeg(), geoCoord.getDMSLatMin(),
|
||||||
geoCoord.getDMSLatCP());
|
geoCoord.getDMSLatSec(), geoCoord.getDMSLatCP());
|
||||||
snprintf(lonLine, sizeof(lonLine), "%3i° %2i' %2u\" %1c", geoCoord.getDMSLonDeg(), geoCoord.getDMSLonMin(), geoCoord.getDMSLonSec(),
|
snprintf(lonLine, sizeof(lonLine), "%3i° %2i' %2u\" %1c", geoCoord.getDMSLonDeg(), geoCoord.getDMSLonMin(),
|
||||||
geoCoord.getDMSLonCP());
|
geoCoord.getDMSLonSec(), geoCoord.getDMSLonCP());
|
||||||
display->drawString(x + (SCREEN_WIDTH - (display->getStringWidth(latLine))) / 2, y - FONT_HEIGHT_SMALL * 1, latLine);
|
display->drawString(x + (SCREEN_WIDTH - (display->getStringWidth(latLine))) / 2, y - FONT_HEIGHT_SMALL * 1, latLine);
|
||||||
display->drawString(x + (SCREEN_WIDTH - (display->getStringWidth(lonLine))) / 2, y, lonLine);
|
display->drawString(x + (SCREEN_WIDTH - (display->getStringWidth(lonLine))) / 2, y, lonLine);
|
||||||
}
|
}
|
||||||
@@ -653,8 +653,8 @@ class Point
|
|||||||
|
|
||||||
void scale(float f)
|
void scale(float f)
|
||||||
{
|
{
|
||||||
//We use -f here to counter the flip that happens
|
// We use -f here to counter the flip that happens
|
||||||
//on the y axis when drawing and rotating on screen
|
// on the y axis when drawing and rotating on screen
|
||||||
x *= f;
|
x *= f;
|
||||||
y *= -f;
|
y *= -f;
|
||||||
}
|
}
|
||||||
@@ -713,7 +713,7 @@ static uint16_t getCompassDiam(OLEDDisplay *display)
|
|||||||
offset = FONT_HEIGHT_SMALL;
|
offset = FONT_HEIGHT_SMALL;
|
||||||
|
|
||||||
// get the smaller of the 2 dimensions and subtract 20
|
// get the smaller of the 2 dimensions and subtract 20
|
||||||
if(display->getWidth() > (display->getHeight() - offset)) {
|
if (display->getWidth() > (display->getHeight() - offset)) {
|
||||||
diam = display->getHeight() - offset;
|
diam = display->getHeight() - offset;
|
||||||
// if 2/3 of the other size would be smaller, use that
|
// if 2/3 of the other size would be smaller, use that
|
||||||
if (diam > (display->getWidth() * 2 / 3)) {
|
if (diam > (display->getWidth() * 2 / 3)) {
|
||||||
@@ -756,8 +756,8 @@ static void drawNodeHeading(OLEDDisplay *display, int16_t compassX, int16_t comp
|
|||||||
// Draw north
|
// Draw north
|
||||||
static void drawCompassNorth(OLEDDisplay *display, int16_t compassX, int16_t compassY, float myHeading)
|
static void drawCompassNorth(OLEDDisplay *display, int16_t compassX, int16_t compassY, float myHeading)
|
||||||
{
|
{
|
||||||
//If north is supposed to be at the top of the compass we want rotation to be +0
|
// If north is supposed to be at the top of the compass we want rotation to be +0
|
||||||
if(config.display.compass_north_top)
|
if (config.display.compass_north_top)
|
||||||
myHeading = -0;
|
myHeading = -0;
|
||||||
|
|
||||||
Point N1(-0.04f, 0.65f), N2(0.04f, 0.65f);
|
Point N1(-0.04f, 0.65f), N2(0.04f, 0.65f);
|
||||||
@@ -874,7 +874,7 @@ static void drawNodeInfo(OLEDDisplay *display, OLEDDisplayUiState *state, int16_
|
|||||||
GeoCoord::bearing(DegD(op.latitude_i), DegD(op.longitude_i), DegD(p.latitude_i), DegD(p.longitude_i));
|
GeoCoord::bearing(DegD(op.latitude_i), DegD(op.longitude_i), DegD(p.latitude_i), DegD(p.longitude_i));
|
||||||
// If the top of the compass is a static north then bearingToOther can be drawn on the compass directly
|
// If the top of the compass is a static north then bearingToOther can be drawn on the compass directly
|
||||||
// If the top of the compass is not a static north we need adjust bearingToOther based on heading
|
// If the top of the compass is not a static north we need adjust bearingToOther based on heading
|
||||||
if(!config.display.compass_north_top)
|
if (!config.display.compass_north_top)
|
||||||
bearingToOther -= myHeading;
|
bearingToOther -= myHeading;
|
||||||
drawNodeHeading(display, compassX, compassY, bearingToOther);
|
drawNodeHeading(display, compassX, compassY, bearingToOther);
|
||||||
}
|
}
|
||||||
@@ -1000,8 +1000,8 @@ void Screen::setup()
|
|||||||
#ifdef SCREEN_MIRROR
|
#ifdef SCREEN_MIRROR
|
||||||
dispdev.mirrorScreen();
|
dispdev.mirrorScreen();
|
||||||
#else
|
#else
|
||||||
// Standard behaviour is to FLIP the screen (needed on T-Beam). If this config item is set, unflip it, and thereby logically flip it.
|
// Standard behaviour is to FLIP the screen (needed on T-Beam). If this config item is set, unflip it, and thereby logically
|
||||||
// If you have a headache now, you're welcome.
|
// flip it. If you have a headache now, you're welcome.
|
||||||
if (!config.display.flip_screen) {
|
if (!config.display.flip_screen) {
|
||||||
dispdev.flipScreenVertically();
|
dispdev.flipScreenVertically();
|
||||||
}
|
}
|
||||||
@@ -1414,7 +1414,7 @@ void DebugInfo::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16
|
|||||||
// Display power status
|
// Display power status
|
||||||
if (powerStatus->getHasBattery()) {
|
if (powerStatus->getHasBattery()) {
|
||||||
if (config.display.displaymode == Config_DisplayConfig_DisplayMode_DEFAULT) {
|
if (config.display.displaymode == Config_DisplayConfig_DisplayMode_DEFAULT) {
|
||||||
drawBattery(display, x , y + 2, imgBattery, powerStatus);
|
drawBattery(display, x, y + 2, imgBattery, powerStatus);
|
||||||
} else {
|
} else {
|
||||||
drawBattery(display, x + 1, y + 3, imgBattery, powerStatus);
|
drawBattery(display, x + 1, y + 3, imgBattery, powerStatus);
|
||||||
}
|
}
|
||||||
@@ -1432,7 +1432,7 @@ void DebugInfo::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16
|
|||||||
drawNodes(display, x + (SCREEN_WIDTH * 0.25), y + 3, nodeStatus);
|
drawNodes(display, x + (SCREEN_WIDTH * 0.25), y + 3, nodeStatus);
|
||||||
}
|
}
|
||||||
// Display GPS status
|
// Display GPS status
|
||||||
if (!config.position.gps_enabled){
|
if (!config.position.gps_enabled) {
|
||||||
int16_t yPos = y + 2;
|
int16_t yPos = y + 2;
|
||||||
#ifdef GPS_POWER_TOGGLE
|
#ifdef GPS_POWER_TOGGLE
|
||||||
yPos = (y + 10 + FONT_HEIGHT_SMALL);
|
yPos = (y + 10 + FONT_HEIGHT_SMALL);
|
||||||
@@ -1452,26 +1452,35 @@ void DebugInfo::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16
|
|||||||
// Draw our hardware ID to assist with bluetooth pairing. Either prefix with Info or S&F Logo
|
// Draw our hardware ID to assist with bluetooth pairing. Either prefix with Info or S&F Logo
|
||||||
if (moduleConfig.store_forward.enabled) {
|
if (moduleConfig.store_forward.enabled) {
|
||||||
#ifdef ARCH_ESP32
|
#ifdef ARCH_ESP32
|
||||||
if (millis() - storeForwardModule->lastHeartbeat > (storeForwardModule->heartbeatInterval * 1200)) { //no heartbeat, overlap a bit
|
if (millis() - storeForwardModule->lastHeartbeat >
|
||||||
|
(storeForwardModule->heartbeatInterval * 1200)) { // no heartbeat, overlap a bit
|
||||||
#if defined(USE_EINK) || defined(ILI9341_DRIVER) || defined(ST7735_CS)
|
#if defined(USE_EINK) || defined(ILI9341_DRIVER) || defined(ST7735_CS)
|
||||||
display->drawFastImage(x + SCREEN_WIDTH - 14 - display->getStringWidth(ourId), y + 3 + FONT_HEIGHT_SMALL, 12, 8, imgQuestionL1);
|
display->drawFastImage(x + SCREEN_WIDTH - 14 - display->getStringWidth(ourId), y + 3 + FONT_HEIGHT_SMALL, 12, 8,
|
||||||
display->drawFastImage(x + SCREEN_WIDTH - 14 - display->getStringWidth(ourId), y + 11 + FONT_HEIGHT_SMALL, 12, 8, imgQuestionL2);
|
imgQuestionL1);
|
||||||
|
display->drawFastImage(x + SCREEN_WIDTH - 14 - display->getStringWidth(ourId), y + 11 + FONT_HEIGHT_SMALL, 12, 8,
|
||||||
|
imgQuestionL2);
|
||||||
#else
|
#else
|
||||||
display->drawFastImage(x + SCREEN_WIDTH - 10 - display->getStringWidth(ourId), y + 2 + FONT_HEIGHT_SMALL, 8, 8, imgQuestion);
|
display->drawFastImage(x + SCREEN_WIDTH - 10 - display->getStringWidth(ourId), y + 2 + FONT_HEIGHT_SMALL, 8, 8,
|
||||||
|
imgQuestion);
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
#if defined(USE_EINK) || defined(ILI9341_DRIVER) || defined(ST7735_CS)
|
#if defined(USE_EINK) || defined(ILI9341_DRIVER) || defined(ST7735_CS)
|
||||||
display->drawFastImage(x + SCREEN_WIDTH - 18 - display->getStringWidth(ourId), y + 3 + FONT_HEIGHT_SMALL, 16, 8, imgSFL1);
|
display->drawFastImage(x + SCREEN_WIDTH - 18 - display->getStringWidth(ourId), y + 3 + FONT_HEIGHT_SMALL, 16, 8,
|
||||||
display->drawFastImage(x + SCREEN_WIDTH - 18 - display->getStringWidth(ourId), y + 11 + FONT_HEIGHT_SMALL, 16, 8, imgSFL2);
|
imgSFL1);
|
||||||
|
display->drawFastImage(x + SCREEN_WIDTH - 18 - display->getStringWidth(ourId), y + 11 + FONT_HEIGHT_SMALL, 16, 8,
|
||||||
|
imgSFL2);
|
||||||
#else
|
#else
|
||||||
display->drawFastImage(x + SCREEN_WIDTH - 13 - display->getStringWidth(ourId), y + 2 + FONT_HEIGHT_SMALL, 11, 8, imgSF);
|
display->drawFastImage(x + SCREEN_WIDTH - 13 - display->getStringWidth(ourId), y + 2 + FONT_HEIGHT_SMALL, 11, 8,
|
||||||
|
imgSF);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
#if defined(USE_EINK) || defined(ILI9341_DRIVER) || defined(ST7735_CS)
|
#if defined(USE_EINK) || defined(ILI9341_DRIVER) || defined(ST7735_CS)
|
||||||
display->drawFastImage(x + SCREEN_WIDTH - 14 - display->getStringWidth(ourId), y + 3 + FONT_HEIGHT_SMALL, 12, 8, imgInfoL1);
|
display->drawFastImage(x + SCREEN_WIDTH - 14 - display->getStringWidth(ourId), y + 3 + FONT_HEIGHT_SMALL, 12, 8,
|
||||||
display->drawFastImage(x + SCREEN_WIDTH - 14 - display->getStringWidth(ourId), y + 11 + FONT_HEIGHT_SMALL, 12, 8, imgInfoL2);
|
imgInfoL1);
|
||||||
|
display->drawFastImage(x + SCREEN_WIDTH - 14 - display->getStringWidth(ourId), y + 11 + FONT_HEIGHT_SMALL, 12, 8,
|
||||||
|
imgInfoL2);
|
||||||
#else
|
#else
|
||||||
display->drawFastImage(x + SCREEN_WIDTH - 10 - display->getStringWidth(ourId), y + 2 + FONT_HEIGHT_SMALL, 8, 8, imgInfo);
|
display->drawFastImage(x + SCREEN_WIDTH - 10 - display->getStringWidth(ourId), y + 2 + FONT_HEIGHT_SMALL, 8, 8, imgInfo);
|
||||||
#endif
|
#endif
|
||||||
@@ -1510,16 +1519,16 @@ void DebugInfo::drawFrameWiFi(OLEDDisplay *display, OLEDDisplayUiState *state, i
|
|||||||
|
|
||||||
if (WiFi.status() != WL_CONNECTED) {
|
if (WiFi.status() != WL_CONNECTED) {
|
||||||
display->drawString(x, y, String("WiFi: Not Connected"));
|
display->drawString(x, y, String("WiFi: Not Connected"));
|
||||||
if(config.display.heading_bold)
|
if (config.display.heading_bold)
|
||||||
display->drawString(x + 1, y, String("WiFi: Not Connected"));
|
display->drawString(x + 1, y, String("WiFi: Not Connected"));
|
||||||
} else {
|
} else {
|
||||||
display->drawString(x, y, String("WiFi: Connected"));
|
display->drawString(x, y, String("WiFi: Connected"));
|
||||||
if(config.display.heading_bold)
|
if (config.display.heading_bold)
|
||||||
display->drawString(x + 1, y, String("WiFi: Connected"));
|
display->drawString(x + 1, y, String("WiFi: Connected"));
|
||||||
|
|
||||||
display->drawString(x + SCREEN_WIDTH - display->getStringWidth("RSSI " + String(WiFi.RSSI())), y,
|
display->drawString(x + SCREEN_WIDTH - display->getStringWidth("RSSI " + String(WiFi.RSSI())), y,
|
||||||
"RSSI " + String(WiFi.RSSI()));
|
"RSSI " + String(WiFi.RSSI()));
|
||||||
if(config.display.heading_bold) {
|
if (config.display.heading_bold) {
|
||||||
display->drawString(x + SCREEN_WIDTH - display->getStringWidth("RSSI " + String(WiFi.RSSI())) - 1, y,
|
display->drawString(x + SCREEN_WIDTH - display->getStringWidth("RSSI " + String(WiFi.RSSI())) - 1, y,
|
||||||
"RSSI " + String(WiFi.RSSI()));
|
"RSSI " + String(WiFi.RSSI()));
|
||||||
}
|
}
|
||||||
@@ -1650,12 +1659,12 @@ void DebugInfo::drawFrameSettings(OLEDDisplay *display, OLEDDisplayUiState *stat
|
|||||||
|
|
||||||
// Line 1
|
// Line 1
|
||||||
display->drawString(x, y, batStr);
|
display->drawString(x, y, batStr);
|
||||||
if(config.display.heading_bold)
|
if (config.display.heading_bold)
|
||||||
display->drawString(x + 1, y, batStr);
|
display->drawString(x + 1, y, batStr);
|
||||||
} else {
|
} else {
|
||||||
// Line 1
|
// Line 1
|
||||||
display->drawString(x, y, String("USB"));
|
display->drawString(x, y, String("USB"));
|
||||||
if(config.display.heading_bold)
|
if (config.display.heading_bold)
|
||||||
display->drawString(x + 1, y, String("USB"));
|
display->drawString(x + 1, y, String("USB"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1689,7 +1698,7 @@ void DebugInfo::drawFrameSettings(OLEDDisplay *display, OLEDDisplayUiState *stat
|
|||||||
}
|
}
|
||||||
|
|
||||||
display->drawString(x + SCREEN_WIDTH - display->getStringWidth(mode), y, mode);
|
display->drawString(x + SCREEN_WIDTH - display->getStringWidth(mode), y, mode);
|
||||||
if(config.display.heading_bold)
|
if (config.display.heading_bold)
|
||||||
display->drawString(x + SCREEN_WIDTH - display->getStringWidth(mode) - 1, y, mode);
|
display->drawString(x + SCREEN_WIDTH - display->getStringWidth(mode) - 1, y, mode);
|
||||||
|
|
||||||
// Line 2
|
// Line 2
|
||||||
@@ -1740,17 +1749,16 @@ void DebugInfo::drawFrameSettings(OLEDDisplay *display, OLEDDisplayUiState *stat
|
|||||||
char chUtil[13];
|
char chUtil[13];
|
||||||
snprintf(chUtil, sizeof(chUtil), "ChUtil %2.0f%%", airTime->channelUtilizationPercent());
|
snprintf(chUtil, sizeof(chUtil), "ChUtil %2.0f%%", airTime->channelUtilizationPercent());
|
||||||
display->drawString(x + SCREEN_WIDTH - display->getStringWidth(chUtil), y + FONT_HEIGHT_SMALL * 1, chUtil);
|
display->drawString(x + SCREEN_WIDTH - display->getStringWidth(chUtil), y + FONT_HEIGHT_SMALL * 1, chUtil);
|
||||||
if (config.position.gps_enabled) {
|
if (config.position.gps_enabled) {
|
||||||
// Line 3
|
// Line 3
|
||||||
if (config.display.gps_format !=
|
if (config.display.gps_format != Config_DisplayConfig_GpsCoordinateFormat_DMS) // if DMS then don't draw altitude
|
||||||
Config_DisplayConfig_GpsCoordinateFormat_DMS) // if DMS then don't draw altitude
|
drawGPSAltitude(display, x, y + FONT_HEIGHT_SMALL * 2, gpsStatus);
|
||||||
drawGPSAltitude(display, x, y + FONT_HEIGHT_SMALL * 2, gpsStatus);
|
|
||||||
|
|
||||||
// Line 4
|
// Line 4
|
||||||
drawGPScoordinates(display, x, y + FONT_HEIGHT_SMALL * 3, gpsStatus);
|
drawGPScoordinates(display, x, y + FONT_HEIGHT_SMALL * 3, gpsStatus);
|
||||||
} else {
|
} else {
|
||||||
drawGPSpowerstat(display, x - (SCREEN_WIDTH / 4), y + FONT_HEIGHT_SMALL * 2, gpsStatus);
|
drawGPSpowerstat(display, x - (SCREEN_WIDTH / 4), y + FONT_HEIGHT_SMALL * 2, gpsStatus);
|
||||||
}
|
}
|
||||||
/* Display a heartbeat pixel that blinks every time the frame is redrawn */
|
/* Display a heartbeat pixel that blinks every time the frame is redrawn */
|
||||||
#ifdef SHOW_REDRAWS
|
#ifdef SHOW_REDRAWS
|
||||||
if (heartbeat)
|
if (heartbeat)
|
||||||
|
|||||||
+2
-2
@@ -1,11 +1,11 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <map>
|
|
||||||
#include "GPSStatus.h"
|
#include "GPSStatus.h"
|
||||||
#include "NodeStatus.h"
|
#include "NodeStatus.h"
|
||||||
#include "PowerStatus.h"
|
#include "PowerStatus.h"
|
||||||
#include "graphics/Screen.h"
|
#include "graphics/Screen.h"
|
||||||
#include "mesh/generated/telemetry.pb.h"
|
#include "mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
|
#include <map>
|
||||||
#if !defined(ARCH_PORTDUINO) && !defined(ARCH_STM32WL)
|
#if !defined(ARCH_PORTDUINO) && !defined(ARCH_STM32WL)
|
||||||
#include <SparkFun_ATECCX08a_Arduino_Library.h>
|
#include <SparkFun_ATECCX08a_Arduino_Library.h>
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+20
-2
@@ -6,6 +6,7 @@
|
|||||||
#include "PowerFSM.h"
|
#include "PowerFSM.h"
|
||||||
#include "RadioInterface.h"
|
#include "RadioInterface.h"
|
||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
|
#include "xmodem.h"
|
||||||
|
|
||||||
#if FromRadio_size > MAX_TO_FROM_RADIO_SIZE
|
#if FromRadio_size > MAX_TO_FROM_RADIO_SIZE
|
||||||
#error FromRadio is too big
|
#error FromRadio is too big
|
||||||
@@ -31,6 +32,7 @@ void PhoneAPI::handleStartConfig()
|
|||||||
if (!isConnected()) {
|
if (!isConnected()) {
|
||||||
onConnectionChanged(true);
|
onConnectionChanged(true);
|
||||||
observe(&service.fromNumChanged);
|
observe(&service.fromNumChanged);
|
||||||
|
observe(&xModem.packetReady);
|
||||||
}
|
}
|
||||||
|
|
||||||
// even if we were already connected - restart our state machine
|
// even if we were already connected - restart our state machine
|
||||||
@@ -48,6 +50,7 @@ void PhoneAPI::close()
|
|||||||
state = STATE_SEND_NOTHING;
|
state = STATE_SEND_NOTHING;
|
||||||
|
|
||||||
unobserve(&service.fromNumChanged);
|
unobserve(&service.fromNumChanged);
|
||||||
|
unobserve(&xModem.packetReady);
|
||||||
releasePhonePacket(); // Don't leak phone packets on shutdown
|
releasePhonePacket(); // Don't leak phone packets on shutdown
|
||||||
releaseQueueStatusPhonePacket();
|
releaseQueueStatusPhonePacket();
|
||||||
|
|
||||||
@@ -90,6 +93,10 @@ bool PhoneAPI::handleToRadio(const uint8_t *buf, size_t bufLength)
|
|||||||
LOG_INFO("Disconnecting from phone\n");
|
LOG_INFO("Disconnecting from phone\n");
|
||||||
close();
|
close();
|
||||||
break;
|
break;
|
||||||
|
case ToRadio_xmodemPacket_tag:
|
||||||
|
LOG_INFO("Got xmodem packet\n");
|
||||||
|
xModem.handlePacket(toRadioScratch.xmodemPacket);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
// Ignore nop messages
|
// Ignore nop messages
|
||||||
// LOG_DEBUG("Error: unexpected ToRadio variant\n");
|
// LOG_DEBUG("Error: unexpected ToRadio variant\n");
|
||||||
@@ -150,7 +157,7 @@ size_t PhoneAPI::getFromRadio(uint8_t *buf)
|
|||||||
|
|
||||||
if (info) {
|
if (info) {
|
||||||
LOG_INFO("Sending nodeinfo: num=0x%x, lastseen=%u, id=%s, name=%s\n", info->num, info->last_heard, info->user.id,
|
LOG_INFO("Sending nodeinfo: num=0x%x, lastseen=%u, id=%s, name=%s\n", info->num, info->last_heard, info->user.id,
|
||||||
info->user.long_name);
|
info->user.long_name);
|
||||||
fromRadioScratch.which_payload_variant = FromRadio_node_info_tag;
|
fromRadioScratch.which_payload_variant = FromRadio_node_info_tag;
|
||||||
fromRadioScratch.node_info = *info;
|
fromRadioScratch.node_info = *info;
|
||||||
// Stay in current state until done sending nodeinfos
|
// Stay in current state until done sending nodeinfos
|
||||||
@@ -287,10 +294,14 @@ size_t PhoneAPI::getFromRadio(uint8_t *buf)
|
|||||||
// Do we have a message from the mesh?
|
// Do we have a message from the mesh?
|
||||||
LOG_INFO("getFromRadio=STATE_SEND_PACKETS\n");
|
LOG_INFO("getFromRadio=STATE_SEND_PACKETS\n");
|
||||||
if (queueStatusPacketForPhone) {
|
if (queueStatusPacketForPhone) {
|
||||||
|
|
||||||
fromRadioScratch.which_payload_variant = FromRadio_queueStatus_tag;
|
fromRadioScratch.which_payload_variant = FromRadio_queueStatus_tag;
|
||||||
fromRadioScratch.queueStatus = *queueStatusPacketForPhone;
|
fromRadioScratch.queueStatus = *queueStatusPacketForPhone;
|
||||||
releaseQueueStatusPhonePacket();
|
releaseQueueStatusPhonePacket();
|
||||||
|
} else if (xmodemPacketForPhone) {
|
||||||
|
fromRadioScratch.which_payload_variant = FromRadio_xmodemPacket_tag;
|
||||||
|
fromRadioScratch.xmodemPacket = *xmodemPacketForPhone;
|
||||||
|
free(xmodemPacketForPhone);
|
||||||
|
xmodemPacketForPhone = NULL;
|
||||||
} else if (packetForPhone) {
|
} else if (packetForPhone) {
|
||||||
printPacket("phone downloaded packet", packetForPhone);
|
printPacket("phone downloaded packet", packetForPhone);
|
||||||
|
|
||||||
@@ -353,6 +364,7 @@ bool PhoneAPI::available()
|
|||||||
case STATE_SEND_MODULECONFIG:
|
case STATE_SEND_MODULECONFIG:
|
||||||
case STATE_SEND_COMPLETE_ID:
|
case STATE_SEND_COMPLETE_ID:
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case STATE_SEND_NODEINFO:
|
case STATE_SEND_NODEINFO:
|
||||||
if (!nodeInfoForPhone)
|
if (!nodeInfoForPhone)
|
||||||
nodeInfoForPhone = nodeDB.readNextInfo();
|
nodeInfoForPhone = nodeDB.readNextInfo();
|
||||||
@@ -365,6 +377,12 @@ bool PhoneAPI::available()
|
|||||||
if (hasPacket)
|
if (hasPacket)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
if (!xmodemPacketForPhone)
|
||||||
|
xmodemPacketForPhone = xModem.getForPhone();
|
||||||
|
hasPacket = !!packetForPhone;
|
||||||
|
if (hasPacket)
|
||||||
|
return true;
|
||||||
|
|
||||||
if (!packetForPhone)
|
if (!packetForPhone)
|
||||||
packetForPhone = service.getForPhone();
|
packetForPhone = service.getForPhone();
|
||||||
hasPacket = !!packetForPhone;
|
hasPacket = !!packetForPhone;
|
||||||
|
|||||||
+10
-6
@@ -16,14 +16,15 @@
|
|||||||
* Eventually there should be once instance of this class for each live connection (because it has a bit of state
|
* Eventually there should be once instance of this class for each live connection (because it has a bit of state
|
||||||
* for that connection)
|
* for that connection)
|
||||||
*/
|
*/
|
||||||
class PhoneAPI : public Observer<uint32_t> // FIXME, we shouldn't be inheriting from Observer, instead use CallbackObserver as a member
|
class PhoneAPI
|
||||||
|
: public Observer<uint32_t> // FIXME, we shouldn't be inheriting from Observer, instead use CallbackObserver as a member
|
||||||
{
|
{
|
||||||
enum State {
|
enum State {
|
||||||
STATE_SEND_NOTHING, // Initial state, don't send anything until the client starts asking for config
|
STATE_SEND_NOTHING, // Initial state, don't send anything until the client starts asking for config
|
||||||
STATE_SEND_MY_INFO, // send our my info record
|
STATE_SEND_MY_INFO, // send our my info record
|
||||||
STATE_SEND_NODEINFO, // states progress in this order as the device sends to to the client
|
STATE_SEND_NODEINFO, // states progress in this order as the device sends to to the client
|
||||||
STATE_SEND_CHANNELS, // Send all channels
|
STATE_SEND_CHANNELS, // Send all channels
|
||||||
STATE_SEND_CONFIG, // Replacement for the old Radioconfig
|
STATE_SEND_CONFIG, // Replacement for the old Radioconfig
|
||||||
STATE_SEND_MODULECONFIG, // Send Module specific config
|
STATE_SEND_MODULECONFIG, // Send Module specific config
|
||||||
STATE_SEND_COMPLETE_ID,
|
STATE_SEND_COMPLETE_ID,
|
||||||
STATE_SEND_PACKETS // send packets or debug strings
|
STATE_SEND_PACKETS // send packets or debug strings
|
||||||
@@ -42,6 +43,9 @@ class PhoneAPI : public Observer<uint32_t> // FIXME, we shouldn't be inheriting
|
|||||||
/// downloads it
|
/// downloads it
|
||||||
MeshPacket *packetForPhone = NULL;
|
MeshPacket *packetForPhone = NULL;
|
||||||
|
|
||||||
|
// file transfer packets destined for phone. Push it to the queue then free it.
|
||||||
|
XModem *xmodemPacketForPhone = NULL;
|
||||||
|
|
||||||
// Keep QueueStatus packet just as packetForPhone
|
// Keep QueueStatus packet just as packetForPhone
|
||||||
QueueStatus *queueStatusPacketForPhone = NULL;
|
QueueStatus *queueStatusPacketForPhone = NULL;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
DisableFormat: true
|
||||||
|
SortIncludes: false
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#include "admin.pb.h"
|
#include "./admin.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
#error Regenerate this file with the current version of nanopb generator.
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
#endif
|
#endif
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#ifndef PB_ADMIN_PB_H_INCLUDED
|
#ifndef PB_MESHTASTIC_MESHTASTIC_ADMIN_PB_H_INCLUDED
|
||||||
#define PB_ADMIN_PB_H_INCLUDED
|
#define PB_MESHTASTIC_MESHTASTIC_ADMIN_PB_H_INCLUDED
|
||||||
#include <pb.h>
|
#include <pb.h>
|
||||||
#include "channel.pb.h"
|
#include "./channel.pb.h"
|
||||||
#include "config.pb.h"
|
#include "./config.pb.h"
|
||||||
#include "device_metadata.pb.h"
|
#include "./device_metadata.pb.h"
|
||||||
#include "mesh.pb.h"
|
#include "./mesh.pb.h"
|
||||||
#include "module_config.pb.h"
|
#include "./module_config.pb.h"
|
||||||
|
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
#error Regenerate this file with the current version of nanopb generator.
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
@@ -155,40 +155,40 @@ extern "C" {
|
|||||||
|
|
||||||
|
|
||||||
/* Initializer values for message structs */
|
/* Initializer values for message structs */
|
||||||
#define AdminMessage_init_default {0, {0}}
|
#define AdminMessage_init_default {0, {0}}
|
||||||
#define AdminMessage_init_zero {0, {0}}
|
#define AdminMessage_init_zero {0, {0}}
|
||||||
|
|
||||||
/* Field tags (for use in manual encoding/decoding) */
|
/* Field tags (for use in manual encoding/decoding) */
|
||||||
#define AdminMessage_get_channel_request_tag 1
|
#define AdminMessage_get_channel_request_tag 1
|
||||||
#define AdminMessage_get_channel_response_tag 2
|
#define AdminMessage_get_channel_response_tag 2
|
||||||
#define AdminMessage_get_owner_request_tag 3
|
#define AdminMessage_get_owner_request_tag 3
|
||||||
#define AdminMessage_get_owner_response_tag 4
|
#define AdminMessage_get_owner_response_tag 4
|
||||||
#define AdminMessage_get_config_request_tag 5
|
#define AdminMessage_get_config_request_tag 5
|
||||||
#define AdminMessage_get_config_response_tag 6
|
#define AdminMessage_get_config_response_tag 6
|
||||||
#define AdminMessage_get_module_config_request_tag 7
|
#define AdminMessage_get_module_config_request_tag 7
|
||||||
#define AdminMessage_get_module_config_response_tag 8
|
#define AdminMessage_get_module_config_response_tag 8
|
||||||
#define AdminMessage_get_canned_message_module_messages_request_tag 10
|
#define AdminMessage_get_canned_message_module_messages_request_tag 10
|
||||||
#define AdminMessage_get_canned_message_module_messages_response_tag 11
|
#define AdminMessage_get_canned_message_module_messages_response_tag 11
|
||||||
#define AdminMessage_get_device_metadata_request_tag 12
|
#define AdminMessage_get_device_metadata_request_tag 12
|
||||||
#define AdminMessage_get_device_metadata_response_tag 13
|
#define AdminMessage_get_device_metadata_response_tag 13
|
||||||
#define AdminMessage_get_ringtone_request_tag 14
|
#define AdminMessage_get_ringtone_request_tag 14
|
||||||
#define AdminMessage_get_ringtone_response_tag 15
|
#define AdminMessage_get_ringtone_response_tag 15
|
||||||
#define AdminMessage_set_owner_tag 32
|
#define AdminMessage_set_owner_tag 32
|
||||||
#define AdminMessage_set_channel_tag 33
|
#define AdminMessage_set_channel_tag 33
|
||||||
#define AdminMessage_set_config_tag 34
|
#define AdminMessage_set_config_tag 34
|
||||||
#define AdminMessage_set_module_config_tag 35
|
#define AdminMessage_set_module_config_tag 35
|
||||||
#define AdminMessage_set_canned_message_module_messages_tag 36
|
#define AdminMessage_set_canned_message_module_messages_tag 36
|
||||||
#define AdminMessage_set_ringtone_message_tag 37
|
#define AdminMessage_set_ringtone_message_tag 37
|
||||||
#define AdminMessage_begin_edit_settings_tag 64
|
#define AdminMessage_begin_edit_settings_tag 64
|
||||||
#define AdminMessage_commit_edit_settings_tag 65
|
#define AdminMessage_commit_edit_settings_tag 65
|
||||||
#define AdminMessage_confirm_set_channel_tag 66
|
#define AdminMessage_confirm_set_channel_tag 66
|
||||||
#define AdminMessage_confirm_set_radio_tag 67
|
#define AdminMessage_confirm_set_radio_tag 67
|
||||||
#define AdminMessage_reboot_ota_seconds_tag 95
|
#define AdminMessage_reboot_ota_seconds_tag 95
|
||||||
#define AdminMessage_exit_simulator_tag 96
|
#define AdminMessage_exit_simulator_tag 96
|
||||||
#define AdminMessage_reboot_seconds_tag 97
|
#define AdminMessage_reboot_seconds_tag 97
|
||||||
#define AdminMessage_shutdown_seconds_tag 98
|
#define AdminMessage_shutdown_seconds_tag 98
|
||||||
#define AdminMessage_factory_reset_tag 99
|
#define AdminMessage_factory_reset_tag 99
|
||||||
#define AdminMessage_nodedb_reset_tag 100
|
#define AdminMessage_nodedb_reset_tag 100
|
||||||
|
|
||||||
/* Struct field encoding specification for nanopb */
|
/* Struct field encoding specification for nanopb */
|
||||||
#define AdminMessage_FIELDLIST(X, a) \
|
#define AdminMessage_FIELDLIST(X, a) \
|
||||||
@@ -240,7 +240,7 @@ extern const pb_msgdesc_t AdminMessage_msg;
|
|||||||
#define AdminMessage_fields &AdminMessage_msg
|
#define AdminMessage_fields &AdminMessage_msg
|
||||||
|
|
||||||
/* Maximum encoded size of messages (where known) */
|
/* Maximum encoded size of messages (where known) */
|
||||||
#define AdminMessage_size 234
|
#define AdminMessage_size 234
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#include "apponly.pb.h"
|
#include "./apponly.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
#error Regenerate this file with the current version of nanopb generator.
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
#endif
|
#endif
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#ifndef PB_APPONLY_PB_H_INCLUDED
|
#ifndef PB_MESHTASTIC_MESHTASTIC_APPONLY_PB_H_INCLUDED
|
||||||
#define PB_APPONLY_PB_H_INCLUDED
|
#define PB_MESHTASTIC_MESHTASTIC_APPONLY_PB_H_INCLUDED
|
||||||
#include <pb.h>
|
#include <pb.h>
|
||||||
#include "channel.pb.h"
|
#include "./channel.pb.h"
|
||||||
#include "config.pb.h"
|
#include "./config.pb.h"
|
||||||
|
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
#error Regenerate this file with the current version of nanopb generator.
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
@@ -32,12 +32,12 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Initializer values for message structs */
|
/* Initializer values for message structs */
|
||||||
#define ChannelSet_init_default {0, {ChannelSettings_init_default, ChannelSettings_init_default, ChannelSettings_init_default, ChannelSettings_init_default, ChannelSettings_init_default, ChannelSettings_init_default, ChannelSettings_init_default, ChannelSettings_init_default}, false, Config_LoRaConfig_init_default}
|
#define ChannelSet_init_default {0, {ChannelSettings_init_default, ChannelSettings_init_default, ChannelSettings_init_default, ChannelSettings_init_default, ChannelSettings_init_default, ChannelSettings_init_default, ChannelSettings_init_default, ChannelSettings_init_default}, false, Config_LoRaConfig_init_default}
|
||||||
#define ChannelSet_init_zero {0, {ChannelSettings_init_zero, ChannelSettings_init_zero, ChannelSettings_init_zero, ChannelSettings_init_zero, ChannelSettings_init_zero, ChannelSettings_init_zero, ChannelSettings_init_zero, ChannelSettings_init_zero}, false, Config_LoRaConfig_init_zero}
|
#define ChannelSet_init_zero {0, {ChannelSettings_init_zero, ChannelSettings_init_zero, ChannelSettings_init_zero, ChannelSettings_init_zero, ChannelSettings_init_zero, ChannelSettings_init_zero, ChannelSettings_init_zero, ChannelSettings_init_zero}, false, Config_LoRaConfig_init_zero}
|
||||||
|
|
||||||
/* Field tags (for use in manual encoding/decoding) */
|
/* Field tags (for use in manual encoding/decoding) */
|
||||||
#define ChannelSet_settings_tag 1
|
#define ChannelSet_settings_tag 1
|
||||||
#define ChannelSet_lora_config_tag 2
|
#define ChannelSet_lora_config_tag 2
|
||||||
|
|
||||||
/* Struct field encoding specification for nanopb */
|
/* Struct field encoding specification for nanopb */
|
||||||
#define ChannelSet_FIELDLIST(X, a) \
|
#define ChannelSet_FIELDLIST(X, a) \
|
||||||
@@ -54,7 +54,7 @@ extern const pb_msgdesc_t ChannelSet_msg;
|
|||||||
#define ChannelSet_fields &ChannelSet_msg
|
#define ChannelSet_fields &ChannelSet_msg
|
||||||
|
|
||||||
/* Maximum encoded size of messages (where known) */
|
/* Maximum encoded size of messages (where known) */
|
||||||
#define ChannelSet_size 584
|
#define ChannelSet_size 584
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#include "cannedmessages.pb.h"
|
#include "./cannedmessages.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
#error Regenerate this file with the current version of nanopb generator.
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
#endif
|
#endif
|
||||||
+6
-6
@@ -1,8 +1,8 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#ifndef PB_CANNEDMESSAGES_PB_H_INCLUDED
|
#ifndef PB_MESHTASTIC_MESHTASTIC_CANNEDMESSAGES_PB_H_INCLUDED
|
||||||
#define PB_CANNEDMESSAGES_PB_H_INCLUDED
|
#define PB_MESHTASTIC_MESHTASTIC_CANNEDMESSAGES_PB_H_INCLUDED
|
||||||
#include <pb.h>
|
#include <pb.h>
|
||||||
|
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
@@ -22,11 +22,11 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Initializer values for message structs */
|
/* Initializer values for message structs */
|
||||||
#define CannedMessageModuleConfig_init_default {""}
|
#define CannedMessageModuleConfig_init_default {""}
|
||||||
#define CannedMessageModuleConfig_init_zero {""}
|
#define CannedMessageModuleConfig_init_zero {""}
|
||||||
|
|
||||||
/* Field tags (for use in manual encoding/decoding) */
|
/* Field tags (for use in manual encoding/decoding) */
|
||||||
#define CannedMessageModuleConfig_messages_tag 1
|
#define CannedMessageModuleConfig_messages_tag 1
|
||||||
|
|
||||||
/* Struct field encoding specification for nanopb */
|
/* Struct field encoding specification for nanopb */
|
||||||
#define CannedMessageModuleConfig_FIELDLIST(X, a) \
|
#define CannedMessageModuleConfig_FIELDLIST(X, a) \
|
||||||
@@ -40,7 +40,7 @@ extern const pb_msgdesc_t CannedMessageModuleConfig_msg;
|
|||||||
#define CannedMessageModuleConfig_fields &CannedMessageModuleConfig_msg
|
#define CannedMessageModuleConfig_fields &CannedMessageModuleConfig_msg
|
||||||
|
|
||||||
/* Maximum encoded size of messages (where known) */
|
/* Maximum encoded size of messages (where known) */
|
||||||
#define CannedMessageModuleConfig_size 203
|
#define CannedMessageModuleConfig_size 203
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#include "channel.pb.h"
|
#include "./channel.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
#error Regenerate this file with the current version of nanopb generator.
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
#endif
|
#endif
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#ifndef PB_CHANNEL_PB_H_INCLUDED
|
#ifndef PB_MESHTASTIC_MESHTASTIC_CHANNEL_PB_H_INCLUDED
|
||||||
#define PB_CHANNEL_PB_H_INCLUDED
|
#define PB_MESHTASTIC_MESHTASTIC_CHANNEL_PB_H_INCLUDED
|
||||||
#include <pb.h>
|
#include <pb.h>
|
||||||
|
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
@@ -119,21 +119,21 @@ extern "C" {
|
|||||||
|
|
||||||
|
|
||||||
/* Initializer values for message structs */
|
/* Initializer values for message structs */
|
||||||
#define ChannelSettings_init_default {0, {0, {0}}, "", 0, 0, 0}
|
#define ChannelSettings_init_default {0, {0, {0}}, "", 0, 0, 0}
|
||||||
#define Channel_init_default {0, false, ChannelSettings_init_default, _Channel_Role_MIN}
|
#define Channel_init_default {0, false, ChannelSettings_init_default, _Channel_Role_MIN}
|
||||||
#define ChannelSettings_init_zero {0, {0, {0}}, "", 0, 0, 0}
|
#define ChannelSettings_init_zero {0, {0, {0}}, "", 0, 0, 0}
|
||||||
#define Channel_init_zero {0, false, ChannelSettings_init_zero, _Channel_Role_MIN}
|
#define Channel_init_zero {0, false, ChannelSettings_init_zero, _Channel_Role_MIN}
|
||||||
|
|
||||||
/* Field tags (for use in manual encoding/decoding) */
|
/* Field tags (for use in manual encoding/decoding) */
|
||||||
#define ChannelSettings_channel_num_tag 1
|
#define ChannelSettings_channel_num_tag 1
|
||||||
#define ChannelSettings_psk_tag 2
|
#define ChannelSettings_psk_tag 2
|
||||||
#define ChannelSettings_name_tag 3
|
#define ChannelSettings_name_tag 3
|
||||||
#define ChannelSettings_id_tag 4
|
#define ChannelSettings_id_tag 4
|
||||||
#define ChannelSettings_uplink_enabled_tag 5
|
#define ChannelSettings_uplink_enabled_tag 5
|
||||||
#define ChannelSettings_downlink_enabled_tag 6
|
#define ChannelSettings_downlink_enabled_tag 6
|
||||||
#define Channel_index_tag 1
|
#define Channel_index_tag 1
|
||||||
#define Channel_settings_tag 2
|
#define Channel_settings_tag 2
|
||||||
#define Channel_role_tag 3
|
#define Channel_role_tag 3
|
||||||
|
|
||||||
/* Struct field encoding specification for nanopb */
|
/* Struct field encoding specification for nanopb */
|
||||||
#define ChannelSettings_FIELDLIST(X, a) \
|
#define ChannelSettings_FIELDLIST(X, a) \
|
||||||
@@ -162,8 +162,8 @@ extern const pb_msgdesc_t Channel_msg;
|
|||||||
#define Channel_fields &Channel_msg
|
#define Channel_fields &Channel_msg
|
||||||
|
|
||||||
/* Maximum encoded size of messages (where known) */
|
/* Maximum encoded size of messages (where known) */
|
||||||
#define ChannelSettings_size 62
|
#define ChannelSettings_size 62
|
||||||
#define Channel_size 77
|
#define Channel_size 77
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#include "config.pb.h"
|
#include "./config.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
#error Regenerate this file with the current version of nanopb generator.
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
#endif
|
#endif
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#ifndef PB_CONFIG_PB_H_INCLUDED
|
#ifndef PB_MESHTASTIC_MESHTASTIC_CONFIG_PB_H_INCLUDED
|
||||||
#define PB_CONFIG_PB_H_INCLUDED
|
#define PB_MESHTASTIC_MESHTASTIC_CONFIG_PB_H_INCLUDED
|
||||||
#include <pb.h>
|
#include <pb.h>
|
||||||
|
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
@@ -300,6 +300,8 @@ typedef struct _Config_NetworkConfig {
|
|||||||
/* struct to keep static address */
|
/* struct to keep static address */
|
||||||
bool has_ipv4_config;
|
bool has_ipv4_config;
|
||||||
Config_NetworkConfig_IpV4Config ipv4_config;
|
Config_NetworkConfig_IpV4Config ipv4_config;
|
||||||
|
/* rsyslog Server and Port */
|
||||||
|
char rsyslog_server[33];
|
||||||
} Config_NetworkConfig;
|
} Config_NetworkConfig;
|
||||||
|
|
||||||
/* Display Config */
|
/* Display Config */
|
||||||
@@ -472,91 +474,92 @@ extern "C" {
|
|||||||
|
|
||||||
|
|
||||||
/* Initializer values for message structs */
|
/* Initializer values for message structs */
|
||||||
#define Config_init_default {0, {Config_DeviceConfig_init_default}}
|
#define Config_init_default {0, {Config_DeviceConfig_init_default}}
|
||||||
#define Config_DeviceConfig_init_default {_Config_DeviceConfig_Role_MIN, 0, 0, 0, 0}
|
#define Config_DeviceConfig_init_default {_Config_DeviceConfig_Role_MIN, 0, 0, 0, 0}
|
||||||
#define Config_PositionConfig_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0}
|
#define Config_PositionConfig_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
#define Config_PowerConfig_init_default {0, 0, 0, 0, 0, 0, 0, 0}
|
#define Config_PowerConfig_init_default {0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
#define Config_NetworkConfig_init_default {0, "", "", "", 0, _Config_NetworkConfig_AddressMode_MIN, false, Config_NetworkConfig_IpV4Config_init_default}
|
#define Config_NetworkConfig_init_default {0, "", "", "", 0, _Config_NetworkConfig_AddressMode_MIN, false, Config_NetworkConfig_IpV4Config_init_default, ""}
|
||||||
#define Config_NetworkConfig_IpV4Config_init_default {0, 0, 0, 0}
|
#define Config_NetworkConfig_IpV4Config_init_default {0, 0, 0, 0}
|
||||||
#define Config_DisplayConfig_init_default {0, _Config_DisplayConfig_GpsCoordinateFormat_MIN, 0, 0, 0, _Config_DisplayConfig_DisplayUnits_MIN, _Config_DisplayConfig_OledType_MIN, _Config_DisplayConfig_DisplayMode_MIN, 0}
|
#define Config_DisplayConfig_init_default {0, _Config_DisplayConfig_GpsCoordinateFormat_MIN, 0, 0, 0, _Config_DisplayConfig_DisplayUnits_MIN, _Config_DisplayConfig_OledType_MIN, _Config_DisplayConfig_DisplayMode_MIN, 0}
|
||||||
#define Config_LoRaConfig_init_default {0, _Config_LoRaConfig_ModemPreset_MIN, 0, 0, 0, 0, _Config_LoRaConfig_RegionCode_MIN, 0, 0, 0, 0, 0, 0, {0, 0, 0}}
|
#define Config_LoRaConfig_init_default {0, _Config_LoRaConfig_ModemPreset_MIN, 0, 0, 0, 0, _Config_LoRaConfig_RegionCode_MIN, 0, 0, 0, 0, 0, 0, {0, 0, 0}}
|
||||||
#define Config_BluetoothConfig_init_default {0, _Config_BluetoothConfig_PairingMode_MIN, 0}
|
#define Config_BluetoothConfig_init_default {0, _Config_BluetoothConfig_PairingMode_MIN, 0}
|
||||||
#define Config_init_zero {0, {Config_DeviceConfig_init_zero}}
|
#define Config_init_zero {0, {Config_DeviceConfig_init_zero}}
|
||||||
#define Config_DeviceConfig_init_zero {_Config_DeviceConfig_Role_MIN, 0, 0, 0, 0}
|
#define Config_DeviceConfig_init_zero {_Config_DeviceConfig_Role_MIN, 0, 0, 0, 0}
|
||||||
#define Config_PositionConfig_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0}
|
#define Config_PositionConfig_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
#define Config_PowerConfig_init_zero {0, 0, 0, 0, 0, 0, 0, 0}
|
#define Config_PowerConfig_init_zero {0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
#define Config_NetworkConfig_init_zero {0, "", "", "", 0, _Config_NetworkConfig_AddressMode_MIN, false, Config_NetworkConfig_IpV4Config_init_zero}
|
#define Config_NetworkConfig_init_zero {0, "", "", "", 0, _Config_NetworkConfig_AddressMode_MIN, false, Config_NetworkConfig_IpV4Config_init_zero, ""}
|
||||||
#define Config_NetworkConfig_IpV4Config_init_zero {0, 0, 0, 0}
|
#define Config_NetworkConfig_IpV4Config_init_zero {0, 0, 0, 0}
|
||||||
#define Config_DisplayConfig_init_zero {0, _Config_DisplayConfig_GpsCoordinateFormat_MIN, 0, 0, 0, _Config_DisplayConfig_DisplayUnits_MIN, _Config_DisplayConfig_OledType_MIN, _Config_DisplayConfig_DisplayMode_MIN, 0}
|
#define Config_DisplayConfig_init_zero {0, _Config_DisplayConfig_GpsCoordinateFormat_MIN, 0, 0, 0, _Config_DisplayConfig_DisplayUnits_MIN, _Config_DisplayConfig_OledType_MIN, _Config_DisplayConfig_DisplayMode_MIN, 0}
|
||||||
#define Config_LoRaConfig_init_zero {0, _Config_LoRaConfig_ModemPreset_MIN, 0, 0, 0, 0, _Config_LoRaConfig_RegionCode_MIN, 0, 0, 0, 0, 0, 0, {0, 0, 0}}
|
#define Config_LoRaConfig_init_zero {0, _Config_LoRaConfig_ModemPreset_MIN, 0, 0, 0, 0, _Config_LoRaConfig_RegionCode_MIN, 0, 0, 0, 0, 0, 0, {0, 0, 0}}
|
||||||
#define Config_BluetoothConfig_init_zero {0, _Config_BluetoothConfig_PairingMode_MIN, 0}
|
#define Config_BluetoothConfig_init_zero {0, _Config_BluetoothConfig_PairingMode_MIN, 0}
|
||||||
|
|
||||||
/* Field tags (for use in manual encoding/decoding) */
|
/* Field tags (for use in manual encoding/decoding) */
|
||||||
#define Config_DeviceConfig_role_tag 1
|
#define Config_DeviceConfig_role_tag 1
|
||||||
#define Config_DeviceConfig_serial_enabled_tag 2
|
#define Config_DeviceConfig_serial_enabled_tag 2
|
||||||
#define Config_DeviceConfig_debug_log_enabled_tag 3
|
#define Config_DeviceConfig_debug_log_enabled_tag 3
|
||||||
#define Config_DeviceConfig_button_gpio_tag 4
|
#define Config_DeviceConfig_button_gpio_tag 4
|
||||||
#define Config_DeviceConfig_buzzer_gpio_tag 5
|
#define Config_DeviceConfig_buzzer_gpio_tag 5
|
||||||
#define Config_PositionConfig_position_broadcast_secs_tag 1
|
#define Config_PositionConfig_position_broadcast_secs_tag 1
|
||||||
#define Config_PositionConfig_position_broadcast_smart_enabled_tag 2
|
#define Config_PositionConfig_position_broadcast_smart_enabled_tag 2
|
||||||
#define Config_PositionConfig_fixed_position_tag 3
|
#define Config_PositionConfig_fixed_position_tag 3
|
||||||
#define Config_PositionConfig_gps_enabled_tag 4
|
#define Config_PositionConfig_gps_enabled_tag 4
|
||||||
#define Config_PositionConfig_gps_update_interval_tag 5
|
#define Config_PositionConfig_gps_update_interval_tag 5
|
||||||
#define Config_PositionConfig_gps_attempt_time_tag 6
|
#define Config_PositionConfig_gps_attempt_time_tag 6
|
||||||
#define Config_PositionConfig_position_flags_tag 7
|
#define Config_PositionConfig_position_flags_tag 7
|
||||||
#define Config_PositionConfig_rx_gpio_tag 8
|
#define Config_PositionConfig_rx_gpio_tag 8
|
||||||
#define Config_PositionConfig_tx_gpio_tag 9
|
#define Config_PositionConfig_tx_gpio_tag 9
|
||||||
#define Config_PowerConfig_is_power_saving_tag 1
|
#define Config_PowerConfig_is_power_saving_tag 1
|
||||||
#define Config_PowerConfig_on_battery_shutdown_after_secs_tag 2
|
#define Config_PowerConfig_on_battery_shutdown_after_secs_tag 2
|
||||||
#define Config_PowerConfig_adc_multiplier_override_tag 3
|
#define Config_PowerConfig_adc_multiplier_override_tag 3
|
||||||
#define Config_PowerConfig_wait_bluetooth_secs_tag 4
|
#define Config_PowerConfig_wait_bluetooth_secs_tag 4
|
||||||
#define Config_PowerConfig_mesh_sds_timeout_secs_tag 5
|
#define Config_PowerConfig_mesh_sds_timeout_secs_tag 5
|
||||||
#define Config_PowerConfig_sds_secs_tag 6
|
#define Config_PowerConfig_sds_secs_tag 6
|
||||||
#define Config_PowerConfig_ls_secs_tag 7
|
#define Config_PowerConfig_ls_secs_tag 7
|
||||||
#define Config_PowerConfig_min_wake_secs_tag 8
|
#define Config_PowerConfig_min_wake_secs_tag 8
|
||||||
#define Config_NetworkConfig_IpV4Config_ip_tag 1
|
#define Config_NetworkConfig_IpV4Config_ip_tag 1
|
||||||
#define Config_NetworkConfig_IpV4Config_gateway_tag 2
|
#define Config_NetworkConfig_IpV4Config_gateway_tag 2
|
||||||
#define Config_NetworkConfig_IpV4Config_subnet_tag 3
|
#define Config_NetworkConfig_IpV4Config_subnet_tag 3
|
||||||
#define Config_NetworkConfig_IpV4Config_dns_tag 4
|
#define Config_NetworkConfig_IpV4Config_dns_tag 4
|
||||||
#define Config_NetworkConfig_wifi_enabled_tag 1
|
#define Config_NetworkConfig_wifi_enabled_tag 1
|
||||||
#define Config_NetworkConfig_wifi_ssid_tag 3
|
#define Config_NetworkConfig_wifi_ssid_tag 3
|
||||||
#define Config_NetworkConfig_wifi_psk_tag 4
|
#define Config_NetworkConfig_wifi_psk_tag 4
|
||||||
#define Config_NetworkConfig_ntp_server_tag 5
|
#define Config_NetworkConfig_ntp_server_tag 5
|
||||||
#define Config_NetworkConfig_eth_enabled_tag 6
|
#define Config_NetworkConfig_eth_enabled_tag 6
|
||||||
#define Config_NetworkConfig_address_mode_tag 7
|
#define Config_NetworkConfig_address_mode_tag 7
|
||||||
#define Config_NetworkConfig_ipv4_config_tag 8
|
#define Config_NetworkConfig_ipv4_config_tag 8
|
||||||
#define Config_DisplayConfig_screen_on_secs_tag 1
|
#define Config_NetworkConfig_rsyslog_server_tag 9
|
||||||
#define Config_DisplayConfig_gps_format_tag 2
|
#define Config_DisplayConfig_screen_on_secs_tag 1
|
||||||
|
#define Config_DisplayConfig_gps_format_tag 2
|
||||||
#define Config_DisplayConfig_auto_screen_carousel_secs_tag 3
|
#define Config_DisplayConfig_auto_screen_carousel_secs_tag 3
|
||||||
#define Config_DisplayConfig_compass_north_top_tag 4
|
#define Config_DisplayConfig_compass_north_top_tag 4
|
||||||
#define Config_DisplayConfig_flip_screen_tag 5
|
#define Config_DisplayConfig_flip_screen_tag 5
|
||||||
#define Config_DisplayConfig_units_tag 6
|
#define Config_DisplayConfig_units_tag 6
|
||||||
#define Config_DisplayConfig_oled_tag 7
|
#define Config_DisplayConfig_oled_tag 7
|
||||||
#define Config_DisplayConfig_displaymode_tag 8
|
#define Config_DisplayConfig_displaymode_tag 8
|
||||||
#define Config_DisplayConfig_heading_bold_tag 9
|
#define Config_DisplayConfig_heading_bold_tag 9
|
||||||
#define Config_LoRaConfig_use_preset_tag 1
|
#define Config_LoRaConfig_use_preset_tag 1
|
||||||
#define Config_LoRaConfig_modem_preset_tag 2
|
#define Config_LoRaConfig_modem_preset_tag 2
|
||||||
#define Config_LoRaConfig_bandwidth_tag 3
|
#define Config_LoRaConfig_bandwidth_tag 3
|
||||||
#define Config_LoRaConfig_spread_factor_tag 4
|
#define Config_LoRaConfig_spread_factor_tag 4
|
||||||
#define Config_LoRaConfig_coding_rate_tag 5
|
#define Config_LoRaConfig_coding_rate_tag 5
|
||||||
#define Config_LoRaConfig_frequency_offset_tag 6
|
#define Config_LoRaConfig_frequency_offset_tag 6
|
||||||
#define Config_LoRaConfig_region_tag 7
|
#define Config_LoRaConfig_region_tag 7
|
||||||
#define Config_LoRaConfig_hop_limit_tag 8
|
#define Config_LoRaConfig_hop_limit_tag 8
|
||||||
#define Config_LoRaConfig_tx_enabled_tag 9
|
#define Config_LoRaConfig_tx_enabled_tag 9
|
||||||
#define Config_LoRaConfig_tx_power_tag 10
|
#define Config_LoRaConfig_tx_power_tag 10
|
||||||
#define Config_LoRaConfig_channel_num_tag 11
|
#define Config_LoRaConfig_channel_num_tag 11
|
||||||
#define Config_LoRaConfig_override_duty_cycle_tag 12
|
#define Config_LoRaConfig_override_duty_cycle_tag 12
|
||||||
#define Config_LoRaConfig_ignore_incoming_tag 103
|
#define Config_LoRaConfig_ignore_incoming_tag 103
|
||||||
#define Config_BluetoothConfig_enabled_tag 1
|
#define Config_BluetoothConfig_enabled_tag 1
|
||||||
#define Config_BluetoothConfig_mode_tag 2
|
#define Config_BluetoothConfig_mode_tag 2
|
||||||
#define Config_BluetoothConfig_fixed_pin_tag 3
|
#define Config_BluetoothConfig_fixed_pin_tag 3
|
||||||
#define Config_device_tag 1
|
#define Config_device_tag 1
|
||||||
#define Config_position_tag 2
|
#define Config_position_tag 2
|
||||||
#define Config_power_tag 3
|
#define Config_power_tag 3
|
||||||
#define Config_network_tag 4
|
#define Config_network_tag 4
|
||||||
#define Config_display_tag 5
|
#define Config_display_tag 5
|
||||||
#define Config_lora_tag 6
|
#define Config_lora_tag 6
|
||||||
#define Config_bluetooth_tag 7
|
#define Config_bluetooth_tag 7
|
||||||
|
|
||||||
/* Struct field encoding specification for nanopb */
|
/* Struct field encoding specification for nanopb */
|
||||||
#define Config_FIELDLIST(X, a) \
|
#define Config_FIELDLIST(X, a) \
|
||||||
@@ -618,7 +621,8 @@ X(a, STATIC, SINGULAR, STRING, wifi_psk, 4) \
|
|||||||
X(a, STATIC, SINGULAR, STRING, ntp_server, 5) \
|
X(a, STATIC, SINGULAR, STRING, ntp_server, 5) \
|
||||||
X(a, STATIC, SINGULAR, BOOL, eth_enabled, 6) \
|
X(a, STATIC, SINGULAR, BOOL, eth_enabled, 6) \
|
||||||
X(a, STATIC, SINGULAR, UENUM, address_mode, 7) \
|
X(a, STATIC, SINGULAR, UENUM, address_mode, 7) \
|
||||||
X(a, STATIC, OPTIONAL, MESSAGE, ipv4_config, 8)
|
X(a, STATIC, OPTIONAL, MESSAGE, ipv4_config, 8) \
|
||||||
|
X(a, STATIC, SINGULAR, STRING, rsyslog_server, 9)
|
||||||
#define Config_NetworkConfig_CALLBACK NULL
|
#define Config_NetworkConfig_CALLBACK NULL
|
||||||
#define Config_NetworkConfig_DEFAULT NULL
|
#define Config_NetworkConfig_DEFAULT NULL
|
||||||
#define Config_NetworkConfig_ipv4_config_MSGTYPE Config_NetworkConfig_IpV4Config
|
#define Config_NetworkConfig_ipv4_config_MSGTYPE Config_NetworkConfig_IpV4Config
|
||||||
@@ -690,15 +694,15 @@ extern const pb_msgdesc_t Config_BluetoothConfig_msg;
|
|||||||
#define Config_BluetoothConfig_fields &Config_BluetoothConfig_msg
|
#define Config_BluetoothConfig_fields &Config_BluetoothConfig_msg
|
||||||
|
|
||||||
/* Maximum encoded size of messages (where known) */
|
/* Maximum encoded size of messages (where known) */
|
||||||
#define Config_BluetoothConfig_size 10
|
#define Config_BluetoothConfig_size 10
|
||||||
#define Config_DeviceConfig_size 18
|
#define Config_DeviceConfig_size 18
|
||||||
#define Config_DisplayConfig_size 26
|
#define Config_DisplayConfig_size 26
|
||||||
#define Config_LoRaConfig_size 70
|
#define Config_LoRaConfig_size 70
|
||||||
#define Config_NetworkConfig_IpV4Config_size 20
|
#define Config_NetworkConfig_IpV4Config_size 20
|
||||||
#define Config_NetworkConfig_size 161
|
#define Config_NetworkConfig_size 195
|
||||||
#define Config_PositionConfig_size 42
|
#define Config_PositionConfig_size 42
|
||||||
#define Config_PowerConfig_size 43
|
#define Config_PowerConfig_size 43
|
||||||
#define Config_size 164
|
#define Config_size 198
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#include "device_metadata.pb.h"
|
#include "./device_metadata.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
#error Regenerate this file with the current version of nanopb generator.
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
#endif
|
#endif
|
||||||
+21
-12
@@ -1,9 +1,10 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#ifndef PB_DEVICE_METADATA_PB_H_INCLUDED
|
#ifndef PB_MESHTASTIC_MESHTASTIC_DEVICE_METADATA_PB_H_INCLUDED
|
||||||
#define PB_DEVICE_METADATA_PB_H_INCLUDED
|
#define PB_MESHTASTIC_MESHTASTIC_DEVICE_METADATA_PB_H_INCLUDED
|
||||||
#include <pb.h>
|
#include <pb.h>
|
||||||
|
#include "./config.pb.h"
|
||||||
|
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
#error Regenerate this file with the current version of nanopb generator.
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
@@ -24,6 +25,10 @@ typedef struct _DeviceMetadata {
|
|||||||
bool hasBluetooth;
|
bool hasBluetooth;
|
||||||
/* Indicates that the device has an ethernet peripheral */
|
/* Indicates that the device has an ethernet peripheral */
|
||||||
bool hasEthernet;
|
bool hasEthernet;
|
||||||
|
/* Indicates that the device's role in the mesh */
|
||||||
|
Config_DeviceConfig_Role role;
|
||||||
|
/* Indicates the device's current enabled position flags */
|
||||||
|
uint32_t position_flags;
|
||||||
} DeviceMetadata;
|
} DeviceMetadata;
|
||||||
|
|
||||||
|
|
||||||
@@ -32,16 +37,18 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Initializer values for message structs */
|
/* Initializer values for message structs */
|
||||||
#define DeviceMetadata_init_default {"", 0, 0, 0, 0, 0}
|
#define DeviceMetadata_init_default {"", 0, 0, 0, 0, 0, _Config_DeviceConfig_Role_MIN, 0}
|
||||||
#define DeviceMetadata_init_zero {"", 0, 0, 0, 0, 0}
|
#define DeviceMetadata_init_zero {"", 0, 0, 0, 0, 0, _Config_DeviceConfig_Role_MIN, 0}
|
||||||
|
|
||||||
/* Field tags (for use in manual encoding/decoding) */
|
/* Field tags (for use in manual encoding/decoding) */
|
||||||
#define DeviceMetadata_firmware_version_tag 1
|
#define DeviceMetadata_firmware_version_tag 1
|
||||||
#define DeviceMetadata_device_state_version_tag 2
|
#define DeviceMetadata_device_state_version_tag 2
|
||||||
#define DeviceMetadata_canShutdown_tag 3
|
#define DeviceMetadata_canShutdown_tag 3
|
||||||
#define DeviceMetadata_hasWifi_tag 4
|
#define DeviceMetadata_hasWifi_tag 4
|
||||||
#define DeviceMetadata_hasBluetooth_tag 5
|
#define DeviceMetadata_hasBluetooth_tag 5
|
||||||
#define DeviceMetadata_hasEthernet_tag 6
|
#define DeviceMetadata_hasEthernet_tag 6
|
||||||
|
#define DeviceMetadata_role_tag 7
|
||||||
|
#define DeviceMetadata_position_flags_tag 8
|
||||||
|
|
||||||
/* Struct field encoding specification for nanopb */
|
/* Struct field encoding specification for nanopb */
|
||||||
#define DeviceMetadata_FIELDLIST(X, a) \
|
#define DeviceMetadata_FIELDLIST(X, a) \
|
||||||
@@ -50,7 +57,9 @@ X(a, STATIC, SINGULAR, UINT32, device_state_version, 2) \
|
|||||||
X(a, STATIC, SINGULAR, BOOL, canShutdown, 3) \
|
X(a, STATIC, SINGULAR, BOOL, canShutdown, 3) \
|
||||||
X(a, STATIC, SINGULAR, BOOL, hasWifi, 4) \
|
X(a, STATIC, SINGULAR, BOOL, hasWifi, 4) \
|
||||||
X(a, STATIC, SINGULAR, BOOL, hasBluetooth, 5) \
|
X(a, STATIC, SINGULAR, BOOL, hasBluetooth, 5) \
|
||||||
X(a, STATIC, SINGULAR, BOOL, hasEthernet, 6)
|
X(a, STATIC, SINGULAR, BOOL, hasEthernet, 6) \
|
||||||
|
X(a, STATIC, SINGULAR, UENUM, role, 7) \
|
||||||
|
X(a, STATIC, SINGULAR, UINT32, position_flags, 8)
|
||||||
#define DeviceMetadata_CALLBACK NULL
|
#define DeviceMetadata_CALLBACK NULL
|
||||||
#define DeviceMetadata_DEFAULT NULL
|
#define DeviceMetadata_DEFAULT NULL
|
||||||
|
|
||||||
@@ -60,7 +69,7 @@ extern const pb_msgdesc_t DeviceMetadata_msg;
|
|||||||
#define DeviceMetadata_fields &DeviceMetadata_msg
|
#define DeviceMetadata_fields &DeviceMetadata_msg
|
||||||
|
|
||||||
/* Maximum encoded size of messages (where known) */
|
/* Maximum encoded size of messages (where known) */
|
||||||
#define DeviceMetadata_size 33
|
#define DeviceMetadata_size 41
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#include "deviceonly.pb.h"
|
#include "./deviceonly.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
#error Regenerate this file with the current version of nanopb generator.
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
#endif
|
#endif
|
||||||
+29
-29
@@ -1,11 +1,11 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#ifndef PB_DEVICEONLY_PB_H_INCLUDED
|
#ifndef PB_MESHTASTIC_MESHTASTIC_DEVICEONLY_PB_H_INCLUDED
|
||||||
#define PB_DEVICEONLY_PB_H_INCLUDED
|
#define PB_MESHTASTIC_MESHTASTIC_DEVICEONLY_PB_H_INCLUDED
|
||||||
#include <pb.h>
|
#include <pb.h>
|
||||||
#include "channel.pb.h"
|
#include "./channel.pb.h"
|
||||||
#include "mesh.pb.h"
|
#include "./mesh.pb.h"
|
||||||
|
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
#error Regenerate this file with the current version of nanopb generator.
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
@@ -103,30 +103,30 @@ extern "C" {
|
|||||||
|
|
||||||
|
|
||||||
/* Initializer values for message structs */
|
/* Initializer values for message structs */
|
||||||
#define DeviceState_init_default {false, MyNodeInfo_init_default, false, User_init_default, 0, {NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default}, 0, {MeshPacket_init_default}, false, MeshPacket_init_default, 0, 0, 0}
|
#define DeviceState_init_default {false, MyNodeInfo_init_default, false, User_init_default, 0, {NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default, NodeInfo_init_default}, 0, {MeshPacket_init_default}, false, MeshPacket_init_default, 0, 0, 0}
|
||||||
#define ChannelFile_init_default {0, {Channel_init_default, Channel_init_default, Channel_init_default, Channel_init_default, Channel_init_default, Channel_init_default, Channel_init_default, Channel_init_default}, 0}
|
#define ChannelFile_init_default {0, {Channel_init_default, Channel_init_default, Channel_init_default, Channel_init_default, Channel_init_default, Channel_init_default, Channel_init_default, Channel_init_default}, 0}
|
||||||
#define OEMStore_init_default {0, 0, {0, {0}}, _ScreenFonts_MIN, "", {0, {0}}}
|
#define OEMStore_init_default {0, 0, {0, {0}}, _ScreenFonts_MIN, "", {0, {0}}}
|
||||||
#define DeviceState_init_zero {false, MyNodeInfo_init_zero, false, User_init_zero, 0, {NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero}, 0, {MeshPacket_init_zero}, false, MeshPacket_init_zero, 0, 0, 0}
|
#define DeviceState_init_zero {false, MyNodeInfo_init_zero, false, User_init_zero, 0, {NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero, NodeInfo_init_zero}, 0, {MeshPacket_init_zero}, false, MeshPacket_init_zero, 0, 0, 0}
|
||||||
#define ChannelFile_init_zero {0, {Channel_init_zero, Channel_init_zero, Channel_init_zero, Channel_init_zero, Channel_init_zero, Channel_init_zero, Channel_init_zero, Channel_init_zero}, 0}
|
#define ChannelFile_init_zero {0, {Channel_init_zero, Channel_init_zero, Channel_init_zero, Channel_init_zero, Channel_init_zero, Channel_init_zero, Channel_init_zero, Channel_init_zero}, 0}
|
||||||
#define OEMStore_init_zero {0, 0, {0, {0}}, _ScreenFonts_MIN, "", {0, {0}}}
|
#define OEMStore_init_zero {0, 0, {0, {0}}, _ScreenFonts_MIN, "", {0, {0}}}
|
||||||
|
|
||||||
/* Field tags (for use in manual encoding/decoding) */
|
/* Field tags (for use in manual encoding/decoding) */
|
||||||
#define DeviceState_my_node_tag 2
|
#define DeviceState_my_node_tag 2
|
||||||
#define DeviceState_owner_tag 3
|
#define DeviceState_owner_tag 3
|
||||||
#define DeviceState_node_db_tag 4
|
#define DeviceState_node_db_tag 4
|
||||||
#define DeviceState_receive_queue_tag 5
|
#define DeviceState_receive_queue_tag 5
|
||||||
#define DeviceState_rx_text_message_tag 7
|
#define DeviceState_rx_text_message_tag 7
|
||||||
#define DeviceState_version_tag 8
|
#define DeviceState_version_tag 8
|
||||||
#define DeviceState_no_save_tag 9
|
#define DeviceState_no_save_tag 9
|
||||||
#define DeviceState_did_gps_reset_tag 11
|
#define DeviceState_did_gps_reset_tag 11
|
||||||
#define ChannelFile_channels_tag 1
|
#define ChannelFile_channels_tag 1
|
||||||
#define ChannelFile_version_tag 2
|
#define ChannelFile_version_tag 2
|
||||||
#define OEMStore_oem_icon_width_tag 1
|
#define OEMStore_oem_icon_width_tag 1
|
||||||
#define OEMStore_oem_icon_height_tag 2
|
#define OEMStore_oem_icon_height_tag 2
|
||||||
#define OEMStore_oem_icon_bits_tag 3
|
#define OEMStore_oem_icon_bits_tag 3
|
||||||
#define OEMStore_oem_font_tag 4
|
#define OEMStore_oem_font_tag 4
|
||||||
#define OEMStore_oem_text_tag 5
|
#define OEMStore_oem_text_tag 5
|
||||||
#define OEMStore_oem_aes_key_tag 6
|
#define OEMStore_oem_aes_key_tag 6
|
||||||
|
|
||||||
/* Struct field encoding specification for nanopb */
|
/* Struct field encoding specification for nanopb */
|
||||||
#define DeviceState_FIELDLIST(X, a) \
|
#define DeviceState_FIELDLIST(X, a) \
|
||||||
@@ -173,9 +173,9 @@ extern const pb_msgdesc_t OEMStore_msg;
|
|||||||
#define OEMStore_fields &OEMStore_msg
|
#define OEMStore_fields &OEMStore_msg
|
||||||
|
|
||||||
/* Maximum encoded size of messages (where known) */
|
/* Maximum encoded size of messages (where known) */
|
||||||
#define ChannelFile_size 638
|
#define ChannelFile_size 638
|
||||||
#define DeviceState_size 21800
|
#define DeviceState_size 21800
|
||||||
#define OEMStore_size 2140
|
#define OEMStore_size 2140
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#include "localonly.pb.h"
|
#include "./localonly.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
#error Regenerate this file with the current version of nanopb generator.
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
#endif
|
#endif
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#ifndef PB_LOCALONLY_PB_H_INCLUDED
|
#ifndef PB_MESHTASTIC_MESHTASTIC_LOCALONLY_PB_H_INCLUDED
|
||||||
#define PB_LOCALONLY_PB_H_INCLUDED
|
#define PB_MESHTASTIC_MESHTASTIC_LOCALONLY_PB_H_INCLUDED
|
||||||
#include <pb.h>
|
#include <pb.h>
|
||||||
#include "config.pb.h"
|
#include "./config.pb.h"
|
||||||
#include "module_config.pb.h"
|
#include "./module_config.pb.h"
|
||||||
|
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
#error Regenerate this file with the current version of nanopb generator.
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
@@ -80,30 +80,30 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Initializer values for message structs */
|
/* Initializer values for message structs */
|
||||||
#define LocalConfig_init_default {false, Config_DeviceConfig_init_default, false, Config_PositionConfig_init_default, false, Config_PowerConfig_init_default, false, Config_NetworkConfig_init_default, false, Config_DisplayConfig_init_default, false, Config_LoRaConfig_init_default, false, Config_BluetoothConfig_init_default, 0}
|
#define LocalConfig_init_default {false, Config_DeviceConfig_init_default, false, Config_PositionConfig_init_default, false, Config_PowerConfig_init_default, false, Config_NetworkConfig_init_default, false, Config_DisplayConfig_init_default, false, Config_LoRaConfig_init_default, false, Config_BluetoothConfig_init_default, 0}
|
||||||
#define LocalModuleConfig_init_default {false, ModuleConfig_MQTTConfig_init_default, false, ModuleConfig_SerialConfig_init_default, false, ModuleConfig_ExternalNotificationConfig_init_default, false, ModuleConfig_StoreForwardConfig_init_default, false, ModuleConfig_RangeTestConfig_init_default, false, ModuleConfig_TelemetryConfig_init_default, false, ModuleConfig_CannedMessageConfig_init_default, 0, false, ModuleConfig_AudioConfig_init_default, false, ModuleConfig_RemoteHardwareConfig_init_default}
|
#define LocalModuleConfig_init_default {false, ModuleConfig_MQTTConfig_init_default, false, ModuleConfig_SerialConfig_init_default, false, ModuleConfig_ExternalNotificationConfig_init_default, false, ModuleConfig_StoreForwardConfig_init_default, false, ModuleConfig_RangeTestConfig_init_default, false, ModuleConfig_TelemetryConfig_init_default, false, ModuleConfig_CannedMessageConfig_init_default, 0, false, ModuleConfig_AudioConfig_init_default, false, ModuleConfig_RemoteHardwareConfig_init_default}
|
||||||
#define LocalConfig_init_zero {false, Config_DeviceConfig_init_zero, false, Config_PositionConfig_init_zero, false, Config_PowerConfig_init_zero, false, Config_NetworkConfig_init_zero, false, Config_DisplayConfig_init_zero, false, Config_LoRaConfig_init_zero, false, Config_BluetoothConfig_init_zero, 0}
|
#define LocalConfig_init_zero {false, Config_DeviceConfig_init_zero, false, Config_PositionConfig_init_zero, false, Config_PowerConfig_init_zero, false, Config_NetworkConfig_init_zero, false, Config_DisplayConfig_init_zero, false, Config_LoRaConfig_init_zero, false, Config_BluetoothConfig_init_zero, 0}
|
||||||
#define LocalModuleConfig_init_zero {false, ModuleConfig_MQTTConfig_init_zero, false, ModuleConfig_SerialConfig_init_zero, false, ModuleConfig_ExternalNotificationConfig_init_zero, false, ModuleConfig_StoreForwardConfig_init_zero, false, ModuleConfig_RangeTestConfig_init_zero, false, ModuleConfig_TelemetryConfig_init_zero, false, ModuleConfig_CannedMessageConfig_init_zero, 0, false, ModuleConfig_AudioConfig_init_zero, false, ModuleConfig_RemoteHardwareConfig_init_zero}
|
#define LocalModuleConfig_init_zero {false, ModuleConfig_MQTTConfig_init_zero, false, ModuleConfig_SerialConfig_init_zero, false, ModuleConfig_ExternalNotificationConfig_init_zero, false, ModuleConfig_StoreForwardConfig_init_zero, false, ModuleConfig_RangeTestConfig_init_zero, false, ModuleConfig_TelemetryConfig_init_zero, false, ModuleConfig_CannedMessageConfig_init_zero, 0, false, ModuleConfig_AudioConfig_init_zero, false, ModuleConfig_RemoteHardwareConfig_init_zero}
|
||||||
|
|
||||||
/* Field tags (for use in manual encoding/decoding) */
|
/* Field tags (for use in manual encoding/decoding) */
|
||||||
#define LocalConfig_device_tag 1
|
#define LocalConfig_device_tag 1
|
||||||
#define LocalConfig_position_tag 2
|
#define LocalConfig_position_tag 2
|
||||||
#define LocalConfig_power_tag 3
|
#define LocalConfig_power_tag 3
|
||||||
#define LocalConfig_network_tag 4
|
#define LocalConfig_network_tag 4
|
||||||
#define LocalConfig_display_tag 5
|
#define LocalConfig_display_tag 5
|
||||||
#define LocalConfig_lora_tag 6
|
#define LocalConfig_lora_tag 6
|
||||||
#define LocalConfig_bluetooth_tag 7
|
#define LocalConfig_bluetooth_tag 7
|
||||||
#define LocalConfig_version_tag 8
|
#define LocalConfig_version_tag 8
|
||||||
#define LocalModuleConfig_mqtt_tag 1
|
#define LocalModuleConfig_mqtt_tag 1
|
||||||
#define LocalModuleConfig_serial_tag 2
|
#define LocalModuleConfig_serial_tag 2
|
||||||
#define LocalModuleConfig_external_notification_tag 3
|
#define LocalModuleConfig_external_notification_tag 3
|
||||||
#define LocalModuleConfig_store_forward_tag 4
|
#define LocalModuleConfig_store_forward_tag 4
|
||||||
#define LocalModuleConfig_range_test_tag 5
|
#define LocalModuleConfig_range_test_tag 5
|
||||||
#define LocalModuleConfig_telemetry_tag 6
|
#define LocalModuleConfig_telemetry_tag 6
|
||||||
#define LocalModuleConfig_canned_message_tag 7
|
#define LocalModuleConfig_canned_message_tag 7
|
||||||
#define LocalModuleConfig_version_tag 8
|
#define LocalModuleConfig_version_tag 8
|
||||||
#define LocalModuleConfig_audio_tag 9
|
#define LocalModuleConfig_audio_tag 9
|
||||||
#define LocalModuleConfig_remote_hardware_tag 10
|
#define LocalModuleConfig_remote_hardware_tag 10
|
||||||
|
|
||||||
/* Struct field encoding specification for nanopb */
|
/* Struct field encoding specification for nanopb */
|
||||||
#define LocalConfig_FIELDLIST(X, a) \
|
#define LocalConfig_FIELDLIST(X, a) \
|
||||||
@@ -156,8 +156,8 @@ extern const pb_msgdesc_t LocalModuleConfig_msg;
|
|||||||
#define LocalModuleConfig_fields &LocalModuleConfig_msg
|
#define LocalModuleConfig_fields &LocalModuleConfig_msg
|
||||||
|
|
||||||
/* Maximum encoded size of messages (where known) */
|
/* Maximum encoded size of messages (where known) */
|
||||||
#define LocalConfig_size 391
|
#define LocalConfig_size 425
|
||||||
#define LocalModuleConfig_size 412
|
#define LocalModuleConfig_size 412
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#include "mesh.pb.h"
|
#include "./mesh.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
#error Regenerate this file with the current version of nanopb generator.
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
#endif
|
#endif
|
||||||
@@ -1,15 +1,15 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#ifndef PB_MESH_PB_H_INCLUDED
|
#ifndef PB_MESHTASTIC_MESHTASTIC_MESH_PB_H_INCLUDED
|
||||||
#define PB_MESH_PB_H_INCLUDED
|
#define PB_MESHTASTIC_MESHTASTIC_MESH_PB_H_INCLUDED
|
||||||
#include <pb.h>
|
#include <pb.h>
|
||||||
#include "channel.pb.h"
|
#include "./channel.pb.h"
|
||||||
#include "config.pb.h"
|
#include "./config.pb.h"
|
||||||
#include "module_config.pb.h"
|
#include "./module_config.pb.h"
|
||||||
#include "portnums.pb.h"
|
#include "./portnums.pb.h"
|
||||||
#include "telemetry.pb.h"
|
#include "./telemetry.pb.h"
|
||||||
#include "xmodem.pb.h"
|
#include "./xmodem.pb.h"
|
||||||
|
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
#error Regenerate this file with the current version of nanopb generator.
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
@@ -781,145 +781,145 @@ extern "C" {
|
|||||||
|
|
||||||
|
|
||||||
/* Initializer values for message structs */
|
/* Initializer values for message structs */
|
||||||
#define Position_init_default {0, 0, 0, 0, _Position_LocSource_MIN, _Position_AltSource_MIN, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
#define Position_init_default {0, 0, 0, 0, _Position_LocSource_MIN, _Position_AltSource_MIN, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
#define User_init_default {"", "", "", {0}, _HardwareModel_MIN, 0}
|
#define User_init_default {"", "", "", {0}, _HardwareModel_MIN, 0}
|
||||||
#define RouteDiscovery_init_default {0, {0, 0, 0, 0, 0, 0, 0, 0}}
|
#define RouteDiscovery_init_default {0, {0, 0, 0, 0, 0, 0, 0, 0}}
|
||||||
#define Routing_init_default {0, {RouteDiscovery_init_default}}
|
#define Routing_init_default {0, {RouteDiscovery_init_default}}
|
||||||
#define Data_init_default {_PortNum_MIN, {0, {0}}, 0, 0, 0, 0, 0, 0}
|
#define Data_init_default {_PortNum_MIN, {0, {0}}, 0, 0, 0, 0, 0, 0}
|
||||||
#define Waypoint_init_default {0, 0, 0, 0, 0, "", "", 0}
|
#define Waypoint_init_default {0, 0, 0, 0, 0, "", "", 0}
|
||||||
#define MeshPacket_init_default {0, 0, 0, 0, {Data_init_default}, 0, 0, 0, 0, 0, _MeshPacket_Priority_MIN, 0, _MeshPacket_Delayed_MIN}
|
#define MeshPacket_init_default {0, 0, 0, 0, {Data_init_default}, 0, 0, 0, 0, 0, _MeshPacket_Priority_MIN, 0, _MeshPacket_Delayed_MIN}
|
||||||
#define NodeInfo_init_default {0, false, User_init_default, false, Position_init_default, 0, 0, false, DeviceMetrics_init_default}
|
#define NodeInfo_init_default {0, false, User_init_default, false, Position_init_default, 0, 0, false, DeviceMetrics_init_default}
|
||||||
#define MyNodeInfo_init_default {0, 0, 0, "", _CriticalErrorCode_MIN, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, 0, 0}
|
#define MyNodeInfo_init_default {0, 0, 0, "", _CriticalErrorCode_MIN, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, 0, 0}
|
||||||
#define LogRecord_init_default {"", 0, "", _LogRecord_Level_MIN}
|
#define LogRecord_init_default {"", 0, "", _LogRecord_Level_MIN}
|
||||||
#define QueueStatus_init_default {0, 0, 0, 0}
|
#define QueueStatus_init_default {0, 0, 0, 0}
|
||||||
#define FromRadio_init_default {0, 0, {MeshPacket_init_default}}
|
#define FromRadio_init_default {0, 0, {MeshPacket_init_default}}
|
||||||
#define ToRadio_init_default {0, {MeshPacket_init_default}}
|
#define ToRadio_init_default {0, {MeshPacket_init_default}}
|
||||||
#define Compressed_init_default {_PortNum_MIN, {0, {0}}}
|
#define Compressed_init_default {_PortNum_MIN, {0, {0}}}
|
||||||
#define Position_init_zero {0, 0, 0, 0, _Position_LocSource_MIN, _Position_AltSource_MIN, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
#define Position_init_zero {0, 0, 0, 0, _Position_LocSource_MIN, _Position_AltSource_MIN, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
#define User_init_zero {"", "", "", {0}, _HardwareModel_MIN, 0}
|
#define User_init_zero {"", "", "", {0}, _HardwareModel_MIN, 0}
|
||||||
#define RouteDiscovery_init_zero {0, {0, 0, 0, 0, 0, 0, 0, 0}}
|
#define RouteDiscovery_init_zero {0, {0, 0, 0, 0, 0, 0, 0, 0}}
|
||||||
#define Routing_init_zero {0, {RouteDiscovery_init_zero}}
|
#define Routing_init_zero {0, {RouteDiscovery_init_zero}}
|
||||||
#define Data_init_zero {_PortNum_MIN, {0, {0}}, 0, 0, 0, 0, 0, 0}
|
#define Data_init_zero {_PortNum_MIN, {0, {0}}, 0, 0, 0, 0, 0, 0}
|
||||||
#define Waypoint_init_zero {0, 0, 0, 0, 0, "", "", 0}
|
#define Waypoint_init_zero {0, 0, 0, 0, 0, "", "", 0}
|
||||||
#define MeshPacket_init_zero {0, 0, 0, 0, {Data_init_zero}, 0, 0, 0, 0, 0, _MeshPacket_Priority_MIN, 0, _MeshPacket_Delayed_MIN}
|
#define MeshPacket_init_zero {0, 0, 0, 0, {Data_init_zero}, 0, 0, 0, 0, 0, _MeshPacket_Priority_MIN, 0, _MeshPacket_Delayed_MIN}
|
||||||
#define NodeInfo_init_zero {0, false, User_init_zero, false, Position_init_zero, 0, 0, false, DeviceMetrics_init_zero}
|
#define NodeInfo_init_zero {0, false, User_init_zero, false, Position_init_zero, 0, 0, false, DeviceMetrics_init_zero}
|
||||||
#define MyNodeInfo_init_zero {0, 0, 0, "", _CriticalErrorCode_MIN, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, 0, 0}
|
#define MyNodeInfo_init_zero {0, 0, 0, "", _CriticalErrorCode_MIN, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, 0, 0}
|
||||||
#define LogRecord_init_zero {"", 0, "", _LogRecord_Level_MIN}
|
#define LogRecord_init_zero {"", 0, "", _LogRecord_Level_MIN}
|
||||||
#define QueueStatus_init_zero {0, 0, 0, 0}
|
#define QueueStatus_init_zero {0, 0, 0, 0}
|
||||||
#define FromRadio_init_zero {0, 0, {MeshPacket_init_zero}}
|
#define FromRadio_init_zero {0, 0, {MeshPacket_init_zero}}
|
||||||
#define ToRadio_init_zero {0, {MeshPacket_init_zero}}
|
#define ToRadio_init_zero {0, {MeshPacket_init_zero}}
|
||||||
#define Compressed_init_zero {_PortNum_MIN, {0, {0}}}
|
#define Compressed_init_zero {_PortNum_MIN, {0, {0}}}
|
||||||
|
|
||||||
/* Field tags (for use in manual encoding/decoding) */
|
/* Field tags (for use in manual encoding/decoding) */
|
||||||
#define Position_latitude_i_tag 1
|
#define Position_latitude_i_tag 1
|
||||||
#define Position_longitude_i_tag 2
|
#define Position_longitude_i_tag 2
|
||||||
#define Position_altitude_tag 3
|
#define Position_altitude_tag 3
|
||||||
#define Position_time_tag 4
|
#define Position_time_tag 4
|
||||||
#define Position_location_source_tag 5
|
#define Position_location_source_tag 5
|
||||||
#define Position_altitude_source_tag 6
|
#define Position_altitude_source_tag 6
|
||||||
#define Position_timestamp_tag 7
|
#define Position_timestamp_tag 7
|
||||||
#define Position_timestamp_millis_adjust_tag 8
|
#define Position_timestamp_millis_adjust_tag 8
|
||||||
#define Position_altitude_hae_tag 9
|
#define Position_altitude_hae_tag 9
|
||||||
#define Position_altitude_geoidal_separation_tag 10
|
#define Position_altitude_geoidal_separation_tag 10
|
||||||
#define Position_PDOP_tag 11
|
#define Position_PDOP_tag 11
|
||||||
#define Position_HDOP_tag 12
|
#define Position_HDOP_tag 12
|
||||||
#define Position_VDOP_tag 13
|
#define Position_VDOP_tag 13
|
||||||
#define Position_gps_accuracy_tag 14
|
#define Position_gps_accuracy_tag 14
|
||||||
#define Position_ground_speed_tag 15
|
#define Position_ground_speed_tag 15
|
||||||
#define Position_ground_track_tag 16
|
#define Position_ground_track_tag 16
|
||||||
#define Position_fix_quality_tag 17
|
#define Position_fix_quality_tag 17
|
||||||
#define Position_fix_type_tag 18
|
#define Position_fix_type_tag 18
|
||||||
#define Position_sats_in_view_tag 19
|
#define Position_sats_in_view_tag 19
|
||||||
#define Position_sensor_id_tag 20
|
#define Position_sensor_id_tag 20
|
||||||
#define Position_next_update_tag 21
|
#define Position_next_update_tag 21
|
||||||
#define Position_seq_number_tag 22
|
#define Position_seq_number_tag 22
|
||||||
#define User_id_tag 1
|
#define User_id_tag 1
|
||||||
#define User_long_name_tag 2
|
#define User_long_name_tag 2
|
||||||
#define User_short_name_tag 3
|
#define User_short_name_tag 3
|
||||||
#define User_macaddr_tag 4
|
#define User_macaddr_tag 4
|
||||||
#define User_hw_model_tag 5
|
#define User_hw_model_tag 5
|
||||||
#define User_is_licensed_tag 6
|
#define User_is_licensed_tag 6
|
||||||
#define RouteDiscovery_route_tag 1
|
#define RouteDiscovery_route_tag 1
|
||||||
#define Routing_route_request_tag 1
|
#define Routing_route_request_tag 1
|
||||||
#define Routing_route_reply_tag 2
|
#define Routing_route_reply_tag 2
|
||||||
#define Routing_error_reason_tag 3
|
#define Routing_error_reason_tag 3
|
||||||
#define Data_portnum_tag 1
|
#define Data_portnum_tag 1
|
||||||
#define Data_payload_tag 2
|
#define Data_payload_tag 2
|
||||||
#define Data_want_response_tag 3
|
#define Data_want_response_tag 3
|
||||||
#define Data_dest_tag 4
|
#define Data_dest_tag 4
|
||||||
#define Data_source_tag 5
|
#define Data_source_tag 5
|
||||||
#define Data_request_id_tag 6
|
#define Data_request_id_tag 6
|
||||||
#define Data_reply_id_tag 7
|
#define Data_reply_id_tag 7
|
||||||
#define Data_emoji_tag 8
|
#define Data_emoji_tag 8
|
||||||
#define Waypoint_id_tag 1
|
#define Waypoint_id_tag 1
|
||||||
#define Waypoint_latitude_i_tag 2
|
#define Waypoint_latitude_i_tag 2
|
||||||
#define Waypoint_longitude_i_tag 3
|
#define Waypoint_longitude_i_tag 3
|
||||||
#define Waypoint_expire_tag 4
|
#define Waypoint_expire_tag 4
|
||||||
#define Waypoint_locked_to_tag 5
|
#define Waypoint_locked_to_tag 5
|
||||||
#define Waypoint_name_tag 6
|
#define Waypoint_name_tag 6
|
||||||
#define Waypoint_description_tag 7
|
#define Waypoint_description_tag 7
|
||||||
#define Waypoint_icon_tag 8
|
#define Waypoint_icon_tag 8
|
||||||
#define MeshPacket_from_tag 1
|
#define MeshPacket_from_tag 1
|
||||||
#define MeshPacket_to_tag 2
|
#define MeshPacket_to_tag 2
|
||||||
#define MeshPacket_channel_tag 3
|
#define MeshPacket_channel_tag 3
|
||||||
#define MeshPacket_decoded_tag 4
|
#define MeshPacket_decoded_tag 4
|
||||||
#define MeshPacket_encrypted_tag 5
|
#define MeshPacket_encrypted_tag 5
|
||||||
#define MeshPacket_id_tag 6
|
#define MeshPacket_id_tag 6
|
||||||
#define MeshPacket_rx_time_tag 7
|
#define MeshPacket_rx_time_tag 7
|
||||||
#define MeshPacket_rx_snr_tag 8
|
#define MeshPacket_rx_snr_tag 8
|
||||||
#define MeshPacket_hop_limit_tag 9
|
#define MeshPacket_hop_limit_tag 9
|
||||||
#define MeshPacket_want_ack_tag 10
|
#define MeshPacket_want_ack_tag 10
|
||||||
#define MeshPacket_priority_tag 11
|
#define MeshPacket_priority_tag 11
|
||||||
#define MeshPacket_rx_rssi_tag 12
|
#define MeshPacket_rx_rssi_tag 12
|
||||||
#define MeshPacket_delayed_tag 13
|
#define MeshPacket_delayed_tag 13
|
||||||
#define NodeInfo_num_tag 1
|
#define NodeInfo_num_tag 1
|
||||||
#define NodeInfo_user_tag 2
|
#define NodeInfo_user_tag 2
|
||||||
#define NodeInfo_position_tag 3
|
#define NodeInfo_position_tag 3
|
||||||
#define NodeInfo_snr_tag 4
|
#define NodeInfo_snr_tag 4
|
||||||
#define NodeInfo_last_heard_tag 5
|
#define NodeInfo_last_heard_tag 5
|
||||||
#define NodeInfo_device_metrics_tag 6
|
#define NodeInfo_device_metrics_tag 6
|
||||||
#define MyNodeInfo_my_node_num_tag 1
|
#define MyNodeInfo_my_node_num_tag 1
|
||||||
#define MyNodeInfo_has_gps_tag 2
|
#define MyNodeInfo_has_gps_tag 2
|
||||||
#define MyNodeInfo_max_channels_tag 3
|
#define MyNodeInfo_max_channels_tag 3
|
||||||
#define MyNodeInfo_firmware_version_tag 4
|
#define MyNodeInfo_firmware_version_tag 4
|
||||||
#define MyNodeInfo_error_code_tag 5
|
#define MyNodeInfo_error_code_tag 5
|
||||||
#define MyNodeInfo_error_address_tag 6
|
#define MyNodeInfo_error_address_tag 6
|
||||||
#define MyNodeInfo_error_count_tag 7
|
#define MyNodeInfo_error_count_tag 7
|
||||||
#define MyNodeInfo_reboot_count_tag 8
|
#define MyNodeInfo_reboot_count_tag 8
|
||||||
#define MyNodeInfo_bitrate_tag 9
|
#define MyNodeInfo_bitrate_tag 9
|
||||||
#define MyNodeInfo_message_timeout_msec_tag 10
|
#define MyNodeInfo_message_timeout_msec_tag 10
|
||||||
#define MyNodeInfo_min_app_version_tag 11
|
#define MyNodeInfo_min_app_version_tag 11
|
||||||
#define MyNodeInfo_air_period_tx_tag 12
|
#define MyNodeInfo_air_period_tx_tag 12
|
||||||
#define MyNodeInfo_air_period_rx_tag 13
|
#define MyNodeInfo_air_period_rx_tag 13
|
||||||
#define MyNodeInfo_has_wifi_tag 14
|
#define MyNodeInfo_has_wifi_tag 14
|
||||||
#define MyNodeInfo_channel_utilization_tag 15
|
#define MyNodeInfo_channel_utilization_tag 15
|
||||||
#define MyNodeInfo_air_util_tx_tag 16
|
#define MyNodeInfo_air_util_tx_tag 16
|
||||||
#define LogRecord_message_tag 1
|
#define LogRecord_message_tag 1
|
||||||
#define LogRecord_time_tag 2
|
#define LogRecord_time_tag 2
|
||||||
#define LogRecord_source_tag 3
|
#define LogRecord_source_tag 3
|
||||||
#define LogRecord_level_tag 4
|
#define LogRecord_level_tag 4
|
||||||
#define QueueStatus_res_tag 1
|
#define QueueStatus_res_tag 1
|
||||||
#define QueueStatus_free_tag 2
|
#define QueueStatus_free_tag 2
|
||||||
#define QueueStatus_maxlen_tag 3
|
#define QueueStatus_maxlen_tag 3
|
||||||
#define QueueStatus_mesh_packet_id_tag 4
|
#define QueueStatus_mesh_packet_id_tag 4
|
||||||
#define FromRadio_id_tag 1
|
#define FromRadio_id_tag 1
|
||||||
#define FromRadio_packet_tag 2
|
#define FromRadio_packet_tag 2
|
||||||
#define FromRadio_my_info_tag 3
|
#define FromRadio_my_info_tag 3
|
||||||
#define FromRadio_node_info_tag 4
|
#define FromRadio_node_info_tag 4
|
||||||
#define FromRadio_config_tag 5
|
#define FromRadio_config_tag 5
|
||||||
#define FromRadio_log_record_tag 6
|
#define FromRadio_log_record_tag 6
|
||||||
#define FromRadio_config_complete_id_tag 7
|
#define FromRadio_config_complete_id_tag 7
|
||||||
#define FromRadio_rebooted_tag 8
|
#define FromRadio_rebooted_tag 8
|
||||||
#define FromRadio_moduleConfig_tag 9
|
#define FromRadio_moduleConfig_tag 9
|
||||||
#define FromRadio_channel_tag 10
|
#define FromRadio_channel_tag 10
|
||||||
#define FromRadio_queueStatus_tag 11
|
#define FromRadio_queueStatus_tag 11
|
||||||
#define FromRadio_xmodemPacket_tag 12
|
#define FromRadio_xmodemPacket_tag 12
|
||||||
#define ToRadio_packet_tag 1
|
#define ToRadio_packet_tag 1
|
||||||
#define ToRadio_want_config_id_tag 3
|
#define ToRadio_want_config_id_tag 3
|
||||||
#define ToRadio_disconnect_tag 4
|
#define ToRadio_disconnect_tag 4
|
||||||
#define ToRadio_xmodemPacket_tag 5
|
#define ToRadio_xmodemPacket_tag 5
|
||||||
#define Compressed_portnum_tag 1
|
#define Compressed_portnum_tag 1
|
||||||
#define Compressed_data_tag 2
|
#define Compressed_data_tag 2
|
||||||
|
|
||||||
/* Struct field encoding specification for nanopb */
|
/* Struct field encoding specification for nanopb */
|
||||||
#define Position_FIELDLIST(X, a) \
|
#define Position_FIELDLIST(X, a) \
|
||||||
@@ -1136,20 +1136,20 @@ extern const pb_msgdesc_t Compressed_msg;
|
|||||||
#define Compressed_fields &Compressed_msg
|
#define Compressed_fields &Compressed_msg
|
||||||
|
|
||||||
/* Maximum encoded size of messages (where known) */
|
/* Maximum encoded size of messages (where known) */
|
||||||
#define Compressed_size 243
|
#define Compressed_size 243
|
||||||
#define Data_size 270
|
#define Data_size 270
|
||||||
#define FromRadio_size 330
|
#define FromRadio_size 330
|
||||||
#define LogRecord_size 81
|
#define LogRecord_size 81
|
||||||
#define MeshPacket_size 321
|
#define MeshPacket_size 321
|
||||||
#define MyNodeInfo_size 179
|
#define MyNodeInfo_size 179
|
||||||
#define NodeInfo_size 258
|
#define NodeInfo_size 258
|
||||||
#define Position_size 137
|
#define Position_size 137
|
||||||
#define QueueStatus_size 23
|
#define QueueStatus_size 23
|
||||||
#define RouteDiscovery_size 40
|
#define RouteDiscovery_size 40
|
||||||
#define Routing_size 42
|
#define Routing_size 42
|
||||||
#define ToRadio_size 324
|
#define ToRadio_size 324
|
||||||
#define User_size 77
|
#define User_size 77
|
||||||
#define Waypoint_size 165
|
#define Waypoint_size 165
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#include "module_config.pb.h"
|
#include "./module_config.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
#error Regenerate this file with the current version of nanopb generator.
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
#endif
|
#endif
|
||||||
+49
-49
@@ -1,8 +1,8 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#ifndef PB_MODULE_CONFIG_PB_H_INCLUDED
|
#ifndef PB_MESHTASTIC_MESHTASTIC_MODULE_CONFIG_PB_H_INCLUDED
|
||||||
#define PB_MODULE_CONFIG_PB_H_INCLUDED
|
#define PB_MESHTASTIC_MESHTASTIC_MODULE_CONFIG_PB_H_INCLUDED
|
||||||
#include <pb.h>
|
#include <pb.h>
|
||||||
|
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
@@ -317,49 +317,49 @@ extern "C" {
|
|||||||
|
|
||||||
|
|
||||||
/* Initializer values for message structs */
|
/* Initializer values for message structs */
|
||||||
#define ModuleConfig_init_default {0, {ModuleConfig_MQTTConfig_init_default}}
|
#define ModuleConfig_init_default {0, {ModuleConfig_MQTTConfig_init_default}}
|
||||||
#define ModuleConfig_MQTTConfig_init_default {0, "", "", "", 0, 0}
|
#define ModuleConfig_MQTTConfig_init_default {0, "", "", "", 0, 0}
|
||||||
#define ModuleConfig_RemoteHardwareConfig_init_default {0}
|
#define ModuleConfig_RemoteHardwareConfig_init_default {0}
|
||||||
#define ModuleConfig_AudioConfig_init_default {0, 0, _ModuleConfig_AudioConfig_Audio_Baud_MIN, 0, 0, 0, 0}
|
#define ModuleConfig_AudioConfig_init_default {0, 0, _ModuleConfig_AudioConfig_Audio_Baud_MIN, 0, 0, 0, 0}
|
||||||
#define ModuleConfig_SerialConfig_init_default {0, 0, 0, 0, _ModuleConfig_SerialConfig_Serial_Baud_MIN, 0, _ModuleConfig_SerialConfig_Serial_Mode_MIN}
|
#define ModuleConfig_SerialConfig_init_default {0, 0, 0, 0, _ModuleConfig_SerialConfig_Serial_Baud_MIN, 0, _ModuleConfig_SerialConfig_Serial_Mode_MIN}
|
||||||
#define ModuleConfig_ExternalNotificationConfig_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
#define ModuleConfig_ExternalNotificationConfig_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
#define ModuleConfig_StoreForwardConfig_init_default {0, 0, 0, 0, 0}
|
#define ModuleConfig_StoreForwardConfig_init_default {0, 0, 0, 0, 0}
|
||||||
#define ModuleConfig_RangeTestConfig_init_default {0, 0, 0}
|
#define ModuleConfig_RangeTestConfig_init_default {0, 0, 0}
|
||||||
#define ModuleConfig_TelemetryConfig_init_default {0, 0, 0, 0, 0}
|
#define ModuleConfig_TelemetryConfig_init_default {0, 0, 0, 0, 0}
|
||||||
#define ModuleConfig_CannedMessageConfig_init_default {0, 0, 0, 0, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, 0, 0, "", 0}
|
#define ModuleConfig_CannedMessageConfig_init_default {0, 0, 0, 0, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, 0, 0, "", 0}
|
||||||
#define ModuleConfig_init_zero {0, {ModuleConfig_MQTTConfig_init_zero}}
|
#define ModuleConfig_init_zero {0, {ModuleConfig_MQTTConfig_init_zero}}
|
||||||
#define ModuleConfig_MQTTConfig_init_zero {0, "", "", "", 0, 0}
|
#define ModuleConfig_MQTTConfig_init_zero {0, "", "", "", 0, 0}
|
||||||
#define ModuleConfig_RemoteHardwareConfig_init_zero {0}
|
#define ModuleConfig_RemoteHardwareConfig_init_zero {0}
|
||||||
#define ModuleConfig_AudioConfig_init_zero {0, 0, _ModuleConfig_AudioConfig_Audio_Baud_MIN, 0, 0, 0, 0}
|
#define ModuleConfig_AudioConfig_init_zero {0, 0, _ModuleConfig_AudioConfig_Audio_Baud_MIN, 0, 0, 0, 0}
|
||||||
#define ModuleConfig_SerialConfig_init_zero {0, 0, 0, 0, _ModuleConfig_SerialConfig_Serial_Baud_MIN, 0, _ModuleConfig_SerialConfig_Serial_Mode_MIN}
|
#define ModuleConfig_SerialConfig_init_zero {0, 0, 0, 0, _ModuleConfig_SerialConfig_Serial_Baud_MIN, 0, _ModuleConfig_SerialConfig_Serial_Mode_MIN}
|
||||||
#define ModuleConfig_ExternalNotificationConfig_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
#define ModuleConfig_ExternalNotificationConfig_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
#define ModuleConfig_StoreForwardConfig_init_zero {0, 0, 0, 0, 0}
|
#define ModuleConfig_StoreForwardConfig_init_zero {0, 0, 0, 0, 0}
|
||||||
#define ModuleConfig_RangeTestConfig_init_zero {0, 0, 0}
|
#define ModuleConfig_RangeTestConfig_init_zero {0, 0, 0}
|
||||||
#define ModuleConfig_TelemetryConfig_init_zero {0, 0, 0, 0, 0}
|
#define ModuleConfig_TelemetryConfig_init_zero {0, 0, 0, 0, 0}
|
||||||
#define ModuleConfig_CannedMessageConfig_init_zero {0, 0, 0, 0, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, 0, 0, "", 0}
|
#define ModuleConfig_CannedMessageConfig_init_zero {0, 0, 0, 0, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, 0, 0, "", 0}
|
||||||
|
|
||||||
/* Field tags (for use in manual encoding/decoding) */
|
/* Field tags (for use in manual encoding/decoding) */
|
||||||
#define ModuleConfig_MQTTConfig_enabled_tag 1
|
#define ModuleConfig_MQTTConfig_enabled_tag 1
|
||||||
#define ModuleConfig_MQTTConfig_address_tag 2
|
#define ModuleConfig_MQTTConfig_address_tag 2
|
||||||
#define ModuleConfig_MQTTConfig_username_tag 3
|
#define ModuleConfig_MQTTConfig_username_tag 3
|
||||||
#define ModuleConfig_MQTTConfig_password_tag 4
|
#define ModuleConfig_MQTTConfig_password_tag 4
|
||||||
#define ModuleConfig_MQTTConfig_encryption_enabled_tag 5
|
#define ModuleConfig_MQTTConfig_encryption_enabled_tag 5
|
||||||
#define ModuleConfig_MQTTConfig_json_enabled_tag 6
|
#define ModuleConfig_MQTTConfig_json_enabled_tag 6
|
||||||
#define ModuleConfig_RemoteHardwareConfig_enabled_tag 1
|
#define ModuleConfig_RemoteHardwareConfig_enabled_tag 1
|
||||||
#define ModuleConfig_AudioConfig_codec2_enabled_tag 1
|
#define ModuleConfig_AudioConfig_codec2_enabled_tag 1
|
||||||
#define ModuleConfig_AudioConfig_ptt_pin_tag 2
|
#define ModuleConfig_AudioConfig_ptt_pin_tag 2
|
||||||
#define ModuleConfig_AudioConfig_bitrate_tag 3
|
#define ModuleConfig_AudioConfig_bitrate_tag 3
|
||||||
#define ModuleConfig_AudioConfig_i2s_ws_tag 4
|
#define ModuleConfig_AudioConfig_i2s_ws_tag 4
|
||||||
#define ModuleConfig_AudioConfig_i2s_sd_tag 5
|
#define ModuleConfig_AudioConfig_i2s_sd_tag 5
|
||||||
#define ModuleConfig_AudioConfig_i2s_din_tag 6
|
#define ModuleConfig_AudioConfig_i2s_din_tag 6
|
||||||
#define ModuleConfig_AudioConfig_i2s_sck_tag 7
|
#define ModuleConfig_AudioConfig_i2s_sck_tag 7
|
||||||
#define ModuleConfig_SerialConfig_enabled_tag 1
|
#define ModuleConfig_SerialConfig_enabled_tag 1
|
||||||
#define ModuleConfig_SerialConfig_echo_tag 2
|
#define ModuleConfig_SerialConfig_echo_tag 2
|
||||||
#define ModuleConfig_SerialConfig_rxd_tag 3
|
#define ModuleConfig_SerialConfig_rxd_tag 3
|
||||||
#define ModuleConfig_SerialConfig_txd_tag 4
|
#define ModuleConfig_SerialConfig_txd_tag 4
|
||||||
#define ModuleConfig_SerialConfig_baud_tag 5
|
#define ModuleConfig_SerialConfig_baud_tag 5
|
||||||
#define ModuleConfig_SerialConfig_timeout_tag 6
|
#define ModuleConfig_SerialConfig_timeout_tag 6
|
||||||
#define ModuleConfig_SerialConfig_mode_tag 7
|
#define ModuleConfig_SerialConfig_mode_tag 7
|
||||||
#define ModuleConfig_ExternalNotificationConfig_enabled_tag 1
|
#define ModuleConfig_ExternalNotificationConfig_enabled_tag 1
|
||||||
#define ModuleConfig_ExternalNotificationConfig_output_ms_tag 2
|
#define ModuleConfig_ExternalNotificationConfig_output_ms_tag 2
|
||||||
#define ModuleConfig_ExternalNotificationConfig_output_tag 3
|
#define ModuleConfig_ExternalNotificationConfig_output_tag 3
|
||||||
@@ -380,8 +380,8 @@ extern "C" {
|
|||||||
#define ModuleConfig_StoreForwardConfig_history_return_max_tag 4
|
#define ModuleConfig_StoreForwardConfig_history_return_max_tag 4
|
||||||
#define ModuleConfig_StoreForwardConfig_history_return_window_tag 5
|
#define ModuleConfig_StoreForwardConfig_history_return_window_tag 5
|
||||||
#define ModuleConfig_RangeTestConfig_enabled_tag 1
|
#define ModuleConfig_RangeTestConfig_enabled_tag 1
|
||||||
#define ModuleConfig_RangeTestConfig_sender_tag 2
|
#define ModuleConfig_RangeTestConfig_sender_tag 2
|
||||||
#define ModuleConfig_RangeTestConfig_save_tag 3
|
#define ModuleConfig_RangeTestConfig_save_tag 3
|
||||||
#define ModuleConfig_TelemetryConfig_device_update_interval_tag 1
|
#define ModuleConfig_TelemetryConfig_device_update_interval_tag 1
|
||||||
#define ModuleConfig_TelemetryConfig_environment_update_interval_tag 2
|
#define ModuleConfig_TelemetryConfig_environment_update_interval_tag 2
|
||||||
#define ModuleConfig_TelemetryConfig_environment_measurement_enabled_tag 3
|
#define ModuleConfig_TelemetryConfig_environment_measurement_enabled_tag 3
|
||||||
@@ -398,15 +398,15 @@ extern "C" {
|
|||||||
#define ModuleConfig_CannedMessageConfig_enabled_tag 9
|
#define ModuleConfig_CannedMessageConfig_enabled_tag 9
|
||||||
#define ModuleConfig_CannedMessageConfig_allow_input_source_tag 10
|
#define ModuleConfig_CannedMessageConfig_allow_input_source_tag 10
|
||||||
#define ModuleConfig_CannedMessageConfig_send_bell_tag 11
|
#define ModuleConfig_CannedMessageConfig_send_bell_tag 11
|
||||||
#define ModuleConfig_mqtt_tag 1
|
#define ModuleConfig_mqtt_tag 1
|
||||||
#define ModuleConfig_serial_tag 2
|
#define ModuleConfig_serial_tag 2
|
||||||
#define ModuleConfig_external_notification_tag 3
|
#define ModuleConfig_external_notification_tag 3
|
||||||
#define ModuleConfig_store_forward_tag 4
|
#define ModuleConfig_store_forward_tag 4
|
||||||
#define ModuleConfig_range_test_tag 5
|
#define ModuleConfig_range_test_tag 5
|
||||||
#define ModuleConfig_telemetry_tag 6
|
#define ModuleConfig_telemetry_tag 6
|
||||||
#define ModuleConfig_canned_message_tag 7
|
#define ModuleConfig_canned_message_tag 7
|
||||||
#define ModuleConfig_audio_tag 8
|
#define ModuleConfig_audio_tag 8
|
||||||
#define ModuleConfig_remote_hardware_tag 9
|
#define ModuleConfig_remote_hardware_tag 9
|
||||||
|
|
||||||
/* Struct field encoding specification for nanopb */
|
/* Struct field encoding specification for nanopb */
|
||||||
#define ModuleConfig_FIELDLIST(X, a) \
|
#define ModuleConfig_FIELDLIST(X, a) \
|
||||||
@@ -550,16 +550,16 @@ extern const pb_msgdesc_t ModuleConfig_CannedMessageConfig_msg;
|
|||||||
#define ModuleConfig_CannedMessageConfig_fields &ModuleConfig_CannedMessageConfig_msg
|
#define ModuleConfig_CannedMessageConfig_fields &ModuleConfig_CannedMessageConfig_msg
|
||||||
|
|
||||||
/* Maximum encoded size of messages (where known) */
|
/* Maximum encoded size of messages (where known) */
|
||||||
#define ModuleConfig_AudioConfig_size 19
|
#define ModuleConfig_AudioConfig_size 19
|
||||||
#define ModuleConfig_CannedMessageConfig_size 49
|
#define ModuleConfig_CannedMessageConfig_size 49
|
||||||
#define ModuleConfig_ExternalNotificationConfig_size 40
|
#define ModuleConfig_ExternalNotificationConfig_size 40
|
||||||
#define ModuleConfig_MQTTConfig_size 201
|
#define ModuleConfig_MQTTConfig_size 201
|
||||||
#define ModuleConfig_RangeTestConfig_size 10
|
#define ModuleConfig_RangeTestConfig_size 10
|
||||||
#define ModuleConfig_RemoteHardwareConfig_size 2
|
#define ModuleConfig_RemoteHardwareConfig_size 2
|
||||||
#define ModuleConfig_SerialConfig_size 26
|
#define ModuleConfig_SerialConfig_size 26
|
||||||
#define ModuleConfig_StoreForwardConfig_size 22
|
#define ModuleConfig_StoreForwardConfig_size 22
|
||||||
#define ModuleConfig_TelemetryConfig_size 18
|
#define ModuleConfig_TelemetryConfig_size 18
|
||||||
#define ModuleConfig_size 204
|
#define ModuleConfig_size 204
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#include "mqtt.pb.h"
|
#include "./mqtt.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
#error Regenerate this file with the current version of nanopb generator.
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
#endif
|
#endif
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#ifndef PB_MQTT_PB_H_INCLUDED
|
#ifndef PB_MESHTASTIC_MESHTASTIC_MQTT_PB_H_INCLUDED
|
||||||
#define PB_MQTT_PB_H_INCLUDED
|
#define PB_MESHTASTIC_MESHTASTIC_MQTT_PB_H_INCLUDED
|
||||||
#include <pb.h>
|
#include <pb.h>
|
||||||
#include "mesh.pb.h"
|
#include "./mesh.pb.h"
|
||||||
|
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
#error Regenerate this file with the current version of nanopb generator.
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
@@ -29,13 +29,13 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Initializer values for message structs */
|
/* Initializer values for message structs */
|
||||||
#define ServiceEnvelope_init_default {NULL, NULL, NULL}
|
#define ServiceEnvelope_init_default {NULL, NULL, NULL}
|
||||||
#define ServiceEnvelope_init_zero {NULL, NULL, NULL}
|
#define ServiceEnvelope_init_zero {NULL, NULL, NULL}
|
||||||
|
|
||||||
/* Field tags (for use in manual encoding/decoding) */
|
/* Field tags (for use in manual encoding/decoding) */
|
||||||
#define ServiceEnvelope_packet_tag 1
|
#define ServiceEnvelope_packet_tag 1
|
||||||
#define ServiceEnvelope_channel_id_tag 2
|
#define ServiceEnvelope_channel_id_tag 2
|
||||||
#define ServiceEnvelope_gateway_id_tag 3
|
#define ServiceEnvelope_gateway_id_tag 3
|
||||||
|
|
||||||
/* Struct field encoding specification for nanopb */
|
/* Struct field encoding specification for nanopb */
|
||||||
#define ServiceEnvelope_FIELDLIST(X, a) \
|
#define ServiceEnvelope_FIELDLIST(X, a) \
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#include "portnums.pb.h"
|
#include "./portnums.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
#error Regenerate this file with the current version of nanopb generator.
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
#endif
|
#endif
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#ifndef PB_PORTNUMS_PB_H_INCLUDED
|
#ifndef PB_MESHTASTIC_MESHTASTIC_PORTNUMS_PB_H_INCLUDED
|
||||||
#define PB_PORTNUMS_PB_H_INCLUDED
|
#define PB_MESHTASTIC_MESHTASTIC_PORTNUMS_PB_H_INCLUDED
|
||||||
#include <pb.h>
|
#include <pb.h>
|
||||||
|
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#include "remote_hardware.pb.h"
|
#include "./remote_hardware.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
#error Regenerate this file with the current version of nanopb generator.
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
#endif
|
#endif
|
||||||
+8
-8
@@ -1,8 +1,8 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#ifndef PB_REMOTE_HARDWARE_PB_H_INCLUDED
|
#ifndef PB_MESHTASTIC_MESHTASTIC_REMOTE_HARDWARE_PB_H_INCLUDED
|
||||||
#define PB_REMOTE_HARDWARE_PB_H_INCLUDED
|
#define PB_MESHTASTIC_MESHTASTIC_REMOTE_HARDWARE_PB_H_INCLUDED
|
||||||
#include <pb.h>
|
#include <pb.h>
|
||||||
|
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
@@ -62,13 +62,13 @@ extern "C" {
|
|||||||
|
|
||||||
|
|
||||||
/* Initializer values for message structs */
|
/* Initializer values for message structs */
|
||||||
#define HardwareMessage_init_default {_HardwareMessage_Type_MIN, 0, 0}
|
#define HardwareMessage_init_default {_HardwareMessage_Type_MIN, 0, 0}
|
||||||
#define HardwareMessage_init_zero {_HardwareMessage_Type_MIN, 0, 0}
|
#define HardwareMessage_init_zero {_HardwareMessage_Type_MIN, 0, 0}
|
||||||
|
|
||||||
/* Field tags (for use in manual encoding/decoding) */
|
/* Field tags (for use in manual encoding/decoding) */
|
||||||
#define HardwareMessage_type_tag 1
|
#define HardwareMessage_type_tag 1
|
||||||
#define HardwareMessage_gpio_mask_tag 2
|
#define HardwareMessage_gpio_mask_tag 2
|
||||||
#define HardwareMessage_gpio_value_tag 3
|
#define HardwareMessage_gpio_value_tag 3
|
||||||
|
|
||||||
/* Struct field encoding specification for nanopb */
|
/* Struct field encoding specification for nanopb */
|
||||||
#define HardwareMessage_FIELDLIST(X, a) \
|
#define HardwareMessage_FIELDLIST(X, a) \
|
||||||
@@ -84,7 +84,7 @@ extern const pb_msgdesc_t HardwareMessage_msg;
|
|||||||
#define HardwareMessage_fields &HardwareMessage_msg
|
#define HardwareMessage_fields &HardwareMessage_msg
|
||||||
|
|
||||||
/* Maximum encoded size of messages (where known) */
|
/* Maximum encoded size of messages (where known) */
|
||||||
#define HardwareMessage_size 24
|
#define HardwareMessage_size 24
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#include "rtttl.pb.h"
|
#include "./rtttl.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
#error Regenerate this file with the current version of nanopb generator.
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
#endif
|
#endif
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#ifndef PB_RTTTL_PB_H_INCLUDED
|
#ifndef PB_MESHTASTIC_MESHTASTIC_RTTTL_PB_H_INCLUDED
|
||||||
#define PB_RTTTL_PB_H_INCLUDED
|
#define PB_MESHTASTIC_MESHTASTIC_RTTTL_PB_H_INCLUDED
|
||||||
#include <pb.h>
|
#include <pb.h>
|
||||||
|
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
@@ -22,11 +22,11 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Initializer values for message structs */
|
/* Initializer values for message structs */
|
||||||
#define RTTTLConfig_init_default {""}
|
#define RTTTLConfig_init_default {""}
|
||||||
#define RTTTLConfig_init_zero {""}
|
#define RTTTLConfig_init_zero {""}
|
||||||
|
|
||||||
/* Field tags (for use in manual encoding/decoding) */
|
/* Field tags (for use in manual encoding/decoding) */
|
||||||
#define RTTTLConfig_ringtone_tag 1
|
#define RTTTLConfig_ringtone_tag 1
|
||||||
|
|
||||||
/* Struct field encoding specification for nanopb */
|
/* Struct field encoding specification for nanopb */
|
||||||
#define RTTTLConfig_FIELDLIST(X, a) \
|
#define RTTTLConfig_FIELDLIST(X, a) \
|
||||||
@@ -40,7 +40,7 @@ extern const pb_msgdesc_t RTTTLConfig_msg;
|
|||||||
#define RTTTLConfig_fields &RTTTLConfig_msg
|
#define RTTTLConfig_fields &RTTTLConfig_msg
|
||||||
|
|
||||||
/* Maximum encoded size of messages (where known) */
|
/* Maximum encoded size of messages (where known) */
|
||||||
#define RTTTLConfig_size 232
|
#define RTTTLConfig_size 232
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#include "storeforward.pb.h"
|
#include "./storeforward.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
#error Regenerate this file with the current version of nanopb generator.
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
#endif
|
#endif
|
||||||
+24
-24
@@ -1,8 +1,8 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#ifndef PB_STOREFORWARD_PB_H_INCLUDED
|
#ifndef PB_MESHTASTIC_MESHTASTIC_STOREFORWARD_PB_H_INCLUDED
|
||||||
#define PB_STOREFORWARD_PB_H_INCLUDED
|
#define PB_MESHTASTIC_MESHTASTIC_STOREFORWARD_PB_H_INCLUDED
|
||||||
#include <pb.h>
|
#include <pb.h>
|
||||||
|
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
@@ -120,35 +120,35 @@ extern "C" {
|
|||||||
|
|
||||||
|
|
||||||
/* Initializer values for message structs */
|
/* Initializer values for message structs */
|
||||||
#define StoreAndForward_init_default {_StoreAndForward_RequestResponse_MIN, 0, {StoreAndForward_Statistics_init_default}}
|
#define StoreAndForward_init_default {_StoreAndForward_RequestResponse_MIN, 0, {StoreAndForward_Statistics_init_default}}
|
||||||
#define StoreAndForward_Statistics_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0}
|
#define StoreAndForward_Statistics_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
#define StoreAndForward_History_init_default {0, 0, 0}
|
#define StoreAndForward_History_init_default {0, 0, 0}
|
||||||
#define StoreAndForward_Heartbeat_init_default {0, 0}
|
#define StoreAndForward_Heartbeat_init_default {0, 0}
|
||||||
#define StoreAndForward_init_zero {_StoreAndForward_RequestResponse_MIN, 0, {StoreAndForward_Statistics_init_zero}}
|
#define StoreAndForward_init_zero {_StoreAndForward_RequestResponse_MIN, 0, {StoreAndForward_Statistics_init_zero}}
|
||||||
#define StoreAndForward_Statistics_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0}
|
#define StoreAndForward_Statistics_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||||
#define StoreAndForward_History_init_zero {0, 0, 0}
|
#define StoreAndForward_History_init_zero {0, 0, 0}
|
||||||
#define StoreAndForward_Heartbeat_init_zero {0, 0}
|
#define StoreAndForward_Heartbeat_init_zero {0, 0}
|
||||||
|
|
||||||
/* Field tags (for use in manual encoding/decoding) */
|
/* Field tags (for use in manual encoding/decoding) */
|
||||||
#define StoreAndForward_Statistics_messages_total_tag 1
|
#define StoreAndForward_Statistics_messages_total_tag 1
|
||||||
#define StoreAndForward_Statistics_messages_saved_tag 2
|
#define StoreAndForward_Statistics_messages_saved_tag 2
|
||||||
#define StoreAndForward_Statistics_messages_max_tag 3
|
#define StoreAndForward_Statistics_messages_max_tag 3
|
||||||
#define StoreAndForward_Statistics_up_time_tag 4
|
#define StoreAndForward_Statistics_up_time_tag 4
|
||||||
#define StoreAndForward_Statistics_requests_tag 5
|
#define StoreAndForward_Statistics_requests_tag 5
|
||||||
#define StoreAndForward_Statistics_requests_history_tag 6
|
#define StoreAndForward_Statistics_requests_history_tag 6
|
||||||
#define StoreAndForward_Statistics_heartbeat_tag 7
|
#define StoreAndForward_Statistics_heartbeat_tag 7
|
||||||
#define StoreAndForward_Statistics_return_max_tag 8
|
#define StoreAndForward_Statistics_return_max_tag 8
|
||||||
#define StoreAndForward_Statistics_return_window_tag 9
|
#define StoreAndForward_Statistics_return_window_tag 9
|
||||||
#define StoreAndForward_History_history_messages_tag 1
|
#define StoreAndForward_History_history_messages_tag 1
|
||||||
#define StoreAndForward_History_window_tag 2
|
#define StoreAndForward_History_window_tag 2
|
||||||
#define StoreAndForward_History_last_request_tag 3
|
#define StoreAndForward_History_last_request_tag 3
|
||||||
#define StoreAndForward_Heartbeat_period_tag 1
|
#define StoreAndForward_Heartbeat_period_tag 1
|
||||||
#define StoreAndForward_Heartbeat_secondary_tag 2
|
#define StoreAndForward_Heartbeat_secondary_tag 2
|
||||||
#define StoreAndForward_rr_tag 1
|
#define StoreAndForward_rr_tag 1
|
||||||
#define StoreAndForward_stats_tag 2
|
#define StoreAndForward_stats_tag 2
|
||||||
#define StoreAndForward_history_tag 3
|
#define StoreAndForward_history_tag 3
|
||||||
#define StoreAndForward_heartbeat_tag 4
|
#define StoreAndForward_heartbeat_tag 4
|
||||||
#define StoreAndForward_empty_tag 5
|
#define StoreAndForward_empty_tag 5
|
||||||
|
|
||||||
/* Struct field encoding specification for nanopb */
|
/* Struct field encoding specification for nanopb */
|
||||||
#define StoreAndForward_FIELDLIST(X, a) \
|
#define StoreAndForward_FIELDLIST(X, a) \
|
||||||
@@ -201,10 +201,10 @@ extern const pb_msgdesc_t StoreAndForward_Heartbeat_msg;
|
|||||||
#define StoreAndForward_Heartbeat_fields &StoreAndForward_Heartbeat_msg
|
#define StoreAndForward_Heartbeat_fields &StoreAndForward_Heartbeat_msg
|
||||||
|
|
||||||
/* Maximum encoded size of messages (where known) */
|
/* Maximum encoded size of messages (where known) */
|
||||||
#define StoreAndForward_Heartbeat_size 12
|
#define StoreAndForward_Heartbeat_size 12
|
||||||
#define StoreAndForward_History_size 18
|
#define StoreAndForward_History_size 18
|
||||||
#define StoreAndForward_Statistics_size 50
|
#define StoreAndForward_Statistics_size 50
|
||||||
#define StoreAndForward_size 54
|
#define StoreAndForward_size 54
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#include "telemetry.pb.h"
|
#include "./telemetry.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
#error Regenerate this file with the current version of nanopb generator.
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
#endif
|
#endif
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#ifndef PB_TELEMETRY_PB_H_INCLUDED
|
#ifndef PB_MESHTASTIC_MESHTASTIC_TELEMETRY_PB_H_INCLUDED
|
||||||
#define PB_TELEMETRY_PB_H_INCLUDED
|
#define PB_MESHTASTIC_MESHTASTIC_TELEMETRY_PB_H_INCLUDED
|
||||||
#include <pb.h>
|
#include <pb.h>
|
||||||
|
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
@@ -101,27 +101,27 @@ extern "C" {
|
|||||||
|
|
||||||
|
|
||||||
/* Initializer values for message structs */
|
/* Initializer values for message structs */
|
||||||
#define DeviceMetrics_init_default {0, 0, 0, 0}
|
#define DeviceMetrics_init_default {0, 0, 0, 0}
|
||||||
#define EnvironmentMetrics_init_default {0, 0, 0, 0, 0, 0}
|
#define EnvironmentMetrics_init_default {0, 0, 0, 0, 0, 0}
|
||||||
#define Telemetry_init_default {0, 0, {DeviceMetrics_init_default}}
|
#define Telemetry_init_default {0, 0, {DeviceMetrics_init_default}}
|
||||||
#define DeviceMetrics_init_zero {0, 0, 0, 0}
|
#define DeviceMetrics_init_zero {0, 0, 0, 0}
|
||||||
#define EnvironmentMetrics_init_zero {0, 0, 0, 0, 0, 0}
|
#define EnvironmentMetrics_init_zero {0, 0, 0, 0, 0, 0}
|
||||||
#define Telemetry_init_zero {0, 0, {DeviceMetrics_init_zero}}
|
#define Telemetry_init_zero {0, 0, {DeviceMetrics_init_zero}}
|
||||||
|
|
||||||
/* Field tags (for use in manual encoding/decoding) */
|
/* Field tags (for use in manual encoding/decoding) */
|
||||||
#define DeviceMetrics_battery_level_tag 1
|
#define DeviceMetrics_battery_level_tag 1
|
||||||
#define DeviceMetrics_voltage_tag 2
|
#define DeviceMetrics_voltage_tag 2
|
||||||
#define DeviceMetrics_channel_utilization_tag 3
|
#define DeviceMetrics_channel_utilization_tag 3
|
||||||
#define DeviceMetrics_air_util_tx_tag 4
|
#define DeviceMetrics_air_util_tx_tag 4
|
||||||
#define EnvironmentMetrics_temperature_tag 1
|
#define EnvironmentMetrics_temperature_tag 1
|
||||||
#define EnvironmentMetrics_relative_humidity_tag 2
|
#define EnvironmentMetrics_relative_humidity_tag 2
|
||||||
#define EnvironmentMetrics_barometric_pressure_tag 3
|
#define EnvironmentMetrics_barometric_pressure_tag 3
|
||||||
#define EnvironmentMetrics_gas_resistance_tag 4
|
#define EnvironmentMetrics_gas_resistance_tag 4
|
||||||
#define EnvironmentMetrics_voltage_tag 5
|
#define EnvironmentMetrics_voltage_tag 5
|
||||||
#define EnvironmentMetrics_current_tag 6
|
#define EnvironmentMetrics_current_tag 6
|
||||||
#define Telemetry_time_tag 1
|
#define Telemetry_time_tag 1
|
||||||
#define Telemetry_device_metrics_tag 2
|
#define Telemetry_device_metrics_tag 2
|
||||||
#define Telemetry_environment_metrics_tag 3
|
#define Telemetry_environment_metrics_tag 3
|
||||||
|
|
||||||
/* Struct field encoding specification for nanopb */
|
/* Struct field encoding specification for nanopb */
|
||||||
#define DeviceMetrics_FIELDLIST(X, a) \
|
#define DeviceMetrics_FIELDLIST(X, a) \
|
||||||
@@ -161,9 +161,9 @@ extern const pb_msgdesc_t Telemetry_msg;
|
|||||||
#define Telemetry_fields &Telemetry_msg
|
#define Telemetry_fields &Telemetry_msg
|
||||||
|
|
||||||
/* Maximum encoded size of messages (where known) */
|
/* Maximum encoded size of messages (where known) */
|
||||||
#define DeviceMetrics_size 21
|
#define DeviceMetrics_size 21
|
||||||
#define EnvironmentMetrics_size 30
|
#define EnvironmentMetrics_size 30
|
||||||
#define Telemetry_size 37
|
#define Telemetry_size 37
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
/* Automatically generated nanopb constant definitions */
|
/* Automatically generated nanopb constant definitions */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#include "xmodem.pb.h"
|
#include "./xmodem.pb.h"
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
#error Regenerate this file with the current version of nanopb generator.
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
#endif
|
#endif
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
/* Automatically generated nanopb header */
|
/* Automatically generated nanopb header */
|
||||||
/* Generated by nanopb-0.4.7 */
|
/* Generated by nanopb-0.4.7 */
|
||||||
|
|
||||||
#ifndef PB_XMODEM_PB_H_INCLUDED
|
#ifndef PB_MESHTASTIC_MESHTASTIC_XMODEM_PB_H_INCLUDED
|
||||||
#define PB_XMODEM_PB_H_INCLUDED
|
#define PB_MESHTASTIC_MESHTASTIC_XMODEM_PB_H_INCLUDED
|
||||||
#include <pb.h>
|
#include <pb.h>
|
||||||
|
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
@@ -44,14 +44,14 @@ extern "C" {
|
|||||||
|
|
||||||
|
|
||||||
/* Initializer values for message structs */
|
/* Initializer values for message structs */
|
||||||
#define XModem_init_default {_XModem_Control_MIN, 0, 0, {0, {0}}}
|
#define XModem_init_default {_XModem_Control_MIN, 0, 0, {0, {0}}}
|
||||||
#define XModem_init_zero {_XModem_Control_MIN, 0, 0, {0, {0}}}
|
#define XModem_init_zero {_XModem_Control_MIN, 0, 0, {0, {0}}}
|
||||||
|
|
||||||
/* Field tags (for use in manual encoding/decoding) */
|
/* Field tags (for use in manual encoding/decoding) */
|
||||||
#define XModem_control_tag 1
|
#define XModem_control_tag 1
|
||||||
#define XModem_seq_tag 2
|
#define XModem_seq_tag 2
|
||||||
#define XModem_crc16_tag 3
|
#define XModem_crc16_tag 3
|
||||||
#define XModem_buffer_tag 4
|
#define XModem_buffer_tag 4
|
||||||
|
|
||||||
/* Struct field encoding specification for nanopb */
|
/* Struct field encoding specification for nanopb */
|
||||||
#define XModem_FIELDLIST(X, a) \
|
#define XModem_FIELDLIST(X, a) \
|
||||||
@@ -68,7 +68,7 @@ extern const pb_msgdesc_t XModem_msg;
|
|||||||
#define XModem_fields &XModem_msg
|
#define XModem_fields &XModem_msg
|
||||||
|
|
||||||
/* Maximum encoded size of messages (where known) */
|
/* Maximum encoded size of messages (where known) */
|
||||||
#define XModem_size 141
|
#define XModem_size 141
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "mesh/generated/mesh.pb.h"
|
#include "mesh/generated/meshtastic/admin.pb.h"
|
||||||
#include "mesh/generated/localonly.pb.h"
|
#include "mesh/generated/meshtastic/deviceonly.pb.h"
|
||||||
#include "mesh/generated/deviceonly.pb.h"
|
#include "mesh/generated/meshtastic/localonly.pb.h"
|
||||||
#include "mesh/generated/admin.pb.h"
|
#include "mesh/generated/meshtastic/mesh.pb.h"
|
||||||
|
|
||||||
// this file defines constants which come from mesh.options
|
// this file defines constants which come from mesh.options
|
||||||
|
|
||||||
@@ -11,8 +11,8 @@
|
|||||||
#define member_size(type, member) sizeof(((type *)0)->member)
|
#define member_size(type, member) sizeof(((type *)0)->member)
|
||||||
|
|
||||||
/// max number of packets which can be waiting for delivery to android - note, this value comes from mesh.options protobuf
|
/// max number of packets which can be waiting for delivery to android - note, this value comes from mesh.options protobuf
|
||||||
// FIXME - max_count is actually 32 but we save/load this as one long string of preencoded MeshPacket bytes - not a big array in RAM
|
// FIXME - max_count is actually 32 but we save/load this as one long string of preencoded MeshPacket bytes - not a big array in
|
||||||
// #define MAX_RX_TOPHONE (member_size(DeviceState, receive_queue) / member_size(DeviceState, receive_queue[0]))
|
// RAM #define MAX_RX_TOPHONE (member_size(DeviceState, receive_queue) / member_size(DeviceState, receive_queue[0]))
|
||||||
#define MAX_RX_TOPHONE 32
|
#define MAX_RX_TOPHONE 32
|
||||||
|
|
||||||
/// max number of nodes allowed in the mesh
|
/// max number of nodes allowed in the mesh
|
||||||
|
|||||||
+101
-100
@@ -113,7 +113,7 @@ bool AdminModule::handleReceivedProtobuf(const MeshPacket &mp, AdminMessage *r)
|
|||||||
if (BleOta::getOtaAppVersion().isEmpty()) {
|
if (BleOta::getOtaAppVersion().isEmpty()) {
|
||||||
LOG_INFO("No OTA firmware available, scheduling regular reboot in %d seconds\n", s);
|
LOG_INFO("No OTA firmware available, scheduling regular reboot in %d seconds\n", s);
|
||||||
screen->startRebootScreen();
|
screen->startRebootScreen();
|
||||||
}else{
|
} else {
|
||||||
screen->startFirmwareUpdateScreen();
|
screen->startFirmwareUpdateScreen();
|
||||||
BleOta::switchToOtaApp();
|
BleOta::switchToOtaApp();
|
||||||
LOG_INFO("Rebooting to OTA in %d seconds\n", s);
|
LOG_INFO("Rebooting to OTA in %d seconds\n", s);
|
||||||
@@ -141,7 +141,8 @@ bool AdminModule::handleReceivedProtobuf(const MeshPacket &mp, AdminMessage *r)
|
|||||||
nodeDB.factoryReset();
|
nodeDB.factoryReset();
|
||||||
reboot(DEFAULT_REBOOT_SECONDS);
|
reboot(DEFAULT_REBOOT_SECONDS);
|
||||||
break;
|
break;
|
||||||
} case AdminMessage_nodedb_reset_tag: {
|
}
|
||||||
|
case AdminMessage_nodedb_reset_tag: {
|
||||||
LOG_INFO("Initiating node-db reset\n");
|
LOG_INFO("Initiating node-db reset\n");
|
||||||
nodeDB.resetNodes();
|
nodeDB.resetNodes();
|
||||||
reboot(DEFAULT_REBOOT_SECONDS);
|
reboot(DEFAULT_REBOOT_SECONDS);
|
||||||
@@ -228,53 +229,51 @@ void AdminModule::handleSetConfig(const Config &c)
|
|||||||
bool isRegionUnset = (config.lora.region == Config_LoRaConfig_RegionCode_UNSET);
|
bool isRegionUnset = (config.lora.region == Config_LoRaConfig_RegionCode_UNSET);
|
||||||
|
|
||||||
switch (c.which_payload_variant) {
|
switch (c.which_payload_variant) {
|
||||||
case Config_device_tag:
|
case Config_device_tag:
|
||||||
LOG_INFO("Setting config: Device\n");
|
LOG_INFO("Setting config: Device\n");
|
||||||
config.has_device = true;
|
config.has_device = true;
|
||||||
config.device = c.payload_variant.device;
|
config.device = c.payload_variant.device;
|
||||||
// If we're setting router role for the first time, install its intervals
|
// If we're setting router role for the first time, install its intervals
|
||||||
if (!isRouter &&
|
if (!isRouter && c.payload_variant.device.role == Config_DeviceConfig_Role_ROUTER) {
|
||||||
c.payload_variant.device.role == Config_DeviceConfig_Role_ROUTER) {
|
nodeDB.initConfigIntervals();
|
||||||
nodeDB.initConfigIntervals();
|
nodeDB.initModuleConfigIntervals();
|
||||||
nodeDB.initModuleConfigIntervals();
|
}
|
||||||
}
|
break;
|
||||||
break;
|
case Config_position_tag:
|
||||||
case Config_position_tag:
|
LOG_INFO("Setting config: Position\n");
|
||||||
LOG_INFO("Setting config: Position\n");
|
config.has_position = true;
|
||||||
config.has_position = true;
|
config.position = c.payload_variant.position;
|
||||||
config.position = c.payload_variant.position;
|
// Save nodedb as well in case we got a fixed position packet
|
||||||
// Save nodedb as well in case we got a fixed position packet
|
saveChanges(SEGMENT_DEVICESTATE, false);
|
||||||
saveChanges(SEGMENT_DEVICESTATE, false);
|
break;
|
||||||
break;
|
case Config_power_tag:
|
||||||
case Config_power_tag:
|
LOG_INFO("Setting config: Power\n");
|
||||||
LOG_INFO("Setting config: Power\n");
|
config.has_power = true;
|
||||||
config.has_power = true;
|
config.power = c.payload_variant.power;
|
||||||
config.power = c.payload_variant.power;
|
break;
|
||||||
break;
|
case Config_network_tag:
|
||||||
case Config_network_tag:
|
LOG_INFO("Setting config: WiFi\n");
|
||||||
LOG_INFO("Setting config: WiFi\n");
|
config.has_network = true;
|
||||||
config.has_network = true;
|
config.network = c.payload_variant.network;
|
||||||
config.network = c.payload_variant.network;
|
break;
|
||||||
break;
|
case Config_display_tag:
|
||||||
case Config_display_tag:
|
LOG_INFO("Setting config: Display\n");
|
||||||
LOG_INFO("Setting config: Display\n");
|
config.has_display = true;
|
||||||
config.has_display = true;
|
config.display = c.payload_variant.display;
|
||||||
config.display = c.payload_variant.display;
|
break;
|
||||||
break;
|
case Config_lora_tag:
|
||||||
case Config_lora_tag:
|
LOG_INFO("Setting config: LoRa\n");
|
||||||
LOG_INFO("Setting config: LoRa\n");
|
config.has_lora = true;
|
||||||
config.has_lora = true;
|
config.lora = c.payload_variant.lora;
|
||||||
config.lora = c.payload_variant.lora;
|
if (isRegionUnset && config.lora.region > Config_LoRaConfig_RegionCode_UNSET) {
|
||||||
if (isRegionUnset &&
|
config.lora.tx_enabled = true;
|
||||||
config.lora.region > Config_LoRaConfig_RegionCode_UNSET) {
|
}
|
||||||
config.lora.tx_enabled = true;
|
break;
|
||||||
}
|
case Config_bluetooth_tag:
|
||||||
break;
|
LOG_INFO("Setting config: Bluetooth\n");
|
||||||
case Config_bluetooth_tag:
|
config.has_bluetooth = true;
|
||||||
LOG_INFO("Setting config: Bluetooth\n");
|
config.bluetooth = c.payload_variant.bluetooth;
|
||||||
config.has_bluetooth = true;
|
break;
|
||||||
config.bluetooth = c.payload_variant.bluetooth;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
saveChanges(SEGMENT_CONFIG);
|
saveChanges(SEGMENT_CONFIG);
|
||||||
@@ -283,51 +282,51 @@ void AdminModule::handleSetConfig(const Config &c)
|
|||||||
void AdminModule::handleSetModuleConfig(const ModuleConfig &c)
|
void AdminModule::handleSetModuleConfig(const ModuleConfig &c)
|
||||||
{
|
{
|
||||||
switch (c.which_payload_variant) {
|
switch (c.which_payload_variant) {
|
||||||
case ModuleConfig_mqtt_tag:
|
case ModuleConfig_mqtt_tag:
|
||||||
LOG_INFO("Setting module config: MQTT\n");
|
LOG_INFO("Setting module config: MQTT\n");
|
||||||
moduleConfig.has_mqtt = true;
|
moduleConfig.has_mqtt = true;
|
||||||
moduleConfig.mqtt = c.payload_variant.mqtt;
|
moduleConfig.mqtt = c.payload_variant.mqtt;
|
||||||
break;
|
break;
|
||||||
case ModuleConfig_serial_tag:
|
case ModuleConfig_serial_tag:
|
||||||
LOG_INFO("Setting module config: Serial\n");
|
LOG_INFO("Setting module config: Serial\n");
|
||||||
moduleConfig.has_serial = true;
|
moduleConfig.has_serial = true;
|
||||||
moduleConfig.serial = c.payload_variant.serial;
|
moduleConfig.serial = c.payload_variant.serial;
|
||||||
break;
|
break;
|
||||||
case ModuleConfig_external_notification_tag:
|
case ModuleConfig_external_notification_tag:
|
||||||
LOG_INFO("Setting module config: External Notification\n");
|
LOG_INFO("Setting module config: External Notification\n");
|
||||||
moduleConfig.has_external_notification = true;
|
moduleConfig.has_external_notification = true;
|
||||||
moduleConfig.external_notification = c.payload_variant.external_notification;
|
moduleConfig.external_notification = c.payload_variant.external_notification;
|
||||||
break;
|
break;
|
||||||
case ModuleConfig_store_forward_tag:
|
case ModuleConfig_store_forward_tag:
|
||||||
LOG_INFO("Setting module config: Store & Forward\n");
|
LOG_INFO("Setting module config: Store & Forward\n");
|
||||||
moduleConfig.has_store_forward = true;
|
moduleConfig.has_store_forward = true;
|
||||||
moduleConfig.store_forward = c.payload_variant.store_forward;
|
moduleConfig.store_forward = c.payload_variant.store_forward;
|
||||||
break;
|
break;
|
||||||
case ModuleConfig_range_test_tag:
|
case ModuleConfig_range_test_tag:
|
||||||
LOG_INFO("Setting module config: Range Test\n");
|
LOG_INFO("Setting module config: Range Test\n");
|
||||||
moduleConfig.has_range_test = true;
|
moduleConfig.has_range_test = true;
|
||||||
moduleConfig.range_test = c.payload_variant.range_test;
|
moduleConfig.range_test = c.payload_variant.range_test;
|
||||||
break;
|
break;
|
||||||
case ModuleConfig_telemetry_tag:
|
case ModuleConfig_telemetry_tag:
|
||||||
LOG_INFO("Setting module config: Telemetry\n");
|
LOG_INFO("Setting module config: Telemetry\n");
|
||||||
moduleConfig.has_telemetry = true;
|
moduleConfig.has_telemetry = true;
|
||||||
moduleConfig.telemetry = c.payload_variant.telemetry;
|
moduleConfig.telemetry = c.payload_variant.telemetry;
|
||||||
break;
|
break;
|
||||||
case ModuleConfig_canned_message_tag:
|
case ModuleConfig_canned_message_tag:
|
||||||
LOG_INFO("Setting module config: Canned Message\n");
|
LOG_INFO("Setting module config: Canned Message\n");
|
||||||
moduleConfig.has_canned_message = true;
|
moduleConfig.has_canned_message = true;
|
||||||
moduleConfig.canned_message = c.payload_variant.canned_message;
|
moduleConfig.canned_message = c.payload_variant.canned_message;
|
||||||
break;
|
break;
|
||||||
case ModuleConfig_audio_tag:
|
case ModuleConfig_audio_tag:
|
||||||
LOG_INFO("Setting module config: Audio\n");
|
LOG_INFO("Setting module config: Audio\n");
|
||||||
moduleConfig.has_audio = true;
|
moduleConfig.has_audio = true;
|
||||||
moduleConfig.audio = c.payload_variant.audio;
|
moduleConfig.audio = c.payload_variant.audio;
|
||||||
break;
|
break;
|
||||||
case ModuleConfig_remote_hardware_tag:
|
case ModuleConfig_remote_hardware_tag:
|
||||||
LOG_INFO("Setting module config: Remote Hardware\n");
|
LOG_INFO("Setting module config: Remote Hardware\n");
|
||||||
moduleConfig.has_remote_hardware = true;
|
moduleConfig.has_remote_hardware = true;
|
||||||
moduleConfig.remote_hardware = c.payload_variant.remote_hardware;
|
moduleConfig.remote_hardware = c.payload_variant.remote_hardware;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
saveChanges(SEGMENT_MODULECONFIG);
|
saveChanges(SEGMENT_MODULECONFIG);
|
||||||
@@ -381,7 +380,8 @@ void AdminModule::handleGetConfig(const MeshPacket &req, const uint32_t configTy
|
|||||||
LOG_INFO("Getting config: Network\n");
|
LOG_INFO("Getting config: Network\n");
|
||||||
res.get_config_response.which_payload_variant = Config_network_tag;
|
res.get_config_response.which_payload_variant = Config_network_tag;
|
||||||
res.get_config_response.payload_variant.network = config.network;
|
res.get_config_response.payload_variant.network = config.network;
|
||||||
writeSecret(res.get_config_response.payload_variant.network.wifi_psk, sizeof(res.get_config_response.payload_variant.network.wifi_psk), config.network.wifi_psk);
|
writeSecret(res.get_config_response.payload_variant.network.wifi_psk,
|
||||||
|
sizeof(res.get_config_response.payload_variant.network.wifi_psk), config.network.wifi_psk);
|
||||||
break;
|
break;
|
||||||
case AdminMessage_ConfigType_DISPLAY_CONFIG:
|
case AdminMessage_ConfigType_DISPLAY_CONFIG:
|
||||||
LOG_INFO("Getting config: Display\n");
|
LOG_INFO("Getting config: Display\n");
|
||||||
@@ -430,8 +430,7 @@ void AdminModule::handleGetModuleConfig(const MeshPacket &req, const uint32_t co
|
|||||||
case AdminMessage_ModuleConfigType_EXTNOTIF_CONFIG:
|
case AdminMessage_ModuleConfigType_EXTNOTIF_CONFIG:
|
||||||
LOG_INFO("Getting module config: External Notification\n");
|
LOG_INFO("Getting module config: External Notification\n");
|
||||||
res.get_module_config_response.which_payload_variant = ModuleConfig_external_notification_tag;
|
res.get_module_config_response.which_payload_variant = ModuleConfig_external_notification_tag;
|
||||||
res.get_module_config_response.payload_variant.external_notification =
|
res.get_module_config_response.payload_variant.external_notification = moduleConfig.external_notification;
|
||||||
moduleConfig.external_notification;
|
|
||||||
break;
|
break;
|
||||||
case AdminMessage_ModuleConfigType_STOREFORWARD_CONFIG:
|
case AdminMessage_ModuleConfigType_STOREFORWARD_CONFIG:
|
||||||
LOG_INFO("Getting module config: Store & Forward\n");
|
LOG_INFO("Getting module config: Store & Forward\n");
|
||||||
@@ -477,7 +476,8 @@ void AdminModule::handleGetModuleConfig(const MeshPacket &req, const uint32_t co
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdminModule::handleGetDeviceMetadata(const MeshPacket &req) {
|
void AdminModule::handleGetDeviceMetadata(const MeshPacket &req)
|
||||||
|
{
|
||||||
AdminMessage r = AdminMessage_init_default;
|
AdminMessage r = AdminMessage_init_default;
|
||||||
|
|
||||||
DeviceMetadata deviceMetadata;
|
DeviceMetadata deviceMetadata;
|
||||||
@@ -487,6 +487,8 @@ void AdminModule::handleGetDeviceMetadata(const MeshPacket &req) {
|
|||||||
deviceMetadata.hasBluetooth = HAS_BLUETOOTH;
|
deviceMetadata.hasBluetooth = HAS_BLUETOOTH;
|
||||||
deviceMetadata.hasWifi = HAS_WIFI;
|
deviceMetadata.hasWifi = HAS_WIFI;
|
||||||
deviceMetadata.hasEthernet = HAS_ETHERNET;
|
deviceMetadata.hasEthernet = HAS_ETHERNET;
|
||||||
|
deviceMetadata.role = config.device.role;
|
||||||
|
deviceMetadata.position_flags = config.position.position_flags;
|
||||||
|
|
||||||
r.get_device_metadata_response = deviceMetadata;
|
r.get_device_metadata_response = deviceMetadata;
|
||||||
r.which_payload_variant = AdminMessage_get_device_metadata_response_tag;
|
r.which_payload_variant = AdminMessage_get_device_metadata_response_tag;
|
||||||
@@ -519,8 +521,7 @@ void AdminModule::saveChanges(int saveWhat, bool shouldReboot)
|
|||||||
} else {
|
} else {
|
||||||
LOG_INFO("Delaying save of changes to disk until the open transaction is committed\n");
|
LOG_INFO("Delaying save of changes to disk until the open transaction is committed\n");
|
||||||
}
|
}
|
||||||
if (shouldReboot)
|
if (shouldReboot) {
|
||||||
{
|
|
||||||
reboot(DEFAULT_REBOOT_SECONDS);
|
reboot(DEFAULT_REBOOT_SECONDS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
#if HAS_SCREEN
|
#if HAS_SCREEN
|
||||||
#include "CannedMessageModule.h"
|
#include "CannedMessageModule.h"
|
||||||
#include "FSCommon.h"
|
#include "FSCommon.h"
|
||||||
#include "NodeDB.h"
|
|
||||||
#include "MeshService.h"
|
#include "MeshService.h"
|
||||||
|
#include "NodeDB.h"
|
||||||
#include "PowerFSM.h" // neede for button bypass
|
#include "PowerFSM.h" // neede for button bypass
|
||||||
#include "mesh/generated/cannedmessages.pb.h"
|
#include "mesh/generated/meshtastic/cannedmessages.pb.h"
|
||||||
|
|
||||||
#ifdef OLED_RU
|
#ifdef OLED_RU
|
||||||
#include "graphics/fonts/OLEDDisplayFontsRU.h"
|
#include "graphics/fonts/OLEDDisplayFontsRU.h"
|
||||||
@@ -152,7 +152,7 @@ int CannedMessageModule::handleInputEvent(const InputEvent *event)
|
|||||||
if ((event->inputEvent == static_cast<char>(ModuleConfig_CannedMessageConfig_InputEventChar_BACK)) ||
|
if ((event->inputEvent == static_cast<char>(ModuleConfig_CannedMessageConfig_InputEventChar_BACK)) ||
|
||||||
(event->inputEvent == static_cast<char>(ModuleConfig_CannedMessageConfig_InputEventChar_LEFT)) ||
|
(event->inputEvent == static_cast<char>(ModuleConfig_CannedMessageConfig_InputEventChar_LEFT)) ||
|
||||||
(event->inputEvent == static_cast<char>(ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT))) {
|
(event->inputEvent == static_cast<char>(ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT))) {
|
||||||
LOG_DEBUG("Canned message event (%x)\n",event->kbchar);
|
LOG_DEBUG("Canned message event (%x)\n", event->kbchar);
|
||||||
if (this->runState == CANNED_MESSAGE_RUN_STATE_FREETEXT) {
|
if (this->runState == CANNED_MESSAGE_RUN_STATE_FREETEXT) {
|
||||||
// pass the pressed key
|
// pass the pressed key
|
||||||
this->payload = event->kbchar;
|
this->payload = event->kbchar;
|
||||||
@@ -163,7 +163,8 @@ int CannedMessageModule::handleInputEvent(const InputEvent *event)
|
|||||||
if (event->inputEvent == static_cast<char>(ANYKEY)) {
|
if (event->inputEvent == static_cast<char>(ANYKEY)) {
|
||||||
LOG_DEBUG("Canned message event any key pressed\n");
|
LOG_DEBUG("Canned message event any key pressed\n");
|
||||||
// when inactive, this will switch to the freetext mode
|
// when inactive, this will switch to the freetext mode
|
||||||
if ((this->runState == CANNED_MESSAGE_RUN_STATE_INACTIVE) || (this->runState == CANNED_MESSAGE_RUN_STATE_ACTIVE) || (this->runState == CANNED_MESSAGE_RUN_STATE_DISABLED)) {
|
if ((this->runState == CANNED_MESSAGE_RUN_STATE_INACTIVE) || (this->runState == CANNED_MESSAGE_RUN_STATE_ACTIVE) ||
|
||||||
|
(this->runState == CANNED_MESSAGE_RUN_STATE_DISABLED)) {
|
||||||
this->runState = CANNED_MESSAGE_RUN_STATE_FREETEXT;
|
this->runState = CANNED_MESSAGE_RUN_STATE_FREETEXT;
|
||||||
}
|
}
|
||||||
// pass the pressed key
|
// pass the pressed key
|
||||||
@@ -176,7 +177,7 @@ int CannedMessageModule::handleInputEvent(const InputEvent *event)
|
|||||||
// this will send the text immediately on matrix press
|
// this will send the text immediately on matrix press
|
||||||
this->runState = CANNED_MESSAGE_RUN_STATE_ACTION_SELECT;
|
this->runState = CANNED_MESSAGE_RUN_STATE_ACTION_SELECT;
|
||||||
this->payload = MATRIXKEY;
|
this->payload = MATRIXKEY;
|
||||||
this->currentMessageIndex = event->kbchar -1;
|
this->currentMessageIndex = event->kbchar - 1;
|
||||||
this->lastTouchMillis = millis();
|
this->lastTouchMillis = millis();
|
||||||
validEvent = true;
|
validEvent = true;
|
||||||
}
|
}
|
||||||
@@ -224,7 +225,8 @@ int32_t CannedMessageModule::runOnce()
|
|||||||
this->cursor = 0;
|
this->cursor = 0;
|
||||||
this->destSelect = false;
|
this->destSelect = false;
|
||||||
this->notifyObservers(&e);
|
this->notifyObservers(&e);
|
||||||
} else if (((this->runState == CANNED_MESSAGE_RUN_STATE_ACTIVE) || (this->runState == CANNED_MESSAGE_RUN_STATE_FREETEXT)) && ((millis() - this->lastTouchMillis) > INACTIVATE_AFTER_MS)) {
|
} else if (((this->runState == CANNED_MESSAGE_RUN_STATE_ACTIVE) || (this->runState == CANNED_MESSAGE_RUN_STATE_FREETEXT)) &&
|
||||||
|
((millis() - this->lastTouchMillis) > INACTIVATE_AFTER_MS)) {
|
||||||
// Reset module
|
// Reset module
|
||||||
LOG_DEBUG("Reset due to lack of activity.\n");
|
LOG_DEBUG("Reset due to lack of activity.\n");
|
||||||
e.frameChanged = true;
|
e.frameChanged = true;
|
||||||
@@ -245,7 +247,7 @@ int32_t CannedMessageModule::runOnce()
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ((this->messagesCount > this->currentMessageIndex) && (strlen(this->messages[this->currentMessageIndex]) > 0)) {
|
if ((this->messagesCount > this->currentMessageIndex) && (strlen(this->messages[this->currentMessageIndex]) > 0)) {
|
||||||
if(strcmp (this->messages[this->currentMessageIndex], "~") == 0) {
|
if (strcmp(this->messages[this->currentMessageIndex], "~") == 0) {
|
||||||
powerFSM.trigger(EVENT_PRESS);
|
powerFSM.trigger(EVENT_PRESS);
|
||||||
return INT32_MAX;
|
return INT32_MAX;
|
||||||
} else {
|
} else {
|
||||||
@@ -264,7 +266,7 @@ int32_t CannedMessageModule::runOnce()
|
|||||||
this->destSelect = false;
|
this->destSelect = false;
|
||||||
this->notifyObservers(&e);
|
this->notifyObservers(&e);
|
||||||
return 2000;
|
return 2000;
|
||||||
} else if ((this->runState != CANNED_MESSAGE_RUN_STATE_FREETEXT) && (this->currentMessageIndex == -1)) {
|
} else if ((this->runState != CANNED_MESSAGE_RUN_STATE_FREETEXT) && (this->currentMessageIndex == -1)) {
|
||||||
this->currentMessageIndex = 0;
|
this->currentMessageIndex = 0;
|
||||||
LOG_DEBUG("First touch (%d):%s\n", this->currentMessageIndex, this->getCurrentMessage());
|
LOG_DEBUG("First touch (%d):%s\n", this->currentMessageIndex, this->getCurrentMessage());
|
||||||
e.frameChanged = true;
|
e.frameChanged = true;
|
||||||
@@ -290,79 +292,79 @@ int32_t CannedMessageModule::runOnce()
|
|||||||
} else if (this->runState == CANNED_MESSAGE_RUN_STATE_FREETEXT) {
|
} else if (this->runState == CANNED_MESSAGE_RUN_STATE_FREETEXT) {
|
||||||
e.frameChanged = true;
|
e.frameChanged = true;
|
||||||
switch (this->payload) {
|
switch (this->payload) {
|
||||||
case 0xb4: // left
|
case 0xb4: // left
|
||||||
if (this->destSelect){
|
if (this->destSelect) {
|
||||||
size_t numNodes = nodeDB.getNumNodes();
|
size_t numNodes = nodeDB.getNumNodes();
|
||||||
if(this->dest == NODENUM_BROADCAST) {
|
if (this->dest == NODENUM_BROADCAST) {
|
||||||
this->dest = nodeDB.getNodeNum();
|
this->dest = nodeDB.getNodeNum();
|
||||||
}
|
}
|
||||||
for (unsigned int i = 0; i < numNodes; i++) {
|
for (unsigned int i = 0; i < numNodes; i++) {
|
||||||
if (nodeDB.getNodeByIndex(i)->num == this->dest) {
|
if (nodeDB.getNodeByIndex(i)->num == this->dest) {
|
||||||
this->dest = (i > 0) ? nodeDB.getNodeByIndex(i-1)->num : nodeDB.getNodeByIndex(numNodes-1)->num;
|
this->dest = (i > 0) ? nodeDB.getNodeByIndex(i - 1)->num : nodeDB.getNodeByIndex(numNodes - 1)->num;
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
|
||||||
if(this->dest == nodeDB.getNodeNum()) {
|
|
||||||
this->dest = NODENUM_BROADCAST;
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
if (this->cursor > 0) {
|
|
||||||
this->cursor--;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
if (this->dest == nodeDB.getNodeNum()) {
|
||||||
case 0xb7: // right
|
this->dest = NODENUM_BROADCAST;
|
||||||
if (this->destSelect){
|
|
||||||
size_t numNodes = nodeDB.getNumNodes();
|
|
||||||
if(this->dest == NODENUM_BROADCAST) {
|
|
||||||
this->dest = nodeDB.getNodeNum();
|
|
||||||
}
|
|
||||||
for (unsigned int i = 0; i < numNodes; i++) {
|
|
||||||
if (nodeDB.getNodeByIndex(i)->num == this->dest) {
|
|
||||||
this->dest = (i < numNodes-1) ? nodeDB.getNodeByIndex(i+1)->num : nodeDB.getNodeByIndex(0)->num;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(this->dest == nodeDB.getNodeNum()) {
|
|
||||||
this->dest = NODENUM_BROADCAST;
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
if (this->cursor < this->freetext.length()) {
|
|
||||||
this->cursor++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
} else {
|
||||||
case 0x08: // backspace
|
if (this->cursor > 0) {
|
||||||
if (this->freetext.length() > 0) {
|
|
||||||
if(this->cursor == this->freetext.length()) {
|
|
||||||
this->freetext = this->freetext.substring(0, this->freetext.length() - 1);
|
|
||||||
} else {
|
|
||||||
this->freetext = this->freetext.substring(0, this->cursor - 1) + this->freetext.substring(this->cursor, this->freetext.length());
|
|
||||||
}
|
|
||||||
this->cursor--;
|
this->cursor--;
|
||||||
}
|
}
|
||||||
break;
|
}
|
||||||
case 0x09: // tab
|
break;
|
||||||
if(this->destSelect) {
|
case 0xb7: // right
|
||||||
this->destSelect = false;
|
if (this->destSelect) {
|
||||||
|
size_t numNodes = nodeDB.getNumNodes();
|
||||||
|
if (this->dest == NODENUM_BROADCAST) {
|
||||||
|
this->dest = nodeDB.getNodeNum();
|
||||||
|
}
|
||||||
|
for (unsigned int i = 0; i < numNodes; i++) {
|
||||||
|
if (nodeDB.getNodeByIndex(i)->num == this->dest) {
|
||||||
|
this->dest = (i < numNodes - 1) ? nodeDB.getNodeByIndex(i + 1)->num : nodeDB.getNodeByIndex(0)->num;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this->dest == nodeDB.getNodeNum()) {
|
||||||
|
this->dest = NODENUM_BROADCAST;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (this->cursor < this->freetext.length()) {
|
||||||
|
this->cursor++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 0x08: // backspace
|
||||||
|
if (this->freetext.length() > 0) {
|
||||||
|
if (this->cursor == this->freetext.length()) {
|
||||||
|
this->freetext = this->freetext.substring(0, this->freetext.length() - 1);
|
||||||
} else {
|
} else {
|
||||||
this->destSelect = true;
|
this->freetext = this->freetext.substring(0, this->cursor - 1) +
|
||||||
|
this->freetext.substring(this->cursor, this->freetext.length());
|
||||||
}
|
}
|
||||||
break;
|
this->cursor--;
|
||||||
default:
|
}
|
||||||
if(this->cursor == this->freetext.length()) {
|
break;
|
||||||
this->freetext += this->payload;
|
case 0x09: // tab
|
||||||
} else {
|
if (this->destSelect) {
|
||||||
this->freetext = this->freetext.substring(0, this->cursor)
|
this->destSelect = false;
|
||||||
+ this->payload
|
} else {
|
||||||
+ this->freetext.substring(this->cursor);
|
this->destSelect = true;
|
||||||
}
|
}
|
||||||
this->cursor += 1;
|
break;
|
||||||
if (this->freetext.length() > Constants_DATA_PAYLOAD_LEN) {
|
default:
|
||||||
this->cursor = Constants_DATA_PAYLOAD_LEN;
|
if (this->cursor == this->freetext.length()) {
|
||||||
this->freetext = this->freetext.substring(0, Constants_DATA_PAYLOAD_LEN);
|
this->freetext += this->payload;
|
||||||
}
|
} else {
|
||||||
break;
|
this->freetext =
|
||||||
|
this->freetext.substring(0, this->cursor) + this->payload + this->freetext.substring(this->cursor);
|
||||||
|
}
|
||||||
|
this->cursor += 1;
|
||||||
|
if (this->freetext.length() > Constants_DATA_PAYLOAD_LEN) {
|
||||||
|
this->cursor = Constants_DATA_PAYLOAD_LEN;
|
||||||
|
this->freetext = this->freetext.substring(0, Constants_DATA_PAYLOAD_LEN);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
this->lastTouchMillis = millis();
|
this->lastTouchMillis = millis();
|
||||||
@@ -391,14 +393,15 @@ const char *CannedMessageModule::getNextMessage()
|
|||||||
{
|
{
|
||||||
return this->messages[this->getNextIndex()];
|
return this->messages[this->getNextIndex()];
|
||||||
}
|
}
|
||||||
const char* CannedMessageModule::getNodeName(NodeNum node) {
|
const char *CannedMessageModule::getNodeName(NodeNum node)
|
||||||
if (node == NODENUM_BROADCAST){
|
{
|
||||||
|
if (node == NODENUM_BROADCAST) {
|
||||||
return "Broadcast";
|
return "Broadcast";
|
||||||
}else{
|
} else {
|
||||||
NodeInfo *info = nodeDB.getNode(node);
|
NodeInfo *info = nodeDB.getNode(node);
|
||||||
if(info != NULL) {
|
if (info != NULL) {
|
||||||
return info->user.long_name;
|
return info->user.long_name;
|
||||||
}else{
|
} else {
|
||||||
return "Unknown";
|
return "Unknown";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -444,7 +447,7 @@ void CannedMessageModule::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *st
|
|||||||
display->setTextAlignment(TEXT_ALIGN_LEFT);
|
display->setTextAlignment(TEXT_ALIGN_LEFT);
|
||||||
display->setFont(FONT_SMALL);
|
display->setFont(FONT_SMALL);
|
||||||
display->drawString(10 + x, 0 + y + FONT_HEIGHT_SMALL, "Canned Message\nModule disabled.");
|
display->drawString(10 + x, 0 + y + FONT_HEIGHT_SMALL, "Canned Message\nModule disabled.");
|
||||||
}else if (cannedMessageModule->runState == CANNED_MESSAGE_RUN_STATE_FREETEXT) {
|
} else if (cannedMessageModule->runState == CANNED_MESSAGE_RUN_STATE_FREETEXT) {
|
||||||
display->setTextAlignment(TEXT_ALIGN_LEFT);
|
display->setTextAlignment(TEXT_ALIGN_LEFT);
|
||||||
display->setFont(FONT_SMALL);
|
display->setFont(FONT_SMALL);
|
||||||
if (this->destSelect) {
|
if (this->destSelect) {
|
||||||
@@ -460,7 +463,9 @@ void CannedMessageModule::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *st
|
|||||||
display->drawString(x + display->getWidth() - display->getStringWidth(buffer) - 1, y + 0, buffer);
|
display->drawString(x + display->getWidth() - display->getStringWidth(buffer) - 1, y + 0, buffer);
|
||||||
}
|
}
|
||||||
display->setColor(WHITE);
|
display->setColor(WHITE);
|
||||||
display->drawStringMaxWidth(0 + x, 0 + y + FONT_HEIGHT_SMALL, x + display->getWidth(), cannedMessageModule->drawWithCursor(cannedMessageModule->freetext, cannedMessageModule->cursor));
|
display->drawStringMaxWidth(
|
||||||
|
0 + x, 0 + y + FONT_HEIGHT_SMALL, x + display->getWidth(),
|
||||||
|
cannedMessageModule->drawWithCursor(cannedMessageModule->freetext, cannedMessageModule->cursor));
|
||||||
} else {
|
} else {
|
||||||
if (this->messagesCount > 0) {
|
if (this->messagesCount > 0) {
|
||||||
display->setTextAlignment(TEXT_ALIGN_LEFT);
|
display->setTextAlignment(TEXT_ALIGN_LEFT);
|
||||||
@@ -479,7 +484,7 @@ void CannedMessageModule::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *st
|
|||||||
void CannedMessageModule::loadProtoForModule()
|
void CannedMessageModule::loadProtoForModule()
|
||||||
{
|
{
|
||||||
if (!nodeDB.loadProto(cannedMessagesConfigFile, CannedMessageModuleConfig_size, sizeof(CannedMessageModuleConfig),
|
if (!nodeDB.loadProto(cannedMessagesConfigFile, CannedMessageModuleConfig_size, sizeof(CannedMessageModuleConfig),
|
||||||
&CannedMessageModuleConfig_msg, &cannedMessageModuleConfig)) {
|
&CannedMessageModuleConfig_msg, &cannedMessageModuleConfig)) {
|
||||||
installDefaultCannedMessageModuleConfig();
|
installDefaultCannedMessageModuleConfig();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -498,8 +503,8 @@ bool CannedMessageModule::saveProtoForModule()
|
|||||||
FS.mkdir("/prefs");
|
FS.mkdir("/prefs");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
okay &= nodeDB.saveProto(cannedMessagesConfigFile, CannedMessageModuleConfig_size,
|
okay &= nodeDB.saveProto(cannedMessagesConfigFile, CannedMessageModuleConfig_size, &CannedMessageModuleConfig_msg,
|
||||||
&CannedMessageModuleConfig_msg, &cannedMessageModuleConfig);
|
&cannedMessageModuleConfig);
|
||||||
|
|
||||||
return okay;
|
return okay;
|
||||||
}
|
}
|
||||||
@@ -549,13 +554,13 @@ AdminMessageHandleResult CannedMessageModule::handleAdminMessageForModule(const
|
|||||||
void CannedMessageModule::handleGetCannedMessageModuleMessages(const MeshPacket &req, AdminMessage *response)
|
void CannedMessageModule::handleGetCannedMessageModuleMessages(const MeshPacket &req, AdminMessage *response)
|
||||||
{
|
{
|
||||||
LOG_DEBUG("*** handleGetCannedMessageModuleMessages\n");
|
LOG_DEBUG("*** handleGetCannedMessageModuleMessages\n");
|
||||||
if(req.decoded.want_response) {
|
if (req.decoded.want_response) {
|
||||||
response->which_payload_variant = AdminMessage_get_canned_message_module_messages_response_tag;
|
response->which_payload_variant = AdminMessage_get_canned_message_module_messages_response_tag;
|
||||||
strncpy(response->get_canned_message_module_messages_response, cannedMessageModuleConfig.messages, sizeof(response->get_canned_message_module_messages_response));
|
strncpy(response->get_canned_message_module_messages_response, cannedMessageModuleConfig.messages,
|
||||||
|
sizeof(response->get_canned_message_module_messages_response));
|
||||||
} // Don't send anything if not instructed to. Better than asserting.
|
} // Don't send anything if not instructed to. Better than asserting.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CannedMessageModule::handleSetCannedMessageModuleMessages(const char *from_msg)
|
void CannedMessageModule::handleSetCannedMessageModuleMessages(const char *from_msg)
|
||||||
{
|
{
|
||||||
int changed = 0;
|
int changed = 0;
|
||||||
@@ -573,9 +578,7 @@ void CannedMessageModule::handleSetCannedMessageModuleMessages(const char *from_
|
|||||||
|
|
||||||
String CannedMessageModule::drawWithCursor(String text, int cursor)
|
String CannedMessageModule::drawWithCursor(String text, int cursor)
|
||||||
{
|
{
|
||||||
String result = text.substring(0, cursor)
|
String result = text.substring(0, cursor) + "_" + text.substring(cursor);
|
||||||
+ "_"
|
|
||||||
+ text.substring(cursor);
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
#include "Router.h"
|
#include "Router.h"
|
||||||
#include "buzz/buzz.h"
|
#include "buzz/buzz.h"
|
||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
#include "mesh/generated/rtttl.pb.h"
|
#include "mesh/generated/meshtastic/rtttl.pb.h"
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
#ifndef PIN_BUZZER
|
#ifndef PIN_BUZZER
|
||||||
@@ -58,19 +58,19 @@ int32_t ExternalNotificationModule::runOnce()
|
|||||||
|
|
||||||
// If the output is turned on, turn it back off after the given period of time.
|
// If the output is turned on, turn it back off after the given period of time.
|
||||||
if (isNagging) {
|
if (isNagging) {
|
||||||
if (externalTurnedOn[0] + (moduleConfig.external_notification.output_ms
|
if (externalTurnedOn[0] + (moduleConfig.external_notification.output_ms ? moduleConfig.external_notification.output_ms
|
||||||
? moduleConfig.external_notification.output_ms
|
: EXT_NOTIFICATION_MODULE_OUTPUT_MS) <
|
||||||
: EXT_NOTIFICATION_MODULE_OUTPUT_MS) < millis()) {
|
millis()) {
|
||||||
getExternal(0) ? setExternalOff(0) : setExternalOn(0);
|
getExternal(0) ? setExternalOff(0) : setExternalOn(0);
|
||||||
}
|
}
|
||||||
if (externalTurnedOn[1] + (moduleConfig.external_notification.output_ms
|
if (externalTurnedOn[1] + (moduleConfig.external_notification.output_ms ? moduleConfig.external_notification.output_ms
|
||||||
? moduleConfig.external_notification.output_ms
|
: EXT_NOTIFICATION_MODULE_OUTPUT_MS) <
|
||||||
: EXT_NOTIFICATION_MODULE_OUTPUT_MS) < millis()) {
|
millis()) {
|
||||||
getExternal(1) ? setExternalOff(1) : setExternalOn(1);
|
getExternal(1) ? setExternalOff(1) : setExternalOn(1);
|
||||||
}
|
}
|
||||||
if (externalTurnedOn[2] + (moduleConfig.external_notification.output_ms
|
if (externalTurnedOn[2] + (moduleConfig.external_notification.output_ms ? moduleConfig.external_notification.output_ms
|
||||||
? moduleConfig.external_notification.output_ms
|
: EXT_NOTIFICATION_MODULE_OUTPUT_MS) <
|
||||||
: EXT_NOTIFICATION_MODULE_OUTPUT_MS) < millis()) {
|
millis()) {
|
||||||
getExternal(2) ? setExternalOff(2) : setExternalOn(2);
|
getExternal(2) ? setExternalOff(2) : setExternalOn(2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -93,18 +93,18 @@ void ExternalNotificationModule::setExternalOn(uint8_t index)
|
|||||||
externalCurrentState[index] = 1;
|
externalCurrentState[index] = 1;
|
||||||
externalTurnedOn[index] = millis();
|
externalTurnedOn[index] = millis();
|
||||||
|
|
||||||
switch(index) {
|
switch (index) {
|
||||||
case 1:
|
case 1:
|
||||||
if(moduleConfig.external_notification.output_vibra)
|
if (moduleConfig.external_notification.output_vibra)
|
||||||
digitalWrite(moduleConfig.external_notification.output_vibra, true);
|
digitalWrite(moduleConfig.external_notification.output_vibra, true);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if(moduleConfig.external_notification.output_buzzer)
|
if (moduleConfig.external_notification.output_buzzer)
|
||||||
digitalWrite(moduleConfig.external_notification.output_buzzer, true);
|
digitalWrite(moduleConfig.external_notification.output_buzzer, true);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
digitalWrite(output, (moduleConfig.external_notification.active ? true : false));
|
digitalWrite(output, (moduleConfig.external_notification.active ? true : false));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,18 +113,18 @@ void ExternalNotificationModule::setExternalOff(uint8_t index)
|
|||||||
externalCurrentState[index] = 0;
|
externalCurrentState[index] = 0;
|
||||||
externalTurnedOn[index] = millis();
|
externalTurnedOn[index] = millis();
|
||||||
|
|
||||||
switch(index) {
|
switch (index) {
|
||||||
case 1:
|
case 1:
|
||||||
if(moduleConfig.external_notification.output_vibra)
|
if (moduleConfig.external_notification.output_vibra)
|
||||||
digitalWrite(moduleConfig.external_notification.output_vibra, false);
|
digitalWrite(moduleConfig.external_notification.output_vibra, false);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if(moduleConfig.external_notification.output_buzzer)
|
if (moduleConfig.external_notification.output_buzzer)
|
||||||
digitalWrite(moduleConfig.external_notification.output_buzzer, false);
|
digitalWrite(moduleConfig.external_notification.output_buzzer, false);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
digitalWrite(output, (moduleConfig.external_notification.active ? false : true));
|
digitalWrite(output, (moduleConfig.external_notification.active ? false : true));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -133,7 +133,8 @@ bool ExternalNotificationModule::getExternal(uint8_t index)
|
|||||||
return externalCurrentState[index];
|
return externalCurrentState[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExternalNotificationModule::stopNow() {
|
void ExternalNotificationModule::stopNow()
|
||||||
|
{
|
||||||
rtttl::stop();
|
rtttl::stop();
|
||||||
nagCycleCutoff = 1; // small value
|
nagCycleCutoff = 1; // small value
|
||||||
isNagging = false;
|
isNagging = false;
|
||||||
@@ -165,36 +166,35 @@ ExternalNotificationModule::ExternalNotificationModule()
|
|||||||
if (moduleConfig.external_notification.enabled) {
|
if (moduleConfig.external_notification.enabled) {
|
||||||
if (!nodeDB.loadProto(rtttlConfigFile, RTTTLConfig_size, sizeof(RTTTLConfig), &RTTTLConfig_msg, &rtttlConfig)) {
|
if (!nodeDB.loadProto(rtttlConfigFile, RTTTLConfig_size, sizeof(RTTTLConfig), &RTTTLConfig_msg, &rtttlConfig)) {
|
||||||
memset(rtttlConfig.ringtone, 0, sizeof(rtttlConfig.ringtone));
|
memset(rtttlConfig.ringtone, 0, sizeof(rtttlConfig.ringtone));
|
||||||
strncpy(rtttlConfig.ringtone, "a:d=8,o=5,b=125:4d#6,a#,2d#6,16p,g#,4a#,4d#.,p,16g,16a#,d#6,a#,f6,2d#6,16p,c#.6,16c6,16a#,g#.,2a#", sizeof(rtttlConfig.ringtone));
|
strncpy(rtttlConfig.ringtone,
|
||||||
|
"a:d=8,o=5,b=125:4d#6,a#,2d#6,16p,g#,4a#,4d#.,p,16g,16a#,d#6,a#,f6,2d#6,16p,c#.6,16c6,16a#,g#.,2a#",
|
||||||
|
sizeof(rtttlConfig.ringtone));
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_INFO("Initializing External Notification Module\n");
|
LOG_INFO("Initializing External Notification Module\n");
|
||||||
|
|
||||||
output = moduleConfig.external_notification.output
|
output = moduleConfig.external_notification.output ? moduleConfig.external_notification.output
|
||||||
? moduleConfig.external_notification.output
|
: EXT_NOTIFICATION_MODULE_OUTPUT;
|
||||||
: EXT_NOTIFICATION_MODULE_OUTPUT;
|
|
||||||
|
|
||||||
// Set the direction of a pin
|
// Set the direction of a pin
|
||||||
LOG_INFO("Using Pin %i in digital mode\n", output);
|
LOG_INFO("Using Pin %i in digital mode\n", output);
|
||||||
pinMode(output, OUTPUT);
|
pinMode(output, OUTPUT);
|
||||||
setExternalOff(0);
|
setExternalOff(0);
|
||||||
externalTurnedOn[0] = 0;
|
externalTurnedOn[0] = 0;
|
||||||
if(moduleConfig.external_notification.output_vibra) {
|
if (moduleConfig.external_notification.output_vibra) {
|
||||||
LOG_INFO("Using Pin %i for vibra motor\n", moduleConfig.external_notification.output_vibra);
|
LOG_INFO("Using Pin %i for vibra motor\n", moduleConfig.external_notification.output_vibra);
|
||||||
pinMode(moduleConfig.external_notification.output_vibra, OUTPUT);
|
pinMode(moduleConfig.external_notification.output_vibra, OUTPUT);
|
||||||
setExternalOff(1);
|
setExternalOff(1);
|
||||||
externalTurnedOn[1] = 0;
|
externalTurnedOn[1] = 0;
|
||||||
}
|
}
|
||||||
if(moduleConfig.external_notification.output_buzzer) {
|
if (moduleConfig.external_notification.output_buzzer) {
|
||||||
if (!moduleConfig.external_notification.use_pwm) {
|
if (!moduleConfig.external_notification.use_pwm) {
|
||||||
LOG_INFO("Using Pin %i for buzzer\n", moduleConfig.external_notification.output_buzzer);
|
LOG_INFO("Using Pin %i for buzzer\n", moduleConfig.external_notification.output_buzzer);
|
||||||
pinMode(moduleConfig.external_notification.output_buzzer, OUTPUT);
|
pinMode(moduleConfig.external_notification.output_buzzer, OUTPUT);
|
||||||
setExternalOff(2);
|
setExternalOff(2);
|
||||||
externalTurnedOn[2] = 0;
|
externalTurnedOn[2] = 0;
|
||||||
} else {
|
} else {
|
||||||
config.device.buzzer_gpio = config.device.buzzer_gpio
|
config.device.buzzer_gpio = config.device.buzzer_gpio ? config.device.buzzer_gpio : PIN_BUZZER;
|
||||||
? config.device.buzzer_gpio
|
|
||||||
: PIN_BUZZER;
|
|
||||||
// in PWM Mode we force the buzzer pin if it is set
|
// in PWM Mode we force the buzzer pin if it is set
|
||||||
LOG_INFO("Using Pin %i in PWM mode\n", config.device.buzzer_gpio);
|
LOG_INFO("Using Pin %i in PWM mode\n", config.device.buzzer_gpio);
|
||||||
}
|
}
|
||||||
@@ -274,7 +274,6 @@ ProcessMessage ExternalNotificationModule::handleReceived(const MeshPacket &mp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (moduleConfig.external_notification.alert_message_vibra) {
|
if (moduleConfig.external_notification.alert_message_vibra) {
|
||||||
LOG_INFO("externalNotificationModule - Notification Module (Vibra)\n");
|
LOG_INFO("externalNotificationModule - Notification Module (Vibra)\n");
|
||||||
isNagging = true;
|
isNagging = true;
|
||||||
@@ -320,7 +319,8 @@ ProcessMessage ExternalNotificationModule::handleReceived(const MeshPacket &mp)
|
|||||||
* @return AdminMessageHandleResult HANDLED if message was handled
|
* @return AdminMessageHandleResult HANDLED if message was handled
|
||||||
* HANDLED_WITH_RESULT if a result is also prepared.
|
* HANDLED_WITH_RESULT if a result is also prepared.
|
||||||
*/
|
*/
|
||||||
AdminMessageHandleResult ExternalNotificationModule::handleAdminMessageForModule(const MeshPacket &mp, AdminMessage *request, AdminMessage *response)
|
AdminMessageHandleResult ExternalNotificationModule::handleAdminMessageForModule(const MeshPacket &mp, AdminMessage *request,
|
||||||
|
AdminMessage *response)
|
||||||
{
|
{
|
||||||
AdminMessageHandleResult result;
|
AdminMessageHandleResult result;
|
||||||
|
|
||||||
@@ -347,13 +347,12 @@ AdminMessageHandleResult ExternalNotificationModule::handleAdminMessageForModule
|
|||||||
void ExternalNotificationModule::handleGetRingtone(const MeshPacket &req, AdminMessage *response)
|
void ExternalNotificationModule::handleGetRingtone(const MeshPacket &req, AdminMessage *response)
|
||||||
{
|
{
|
||||||
LOG_INFO("*** handleGetRingtone\n");
|
LOG_INFO("*** handleGetRingtone\n");
|
||||||
if(req.decoded.want_response) {
|
if (req.decoded.want_response) {
|
||||||
response->which_payload_variant = AdminMessage_get_ringtone_response_tag;
|
response->which_payload_variant = AdminMessage_get_ringtone_response_tag;
|
||||||
strncpy(response->get_ringtone_response, rtttlConfig.ringtone, sizeof(response->get_ringtone_response));
|
strncpy(response->get_ringtone_response, rtttlConfig.ringtone, sizeof(response->get_ringtone_response));
|
||||||
} // Don't send anything if not instructed to. Better than asserting.
|
} // Don't send anything if not instructed to. Better than asserting.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ExternalNotificationModule::handleSetRingtone(const char *from_msg)
|
void ExternalNotificationModule::handleSetRingtone(const char *from_msg)
|
||||||
{
|
{
|
||||||
int changed = 0;
|
int changed = 0;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "ProtobufModule.h"
|
#include "ProtobufModule.h"
|
||||||
#include "mesh/generated/remote_hardware.pb.h"
|
|
||||||
#include "concurrency/OSThread.h"
|
#include "concurrency/OSThread.h"
|
||||||
|
#include "mesh/generated/meshtastic/remote_hardware.pb.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A module that provides easy low-level remote access to device hardware.
|
* A module that provides easy low-level remote access to device hardware.
|
||||||
@@ -16,6 +16,7 @@ class RemoteHardwareModule : public ProtobufModule<HardwareMessage>, private con
|
|||||||
|
|
||||||
/// The timestamp of our last watch event (we throttle watches to 1 change every 30 seconds)
|
/// The timestamp of our last watch event (we throttle watches to 1 change every 30 seconds)
|
||||||
uint32_t lastWatchMsec = 0;
|
uint32_t lastWatchMsec = 0;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/** Constructor
|
/** Constructor
|
||||||
* name is for debugging output
|
* name is for debugging output
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#include "DeviceTelemetry.h"
|
#include "DeviceTelemetry.h"
|
||||||
#include "../mesh/generated/telemetry.pb.h"
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
#include "MeshService.h"
|
#include "MeshService.h"
|
||||||
#include "NodeDB.h"
|
#include "NodeDB.h"
|
||||||
#include "PowerFSM.h"
|
#include "PowerFSM.h"
|
||||||
@@ -9,13 +9,12 @@
|
|||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include <OLEDDisplay.h>
|
#include <OLEDDisplay.h>
|
||||||
#include <OLEDDisplayUi.h>
|
#include <OLEDDisplayUi.h>
|
||||||
#include "MeshService.h"
|
|
||||||
|
|
||||||
int32_t DeviceTelemetryModule::runOnce()
|
int32_t DeviceTelemetryModule::runOnce()
|
||||||
{
|
{
|
||||||
uint32_t now = millis();
|
uint32_t now = millis();
|
||||||
if ((lastSentToMesh == 0 ||
|
if ((lastSentToMesh == 0 ||
|
||||||
(now - lastSentToMesh) >= getConfiguredOrDefaultMs(moduleConfig.telemetry.device_update_interval)) &&
|
(now - lastSentToMesh) >= getConfiguredOrDefaultMs(moduleConfig.telemetry.device_update_interval)) &&
|
||||||
airTime->isTxAllowedChannelUtil() && airTime->isTxAllowedAirUtil()) {
|
airTime->isTxAllowedChannelUtil() && airTime->isTxAllowedAirUtil()) {
|
||||||
sendTelemetry();
|
sendTelemetry();
|
||||||
lastSentToMesh = now;
|
lastSentToMesh = now;
|
||||||
@@ -32,12 +31,9 @@ bool DeviceTelemetryModule::handleReceivedProtobuf(const MeshPacket &mp, Telemet
|
|||||||
if (t->which_variant == Telemetry_device_metrics_tag) {
|
if (t->which_variant == Telemetry_device_metrics_tag) {
|
||||||
const char *sender = getSenderShortName(mp);
|
const char *sender = getSenderShortName(mp);
|
||||||
|
|
||||||
LOG_INFO("(Received from %s): air_util_tx=%f, channel_utilization=%f, battery_level=%i, voltage=%f\n",
|
LOG_INFO("(Received from %s): air_util_tx=%f, channel_utilization=%f, battery_level=%i, voltage=%f\n", sender,
|
||||||
sender,
|
t->variant.device_metrics.air_util_tx, t->variant.device_metrics.channel_utilization,
|
||||||
t->variant.device_metrics.air_util_tx,
|
t->variant.device_metrics.battery_level, t->variant.device_metrics.voltage);
|
||||||
t->variant.device_metrics.channel_utilization,
|
|
||||||
t->variant.device_metrics.battery_level,
|
|
||||||
t->variant.device_metrics.voltage);
|
|
||||||
|
|
||||||
lastMeasurementPacket = packetPool.allocCopy(mp);
|
lastMeasurementPacket = packetPool.allocCopy(mp);
|
||||||
|
|
||||||
@@ -59,10 +55,8 @@ bool DeviceTelemetryModule::sendTelemetry(NodeNum dest, bool phoneOnly)
|
|||||||
t.variant.device_metrics.voltage = powerStatus->getBatteryVoltageMv() / 1000.0;
|
t.variant.device_metrics.voltage = powerStatus->getBatteryVoltageMv() / 1000.0;
|
||||||
|
|
||||||
LOG_INFO("(Sending): air_util_tx=%f, channel_utilization=%f, battery_level=%i, voltage=%f\n",
|
LOG_INFO("(Sending): air_util_tx=%f, channel_utilization=%f, battery_level=%i, voltage=%f\n",
|
||||||
t.variant.device_metrics.air_util_tx,
|
t.variant.device_metrics.air_util_tx, t.variant.device_metrics.channel_utilization,
|
||||||
t.variant.device_metrics.channel_utilization,
|
t.variant.device_metrics.battery_level, t.variant.device_metrics.voltage);
|
||||||
t.variant.device_metrics.battery_level,
|
|
||||||
t.variant.device_metrics.voltage);
|
|
||||||
|
|
||||||
MeshPacket *p = allocDataProtobuf(t);
|
MeshPacket *p = allocDataProtobuf(t);
|
||||||
p->to = dest;
|
p->to = dest;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "../mesh/generated/telemetry.pb.h"
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
#include "NodeDB.h"
|
#include "NodeDB.h"
|
||||||
#include "ProtobufModule.h"
|
#include "ProtobufModule.h"
|
||||||
#include <OLEDDisplay.h>
|
#include <OLEDDisplay.h>
|
||||||
@@ -11,8 +11,8 @@ class DeviceTelemetryModule : private concurrency::OSThread, public ProtobufModu
|
|||||||
DeviceTelemetryModule()
|
DeviceTelemetryModule()
|
||||||
: concurrency::OSThread("DeviceTelemetryModule"), ProtobufModule("DeviceTelemetry", PortNum_TELEMETRY_APP, &Telemetry_msg)
|
: concurrency::OSThread("DeviceTelemetryModule"), ProtobufModule("DeviceTelemetry", PortNum_TELEMETRY_APP, &Telemetry_msg)
|
||||||
{
|
{
|
||||||
lastMeasurementPacket = nullptr;
|
lastMeasurementPacket = nullptr;
|
||||||
setIntervalFromNow(10 * 1000);
|
setIntervalFromNow(10 * 1000);
|
||||||
}
|
}
|
||||||
virtual bool wantUIFrame() { return false; }
|
virtual bool wantUIFrame() { return false; }
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#include "EnvironmentTelemetry.h"
|
#include "EnvironmentTelemetry.h"
|
||||||
#include "../mesh/generated/telemetry.pb.h"
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
#include "MeshService.h"
|
#include "MeshService.h"
|
||||||
#include "NodeDB.h"
|
#include "NodeDB.h"
|
||||||
#include "PowerFSM.h"
|
#include "PowerFSM.h"
|
||||||
@@ -9,18 +9,17 @@
|
|||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include <OLEDDisplay.h>
|
#include <OLEDDisplay.h>
|
||||||
#include <OLEDDisplayUi.h>
|
#include <OLEDDisplayUi.h>
|
||||||
#include "MeshService.h"
|
|
||||||
|
|
||||||
// Sensors
|
// Sensors
|
||||||
#include "Sensor/BMP280Sensor.h"
|
|
||||||
#include "Sensor/BME280Sensor.h"
|
#include "Sensor/BME280Sensor.h"
|
||||||
#include "Sensor/BME680Sensor.h"
|
#include "Sensor/BME680Sensor.h"
|
||||||
#include "Sensor/MCP9808Sensor.h"
|
#include "Sensor/BMP280Sensor.h"
|
||||||
#include "Sensor/INA260Sensor.h"
|
|
||||||
#include "Sensor/INA219Sensor.h"
|
#include "Sensor/INA219Sensor.h"
|
||||||
#include "Sensor/SHTC3Sensor.h"
|
#include "Sensor/INA260Sensor.h"
|
||||||
#include "Sensor/LPS22HBSensor.h"
|
#include "Sensor/LPS22HBSensor.h"
|
||||||
|
#include "Sensor/MCP9808Sensor.h"
|
||||||
#include "Sensor/SHT31Sensor.h"
|
#include "Sensor/SHT31Sensor.h"
|
||||||
|
#include "Sensor/SHTC3Sensor.h"
|
||||||
|
|
||||||
BMP280Sensor bmp280Sensor;
|
BMP280Sensor bmp280Sensor;
|
||||||
BME280Sensor bme280Sensor;
|
BME280Sensor bme280Sensor;
|
||||||
@@ -64,8 +63,7 @@ int32_t EnvironmentTelemetryModule::runOnce()
|
|||||||
// moduleConfig.telemetry.environment_screen_enabled = 1;
|
// moduleConfig.telemetry.environment_screen_enabled = 1;
|
||||||
// moduleConfig.telemetry.environment_update_interval = 45;
|
// moduleConfig.telemetry.environment_update_interval = 45;
|
||||||
|
|
||||||
if (!(moduleConfig.telemetry.environment_measurement_enabled ||
|
if (!(moduleConfig.telemetry.environment_measurement_enabled || moduleConfig.telemetry.environment_screen_enabled)) {
|
||||||
moduleConfig.telemetry.environment_screen_enabled)) {
|
|
||||||
// If this module is not enabled, and the user doesn't want the display screen don't waste any OSThread time on it
|
// If this module is not enabled, and the user doesn't want the display screen don't waste any OSThread time on it
|
||||||
return disable();
|
return disable();
|
||||||
}
|
}
|
||||||
@@ -106,7 +104,7 @@ int32_t EnvironmentTelemetryModule::runOnce()
|
|||||||
|
|
||||||
uint32_t now = millis();
|
uint32_t now = millis();
|
||||||
if ((lastSentToMesh == 0 ||
|
if ((lastSentToMesh == 0 ||
|
||||||
(now - lastSentToMesh) >= getConfiguredOrDefaultMs(moduleConfig.telemetry.environment_update_interval)) &&
|
(now - lastSentToMesh) >= getConfiguredOrDefaultMs(moduleConfig.telemetry.environment_update_interval)) &&
|
||||||
airTime->isTxAllowedAirUtil()) {
|
airTime->isTxAllowedAirUtil()) {
|
||||||
sendTelemetry();
|
sendTelemetry();
|
||||||
lastSentToMesh = now;
|
lastSentToMesh = now;
|
||||||
@@ -173,13 +171,15 @@ void EnvironmentTelemetryModule::drawFrame(OLEDDisplay *display, OLEDDisplayUiSt
|
|||||||
}
|
}
|
||||||
display->drawString(x, y += fontHeight(FONT_MEDIUM) - 2, "From: " + String(lastSender) + "(" + String(agoSecs) + "s)");
|
display->drawString(x, y += fontHeight(FONT_MEDIUM) - 2, "From: " + String(lastSender) + "(" + String(agoSecs) + "s)");
|
||||||
display->drawString(x, y += fontHeight(FONT_SMALL) - 2,
|
display->drawString(x, y += fontHeight(FONT_SMALL) - 2,
|
||||||
"Temp/Hum: " + last_temp + " / " + String(lastMeasurement.variant.environment_metrics.relative_humidity, 0) + "%");
|
"Temp/Hum: " + last_temp + " / " +
|
||||||
|
String(lastMeasurement.variant.environment_metrics.relative_humidity, 0) + "%");
|
||||||
if (lastMeasurement.variant.environment_metrics.barometric_pressure != 0)
|
if (lastMeasurement.variant.environment_metrics.barometric_pressure != 0)
|
||||||
display->drawString(x, y += fontHeight(FONT_SMALL),
|
display->drawString(x, y += fontHeight(FONT_SMALL),
|
||||||
"Press: " + String(lastMeasurement.variant.environment_metrics.barometric_pressure, 0) + "hPA");
|
"Press: " + String(lastMeasurement.variant.environment_metrics.barometric_pressure, 0) + "hPA");
|
||||||
if (lastMeasurement.variant.environment_metrics.voltage != 0)
|
if (lastMeasurement.variant.environment_metrics.voltage != 0)
|
||||||
display->drawString(x, y += fontHeight(FONT_SMALL),
|
display->drawString(x, y += fontHeight(FONT_SMALL),
|
||||||
"Volt/Cur: " + String(lastMeasurement.variant.environment_metrics.voltage, 0) + "V / " + String(lastMeasurement.variant.environment_metrics.current, 0) + "mA");
|
"Volt/Cur: " + String(lastMeasurement.variant.environment_metrics.voltage, 0) + "V / " +
|
||||||
|
String(lastMeasurement.variant.environment_metrics.current, 0) + "mA");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EnvironmentTelemetryModule::handleReceivedProtobuf(const MeshPacket &mp, Telemetry *t)
|
bool EnvironmentTelemetryModule::handleReceivedProtobuf(const MeshPacket &mp, Telemetry *t)
|
||||||
@@ -187,14 +187,11 @@ bool EnvironmentTelemetryModule::handleReceivedProtobuf(const MeshPacket &mp, Te
|
|||||||
if (t->which_variant == Telemetry_environment_metrics_tag) {
|
if (t->which_variant == Telemetry_environment_metrics_tag) {
|
||||||
const char *sender = getSenderShortName(mp);
|
const char *sender = getSenderShortName(mp);
|
||||||
|
|
||||||
LOG_INFO("(Received from %s): barometric_pressure=%f, current=%f, gas_resistance=%f, relative_humidity=%f, temperature=%f, voltage=%f\n",
|
LOG_INFO("(Received from %s): barometric_pressure=%f, current=%f, gas_resistance=%f, relative_humidity=%f, "
|
||||||
sender,
|
"temperature=%f, voltage=%f\n",
|
||||||
t->variant.environment_metrics.barometric_pressure,
|
sender, t->variant.environment_metrics.barometric_pressure, t->variant.environment_metrics.current,
|
||||||
t->variant.environment_metrics.current,
|
t->variant.environment_metrics.gas_resistance, t->variant.environment_metrics.relative_humidity,
|
||||||
t->variant.environment_metrics.gas_resistance,
|
t->variant.environment_metrics.temperature, t->variant.environment_metrics.voltage);
|
||||||
t->variant.environment_metrics.relative_humidity,
|
|
||||||
t->variant.environment_metrics.temperature,
|
|
||||||
t->variant.environment_metrics.voltage);
|
|
||||||
|
|
||||||
lastMeasurementPacket = packetPool.allocCopy(mp);
|
lastMeasurementPacket = packetPool.allocCopy(mp);
|
||||||
}
|
}
|
||||||
@@ -234,13 +231,11 @@ bool EnvironmentTelemetryModule::sendTelemetry(NodeNum dest, bool phoneOnly)
|
|||||||
if (ina260Sensor.hasSensor())
|
if (ina260Sensor.hasSensor())
|
||||||
ina260Sensor.getMetrics(&m);
|
ina260Sensor.getMetrics(&m);
|
||||||
|
|
||||||
LOG_INFO("(Sending): barometric_pressure=%f, current=%f, gas_resistance=%f, relative_humidity=%f, temperature=%f, voltage=%f\n",
|
LOG_INFO(
|
||||||
m.variant.environment_metrics.barometric_pressure,
|
"(Sending): barometric_pressure=%f, current=%f, gas_resistance=%f, relative_humidity=%f, temperature=%f, voltage=%f\n",
|
||||||
m.variant.environment_metrics.current,
|
m.variant.environment_metrics.barometric_pressure, m.variant.environment_metrics.current,
|
||||||
m.variant.environment_metrics.gas_resistance,
|
m.variant.environment_metrics.gas_resistance, m.variant.environment_metrics.relative_humidity,
|
||||||
m.variant.environment_metrics.relative_humidity,
|
m.variant.environment_metrics.temperature, m.variant.environment_metrics.voltage);
|
||||||
m.variant.environment_metrics.temperature,
|
|
||||||
m.variant.environment_metrics.voltage);
|
|
||||||
|
|
||||||
sensor_read_error_count = 0;
|
sensor_read_error_count = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "../mesh/generated/telemetry.pb.h"
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
#include "NodeDB.h"
|
#include "NodeDB.h"
|
||||||
#include "ProtobufModule.h"
|
#include "ProtobufModule.h"
|
||||||
#include <OLEDDisplay.h>
|
#include <OLEDDisplay.h>
|
||||||
@@ -12,8 +12,8 @@ class EnvironmentTelemetryModule : private concurrency::OSThread, public Protobu
|
|||||||
: concurrency::OSThread("EnvironmentTelemetryModule"),
|
: concurrency::OSThread("EnvironmentTelemetryModule"),
|
||||||
ProtobufModule("EnvironmentTelemetry", PortNum_TELEMETRY_APP, &Telemetry_msg)
|
ProtobufModule("EnvironmentTelemetry", PortNum_TELEMETRY_APP, &Telemetry_msg)
|
||||||
{
|
{
|
||||||
lastMeasurementPacket = nullptr;
|
lastMeasurementPacket = nullptr;
|
||||||
setIntervalFromNow(10 * 1000);
|
setIntervalFromNow(10 * 1000);
|
||||||
}
|
}
|
||||||
virtual bool wantUIFrame() override;
|
virtual bool wantUIFrame() override;
|
||||||
#if !HAS_SCREEN
|
#if !HAS_SCREEN
|
||||||
|
|||||||
@@ -1,35 +1,33 @@
|
|||||||
#include "../mesh/generated/telemetry.pb.h"
|
|
||||||
#include "configuration.h"
|
|
||||||
#include "TelemetrySensor.h"
|
|
||||||
#include "BME280Sensor.h"
|
#include "BME280Sensor.h"
|
||||||
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
|
#include "TelemetrySensor.h"
|
||||||
|
#include "configuration.h"
|
||||||
#include <Adafruit_BME280.h>
|
#include <Adafruit_BME280.h>
|
||||||
#include <typeinfo>
|
#include <typeinfo>
|
||||||
|
|
||||||
BME280Sensor::BME280Sensor() :
|
BME280Sensor::BME280Sensor() : TelemetrySensor(TelemetrySensorType_BME280, "BME280") {}
|
||||||
TelemetrySensor(TelemetrySensorType_BME280, "BME280")
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t BME280Sensor::runOnce() {
|
int32_t BME280Sensor::runOnce()
|
||||||
|
{
|
||||||
LOG_INFO("Init sensor: %s\n", sensorName);
|
LOG_INFO("Init sensor: %s\n", sensorName);
|
||||||
if (!hasSensor()) {
|
if (!hasSensor()) {
|
||||||
return DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS;
|
return DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS;
|
||||||
}
|
}
|
||||||
status = bme280.begin(nodeTelemetrySensorsMap[sensorType]);
|
status = bme280.begin(nodeTelemetrySensorsMap[sensorType]);
|
||||||
|
|
||||||
bme280.setSampling( Adafruit_BME280::MODE_FORCED,
|
bme280.setSampling(Adafruit_BME280::MODE_FORCED,
|
||||||
Adafruit_BME280::SAMPLING_X1, // Temp. oversampling
|
Adafruit_BME280::SAMPLING_X1, // Temp. oversampling
|
||||||
Adafruit_BME280::SAMPLING_X1, // Pressure oversampling
|
Adafruit_BME280::SAMPLING_X1, // Pressure oversampling
|
||||||
Adafruit_BME280::SAMPLING_X1, // Humidity oversampling
|
Adafruit_BME280::SAMPLING_X1, // Humidity oversampling
|
||||||
Adafruit_BME280::FILTER_OFF,
|
Adafruit_BME280::FILTER_OFF, Adafruit_BME280::STANDBY_MS_1000);
|
||||||
Adafruit_BME280::STANDBY_MS_1000);
|
|
||||||
|
|
||||||
return initI2CSensor();
|
return initI2CSensor();
|
||||||
}
|
}
|
||||||
|
|
||||||
void BME280Sensor::setup() { }
|
void BME280Sensor::setup() {}
|
||||||
|
|
||||||
bool BME280Sensor::getMetrics(Telemetry *measurement) {
|
bool BME280Sensor::getMetrics(Telemetry *measurement)
|
||||||
|
{
|
||||||
LOG_DEBUG("BME280Sensor::getMetrics\n");
|
LOG_DEBUG("BME280Sensor::getMetrics\n");
|
||||||
bme280.takeForcedMeasurement();
|
bme280.takeForcedMeasurement();
|
||||||
measurement->variant.environment_metrics.temperature = bme280.readTemperature();
|
measurement->variant.environment_metrics.temperature = bme280.readTemperature();
|
||||||
|
|||||||
@@ -1,15 +1,16 @@
|
|||||||
#include "../mesh/generated/telemetry.pb.h"
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
#include "TelemetrySensor.h"
|
#include "TelemetrySensor.h"
|
||||||
#include <Adafruit_BME280.h>
|
#include <Adafruit_BME280.h>
|
||||||
|
|
||||||
class BME280Sensor : virtual public TelemetrySensor {
|
class BME280Sensor : virtual public TelemetrySensor
|
||||||
private:
|
{
|
||||||
|
private:
|
||||||
Adafruit_BME280 bme280;
|
Adafruit_BME280 bme280;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void setup() override;
|
virtual void setup() override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BME280Sensor();
|
BME280Sensor();
|
||||||
virtual int32_t runOnce() override;
|
virtual int32_t runOnce() override;
|
||||||
virtual bool getMetrics(Telemetry *measurement) override;
|
virtual bool getMetrics(Telemetry *measurement) override;
|
||||||
|
|||||||
@@ -1,15 +1,13 @@
|
|||||||
#include "../mesh/generated/telemetry.pb.h"
|
|
||||||
#include "configuration.h"
|
|
||||||
#include "TelemetrySensor.h"
|
|
||||||
#include "BME680Sensor.h"
|
#include "BME680Sensor.h"
|
||||||
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
|
#include "TelemetrySensor.h"
|
||||||
|
#include "configuration.h"
|
||||||
#include <Adafruit_BME680.h>
|
#include <Adafruit_BME680.h>
|
||||||
|
|
||||||
BME680Sensor::BME680Sensor() :
|
BME680Sensor::BME680Sensor() : TelemetrySensor(TelemetrySensorType_BME680, "BME680") {}
|
||||||
TelemetrySensor(TelemetrySensorType_BME680, "BME680")
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t BME680Sensor::runOnce() {
|
int32_t BME680Sensor::runOnce()
|
||||||
|
{
|
||||||
LOG_INFO("Init sensor: %s\n", sensorName);
|
LOG_INFO("Init sensor: %s\n", sensorName);
|
||||||
if (!hasSensor()) {
|
if (!hasSensor()) {
|
||||||
return DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS;
|
return DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS;
|
||||||
@@ -19,9 +17,10 @@ int32_t BME680Sensor::runOnce() {
|
|||||||
return initI2CSensor();
|
return initI2CSensor();
|
||||||
}
|
}
|
||||||
|
|
||||||
void BME680Sensor::setup() { }
|
void BME680Sensor::setup() {}
|
||||||
|
|
||||||
bool BME680Sensor::getMetrics(Telemetry *measurement) {
|
bool BME680Sensor::getMetrics(Telemetry *measurement)
|
||||||
|
{
|
||||||
bme680.performReading();
|
bme680.performReading();
|
||||||
measurement->variant.environment_metrics.temperature = bme680.temperature;
|
measurement->variant.environment_metrics.temperature = bme680.temperature;
|
||||||
measurement->variant.environment_metrics.relative_humidity = bme680.humidity;
|
measurement->variant.environment_metrics.relative_humidity = bme680.humidity;
|
||||||
|
|||||||
@@ -1,15 +1,16 @@
|
|||||||
#include "../mesh/generated/telemetry.pb.h"
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
#include "TelemetrySensor.h"
|
#include "TelemetrySensor.h"
|
||||||
#include <Adafruit_BME680.h>
|
#include <Adafruit_BME680.h>
|
||||||
|
|
||||||
class BME680Sensor : virtual public TelemetrySensor {
|
class BME680Sensor : virtual public TelemetrySensor
|
||||||
private:
|
{
|
||||||
|
private:
|
||||||
Adafruit_BME680 bme680;
|
Adafruit_BME680 bme680;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void setup() override;
|
virtual void setup() override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BME680Sensor();
|
BME680Sensor();
|
||||||
virtual int32_t runOnce() override;
|
virtual int32_t runOnce() override;
|
||||||
virtual bool getMetrics(Telemetry *measurement) override;
|
virtual bool getMetrics(Telemetry *measurement) override;
|
||||||
|
|||||||
@@ -1,34 +1,32 @@
|
|||||||
#include "../mesh/generated/telemetry.pb.h"
|
|
||||||
#include "configuration.h"
|
|
||||||
#include "TelemetrySensor.h"
|
|
||||||
#include "BMP280Sensor.h"
|
#include "BMP280Sensor.h"
|
||||||
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
|
#include "TelemetrySensor.h"
|
||||||
|
#include "configuration.h"
|
||||||
#include <Adafruit_BMP280.h>
|
#include <Adafruit_BMP280.h>
|
||||||
#include <typeinfo>
|
#include <typeinfo>
|
||||||
|
|
||||||
BMP280Sensor::BMP280Sensor() :
|
BMP280Sensor::BMP280Sensor() : TelemetrySensor(TelemetrySensorType_BMP280, "BMP280") {}
|
||||||
TelemetrySensor(TelemetrySensorType_BMP280, "BMP280")
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t BMP280Sensor::runOnce() {
|
int32_t BMP280Sensor::runOnce()
|
||||||
|
{
|
||||||
LOG_INFO("Init sensor: %s\n", sensorName);
|
LOG_INFO("Init sensor: %s\n", sensorName);
|
||||||
if (!hasSensor()) {
|
if (!hasSensor()) {
|
||||||
return DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS;
|
return DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS;
|
||||||
}
|
}
|
||||||
status = bmp280.begin(nodeTelemetrySensorsMap[sensorType]);
|
status = bmp280.begin(nodeTelemetrySensorsMap[sensorType]);
|
||||||
|
|
||||||
bmp280.setSampling( Adafruit_BMP280::MODE_FORCED,
|
bmp280.setSampling(Adafruit_BMP280::MODE_FORCED,
|
||||||
Adafruit_BMP280::SAMPLING_X1, // Temp. oversampling
|
Adafruit_BMP280::SAMPLING_X1, // Temp. oversampling
|
||||||
Adafruit_BMP280::SAMPLING_X1, // Pressure oversampling
|
Adafruit_BMP280::SAMPLING_X1, // Pressure oversampling
|
||||||
Adafruit_BMP280::FILTER_OFF,
|
Adafruit_BMP280::FILTER_OFF, Adafruit_BMP280::STANDBY_MS_1000);
|
||||||
Adafruit_BMP280::STANDBY_MS_1000);
|
|
||||||
|
|
||||||
return initI2CSensor();
|
return initI2CSensor();
|
||||||
}
|
}
|
||||||
|
|
||||||
void BMP280Sensor::setup() { }
|
void BMP280Sensor::setup() {}
|
||||||
|
|
||||||
bool BMP280Sensor::getMetrics(Telemetry *measurement) {
|
bool BMP280Sensor::getMetrics(Telemetry *measurement)
|
||||||
|
{
|
||||||
LOG_DEBUG("BMP280Sensor::getMetrics\n");
|
LOG_DEBUG("BMP280Sensor::getMetrics\n");
|
||||||
bmp280.takeForcedMeasurement();
|
bmp280.takeForcedMeasurement();
|
||||||
measurement->variant.environment_metrics.temperature = bmp280.readTemperature();
|
measurement->variant.environment_metrics.temperature = bmp280.readTemperature();
|
||||||
|
|||||||
@@ -1,15 +1,16 @@
|
|||||||
#include "../mesh/generated/telemetry.pb.h"
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
#include "TelemetrySensor.h"
|
#include "TelemetrySensor.h"
|
||||||
#include <Adafruit_BMP280.h>
|
#include <Adafruit_BMP280.h>
|
||||||
|
|
||||||
class BMP280Sensor : virtual public TelemetrySensor {
|
class BMP280Sensor : virtual public TelemetrySensor
|
||||||
private:
|
{
|
||||||
|
private:
|
||||||
Adafruit_BMP280 bmp280;
|
Adafruit_BMP280 bmp280;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void setup() override;
|
virtual void setup() override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BMP280Sensor();
|
BMP280Sensor();
|
||||||
virtual int32_t runOnce() override;
|
virtual int32_t runOnce() override;
|
||||||
virtual bool getMetrics(Telemetry *measurement) override;
|
virtual bool getMetrics(Telemetry *measurement) override;
|
||||||
|
|||||||
@@ -1,15 +1,13 @@
|
|||||||
#include "../mesh/generated/telemetry.pb.h"
|
|
||||||
#include "configuration.h"
|
|
||||||
#include "TelemetrySensor.h"
|
|
||||||
#include "INA219Sensor.h"
|
#include "INA219Sensor.h"
|
||||||
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
|
#include "TelemetrySensor.h"
|
||||||
|
#include "configuration.h"
|
||||||
#include <Adafruit_INA219.h>
|
#include <Adafruit_INA219.h>
|
||||||
|
|
||||||
INA219Sensor::INA219Sensor() :
|
INA219Sensor::INA219Sensor() : TelemetrySensor(TelemetrySensorType_INA219, "INA219") {}
|
||||||
TelemetrySensor(TelemetrySensorType_INA219, "INA219")
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t INA219Sensor::runOnce() {
|
int32_t INA219Sensor::runOnce()
|
||||||
|
{
|
||||||
LOG_INFO("Init sensor: %s\n", sensorName);
|
LOG_INFO("Init sensor: %s\n", sensorName);
|
||||||
if (!hasSensor()) {
|
if (!hasSensor()) {
|
||||||
return DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS;
|
return DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS;
|
||||||
@@ -19,11 +17,10 @@ int32_t INA219Sensor::runOnce() {
|
|||||||
return initI2CSensor();
|
return initI2CSensor();
|
||||||
}
|
}
|
||||||
|
|
||||||
void INA219Sensor::setup()
|
void INA219Sensor::setup() {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
bool INA219Sensor::getMetrics(Telemetry *measurement) {
|
bool INA219Sensor::getMetrics(Telemetry *measurement)
|
||||||
|
{
|
||||||
measurement->variant.environment_metrics.voltage = ina219.getBusVoltage_V();
|
measurement->variant.environment_metrics.voltage = ina219.getBusVoltage_V();
|
||||||
measurement->variant.environment_metrics.current = ina219.getCurrent_mA();
|
measurement->variant.environment_metrics.current = ina219.getCurrent_mA();
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
#include "../mesh/generated/telemetry.pb.h"
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
#include "TelemetrySensor.h"
|
#include "TelemetrySensor.h"
|
||||||
#include <Adafruit_INA219.h>
|
#include <Adafruit_INA219.h>
|
||||||
|
|
||||||
|
class INA219Sensor : virtual public TelemetrySensor
|
||||||
class INA219Sensor : virtual public TelemetrySensor {
|
{
|
||||||
private:
|
private:
|
||||||
Adafruit_INA219 ina219;
|
Adafruit_INA219 ina219;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void setup() override;
|
virtual void setup() override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
INA219Sensor();
|
INA219Sensor();
|
||||||
virtual int32_t runOnce() override;
|
virtual int32_t runOnce() override;
|
||||||
virtual bool getMetrics(Telemetry *measurement) override;
|
virtual bool getMetrics(Telemetry *measurement) override;
|
||||||
|
|||||||
@@ -1,15 +1,13 @@
|
|||||||
#include "../mesh/generated/telemetry.pb.h"
|
|
||||||
#include "configuration.h"
|
|
||||||
#include "TelemetrySensor.h"
|
|
||||||
#include "INA260Sensor.h"
|
#include "INA260Sensor.h"
|
||||||
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
|
#include "TelemetrySensor.h"
|
||||||
|
#include "configuration.h"
|
||||||
#include <Adafruit_INA260.h>
|
#include <Adafruit_INA260.h>
|
||||||
|
|
||||||
INA260Sensor::INA260Sensor() :
|
INA260Sensor::INA260Sensor() : TelemetrySensor(TelemetrySensorType_INA260, "INA260") {}
|
||||||
TelemetrySensor(TelemetrySensorType_INA260, "INA260")
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t INA260Sensor::runOnce() {
|
int32_t INA260Sensor::runOnce()
|
||||||
|
{
|
||||||
LOG_INFO("Init sensor: %s\n", sensorName);
|
LOG_INFO("Init sensor: %s\n", sensorName);
|
||||||
if (!hasSensor()) {
|
if (!hasSensor()) {
|
||||||
return DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS;
|
return DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS;
|
||||||
@@ -18,11 +16,10 @@ int32_t INA260Sensor::runOnce() {
|
|||||||
return initI2CSensor();
|
return initI2CSensor();
|
||||||
}
|
}
|
||||||
|
|
||||||
void INA260Sensor::setup()
|
void INA260Sensor::setup() {}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
bool INA260Sensor::getMetrics(Telemetry *measurement) {
|
bool INA260Sensor::getMetrics(Telemetry *measurement)
|
||||||
|
{
|
||||||
// mV conversion to V
|
// mV conversion to V
|
||||||
measurement->variant.environment_metrics.voltage = ina260.readBusVoltage() / 1000;
|
measurement->variant.environment_metrics.voltage = ina260.readBusVoltage() / 1000;
|
||||||
measurement->variant.environment_metrics.current = ina260.readCurrent();
|
measurement->variant.environment_metrics.current = ina260.readCurrent();
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
#include "../mesh/generated/telemetry.pb.h"
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
#include "TelemetrySensor.h"
|
#include "TelemetrySensor.h"
|
||||||
#include <Adafruit_INA260.h>
|
#include <Adafruit_INA260.h>
|
||||||
|
|
||||||
|
class INA260Sensor : virtual public TelemetrySensor
|
||||||
class INA260Sensor : virtual public TelemetrySensor {
|
{
|
||||||
private:
|
private:
|
||||||
Adafruit_INA260 ina260 = Adafruit_INA260();
|
Adafruit_INA260 ina260 = Adafruit_INA260();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void setup() override;
|
virtual void setup() override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
INA260Sensor();
|
INA260Sensor();
|
||||||
virtual int32_t runOnce() override;
|
virtual int32_t runOnce() override;
|
||||||
virtual bool getMetrics(Telemetry *measurement) override;
|
virtual bool getMetrics(Telemetry *measurement) override;
|
||||||
|
|||||||
@@ -1,16 +1,14 @@
|
|||||||
#include "../mesh/generated/telemetry.pb.h"
|
|
||||||
#include "configuration.h"
|
|
||||||
#include "TelemetrySensor.h"
|
|
||||||
#include "LPS22HBSensor.h"
|
#include "LPS22HBSensor.h"
|
||||||
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
|
#include "TelemetrySensor.h"
|
||||||
|
#include "configuration.h"
|
||||||
#include <Adafruit_LPS2X.h>
|
#include <Adafruit_LPS2X.h>
|
||||||
#include <Adafruit_Sensor.h>
|
#include <Adafruit_Sensor.h>
|
||||||
|
|
||||||
LPS22HBSensor::LPS22HBSensor() :
|
LPS22HBSensor::LPS22HBSensor() : TelemetrySensor(TelemetrySensorType_LPS22, "LPS22HB") {}
|
||||||
TelemetrySensor(TelemetrySensorType_LPS22, "LPS22HB")
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t LPS22HBSensor::runOnce() {
|
int32_t LPS22HBSensor::runOnce()
|
||||||
|
{
|
||||||
LOG_INFO("Init sensor: %s\n", sensorName);
|
LOG_INFO("Init sensor: %s\n", sensorName);
|
||||||
if (!hasSensor()) {
|
if (!hasSensor()) {
|
||||||
return DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS;
|
return DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS;
|
||||||
@@ -24,7 +22,8 @@ void LPS22HBSensor::setup()
|
|||||||
lps22hb.setDataRate(LPS22_RATE_10_HZ);
|
lps22hb.setDataRate(LPS22_RATE_10_HZ);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LPS22HBSensor::getMetrics(Telemetry *measurement) {
|
bool LPS22HBSensor::getMetrics(Telemetry *measurement)
|
||||||
|
{
|
||||||
sensors_event_t temp;
|
sensors_event_t temp;
|
||||||
sensors_event_t pressure;
|
sensors_event_t pressure;
|
||||||
lps22hb.getEvent(&pressure, &temp);
|
lps22hb.getEvent(&pressure, &temp);
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
#include "../mesh/generated/telemetry.pb.h"
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
#include "TelemetrySensor.h"
|
#include "TelemetrySensor.h"
|
||||||
#include <Adafruit_LPS2X.h>
|
#include <Adafruit_LPS2X.h>
|
||||||
#include <Adafruit_Sensor.h>
|
#include <Adafruit_Sensor.h>
|
||||||
|
|
||||||
class LPS22HBSensor : virtual public TelemetrySensor {
|
class LPS22HBSensor : virtual public TelemetrySensor
|
||||||
private:
|
{
|
||||||
|
private:
|
||||||
Adafruit_LPS22 lps22hb;
|
Adafruit_LPS22 lps22hb;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void setup() override;
|
virtual void setup() override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
LPS22HBSensor();
|
LPS22HBSensor();
|
||||||
virtual int32_t runOnce() override;
|
virtual int32_t runOnce() override;
|
||||||
virtual bool getMetrics(Telemetry *measurement) override;
|
virtual bool getMetrics(Telemetry *measurement) override;
|
||||||
|
|||||||
@@ -1,15 +1,13 @@
|
|||||||
#include "../mesh/generated/telemetry.pb.h"
|
|
||||||
#include "configuration.h"
|
|
||||||
#include "TelemetrySensor.h"
|
|
||||||
#include "MCP9808Sensor.h"
|
#include "MCP9808Sensor.h"
|
||||||
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
|
#include "TelemetrySensor.h"
|
||||||
|
#include "configuration.h"
|
||||||
#include <Adafruit_MCP9808.h>
|
#include <Adafruit_MCP9808.h>
|
||||||
|
|
||||||
MCP9808Sensor::MCP9808Sensor() :
|
MCP9808Sensor::MCP9808Sensor() : TelemetrySensor(TelemetrySensorType_MCP9808, "MCP9808") {}
|
||||||
TelemetrySensor(TelemetrySensorType_MCP9808, "MCP9808")
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t MCP9808Sensor::runOnce() {
|
int32_t MCP9808Sensor::runOnce()
|
||||||
|
{
|
||||||
LOG_INFO("Init sensor: %s\n", sensorName);
|
LOG_INFO("Init sensor: %s\n", sensorName);
|
||||||
if (!hasSensor()) {
|
if (!hasSensor()) {
|
||||||
return DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS;
|
return DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS;
|
||||||
@@ -18,11 +16,13 @@ int32_t MCP9808Sensor::runOnce() {
|
|||||||
return initI2CSensor();
|
return initI2CSensor();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MCP9808Sensor::setup() {
|
void MCP9808Sensor::setup()
|
||||||
|
{
|
||||||
mcp9808.setResolution(2);
|
mcp9808.setResolution(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MCP9808Sensor::getMetrics(Telemetry *measurement) {
|
bool MCP9808Sensor::getMetrics(Telemetry *measurement)
|
||||||
|
{
|
||||||
LOG_DEBUG("MCP9808Sensor::getMetrics\n");
|
LOG_DEBUG("MCP9808Sensor::getMetrics\n");
|
||||||
measurement->variant.environment_metrics.temperature = mcp9808.readTempC();
|
measurement->variant.environment_metrics.temperature = mcp9808.readTempC();
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -1,15 +1,16 @@
|
|||||||
#include "../mesh/generated/telemetry.pb.h"
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
#include "TelemetrySensor.h"
|
#include "TelemetrySensor.h"
|
||||||
#include <Adafruit_MCP9808.h>
|
#include <Adafruit_MCP9808.h>
|
||||||
|
|
||||||
class MCP9808Sensor : virtual public TelemetrySensor {
|
class MCP9808Sensor : virtual public TelemetrySensor
|
||||||
private:
|
{
|
||||||
|
private:
|
||||||
Adafruit_MCP9808 mcp9808;
|
Adafruit_MCP9808 mcp9808;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void setup() override;
|
virtual void setup() override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MCP9808Sensor();
|
MCP9808Sensor();
|
||||||
virtual int32_t runOnce() override;
|
virtual int32_t runOnce() override;
|
||||||
virtual bool getMetrics(Telemetry *measurement) override;
|
virtual bool getMetrics(Telemetry *measurement) override;
|
||||||
|
|||||||
@@ -1,15 +1,13 @@
|
|||||||
#include "../mesh/generated/telemetry.pb.h"
|
|
||||||
#include "configuration.h"
|
|
||||||
#include "TelemetrySensor.h"
|
|
||||||
#include "SHT31Sensor.h"
|
#include "SHT31Sensor.h"
|
||||||
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
|
#include "TelemetrySensor.h"
|
||||||
|
#include "configuration.h"
|
||||||
#include <Adafruit_SHT31.h>
|
#include <Adafruit_SHT31.h>
|
||||||
|
|
||||||
SHT31Sensor::SHT31Sensor() :
|
SHT31Sensor::SHT31Sensor() : TelemetrySensor(TelemetrySensorType_SHT31, "SHT31") {}
|
||||||
TelemetrySensor(TelemetrySensorType_SHT31, "SHT31")
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t SHT31Sensor::runOnce() {
|
int32_t SHT31Sensor::runOnce()
|
||||||
|
{
|
||||||
LOG_INFO("Init sensor: %s\n", sensorName);
|
LOG_INFO("Init sensor: %s\n", sensorName);
|
||||||
if (!hasSensor()) {
|
if (!hasSensor()) {
|
||||||
return DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS;
|
return DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS;
|
||||||
@@ -23,7 +21,8 @@ void SHT31Sensor::setup()
|
|||||||
// Set up oversampling and filter initialization
|
// Set up oversampling and filter initialization
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SHT31Sensor::getMetrics(Telemetry *measurement) {
|
bool SHT31Sensor::getMetrics(Telemetry *measurement)
|
||||||
|
{
|
||||||
measurement->variant.environment_metrics.temperature = sht31.readTemperature();
|
measurement->variant.environment_metrics.temperature = sht31.readTemperature();
|
||||||
measurement->variant.environment_metrics.relative_humidity = sht31.readHumidity();
|
measurement->variant.environment_metrics.relative_humidity = sht31.readHumidity();
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,16 @@
|
|||||||
#include "../mesh/generated/telemetry.pb.h"
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
#include "TelemetrySensor.h"
|
#include "TelemetrySensor.h"
|
||||||
#include <Adafruit_SHT31.h>
|
#include <Adafruit_SHT31.h>
|
||||||
|
|
||||||
class SHT31Sensor : virtual public TelemetrySensor {
|
class SHT31Sensor : virtual public TelemetrySensor
|
||||||
private:
|
{
|
||||||
|
private:
|
||||||
Adafruit_SHT31 sht31 = Adafruit_SHT31();
|
Adafruit_SHT31 sht31 = Adafruit_SHT31();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void setup() override;
|
virtual void setup() override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SHT31Sensor();
|
SHT31Sensor();
|
||||||
virtual int32_t runOnce() override;
|
virtual int32_t runOnce() override;
|
||||||
virtual bool getMetrics(Telemetry *measurement) override;
|
virtual bool getMetrics(Telemetry *measurement) override;
|
||||||
|
|||||||
@@ -1,15 +1,13 @@
|
|||||||
#include "../mesh/generated/telemetry.pb.h"
|
|
||||||
#include "configuration.h"
|
|
||||||
#include "TelemetrySensor.h"
|
|
||||||
#include "SHTC3Sensor.h"
|
#include "SHTC3Sensor.h"
|
||||||
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
|
#include "TelemetrySensor.h"
|
||||||
|
#include "configuration.h"
|
||||||
#include <Adafruit_SHTC3.h>
|
#include <Adafruit_SHTC3.h>
|
||||||
|
|
||||||
SHTC3Sensor::SHTC3Sensor() :
|
SHTC3Sensor::SHTC3Sensor() : TelemetrySensor(TelemetrySensorType_SHTC3, "SHTC3") {}
|
||||||
TelemetrySensor(TelemetrySensorType_SHTC3, "SHTC3")
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t SHTC3Sensor::runOnce() {
|
int32_t SHTC3Sensor::runOnce()
|
||||||
|
{
|
||||||
LOG_INFO("Init sensor: %s\n", sensorName);
|
LOG_INFO("Init sensor: %s\n", sensorName);
|
||||||
if (!hasSensor()) {
|
if (!hasSensor()) {
|
||||||
return DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS;
|
return DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS;
|
||||||
@@ -23,7 +21,8 @@ void SHTC3Sensor::setup()
|
|||||||
// Set up oversampling and filter initialization
|
// Set up oversampling and filter initialization
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SHTC3Sensor::getMetrics(Telemetry *measurement) {
|
bool SHTC3Sensor::getMetrics(Telemetry *measurement)
|
||||||
|
{
|
||||||
sensors_event_t humidity, temp;
|
sensors_event_t humidity, temp;
|
||||||
shtc3.getEvent(&humidity, &temp);
|
shtc3.getEvent(&humidity, &temp);
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,16 @@
|
|||||||
#include "../mesh/generated/telemetry.pb.h"
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
#include "TelemetrySensor.h"
|
#include "TelemetrySensor.h"
|
||||||
#include <Adafruit_SHTC3.h>
|
#include <Adafruit_SHTC3.h>
|
||||||
|
|
||||||
class SHTC3Sensor : virtual public TelemetrySensor {
|
class SHTC3Sensor : virtual public TelemetrySensor
|
||||||
private:
|
{
|
||||||
|
private:
|
||||||
Adafruit_SHTC3 shtc3 = Adafruit_SHTC3();
|
Adafruit_SHTC3 shtc3 = Adafruit_SHTC3();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void setup() override;
|
virtual void setup() override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SHTC3Sensor();
|
SHTC3Sensor();
|
||||||
virtual int32_t runOnce() override;
|
virtual int32_t runOnce() override;
|
||||||
virtual bool getMetrics(Telemetry *measurement) override;
|
virtual bool getMetrics(Telemetry *measurement) override;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#include "TelemetrySensor.h"
|
#include "TelemetrySensor.h"
|
||||||
#include "../mesh/generated/telemetry.pb.h"
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
#include "NodeDB.h"
|
#include "NodeDB.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "../mesh/generated/telemetry.pb.h"
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
#include "NodeDB.h"
|
#include "NodeDB.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
@@ -19,7 +19,8 @@ class TelemetrySensor
|
|||||||
TelemetrySensorType sensorType;
|
TelemetrySensorType sensorType;
|
||||||
unsigned status;
|
unsigned status;
|
||||||
|
|
||||||
int32_t initI2CSensor() {
|
int32_t initI2CSensor()
|
||||||
|
{
|
||||||
if (!status) {
|
if (!status) {
|
||||||
LOG_WARN("Could not connect to detected %s sensor.\n Removing from nodeTelemetrySensorsMap.\n", sensorName);
|
LOG_WARN("Could not connect to detected %s sensor.\n Removing from nodeTelemetrySensorsMap.\n", sensorName);
|
||||||
nodeTelemetrySensorsMap[sensorType] = 0;
|
nodeTelemetrySensorsMap[sensorType] = 0;
|
||||||
@@ -32,9 +33,7 @@ class TelemetrySensor
|
|||||||
virtual void setup();
|
virtual void setup();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bool hasSensor() {
|
bool hasSensor() { return sensorType < sizeof(nodeTelemetrySensorsMap) && nodeTelemetrySensorsMap[sensorType] > 0; }
|
||||||
return sensorType < sizeof(nodeTelemetrySensorsMap) && nodeTelemetrySensorsMap[sensorType] > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual int32_t runOnce() = 0;
|
virtual int32_t runOnce() = 0;
|
||||||
virtual bool getMetrics(Telemetry *measurement) = 0;
|
virtual bool getMetrics(Telemetry *measurement) = 0;
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
#include "airtime.h"
|
#include "airtime.h"
|
||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
#include "mesh-pb-constants.h"
|
#include "mesh-pb-constants.h"
|
||||||
#include "mesh/generated/storeforward.pb.h"
|
#include "mesh/generated/meshtastic/storeforward.pb.h"
|
||||||
#include "modules/ModuleDev.h"
|
#include "modules/ModuleDev.h"
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
@@ -63,7 +63,8 @@ void StoreForwardModule::populatePSRAM()
|
|||||||
https://learn.upesy.com/en/programmation/psram.html#psram-tab
|
https://learn.upesy.com/en/programmation/psram.html#psram-tab
|
||||||
*/
|
*/
|
||||||
|
|
||||||
LOG_DEBUG("*** Before PSRAM initilization: heap %d/%d PSRAM %d/%d\n", ESP.getFreeHeap(), ESP.getHeapSize(), ESP.getFreePsram(), ESP.getPsramSize());
|
LOG_DEBUG("*** Before PSRAM initilization: heap %d/%d PSRAM %d/%d\n", ESP.getFreeHeap(), ESP.getHeapSize(),
|
||||||
|
ESP.getFreePsram(), ESP.getPsramSize());
|
||||||
|
|
||||||
this->packetHistoryTXQueue =
|
this->packetHistoryTXQueue =
|
||||||
static_cast<PacketHistoryStruct *>(ps_calloc(this->historyReturnMax, sizeof(PacketHistoryStruct)));
|
static_cast<PacketHistoryStruct *>(ps_calloc(this->historyReturnMax, sizeof(PacketHistoryStruct)));
|
||||||
@@ -76,7 +77,8 @@ void StoreForwardModule::populatePSRAM()
|
|||||||
|
|
||||||
this->packetHistory = static_cast<PacketHistoryStruct *>(ps_calloc(numberOfPackets, sizeof(PacketHistoryStruct)));
|
this->packetHistory = static_cast<PacketHistoryStruct *>(ps_calloc(numberOfPackets, sizeof(PacketHistoryStruct)));
|
||||||
|
|
||||||
LOG_DEBUG("*** After PSRAM initilization: heap %d/%d PSRAM %d/%d\n", ESP.getFreeHeap(), ESP.getHeapSize(), ESP.getFreePsram(), ESP.getPsramSize());
|
LOG_DEBUG("*** After PSRAM initilization: heap %d/%d PSRAM %d/%d\n", ESP.getFreeHeap(), ESP.getHeapSize(), ESP.getFreePsram(),
|
||||||
|
ESP.getPsramSize());
|
||||||
LOG_DEBUG("*** numberOfPackets for packetHistory - %u\n", numberOfPackets);
|
LOG_DEBUG("*** numberOfPackets for packetHistory - %u\n", numberOfPackets);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -296,123 +298,125 @@ bool StoreForwardModule::handleReceivedProtobuf(const MeshPacket &mp, StoreAndFo
|
|||||||
requests++;
|
requests++;
|
||||||
|
|
||||||
switch (p->rr) {
|
switch (p->rr) {
|
||||||
case StoreAndForward_RequestResponse_CLIENT_ERROR:
|
case StoreAndForward_RequestResponse_CLIENT_ERROR:
|
||||||
case StoreAndForward_RequestResponse_CLIENT_ABORT:
|
case StoreAndForward_RequestResponse_CLIENT_ABORT:
|
||||||
if(is_server) {
|
if (is_server) {
|
||||||
// stop sending stuff, the client wants to abort or has another error
|
// stop sending stuff, the client wants to abort or has another error
|
||||||
if ((this->busy) && (this->busyTo == getFrom(&mp))) {
|
if ((this->busy) && (this->busyTo == getFrom(&mp))) {
|
||||||
LOG_ERROR("*** Client in ERROR or ABORT requested\n");
|
LOG_ERROR("*** Client in ERROR or ABORT requested\n");
|
||||||
this->packetHistoryTXQueue_index = 0;
|
this->packetHistoryTXQueue_index = 0;
|
||||||
this->busy = false;
|
this->busy = false;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case StoreAndForward_RequestResponse_CLIENT_HISTORY:
|
case StoreAndForward_RequestResponse_CLIENT_HISTORY:
|
||||||
if(is_server) {
|
if (is_server) {
|
||||||
requests_history++;
|
requests_history++;
|
||||||
LOG_INFO("*** Client Request to send HISTORY\n");
|
LOG_INFO("*** Client Request to send HISTORY\n");
|
||||||
// Send the last 60 minutes of messages.
|
// Send the last 60 minutes of messages.
|
||||||
if (this->busy) {
|
if (this->busy) {
|
||||||
storeForwardModule->sendMessage(getFrom(&mp), StoreAndForward_RequestResponse_ROUTER_BUSY);
|
storeForwardModule->sendMessage(getFrom(&mp), StoreAndForward_RequestResponse_ROUTER_BUSY);
|
||||||
LOG_INFO("*** S&F - Busy. Try again shortly.\n");
|
LOG_INFO("*** S&F - Busy. Try again shortly.\n");
|
||||||
|
} else {
|
||||||
|
if ((p->which_variant == StoreAndForward_history_tag) && (p->variant.history.window > 0)) {
|
||||||
|
storeForwardModule->historySend(p->variant.history.window * 60000, getFrom(&mp)); // window is in minutes
|
||||||
} else {
|
} else {
|
||||||
if ((p->which_variant == StoreAndForward_history_tag) && (p->variant.history.window > 0)){
|
storeForwardModule->historySend(historyReturnWindow * 60000, getFrom(&mp)); // defaults to 4 hours
|
||||||
storeForwardModule->historySend(p->variant.history.window * 60000, getFrom(&mp)); // window is in minutes
|
|
||||||
} else {
|
|
||||||
storeForwardModule->historySend(historyReturnWindow * 60000, getFrom(&mp)); // defaults to 4 hours
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case StoreAndForward_RequestResponse_CLIENT_PING:
|
case StoreAndForward_RequestResponse_CLIENT_PING:
|
||||||
if(is_server) {
|
if (is_server) {
|
||||||
LOG_INFO("*** StoreAndForward_RequestResponse_CLIENT_PING\n");
|
LOG_INFO("*** StoreAndForward_RequestResponse_CLIENT_PING\n");
|
||||||
// respond with a ROUTER PONG
|
// respond with a ROUTER PONG
|
||||||
storeForwardModule->sendMessage(getFrom(&mp), StoreAndForward_RequestResponse_ROUTER_PONG);
|
storeForwardModule->sendMessage(getFrom(&mp), StoreAndForward_RequestResponse_ROUTER_PONG);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case StoreAndForward_RequestResponse_CLIENT_PONG:
|
||||||
|
if (is_server) {
|
||||||
|
LOG_INFO("*** StoreAndForward_RequestResponse_CLIENT_PONG\n");
|
||||||
|
// The Client is alive, update NodeDB
|
||||||
|
nodeDB.updateFrom(mp);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case StoreAndForward_RequestResponse_CLIENT_STATS:
|
||||||
|
if (is_server) {
|
||||||
|
LOG_INFO("*** Client Request to send STATS\n");
|
||||||
|
if (this->busy) {
|
||||||
|
storeForwardModule->sendMessage(getFrom(&mp), StoreAndForward_RequestResponse_ROUTER_BUSY);
|
||||||
|
LOG_INFO("*** S&F - Busy. Try again shortly.\n");
|
||||||
|
} else {
|
||||||
|
storeForwardModule->statsSend(getFrom(&mp));
|
||||||
}
|
}
|
||||||
break;
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case StoreAndForward_RequestResponse_CLIENT_PONG:
|
case StoreAndForward_RequestResponse_ROUTER_ERROR:
|
||||||
if(is_server) {
|
case StoreAndForward_RequestResponse_ROUTER_BUSY:
|
||||||
LOG_INFO("*** StoreAndForward_RequestResponse_CLIENT_PONG\n");
|
if (is_client) {
|
||||||
// The Client is alive, update NodeDB
|
LOG_DEBUG("*** StoreAndForward_RequestResponse_ROUTER_BUSY\n");
|
||||||
nodeDB.updateFrom(mp);
|
// retry in messages_saved * packetTimeMax ms
|
||||||
|
retry_delay =
|
||||||
|
millis() + packetHistoryCurrent * packetTimeMax * (StoreAndForward_RequestResponse_ROUTER_ERROR ? 2 : 1);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case StoreAndForward_RequestResponse_ROUTER_PONG:
|
||||||
|
// A router responded, this is equal to receiving a heartbeat
|
||||||
|
case StoreAndForward_RequestResponse_ROUTER_HEARTBEAT:
|
||||||
|
if (is_client) {
|
||||||
|
// register heartbeat and interval
|
||||||
|
if (p->which_variant == StoreAndForward_heartbeat_tag) {
|
||||||
|
heartbeatInterval = p->variant.heartbeat.period;
|
||||||
}
|
}
|
||||||
break;
|
lastHeartbeat = millis();
|
||||||
|
LOG_INFO("*** StoreAndForward Heartbeat received\n");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case StoreAndForward_RequestResponse_CLIENT_STATS:
|
case StoreAndForward_RequestResponse_ROUTER_PING:
|
||||||
if(is_server) {
|
if (is_client) {
|
||||||
LOG_INFO("*** Client Request to send STATS\n");
|
LOG_DEBUG("*** StoreAndForward_RequestResponse_ROUTER_PING\n");
|
||||||
if (this->busy) {
|
// respond with a CLIENT PONG
|
||||||
storeForwardModule->sendMessage(getFrom(&mp), StoreAndForward_RequestResponse_ROUTER_BUSY);
|
storeForwardModule->sendMessage(getFrom(&mp), StoreAndForward_RequestResponse_CLIENT_PONG);
|
||||||
LOG_INFO("*** S&F - Busy. Try again shortly.\n");
|
}
|
||||||
} else {
|
break;
|
||||||
storeForwardModule->statsSend(getFrom(&mp));
|
|
||||||
}
|
case StoreAndForward_RequestResponse_ROUTER_STATS:
|
||||||
|
if (is_client) {
|
||||||
|
LOG_DEBUG("*** Router Response STATS\n");
|
||||||
|
// These fields only have informational purpose on a client. Fill them to consume later.
|
||||||
|
if (p->which_variant == StoreAndForward_stats_tag) {
|
||||||
|
this->packetHistoryMax = p->variant.stats.messages_total;
|
||||||
|
this->packetHistoryCurrent = p->variant.stats.messages_saved;
|
||||||
|
this->records = p->variant.stats.messages_max;
|
||||||
|
this->requests = p->variant.stats.requests;
|
||||||
|
this->requests_history = p->variant.stats.requests_history;
|
||||||
|
this->heartbeat = p->variant.stats.heartbeat;
|
||||||
|
this->historyReturnMax = p->variant.stats.return_max;
|
||||||
|
this->historyReturnWindow = p->variant.stats.return_window;
|
||||||
}
|
}
|
||||||
break;
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case StoreAndForward_RequestResponse_ROUTER_ERROR:
|
case StoreAndForward_RequestResponse_ROUTER_HISTORY:
|
||||||
case StoreAndForward_RequestResponse_ROUTER_BUSY:
|
if (is_client) {
|
||||||
if(is_client) {
|
// These fields only have informational purpose on a client. Fill them to consume later.
|
||||||
LOG_DEBUG("*** StoreAndForward_RequestResponse_ROUTER_BUSY\n");
|
if (p->which_variant == StoreAndForward_history_tag) {
|
||||||
// retry in messages_saved * packetTimeMax ms
|
this->historyReturnWindow = p->variant.history.window / 60000;
|
||||||
retry_delay = millis() + packetHistoryCurrent * packetTimeMax * (StoreAndForward_RequestResponse_ROUTER_ERROR ? 2 : 1);
|
LOG_INFO("*** Router Response HISTORY - Sending %d messages from last %d minutes\n",
|
||||||
|
p->variant.history.history_messages, this->historyReturnWindow);
|
||||||
}
|
}
|
||||||
break;
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case StoreAndForward_RequestResponse_ROUTER_PONG:
|
default:
|
||||||
// A router responded, this is equal to receiving a heartbeat
|
assert(0); // unexpected state
|
||||||
case StoreAndForward_RequestResponse_ROUTER_HEARTBEAT:
|
|
||||||
if(is_client) {
|
|
||||||
// register heartbeat and interval
|
|
||||||
if (p->which_variant == StoreAndForward_heartbeat_tag) {
|
|
||||||
heartbeatInterval = p->variant.heartbeat.period;
|
|
||||||
}
|
|
||||||
lastHeartbeat = millis();
|
|
||||||
LOG_INFO("*** StoreAndForward Heartbeat received\n");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case StoreAndForward_RequestResponse_ROUTER_PING:
|
|
||||||
if(is_client) {
|
|
||||||
LOG_DEBUG("*** StoreAndForward_RequestResponse_ROUTER_PING\n");
|
|
||||||
// respond with a CLIENT PONG
|
|
||||||
storeForwardModule->sendMessage(getFrom(&mp), StoreAndForward_RequestResponse_CLIENT_PONG);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case StoreAndForward_RequestResponse_ROUTER_STATS:
|
|
||||||
if(is_client) {
|
|
||||||
LOG_DEBUG("*** Router Response STATS\n");
|
|
||||||
// These fields only have informational purpose on a client. Fill them to consume later.
|
|
||||||
if (p->which_variant == StoreAndForward_stats_tag) {
|
|
||||||
this->packetHistoryMax = p->variant.stats.messages_total;
|
|
||||||
this->packetHistoryCurrent = p->variant.stats.messages_saved;
|
|
||||||
this->records = p->variant.stats.messages_max;
|
|
||||||
this->requests = p->variant.stats.requests;
|
|
||||||
this->requests_history = p->variant.stats.requests_history;
|
|
||||||
this->heartbeat = p->variant.stats.heartbeat;
|
|
||||||
this->historyReturnMax = p->variant.stats.return_max;
|
|
||||||
this->historyReturnWindow = p->variant.stats.return_window;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case StoreAndForward_RequestResponse_ROUTER_HISTORY:
|
|
||||||
if(is_client) {
|
|
||||||
// These fields only have informational purpose on a client. Fill them to consume later.
|
|
||||||
if (p->which_variant == StoreAndForward_history_tag) {
|
|
||||||
this->historyReturnWindow = p->variant.history.window / 60000;
|
|
||||||
LOG_INFO("*** Router Response HISTORY - Sending %d messages from last %d minutes\n", p->variant.history.history_messages, this->historyReturnWindow);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
assert(0); // unexpected state
|
|
||||||
}
|
}
|
||||||
return true; // There's no need for others to look at this message.
|
return true; // There's no need for others to look at this message.
|
||||||
}
|
}
|
||||||
@@ -437,7 +441,8 @@ StoreForwardModule::StoreForwardModule()
|
|||||||
if (moduleConfig.store_forward.enabled) {
|
if (moduleConfig.store_forward.enabled) {
|
||||||
|
|
||||||
// Router
|
// Router
|
||||||
if ((config.device.role == Config_DeviceConfig_Role_ROUTER) || (config.device.role == Config_DeviceConfig_Role_ROUTER_CLIENT)) {
|
if ((config.device.role == Config_DeviceConfig_Role_ROUTER) ||
|
||||||
|
(config.device.role == Config_DeviceConfig_Role_ROUTER_CLIENT)) {
|
||||||
LOG_INFO("*** Initializing Store & Forward Module in Router mode\n");
|
LOG_INFO("*** Initializing Store & Forward Module in Router mode\n");
|
||||||
if (ESP.getPsramSize() > 0) {
|
if (ESP.getPsramSize() > 0) {
|
||||||
if (ESP.getFreePsram() >= 1024 * 1024) {
|
if (ESP.getFreePsram() >= 1024 * 1024) {
|
||||||
@@ -474,7 +479,8 @@ StoreForwardModule::StoreForwardModule()
|
|||||||
|
|
||||||
// Client
|
// Client
|
||||||
}
|
}
|
||||||
if ((config.device.role == Config_DeviceConfig_Role_CLIENT) || (config.device.role == Config_DeviceConfig_Role_ROUTER_CLIENT)) {
|
if ((config.device.role == Config_DeviceConfig_Role_CLIENT) ||
|
||||||
|
(config.device.role == Config_DeviceConfig_Role_ROUTER_CLIENT)) {
|
||||||
is_client = true;
|
is_client = true;
|
||||||
LOG_INFO("*** Initializing Store & Forward Module in Client mode\n");
|
LOG_INFO("*** Initializing Store & Forward Module in Client mode\n");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#include "ProtobufModule.h"
|
#include "ProtobufModule.h"
|
||||||
#include "concurrency/OSThread.h"
|
#include "concurrency/OSThread.h"
|
||||||
#include "mesh/generated/storeforward.pb.h"
|
#include "mesh/generated/meshtastic/storeforward.pb.h"
|
||||||
|
|
||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
@@ -66,12 +66,12 @@ class StoreForwardModule : private concurrency::OSThread, public ProtobufModule<
|
|||||||
*/
|
*/
|
||||||
virtual bool wantPacket(const MeshPacket *p) override
|
virtual bool wantPacket(const MeshPacket *p) override
|
||||||
{
|
{
|
||||||
switch(p->decoded.portnum) {
|
switch (p->decoded.portnum) {
|
||||||
case PortNum_TEXT_MESSAGE_APP:
|
case PortNum_TEXT_MESSAGE_APP:
|
||||||
case PortNum_STORE_FORWARD_APP:
|
case PortNum_STORE_FORWARD_APP:
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,10 +79,10 @@ class StoreForwardModule : private concurrency::OSThread, public ProtobufModule<
|
|||||||
void populatePSRAM();
|
void populatePSRAM();
|
||||||
|
|
||||||
// S&F Defaults
|
// S&F Defaults
|
||||||
uint32_t historyReturnMax = 250; // 250 records
|
uint32_t historyReturnMax = 250; // 250 records
|
||||||
uint32_t historyReturnWindow = 240; // 4 hours
|
uint32_t historyReturnWindow = 240; // 4 hours
|
||||||
uint32_t records = 0; // Calculated
|
uint32_t records = 0; // Calculated
|
||||||
bool heartbeat = false; // No heartbeat.
|
bool heartbeat = false; // No heartbeat.
|
||||||
|
|
||||||
// stats
|
// stats
|
||||||
uint32_t requests = 0;
|
uint32_t requests = 0;
|
||||||
@@ -100,7 +100,6 @@ class StoreForwardModule : private concurrency::OSThread, public ProtobufModule<
|
|||||||
*/
|
*/
|
||||||
virtual ProcessMessage handleReceived(const MeshPacket &mp) override;
|
virtual ProcessMessage handleReceived(const MeshPacket &mp) override;
|
||||||
virtual bool handleReceivedProtobuf(const MeshPacket &mp, StoreAndForward *p);
|
virtual bool handleReceivedProtobuf(const MeshPacket &mp, StoreAndForward *p);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern StoreForwardModule *storeForwardModule;
|
extern StoreForwardModule *storeForwardModule;
|
||||||
|
|||||||
+45
-25
@@ -5,15 +5,15 @@
|
|||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "mesh/Channels.h"
|
#include "mesh/Channels.h"
|
||||||
#include "mesh/Router.h"
|
#include "mesh/Router.h"
|
||||||
#include "mesh/generated/mqtt.pb.h"
|
#include "mesh/generated/meshtastic/mqtt.pb.h"
|
||||||
#include "mesh/generated/telemetry.pb.h"
|
#include "mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
#include "mesh/http/WiFiAPClient.h"
|
#include "mesh/http/WiFiAPClient.h"
|
||||||
#include "sleep.h"
|
#include "sleep.h"
|
||||||
#if HAS_WIFI
|
#if HAS_WIFI
|
||||||
#include <WiFi.h>
|
#include <WiFi.h>
|
||||||
#endif
|
#endif
|
||||||
#include <assert.h>
|
|
||||||
#include "mqtt/JSON.h"
|
#include "mqtt/JSON.h"
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
MQTT *mqtt;
|
MQTT *mqtt;
|
||||||
|
|
||||||
@@ -55,11 +55,15 @@ void MQTT::onPublish(char *topic, byte *payload, unsigned int length)
|
|||||||
}
|
}
|
||||||
LOG_DEBUG("Looking for Channel name: %s\n", ptr);
|
LOG_DEBUG("Looking for Channel name: %s\n", ptr);
|
||||||
Channel sendChannel = channels.getByName(ptr);
|
Channel sendChannel = channels.getByName(ptr);
|
||||||
LOG_DEBUG("Found Channel name: %s (Index %d)\n", channels.getGlobalId(sendChannel.settings.channel_num), sendChannel.settings.channel_num);
|
LOG_DEBUG("Found Channel name: %s (Index %d)\n", channels.getGlobalId(sendChannel.settings.channel_num),
|
||||||
|
sendChannel.settings.channel_num);
|
||||||
|
|
||||||
if ((json.find("sender") != json.end()) && (json.find("payload") != json.end()) && (json.find("type") != json.end()) && json["type"]->IsString() && (json["type"]->AsString().compare("sendtext") == 0)) {
|
if ((json.find("sender") != json.end()) && (json.find("payload") != json.end()) &&
|
||||||
|
(json.find("type") != json.end()) && json["type"]->IsString() &&
|
||||||
|
(json["type"]->AsString().compare("sendtext") == 0)) {
|
||||||
// this is a valid envelope
|
// this is a valid envelope
|
||||||
if (json["payload"]->IsString() && json["type"]->IsString() && (json["sender"]->AsString().compare(owner.id) != 0)) {
|
if (json["payload"]->IsString() && json["type"]->IsString() &&
|
||||||
|
(json["sender"]->AsString().compare(owner.id) != 0)) {
|
||||||
std::string jsonPayloadStr = json["payload"]->AsString();
|
std::string jsonPayloadStr = json["payload"]->AsString();
|
||||||
LOG_INFO("JSON payload %s, length %u\n", jsonPayloadStr.c_str(), jsonPayloadStr.length());
|
LOG_INFO("JSON payload %s, length %u\n", jsonPayloadStr.c_str(), jsonPayloadStr.length());
|
||||||
|
|
||||||
@@ -77,16 +81,20 @@ void MQTT::onPublish(char *topic, byte *payload, unsigned int length)
|
|||||||
LOG_WARN("Received MQTT json payload too long, dropping\n");
|
LOG_WARN("Received MQTT json payload too long, dropping\n");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
LOG_WARN("Received MQTT json payload on channel %s, but downlink is disabled, dropping\n", sendChannel.settings.name);
|
LOG_WARN("Received MQTT json payload on channel %s, but downlink is disabled, dropping\n",
|
||||||
|
sendChannel.settings.name);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
LOG_DEBUG("JSON Ignoring downlink message we originally sent.\n");
|
LOG_DEBUG("JSON Ignoring downlink message we originally sent.\n");
|
||||||
}
|
}
|
||||||
} else if ((json.find("sender") != json.end()) && (json.find("payload") != json.end()) && (json.find("type") != json.end()) && json["type"]->IsString() && (json["type"]->AsString().compare("sendposition") == 0)) {
|
} else if ((json.find("sender") != json.end()) && (json.find("payload") != json.end()) &&
|
||||||
//invent the "sendposition" type for a valid envelope
|
(json.find("type") != json.end()) && json["type"]->IsString() &&
|
||||||
if (json["payload"]->IsObject() && json["type"]->IsString() && (json["sender"]->AsString().compare(owner.id) != 0)) {
|
(json["type"]->AsString().compare("sendposition") == 0)) {
|
||||||
|
// invent the "sendposition" type for a valid envelope
|
||||||
|
if (json["payload"]->IsObject() && json["type"]->IsString() &&
|
||||||
|
(json["sender"]->AsString().compare(owner.id) != 0)) {
|
||||||
JSONObject posit;
|
JSONObject posit;
|
||||||
posit = json["payload"]->AsObject(); //get nested JSON Position
|
posit = json["payload"]->AsObject(); // get nested JSON Position
|
||||||
Position pos = Position_init_default;
|
Position pos = Position_init_default;
|
||||||
pos.latitude_i = posit["latitude_i"]->AsNumber();
|
pos.latitude_i = posit["latitude_i"]->AsNumber();
|
||||||
pos.longitude_i = posit["longitude_i"]->AsNumber();
|
pos.longitude_i = posit["longitude_i"]->AsNumber();
|
||||||
@@ -98,15 +106,17 @@ void MQTT::onPublish(char *topic, byte *payload, unsigned int length)
|
|||||||
p->decoded.portnum = PortNum_POSITION_APP;
|
p->decoded.portnum = PortNum_POSITION_APP;
|
||||||
p->channel = sendChannel.settings.channel_num;
|
p->channel = sendChannel.settings.channel_num;
|
||||||
if (sendChannel.settings.downlink_enabled) {
|
if (sendChannel.settings.downlink_enabled) {
|
||||||
p->decoded.payload.size = pb_encode_to_bytes(p->decoded.payload.bytes, sizeof(p->decoded.payload.bytes), &Position_msg, &pos); //make the Data protobuf from position
|
p->decoded.payload.size = pb_encode_to_bytes(p->decoded.payload.bytes, sizeof(p->decoded.payload.bytes),
|
||||||
|
&Position_msg, &pos); // make the Data protobuf from position
|
||||||
service.sendToMesh(p, RX_SRC_LOCAL);
|
service.sendToMesh(p, RX_SRC_LOCAL);
|
||||||
} else {
|
} else {
|
||||||
LOG_WARN("Received MQTT json payload on channel %s, but downlink is disabled, dropping\n", sendChannel.settings.name);
|
LOG_WARN("Received MQTT json payload on channel %s, but downlink is disabled, dropping\n",
|
||||||
|
sendChannel.settings.name);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
LOG_DEBUG("JSON Ignoring downlink message we originally sent.\n");
|
LOG_DEBUG("JSON Ignoring downlink message we originally sent.\n");
|
||||||
}
|
}
|
||||||
} else{
|
} else {
|
||||||
LOG_ERROR("JSON Received payload on MQTT but not a valid envelope\n");
|
LOG_ERROR("JSON Received payload on MQTT but not a valid envelope\n");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -118,7 +128,7 @@ void MQTT::onPublish(char *topic, byte *payload, unsigned int length)
|
|||||||
if (!pb_decode_from_bytes(payload, length, &ServiceEnvelope_msg, &e)) {
|
if (!pb_decode_from_bytes(payload, length, &ServiceEnvelope_msg, &e)) {
|
||||||
LOG_ERROR("Invalid MQTT service envelope, topic %s, len %u!\n", topic, length);
|
LOG_ERROR("Invalid MQTT service envelope, topic %s, len %u!\n", topic, length);
|
||||||
return;
|
return;
|
||||||
}else {
|
} else {
|
||||||
if (strcmp(e.gateway_id, owner.id) == 0)
|
if (strcmp(e.gateway_id, owner.id) == 0)
|
||||||
LOG_INFO("Ignoring downlink message we originally sent.\n");
|
LOG_INFO("Ignoring downlink message we originally sent.\n");
|
||||||
else {
|
else {
|
||||||
@@ -148,7 +158,7 @@ void mqttInit()
|
|||||||
|
|
||||||
MQTT::MQTT() : concurrency::OSThread("mqtt"), pubSub(mqttClient), mqttQueue(MAX_MQTT_QUEUE)
|
MQTT::MQTT() : concurrency::OSThread("mqtt"), pubSub(mqttClient), mqttQueue(MAX_MQTT_QUEUE)
|
||||||
{
|
{
|
||||||
if(moduleConfig.mqtt.enabled) {
|
if (moduleConfig.mqtt.enabled) {
|
||||||
|
|
||||||
assert(!mqtt);
|
assert(!mqtt);
|
||||||
mqtt = this;
|
mqtt = this;
|
||||||
@@ -192,7 +202,8 @@ void MQTT::reconnect()
|
|||||||
pubSub.setServer(serverAddr, serverPort);
|
pubSub.setServer(serverAddr, serverPort);
|
||||||
pubSub.setBufferSize(512);
|
pubSub.setBufferSize(512);
|
||||||
|
|
||||||
LOG_INFO("Connecting to MQTT server %s, port: %d, username: %s, password: %s\n", serverAddr, serverPort, mqttUsername, mqttPassword);
|
LOG_INFO("Connecting to MQTT server %s, port: %d, username: %s, password: %s\n", serverAddr, serverPort, mqttUsername,
|
||||||
|
mqttPassword);
|
||||||
auto myStatus = (statusTopic + owner.id);
|
auto myStatus = (statusTopic + owner.id);
|
||||||
bool connected = pubSub.connect(owner.id, mqttUsername, mqttPassword, myStatus.c_str(), 1, true, "offline");
|
bool connected = pubSub.connect(owner.id, mqttUsername, mqttPassword, myStatus.c_str(), 1, true, "offline");
|
||||||
if (connected) {
|
if (connected) {
|
||||||
@@ -208,7 +219,7 @@ void MQTT::reconnect()
|
|||||||
sendSubscriptions();
|
sendSubscriptions();
|
||||||
} else {
|
} else {
|
||||||
#if HAS_WIFI && !defined(ARCH_PORTDUINO)
|
#if HAS_WIFI && !defined(ARCH_PORTDUINO)
|
||||||
LOG_ERROR("Failed to contact MQTT server (%d/5)...\n",reconnectCount + 1);
|
LOG_ERROR("Failed to contact MQTT server (%d/5)...\n", reconnectCount + 1);
|
||||||
if (reconnectCount >= 4) {
|
if (reconnectCount >= 4) {
|
||||||
needReconnect = true;
|
needReconnect = true;
|
||||||
wifiReconnect->setIntervalFromNow(0);
|
wifiReconnect->setIntervalFromNow(0);
|
||||||
@@ -267,7 +278,7 @@ bool MQTT::wantsLink() const
|
|||||||
|
|
||||||
int32_t MQTT::runOnce()
|
int32_t MQTT::runOnce()
|
||||||
{
|
{
|
||||||
if(!moduleConfig.mqtt.enabled) {
|
if (!moduleConfig.mqtt.enabled) {
|
||||||
return disable();
|
return disable();
|
||||||
}
|
}
|
||||||
bool wantConnection = wantsLink();
|
bool wantConnection = wantsLink();
|
||||||
@@ -277,7 +288,8 @@ int32_t MQTT::runOnce()
|
|||||||
if (wantConnection) {
|
if (wantConnection) {
|
||||||
reconnect();
|
reconnect();
|
||||||
|
|
||||||
// If we succeeded, empty the queue one by one and start reading rapidly, else try again in 30 seconds (TCP connections are EXPENSIVE so try rarely)
|
// If we succeeded, empty the queue one by one and start reading rapidly, else try again in 30 seconds (TCP
|
||||||
|
// connections are EXPENSIVE so try rarely)
|
||||||
if (pubSub.connected()) {
|
if (pubSub.connected()) {
|
||||||
if (!mqttQueue.isEmpty()) {
|
if (!mqttQueue.isEmpty()) {
|
||||||
// FIXME - this size calculation is super sloppy, but it will go away once we dynamically alloc meshpackets
|
// FIXME - this size calculation is super sloppy, but it will go away once we dynamically alloc meshpackets
|
||||||
@@ -295,7 +307,8 @@ int32_t MQTT::runOnce()
|
|||||||
auto jsonString = this->downstreamPacketToJson(env->packet);
|
auto jsonString = this->downstreamPacketToJson(env->packet);
|
||||||
if (jsonString.length() != 0) {
|
if (jsonString.length() != 0) {
|
||||||
String topicJson = jsonTopic + env->channel_id + "/" + owner.id;
|
String topicJson = jsonTopic + env->channel_id + "/" + owner.id;
|
||||||
LOG_INFO("JSON publish message to %s, %u bytes: %s\n", topicJson.c_str(), jsonString.length(), jsonString.c_str());
|
LOG_INFO("JSON publish message to %s, %u bytes: %s\n", topicJson.c_str(), jsonString.length(),
|
||||||
|
jsonString.c_str());
|
||||||
pubSub.publish(topicJson.c_str(), jsonString.c_str(), false);
|
pubSub.publish(topicJson.c_str(), jsonString.c_str(), false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -348,7 +361,8 @@ void MQTT::onSend(const MeshPacket &mp, ChannelIndex chIndex)
|
|||||||
auto jsonString = this->downstreamPacketToJson((MeshPacket *)&mp);
|
auto jsonString = this->downstreamPacketToJson((MeshPacket *)&mp);
|
||||||
if (jsonString.length() != 0) {
|
if (jsonString.length() != 0) {
|
||||||
String topicJson = jsonTopic + channelId + "/" + owner.id;
|
String topicJson = jsonTopic + channelId + "/" + owner.id;
|
||||||
LOG_INFO("JSON publish message to %s, %u bytes: %s\n", topicJson.c_str(), jsonString.length(), jsonString.c_str());
|
LOG_INFO("JSON publish message to %s, %u bytes: %s\n", topicJson.c_str(), jsonString.length(),
|
||||||
|
jsonString.c_str());
|
||||||
pubSub.publish(topicJson.c_str(), jsonString.c_str(), false);
|
pubSub.publish(topicJson.c_str(), jsonString.c_str(), false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -453,11 +467,17 @@ std::string MQTT::downstreamPacketToJson(MeshPacket *mp)
|
|||||||
memset(&scratch, 0, sizeof(scratch));
|
memset(&scratch, 0, sizeof(scratch));
|
||||||
if (pb_decode_from_bytes(mp->decoded.payload.bytes, mp->decoded.payload.size, &Position_msg, &scratch)) {
|
if (pb_decode_from_bytes(mp->decoded.payload.bytes, mp->decoded.payload.size, &Position_msg, &scratch)) {
|
||||||
decoded = &scratch;
|
decoded = &scratch;
|
||||||
if((int)decoded->time){msgPayload["time"] = new JSONValue((int)decoded->time);}
|
if ((int)decoded->time) {
|
||||||
if ((int)decoded->timestamp){msgPayload["timestamp"] = new JSONValue((int)decoded->timestamp);}
|
msgPayload["time"] = new JSONValue((int)decoded->time);
|
||||||
|
}
|
||||||
|
if ((int)decoded->timestamp) {
|
||||||
|
msgPayload["timestamp"] = new JSONValue((int)decoded->timestamp);
|
||||||
|
}
|
||||||
msgPayload["latitude_i"] = new JSONValue((int)decoded->latitude_i);
|
msgPayload["latitude_i"] = new JSONValue((int)decoded->latitude_i);
|
||||||
msgPayload["longitude_i"] = new JSONValue((int)decoded->longitude_i);
|
msgPayload["longitude_i"] = new JSONValue((int)decoded->longitude_i);
|
||||||
if((int)decoded->altitude){msgPayload["altitude"] = new JSONValue((int)decoded->altitude);}
|
if ((int)decoded->altitude) {
|
||||||
|
msgPayload["altitude"] = new JSONValue((int)decoded->altitude);
|
||||||
|
}
|
||||||
jsonObj["payload"] = new JSONValue(msgPayload);
|
jsonObj["payload"] = new JSONValue(msgPayload);
|
||||||
} else {
|
} else {
|
||||||
LOG_ERROR("Error decoding protobuf for position message!\n");
|
LOG_ERROR("Error decoding protobuf for position message!\n");
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
#include "concurrency/OSThread.h"
|
#include "concurrency/OSThread.h"
|
||||||
#include "mesh/Channels.h"
|
#include "mesh/Channels.h"
|
||||||
#include "mesh/generated/mqtt.pb.h"
|
#include "mesh/generated/meshtastic/mqtt.pb.h"
|
||||||
#include <PubSubClient.h>
|
#include <PubSubClient.h>
|
||||||
#if HAS_WIFI
|
#if HAS_WIFI
|
||||||
#include <WiFiClient.h>
|
#include <WiFiClient.h>
|
||||||
|
|||||||
+221
@@ -0,0 +1,221 @@
|
|||||||
|
/***********************************************************************************************************************
|
||||||
|
* based on XMODEM implementation by Georges Menie (www.menie.org)
|
||||||
|
***********************************************************************************************************************
|
||||||
|
* Copyright 2001-2019 Georges Menie (www.menie.org)
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Adapted for protobuf encapsulation. this is not really Xmodem any more.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* * Neither the name of the University of California, Berkeley nor the
|
||||||
|
* names of its contributors may be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
**********************************************************************************************************************/
|
||||||
|
|
||||||
|
#include "xmodem.h"
|
||||||
|
|
||||||
|
XModemAdapter xModem;
|
||||||
|
|
||||||
|
XModemAdapter::XModemAdapter()
|
||||||
|
{
|
||||||
|
xmodemStore = (XModem *)malloc(XModem_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned short XModemAdapter::crc16_ccitt(const pb_byte_t *buffer, int length)
|
||||||
|
{
|
||||||
|
unsigned short crc16 = 0;
|
||||||
|
while (length != 0) {
|
||||||
|
crc16 = (unsigned char)(crc16 >> 8) | (crc16 << 8);
|
||||||
|
crc16 ^= *buffer;
|
||||||
|
crc16 ^= (unsigned char)(crc16 & 0xff) >> 4;
|
||||||
|
crc16 ^= (crc16 << 8) << 4;
|
||||||
|
crc16 ^= ((crc16 & 0xff) << 4) << 1;
|
||||||
|
buffer++;
|
||||||
|
length--;
|
||||||
|
}
|
||||||
|
|
||||||
|
return crc16;
|
||||||
|
}
|
||||||
|
|
||||||
|
int XModemAdapter::check(const pb_byte_t *buf, int sz, unsigned short tcrc)
|
||||||
|
{
|
||||||
|
unsigned short crc = crc16_ccitt(buf, sz);
|
||||||
|
if (crc == tcrc)
|
||||||
|
return 1;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void XModemAdapter::sendControl(XModem_Control c)
|
||||||
|
{
|
||||||
|
memset(xmodemStore, 0, XModem_size);
|
||||||
|
xmodemStore->control = c;
|
||||||
|
LOG_DEBUG("XModem: Notify Sending control %d.\n", c);
|
||||||
|
packetReady.notifyObservers(packetno);
|
||||||
|
}
|
||||||
|
|
||||||
|
XModem *XModemAdapter::getForPhone()
|
||||||
|
{
|
||||||
|
if (xmodemStore) {
|
||||||
|
return xmodemStore;
|
||||||
|
} else {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void XModemAdapter::handlePacket(XModem xmodemPacket)
|
||||||
|
{
|
||||||
|
switch (xmodemPacket.control) {
|
||||||
|
case XModem_Control_SOH:
|
||||||
|
case XModem_Control_STX:
|
||||||
|
if ((xmodemPacket.seq == 0) && !isReceiving && !isTransmitting) {
|
||||||
|
// NULL packet has the destination filename
|
||||||
|
memcpy(filename, &xmodemPacket.buffer.bytes, xmodemPacket.buffer.size);
|
||||||
|
if (xmodemPacket.control == XModem_Control_SOH) { // Receive this file and put to Flash
|
||||||
|
file = FSCom.open(filename, FILE_O_WRITE);
|
||||||
|
if (file) {
|
||||||
|
sendControl(XModem_Control_ACK);
|
||||||
|
isReceiving = true;
|
||||||
|
packetno = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
sendControl(XModem_Control_NAK);
|
||||||
|
isReceiving = false;
|
||||||
|
break;
|
||||||
|
} else { // Transmit this file from Flash
|
||||||
|
LOG_INFO("XModem: Transmitting file %s\n", filename);
|
||||||
|
file = FSCom.open(filename, FILE_O_READ);
|
||||||
|
if (file) {
|
||||||
|
packetno = 1;
|
||||||
|
isTransmitting = true;
|
||||||
|
memset(xmodemStore, 0, XModem_size);
|
||||||
|
xmodemStore->control = XModem_Control_SOH;
|
||||||
|
xmodemStore->seq = packetno;
|
||||||
|
xmodemStore->buffer.size = file.read(xmodemStore->buffer.bytes, sizeof(XModem_buffer_t::bytes));
|
||||||
|
xmodemStore->crc16 = crc16_ccitt(xmodemStore->buffer.bytes, xmodemStore->buffer.size);
|
||||||
|
LOG_DEBUG("XModem: STX Notify Sending packet %d, %d Bytes.\n", packetno, xmodemStore->buffer.size);
|
||||||
|
if (xmodemStore->buffer.size < sizeof(XModem_buffer_t::bytes)) {
|
||||||
|
isEOT = true;
|
||||||
|
// send EOT on next Ack
|
||||||
|
}
|
||||||
|
packetReady.notifyObservers(packetno);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
sendControl(XModem_Control_NAK);
|
||||||
|
isTransmitting = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (isReceiving) {
|
||||||
|
// normal file data packet
|
||||||
|
if ((xmodemPacket.seq == packetno) &&
|
||||||
|
check(xmodemPacket.buffer.bytes, xmodemPacket.buffer.size, xmodemPacket.crc16)) {
|
||||||
|
// valid packet
|
||||||
|
file.write(xmodemPacket.buffer.bytes, xmodemPacket.buffer.size);
|
||||||
|
sendControl(XModem_Control_ACK);
|
||||||
|
packetno++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// invalid packet
|
||||||
|
sendControl(XModem_Control_NAK);
|
||||||
|
break;
|
||||||
|
} else if (isTransmitting) {
|
||||||
|
// just received something weird.
|
||||||
|
sendControl(XModem_Control_CAN);
|
||||||
|
isTransmitting = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case XModem_Control_EOT:
|
||||||
|
// End of transmission
|
||||||
|
sendControl(XModem_Control_ACK);
|
||||||
|
file.close();
|
||||||
|
isReceiving = false;
|
||||||
|
break;
|
||||||
|
case XModem_Control_CAN:
|
||||||
|
// Cancel transmission and remove file
|
||||||
|
sendControl(XModem_Control_ACK);
|
||||||
|
file.close();
|
||||||
|
FSCom.remove(filename);
|
||||||
|
isReceiving = false;
|
||||||
|
break;
|
||||||
|
case XModem_Control_ACK:
|
||||||
|
// Acknowledge Send the next packet
|
||||||
|
if (isTransmitting) {
|
||||||
|
if (isEOT) {
|
||||||
|
sendControl(XModem_Control_EOT);
|
||||||
|
file.close();
|
||||||
|
LOG_INFO("XModem: Finished sending file %s\n", filename);
|
||||||
|
isTransmitting = false;
|
||||||
|
isEOT = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
retrans = MAXRETRANS; // reset retransmit counter
|
||||||
|
packetno++;
|
||||||
|
memset(xmodemStore, 0, XModem_size);
|
||||||
|
xmodemStore->control = XModem_Control_SOH;
|
||||||
|
xmodemStore->seq = packetno;
|
||||||
|
xmodemStore->buffer.size = file.read(xmodemStore->buffer.bytes, sizeof(XModem_buffer_t::bytes));
|
||||||
|
xmodemStore->crc16 = crc16_ccitt(xmodemStore->buffer.bytes, xmodemStore->buffer.size);
|
||||||
|
LOG_DEBUG("XModem: ACK Notify Sending packet %d, %d Bytes.\n", packetno, xmodemStore->buffer.size);
|
||||||
|
if (xmodemStore->buffer.size < sizeof(XModem_buffer_t::bytes)) {
|
||||||
|
isEOT = true;
|
||||||
|
// send EOT on next Ack
|
||||||
|
}
|
||||||
|
packetReady.notifyObservers(packetno);
|
||||||
|
} else {
|
||||||
|
// just received something weird.
|
||||||
|
sendControl(XModem_Control_CAN);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case XModem_Control_NAK:
|
||||||
|
// Negative acknowledge. Send the same buffer again
|
||||||
|
if (isTransmitting) {
|
||||||
|
if (--retrans <= 0) {
|
||||||
|
sendControl(XModem_Control_CAN);
|
||||||
|
file.close();
|
||||||
|
LOG_INFO("XModem: Retransmit timeout, cancelling file %s\n", filename);
|
||||||
|
isTransmitting = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
memset(xmodemStore, 0, XModem_size);
|
||||||
|
xmodemStore->control = XModem_Control_SOH;
|
||||||
|
xmodemStore->seq = packetno;
|
||||||
|
file.seek((packetno - 1) * sizeof(XModem_buffer_t::bytes));
|
||||||
|
xmodemStore->buffer.size = file.read(xmodemStore->buffer.bytes, sizeof(XModem_buffer_t::bytes));
|
||||||
|
xmodemStore->crc16 = crc16_ccitt(xmodemStore->buffer.bytes, xmodemStore->buffer.size);
|
||||||
|
LOG_DEBUG("XModem: NAK Notify Sending packet %d, %d Bytes.\n", packetno, xmodemStore->buffer.size);
|
||||||
|
if (xmodemStore->buffer.size < sizeof(XModem_buffer_t::bytes)) {
|
||||||
|
isEOT = true;
|
||||||
|
// send EOT on next Ack
|
||||||
|
}
|
||||||
|
packetReady.notifyObservers(packetno);
|
||||||
|
} else {
|
||||||
|
// just received something weird.
|
||||||
|
sendControl(XModem_Control_CAN);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// Unknown control character
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
/***********************************************************************************************************************
|
||||||
|
* based on XMODEM implementation by Georges Menie (www.menie.org)
|
||||||
|
***********************************************************************************************************************
|
||||||
|
* Copyright 2001-2019 Georges Menie (www.menie.org)
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Adapted for protobuf encapsulation. this is not really Xmodem any more.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* * Neither the name of the University of California, Berkeley nor the
|
||||||
|
* names of its contributors may be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
**********************************************************************************************************************/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "FSCommon.h"
|
||||||
|
#include "configuration.h"
|
||||||
|
#include "mesh/generated/meshtastic/xmodem.pb.h"
|
||||||
|
|
||||||
|
#define MAXRETRANS 25
|
||||||
|
|
||||||
|
class XModemAdapter
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// Called when we put a fragment in the outgoing memory
|
||||||
|
Observable<uint32_t> packetReady;
|
||||||
|
|
||||||
|
XModemAdapter();
|
||||||
|
|
||||||
|
void handlePacket(XModem xmodemPacket);
|
||||||
|
XModem *getForPhone();
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool isReceiving = false;
|
||||||
|
bool isTransmitting = false;
|
||||||
|
bool isEOT = false;
|
||||||
|
|
||||||
|
int retrans = MAXRETRANS;
|
||||||
|
|
||||||
|
uint16_t packetno = 0;
|
||||||
|
|
||||||
|
#ifdef ARCH_NRF52
|
||||||
|
File file = File(FSCom);
|
||||||
|
#else
|
||||||
|
File file;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
char filename[sizeof(XModem_buffer_t::bytes)] = {0};
|
||||||
|
|
||||||
|
protected:
|
||||||
|
XModem *xmodemStore = NULL;
|
||||||
|
unsigned short crc16_ccitt(const pb_byte_t *buffer, int length);
|
||||||
|
int check(const pb_byte_t *buf, int sz, unsigned short tcrc);
|
||||||
|
void sendControl(XModem_Control c);
|
||||||
|
};
|
||||||
|
|
||||||
|
extern XModemAdapter xModem;
|
||||||
Reference in New Issue
Block a user