From 088a4b039799ebc0bba14436366bd0b19515833a Mon Sep 17 00:00:00 2001 From: Andrey Klimov Date: Sun, 14 Jul 2019 01:11:23 +0300 Subject: [PATCH] channels abstraction changed --- lighthub/abstractch.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ lighthub/abstractch.h | 16 ++++++++++++++++ lighthub/abstractin.cpp | 9 +-------- lighthub/abstractin.h | 5 +++-- lighthub/abstractout.h | 12 ++++++++++++ 5 files changed, 73 insertions(+), 10 deletions(-) create mode 100644 lighthub/abstractch.cpp create mode 100644 lighthub/abstractch.h create mode 100644 lighthub/abstractout.h diff --git a/lighthub/abstractch.cpp b/lighthub/abstractch.cpp new file mode 100644 index 0000000..bbb9e62 --- /dev/null +++ b/lighthub/abstractch.cpp @@ -0,0 +1,41 @@ + +#include "abstractch.h" +#include +#include "utils.h" +#include +#include "main.h" + +extern lan_status lanStatus; +extern PubSubClient mqttClient; + +int abstractCh::publish(char* topic, long value, char* subtopic) +{ + char valstr[16]; + printUlongValueToStr(valstr, value); + return publish(topic, valstr,subtopic); +}; + +int abstractCh::publish(char* topic, float value, char* subtopic) +{ + char valstr[16]; + printFloatValueToStr(value, valstr); + return publish(topic, valstr,subtopic); +}; + +int abstractCh::publish(char* topic, char * value, char* subtopic) +{ + char addrstr[MQTT_TOPIC_LENGTH]; + + if (topic) + { + strncpy(addrstr,topic,sizeof(addrstr)); + if (!strchr(addrstr,'/')) setTopic(addrstr,sizeof(addrstr),T_OUT,topic); + strncat(addrstr,subtopic,sizeof(addrstr)); + if (mqttClient.connected() && lanStatus == OPERATION) + { + mqttClient.publish(addrstr, value, true); + return 1; + } + } + +}; diff --git a/lighthub/abstractch.h b/lighthub/abstractch.h new file mode 100644 index 0000000..a223db8 --- /dev/null +++ b/lighthub/abstractch.h @@ -0,0 +1,16 @@ +#pragma once +#include "Arduino.h" + +class abstractCh { +public: + abstractCh(){}; +// virtual int Setup(int addr) = 0; + virtual int Poll() = 0; + +protected: +// Input * in; +int publish(char* topic, long value, char* subtopic = NULL); +int publish(char* topic, float value, char* subtopic = NULL ); +int publish(char* topic, char * value, char* subtopic = NULL); +//friend Input; +}; diff --git a/lighthub/abstractin.cpp b/lighthub/abstractin.cpp index 2461f55..f371c92 100644 --- a/lighthub/abstractin.cpp +++ b/lighthub/abstractin.cpp @@ -31,14 +31,7 @@ int abstractIn::publish(char * value, char* subtopic) aJsonObject *emit = aJson.getObjectItem(in->inputObj, "emit"); if (emit) { - strncpy(addrstr,emit->valuestring,sizeof(addrstr)); - if (!strchr(addrstr,'/')) setTopic(addrstr,sizeof(addrstr),T_OUT,emit->valuestring); - strncat(addrstr,subtopic,sizeof(addrstr)); - if (mqttClient.connected() && lanStatus == OPERATION) - { - mqttClient.publish(addrstr, value, true); - return 1; - } + return publish(emit->valuestring,value,subtopic); } } return 0; diff --git a/lighthub/abstractin.h b/lighthub/abstractin.h index 5d2ca4e..ed24538 100644 --- a/lighthub/abstractin.h +++ b/lighthub/abstractin.h @@ -1,10 +1,11 @@ #pragma once #include "Arduino.h" +#include "abstractch.h" class Input; -class abstractIn { +class abstractIn : public abstractCh{ public: - abstractIn(Input * _in){in=_in;}; + abstractIn(Input * _in):abstractCh(){in=_in;}; virtual int Setup(int addr) = 0; virtual int Poll() = 0; diff --git a/lighthub/abstractout.h b/lighthub/abstractout.h new file mode 100644 index 0000000..22a0bb1 --- /dev/null +++ b/lighthub/abstractout.h @@ -0,0 +1,12 @@ +#pragma once +#include "Arduino.h" + +class Input; +class abstractOut { +public: + abstractOut(Input * _in){in=_in;}; + virtual int Setup(int addr) = 0; + virtual int Poll() = 0; +protected: + +};