#ifndef _GWIICSENSSORS_H #define _GWIICSENSSORS_H #include "GwApi.h" #include "N2kMessages.h" #include "GwXdrTypeMappings.h" #ifdef _IIC_GROOVE_LIST class IICGrove{ public: String base; String grove; String suffix; IICGrove(const String &b,const String &g,const String &s): base(b),grove(g),suffix(s){} String item(const String &grove, const String &bus){ if (grove == this->grove) return base+bus+suffix; return ""; } }; static std::vector iicGroveList; #define GROOVE_IIC(base,grove,suffix) \ static GwInitializer base ## grove ## suffix(iicGroveList,IICGrove(#base,#grove,#suffix)); #endif #include "GwHardware.h" #include "GwSensor.h" #ifdef _GWIIC #include #else class TwoWire; #endif using BusType=TwoWire; using IICSensorList=SensorList; using IICSensorBase=SensorBase; template 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 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 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 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 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 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")); } #define CHECK_IIC1() checkDef(GWIIC_SCL,GWIIC_SDA) #define CHECK_IIC2() checkDef(GWIIC_SCL2,GWIIC_SDA2) #endif