From 27a10b395f5a7ae0e6e9884250b7a7518c441b81 Mon Sep 17 00:00:00 2001 From: arduinoGP <115203453+arduionoGP@users.noreply.github.com> Date: Sun, 4 Dec 2022 00:00:43 -0500 Subject: [PATCH 01/27] Update MQTT.cpp (First real try at writing meaningful C++ but it seems to work.) Allows sending JSON Position data from MQTT broker for broadcast to a LORA mesh via gateway device. The new type is "sendposition". Valid envelope looks like: { "sender": "someSender", "type": "sendposition", "payload": { "latitude_i": 399600000, "longitude_i": -862600000, "altitude": 100 } } This complements the "sendtext" type envelope. --- src/mqtt/MQTT.cpp | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/mqtt/MQTT.cpp b/src/mqtt/MQTT.cpp index 8af009ba..414afd7c 100644 --- a/src/mqtt/MQTT.cpp +++ b/src/mqtt/MQTT.cpp @@ -61,7 +61,26 @@ void MQTT::onPublish(char *topic, byte *payload, unsigned int length) } else { DEBUG_MSG("JSON Ignoring downlink message we originally sent.\n"); } - } else { + } 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)) { + //invent the "sendposition" type for a valid envelope + if (json["payload"]->IsObject() && json["type"]->IsString() && (json["sender"]->AsString().compare(owner.id) != 0)) { + JSONObject posit; + posit=json["payload"]->AsObject(); //get nested JSON Position + Position pos =Position_init_default; + pos.latitude_i=posit["latitude_i"]->AsNumber(); + pos.longitude_i=posit["longitude_i"]->AsNumber(); + pos.altitude=posit["altitude"]->AsNumber(); + + // construct protobuf data packet using POSITION, send it to the mesh + MeshPacket *p = router->allocForSending(); + p->decoded.portnum = PortNum_POSITION_APP; + p->decoded.payload.size=pb_encode_to_bytes(p->decoded.payload.bytes,sizeof(p->decoded.payload.bytes),Position_fields, &pos); //make the Data protobuf from position + service.sendToMesh(p, RX_SRC_LOCAL); + + } else { + DEBUG_MSG("JSON Ignoring downlink message we originally sent.\n"); + } + } else{ DEBUG_MSG("JSON Received payload on MQTT but not a valid envelope\n"); } } else { From 31ec2da0e9e17d7f6e0e9a43cfb428c1e076f3f8 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sun, 4 Dec 2022 15:40:28 -0600 Subject: [PATCH 02/27] Text message mode for serial --- src/modules/SerialModule.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/modules/SerialModule.cpp b/src/modules/SerialModule.cpp index 05ed44cd..509b0d67 100644 --- a/src/modules/SerialModule.cpp +++ b/src/modules/SerialModule.cpp @@ -214,7 +214,6 @@ int32_t SerialModule::runOnce() MeshPacket *SerialModuleRadio::allocReply() { - auto reply = allocDataPacket(); // Allocate a packet for sending return reply; @@ -266,7 +265,10 @@ ProcessMessage SerialModuleRadio::handleReceived(const MeshPacket &mp) if (moduleConfig.serial.mode == ModuleConfig_SerialConfig_Serial_Mode_DEFAULT || moduleConfig.serial.mode == ModuleConfig_SerialConfig_Serial_Mode_SIMPLE) { Serial2.printf("%s", p.payload.bytes); - + } else if (moduleConfig.serial.mode == ModuleConfig_SerialConfig_Serial_Mode_TEXTMSG) { + NodeInfo *node = nodeDB.getNode(getFrom(&mp)); + String sender = (node && node->has_user) ? node->user.short_name : "???"; + Serial2.printf("\n%s: %s\n\n", sender, p.payload.bytes); } else if (moduleConfig.serial.mode == ModuleConfig_SerialConfig_Serial_Mode_PROTO) { // TODO this needs to be implemented } else if (moduleConfig.serial.mode == ModuleConfig_SerialConfig_Serial_Mode_NMEA) { From a3a24e02166f0cbde9331b0bd4eaa2a57ce0c655 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sun, 4 Dec 2022 16:03:57 -0600 Subject: [PATCH 03/27] Don't put newlines in the text buffer --- src/modules/SerialModule.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/modules/SerialModule.cpp b/src/modules/SerialModule.cpp index 509b0d67..aaaf3b14 100644 --- a/src/modules/SerialModule.cpp +++ b/src/modules/SerialModule.cpp @@ -268,7 +268,9 @@ ProcessMessage SerialModuleRadio::handleReceived(const MeshPacket &mp) } else if (moduleConfig.serial.mode == ModuleConfig_SerialConfig_Serial_Mode_TEXTMSG) { NodeInfo *node = nodeDB.getNode(getFrom(&mp)); String sender = (node && node->has_user) ? node->user.short_name : "???"; - Serial2.printf("\n%s: %s\n\n", sender, p.payload.bytes); + Serial2.println(); + Serial2.printf("%s: %s", sender, p.payload.bytes); + Serial2.println(); } else if (moduleConfig.serial.mode == ModuleConfig_SerialConfig_Serial_Mode_PROTO) { // TODO this needs to be implemented } else if (moduleConfig.serial.mode == ModuleConfig_SerialConfig_Serial_Mode_NMEA) { From b84c7ae49bdfc1b43771ca5ef438a6778665f22e Mon Sep 17 00:00:00 2001 From: arduinoGP <115203453+arduionoGP@users.noreply.github.com> Date: Sun, 4 Dec 2022 19:41:58 -0500 Subject: [PATCH 04/27] Oops, added time to the Pos --- src/mqtt/MQTT.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mqtt/MQTT.cpp b/src/mqtt/MQTT.cpp index 414afd7c..96135bc3 100644 --- a/src/mqtt/MQTT.cpp +++ b/src/mqtt/MQTT.cpp @@ -70,6 +70,7 @@ void MQTT::onPublish(char *topic, byte *payload, unsigned int length) pos.latitude_i=posit["latitude_i"]->AsNumber(); pos.longitude_i=posit["longitude_i"]->AsNumber(); pos.altitude=posit["altitude"]->AsNumber(); + pos.time=posit["time"]->AsNumber(); // construct protobuf data packet using POSITION, send it to the mesh MeshPacket *p = router->allocForSending(); From aeb9bfa063fd97cae8c4d88188e897b115f8d3d0 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sun, 4 Dec 2022 20:41:00 -0600 Subject: [PATCH 05/27] Return false --- src/PowerFSM.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PowerFSM.cpp b/src/PowerFSM.cpp index dd3992a1..6af5f7f4 100644 --- a/src/PowerFSM.cpp +++ b/src/PowerFSM.cpp @@ -27,7 +27,7 @@ static bool isPowered() 2) If we detect USB power from the power management chip, we must be getting power externally. */ - return !isPowerSavingMode && powerStatus && (!powerStatus->getHasBattery() || powerStatus->getHasUSB()); + return false;//!isPowerSavingMode && powerStatus && (!powerStatus->getHasBattery() || powerStatus->getHasUSB()); } static void sdsEnter() From 183ec2124f537c0e38bb59ae5f9fa0875ce7f15a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Mon, 5 Dec 2022 11:48:46 +0100 Subject: [PATCH 06/27] Add debug output --- src/mesh/RadioLibInterface.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mesh/RadioLibInterface.cpp b/src/mesh/RadioLibInterface.cpp index 56721560..02257665 100644 --- a/src/mesh/RadioLibInterface.cpp +++ b/src/mesh/RadioLibInterface.cpp @@ -386,6 +386,7 @@ ErrorCode RadioLibInterface::send(MeshPacket *p) int res = iface->startTransmit(radiobuf, numbytes); if (res != RADIOLIB_ERR_NONE) { + DEBUG_MSG("startTransmit failed, error=%d\n", res); RECORD_CRITICALERROR(CriticalErrorCode_RADIO_SPI_BUG); // This send failed, but make sure to 'complete' it properly From 1fef6f0656ef4a3e55da8c8b563571a963b0cc53 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Mon, 5 Dec 2022 07:37:01 -0600 Subject: [PATCH 07/27] Clean up on battery shutdown condition --- src/PowerFSMThread.h | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/PowerFSMThread.h b/src/PowerFSMThread.h index 36bee834..f45eec2f 100644 --- a/src/PowerFSMThread.h +++ b/src/PowerFSMThread.h @@ -26,11 +26,9 @@ class PowerFSMThread : public OSThread if (powerStatus->getHasUSB()) { timeLastPowered = millis(); - } else if (config.power.on_battery_shutdown_after_secs > 0 && - millis() > - timeLastPowered + - (1000 * - config.power.on_battery_shutdown_after_secs)) { // shutdown after 30 minutes unpowered + } else if (config.power.on_battery_shutdown_after_secs > 0 && + config.power.on_battery_shutdown_after_secs != UINT32_MAX && + millis() > (timeLastPowered + getConfiguredOrDefaultMs(config.power.on_battery_shutdown_after_secs))) { // shutdown after 30 minutes unpowered powerFSM.trigger(EVENT_SHUTDOWN); } From b14289e97627ac285afe596a6863ccd55eb1dcdb Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Mon, 5 Dec 2022 08:35:54 -0600 Subject: [PATCH 08/27] More cleanup --- .gitignore | 1 + src/PowerFSM.cpp | 9 ++------- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index e9d3cfdf..be3ca339 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,4 @@ __pycache__ venv/ release/ +.vscode/extensions.json diff --git a/src/PowerFSM.cpp b/src/PowerFSM.cpp index 6af5f7f4..5d4d031d 100644 --- a/src/PowerFSM.cpp +++ b/src/PowerFSM.cpp @@ -34,7 +34,7 @@ static void sdsEnter() { DEBUG_MSG("Enter state: SDS\n"); // FIXME - make sure GPS and LORA radio are off first - because we want close to zero current draw - doDeepSleep(config.power.sds_secs * 1000); + doDeepSleep(getConfiguredOrDefaultMs(config.power.sds_secs)); } extern Power *power; @@ -324,11 +324,6 @@ void PowerFSM_setup() powerFSM.add_transition(&stateDARK, &stateDARK, EVENT_CONTACT_FROM_PHONE, NULL, "Contact from phone"); - // each time we get a new update packet make sure we are staying in the ON state so the screen stays awake (also we don't - // shutdown bluetooth if is_router) - powerFSM.add_transition(&stateDARK, &stateON, EVENT_FIRMWARE_UPDATE, NULL, "Got firmware update"); - powerFSM.add_transition(&stateON, &stateON, EVENT_FIRMWARE_UPDATE, NULL, "Got firmware update"); - powerFSM.add_timed_transition(&stateON, &stateDARK, getConfiguredOrDefaultMs(config.display.screen_on_secs, default_screen_on_secs), NULL, "Screen-on timeout"); // On most boards we use light-sleep to be our main state, but on NRF52 we just stay in DARK @@ -348,7 +343,7 @@ void PowerFSM_setup() #endif if (config.power.sds_secs != UINT32_MAX) - powerFSM.add_timed_transition(lowPowerState, &stateSDS, config.power.sds_secs * 1000, NULL, "mesh timeout"); + powerFSM.add_timed_transition(lowPowerState, &stateSDS, getConfiguredOrDefaultMs(config.power.sds_secs), NULL, "mesh timeout"); powerFSM.run_machine(); // run one interation of the state machine, so we run our on enter tasks for the initial DARK state } From 2a84d39e40fbc6909163add2556cf6ae09f8410f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Mon, 5 Dec 2022 16:40:23 +0100 Subject: [PATCH 09/27] Always do battery resampling if we use the ADC. Improves reading a lot. --- src/Power.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/Power.cpp b/src/Power.cpp index af10acb5..dd3ac149 100644 --- a/src/Power.cpp +++ b/src/Power.cpp @@ -102,6 +102,10 @@ class AnalogBatteryLevel : public HasBatteryLevel #define ADC_MULTIPLIER 2.0 #endif +#ifndef BATTERY_SENSE_SAMPLES +#define BATTERY_SENSE_SAMPLES 30 +#endif + #ifdef BATTERY_PIN // Override variant or default ADC_MULTIPLIER if we have the override pref float operativeAdcMultiplier = config.power.adc_multiplier_override > 0 @@ -112,16 +116,12 @@ class AnalogBatteryLevel : public HasBatteryLevel if (millis() - last_read_time_ms > min_read_interval) { last_read_time_ms = millis(); -#ifdef BATTERY_SENSE_SAMPLES //Set the number of samples, it has an effect of increasing sensitivity, especially in complex electromagnetic environment. uint32_t raw = 0; - for(uint32_t i=0; igetBattVoltage() < MIN_BAT_MILLIVOLTS) { low_voltage_counter++; - if (low_voltage_counter > 3) + DEBUG_MSG("Warning RAK4631 Low voltage counter: %d/10\n", low_voltage_counter); + if (low_voltage_counter > 10) powerFSM.trigger(EVENT_LOW_BATTERY); } else { low_voltage_counter = 0; From 0f2a83535944f59367399fff04c46d56b282a44f Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Mon, 5 Dec 2022 10:13:19 -0600 Subject: [PATCH 10/27] Remove hard coded !isPowered --- src/PowerFSM.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PowerFSM.cpp b/src/PowerFSM.cpp index 5d4d031d..46048d46 100644 --- a/src/PowerFSM.cpp +++ b/src/PowerFSM.cpp @@ -27,7 +27,7 @@ static bool isPowered() 2) If we detect USB power from the power management chip, we must be getting power externally. */ - return false;//!isPowerSavingMode && powerStatus && (!powerStatus->getHasBattery() || powerStatus->getHasUSB()); + return !isPowerSavingMode && powerStatus && (!powerStatus->getHasBattery() || powerStatus->getHasUSB()); } static void sdsEnter() From 37f716d27b631d9c801a8c19091a96f916525a0c Mon Sep 17 00:00:00 2001 From: lewishe Date: Tue, 6 Dec 2022 10:58:59 +0800 Subject: [PATCH 11/27] Change tbeams3-core the default USB mode to TinyUSB --- boards/tbeam-s3-core.json | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/boards/tbeam-s3-core.json b/boards/tbeam-s3-core.json index 82d858df..06d93c6a 100644 --- a/boards/tbeam-s3-core.json +++ b/boards/tbeam-s3-core.json @@ -1,6 +1,6 @@ { "build": { - "arduino":{ + "arduino": { "ldscript": "esp32s3_out.ld" }, "core": "esp32", @@ -8,9 +8,7 @@ "-DBOARD_HAS_PSRAM", "-DLILYGO_TBEAM_S3_CORE", "-DARDUINO_USB_CDC_ON_BOOT=1", - "-DARDUINO_USB_DFU_ON_BOOT=1", - "-DARDUINO_USB_MSC_ON_BOOT=1", - "-DARDUINO_USB_MODE=1", + "-DARDUINO_USB_MODE=0", "-DARDUINO_RUNNING_CORE=1", "-DARDUINO_EVENT_RUNNING_CORE=1" ], @@ -45,4 +43,4 @@ }, "url": "http://www.lilygo.cn/", "vendor": "LilyGo" -} +} \ No newline at end of file From 63d73383119e1cd7c3bb04d44435183ab298deeb Mon Sep 17 00:00:00 2001 From: lewishe Date: Tue, 6 Dec 2022 11:01:14 +0800 Subject: [PATCH 12/27] fix tbeams3-core PMU charging cut-off voltage --- src/Power.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Power.cpp b/src/Power.cpp index af10acb5..3dd3d0e8 100644 --- a/src/Power.cpp +++ b/src/Power.cpp @@ -455,6 +455,9 @@ bool Power::axpChipInit() // Set constant current charging current PMU->setChargerConstantCurr(XPOWERS_AXP192_CHG_CUR_450MA); + //Set up the charging voltage + PMU->setChargeTargetVoltage(XPOWERS_AXP192_CHG_VOL_4V2); + } else if (PMU->getChipModel() == XPOWERS_AXP2101) { // t-beam s3 core @@ -507,6 +510,8 @@ bool Power::axpChipInit() //Set the constant current charging current of AXP2101, temporarily use 500mA by default PMU->setChargerConstantCurr(XPOWERS_AXP2101_CHG_CUR_500MA); + //Set up the charging voltage + PMU->setChargeTargetVoltage(XPOWERS_AXP2101_CHG_VOL_4V2); } @@ -560,9 +565,6 @@ bool Power::axpChipInit() DEBUG_MSG("=======================================================================\n"); - //Set up the charging voltage, AXP2101/AXP192 4.2V gear is the same - // XPOWERS_AXP192_CHG_VOL_4V2 = XPOWERS_AXP2101_CHG_VOL_4V2 - PMU->setChargeTargetVoltage(XPOWERS_AXP192_CHG_VOL_4V2); // Set PMU shutdown voltage at 2.6V to maximize battery utilization PMU->setSysPowerDownVoltage(2600); From fc5bf5a68f5b80f038897f8cbbda8c85f6be1a0d Mon Sep 17 00:00:00 2001 From: caveman99 Date: Tue, 6 Dec 2022 13:03:26 +0000 Subject: [PATCH 13/27] [create-pull-request] automated change --- protobufs | 2 +- src/mesh/generated/apponly.pb.h | 2 +- src/mesh/generated/config.pb.h | 9 ++++--- src/mesh/generated/localonly.pb.h | 4 ++-- src/mesh/generated/mesh.pb.h | 4 +++- src/mesh/generated/module_config.pb.h | 34 ++++++++++++++++----------- src/mesh/generated/portnums.pb.h | 3 +++ 7 files changed, 36 insertions(+), 22 deletions(-) diff --git a/protobufs b/protobufs index afa46056..c4c484d9 160000 --- a/protobufs +++ b/protobufs @@ -1 +1 @@ -Subproject commit afa4605699e9ba9e2d0f0407bbc32dcd133f76af +Subproject commit c4c484d9a36b5295e0186ebd7360a8e01ad43ffb diff --git a/src/mesh/generated/apponly.pb.h b/src/mesh/generated/apponly.pb.h index 63f3cf3b..e5e93387 100644 --- a/src/mesh/generated/apponly.pb.h +++ b/src/mesh/generated/apponly.pb.h @@ -54,7 +54,7 @@ extern const pb_msgdesc_t ChannelSet_msg; #define ChannelSet_fields &ChannelSet_msg /* Maximum encoded size of messages (where known) */ -#define ChannelSet_size 582 +#define ChannelSet_size 584 #ifdef __cplusplus } /* extern "C" */ diff --git a/src/mesh/generated/config.pb.h b/src/mesh/generated/config.pb.h index 2d6f3a1d..cdc89664 100644 --- a/src/mesh/generated/config.pb.h +++ b/src/mesh/generated/config.pb.h @@ -126,6 +126,7 @@ typedef struct _Config_LoRaConfig { bool tx_enabled; int8_t tx_power; uint16_t channel_num; + bool override_duty_cycle; pb_size_t ignore_incoming_count; uint32_t ignore_incoming[3]; } Config_LoRaConfig; @@ -235,7 +236,7 @@ extern "C" { #define Config_NetworkConfig_init_default {0, "", "", "", 0, _Config_NetworkConfig_EthMode_MIN, false, Config_NetworkConfig_IpV4Config_init_default} #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} -#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}} +#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_init_zero {0, {Config_DeviceConfig_init_zero}} #define Config_DeviceConfig_init_zero {_Config_DeviceConfig_Role_MIN, 0, 0, 0, 0} @@ -244,7 +245,7 @@ extern "C" { #define Config_NetworkConfig_init_zero {0, "", "", "", 0, _Config_NetworkConfig_EthMode_MIN, false, Config_NetworkConfig_IpV4Config_init_zero} #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} -#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}} +#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} /* Field tags (for use in manual encoding/decoding) */ @@ -274,6 +275,7 @@ extern "C" { #define Config_LoRaConfig_tx_enabled_tag 9 #define Config_LoRaConfig_tx_power_tag 10 #define Config_LoRaConfig_channel_num_tag 11 +#define Config_LoRaConfig_override_duty_cycle_tag 12 #define Config_LoRaConfig_ignore_incoming_tag 103 #define Config_NetworkConfig_IpV4Config_ip_tag 1 #define Config_NetworkConfig_IpV4Config_gateway_tag 2 @@ -407,6 +409,7 @@ X(a, STATIC, SINGULAR, UINT32, hop_limit, 8) \ X(a, STATIC, SINGULAR, BOOL, tx_enabled, 9) \ X(a, STATIC, SINGULAR, INT32, tx_power, 10) \ X(a, STATIC, SINGULAR, UINT32, channel_num, 11) \ +X(a, STATIC, SINGULAR, BOOL, override_duty_cycle, 12) \ X(a, STATIC, REPEATED, UINT32, ignore_incoming, 103) #define Config_LoRaConfig_CALLBACK NULL #define Config_LoRaConfig_DEFAULT NULL @@ -443,7 +446,7 @@ extern const pb_msgdesc_t Config_BluetoothConfig_msg; #define Config_BluetoothConfig_size 10 #define Config_DeviceConfig_size 18 #define Config_DisplayConfig_size 22 -#define Config_LoRaConfig_size 68 +#define Config_LoRaConfig_size 70 #define Config_NetworkConfig_IpV4Config_size 20 #define Config_NetworkConfig_size 161 #define Config_PositionConfig_size 42 diff --git a/src/mesh/generated/localonly.pb.h b/src/mesh/generated/localonly.pb.h index 054cae4d..596bb7b9 100644 --- a/src/mesh/generated/localonly.pb.h +++ b/src/mesh/generated/localonly.pb.h @@ -150,8 +150,8 @@ extern const pb_msgdesc_t LocalModuleConfig_msg; #define LocalModuleConfig_fields &LocalModuleConfig_msg /* Maximum encoded size of messages (where known) */ -#define LocalConfig_size 385 -#define LocalModuleConfig_size 361 +#define LocalConfig_size 387 +#define LocalModuleConfig_size 358 #ifdef __cplusplus } /* extern "C" */ diff --git a/src/mesh/generated/mesh.pb.h b/src/mesh/generated/mesh.pb.h index 8d96960d..f22ec6b1 100644 --- a/src/mesh/generated/mesh.pb.h +++ b/src/mesh/generated/mesh.pb.h @@ -185,9 +185,11 @@ typedef enum _Routing_Error { /* TODO: REPLACE */ Routing_Error_NO_RESPONSE = 8, /* TODO: REPLACE */ - Routing_Error_BAD_REQUEST = 32, + Routing_Error_DUTY_CYCLE_LIMIT = 9, /* The new version of the heltec WiFi_Lora_32_V2 board that has battery sensing hooked to GPIO 37. Sadly they did not update anything on the silkscreen to identify this board */ + Routing_Error_BAD_REQUEST = 32, + /* Ancient heltec WiFi_Lora_32 board */ Routing_Error_NOT_AUTHORIZED = 33 } Routing_Error; diff --git a/src/mesh/generated/module_config.pb.h b/src/mesh/generated/module_config.pb.h index 12018203..4b2e29f1 100644 --- a/src/mesh/generated/module_config.pb.h +++ b/src/mesh/generated/module_config.pb.h @@ -63,10 +63,12 @@ typedef enum _ModuleConfig_CannedMessageConfig_InputEventChar { /* Struct definitions */ typedef struct _ModuleConfig_AudioConfig { bool codec2_enabled; - uint32_t mic_chan; - uint32_t amp_pin; - uint32_t ptt_pin; + uint8_t ptt_pin; ModuleConfig_AudioConfig_Audio_Baud bitrate; + uint8_t i2s_ws; + uint8_t i2s_sd; + uint8_t i2s_din; + uint8_t i2s_sck; } ModuleConfig_AudioConfig; typedef struct _ModuleConfig_CannedMessageConfig { @@ -183,7 +185,7 @@ extern "C" { /* Initializer values for message structs */ #define ModuleConfig_init_default {0, {ModuleConfig_MQTTConfig_init_default}} #define ModuleConfig_MQTTConfig_init_default {0, "", "", "", 0, 0} -#define ModuleConfig_AudioConfig_init_default {0, 0, 0, 0, _ModuleConfig_AudioConfig_Audio_Baud_MIN} +#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_ExternalNotificationConfig_init_default {0, 0, 0, 0, 0, 0, 0} #define ModuleConfig_StoreForwardConfig_init_default {0, 0, 0, 0, 0} @@ -192,7 +194,7 @@ extern "C" { #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_MQTTConfig_init_zero {0, "", "", "", 0, 0} -#define ModuleConfig_AudioConfig_init_zero {0, 0, 0, 0, _ModuleConfig_AudioConfig_Audio_Baud_MIN} +#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_ExternalNotificationConfig_init_zero {0, 0, 0, 0, 0, 0, 0} #define ModuleConfig_StoreForwardConfig_init_zero {0, 0, 0, 0, 0} @@ -202,10 +204,12 @@ extern "C" { /* Field tags (for use in manual encoding/decoding) */ #define ModuleConfig_AudioConfig_codec2_enabled_tag 1 -#define ModuleConfig_AudioConfig_mic_chan_tag 2 -#define ModuleConfig_AudioConfig_amp_pin_tag 3 -#define ModuleConfig_AudioConfig_ptt_pin_tag 4 -#define ModuleConfig_AudioConfig_bitrate_tag 5 +#define ModuleConfig_AudioConfig_ptt_pin_tag 2 +#define ModuleConfig_AudioConfig_bitrate_tag 3 +#define ModuleConfig_AudioConfig_i2s_ws_tag 4 +#define ModuleConfig_AudioConfig_i2s_sd_tag 5 +#define ModuleConfig_AudioConfig_i2s_din_tag 6 +#define ModuleConfig_AudioConfig_i2s_sck_tag 7 #define ModuleConfig_CannedMessageConfig_rotary1_enabled_tag 1 #define ModuleConfig_CannedMessageConfig_inputbroker_pin_a_tag 2 #define ModuleConfig_CannedMessageConfig_inputbroker_pin_b_tag 3 @@ -292,10 +296,12 @@ X(a, STATIC, SINGULAR, BOOL, json_enabled, 6) #define ModuleConfig_AudioConfig_FIELDLIST(X, a) \ X(a, STATIC, SINGULAR, BOOL, codec2_enabled, 1) \ -X(a, STATIC, SINGULAR, UINT32, mic_chan, 2) \ -X(a, STATIC, SINGULAR, UINT32, amp_pin, 3) \ -X(a, STATIC, SINGULAR, UINT32, ptt_pin, 4) \ -X(a, STATIC, SINGULAR, UENUM, bitrate, 5) +X(a, STATIC, SINGULAR, UINT32, ptt_pin, 2) \ +X(a, STATIC, SINGULAR, UENUM, bitrate, 3) \ +X(a, STATIC, SINGULAR, UINT32, i2s_ws, 4) \ +X(a, STATIC, SINGULAR, UINT32, i2s_sd, 5) \ +X(a, STATIC, SINGULAR, UINT32, i2s_din, 6) \ +X(a, STATIC, SINGULAR, UINT32, i2s_sck, 7) #define ModuleConfig_AudioConfig_CALLBACK NULL #define ModuleConfig_AudioConfig_DEFAULT NULL @@ -383,7 +389,7 @@ extern const pb_msgdesc_t ModuleConfig_CannedMessageConfig_msg; #define ModuleConfig_CannedMessageConfig_fields &ModuleConfig_CannedMessageConfig_msg /* Maximum encoded size of messages (where known) */ -#define ModuleConfig_AudioConfig_size 22 +#define ModuleConfig_AudioConfig_size 19 #define ModuleConfig_CannedMessageConfig_size 49 #define ModuleConfig_ExternalNotificationConfig_size 22 #define ModuleConfig_MQTTConfig_size 169 diff --git a/src/mesh/generated/portnums.pb.h b/src/mesh/generated/portnums.pb.h index ec7b7eae..74805ed1 100644 --- a/src/mesh/generated/portnums.pb.h +++ b/src/mesh/generated/portnums.pb.h @@ -82,6 +82,9 @@ typedef enum _PortNum { Maintained by GitHub user GUVWAF. Project files at https://github.com/GUVWAF/Meshtasticator */ PortNum_SIMULATOR_APP = 69, + /* Provides a traceroute functionality to show the route a packet towards + a certain destination would take on the mesh. */ + PortNum_TRACEROUTE_APP = 70, /* Private applications should use portnums >= 256. To simplify initial development and testing you can use "PRIVATE_APP" in your code without needing to rebuild protobuf files (via [regen-protos.sh](https://github.com/meshtastic/firmware/blob/master/bin/regen-protos.sh)) */ From 0f0dbc327444afa11de6b4d9d5488123abfa6c5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Fri, 9 Dec 2022 11:18:43 +0100 Subject: [PATCH 14/27] reboot nrf52 on critical error 8 --- src/mesh/RadioLibInterface.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/mesh/RadioLibInterface.cpp b/src/mesh/RadioLibInterface.cpp index 02257665..18f2ef2f 100644 --- a/src/mesh/RadioLibInterface.cpp +++ b/src/mesh/RadioLibInterface.cpp @@ -3,6 +3,7 @@ #include "NodeDB.h" #include "SPILock.h" #include "configuration.h" +#include "main.h" #include "error.h" #include "mesh-pb-constants.h" #include @@ -87,10 +88,8 @@ bool RadioLibInterface::canSendImmediately() if (busyTx && (millis() - lastTxStart > 60000)) { DEBUG_MSG("Hardware Failure! busyTx for more than 60s\n"); RECORD_CRITICALERROR(CriticalErrorCode_TRANSMIT_FAILED); -#ifdef ARCH_ESP32 - if (busyTx && (millis() - lastTxStart > 65000)) // After 5s more, reboot - ESP.restart(); -#endif + // reboot in 5 seconds when this condition occurs. + rebootAtMsec = lastTxStart + 65000; } if (busyRx) DEBUG_MSG("Can not send yet, busyRx\n"); From 45b518baf27106f5992b8a3d12ab224a371a74ec Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Mon, 12 Dec 2022 10:24:51 -0600 Subject: [PATCH 15/27] Move sds transition back into esp32 only --- src/PowerFSM.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/PowerFSM.cpp b/src/PowerFSM.cpp index 46048d46..64716724 100644 --- a/src/PowerFSM.cpp +++ b/src/PowerFSM.cpp @@ -336,14 +336,15 @@ void PowerFSM_setup() if (isRouter || config.power.is_power_saving) { powerFSM.add_timed_transition(&stateNB, &stateLS, getConfiguredOrDefaultMs(config.power.min_wake_secs, default_min_wake_secs), NULL, "Min wake timeout"); powerFSM.add_timed_transition(&stateDARK, &stateLS, getConfiguredOrDefaultMs(config.power.wait_bluetooth_secs, default_wait_bluetooth_secs), NULL, "Bluetooth timeout"); - } + } + + if (config.power.sds_secs != UINT32_MAX) + powerFSM.add_timed_transition(lowPowerState, &stateSDS, getConfiguredOrDefaultMs(config.power.sds_secs), NULL, "mesh timeout"); #elif defined (ARCH_NRF52) lowPowerState = &stateDARK; #endif - if (config.power.sds_secs != UINT32_MAX) - powerFSM.add_timed_transition(lowPowerState, &stateSDS, getConfiguredOrDefaultMs(config.power.sds_secs), NULL, "mesh timeout"); powerFSM.run_machine(); // run one interation of the state machine, so we run our on enter tasks for the initial DARK state } From 643f99f5772edc36aa593bd358c75f4c256d7387 Mon Sep 17 00:00:00 2001 From: thebentern Date: Mon, 12 Dec 2022 18:06:11 +0000 Subject: [PATCH 16/27] [create-pull-request] automated change --- protobufs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protobufs b/protobufs index c4c484d9..b4677e35 160000 --- a/protobufs +++ b/protobufs @@ -1 +1 @@ -Subproject commit c4c484d9a36b5295e0186ebd7360a8e01ad43ffb +Subproject commit b4677e35ca44ed80394f90c2e60703add8ff4f5b From 0162db12b81b022fbc230acdaf1d192609bd0f65 Mon Sep 17 00:00:00 2001 From: thebentern Date: Mon, 12 Dec 2022 19:23:34 +0000 Subject: [PATCH 17/27] [create-pull-request] automated change --- version.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.properties b/version.properties index eee8783c..9964c8bd 100644 --- a/version.properties +++ b/version.properties @@ -1,4 +1,4 @@ [VERSION] major = 2 minor = 0 -build = 7 +build = 8 From 59ec7f31ab384e6688ec9915b42aa64c76e5d573 Mon Sep 17 00:00:00 2001 From: ghostop14 Date: Tue, 13 Dec 2022 12:31:39 -0500 Subject: [PATCH 18/27] Enable GPS capabilities on heltec V3 --- variants/heltec_v3/variant.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/variants/heltec_v3/variant.h b/variants/heltec_v3/variant.h index b278704d..267ebc2a 100644 --- a/variants/heltec_v3/variant.h +++ b/variants/heltec_v3/variant.h @@ -1,7 +1,5 @@ #define LED_PIN LED -#define HAS_GPS 0 - #define RESET_OLED RST_OLED #define I2C_SDA SDA_OLED // I2C pins for this board #define I2C_SCL SCL_OLED @@ -29,4 +27,4 @@ #define SX126X_DIO1 LORA_DIO1 #define SX126X_BUSY LORA_DIO2 #define SX126X_RESET LORA_RESET -#define SX126X_E22 \ No newline at end of file +#define SX126X_E22 From 92fd5511ecb82bf312aeb2324b3f6411675a71d5 Mon Sep 17 00:00:00 2001 From: Dmitry Galenko Date: Wed, 14 Dec 2022 09:36:25 +0100 Subject: [PATCH 19/27] Disable nRF sleep on discharge --- src/Power.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Power.cpp b/src/Power.cpp index d861313b..c11ac3f0 100644 --- a/src/Power.cpp +++ b/src/Power.cpp @@ -292,7 +292,9 @@ void Power::readPowerStatus() low_voltage_counter++; DEBUG_MSG("Warning RAK4631 Low voltage counter: %d/10\n", low_voltage_counter); if (low_voltage_counter > 10) - powerFSM.trigger(EVENT_LOW_BATTERY); + // We can't trigger deep sleep on NRF52, it's freezing the board + //powerFSM.trigger(EVENT_LOW_BATTERY); + DEBUG_MSG("Low voltage detected, but not triggering deep sleep\n") } else { low_voltage_counter = 0; } From 46f1cee2a81a5ceaed0a488a5e937a0e502bc931 Mon Sep 17 00:00:00 2001 From: Dmitry Galenko Date: Wed, 14 Dec 2022 10:13:23 +0100 Subject: [PATCH 20/27] Fix missed braces and etc --- src/Power.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Power.cpp b/src/Power.cpp index c11ac3f0..c83a00ef 100644 --- a/src/Power.cpp +++ b/src/Power.cpp @@ -291,10 +291,10 @@ void Power::readPowerStatus() if (batteryLevel->getBattVoltage() < MIN_BAT_MILLIVOLTS) { low_voltage_counter++; DEBUG_MSG("Warning RAK4631 Low voltage counter: %d/10\n", low_voltage_counter); - if (low_voltage_counter > 10) + if (low_voltage_counter > 10) { // We can't trigger deep sleep on NRF52, it's freezing the board //powerFSM.trigger(EVENT_LOW_BATTERY); - DEBUG_MSG("Low voltage detected, but not triggering deep sleep\n") + DEBUG_MSG("Low voltage detected, but not triggering deep sleep\n"); } else { low_voltage_counter = 0; } From d3b3a4c148dc9b907712bd7d5ae1df86d32d700d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Wed, 14 Dec 2022 10:29:45 +0100 Subject: [PATCH 21/27] fix build error --- src/Power.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Power.cpp b/src/Power.cpp index c83a00ef..12645b22 100644 --- a/src/Power.cpp +++ b/src/Power.cpp @@ -295,6 +295,7 @@ void Power::readPowerStatus() // We can't trigger deep sleep on NRF52, it's freezing the board //powerFSM.trigger(EVENT_LOW_BATTERY); DEBUG_MSG("Low voltage detected, but not triggering deep sleep\n"); + } } else { low_voltage_counter = 0; } From d1cc503ca8138a36f1f73d16dda4626c3ac44ab1 Mon Sep 17 00:00:00 2001 From: Dmitry Galenko Date: Wed, 14 Dec 2022 14:36:15 +0100 Subject: [PATCH 22/27] Disable shutdown for non ESP32 boards --- src/Power.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Power.cpp b/src/Power.cpp index 12645b22..ff610533 100644 --- a/src/Power.cpp +++ b/src/Power.cpp @@ -568,11 +568,11 @@ bool Power::axpChipInit() } DEBUG_MSG("=======================================================================\n"); - - +// Disable shutdown for non ESP32 boards +#ifdef ARCH_ESP32 // Set PMU shutdown voltage at 2.6V to maximize battery utilization PMU->setSysPowerDownVoltage(2600); - +#endif #ifdef PMU_IRQ From 110c3f619aede1be1173a2cc14ac316d2e0352fa Mon Sep 17 00:00:00 2001 From: Mark Trevor Birss Date: Wed, 14 Dec 2022 17:56:44 +0200 Subject: [PATCH 23/27] Update variant.h --- variants/rak4631/variant.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/variants/rak4631/variant.h b/variants/rak4631/variant.h index 51da8590..0c1e15f4 100644 --- a/variants/rak4631/variant.h +++ b/variants/rak4631/variant.h @@ -127,7 +127,7 @@ static const uint8_t SCK = PIN_SPI_SCK; * eink display pins */ -#define PIN_EINK_EN (0 + 2) // (0 + 2) Note: this is really just backlight power +#define PIN_EINK_EN (32 + 2) // (0 + 2) Note: this is really just backlight power #define PIN_EINK_CS (0 + 26) #define PIN_EINK_BUSY (0 + 4) #define PIN_EINK_DC (0 + 17) From 088ab106dd60b3444b4aa955c0cb9289566dc424 Mon Sep 17 00:00:00 2001 From: Mark Trevor Birss Date: Wed, 14 Dec 2022 17:57:02 +0200 Subject: [PATCH 24/27] Update variant.h --- variants/rak4631_epaper/variant.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/variants/rak4631_epaper/variant.h b/variants/rak4631_epaper/variant.h index cf1b8b07..2b626cf9 100644 --- a/variants/rak4631_epaper/variant.h +++ b/variants/rak4631_epaper/variant.h @@ -127,7 +127,7 @@ static const uint8_t SCK = PIN_SPI_SCK; * eink display pins */ -#define PIN_EINK_EN (0 + 2) // (0 + 2) Note: this is really just backlight power +#define PIN_EINK_EN (32 + 2) // (0 + 2) Note: this is really just backlight power #define PIN_EINK_CS (0 + 26) #define PIN_EINK_BUSY (0 + 4) #define PIN_EINK_DC (0 + 17) From aa19718ba430698f271e7ae7ce98b332451f067a Mon Sep 17 00:00:00 2001 From: Dmitry Galenko Date: Wed, 14 Dec 2022 17:26:55 +0100 Subject: [PATCH 25/27] Change condition for low-voltage killswitch --- src/Power.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Power.cpp b/src/Power.cpp index ff610533..ec86adc9 100644 --- a/src/Power.cpp +++ b/src/Power.cpp @@ -568,8 +568,12 @@ bool Power::axpChipInit() } DEBUG_MSG("=======================================================================\n"); -// Disable shutdown for non ESP32 boards -#ifdef ARCH_ESP32 +// We can safely ignore this approach for most (or all) boards because MCU turned off +// earlier than battery discharged to 2.6V. +// +// Unfortanly for now we can't use this killswitch for RAK4630-based boards because they have a bug with +// battery voltage measurement. Probably it sometimes drops to low values. +#ifndef RAK4630 // Set PMU shutdown voltage at 2.6V to maximize battery utilization PMU->setSysPowerDownVoltage(2600); #endif From 72f1416b309573184135c9282ca76f4613b35617 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Fri, 16 Dec 2022 20:21:56 +0100 Subject: [PATCH 26/27] add variant comment about radiolib --- variants/tlora_v2_1_18/platformio.ini | 3 +++ 1 file changed, 3 insertions(+) diff --git a/variants/tlora_v2_1_18/platformio.ini b/variants/tlora_v2_1_18/platformio.ini index f5af9890..9c79fa25 100644 --- a/variants/tlora_v2_1_18/platformio.ini +++ b/variants/tlora_v2_1_18/platformio.ini @@ -4,5 +4,8 @@ board = ttgo-lora32-v21 lib_deps = ${esp32_base.lib_deps} caveman99/ESP32 Codec2@^1.0.1 + +; the RADIOLIB_GODMODE flag can be removed once the next version of RadioLib is released. (>5.5.0) + build_flags = ${esp32_base.build_flags} -D TLORA_V2_1_18 -I variants/tlora_v2_1_18 -D RADIOLIB_GODMODE \ No newline at end of file From 8c66940b7876bd138f0533d7ec4edcd7f1b7557b Mon Sep 17 00:00:00 2001 From: caveman99 Date: Sat, 17 Dec 2022 17:41:39 +0000 Subject: [PATCH 27/27] [create-pull-request] automated change --- protobufs | 2 +- src/mesh/generated/localonly.pb.h | 2 +- src/mesh/generated/module_config.pb.h | 29 +++++++++++++++++++++++---- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/protobufs b/protobufs index b4677e35..0f2a3304 160000 --- a/protobufs +++ b/protobufs @@ -1 +1 @@ -Subproject commit b4677e35ca44ed80394f90c2e60703add8ff4f5b +Subproject commit 0f2a3304eebd89b5950ccfab98082778de3353a0 diff --git a/src/mesh/generated/localonly.pb.h b/src/mesh/generated/localonly.pb.h index 596bb7b9..c154a98d 100644 --- a/src/mesh/generated/localonly.pb.h +++ b/src/mesh/generated/localonly.pb.h @@ -151,7 +151,7 @@ extern const pb_msgdesc_t LocalModuleConfig_msg; /* Maximum encoded size of messages (where known) */ #define LocalConfig_size 387 -#define LocalModuleConfig_size 358 +#define LocalModuleConfig_size 376 #ifdef __cplusplus } /* extern "C" */ diff --git a/src/mesh/generated/module_config.pb.h b/src/mesh/generated/module_config.pb.h index 4b2e29f1..47f410a5 100644 --- a/src/mesh/generated/module_config.pb.h +++ b/src/mesh/generated/module_config.pb.h @@ -93,6 +93,13 @@ typedef struct _ModuleConfig_ExternalNotificationConfig { bool alert_message; bool alert_bell; bool use_pwm; + uint8_t output_vibra; + uint8_t output_buzzer; + bool alert_message_vibra; + bool alert_message_buzzer; + bool alert_bell_vibra; + bool alert_bell_buzzer; + uint16_t nag_timeout; } ModuleConfig_ExternalNotificationConfig; typedef struct _ModuleConfig_MQTTConfig { @@ -187,7 +194,7 @@ extern "C" { #define ModuleConfig_MQTTConfig_init_default {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_ExternalNotificationConfig_init_default {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_RangeTestConfig_init_default {0, 0, 0} #define ModuleConfig_TelemetryConfig_init_default {0, 0, 0, 0, 0} @@ -196,7 +203,7 @@ extern "C" { #define ModuleConfig_MQTTConfig_init_zero {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_ExternalNotificationConfig_init_zero {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_RangeTestConfig_init_zero {0, 0, 0} #define ModuleConfig_TelemetryConfig_init_zero {0, 0, 0, 0, 0} @@ -228,6 +235,13 @@ extern "C" { #define ModuleConfig_ExternalNotificationConfig_alert_message_tag 5 #define ModuleConfig_ExternalNotificationConfig_alert_bell_tag 6 #define ModuleConfig_ExternalNotificationConfig_use_pwm_tag 7 +#define ModuleConfig_ExternalNotificationConfig_output_vibra_tag 8 +#define ModuleConfig_ExternalNotificationConfig_output_buzzer_tag 9 +#define ModuleConfig_ExternalNotificationConfig_alert_message_vibra_tag 10 +#define ModuleConfig_ExternalNotificationConfig_alert_message_buzzer_tag 11 +#define ModuleConfig_ExternalNotificationConfig_alert_bell_vibra_tag 12 +#define ModuleConfig_ExternalNotificationConfig_alert_bell_buzzer_tag 13 +#define ModuleConfig_ExternalNotificationConfig_nag_timeout_tag 14 #define ModuleConfig_MQTTConfig_enabled_tag 1 #define ModuleConfig_MQTTConfig_address_tag 2 #define ModuleConfig_MQTTConfig_username_tag 3 @@ -323,7 +337,14 @@ X(a, STATIC, SINGULAR, UINT32, output, 3) \ X(a, STATIC, SINGULAR, BOOL, active, 4) \ X(a, STATIC, SINGULAR, BOOL, alert_message, 5) \ X(a, STATIC, SINGULAR, BOOL, alert_bell, 6) \ -X(a, STATIC, SINGULAR, BOOL, use_pwm, 7) +X(a, STATIC, SINGULAR, BOOL, use_pwm, 7) \ +X(a, STATIC, SINGULAR, UINT32, output_vibra, 8) \ +X(a, STATIC, SINGULAR, UINT32, output_buzzer, 9) \ +X(a, STATIC, SINGULAR, BOOL, alert_message_vibra, 10) \ +X(a, STATIC, SINGULAR, BOOL, alert_message_buzzer, 11) \ +X(a, STATIC, SINGULAR, BOOL, alert_bell_vibra, 12) \ +X(a, STATIC, SINGULAR, BOOL, alert_bell_buzzer, 13) \ +X(a, STATIC, SINGULAR, UINT32, nag_timeout, 14) #define ModuleConfig_ExternalNotificationConfig_CALLBACK NULL #define ModuleConfig_ExternalNotificationConfig_DEFAULT NULL @@ -391,7 +412,7 @@ extern const pb_msgdesc_t ModuleConfig_CannedMessageConfig_msg; /* Maximum encoded size of messages (where known) */ #define ModuleConfig_AudioConfig_size 19 #define ModuleConfig_CannedMessageConfig_size 49 -#define ModuleConfig_ExternalNotificationConfig_size 22 +#define ModuleConfig_ExternalNotificationConfig_size 40 #define ModuleConfig_MQTTConfig_size 169 #define ModuleConfig_RangeTestConfig_size 10 #define ModuleConfig_SerialConfig_size 26