switch to own main loop, avoid warning in getTalkerId
This commit is contained in:
parent
9648901661
commit
e1044821a7
|
@ -107,6 +107,11 @@ String GwConfigHandler::getString(const String name, String defaultv) const{
|
||||||
if (!i) return defaultv;
|
if (!i) return defaultv;
|
||||||
return i->asString();
|
return i->asString();
|
||||||
}
|
}
|
||||||
|
const char * GwConfigHandler::getCString(const String name, const char *defaultv) const{
|
||||||
|
GwConfigInterface *i=getConfigItem(name,false);
|
||||||
|
if (!i) return defaultv;
|
||||||
|
return i->asCString();
|
||||||
|
}
|
||||||
bool GwConfigHandler::getBool(const String name, bool defaultv) const{
|
bool GwConfigHandler::getBool(const String name, bool defaultv) const{
|
||||||
GwConfigInterface *i=getConfigItem(name,false);
|
GwConfigInterface *i=getConfigItem(name,false);
|
||||||
if (!i) return defaultv;
|
if (!i) return defaultv;
|
||||||
|
|
|
@ -27,6 +27,7 @@ class GwConfigHandler: public GwConfigDefinitions{
|
||||||
String getString(const String name,const String defaultv="") const;
|
String getString(const String name,const String defaultv="") const;
|
||||||
bool getBool(const String name,bool defaultv=false) const ;
|
bool getBool(const String name,bool defaultv=false) const ;
|
||||||
int getInt(const String name,int defaultv=0) const;
|
int getInt(const String name,int defaultv=0) const;
|
||||||
|
const char * getCString(const String name, const char *defaultv="") const;
|
||||||
GwConfigInterface * getConfigItem(const String name, bool dummy=false) const;
|
GwConfigInterface * getConfigItem(const String name, bool dummy=false) const;
|
||||||
bool checkPass(String hash);
|
bool checkPass(String hash);
|
||||||
std::vector<String> getSpecial() const;
|
std::vector<String> getSpecial() const;
|
||||||
|
|
53
src/main.cpp
53
src/main.cpp
|
@ -14,6 +14,7 @@
|
||||||
#include "GwAppInfo.h"
|
#include "GwAppInfo.h"
|
||||||
// #define GW_MESSAGE_DEBUG_ENABLED
|
// #define GW_MESSAGE_DEBUG_ENABLED
|
||||||
//#define FALLBACK_SERIAL
|
//#define FALLBACK_SERIAL
|
||||||
|
#define OWN_LOOP
|
||||||
const unsigned long HEAP_REPORT_TIME=2000; //set to 0 to disable heap reporting
|
const unsigned long HEAP_REPORT_TIME=2000; //set to 0 to disable heap reporting
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include "Preferences.h"
|
#include "Preferences.h"
|
||||||
|
@ -315,7 +316,7 @@ public:
|
||||||
return &boatData;
|
return &boatData;
|
||||||
}
|
}
|
||||||
virtual const char* getTalkerId(){
|
virtual const char* getTalkerId(){
|
||||||
return config.getString(config.talkerId,String("GP")).c_str();
|
return config.getCString(config.talkerId,"GP");
|
||||||
}
|
}
|
||||||
virtual ~ApiImpl(){}
|
virtual ~ApiImpl(){}
|
||||||
virtual TaskInterfaces *taskInterfaces(){ return nullptr;}
|
virtual TaskInterfaces *taskInterfaces(){ return nullptr;}
|
||||||
|
@ -715,7 +716,29 @@ class DefaultLogWriter: public GwLogWriter{
|
||||||
USBSerial.print(data);
|
USBSerial.print(data);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
void loopRun();
|
||||||
|
void loop(){
|
||||||
|
#ifdef OWN_LOOP
|
||||||
|
vTaskDelete(NULL);
|
||||||
|
return;
|
||||||
|
#else
|
||||||
|
loopRun();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
void loopFunction(void *){
|
||||||
|
while (true){
|
||||||
|
loopRun();
|
||||||
|
//we don not call the serialEvent stuff as in the original
|
||||||
|
//main loop as this could cause some sort of a deadlock
|
||||||
|
//if serial writing or reading is done in a different thread
|
||||||
|
//and it remains inside some read/write routine with the uart being
|
||||||
|
//locked
|
||||||
|
//if(Serial1.available()) {}
|
||||||
|
//if(Serial.available()) {}
|
||||||
|
//if(Serial2.available()) {}
|
||||||
|
//delay(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
void setup() {
|
void setup() {
|
||||||
mainLock=xSemaphoreCreateMutex();
|
mainLock=xSemaphoreCreateMutex();
|
||||||
uint8_t chipid[6];
|
uint8_t chipid[6];
|
||||||
|
@ -877,6 +900,10 @@ void setup() {
|
||||||
logger.logString("wifi AP pass: %s",fixedApPass? gwWifi.AP_password:config.getString(config.apPassword).c_str());
|
logger.logString("wifi AP pass: %s",fixedApPass? gwWifi.AP_password:config.getString(config.apPassword).c_str());
|
||||||
logger.logString("admin pass: %s",config.getString(config.adminPassword).c_str());
|
logger.logString("admin pass: %s",config.getString(config.adminPassword).c_str());
|
||||||
logger.logDebug(GwLog::LOG,"setup done");
|
logger.logDebug(GwLog::LOG,"setup done");
|
||||||
|
#ifdef OWN_LOOP
|
||||||
|
logger.logDebug(GwLog::LOG,"starting own main loop");
|
||||||
|
xTaskCreateUniversal(loopFunction,"loop",8192,NULL,1,NULL,ARDUINO_RUNNING_CORE);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
//*****************************************************************************
|
//*****************************************************************************
|
||||||
void handleSendAndRead(bool handleRead){
|
void handleSendAndRead(bool handleRead){
|
||||||
|
@ -885,7 +912,8 @@ void handleSendAndRead(bool handleRead){
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loopRun() {
|
||||||
|
//logger.logDebug(GwLog::DEBUG,"main loop start");
|
||||||
monitor.reset();
|
monitor.reset();
|
||||||
GWSYNCHRONIZED(&mainLock);
|
GWSYNCHRONIZED(&mainLock);
|
||||||
logger.flush();
|
logger.flush();
|
||||||
|
@ -894,20 +922,21 @@ void loop() {
|
||||||
unsigned long now=millis();
|
unsigned long now=millis();
|
||||||
monitor.setTime(2);
|
monitor.setTime(2);
|
||||||
timers.loop();
|
timers.loop();
|
||||||
NMEA2000.loop();
|
|
||||||
monitor.setTime(3);
|
monitor.setTime(3);
|
||||||
|
NMEA2000.loop();
|
||||||
|
monitor.setTime(4);
|
||||||
channels.allChannels([](GwChannel *c){
|
channels.allChannels([](GwChannel *c){
|
||||||
c->loop(true,false);
|
c->loop(true,false);
|
||||||
});
|
});
|
||||||
//reads
|
//reads
|
||||||
monitor.setTime(4);
|
monitor.setTime(5);
|
||||||
channels.allChannels([](GwChannel *c){
|
channels.allChannels([](GwChannel *c){
|
||||||
c->loop(false,true);
|
c->loop(false,true);
|
||||||
});
|
});
|
||||||
//writes
|
//writes
|
||||||
monitor.setTime(5);
|
monitor.setTime(6);
|
||||||
NMEA2000.ParseMessages();
|
NMEA2000.ParseMessages();
|
||||||
monitor.setTime(6);
|
monitor.setTime(7);
|
||||||
|
|
||||||
int SourceAddress = NMEA2000.GetN2kSource();
|
int SourceAddress = NMEA2000.GetN2kSource();
|
||||||
if (SourceAddress != NodeAddress) { // Save potentially changed Source Address to NVS memory
|
if (SourceAddress != NodeAddress) { // Save potentially changed Source Address to NVS memory
|
||||||
|
@ -918,7 +947,7 @@ void loop() {
|
||||||
logger.logDebug(GwLog::LOG,"Address Change: New Address=%d\n", SourceAddress);
|
logger.logDebug(GwLog::LOG,"Address Change: New Address=%d\n", SourceAddress);
|
||||||
}
|
}
|
||||||
nmea0183Converter->loop();
|
nmea0183Converter->loop();
|
||||||
monitor.setTime(7);
|
monitor.setTime(8);
|
||||||
|
|
||||||
//read channels
|
//read channels
|
||||||
channels.allChannels([](GwChannel *c){
|
channels.allChannels([](GwChannel *c){
|
||||||
|
@ -945,13 +974,13 @@ void loop() {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
monitor.setTime(8);
|
monitor.setTime(9);
|
||||||
channels.allChannels([](GwChannel *c){
|
channels.allChannels([](GwChannel *c){
|
||||||
c->parseActisense([](const tN2kMsg &msg,int source){
|
c->parseActisense([](const tN2kMsg &msg,int source){
|
||||||
handleN2kMessage(msg,source);
|
handleN2kMessage(msg,source);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
monitor.setTime(9);
|
monitor.setTime(10);
|
||||||
|
|
||||||
//handle message requests
|
//handle message requests
|
||||||
GwMessage *msg=mainQueue.fetchMessage(0);
|
GwMessage *msg=mainQueue.fetchMessage(0);
|
||||||
|
@ -959,5 +988,7 @@ void loop() {
|
||||||
msg->process();
|
msg->process();
|
||||||
msg->unref();
|
msg->unref();
|
||||||
}
|
}
|
||||||
monitor.setTime(10);
|
monitor.setTime(11);
|
||||||
|
//logger.logDebug(GwLog::DEBUG,"main loop end");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue