127 lines
3.9 KiB
C++
127 lines
3.9 KiB
C++
#ifndef _GWIICSENSSORS_H
|
|
#define _GWIICSENSSORS_H
|
|
#include "GwApi.h"
|
|
#include "N2kMessages.h"
|
|
#include "GwXdrTypeMappings.h"
|
|
#include "GwHardware.h"
|
|
#include "GwSensor.h"
|
|
#ifdef _GWIIC
|
|
#include <Wire.h>
|
|
#else
|
|
class TwoWire;
|
|
#endif
|
|
|
|
using BUSTYPE=TwoWire;
|
|
using IICSensorList=SensorList;
|
|
using IICSensorBase=SensorTemplate<BUSTYPE,SensorBase::IIC>;
|
|
|
|
|
|
template <class CFG>
|
|
bool addPressureXdr(GwApi *api, CFG &cfg)
|
|
{
|
|
if (! cfg.prAct) return false;
|
|
if (cfg.prNam.isEmpty()){
|
|
api->getLogger()->logDebug(GwLog::LOG, "pressure active for %s, no xdr mapping", cfg.prefix.c_str());
|
|
return true;
|
|
}
|
|
api->getLogger()->logDebug(GwLog::LOG, "adding pressure xdr mapping for %s", cfg.prefix.c_str());
|
|
GwXDRMappingDef xdr;
|
|
xdr.category = GwXDRCategory::XDRPRESSURE;
|
|
xdr.direction = GwXDRMappingDef::M_FROM2K;
|
|
xdr.selector = (int)cfg.prSrc;
|
|
xdr.instanceId = cfg.iid;
|
|
xdr.instanceMode = GwXDRMappingDef::IS_SINGLE;
|
|
xdr.xdrName = cfg.prNam;
|
|
api->addXdrMapping(xdr);
|
|
return true;
|
|
}
|
|
|
|
template <class CFG>
|
|
bool addTempXdr(GwApi *api, CFG &cfg)
|
|
{
|
|
if (!cfg.tmAct) return false;
|
|
if (cfg.tmNam.isEmpty()){
|
|
api->getLogger()->logDebug(GwLog::LOG, "temperature active for %s, no xdr mapping", cfg.prefix.c_str());
|
|
return true;
|
|
}
|
|
api->getLogger()->logDebug(GwLog::LOG, "adding temperature xdr mapping for %s", cfg.prefix.c_str());
|
|
GwXDRMappingDef xdr;
|
|
xdr.category = GwXDRCategory::XDRTEMP;
|
|
xdr.direction = GwXDRMappingDef::M_FROM2K;
|
|
xdr.field = GWXDRFIELD_TEMPERATURE_ACTUALTEMPERATURE;
|
|
xdr.selector = (int)cfg.tmSrc;
|
|
xdr.instanceMode = GwXDRMappingDef::IS_SINGLE;
|
|
xdr.instanceId = cfg.iid;
|
|
xdr.xdrName = cfg.tmNam;
|
|
api->addXdrMapping(xdr);
|
|
return true;
|
|
}
|
|
|
|
template <class CFG>
|
|
bool addHumidXdr(GwApi *api, CFG &cfg)
|
|
{
|
|
if (! cfg.huAct) return false;
|
|
if (cfg.huNam.isEmpty()){
|
|
api->getLogger()->logDebug(GwLog::LOG, "humidity active for %s, no xdr mapping", cfg.prefix.c_str());
|
|
return true;
|
|
}
|
|
api->getLogger()->logDebug(GwLog::LOG, "adding humidity xdr mapping for %s", cfg.prefix.c_str());
|
|
GwXDRMappingDef xdr;
|
|
xdr.category = GwXDRCategory::XDRHUMIDITY;
|
|
xdr.direction = GwXDRMappingDef::M_FROM2K;
|
|
xdr.field = GWXDRFIELD_HUMIDITY_ACTUALHUMIDITY;
|
|
xdr.selector = (int)cfg.huSrc;
|
|
xdr.instanceMode = GwXDRMappingDef::IS_SINGLE;
|
|
xdr.instanceId = cfg.iid;
|
|
xdr.xdrName = cfg.huNam;
|
|
api->addXdrMapping(xdr);
|
|
return true;
|
|
}
|
|
|
|
template <class CFG>
|
|
void sendN2kHumidity(GwApi *api,CFG &cfg,double value, int counterId){
|
|
tN2kMsg msg;
|
|
SetN2kHumidity(msg,1,cfg.iid,cfg.huSrc,value);
|
|
api->sendN2kMessage(msg);
|
|
api->increment(counterId,cfg.prefix+String("hum"));
|
|
}
|
|
|
|
template <class CFG>
|
|
void sendN2kPressure(GwApi *api,CFG &cfg,double value, int counterId){
|
|
tN2kMsg msg;
|
|
SetN2kPressure(msg,1,cfg.iid,cfg.prSrc,value);
|
|
api->sendN2kMessage(msg);
|
|
api->increment(counterId,cfg.prefix+String("press"));
|
|
}
|
|
|
|
template <class CFG>
|
|
void sendN2kTemperature(GwApi *api,CFG &cfg,double value, int counterId){
|
|
tN2kMsg msg;
|
|
SetN2kTemperature(msg,1,cfg.iid,cfg.tmSrc,value);
|
|
api->sendN2kMessage(msg);
|
|
api->increment(counterId,cfg.prefix+String("temp"));
|
|
}
|
|
|
|
template <class CFG>
|
|
void sendN2kEnvironmentalParameters(GwApi *api,CFG &cfg,double tmValue, double huValue, double prValue, int counterId){
|
|
tN2kMsg msg;
|
|
SetN2kEnvironmentalParameters(msg,1,cfg.tmSrc,tmValue,cfg.huSrc,huValue,prValue);
|
|
api->sendN2kMessage(msg);
|
|
api->increment(counterId,cfg.prefix+String("hum"));
|
|
api->increment(counterId,cfg.prefix+String("press"));
|
|
api->increment(counterId,cfg.prefix+String("temp"));
|
|
}
|
|
|
|
#ifndef _GWI_IIC1
|
|
#define CHECK_IIC1() checkDef(GWIIC_SCL,GWIIC_SDA)
|
|
#else
|
|
#define CHECK_IIC1()
|
|
#endif
|
|
#ifndef _GWI_IIC2
|
|
#define CHECK_IIC2() checkDef(GWIIC_SCL2,GWIIC_SDA2)
|
|
#else
|
|
#define CHECK_IIC2()
|
|
#endif
|
|
|
|
#endif
|