added virtual destuctor for menu things

This commit is contained in:
2022-10-03 17:02:34 +02:00
parent a1a976be57
commit ee5bc9129a
9 changed files with 46 additions and 58 deletions
+2
View File
@@ -85,11 +85,13 @@
"blox", "blox",
"gast", "gast",
"GNSS", "GNSS",
"GPGGA",
"Huus", "Huus",
"Keine", "Keine",
"kleiax", "kleiax",
"Lebennig", "Lebennig",
"NMEA", "NMEA",
"NMEAGPGGA",
"NTRIP", "NTRIP",
"pidl", "pidl",
"pidr", "pidr",
+5
View File
@@ -14,6 +14,11 @@ Menu::Menu() {
this->selectedEntry = this->entrys.begin(); this->selectedEntry = this->entrys.begin();
} }
Menu::~Menu() {
for (std::list<MenuAction*>::iterator iter = this->entrys.begin(); iter != this->entrys.end(); iter++)
delete *iter;
}
void Menu::addEntry(MenuAction* entry) { void Menu::addEntry(MenuAction* entry) {
this->entrys.push_back(entry); this->entrys.push_back(entry);
+1
View File
@@ -24,6 +24,7 @@ class MenuAction;
class Menu : public MenuControl { class Menu : public MenuControl {
public: public:
Menu(); Menu();
~Menu() override;
/** /**
* @brief Add a menu action to the menu * @brief Add a menu action to the menu
+5
View File
@@ -23,6 +23,11 @@ MenuAction::MenuAction(const char* name, MenuControl* menu) {
this->callback = nullptr; this->callback = nullptr;
} }
MenuAction::~MenuAction() {
if (this->menu)
delete this->menu;
}
void MenuAction::runAction() { void MenuAction::runAction() {
if (isMenu) if (isMenu)
this->menu->printMenu(); this->menu->printMenu();
+3 -1
View File
@@ -43,6 +43,8 @@ class MenuAction {
*/ */
MenuAction(const char* name, MenuControl* menu); MenuAction(const char* name, MenuControl* menu);
~MenuAction();
/** /**
* @brief activates the entry * @brief activates the entry
*/ */
@@ -80,7 +82,7 @@ class MenuAction {
void (*callback) () = nullptr; void (*callback) () = nullptr;
bool isMenu = false; bool isMenu = false;
MenuControl* menu; MenuControl* menu = nullptr;
}; };
#endif // MENU_ENTRY_H #endif // MENU_ENTRY_H
+1
View File
@@ -24,6 +24,7 @@
*/ */
class MenuControl { class MenuControl {
public: public:
virtual ~MenuControl() {};
/** @name UserInputs /** @name UserInputs
* @brief This functions should be called be user actions. * @brief This functions should be called be user actions.
+6 -52
View File
@@ -25,9 +25,7 @@ Navigation::Navigation(Route* route) {
this->gps->setI2COutput(COM_TYPE_UBX); this->gps->setI2COutput(COM_TYPE_UBX);
this->gps->setUSBOutput(COM_TYPE_UBX | COM_TYPE_NMEA); this->gps->setUSBOutput(COM_TYPE_UBX | COM_TYPE_NMEA);
this->gps->setPortInput(COM_PORT_I2C, COM_TYPE_UBX | COM_TYPE_NMEA | COM_TYPE_RTCM3); this->gps->setNavigationFrequency(1);
this->gps->getNavigationFrequency(1);
if (route) if (route)
this->route = route; this->route = route;
@@ -38,55 +36,17 @@ Navigation::Navigation(Route* route) {
Navigation::~Navigation() { Navigation::~Navigation() {
delete this->gps; delete this->gps;
if (this->isNtripInit) { if (this->isNtripInit)
delete this->ntripClient; delete this->ntripClient;
delete this->host;
delete this->mountPoint;
delete this->user;
delete this->password;
}
if (this->route) if (this->route)
delete this->route; delete this->route;
} }
void Navigation::initNtrip(String host, uint16_t port, String mountPoint, String user, String password) { void Navigation::initNtrip(String host, uint16_t port, String mountPoint, String user, String password) {
this->host = new char[host.length() + 1]; this->ntripClient = new NTRIPClient(this->gps, host.c_str(), port, mountPoint.c_str(), user.c_str(), password.c_str());
this->mountPoint = new char[mountPoint.length() + 1]; this->ntripClient->gpsConfiguration();
this->user = new char[user.length() + 1];
this->password = new char[password.length() + 1];
strcpy(this->host, host.c_str());
strcpy(this->mountPoint, mountPoint.c_str());
strcpy(this->user, user.c_str());
strcpy(this->password, password.c_str());
this->port = port;
this->ntripClient = new NTRIPClient;
this->isNtripInit = true; this->isNtripInit = true;
std::cout << "Requesting SourceTable." << std::endl;
if(this->ntripClient->reqSrcTbl(this->host, (int) this->port)){
char buffer[512];
delay(5);
while(this->ntripClient->available()) {
this->ntripClient->readLine(buffer,sizeof(buffer));
std::cout << buffer << std::endl;
}
} else {
std::cout << "SourceTable request error" << std::endl;
}
std::cout << "Requesting SourceTable is OK" << std::endl;
this->ntripClient->stop(); //Need to call "stop" function for next request.
std::cout << "Requesting MountPoint's Raw data" << std::endl;
if(!this->ntripClient->reqRaw(this->host, this->port, this->mountPoint,
this->user, this->password)){
delay(15000);
ESP.restart();
}
std::cout << "Requesting MountPoint is OK" << std::endl;
} }
void Navigation::loop() { void Navigation::loop() {
@@ -95,14 +55,8 @@ void Navigation::loop() {
if (millis() - this->lastMillis < this->timeToWait) if (millis() - this->lastMillis < this->timeToWait)
return; return;
if (this->isNtripInit) { if (this->isNtripInit)
uint8_t rtcmData[512 * 4]; this->ntripClient->loop();
uint16_t rtcmCount = this->ntripClient->available();
if (rtcmCount) {
this->ntripClient->readBytes(rtcmData, rtcmCount);
this->gps->pushRawData(rtcmData, rtcmCount);
}
}
} }
void Navigation::newRoute() { void Navigation::newRoute() {
+16 -4
View File
@@ -34,6 +34,13 @@ void NTRIPClient::loop() {
this->gps->checkUblox(); this->gps->checkUblox();
this->gps->checkCallbacks(); this->gps->checkCallbacks();
if (millis() - this->lastGPGGAPushTime > this->pushGPGGATime) {
NMEA_GGA_data_t *data = nullptr;
uint8_t res = this->gps->getLatestNMEAGPGGA(data);
if (res == 2)
this->pushGPGGA(data);
}
switch (this->state) { switch (this->state) {
case NTRIPClientStates::openConnection: case NTRIPClientStates::openConnection:
if (millis() - this->lastNtripConnectTime > this->tryReconnectTime) if (millis() - this->lastNtripConnectTime > this->tryReconnectTime)
@@ -72,12 +79,11 @@ void NTRIPClient::loop() {
void NTRIPClient::gpsConfiguration() { void NTRIPClient::gpsConfiguration() {
this->gps->setI2COutput(COM_TYPE_UBX | COM_TYPE_NMEA); this->gps->setI2COutput(COM_TYPE_UBX | COM_TYPE_NMEA);
this->gps->setPortInput(COM_PORT_I2C, COM_TYPE_UBX | COM_TYPE_NMEA | COM_TYPE_RTCM3); this->gps->setPortInput(COM_PORT_I2C, COM_TYPE_UBX | COM_TYPE_NMEA | COM_TYPE_RTCM3);
this->gps->(SFE_UBLOX_DGNSS_MODE_FIXED); // Set the differential mode - ambiguities are fixed whenever possible this->gps->setDGNSSConfiguration(SFE_UBLOX_DGNSS_MODE_FIXED); // Set the differential mode - ambiguities are fixed whenever possible
this->gps->setNavigationFrequency(1); this->gps->setNavigationFrequency(1);
this->gps->setMainTalkerID(SFE_UBLOX_MAIN_TALKER_ID_GP); this->gps->setMainTalkerID(SFE_UBLOX_MAIN_TALKER_ID_GP);
this->gps->enableNMEAMessage(UBX_NMEA_GGA, COM_PORT_I2C, 10); this->gps->enableNMEAMessage(UBX_NMEA_GGA, COM_PORT_I2C, 10);
this->gps->setNMEAGPGGAcallbackPtr(&pushGPGGA); // Set up the callback for GPGGA
this->gps->setAutoPVTcallbackPtr(&(NTRIPClient::printPVTdata)); this->gps->setAutoPVTcallbackPtr(&(NTRIPClient::printPVTdata));
} }
@@ -140,7 +146,7 @@ bool NTRIPClient::beginClient() {
this->ntripClient->stop(); this->ntripClient->stop();
return false; return false;
} }
delay(10) delay(10);
} }
//Check reply //Check reply
@@ -214,7 +220,7 @@ bool NTRIPClient::processConnection() {
void NTRIPClient::pushGPGGA(NMEA_GGA_data_t *nmeaData) { void NTRIPClient::pushGPGGA(NMEA_GGA_data_t *nmeaData) {
if (this->ntripClient->connected() && this->transmitLocation) { if (this->ntripClient->connected() && this->transmitLocation) {
std::cout << "Pushing GGA to server: " << (const char *)nmeaData->nmea) << std::endl; std::cout << "Pushing GGA to server: " << (const char *)nmeaData->nmea << std::endl;
this->ntripClient->print((const char *)nmeaData->nmea); this->ntripClient->print((const char *)nmeaData->nmea);
} }
} }
@@ -262,3 +268,9 @@ void NTRIPClient::printPVTdata(UBX_NAV_PVT_data_t *ubxDataStruct) {
<< "Carrier Solution: " << carrSolnString << "Carrier Solution: " << carrSolnString
<< "Horizontal Accuracy Estimate: " << hAcc << " mm" << std::endl; << "Horizontal Accuracy Estimate: " << hAcc << " mm" << std::endl;
} }
bool NTRIPClient::isConnected() {
if (this->state == NTRIPClientStates::pushData)
return true;
return false;
}
+7 -1
View File
@@ -21,13 +21,17 @@ class NTRIPClient {
void loop(); void loop();
void gpsConfiguration(); void gpsConfiguration();
void pushGPGGA(NMEA_GGA_data_t *nmeaData);
void setTransmitLocation(bool b) { this->transmitLocation = b; } void setTransmitLocation(bool b) { this->transmitLocation = b; }
void setActivated(bool b) { this->activated = b; } void setActivated(bool b) { this->activated = b; }
bool isConnected();
NTRIPClientStates getClientState() { return this->state; }
static void printPVTdata(UBX_NAV_PVT_data_t *ubxDataStruct); static void printPVTdata(UBX_NAV_PVT_data_t *ubxDataStruct);
private: private:
void pushGPGGA(NMEA_GGA_data_t *nmeaData);
bool beginClient(); bool beginClient();
void closeConnection(); void closeConnection();
bool processConnection(); bool processConnection();
@@ -42,6 +46,7 @@ class NTRIPClient {
uint16_t port; uint16_t port;
uint32_t lastReceivedRtcmTime = 0; uint32_t lastReceivedRtcmTime = 0;
uint32_t lastNtripConnectTime = 0; uint32_t lastNtripConnectTime = 0;
uint32_t lastGPGGAPushTime = 0;
uint32_t lastLoopTime = 0; uint32_t lastLoopTime = 0;
const char* host; const char* host;
@@ -52,6 +57,7 @@ class NTRIPClient {
const uint16_t timeOut = 5000; const uint16_t timeOut = 5000;
const uint16_t tryReconnectTime = 5000; const uint16_t tryReconnectTime = 5000;
const uint16_t bufferSize = 512; const uint16_t bufferSize = 512;
const uint16_t pushGPGGATime = 10000;
}; };
#endif #endif