Skip to content

Commit

Permalink
better display for bus off condition
Browse files Browse the repository at this point in the history
  • Loading branch information
andreas committed Aug 26, 2023
1 parent 28431bf commit b7a7dad
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 2 deletions.
1 change: 1 addition & 0 deletions lib/nmea2ktwai/Nmea2kTwai.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ Nmea2kTwai::Status Nmea2kTwai::logStatus(){
}

bool Nmea2kTwai::startRecovery(){
lastRecoveryStart=millis();
esp_err_t rt=twai_driver_uninstall();
if (rt != ESP_OK){
logDebug(LOG_ERR,"twai: deinit for recovery failed with %x",(int)rt);
Expand Down
2 changes: 2 additions & 0 deletions lib/nmea2ktwai/Nmea2kTwai.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ class Nmea2kTwai : public tNMEA2000{
STATE state=ST_ERROR;
} Status;
Status getStatus();
unsigned long getLastRecoveryStart(){return lastRecoveryStart;}
void loop();
static const char * stateStr(const STATE &st);
virtual bool CANOpen();
Expand Down Expand Up @@ -54,6 +55,7 @@ class Nmea2kTwai : public tNMEA2000{
gpio_num_t RxPin;
uint32_t txTimeouts=0;
GwIntervalRunner timers;
unsigned long lastRecoveryStart=0;
};

#endif
15 changes: 13 additions & 2 deletions src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ GwConfigHandler config(&logger);

#include "Nmea2kTwai.h"
static const unsigned long CAN_RECOVERY_PERIOD=3000; //ms
static const unsigned long NMEA2000_HEARTBEAT_INTERVAL=5000;
class Nmea2kTwaiLog : public Nmea2kTwai{
private:
GwLog* logger;
Expand Down Expand Up @@ -388,7 +389,17 @@ class StatusRequest : public GwRequestMessage
status["fwtype"]= firmwareType;
status["heap"]=(long)xPortGetFreeHeapSize();
Nmea2kTwai::Status n2kState=NMEA2000.getStatus();
status["n2kstate"]=NMEA2000.stateStr(n2kState.state);
Nmea2kTwai::STATE driverState=n2kState.state;
if (driverState == Nmea2kTwai::ST_RUNNING){
unsigned long lastRec=NMEA2000.getLastRecoveryStart();
if (lastRec > 0 && (lastRec+NMEA2000_HEARTBEAT_INTERVAL*2) > millis()){
//we still report bus off at least for 2 heartbeat intervals
//this avoids always reporting BUS_OFF-RUNNING-BUS_OFF if the bus off condition
//remains
driverState=Nmea2kTwai::ST_BUS_OFF;
}
}
status["n2kstate"]=NMEA2000.stateStr(driverState);
status["n2knode"]=NodeAddress;
//nmea0183Converter->toJson(status);
countNMEA2KIn.toJson(status);
Expand Down Expand Up @@ -802,7 +813,7 @@ void setup() {
logger.flush();
NMEA2000.SetMode(tNMEA2000::N2km_ListenAndNode, NodeAddress);
NMEA2000.SetForwardOwnMessages(false);
NMEA2000.SetHeartbeatInterval(5000);
NMEA2000.SetHeartbeatInterval(NMEA2000_HEARTBEAT_INTERVAL);
if (sendOutN2k){
// Set the information for other bus devices, which messages we support
unsigned long *pgns=toN2KConverter->handledPgns();
Expand Down

0 comments on commit b7a7dad

Please sign in to comment.