2021-06-27 17:56:28 +00:00
|
|
|
#include "configuration.h"
|
2020-04-27 16:36:39 +00:00
|
|
|
#include "SerialConsole.h"
|
2021-03-10 07:21:30 +00:00
|
|
|
#include "NodeDB.h"
|
2020-06-08 23:35:26 +00:00
|
|
|
#include "PowerFSM.h"
|
2020-04-27 16:36:39 +00:00
|
|
|
|
|
|
|
#define Port Serial
|
|
|
|
|
2021-03-24 22:15:15 +00:00
|
|
|
SerialConsole *console;
|
|
|
|
|
|
|
|
void consoleInit()
|
|
|
|
{
|
|
|
|
new SerialConsole(); // Must be dynamically allocated because we are now inheriting from thread
|
|
|
|
}
|
2020-04-27 16:36:39 +00:00
|
|
|
|
2021-03-10 07:21:30 +00:00
|
|
|
void consolePrintf(const char *format, ...)
|
|
|
|
{
|
|
|
|
va_list arg;
|
|
|
|
va_start(arg, format);
|
2021-03-24 22:15:15 +00:00
|
|
|
console->vprintf(format, arg);
|
2021-03-10 07:21:30 +00:00
|
|
|
va_end(arg);
|
|
|
|
}
|
|
|
|
|
2020-04-27 16:36:39 +00:00
|
|
|
SerialConsole::SerialConsole() : StreamAPI(&Port), RedirectablePrint(&Port)
|
|
|
|
{
|
2021-03-24 22:15:15 +00:00
|
|
|
assert(!console);
|
|
|
|
console = this;
|
2020-04-27 16:36:39 +00:00
|
|
|
canWrite = false; // We don't send packets to our port until it has talked to us first
|
2021-03-24 22:15:15 +00:00
|
|
|
// setDestination(&noopPrint); for testing, try turning off 'all' debug output and see what leaks
|
2020-04-27 16:36:39 +00:00
|
|
|
|
|
|
|
Port.begin(SERIAL_BAUD);
|
2022-03-25 22:06:31 +00:00
|
|
|
#ifdef NRF52_SERIES
|
|
|
|
time_t timeout = millis();
|
|
|
|
while (!Port) {
|
2022-03-26 10:05:36 +00:00
|
|
|
if ((millis() - timeout) < 5000) {
|
2022-03-25 22:06:31 +00:00
|
|
|
delay(100);
|
|
|
|
} else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
2020-04-29 00:43:16 +00:00
|
|
|
emitRebooted();
|
2020-04-27 16:36:39 +00:00
|
|
|
}
|
|
|
|
|
2021-05-03 06:46:30 +00:00
|
|
|
// 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()
|
|
|
|
{
|
|
|
|
uint32_t now = millis();
|
|
|
|
return (now - lastContactMsec) < getPref_phone_timeout_secs() * 1000UL;
|
|
|
|
}
|
|
|
|
|
2020-04-27 16:36:39 +00:00
|
|
|
/**
|
2020-05-03 02:51:25 +00:00
|
|
|
* we override this to notice when we've received a protobuf over the serial
|
|
|
|
* stream. Then we shunt off debug serial output.
|
2020-04-27 16:36:39 +00:00
|
|
|
*/
|
2021-03-24 22:15:15 +00:00
|
|
|
bool SerialConsole::handleToRadio(const uint8_t *buf, size_t len)
|
2020-04-27 16:36:39 +00:00
|
|
|
{
|
2020-06-09 17:35:06 +00:00
|
|
|
// Turn off debug serial printing once the API is activated, because other threads could print and corrupt packets
|
2021-03-10 07:21:30 +00:00
|
|
|
if (!radioConfig.preferences.debug_log_enabled)
|
2020-12-09 03:56:41 +00:00
|
|
|
setDestination(&noopPrint);
|
2020-04-27 16:36:39 +00:00
|
|
|
canWrite = true;
|
|
|
|
|
2021-03-24 22:15:15 +00:00
|
|
|
return StreamAPI::handleToRadio(buf, len);
|
2020-06-08 23:06:59 +00:00
|
|
|
}
|
|
|
|
|