This commit is contained in:
Ben Meadors 2023-01-18 19:24:18 -06:00
parent 4cfedc4b57
commit 412fbea978
3 changed files with 153 additions and 88 deletions

View File

@ -87,7 +87,7 @@ uint8_t rtc_found;
// Keystore Chips // Keystore Chips
uint8_t keystore_found; uint8_t keystore_found;
#ifndef ARCH_PORTDUINO #if !defined(ARCH_PORTDUINO) && !defined(ARCH_STM32WL)
ATECCX08A atecc; ATECCX08A atecc;
#endif #endif
@ -112,9 +112,12 @@ 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;
@ -249,12 +252,12 @@ void setup()
powerStatus->observe(&power->newStatus); powerStatus->observe(&power->newStatus);
power->setup(); // Must be after status handler is installed, so that handler gets notified of the initial configuration power->setup(); // Must be after status handler is installed, so that handler gets notified of the initial configuration
#ifdef LILYGO_TBEAM_S3_CORE #ifdef LILYGO_TBEAM_S3_CORE
// 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");
} }
@ -354,9 +357,11 @@ 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 we don't succeed try again next time if (gps->factoryReset())
{ // 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);
} }
@ -371,78 +376,102 @@ 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");
} }
} }
@ -450,11 +479,13 @@ 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;
@ -487,7 +518,8 @@ if((config.lora.region == Config_LoRaConfig_RegionCode_LORA_24) && (!rIf->wideLo
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
@ -532,7 +564,8 @@ 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");
} }
@ -550,7 +583,8 @@ 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);
} }

View File

@ -29,7 +29,8 @@ 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);
@ -46,7 +47,8 @@ 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);
@ -60,9 +62,11 @@ 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();
} }
@ -80,8 +84,10 @@ 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:
@ -102,7 +108,9 @@ 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");
} }
@ -125,7 +133,8 @@ 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;
} }
@ -133,7 +142,8 @@ 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;
@ -150,18 +160,22 @@ 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
@ -176,7 +190,8 @@ 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;
} }
@ -185,7 +200,8 @@ 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;
@ -224,7 +240,8 @@ 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;
} }
@ -233,7 +250,8 @@ 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;
@ -276,7 +294,8 @@ 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;
} }
@ -293,16 +312,21 @@ 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
@ -317,7 +341,8 @@ 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);
@ -336,7 +361,8 @@ 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;
} }
@ -344,7 +370,8 @@ void PhoneAPI::releasePhonePacket()
void PhoneAPI::releaseQueueStatusPhonePacket() void PhoneAPI::releaseQueueStatusPhonePacket()
{ {
if (queueStatusPacketForPhone) { if (queueStatusPacketForPhone)
{
service.releaseQueueStatusToPool(queueStatusPacketForPhone); service.releaseQueueStatusToPool(queueStatusPacketForPhone);
queueStatusPacketForPhone = NULL; queueStatusPacketForPhone = NULL;
} }
@ -355,7 +382,8 @@ 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:
@ -370,7 +398,8 @@ 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;
@ -413,10 +442,12 @@ 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;

View File

@ -58,7 +58,7 @@ class XModemAdapter
uint16_t packetno = 0; uint16_t packetno = 0;
#ifdef ARCH_NRF52 #if defined(ARCH_NRF52)
File file = File(FSCom); File file = File(FSCom);
#else #else
File file; File file;