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

completely moved to dynamic boatData, first tests

This commit is contained in:
andreas
2021-10-20 21:19:20 +02:00
parent e1e3928062
commit 940d7ea957
4 changed files with 142 additions and 113 deletions

View File

@@ -8,21 +8,24 @@
#define GW_BOAT_VALUE_LEN 32
class GwBoatItemBase{
public:
static const long INVALID_TIME=60000;
static const unsigned long INVALID_TIME=60000;
typedef std::map<String,GwBoatItemBase*> GwBoatItemMap;
protected:
long lastSet;
long invalidTime=INVALID_TIME;
unsigned long lastSet=0;
unsigned long invalidTime=INVALID_TIME;
void uls(){
lastSet=millis();
}
public:
long getLastSet() const {return lastSet;}
bool isValid(long now) const {
unsigned long getLastSet() const {return lastSet;}
bool isValid(unsigned long now=0) const {
if (lastSet == 0) return false;
if (invalidTime == 0) return true;
if (now == 0) now=millis();
return (lastSet + invalidTime) >= now;
}
GwBoatItemBase(long invalidTime=INVALID_TIME){
lastSet=-1;
GwBoatItemBase(unsigned long invalidTime=INVALID_TIME){
lastSet=0;
this->invalidTime=invalidTime;
}
virtual ~GwBoatItemBase(){}
@@ -39,7 +42,8 @@ template<class T> class GwBoatItem : public GwBoatItemBase{
T data;
Formatter fmt;
public:
GwBoatItem(long invalidTime=INVALID_TIME,Formatter fmt=NULL): GwBoatItemBase(invalidTime){
GwBoatItem(unsigned long invalidTime=INVALID_TIME,Formatter fmt=NULL):
GwBoatItemBase(invalidTime){
this->fmt=fmt;
}
virtual ~GwBoatItem(){}
@@ -51,6 +55,10 @@ template<class T> class GwBoatItem : public GwBoatItemBase{
if (! useFormatter || fmt == NULL) return data;
return (*fmt)(data);
}
T getDataWithDefault(T defaultv){
if (! isValid(millis())) return defaultv;
return data;
}
virtual void toJsonDoc(DynamicJsonDocument *doc,String name){
(*doc)[name]=getData(true);
}
@@ -69,6 +77,10 @@ template<class T> class GwBoatItem : public GwBoatItemBase{
friend class GwBoatData;
};
/**
* implement a get for a particular type of boatData
* will create a method get##name##Item that returns a GwBoatItem<type>
* */
#define GWBOATDATA_IMPL_ITEM(type,name) GwBoatItem<type> *get##name##Item(String iname,bool doCreate=true, \
long invalidTime=GwBoatItemBase::INVALID_TIME, GwBoatItem<type>::Formatter fmt=NULL){ \
return GwBoatItem<type>::findOrCreate(&values,iname, doCreate, \
@@ -84,7 +96,8 @@ class GwBoatData{
~GwBoatData();
String toJson() const;
GWBOATDATA_IMPL_ITEM(double,Double)
GWBOATDATA_IMPL_ITEM(long,Long)
GWBOATDATA_IMPL_ITEM(long,Long)
GWBOATDATA_IMPL_ITEM(uint32_t,Uint32)
};