From 3a6e3464e69a6e9afaffb6e6075568dae7b7026c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Mon, 9 Jan 2023 20:06:11 +0100 Subject: [PATCH] notify phoneAPI about new packages to process --- src/mesh/PhoneAPI.cpp | 2 ++ src/xmodem.cpp | 4 ++++ src/xmodem.h | 3 +++ 3 files changed, 9 insertions(+) diff --git a/src/mesh/PhoneAPI.cpp b/src/mesh/PhoneAPI.cpp index 90c340cce..4fc87a9fa 100644 --- a/src/mesh/PhoneAPI.cpp +++ b/src/mesh/PhoneAPI.cpp @@ -33,6 +33,7 @@ void PhoneAPI::handleStartConfig() if (!isConnected()) { onConnectionChanged(true); observe(&service.fromNumChanged); + observe(&xModem.packetReady); } // even if we were already connected - restart our state machine @@ -50,6 +51,7 @@ void PhoneAPI::close() state = STATE_SEND_NOTHING; unobserve(&service.fromNumChanged); + unobserve(&xModem.packetReady); releasePhonePacket(); // Don't leak phone packets on shutdown releaseQueueStatusPhonePacket(); diff --git a/src/xmodem.cpp b/src/xmodem.cpp index 9eeca4a8c..1f8d213c4 100644 --- a/src/xmodem.cpp +++ b/src/xmodem.cpp @@ -66,6 +66,7 @@ int XModemAdapter::check(const pb_byte_t *buf, int sz, unsigned short tcrc) void XModemAdapter::sendControl(XModem_Control c) { memset(xmodemStore, 0, XModem_size); xmodemStore->control = c; + packetReady.notifyObservers(packetno); } XModem *XModemAdapter::getForPhone() @@ -106,6 +107,7 @@ void XModemAdapter::handlePacket(XModem xmodemPacket) 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); + packetReady.notifyObservers(packetno); break; } sendControl(XModem_Control_NAK); @@ -167,6 +169,7 @@ void XModemAdapter::handlePacket(XModem xmodemPacket) isEOT = true; // send EOT on next Ack } + packetReady.notifyObservers(packetno); } else { // just received something weird. sendControl(XModem_Control_CAN); @@ -191,6 +194,7 @@ void XModemAdapter::handlePacket(XModem xmodemPacket) isEOT = true; // send EOT on next Ack } + packetReady.notifyObservers(packetno); } else { // just received something weird. sendControl(XModem_Control_CAN); diff --git a/src/xmodem.h b/src/xmodem.h index 0032eb92e..3de55ea39 100644 --- a/src/xmodem.h +++ b/src/xmodem.h @@ -41,6 +41,9 @@ class XModemAdapter { public: + // Called when we put a fragment in the outgoing memory + Observable packetReady; + XModemAdapter(); void handlePacket(XModem xmodemPacket);