allow to set the nmea0183 talker id
This commit is contained in:
parent
c782225e33
commit
b0684fc65a
|
@ -33,10 +33,12 @@
|
||||||
|
|
||||||
|
|
||||||
N2kDataToNMEA0183::N2kDataToNMEA0183(GwLog * logger, GwBoatData *boatData, tNMEA2000 *NMEA2000,
|
N2kDataToNMEA0183::N2kDataToNMEA0183(GwLog * logger, GwBoatData *boatData, tNMEA2000 *NMEA2000,
|
||||||
tSendNMEA0183MessageCallback callback, int id)
|
tSendNMEA0183MessageCallback callback, int id,String talkerId)
|
||||||
: tNMEA2000::tMsgHandler(0,NMEA2000){
|
: tNMEA2000::tMsgHandler(0,NMEA2000){
|
||||||
SendNMEA0183MessageCallback=0;
|
SendNMEA0183MessageCallback=0;
|
||||||
this->SendNMEA0183MessageCallback=callback;
|
this->SendNMEA0183MessageCallback=callback;
|
||||||
|
strncpy(this->talkerId,talkerId.c_str(),2);
|
||||||
|
talkerId[2]=0;
|
||||||
sourceId=id;
|
sourceId=id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,13 +138,13 @@ private:
|
||||||
//no variation
|
//no variation
|
||||||
if (ref == N2khr_magnetic){
|
if (ref == N2khr_magnetic){
|
||||||
updateDouble(boatData->MagneticHeading,Heading);
|
updateDouble(boatData->MagneticHeading,Heading);
|
||||||
if (NMEA0183SetHDM(NMEA0183Msg,Heading)){
|
if (NMEA0183SetHDM(NMEA0183Msg,Heading,talkerId)){
|
||||||
SendMessage(NMEA0183Msg);
|
SendMessage(NMEA0183Msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ref == N2khr_true){
|
if (ref == N2khr_true){
|
||||||
updateDouble(boatData->Heading,Heading);
|
updateDouble(boatData->Heading,Heading);
|
||||||
if (NMEA0183SetHDT(NMEA0183Msg,Heading)){
|
if (NMEA0183SetHDT(NMEA0183Msg,Heading,talkerId)){
|
||||||
SendMessage(NMEA0183Msg);
|
SendMessage(NMEA0183Msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -160,13 +162,13 @@ private:
|
||||||
updateDouble(boatData->Heading,Heading);
|
updateDouble(boatData->Heading,Heading);
|
||||||
if (!N2kIsNA(MagneticHeading)){
|
if (!N2kIsNA(MagneticHeading)){
|
||||||
if (NMEA0183SetHDG(NMEA0183Msg, MagneticHeading,_Deviation,
|
if (NMEA0183SetHDG(NMEA0183Msg, MagneticHeading,_Deviation,
|
||||||
Variation))
|
Variation,talkerId))
|
||||||
{
|
{
|
||||||
SendMessage(NMEA0183Msg);
|
SendMessage(NMEA0183Msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!N2kIsNA(Heading)){
|
if (!N2kIsNA(Heading)){
|
||||||
if (NMEA0183SetHDT(NMEA0183Msg, Heading))
|
if (NMEA0183SetHDT(NMEA0183Msg, Heading,talkerId))
|
||||||
{
|
{
|
||||||
SendMessage(NMEA0183Msg);
|
SendMessage(NMEA0183Msg);
|
||||||
}
|
}
|
||||||
|
@ -203,7 +205,7 @@ private:
|
||||||
updateDouble(boatData->STW, WaterReferenced);
|
updateDouble(boatData->STW, WaterReferenced);
|
||||||
unsigned long now = millis();
|
unsigned long now = millis();
|
||||||
double MagneticHeading = (boatData->Heading->isValid(now) && boatData->Variation->isValid(now)) ? boatData->Heading->getData() + boatData->Variation->getData() : NMEA0183DoubleNA;
|
double MagneticHeading = (boatData->Heading->isValid(now) && boatData->Variation->isValid(now)) ? boatData->Heading->getData() + boatData->Variation->getData() : NMEA0183DoubleNA;
|
||||||
if (NMEA0183SetVHW(NMEA0183Msg, boatData->Heading->getData(), MagneticHeading, WaterReferenced))
|
if (NMEA0183SetVHW(NMEA0183Msg, boatData->Heading->getData(), MagneticHeading, WaterReferenced,talkerId))
|
||||||
{
|
{
|
||||||
SendMessage(NMEA0183Msg);
|
SendMessage(NMEA0183Msg);
|
||||||
}
|
}
|
||||||
|
@ -224,11 +226,11 @@ private:
|
||||||
WaterDepth = DepthBelowTransducer + Offset;
|
WaterDepth = DepthBelowTransducer + Offset;
|
||||||
updateDouble(boatData->WaterDepth, WaterDepth);
|
updateDouble(boatData->WaterDepth, WaterDepth);
|
||||||
tNMEA0183Msg NMEA0183Msg;
|
tNMEA0183Msg NMEA0183Msg;
|
||||||
if (NMEA0183SetDPT(NMEA0183Msg, DepthBelowTransducer, Offset))
|
if (NMEA0183SetDPT(NMEA0183Msg, DepthBelowTransducer, Offset,talkerId))
|
||||||
{
|
{
|
||||||
SendMessage(NMEA0183Msg);
|
SendMessage(NMEA0183Msg);
|
||||||
}
|
}
|
||||||
if (NMEA0183SetDBx(NMEA0183Msg, DepthBelowTransducer, Offset))
|
if (NMEA0183SetDBx(NMEA0183Msg, DepthBelowTransducer, Offset,talkerId))
|
||||||
{
|
{
|
||||||
SendMessage(NMEA0183Msg);
|
SendMessage(NMEA0183Msg);
|
||||||
}
|
}
|
||||||
|
@ -269,7 +271,7 @@ private:
|
||||||
updateDouble(boatData->COG, COG);
|
updateDouble(boatData->COG, COG);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (NMEA0183SetVTG(NMEA0183Msg, COG, MCOG, SOG))
|
if (NMEA0183SetVTG(NMEA0183Msg, COG, MCOG, SOG,talkerId))
|
||||||
{
|
{
|
||||||
SendMessage(NMEA0183Msg);
|
SendMessage(NMEA0183Msg);
|
||||||
}
|
}
|
||||||
|
@ -354,12 +356,12 @@ private:
|
||||||
if (NMEA0183SetMWV(NMEA0183Msg,
|
if (NMEA0183SetMWV(NMEA0183Msg,
|
||||||
formatCourse(boatData->TWD->getData()),
|
formatCourse(boatData->TWD->getData()),
|
||||||
NMEA0183Reference,
|
NMEA0183Reference,
|
||||||
boatData->TWS->getDataWithDefault(NMEA0183DoubleNA)))
|
boatData->TWS->getDataWithDefault(NMEA0183DoubleNA),talkerId))
|
||||||
SendMessage(NMEA0183Msg);
|
SendMessage(NMEA0183Msg);
|
||||||
double magnetic = boatData->TWD->getData();
|
double magnetic = boatData->TWD->getData();
|
||||||
if (boatData->Variation->isValid())
|
if (boatData->Variation->isValid())
|
||||||
magnetic -= boatData->Variation->getData();
|
magnetic -= boatData->Variation->getData();
|
||||||
if (!NMEA0183Msg.Init("MWD", "GP"))
|
if (!NMEA0183Msg.Init("MWD", talkerId))
|
||||||
return;
|
return;
|
||||||
if (!NMEA0183Msg.AddDoubleField(formatCourse(boatData->TWD->getData())))
|
if (!NMEA0183Msg.AddDoubleField(formatCourse(boatData->TWD->getData())))
|
||||||
return;
|
return;
|
||||||
|
@ -400,7 +402,8 @@ private:
|
||||||
boatData->COG->getDataWithDefault(NMEA0183DoubleNA),
|
boatData->COG->getDataWithDefault(NMEA0183DoubleNA),
|
||||||
boatData->SOG->getDataWithDefault(NMEA0183DoubleNA),
|
boatData->SOG->getDataWithDefault(NMEA0183DoubleNA),
|
||||||
boatData->DaysSince1970->getDataWithDefault(NMEA0183UInt32NA),
|
boatData->DaysSince1970->getDataWithDefault(NMEA0183UInt32NA),
|
||||||
boatData->Variation->getDataWithDefault(NMEA0183DoubleNA)))
|
boatData->Variation->getDataWithDefault(NMEA0183DoubleNA),
|
||||||
|
talkerId))
|
||||||
{
|
{
|
||||||
SendMessage(NMEA0183Msg);
|
SendMessage(NMEA0183Msg);
|
||||||
}
|
}
|
||||||
|
@ -424,7 +427,7 @@ private:
|
||||||
boatData->DaysSince1970->update(DaysSince1970,sourceId);
|
boatData->DaysSince1970->update(DaysSince1970,sourceId);
|
||||||
tNMEA0183Msg NMEA0183Msg;
|
tNMEA0183Msg NMEA0183Msg;
|
||||||
|
|
||||||
if (!NMEA0183Msg.Init("VLW", "GP"))
|
if (!NMEA0183Msg.Init("VLW", talkerId))
|
||||||
return;
|
return;
|
||||||
if (!NMEA0183Msg.AddDoubleField(Log / 1852.0))
|
if (!NMEA0183Msg.AddDoubleField(Log / 1852.0))
|
||||||
return;
|
return;
|
||||||
|
@ -457,7 +460,7 @@ private:
|
||||||
|
|
||||||
tNMEA0183Msg NMEA0183Msg;
|
tNMEA0183Msg NMEA0183Msg;
|
||||||
|
|
||||||
if (!NMEA0183Msg.Init("RSA", "GP"))
|
if (!NMEA0183Msg.Init("RSA", talkerId))
|
||||||
return;
|
return;
|
||||||
if (!NMEA0183Msg.AddDoubleField(formatCourse(RudderPosition)))
|
if (!NMEA0183Msg.AddDoubleField(formatCourse(RudderPosition)))
|
||||||
return;
|
return;
|
||||||
|
@ -486,7 +489,7 @@ private:
|
||||||
updateDouble(boatData->WaterTemperature, WaterTemperature);
|
updateDouble(boatData->WaterTemperature, WaterTemperature);
|
||||||
tNMEA0183Msg NMEA0183Msg;
|
tNMEA0183Msg NMEA0183Msg;
|
||||||
|
|
||||||
if (!NMEA0183Msg.Init("MTW", "GP"))
|
if (!NMEA0183Msg.Init("MTW", talkerId))
|
||||||
return;
|
return;
|
||||||
if (!NMEA0183Msg.AddDoubleField(KelvinToC(WaterTemperature)))
|
if (!NMEA0183Msg.AddDoubleField(KelvinToC(WaterTemperature)))
|
||||||
return;
|
return;
|
||||||
|
@ -886,8 +889,10 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
N2kToNMEA0183Functions(GwLog *logger, GwBoatData *boatData, tNMEA2000 *NMEA2000, tSendNMEA0183MessageCallback callback, int sourceId)
|
N2kToNMEA0183Functions(GwLog *logger, GwBoatData *boatData,
|
||||||
: N2kDataToNMEA0183(logger, boatData, NMEA2000, callback,sourceId)
|
tNMEA2000 *NMEA2000, tSendNMEA0183MessageCallback callback, int sourceId,
|
||||||
|
String talkerId)
|
||||||
|
: N2kDataToNMEA0183(logger, boatData, NMEA2000, callback,sourceId,talkerId)
|
||||||
{
|
{
|
||||||
LastPosSend = 0;
|
LastPosSend = 0;
|
||||||
lastLoopTime = 0;
|
lastLoopTime = 0;
|
||||||
|
@ -910,8 +915,8 @@ private:
|
||||||
|
|
||||||
|
|
||||||
N2kDataToNMEA0183* N2kDataToNMEA0183::create(GwLog *logger, GwBoatData *boatData, tNMEA2000 *NMEA2000,
|
N2kDataToNMEA0183* N2kDataToNMEA0183::create(GwLog *logger, GwBoatData *boatData, tNMEA2000 *NMEA2000,
|
||||||
tSendNMEA0183MessageCallback callback, int sourceId){
|
tSendNMEA0183MessageCallback callback, int sourceId,String talkerId){
|
||||||
LOG_DEBUG(GwLog::LOG,"creating N2kToNMEA0183");
|
LOG_DEBUG(GwLog::LOG,"creating N2kToNMEA0183");
|
||||||
return new N2kToNMEA0183Functions(logger,boatData,NMEA2000,callback, sourceId);
|
return new N2kToNMEA0183Functions(logger,boatData,NMEA2000,callback, sourceId,talkerId);
|
||||||
}
|
}
|
||||||
//*****************************************************************************
|
//*****************************************************************************
|
||||||
|
|
|
@ -39,12 +39,13 @@ protected:
|
||||||
GwLog *logger;
|
GwLog *logger;
|
||||||
GwBoatData *boatData;
|
GwBoatData *boatData;
|
||||||
int sourceId;
|
int sourceId;
|
||||||
|
char talkerId[3];
|
||||||
tSendNMEA0183MessageCallback SendNMEA0183MessageCallback;
|
tSendNMEA0183MessageCallback SendNMEA0183MessageCallback;
|
||||||
void SendMessage(const tNMEA0183Msg &NMEA0183Msg);
|
void SendMessage(const tNMEA0183Msg &NMEA0183Msg);
|
||||||
N2kDataToNMEA0183(GwLog *logger, GwBoatData *boatData, tNMEA2000 *NMEA2000, tSendNMEA0183MessageCallback callback, int sourceId);
|
N2kDataToNMEA0183(GwLog *logger, GwBoatData *boatData, tNMEA2000 *NMEA2000, tSendNMEA0183MessageCallback callback, int sourceId,String talkerId);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static N2kDataToNMEA0183* create(GwLog *logger, GwBoatData *boatData, tNMEA2000 *NMEA2000, tSendNMEA0183MessageCallback callback, int sourceId);
|
static N2kDataToNMEA0183* create(GwLog *logger, GwBoatData *boatData, tNMEA2000 *NMEA2000, tSendNMEA0183MessageCallback callback, int sourceId,String talkerId);
|
||||||
virtual void HandleMsg(const tN2kMsg &N2kMsg) = 0;
|
virtual void HandleMsg(const tN2kMsg &N2kMsg) = 0;
|
||||||
virtual void loop();
|
virtual void loop();
|
||||||
virtual ~N2kDataToNMEA0183(){}
|
virtual ~N2kDataToNMEA0183(){}
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define VERSION "0.5.2"
|
#define VERSION "0.5.4"
|
||||||
|
|
||||||
// #define GW_MESSAGE_DEBUG_ENABLED
|
// #define GW_MESSAGE_DEBUG_ENABLED
|
||||||
// #define FALLBACK_SERIAL
|
// #define FALLBACK_SERIAL
|
||||||
|
@ -388,7 +388,7 @@ void setup() {
|
||||||
webserver.begin();
|
webserver.begin();
|
||||||
|
|
||||||
nmea0183Converter= N2kDataToNMEA0183::create(&logger, &boatData,&NMEA2000,
|
nmea0183Converter= N2kDataToNMEA0183::create(&logger, &boatData,&NMEA2000,
|
||||||
SendNMEA0183Message, N2K_CHANNEL_ID);
|
SendNMEA0183Message, N2K_CHANNEL_ID,config.getString(config.talkerId,String("GP")));
|
||||||
|
|
||||||
toN2KConverter= NMEA0183DataToN2K::create(&logger,&boatData,[](const tN2kMsg &msg)->bool{
|
toN2KConverter= NMEA0183DataToN2K::create(&logger,&boatData,[](const tN2kMsg &msg)->bool{
|
||||||
logger.logDebug(GwLog::DEBUG+2,"send N2K %ld",msg.PGN);
|
logger.logDebug(GwLog::DEBUG+2,"send N2K %ld",msg.PGN);
|
||||||
|
|
|
@ -7,6 +7,14 @@
|
||||||
"check": "checkSystemName",
|
"check": "checkSystemName",
|
||||||
"description": "system name, used for the access point and for services"
|
"description": "system name, used for the access point and for services"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name":"talkerId",
|
||||||
|
"label":"NMEA0183 ID",
|
||||||
|
"type":"list",
|
||||||
|
"default":"GP",
|
||||||
|
"list":["AB","AD","AG","AP","AI","AN","AR","AS","AT","AX","BI","BN","CA","CD","CR","CS","CT","CV","CX","DF","DU","DP","EC","EI","EP","ER","FD","FE","FR","FS","GA","GB","GI","GL","GN","GP","GQ","HC","HE","HF","HN","HD","HS","II","IN","JA","JB","JC","JD","JE","JF","JG","JH","LC","NL","NV","RA","RB","RC","RI","SA","SC","SD","SG","SN","SS","TC","TI","UP","VD","VM","VW","VA","VS","VT","VR","WD","WI","WL","YX","ZA","ZC","ZQ","ZV"],
|
||||||
|
"description":"the talkerId used in generated NMEA0183 records"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "usbBaud",
|
"name": "usbBaud",
|
||||||
"label": "USB baud rate",
|
"label": "USB baud rate",
|
||||||
|
|
Loading…
Reference in New Issue