From 4c80f435e5afe53aebc6591c73d45431aaada5aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BB=D0=B8=D0=BC=D0=BE=D0=B2=20=D0=90=D0=BD=D0=B4?= =?UTF-8?q?=D1=80=D0=B5=D0=B9=20=D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D0=B5?= =?UTF-8?q?=D0=B2=D0=B8=D1=87?= Date: Fri, 15 Apr 2022 00:05:44 +0300 Subject: [PATCH] Poll() refactoring, PWM fix, Hum preparation --- docs/html/search/upload.sh | 3 +++ lighthub/abstractch.h | 2 +- lighthub/item.cpp | 36 ++++++++++++++--------------- lighthub/item.h | 2 ++ lighthub/main.cpp | 27 ++++++++++++++++------ lighthub/modules/out_ac.cpp | 9 +++----- lighthub/modules/out_counter.cpp | 1 + lighthub/modules/out_dmx.cpp | 6 ----- lighthub/modules/out_dmx.h | 1 - lighthub/modules/out_modbus.cpp | 1 + lighthub/modules/out_motor.cpp | 1 + lighthub/modules/out_pid.cpp | 1 + lighthub/modules/out_pwm.cpp | 6 ----- lighthub/modules/out_pwm.h | 1 - lighthub/modules/out_relay.cpp | 15 ++++-------- lighthub/modules/out_spiled.cpp | 6 ----- lighthub/modules/out_spiled.h | 1 - lighthub/modules/out_uartbridge.cpp | 1 + lighthub/textconst.h | 10 ++++++++ lighthub/utils.cpp | 11 +++++++-- lighthub/utils.h | 1 + 21 files changed, 76 insertions(+), 66 deletions(-) create mode 100644 docs/html/search/upload.sh diff --git a/docs/html/search/upload.sh b/docs/html/search/upload.sh new file mode 100644 index 0000000..93e8a0a --- /dev/null +++ b/docs/html/search/upload.sh @@ -0,0 +1,3 @@ +export PORT=cu.usbmodem14101 +echo . | stty -f /dev/$PORT speed 1200 +../tools/mac/tool-bossac/bossac -U false -p $PORT -i -e -w -v -b firmware.bin -R \ No newline at end of file diff --git a/lighthub/abstractch.h b/lighthub/abstractch.h index bc0ee11..48672eb 100644 --- a/lighthub/abstractch.h +++ b/lighthub/abstractch.h @@ -9,7 +9,7 @@ class abstractCh { public: abstractCh(){}; virtual ~abstractCh(){}; - virtual int Poll(short cause) = 0; + virtual int Poll(short cause) {return 0;} virtual int Setup() =0; //Should initialize hardware and reserve resources virtual int Anounce () {return 0;}; virtual int Stop() {return 0;}; //Should free resources diff --git a/lighthub/item.cpp b/lighthub/item.cpp index 34947f4..c9a399a 100644 --- a/lighthub/item.cpp +++ b/lighthub/item.cpp @@ -57,6 +57,10 @@ e-mail anklimov@gmail.com #include "modules/out_elevator.h" #endif +#ifdef HUMIDIFIER_ENABLE +#include "modules/out_humidifier.h" +#endif + short modbusBusy = 0; bool isPendedModbusWrites = false; @@ -207,6 +211,13 @@ void Item::Parse() { // debugSerial<Poll(cause); } - return 0; + return false; } void Item::sendDelayedStatus() diff --git a/lighthub/item.h b/lighthub/item.h index 79f8e09..382f236 100644 --- a/lighthub/item.h +++ b/lighthub/item.h @@ -60,6 +60,7 @@ e-mail anklimov@gmail.com #define CH_MULTIVENT 18 #define CH_ELEVATOR 19 #define CH_COUNTER 20 +#define CH_HUMIDIFIER 21 //#define CHANNEL_TYPES 13 @@ -74,6 +75,7 @@ e-mail anklimov@gmail.com #define POLLING_SLOW 1 #define POLLING_FAST 2 #define POLLING_INT 3 +#define POLLING_1S 4 #define I_TYPE 0 //Type of item diff --git a/lighthub/main.cpp b/lighthub/main.cpp index f4cb39e..9203ee4 100644 --- a/lighthub/main.cpp +++ b/lighthub/main.cpp @@ -2268,6 +2268,15 @@ infoSerial<child; while (items && item) if (item->type == aJson_Array && aJson.getArraySize(item)>1) { Item it(item); if (it.isValid()) { - it.Poll(POLLING_FAST); + it.Poll((secExpired)?POLLING_1S:POLLING_FAST); } //isValid yield(); item = item->next; @@ -2583,8 +2596,8 @@ configLocked--; // SLOW POLLING boolean done = false; if (lanStatus == RETAINING_COLLECTING) return; - //if (millis() > timerPollingCheck) - if (isTimeOver(timerPollingCheck,millis(),INTERVAL_SLOW_POLLING)) + + if (secExpired) { while (pollingItem && !done) { if (pollingItem->type == aJson_Array) { @@ -2592,7 +2605,7 @@ configLocked--; uint32_t ret = it.Poll(POLLING_SLOW); if (ret) { - timerPollingCheck = millis();// + ret; //INTERVAL_CHECK_MODBUS; + ////// timerPollingCheck = millis();// + ret; //INTERVAL_CHECK_MODBUS; done = true; } }//if diff --git a/lighthub/modules/out_ac.cpp b/lighthub/modules/out_ac.cpp index dbfc057..825e883 100644 --- a/lighthub/modules/out_ac.cpp +++ b/lighthub/modules/out_ac.cpp @@ -242,16 +242,14 @@ return (power & 1); int out_AC::Poll(short cause) { -if (cause!=POLLING_SLOW) return 0; +if (cause!=POLLING_SLOW) return false; -//long now = millis(); - //if (now - prevPolling > INTERVAL_AC_POLLING) { if (isTimeOver(prevPolling,millis(),INTERVAL_AC_POLLING)) { prevPolling = millisNZ(); debugSerial.println(F("Polling")); SendData(qstn, sizeof(qstn)/sizeof(byte)); //Опрос кондиционера } -///delay(100); + if(AC_Serial.available() >= 37){ //was 0 AC_Serial.readBytes(data, 37); while(AC_Serial.available()){ @@ -263,10 +261,9 @@ if (cause!=POLLING_SLOW) return 0; InsertData(data, 37); } } -return INTERVAL_SLOW_POLLING; +return true; }; -//int out_AC::Ctrl(short cmd, short n, int * Parameters, int suffixCode, char* subItem) int out_AC::Ctrl(itemCmd cmd, char* subItem , bool toExecute) { //char s_mode[10]; diff --git a/lighthub/modules/out_counter.cpp b/lighthub/modules/out_counter.cpp index 05fe522..92b2edd 100644 --- a/lighthub/modules/out_counter.cpp +++ b/lighthub/modules/out_counter.cpp @@ -38,6 +38,7 @@ return driverStatus; int out_counter::Poll(short cause) { + if (cause==POLLING_SLOW) return 0; if (!item) return 0; diff --git a/lighthub/modules/out_dmx.cpp b/lighthub/modules/out_dmx.cpp index 3f6ccc4..dae8ca6 100644 --- a/lighthub/modules/out_dmx.cpp +++ b/lighthub/modules/out_dmx.cpp @@ -31,12 +31,6 @@ int out_dmx::Status() return driverStatus; } - -int out_dmx::Poll(short cause) -{ -return 0; -}; - int out_dmx::getChanType() { if (item) diff --git a/lighthub/modules/out_dmx.h b/lighthub/modules/out_dmx.h index d87bbfa..ad82dca 100644 --- a/lighthub/modules/out_dmx.h +++ b/lighthub/modules/out_dmx.h @@ -12,7 +12,6 @@ public: out_dmx(Item * _item):colorChannel(_item){}; int Setup() override; - int Poll(short cause) override; int Stop() override; int Status() override; diff --git a/lighthub/modules/out_modbus.cpp b/lighthub/modules/out_modbus.cpp index 0dfebd9..f8db09e 100644 --- a/lighthub/modules/out_modbus.cpp +++ b/lighthub/modules/out_modbus.cpp @@ -451,6 +451,7 @@ int out_Modbus::sendModbus(char * paramName, int32_t value, uint8_t regType) int out_Modbus::Poll(short cause) { +if (cause==POLLING_SLOW) return 0; bool lineInitialized = false; if (modbusBusy || (Status() != CST_INITIALIZED)) return 0; diff --git a/lighthub/modules/out_motor.cpp b/lighthub/modules/out_motor.cpp index 465d667..e845599 100644 --- a/lighthub/modules/out_motor.cpp +++ b/lighthub/modules/out_motor.cpp @@ -101,6 +101,7 @@ return st.getPercents255(); */ int out_Motor::Poll(short cause) { +if (cause==POLLING_SLOW) return 0; int curPos = -1; int targetPos = -1; int dif; diff --git a/lighthub/modules/out_pid.cpp b/lighthub/modules/out_pid.cpp index 1662ce2..4aeb256 100644 --- a/lighthub/modules/out_pid.cpp +++ b/lighthub/modules/out_pid.cpp @@ -160,6 +160,7 @@ return (item->getCmd()!=CMD_OFF); int out_pid::Poll(short cause) { +if (cause==POLLING_SLOW) return 0; if (store && store->pid && (Status() == CST_INITIALIZED) && item && (item->getCmd()!=CMD_OFF)) { //double prevOut=store->output; diff --git a/lighthub/modules/out_pwm.cpp b/lighthub/modules/out_pwm.cpp index 0426ee6..a5d6557 100644 --- a/lighthub/modules/out_pwm.cpp +++ b/lighthub/modules/out_pwm.cpp @@ -85,12 +85,6 @@ return driverStatus; } - -int out_pwm::Poll(short cause) -{ -return 0; -}; - int out_pwm::getChanType() { if (item) diff --git a/lighthub/modules/out_pwm.h b/lighthub/modules/out_pwm.h index 04f260f..69f6276 100644 --- a/lighthub/modules/out_pwm.h +++ b/lighthub/modules/out_pwm.h @@ -12,7 +12,6 @@ public: out_pwm(Item * _item):colorChannel(_item){}; int Setup() override; - int Poll(short cause) override; int Stop() override; int Status() override; diff --git a/lighthub/modules/out_relay.cpp b/lighthub/modules/out_relay.cpp index 32c1c47..fbbc83b 100644 --- a/lighthub/modules/out_relay.cpp +++ b/lighthub/modules/out_relay.cpp @@ -7,7 +7,7 @@ #include "item.h" #include "main.h" #include "dmx.h" - +#include "utils.h" static int driverStatus = CST_UNKNOWN; void out_relay::getConfig() @@ -44,7 +44,7 @@ if (item) item->setExt(0); //if (item->getCmd()) item->setFlag(SEND_COMMAND); //if (item->itemVal) item->setFlag(SEND_PARAMETERS); driverStatus = CST_INITIALIZED; -if (!item->isActive()) +if (item->isActive()>0) ///???? { item->setExt(millisNZ()); } @@ -63,7 +63,7 @@ int out_relay::Status() { return driverStatus; } - +/* const char action_P[] PROGMEM = "action"; const char cooling_P[] PROGMEM = "cooling"; const char heating_P[] PROGMEM = "heating"; @@ -71,7 +71,7 @@ const char drying_P[] PROGMEM = "drying"; const char idle_P[] PROGMEM = "idle"; const char fan_P[] PROGMEM = "fan"; const char off_P[] PROGMEM = "off"; - +*/ void out_relay::relay(bool state) { @@ -111,14 +111,9 @@ debugSerial << F("pub action ") << publishTopic(item->itemArr->name,val,subtopic } -bool getPinVal(uint8_t pin) -{ - return (0!=(*portOutputRegister( digitalPinToPort(pin) ) & digitalPinToBitMask(pin))); -} - - int out_relay::Poll(short cause) { + if (cause==POLLING_SLOW) return 0; if (!item) return 0; itemCmd st; st.loadItem(item); diff --git a/lighthub/modules/out_spiled.cpp b/lighthub/modules/out_spiled.cpp index 7b1921b..11050f8 100644 --- a/lighthub/modules/out_spiled.cpp +++ b/lighthub/modules/out_spiled.cpp @@ -89,12 +89,6 @@ return driverStatus; } - -int out_SPILed::Poll(short cause) -{ -return 0; -}; - int out_SPILed::getChanType() { diff --git a/lighthub/modules/out_spiled.h b/lighthub/modules/out_spiled.h index 984fb9c..ab962cf 100644 --- a/lighthub/modules/out_spiled.h +++ b/lighthub/modules/out_spiled.h @@ -17,7 +17,6 @@ public: out_SPILed(Item * _item):colorChannel(_item){getConfig();}; int Setup() override; - int Poll(short cause) override; int Stop() override; int Status() override; int getChanType() override; diff --git a/lighthub/modules/out_uartbridge.cpp b/lighthub/modules/out_uartbridge.cpp index 99dcc40..a757969 100644 --- a/lighthub/modules/out_uartbridge.cpp +++ b/lighthub/modules/out_uartbridge.cpp @@ -287,6 +287,7 @@ bufB[0]=0; int out_UARTbridge::Poll(short cause) { + if (cause==POLLING_SLOW) return 0; uint8_t chA; uint8_t chB; diff --git a/lighthub/textconst.h b/lighthub/textconst.h index 8359418..beaba24 100644 --- a/lighthub/textconst.h +++ b/lighthub/textconst.h @@ -41,6 +41,16 @@ const char statsval_P[] PROGMEM = "uptime,freeheap"; const char uptime_P[] PROGMEM = "uptime"; const char freeheap_P[] PROGMEM = "freeheap"; const char CMDTOPIC_P[] PROGMEM = CMDTOPIC; + +const char action_P[] PROGMEM = "action"; +const char cooling_P[] PROGMEM = "cooling"; +const char heating_P[] PROGMEM = "heating"; +const char drying_P[] PROGMEM = "drying"; +const char idle_P[] PROGMEM = "idle"; +const char fan_P[] PROGMEM = "fan"; +const char off_P[] PROGMEM = "off"; +const char on_P[] PROGMEM = "on"; + /* {"name": "Спальня LED", diff --git a/lighthub/utils.cpp b/lighthub/utils.cpp index fab3393..075d320 100644 --- a/lighthub/utils.cpp +++ b/lighthub/utils.cpp @@ -581,7 +581,7 @@ bool isTimeOver(uint32_t timestamp, uint32_t currTime, uint32_t time, uint32_t m return ((currTime>endTime) && (currTime endTime) || (currTime = MY_PERIOD @@ -721,10 +721,11 @@ itemCmd mapInt(int32_t arg, aJsonObject* map) return _itemCmd.Int(arg); } +//Same as millis() but never return 0 or -1 unsigned long millisNZ(uint8_t shift) { unsigned long now = millis()>>shift; - if (!now) now=1; + if (!now || !(now+1)) now=1; return now; } @@ -774,5 +775,11 @@ serialParamType str2SerialParam(char * str) debugSerial<< F("Default serial mode N81 used"); return static_cast (SERIAL_8N1); } + +bool getPinVal(uint8_t pin) +{ + return (0!=(*portOutputRegister( digitalPinToPort(pin) ) & digitalPinToBitMask(pin))); +} + #pragma message(VAR_NAME_VALUE(debugSerial)) #pragma message(VAR_NAME_VALUE(SERIAL_BAUD)) diff --git a/lighthub/utils.h b/lighthub/utils.h index bc15373..577f5ba 100644 --- a/lighthub/utils.h +++ b/lighthub/utils.h @@ -75,3 +75,4 @@ itemCmd mapInt(int32_t arg, aJsonObject* map); unsigned long millisNZ(uint8_t shift=0); serialParamType str2SerialParam(char * str); String toString(const IPAddress& address); +bool getPinVal(uint8_t pin);