notify phoneAPI about new packages to process

This commit is contained in:
Thomas Göttgens 2023-01-09 20:06:11 +01:00
parent fce52e16e3
commit 3a6e3464e6
3 changed files with 9 additions and 0 deletions

View File

@ -33,6 +33,7 @@ void PhoneAPI::handleStartConfig()
if (!isConnected()) { if (!isConnected()) {
onConnectionChanged(true); onConnectionChanged(true);
observe(&service.fromNumChanged); observe(&service.fromNumChanged);
observe(&xModem.packetReady);
} }
// even if we were already connected - restart our state machine // even if we were already connected - restart our state machine
@ -50,6 +51,7 @@ void PhoneAPI::close()
state = STATE_SEND_NOTHING; state = STATE_SEND_NOTHING;
unobserve(&service.fromNumChanged); unobserve(&service.fromNumChanged);
unobserve(&xModem.packetReady);
releasePhonePacket(); // Don't leak phone packets on shutdown releasePhonePacket(); // Don't leak phone packets on shutdown
releaseQueueStatusPhonePacket(); releaseQueueStatusPhonePacket();

View File

@ -66,6 +66,7 @@ int XModemAdapter::check(const pb_byte_t *buf, int sz, unsigned short tcrc)
void XModemAdapter::sendControl(XModem_Control c) { void XModemAdapter::sendControl(XModem_Control c) {
memset(xmodemStore, 0, XModem_size); memset(xmodemStore, 0, XModem_size);
xmodemStore->control = c; xmodemStore->control = c;
packetReady.notifyObservers(packetno);
} }
XModem *XModemAdapter::getForPhone() XModem *XModemAdapter::getForPhone()
@ -106,6 +107,7 @@ void XModemAdapter::handlePacket(XModem xmodemPacket)
xmodemStore->seq = packetno; xmodemStore->seq = packetno;
xmodemStore->buffer.size = file.read(xmodemStore->buffer.bytes, sizeof(XModem_buffer_t::bytes)); xmodemStore->buffer.size = file.read(xmodemStore->buffer.bytes, sizeof(XModem_buffer_t::bytes));
xmodemStore->crc16 = crc16_ccitt(xmodemStore->buffer.bytes, xmodemStore->buffer.size); xmodemStore->crc16 = crc16_ccitt(xmodemStore->buffer.bytes, xmodemStore->buffer.size);
packetReady.notifyObservers(packetno);
break; break;
} }
sendControl(XModem_Control_NAK); sendControl(XModem_Control_NAK);
@ -167,6 +169,7 @@ void XModemAdapter::handlePacket(XModem xmodemPacket)
isEOT = true; isEOT = true;
// send EOT on next Ack // send EOT on next Ack
} }
packetReady.notifyObservers(packetno);
} else { } else {
// just received something weird. // just received something weird.
sendControl(XModem_Control_CAN); sendControl(XModem_Control_CAN);
@ -191,6 +194,7 @@ void XModemAdapter::handlePacket(XModem xmodemPacket)
isEOT = true; isEOT = true;
// send EOT on next Ack // send EOT on next Ack
} }
packetReady.notifyObservers(packetno);
} else { } else {
// just received something weird. // just received something weird.
sendControl(XModem_Control_CAN); sendControl(XModem_Control_CAN);

View File

@ -41,6 +41,9 @@
class XModemAdapter class XModemAdapter
{ {
public: public:
// Called when we put a fragment in the outgoing memory
Observable<uint32_t> packetReady;
XModemAdapter(); XModemAdapter();
void handlePacket(XModem xmodemPacket); void handlePacket(XModem xmodemPacket);