mirror of
https://github.com/meshtastic/firmware.git
synced 2025-08-02 11:55:56 +00:00
Format
This commit is contained in:
parent
660a73d58c
commit
9d47f7a531
98
src/main.cpp
98
src/main.cpp
@ -3,12 +3,12 @@
|
|||||||
#include "MeshService.h"
|
#include "MeshService.h"
|
||||||
#include "NodeDB.h"
|
#include "NodeDB.h"
|
||||||
#include "PowerFSM.h"
|
#include "PowerFSM.h"
|
||||||
|
#include "ReliableRouter.h"
|
||||||
#include "airtime.h"
|
#include "airtime.h"
|
||||||
#include "buzz.h"
|
#include "buzz.h"
|
||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
#include "power.h"
|
#include "power.h"
|
||||||
#include "ReliableRouter.h"
|
|
||||||
// #include "debug.h"
|
// #include "debug.h"
|
||||||
#include "FSCommon.h"
|
#include "FSCommon.h"
|
||||||
#include "RTC.h"
|
#include "RTC.h"
|
||||||
@ -27,8 +27,8 @@
|
|||||||
#include <Wire.h>
|
#include <Wire.h>
|
||||||
// #include <driver/rtc_io.h>
|
// #include <driver/rtc_io.h>
|
||||||
|
|
||||||
#include "mesh/http/WiFiAPClient.h"
|
|
||||||
#include "mesh/eth/ethClient.h"
|
#include "mesh/eth/ethClient.h"
|
||||||
|
#include "mesh/http/WiFiAPClient.h"
|
||||||
|
|
||||||
#ifdef ARCH_ESP32
|
#ifdef ARCH_ESP32
|
||||||
#include "mesh/http/WebServer.h"
|
#include "mesh/http/WebServer.h"
|
||||||
@ -98,7 +98,8 @@ uint32_t serialSinceMsec;
|
|||||||
bool pmu_found;
|
bool pmu_found;
|
||||||
|
|
||||||
// Array map of sensor types (as array index) and i2c address as value we'll find in the i2c scan
|
// Array map of sensor types (as array index) and i2c address as value we'll find in the i2c scan
|
||||||
uint8_t nodeTelemetrySensorsMap[_TelemetrySensorType_MAX + 1] = {0}; // one is enough, missing elements will be initialized to 0 anyway.
|
uint8_t nodeTelemetrySensorsMap[_TelemetrySensorType_MAX + 1] = {
|
||||||
|
0}; // one is enough, missing elements will be initialized to 0 anyway.
|
||||||
|
|
||||||
Router *router = NULL; // Users of router don't care what sort of subclass implements that API
|
Router *router = NULL; // Users of router don't care what sort of subclass implements that API
|
||||||
|
|
||||||
@ -112,12 +113,9 @@ const char *getDeviceName()
|
|||||||
static char name[20];
|
static char name[20];
|
||||||
snprintf(name, sizeof(name), "%02x%02x", dmac[4], dmac[5]);
|
snprintf(name, sizeof(name), "%02x%02x", dmac[4], dmac[5]);
|
||||||
// if the shortname exists and is NOT the new default of ab3c, use it for BLE name.
|
// if the shortname exists and is NOT the new default of ab3c, use it for BLE name.
|
||||||
if ((owner.short_name != NULL) && (strcmp(owner.short_name, name) != 0))
|
if ((owner.short_name != NULL) && (strcmp(owner.short_name, name) != 0)) {
|
||||||
{
|
|
||||||
snprintf(name, sizeof(name), "%s_%02x%02x", owner.short_name, dmac[4], dmac[5]);
|
snprintf(name, sizeof(name), "%s_%02x%02x", owner.short_name, dmac[4], dmac[5]);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
snprintf(name, sizeof(name), "Meshtastic_%02x%02x", dmac[4], dmac[5]);
|
snprintf(name, sizeof(name), "Meshtastic_%02x%02x", dmac[4], dmac[5]);
|
||||||
}
|
}
|
||||||
return name;
|
return name;
|
||||||
@ -256,8 +254,7 @@ void setup()
|
|||||||
// In T-Beam-S3-core, the I2C device cannot be scanned before power initialization, otherwise the device will be stuck
|
// In T-Beam-S3-core, the I2C device cannot be scanned before power initialization, otherwise the device will be stuck
|
||||||
// PCF8563 RTC in tbeam-s3 uses Wire1 to share I2C bus
|
// PCF8563 RTC in tbeam-s3 uses Wire1 to share I2C bus
|
||||||
Wire1.beginTransmission(PCF8563_RTC);
|
Wire1.beginTransmission(PCF8563_RTC);
|
||||||
if (Wire1.endTransmission() == 0)
|
if (Wire1.endTransmission() == 0) {
|
||||||
{
|
|
||||||
rtc_found = PCF8563_RTC;
|
rtc_found = PCF8563_RTC;
|
||||||
LOG_INFO("PCF8563 RTC found\n");
|
LOG_INFO("PCF8563 RTC found\n");
|
||||||
}
|
}
|
||||||
@ -357,11 +354,9 @@ void setup()
|
|||||||
// We have now loaded our saved preferences from flash
|
// We have now loaded our saved preferences from flash
|
||||||
|
|
||||||
// ONCE we will factory reset the GPS for bug #327
|
// ONCE we will factory reset the GPS for bug #327
|
||||||
if (gps && !devicestate.did_gps_reset)
|
if (gps && !devicestate.did_gps_reset) {
|
||||||
{
|
|
||||||
LOG_WARN("GPS FactoryReset requested\n");
|
LOG_WARN("GPS FactoryReset requested\n");
|
||||||
if (gps->factoryReset())
|
if (gps->factoryReset()) { // If we don't succeed try again next time
|
||||||
{ // If we don't succeed try again next time
|
|
||||||
devicestate.did_gps_reset = true;
|
devicestate.did_gps_reset = true;
|
||||||
nodeDB.saveToDisk(SEGMENT_DEVICESTATE);
|
nodeDB.saveToDisk(SEGMENT_DEVICESTATE);
|
||||||
}
|
}
|
||||||
@ -376,102 +371,78 @@ void setup()
|
|||||||
// radio init MUST BE AFTER service.init, so we have our radio config settings (from nodedb init)
|
// radio init MUST BE AFTER service.init, so we have our radio config settings (from nodedb init)
|
||||||
|
|
||||||
#if defined(RF95_IRQ)
|
#if defined(RF95_IRQ)
|
||||||
if (!rIf)
|
if (!rIf) {
|
||||||
{
|
|
||||||
rIf = new RF95Interface(RF95_NSS, RF95_IRQ, RF95_RESET, SPI);
|
rIf = new RF95Interface(RF95_NSS, RF95_IRQ, RF95_RESET, SPI);
|
||||||
if (!rIf->init())
|
if (!rIf->init()) {
|
||||||
{
|
|
||||||
LOG_WARN("Failed to find RF95 radio\n");
|
LOG_WARN("Failed to find RF95 radio\n");
|
||||||
delete rIf;
|
delete rIf;
|
||||||
rIf = NULL;
|
rIf = NULL;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
LOG_INFO("RF95 Radio init succeeded, using RF95 radio\n");
|
LOG_INFO("RF95 Radio init succeeded, using RF95 radio\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(USE_SX1280)
|
#if defined(USE_SX1280)
|
||||||
if (!rIf)
|
if (!rIf) {
|
||||||
{
|
|
||||||
rIf = new SX1280Interface(SX128X_CS, SX128X_DIO1, SX128X_RESET, SX128X_BUSY, SPI);
|
rIf = new SX1280Interface(SX128X_CS, SX128X_DIO1, SX128X_RESET, SX128X_BUSY, SPI);
|
||||||
if (!rIf->init())
|
if (!rIf->init()) {
|
||||||
{
|
|
||||||
LOG_WARN("Failed to find SX1280 radio\n");
|
LOG_WARN("Failed to find SX1280 radio\n");
|
||||||
delete rIf;
|
delete rIf;
|
||||||
rIf = NULL;
|
rIf = NULL;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
LOG_INFO("SX1280 Radio init succeeded, using SX1280 radio\n");
|
LOG_INFO("SX1280 Radio init succeeded, using SX1280 radio\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(USE_SX1262)
|
#if defined(USE_SX1262)
|
||||||
if (!rIf)
|
if (!rIf) {
|
||||||
{
|
|
||||||
rIf = new SX1262Interface(SX126X_CS, SX126X_DIO1, SX126X_RESET, SX126X_BUSY, SPI);
|
rIf = new SX1262Interface(SX126X_CS, SX126X_DIO1, SX126X_RESET, SX126X_BUSY, SPI);
|
||||||
if (!rIf->init())
|
if (!rIf->init()) {
|
||||||
{
|
|
||||||
LOG_WARN("Failed to find SX1262 radio\n");
|
LOG_WARN("Failed to find SX1262 radio\n");
|
||||||
delete rIf;
|
delete rIf;
|
||||||
rIf = NULL;
|
rIf = NULL;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
LOG_INFO("SX1262 Radio init succeeded, using SX1262 radio\n");
|
LOG_INFO("SX1262 Radio init succeeded, using SX1262 radio\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(USE_SX1268)
|
#if defined(USE_SX1268)
|
||||||
if (!rIf)
|
if (!rIf) {
|
||||||
{
|
|
||||||
rIf = new SX1268Interface(SX126X_CS, SX126X_DIO1, SX126X_RESET, SX126X_BUSY, SPI);
|
rIf = new SX1268Interface(SX126X_CS, SX126X_DIO1, SX126X_RESET, SX126X_BUSY, SPI);
|
||||||
if (!rIf->init())
|
if (!rIf->init()) {
|
||||||
{
|
|
||||||
LOG_WARN("Failed to find SX1268 radio\n");
|
LOG_WARN("Failed to find SX1268 radio\n");
|
||||||
delete rIf;
|
delete rIf;
|
||||||
rIf = NULL;
|
rIf = NULL;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
LOG_INFO("SX1268 Radio init succeeded, using SX1268 radio\n");
|
LOG_INFO("SX1268 Radio init succeeded, using SX1268 radio\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(USE_LLCC68)
|
#if defined(USE_LLCC68)
|
||||||
if (!rIf)
|
if (!rIf) {
|
||||||
{
|
|
||||||
rIf = new LLCC68Interface(SX126X_CS, SX126X_DIO1, SX126X_RESET, SX126X_BUSY, SPI);
|
rIf = new LLCC68Interface(SX126X_CS, SX126X_DIO1, SX126X_RESET, SX126X_BUSY, SPI);
|
||||||
if (!rIf->init())
|
if (!rIf->init()) {
|
||||||
{
|
|
||||||
LOG_WARN("Failed to find LLCC68 radio\n");
|
LOG_WARN("Failed to find LLCC68 radio\n");
|
||||||
delete rIf;
|
delete rIf;
|
||||||
rIf = NULL;
|
rIf = NULL;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
LOG_INFO("LLCC68 Radio init succeeded, using LLCC68 radio\n");
|
LOG_INFO("LLCC68 Radio init succeeded, using LLCC68 radio\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ARCH_PORTDUINO
|
#ifdef ARCH_PORTDUINO
|
||||||
if (!rIf)
|
if (!rIf) {
|
||||||
{
|
|
||||||
rIf = new SimRadio;
|
rIf = new SimRadio;
|
||||||
if (!rIf->init())
|
if (!rIf->init()) {
|
||||||
{
|
|
||||||
LOG_WARN("Failed to find simulated radio\n");
|
LOG_WARN("Failed to find simulated radio\n");
|
||||||
delete rIf;
|
delete rIf;
|
||||||
rIf = NULL;
|
rIf = NULL;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
LOG_INFO("Using SIMULATED radio!\n");
|
LOG_INFO("Using SIMULATED radio!\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -479,13 +450,11 @@ void setup()
|
|||||||
|
|
||||||
// check if the radio chip matches the selected region
|
// check if the radio chip matches the selected region
|
||||||
|
|
||||||
if ((config.lora.region == Config_LoRaConfig_RegionCode_LORA_24) && (!rIf->wideLora()))
|
if ((config.lora.region == Config_LoRaConfig_RegionCode_LORA_24) && (!rIf->wideLora())) {
|
||||||
{
|
|
||||||
LOG_WARN("Radio chip does not support 2.4GHz LoRa. Reverting to unset.\n");
|
LOG_WARN("Radio chip does not support 2.4GHz LoRa. Reverting to unset.\n");
|
||||||
config.lora.region = Config_LoRaConfig_RegionCode_UNSET;
|
config.lora.region = Config_LoRaConfig_RegionCode_UNSET;
|
||||||
nodeDB.saveToDisk(SEGMENT_CONFIG);
|
nodeDB.saveToDisk(SEGMENT_CONFIG);
|
||||||
if (!rIf->reconfigure())
|
if (!rIf->reconfigure()) {
|
||||||
{
|
|
||||||
LOG_WARN("Reconfigure failed, rebooting\n");
|
LOG_WARN("Reconfigure failed, rebooting\n");
|
||||||
screen->startRebootScreen();
|
screen->startRebootScreen();
|
||||||
rebootAtMsec = millis() + 5000;
|
rebootAtMsec = millis() + 5000;
|
||||||
@ -518,8 +487,7 @@ void setup()
|
|||||||
|
|
||||||
if (!rIf)
|
if (!rIf)
|
||||||
RECORD_CRITICALERROR(CriticalErrorCode_NO_RADIO);
|
RECORD_CRITICALERROR(CriticalErrorCode_NO_RADIO);
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
router->addInterface(rIf);
|
router->addInterface(rIf);
|
||||||
|
|
||||||
// Calculate and save the bit rate to myNodeInfo
|
// Calculate and save the bit rate to myNodeInfo
|
||||||
@ -564,8 +532,7 @@ void loop()
|
|||||||
|
|
||||||
#ifdef DEBUG_STACK
|
#ifdef DEBUG_STACK
|
||||||
static uint32_t lastPrint = 0;
|
static uint32_t lastPrint = 0;
|
||||||
if (millis() - lastPrint > 10 * 1000L)
|
if (millis() - lastPrint > 10 * 1000L) {
|
||||||
{
|
|
||||||
lastPrint = millis();
|
lastPrint = millis();
|
||||||
meshtastic::printThreadInfo("main");
|
meshtastic::printThreadInfo("main");
|
||||||
}
|
}
|
||||||
@ -583,8 +550,7 @@ void loop()
|
|||||||
mainController.nextThread->tillRun(millis())); */
|
mainController.nextThread->tillRun(millis())); */
|
||||||
|
|
||||||
// We want to sleep as long as possible here - because it saves power
|
// We want to sleep as long as possible here - because it saves power
|
||||||
if (!runASAP && loopCanSleep())
|
if (!runASAP && loopCanSleep()) {
|
||||||
{
|
|
||||||
// if(delayMsec > 100) LOG_DEBUG("sleeping %ld\n", delayMsec);
|
// if(delayMsec > 100) LOG_DEBUG("sleeping %ld\n", delayMsec);
|
||||||
mainDelay.delay(delayMsec);
|
mainDelay.delay(delayMsec);
|
||||||
}
|
}
|
||||||
|
@ -29,8 +29,7 @@ PhoneAPI::~PhoneAPI()
|
|||||||
void PhoneAPI::handleStartConfig()
|
void PhoneAPI::handleStartConfig()
|
||||||
{
|
{
|
||||||
// Must be before setting state (because state is how we know !connected)
|
// Must be before setting state (because state is how we know !connected)
|
||||||
if (!isConnected())
|
if (!isConnected()) {
|
||||||
{
|
|
||||||
onConnectionChanged(true);
|
onConnectionChanged(true);
|
||||||
observe(&service.fromNumChanged);
|
observe(&service.fromNumChanged);
|
||||||
observe(&xModem.packetReady);
|
observe(&xModem.packetReady);
|
||||||
@ -47,8 +46,7 @@ void PhoneAPI::handleStartConfig()
|
|||||||
|
|
||||||
void PhoneAPI::close()
|
void PhoneAPI::close()
|
||||||
{
|
{
|
||||||
if (state != STATE_SEND_NOTHING)
|
if (state != STATE_SEND_NOTHING) {
|
||||||
{
|
|
||||||
state = STATE_SEND_NOTHING;
|
state = STATE_SEND_NOTHING;
|
||||||
|
|
||||||
unobserve(&service.fromNumChanged);
|
unobserve(&service.fromNumChanged);
|
||||||
@ -62,11 +60,9 @@ void PhoneAPI::close()
|
|||||||
|
|
||||||
void PhoneAPI::checkConnectionTimeout()
|
void PhoneAPI::checkConnectionTimeout()
|
||||||
{
|
{
|
||||||
if (isConnected())
|
if (isConnected()) {
|
||||||
{
|
|
||||||
bool newContact = checkIsConnected();
|
bool newContact = checkIsConnected();
|
||||||
if (!newContact)
|
if (!newContact) {
|
||||||
{
|
|
||||||
LOG_INFO("Lost phone connection\n");
|
LOG_INFO("Lost phone connection\n");
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
@ -84,10 +80,8 @@ bool PhoneAPI::handleToRadio(const uint8_t *buf, size_t bufLength)
|
|||||||
// return (lastContactMsec != 0) &&
|
// return (lastContactMsec != 0) &&
|
||||||
|
|
||||||
memset(&toRadioScratch, 0, sizeof(toRadioScratch));
|
memset(&toRadioScratch, 0, sizeof(toRadioScratch));
|
||||||
if (pb_decode_from_bytes(buf, bufLength, &ToRadio_msg, &toRadioScratch))
|
if (pb_decode_from_bytes(buf, bufLength, &ToRadio_msg, &toRadioScratch)) {
|
||||||
{
|
switch (toRadioScratch.which_payload_variant) {
|
||||||
switch (toRadioScratch.which_payload_variant)
|
|
||||||
{
|
|
||||||
case ToRadio_packet_tag:
|
case ToRadio_packet_tag:
|
||||||
return handleToRadioPacket(toRadioScratch.packet);
|
return handleToRadioPacket(toRadioScratch.packet);
|
||||||
case ToRadio_want_config_id_tag:
|
case ToRadio_want_config_id_tag:
|
||||||
@ -108,9 +102,7 @@ bool PhoneAPI::handleToRadio(const uint8_t *buf, size_t bufLength)
|
|||||||
// LOG_DEBUG("Error: unexpected ToRadio variant\n");
|
// LOG_DEBUG("Error: unexpected ToRadio variant\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
LOG_ERROR("Error: ignoring malformed toradio\n");
|
LOG_ERROR("Error: ignoring malformed toradio\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -133,8 +125,7 @@ bool PhoneAPI::handleToRadio(const uint8_t *buf, size_t bufLength)
|
|||||||
*/
|
*/
|
||||||
size_t PhoneAPI::getFromRadio(uint8_t *buf)
|
size_t PhoneAPI::getFromRadio(uint8_t *buf)
|
||||||
{
|
{
|
||||||
if (!available())
|
if (!available()) {
|
||||||
{
|
|
||||||
// LOG_DEBUG("getFromRadio=not available\n");
|
// LOG_DEBUG("getFromRadio=not available\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -142,8 +133,7 @@ size_t PhoneAPI::getFromRadio(uint8_t *buf)
|
|||||||
memset(&fromRadioScratch, 0, sizeof(fromRadioScratch));
|
memset(&fromRadioScratch, 0, sizeof(fromRadioScratch));
|
||||||
|
|
||||||
// Advance states as needed
|
// Advance states as needed
|
||||||
switch (state)
|
switch (state) {
|
||||||
{
|
|
||||||
case STATE_SEND_NOTHING:
|
case STATE_SEND_NOTHING:
|
||||||
LOG_INFO("getFromRadio=STATE_SEND_NOTHING\n");
|
LOG_INFO("getFromRadio=STATE_SEND_NOTHING\n");
|
||||||
break;
|
break;
|
||||||
@ -160,22 +150,18 @@ size_t PhoneAPI::getFromRadio(uint8_t *buf)
|
|||||||
service.refreshMyNodeInfo(); // Update my NodeInfo because the client will be asking for it soon.
|
service.refreshMyNodeInfo(); // Update my NodeInfo because the client will be asking for it soon.
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case STATE_SEND_NODEINFO:
|
case STATE_SEND_NODEINFO: {
|
||||||
{
|
|
||||||
LOG_INFO("getFromRadio=STATE_SEND_NODEINFO\n");
|
LOG_INFO("getFromRadio=STATE_SEND_NODEINFO\n");
|
||||||
const NodeInfo *info = nodeInfoForPhone;
|
const NodeInfo *info = nodeInfoForPhone;
|
||||||
nodeInfoForPhone = NULL; // We just consumed a nodeinfo, will need a new one next time
|
nodeInfoForPhone = NULL; // We just consumed a nodeinfo, will need a new one next time
|
||||||
|
|
||||||
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
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
LOG_INFO("Done sending nodeinfos\n");
|
LOG_INFO("Done sending nodeinfos\n");
|
||||||
state = STATE_SEND_CHANNELS;
|
state = STATE_SEND_CHANNELS;
|
||||||
// Go ahead and send that ID right now
|
// Go ahead and send that ID right now
|
||||||
@ -190,8 +176,7 @@ size_t PhoneAPI::getFromRadio(uint8_t *buf)
|
|||||||
fromRadioScratch.channel = channels.getByIndex(config_state);
|
fromRadioScratch.channel = channels.getByIndex(config_state);
|
||||||
config_state++;
|
config_state++;
|
||||||
// Advance when we have sent all of our Channels
|
// Advance when we have sent all of our Channels
|
||||||
if (config_state >= MAX_NUM_CHANNELS)
|
if (config_state >= MAX_NUM_CHANNELS) {
|
||||||
{
|
|
||||||
state = STATE_SEND_CONFIG;
|
state = STATE_SEND_CONFIG;
|
||||||
config_state = _AdminMessage_ConfigType_MIN + 1;
|
config_state = _AdminMessage_ConfigType_MIN + 1;
|
||||||
}
|
}
|
||||||
@ -200,8 +185,7 @@ size_t PhoneAPI::getFromRadio(uint8_t *buf)
|
|||||||
case STATE_SEND_CONFIG:
|
case STATE_SEND_CONFIG:
|
||||||
LOG_INFO("getFromRadio=STATE_SEND_CONFIG\n");
|
LOG_INFO("getFromRadio=STATE_SEND_CONFIG\n");
|
||||||
fromRadioScratch.which_payload_variant = FromRadio_config_tag;
|
fromRadioScratch.which_payload_variant = FromRadio_config_tag;
|
||||||
switch (config_state)
|
switch (config_state) {
|
||||||
{
|
|
||||||
case Config_device_tag:
|
case Config_device_tag:
|
||||||
fromRadioScratch.config.which_payload_variant = Config_device_tag;
|
fromRadioScratch.config.which_payload_variant = Config_device_tag;
|
||||||
fromRadioScratch.config.payload_variant.device = config.device;
|
fromRadioScratch.config.payload_variant.device = config.device;
|
||||||
@ -240,8 +224,7 @@ size_t PhoneAPI::getFromRadio(uint8_t *buf)
|
|||||||
|
|
||||||
config_state++;
|
config_state++;
|
||||||
// Advance when we have sent all of our config objects
|
// Advance when we have sent all of our config objects
|
||||||
if (config_state > (_AdminMessage_ConfigType_MAX + 1))
|
if (config_state > (_AdminMessage_ConfigType_MAX + 1)) {
|
||||||
{
|
|
||||||
state = STATE_SEND_MODULECONFIG;
|
state = STATE_SEND_MODULECONFIG;
|
||||||
config_state = _AdminMessage_ModuleConfigType_MIN + 1;
|
config_state = _AdminMessage_ModuleConfigType_MIN + 1;
|
||||||
}
|
}
|
||||||
@ -250,8 +233,7 @@ size_t PhoneAPI::getFromRadio(uint8_t *buf)
|
|||||||
case STATE_SEND_MODULECONFIG:
|
case STATE_SEND_MODULECONFIG:
|
||||||
LOG_INFO("getFromRadio=STATE_SEND_MODULECONFIG\n");
|
LOG_INFO("getFromRadio=STATE_SEND_MODULECONFIG\n");
|
||||||
fromRadioScratch.which_payload_variant = FromRadio_moduleConfig_tag;
|
fromRadioScratch.which_payload_variant = FromRadio_moduleConfig_tag;
|
||||||
switch (config_state)
|
switch (config_state) {
|
||||||
{
|
|
||||||
case ModuleConfig_mqtt_tag:
|
case ModuleConfig_mqtt_tag:
|
||||||
fromRadioScratch.moduleConfig.which_payload_variant = ModuleConfig_mqtt_tag;
|
fromRadioScratch.moduleConfig.which_payload_variant = ModuleConfig_mqtt_tag;
|
||||||
fromRadioScratch.moduleConfig.payload_variant.mqtt = moduleConfig.mqtt;
|
fromRadioScratch.moduleConfig.payload_variant.mqtt = moduleConfig.mqtt;
|
||||||
@ -294,8 +276,7 @@ size_t PhoneAPI::getFromRadio(uint8_t *buf)
|
|||||||
|
|
||||||
config_state++;
|
config_state++;
|
||||||
// Advance when we have sent all of our ModuleConfig objects
|
// Advance when we have sent all of our ModuleConfig objects
|
||||||
if (config_state > (_AdminMessage_ModuleConfigType_MAX + 1))
|
if (config_state > (_AdminMessage_ModuleConfigType_MAX + 1)) {
|
||||||
{
|
|
||||||
state = STATE_SEND_COMPLETE_ID;
|
state = STATE_SEND_COMPLETE_ID;
|
||||||
config_state = 0;
|
config_state = 0;
|
||||||
}
|
}
|
||||||
@ -312,21 +293,16 @@ size_t PhoneAPI::getFromRadio(uint8_t *buf)
|
|||||||
case STATE_SEND_PACKETS:
|
case STATE_SEND_PACKETS:
|
||||||
// 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) {
|
||||||
else if (xmodemPacketForPhone)
|
|
||||||
{
|
|
||||||
fromRadioScratch.which_payload_variant = FromRadio_xmodemPacket_tag;
|
fromRadioScratch.which_payload_variant = FromRadio_xmodemPacket_tag;
|
||||||
fromRadioScratch.xmodemPacket = *xmodemPacketForPhone;
|
fromRadioScratch.xmodemPacket = *xmodemPacketForPhone;
|
||||||
free(xmodemPacketForPhone);
|
free(xmodemPacketForPhone);
|
||||||
xmodemPacketForPhone = NULL;
|
xmodemPacketForPhone = NULL;
|
||||||
}
|
} else if (packetForPhone) {
|
||||||
else if (packetForPhone)
|
|
||||||
{
|
|
||||||
printPacket("phone downloaded packet", packetForPhone);
|
printPacket("phone downloaded packet", packetForPhone);
|
||||||
|
|
||||||
// Encapsulate as a FromRadio packet
|
// Encapsulate as a FromRadio packet
|
||||||
@ -341,8 +317,7 @@ size_t PhoneAPI::getFromRadio(uint8_t *buf)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Do we have a message from the mesh?
|
// Do we have a message from the mesh?
|
||||||
if (fromRadioScratch.which_payload_variant != 0)
|
if (fromRadioScratch.which_payload_variant != 0) {
|
||||||
{
|
|
||||||
// Encapsulate as a FromRadio packet
|
// Encapsulate as a FromRadio packet
|
||||||
size_t numbytes = pb_encode_to_bytes(buf, FromRadio_size, &FromRadio_msg, &fromRadioScratch);
|
size_t numbytes = pb_encode_to_bytes(buf, FromRadio_size, &FromRadio_msg, &fromRadioScratch);
|
||||||
|
|
||||||
@ -361,8 +336,7 @@ void PhoneAPI::handleDisconnect()
|
|||||||
|
|
||||||
void PhoneAPI::releasePhonePacket()
|
void PhoneAPI::releasePhonePacket()
|
||||||
{
|
{
|
||||||
if (packetForPhone)
|
if (packetForPhone) {
|
||||||
{
|
|
||||||
service.releaseToPool(packetForPhone); // we just copied the bytes, so don't need this buffer anymore
|
service.releaseToPool(packetForPhone); // we just copied the bytes, so don't need this buffer anymore
|
||||||
packetForPhone = NULL;
|
packetForPhone = NULL;
|
||||||
}
|
}
|
||||||
@ -370,8 +344,7 @@ void PhoneAPI::releasePhonePacket()
|
|||||||
|
|
||||||
void PhoneAPI::releaseQueueStatusPhonePacket()
|
void PhoneAPI::releaseQueueStatusPhonePacket()
|
||||||
{
|
{
|
||||||
if (queueStatusPacketForPhone)
|
if (queueStatusPacketForPhone) {
|
||||||
{
|
|
||||||
service.releaseQueueStatusToPool(queueStatusPacketForPhone);
|
service.releaseQueueStatusToPool(queueStatusPacketForPhone);
|
||||||
queueStatusPacketForPhone = NULL;
|
queueStatusPacketForPhone = NULL;
|
||||||
}
|
}
|
||||||
@ -382,8 +355,7 @@ void PhoneAPI::releaseQueueStatusPhonePacket()
|
|||||||
*/
|
*/
|
||||||
bool PhoneAPI::available()
|
bool PhoneAPI::available()
|
||||||
{
|
{
|
||||||
switch (state)
|
switch (state) {
|
||||||
{
|
|
||||||
case STATE_SEND_NOTHING:
|
case STATE_SEND_NOTHING:
|
||||||
return false;
|
return false;
|
||||||
case STATE_SEND_MY_INFO:
|
case STATE_SEND_MY_INFO:
|
||||||
@ -398,8 +370,7 @@ bool PhoneAPI::available()
|
|||||||
nodeInfoForPhone = nodeDB.readNextInfo();
|
nodeInfoForPhone = nodeDB.readNextInfo();
|
||||||
return true; // Always say we have something, because we might need to advance our state machine
|
return true; // Always say we have something, because we might need to advance our state machine
|
||||||
|
|
||||||
case STATE_SEND_PACKETS:
|
case STATE_SEND_PACKETS: {
|
||||||
{
|
|
||||||
if (!queueStatusPacketForPhone)
|
if (!queueStatusPacketForPhone)
|
||||||
queueStatusPacketForPhone = service.getQueueStatusForPhone();
|
queueStatusPacketForPhone = service.getQueueStatusForPhone();
|
||||||
bool hasPacket = !!queueStatusPacketForPhone;
|
bool hasPacket = !!queueStatusPacketForPhone;
|
||||||
@ -442,12 +413,10 @@ int PhoneAPI::onNotify(uint32_t newValue)
|
|||||||
checkConnectionTimeout(); // a handy place to check if we've heard from the phone (since the BLE version doesn't call this
|
checkConnectionTimeout(); // a handy place to check if we've heard from the phone (since the BLE version doesn't call this
|
||||||
// from idle)
|
// from idle)
|
||||||
|
|
||||||
if (state == STATE_SEND_PACKETS)
|
if (state == STATE_SEND_PACKETS) {
|
||||||
{
|
|
||||||
LOG_INFO("Telling client we have new packets %u\n", newValue);
|
LOG_INFO("Telling client we have new packets %u\n", newValue);
|
||||||
onNowHasData(newValue);
|
onNowHasData(newValue);
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
LOG_DEBUG("(Client not yet interested in packets)\n");
|
LOG_DEBUG("(Client not yet interested in packets)\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -18,9 +18,9 @@
|
|||||||
#include "modules/Telemetry/EnvironmentTelemetry.h"
|
#include "modules/Telemetry/EnvironmentTelemetry.h"
|
||||||
#endif
|
#endif
|
||||||
#ifdef ARCH_ESP32
|
#ifdef ARCH_ESP32
|
||||||
|
#include "modules/esp32/AudioModule.h"
|
||||||
#include "modules/esp32/RangeTestModule.h"
|
#include "modules/esp32/RangeTestModule.h"
|
||||||
#include "modules/esp32/StoreForwardModule.h"
|
#include "modules/esp32/StoreForwardModule.h"
|
||||||
#include "modules/esp32/AudioModule.h"
|
|
||||||
#endif
|
#endif
|
||||||
#if defined(ARCH_ESP32) || defined(ARCH_NRF52)
|
#if defined(ARCH_ESP32) || defined(ARCH_NRF52)
|
||||||
#include "modules/ExternalNotificationModule.h"
|
#include "modules/ExternalNotificationModule.h"
|
||||||
|
40
src/xmodem.h
40
src/xmodem.h
@ -40,37 +40,37 @@
|
|||||||
|
|
||||||
class XModemAdapter
|
class XModemAdapter
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// Called when we put a fragment in the outgoing memory
|
// Called when we put a fragment in the outgoing memory
|
||||||
Observable<uint32_t> packetReady;
|
Observable<uint32_t> packetReady;
|
||||||
|
|
||||||
XModemAdapter();
|
XModemAdapter();
|
||||||
|
|
||||||
void handlePacket(XModem xmodemPacket);
|
void handlePacket(XModem xmodemPacket);
|
||||||
XModem *getForPhone();
|
XModem *getForPhone();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool isReceiving = false;
|
bool isReceiving = false;
|
||||||
bool isTransmitting = false;
|
bool isTransmitting = false;
|
||||||
bool isEOT = false;
|
bool isEOT = false;
|
||||||
|
|
||||||
int retrans = MAXRETRANS;
|
int retrans = MAXRETRANS;
|
||||||
|
|
||||||
uint16_t packetno = 0;
|
uint16_t packetno = 0;
|
||||||
|
|
||||||
#if defined(ARCH_NRF52)
|
#if defined(ARCH_NRF52)
|
||||||
File file = File(FSCom);
|
File file = File(FSCom);
|
||||||
#else
|
#else
|
||||||
File file;
|
File file;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
char filename[sizeof(XModem_buffer_t::bytes)] = {0};
|
char filename[sizeof(XModem_buffer_t::bytes)] = {0};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
XModem *xmodemStore = NULL;
|
XModem *xmodemStore = NULL;
|
||||||
unsigned short crc16_ccitt(const pb_byte_t *buffer, int length);
|
unsigned short crc16_ccitt(const pb_byte_t *buffer, int length);
|
||||||
int check(const pb_byte_t *buf, int sz, unsigned short tcrc);
|
int check(const pb_byte_t *buf, int sz, unsigned short tcrc);
|
||||||
void sendControl(XModem_Control c);
|
void sendControl(XModem_Control c);
|
||||||
};
|
};
|
||||||
|
|
||||||
extern XModemAdapter xModem;
|
extern XModemAdapter xModem;
|
||||||
|
Loading…
Reference in New Issue
Block a user