1
0
mirror of https://github.com/thooge/esp32-nmea2000-obp60.git synced 2025-12-28 05:03:06 +01:00

PGN 127502 remote keyboard support

This commit is contained in:
2025-12-27 17:07:01 +01:00
parent 470c0e5f4d
commit 898922769a
8 changed files with 96 additions and 24 deletions

View File

@@ -1572,6 +1572,36 @@ private:
finalizeXdr();
}
void Handle127502(const tN2kMsg &msg){
// switch bank control / receive remote key strokes
unsigned char instance=-1;
tN2kBinaryStatus bankstatus;
LOG_DEBUG(GwLog::LOG,"received switch bank control");
// check if we are addressed and our configured instance is used
if (! ParseN2kPGN127502(msg,instance,bankstatus)) {
LOG_DEBUG(GwLog::DEBUG,"unable to parse PGN %d",msg.PGN);
return;
}
if (! (instance == config.swBankInstance)) {
LOG_DEBUG(GwLog::DEBUG,"switch bank instance #%d ignored",instance);
return;
}
// TODO (?) multiple keys together
// only process configured key count (default 6)
for (uint8_t i=1; i<=6; i++) {
tN2kOnOff keystatus = N2kGetStatusOnBinaryStatus(bankstatus, i);
if (keystatus == 1) {
// key pressed: send key to queue
xQueueSend(keyboardQueue, &i, 0);
} else if (keystatus == 2) {
// long key pressed: send long key to queue
xQueueSend(keyboardQueue, &i, 0);
}
}
}
void registerConverters()
{
//register all converter functions
@@ -1607,6 +1637,7 @@ private:
converters.registerConverter(127488UL, &N2kToNMEA0183Functions::Handle127488);
converters.registerConverter(130316UL, &N2kToNMEA0183Functions::Handle130316);
converters.registerConverter(127257UL, &N2kToNMEA0183Functions::Handle127257);
converters.registerConverter(127502UL, &N2kToNMEA0183Functions::Handle127502);
#define HANDLE_AIS
#ifdef HANDLE_AIS
converters.registerConverter(129038UL, &N2kToNMEA0183Functions::HandleAISClassAPosReport); // AIS Class A Position Report, Message Type 1
@@ -1620,13 +1651,15 @@ private:
public:
N2kToNMEA0183Functions(GwLog *logger, GwBoatData *boatData,
SendNMEA0183MessageCallback callback,
String talkerId, GwXDRMappings *xdrMappings, const GwConverterConfig &cfg)
String talkerId, GwXDRMappings *xdrMappings, const GwConverterConfig &cfg,
QueueHandle_t kbQueue)
: N2kDataToNMEA0183(logger, boatData, callback,talkerId)
{
this->logger = logger;
this->boatData = boatData;
this->xdrMappings=xdrMappings;
this->config=cfg;
this->keyboardQueue=kbQueue;
registerConverters();
}
virtual void loop(unsigned long lastExtRmc) override
@@ -1642,8 +1675,8 @@ private:
N2kDataToNMEA0183* N2kDataToNMEA0183::create(GwLog *logger, GwBoatData *boatData,
SendNMEA0183MessageCallback callback, String talkerId, GwXDRMappings *xdrMappings,
const GwConverterConfig &cfg){
LOG_DEBUG(GwLog::LOG,"creating N2kToNMEA0183");
return new N2kToNMEA0183Functions(logger,boatData,callback, talkerId,xdrMappings,cfg);
const GwConverterConfig &cfg, QueueHandle_t kbQueue){
LOG_DEBUG(GwLog::LOG,"creating N2kToNMEA0183");
return new N2kToNMEA0183Functions(logger,boatData,callback, talkerId,xdrMappings,cfg,kbQueue);
}
//*****************************************************************************

View File

@@ -43,6 +43,7 @@ protected:
GwBoatData *boatData;
int sourceId=0;
char talkerId[3];
QueueHandle_t keyboardQueue;
SendNMEA0183MessageCallback sendNMEA0183MessageCallback;
void SendMessage(const tNMEA0183Msg &NMEA0183Msg);
N2kDataToNMEA0183(GwLog *logger, GwBoatData *boatData,
@@ -50,7 +51,8 @@ protected:
public:
static N2kDataToNMEA0183* create(GwLog *logger, GwBoatData *boatData, SendNMEA0183MessageCallback callback,
String talkerId, GwXDRMappings *xdrMappings,const GwConverterConfig &cfg);
String talkerId, GwXDRMappings *xdrMappings,const GwConverterConfig &cfg,
QueueHandle_t kbQueue);
virtual void HandleMsg(const tN2kMsg &N2kMsg, int sourceId) = 0;
virtual void loop(unsigned long lastRmc);
virtual ~N2kDataToNMEA0183(){}
@@ -59,4 +61,4 @@ public:
virtual void toJson(GwJsonDocument *json)=0;
virtual String handledKeys()=0;
};
#endif
#endif