mirror of
https://github.com/meshtastic/firmware.git
synced 2025-04-29 11:01:15 +00:00
CalTopo NMEA mode (#2526)
* CalTopo NMEA mode * Didn't need that actually * Missed a paren
This commit is contained in:
parent
e699427bfc
commit
9ddbfc0e3e
@ -18,10 +18,11 @@
|
|||||||
* -------------------------------------------
|
* -------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
uint32_t printWPL(char *buf, size_t bufsz, const meshtastic_Position &pos, const char *name)
|
uint32_t printWPL(char *buf, size_t bufsz, const meshtastic_Position &pos, const char *name, bool isCaltopoMode)
|
||||||
{
|
{
|
||||||
GeoCoord geoCoord(pos.latitude_i, pos.longitude_i, pos.altitude);
|
GeoCoord geoCoord(pos.latitude_i, pos.longitude_i, pos.altitude);
|
||||||
uint32_t len = snprintf(buf, bufsz, "$GNWPL,%02d%07.4f,%c,%03d%07.4f,%c,%s", geoCoord.getDMSLatDeg(),
|
char type = isCaltopoMode ? 'P' : 'N';
|
||||||
|
uint32_t len = snprintf(buf, bufsz, "$G%cWPL,%02d%07.4f,%c,%03d%07.4f,%c,%s", type, geoCoord.getDMSLatDeg(),
|
||||||
(abs(geoCoord.getLatitude()) - geoCoord.getDMSLatDeg() * 1e+7) * 6e-6, geoCoord.getDMSLatCP(),
|
(abs(geoCoord.getLatitude()) - geoCoord.getDMSLatDeg() * 1e+7) * 6e-6, geoCoord.getDMSLatCP(),
|
||||||
geoCoord.getDMSLonDeg(), (abs(geoCoord.getLongitude()) - geoCoord.getDMSLonDeg() * 1e+7) * 6e-6,
|
geoCoord.getDMSLonDeg(), (abs(geoCoord.getLongitude()) - geoCoord.getDMSLonDeg() * 1e+7) * 6e-6,
|
||||||
geoCoord.getDMSLonCP(), name);
|
geoCoord.getDMSLonCP(), name);
|
||||||
|
@ -3,5 +3,5 @@
|
|||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
uint32_t printWPL(char *buf, size_t bufsz, const meshtastic_Position &pos, const char *name);
|
uint32_t printWPL(char *buf, size_t bufsz, const meshtastic_Position &pos, const char *name, bool isCaltopoMode = false);
|
||||||
uint32_t printGGA(char *buf, size_t bufsz, const meshtastic_Position &pos);
|
uint32_t printGGA(char *buf, size_t bufsz, const meshtastic_Position &pos);
|
||||||
|
@ -71,6 +71,7 @@ SerialModuleRadio::SerialModuleRadio() : MeshModule("SerialModuleRadio")
|
|||||||
ourPortNum = meshtastic_PortNum_TEXT_MESSAGE_APP;
|
ourPortNum = meshtastic_PortNum_TEXT_MESSAGE_APP;
|
||||||
break;
|
break;
|
||||||
case meshtastic_ModuleConfig_SerialConfig_Serial_Mode_NMEA:
|
case meshtastic_ModuleConfig_SerialConfig_Serial_Mode_NMEA:
|
||||||
|
case meshtastic_ModuleConfig_SerialConfig_Serial_Mode_CALTOPO:
|
||||||
ourPortNum = meshtastic_PortNum_POSITION_APP;
|
ourPortNum = meshtastic_PortNum_POSITION_APP;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -108,56 +109,7 @@ int32_t SerialModule::runOnce()
|
|||||||
// Interface with the serial peripheral from in here.
|
// Interface with the serial peripheral from in here.
|
||||||
LOG_INFO("Initializing serial peripheral interface\n");
|
LOG_INFO("Initializing serial peripheral interface\n");
|
||||||
|
|
||||||
uint32_t baud = 0;
|
uint32_t baud = getBaudRate();
|
||||||
|
|
||||||
if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_DEFAULT) {
|
|
||||||
baud = 38400;
|
|
||||||
|
|
||||||
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_110) {
|
|
||||||
baud = 110;
|
|
||||||
|
|
||||||
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_300) {
|
|
||||||
baud = 300;
|
|
||||||
|
|
||||||
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_600) {
|
|
||||||
baud = 600;
|
|
||||||
|
|
||||||
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_1200) {
|
|
||||||
baud = 1200;
|
|
||||||
|
|
||||||
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_2400) {
|
|
||||||
baud = 2400;
|
|
||||||
|
|
||||||
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_4800) {
|
|
||||||
baud = 4800;
|
|
||||||
|
|
||||||
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_9600) {
|
|
||||||
baud = 9600;
|
|
||||||
|
|
||||||
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_19200) {
|
|
||||||
baud = 19200;
|
|
||||||
|
|
||||||
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_38400) {
|
|
||||||
baud = 38400;
|
|
||||||
|
|
||||||
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_57600) {
|
|
||||||
baud = 57600;
|
|
||||||
|
|
||||||
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_115200) {
|
|
||||||
baud = 115200;
|
|
||||||
|
|
||||||
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_230400) {
|
|
||||||
baud = 230400;
|
|
||||||
|
|
||||||
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_460800) {
|
|
||||||
baud = 460800;
|
|
||||||
|
|
||||||
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_576000) {
|
|
||||||
baud = 576000;
|
|
||||||
|
|
||||||
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_921600) {
|
|
||||||
baud = 921600;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef ARCH_ESP32
|
#ifdef ARCH_ESP32
|
||||||
Serial2.setRxBufferSize(RX_BUFFER);
|
Serial2.setRxBufferSize(RX_BUFFER);
|
||||||
@ -186,16 +138,21 @@ int32_t SerialModule::runOnce()
|
|||||||
if (moduleConfig.serial.mode == meshtastic_ModuleConfig_SerialConfig_Serial_Mode_PROTO) {
|
if (moduleConfig.serial.mode == meshtastic_ModuleConfig_SerialConfig_Serial_Mode_PROTO) {
|
||||||
emitRebooted();
|
emitRebooted();
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
if (moduleConfig.serial.mode == meshtastic_ModuleConfig_SerialConfig_Serial_Mode_PROTO) {
|
if (moduleConfig.serial.mode == meshtastic_ModuleConfig_SerialConfig_Serial_Mode_PROTO) {
|
||||||
return runOncePart();
|
return runOncePart();
|
||||||
} else if (moduleConfig.serial.mode == meshtastic_ModuleConfig_SerialConfig_Serial_Mode_NMEA) {
|
} else if (moduleConfig.serial.mode == meshtastic_ModuleConfig_SerialConfig_Serial_Mode_NMEA ||
|
||||||
|
moduleConfig.serial.mode == meshtastic_ModuleConfig_SerialConfig_Serial_Mode_CALTOPO) {
|
||||||
// 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) {
|
||||||
lastNmeaTime = millis();
|
lastNmeaTime = millis();
|
||||||
|
if (moduleConfig.serial.mode == meshtastic_ModuleConfig_SerialConfig_Serial_Mode_CALTOPO) {
|
||||||
|
printWPL(outbuf, sizeof(outbuf), nodeDB.getNode(myNodeInfo.my_node_num)->position,
|
||||||
|
nodeDB.getNode(myNodeInfo.my_node_num)->user.long_name, true);
|
||||||
|
} else {
|
||||||
printGGA(outbuf, sizeof(outbuf), nodeDB.getNode(myNodeInfo.my_node_num)->position);
|
printGGA(outbuf, sizeof(outbuf), nodeDB.getNode(myNodeInfo.my_node_num)->position);
|
||||||
|
}
|
||||||
Serial2.printf("%s", outbuf);
|
Serial2.printf("%s", outbuf);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -266,7 +223,6 @@ ProcessMessage SerialModuleRadio::handleReceived(const meshtastic_MeshPacket &mp
|
|||||||
Serial2.printf("%s", p.payload.bytes);
|
Serial2.printf("%s", p.payload.bytes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
if (moduleConfig.serial.mode == meshtastic_ModuleConfig_SerialConfig_Serial_Mode_DEFAULT ||
|
if (moduleConfig.serial.mode == meshtastic_ModuleConfig_SerialConfig_Serial_Mode_DEFAULT ||
|
||||||
@ -288,7 +244,8 @@ ProcessMessage SerialModuleRadio::handleReceived(const meshtastic_MeshPacket &mp
|
|||||||
decoded = &scratch;
|
decoded = &scratch;
|
||||||
}
|
}
|
||||||
// send position packet as WPL to the serial port
|
// send position packet as WPL to the serial port
|
||||||
printWPL(outbuf, sizeof(outbuf), *decoded, nodeDB.getNode(getFrom(&mp))->user.long_name);
|
printWPL(outbuf, sizeof(outbuf), *decoded, nodeDB.getNode(getFrom(&mp))->user.long_name,
|
||||||
|
moduleConfig.serial.mode == meshtastic_ModuleConfig_SerialConfig_Serial_Mode_CALTOPO);
|
||||||
Serial2.printf("%s", outbuf);
|
Serial2.printf("%s", outbuf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -296,4 +253,42 @@ ProcessMessage SerialModuleRadio::handleReceived(const meshtastic_MeshPacket &mp
|
|||||||
}
|
}
|
||||||
return ProcessMessage::CONTINUE; // Let others look at this message also if they want
|
return ProcessMessage::CONTINUE; // Let others look at this message also if they want
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t SerialModule::getBaudRate()
|
||||||
|
{
|
||||||
|
if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_DEFAULT) {
|
||||||
|
return 38400;
|
||||||
|
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_110) {
|
||||||
|
return 110;
|
||||||
|
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_300) {
|
||||||
|
return 300;
|
||||||
|
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_600) {
|
||||||
|
return 600;
|
||||||
|
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_1200) {
|
||||||
|
return 1200;
|
||||||
|
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_2400) {
|
||||||
|
return 2400;
|
||||||
|
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_4800) {
|
||||||
|
return 4800;
|
||||||
|
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_9600) {
|
||||||
|
return 9600;
|
||||||
|
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_19200) {
|
||||||
|
return 19200;
|
||||||
|
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_38400) {
|
||||||
|
return 38400;
|
||||||
|
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_57600) {
|
||||||
|
return 57600;
|
||||||
|
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_115200) {
|
||||||
|
return 115200;
|
||||||
|
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_230400) {
|
||||||
|
return 230400;
|
||||||
|
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_460800) {
|
||||||
|
return 460800;
|
||||||
|
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_576000) {
|
||||||
|
return 576000;
|
||||||
|
} else if (moduleConfig.serial.baud == meshtastic_ModuleConfig_SerialConfig_Serial_Baud_BAUD_921600) {
|
||||||
|
return 921600;
|
||||||
|
}
|
||||||
|
return 38400;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -25,6 +25,9 @@ class SerialModule : public StreamAPI, private concurrency::OSThread
|
|||||||
|
|
||||||
/// 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
|
||||||
virtual bool checkIsConnected() override;
|
virtual bool checkIsConnected() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
uint32_t getBaudRate();
|
||||||
};
|
};
|
||||||
|
|
||||||
extern SerialModule *serialModule;
|
extern SerialModule *serialModule;
|
||||||
|
Loading…
Reference in New Issue
Block a user