refactor classes to accomodate SerialModule

This commit is contained in:
Thomas Göttgens 2022-12-22 18:24:42 +01:00
parent 1a3f2a8ab5
commit a289406863
9 changed files with 19 additions and 13 deletions

View File

@ -25,7 +25,7 @@ void consolePrintf(const char *format, ...)
#endif #endif
} }
SerialConsole::SerialConsole() : StreamAPI(&Port), RedirectablePrint(&Port) SerialConsole::SerialConsole() : StreamAPI(&Port), RedirectablePrint(&Port), concurrency::OSThread("SerialConsole")
{ {
assert(!console); assert(!console);
console = this; console = this;
@ -46,6 +46,10 @@ SerialConsole::SerialConsole() : StreamAPI(&Port), RedirectablePrint(&Port)
emitRebooted(); emitRebooted();
} }
int32_t SerialConsole::runOnce()
{
return runOncePart();
}
// For the serial port we can't really detect if any client is on the other side, so instead just look for recent messages // For the serial port we can't really detect if any client is on the other side, so instead just look for recent messages
bool SerialConsole::checkIsConnected() bool SerialConsole::checkIsConnected()

View File

@ -6,7 +6,7 @@
* Provides both debug printing and, if the client starts sending protobufs to us, switches to send/receive protobufs * Provides both debug printing and, if the client starts sending protobufs to us, switches to send/receive protobufs
* (and starts dropping debug printing - FIXME, eventually those prints should be encapsulated in protobufs). * (and starts dropping debug printing - FIXME, eventually those prints should be encapsulated in protobufs).
*/ */
class SerialConsole : public StreamAPI, public RedirectablePrint class SerialConsole : public StreamAPI, public RedirectablePrint, private concurrency::OSThread
{ {
public: public:
SerialConsole(); SerialConsole();
@ -24,6 +24,8 @@ class SerialConsole : public StreamAPI, public RedirectablePrint
return RedirectablePrint::write(c); return RedirectablePrint::write(c);
} }
virtual int32_t runOnce() override;
protected: protected:
/// Check the current underlying physical link to see if the client is currently connected /// Check the current underlying physical link to see if the client is currently connected

View File

@ -6,7 +6,7 @@
#define START2 0xc3 #define START2 0xc3
#define HEADER_LEN 4 #define HEADER_LEN 4
int32_t StreamAPI::runOnce() int32_t StreamAPI::runOncePart()
{ {
auto result = readStream(); auto result = readStream();
writeStream(); writeStream();

View File

@ -28,7 +28,7 @@ valid utf8 encoding. This makes it a bit easier to start a device outputting reg
after it has received a valid packet from the PC, turn off unencoded debug printing and switch to this packet encoding. after it has received a valid packet from the PC, turn off unencoded debug printing and switch to this packet encoding.
*/ */
class StreamAPI : public PhoneAPI, protected concurrency::OSThread class StreamAPI : public PhoneAPI
{ {
/** /**
* The stream we read/write from * The stream we read/write from
@ -42,13 +42,13 @@ class StreamAPI : public PhoneAPI, protected concurrency::OSThread
uint32_t lastRxMsec = 0; uint32_t lastRxMsec = 0;
public: public:
StreamAPI(Stream *_stream) : concurrency::OSThread("StreamAPI"), stream(_stream) {} StreamAPI(Stream *_stream) : stream(_stream) {}
/** /**
* Currently we require frequent invocation from loop() to check for arrived serial packets and to send new packets to the * Currently we require frequent invocation from loop() to check for arrived serial packets and to send new packets to the
* phone. * phone.
*/ */
virtual int32_t runOnce() override; virtual int32_t runOncePart();
private: private:
/** /**

View File

@ -14,7 +14,7 @@ void initApiServer(int port)
} }
} }
ethServerAPI::ethServerAPI(EthernetClient &_client) : StreamAPI(&client), client(_client) ethServerAPI::ethServerAPI(EthernetClient &_client) : StreamAPI(&client), concurrency::OSThread("ethServerAPI"), client(_client)
{ {
DEBUG_MSG("Incoming ethernet connection\n"); DEBUG_MSG("Incoming ethernet connection\n");
} }
@ -42,7 +42,7 @@ bool ethServerAPI::checkIsConnected()
int32_t ethServerAPI::runOnce() int32_t ethServerAPI::runOnce()
{ {
if (client.connected()) { if (client.connected()) {
return StreamAPI::runOnce(); return StreamAPI::runOncePart();
} else { } else {
DEBUG_MSG("Client dropped connection, suspending API service\n"); DEBUG_MSG("Client dropped connection, suspending API service\n");
enabled = false; // we no longer need to run enabled = false; // we no longer need to run

View File

@ -7,7 +7,7 @@
* Provides both debug printing and, if the client starts sending protobufs to us, switches to send/receive protobufs * Provides both debug printing and, if the client starts sending protobufs to us, switches to send/receive protobufs
* (and starts dropping debug printing - FIXME, eventually those prints should be encapsulated in protobufs). * (and starts dropping debug printing - FIXME, eventually those prints should be encapsulated in protobufs).
*/ */
class ethServerAPI : public StreamAPI class ethServerAPI : public StreamAPI, private concurrency::OSThread
{ {
private: private:
EthernetClient client; EthernetClient client;

View File

@ -14,7 +14,7 @@ void initApiServer(int port)
} }
} }
WiFiServerAPI::WiFiServerAPI(WiFiClient &_client) : StreamAPI(&client), client(_client) WiFiServerAPI::WiFiServerAPI(WiFiClient &_client) : StreamAPI(&client), concurrency::OSThread("WiFiServerAPI"), client(_client)
{ {
DEBUG_MSG("Incoming wifi connection\n"); DEBUG_MSG("Incoming wifi connection\n");
} }
@ -42,7 +42,7 @@ bool WiFiServerAPI::checkIsConnected()
int32_t WiFiServerAPI::runOnce() int32_t WiFiServerAPI::runOnce()
{ {
if (client.connected()) { if (client.connected()) {
return StreamAPI::runOnce(); return StreamAPI::runOncePart();
} else { } else {
DEBUG_MSG("Client dropped connection, suspending API service\n"); DEBUG_MSG("Client dropped connection, suspending API service\n");
enabled = false; // we no longer need to run enabled = false; // we no longer need to run

View File

@ -7,7 +7,7 @@
* Provides both debug printing and, if the client starts sending protobufs to us, switches to send/receive protobufs * Provides both debug printing and, if the client starts sending protobufs to us, switches to send/receive protobufs
* (and starts dropping debug printing - FIXME, eventually those prints should be encapsulated in protobufs). * (and starts dropping debug printing - FIXME, eventually those prints should be encapsulated in protobufs).
*/ */
class WiFiServerAPI : public StreamAPI class WiFiServerAPI : public StreamAPI, private concurrency::OSThread
{ {
private: private:
WiFiClient client; WiFiClient client;

View File

@ -197,7 +197,7 @@ int32_t SerialModule::runOnce()
} else { } else {
if (moduleConfig.serial.mode == ModuleConfig_SerialConfig_Serial_Mode_PROTO) { if (moduleConfig.serial.mode == ModuleConfig_SerialConfig_Serial_Mode_PROTO) {
return StreamAPI::runOnce(); return runOncePart();
} else if (moduleConfig.serial.mode == ModuleConfig_SerialConfig_Serial_Mode_NMEA) { } else if (moduleConfig.serial.mode == ModuleConfig_SerialConfig_Serial_Mode_NMEA) {
// in NMEA mode send out GGA every 2 seconds, Don't read from Port // in NMEA mode send out GGA every 2 seconds, Don't read from Port
if (millis() - lastNmeaTime > 2000) { if (millis() - lastNmeaTime > 2000) {