diff --git a/lighthub/abstractch.h b/lighthub/abstractch.h index 87bb350..80431a3 100644 --- a/lighthub/abstractch.h +++ b/lighthub/abstractch.h @@ -2,8 +2,8 @@ #include "Arduino.h" #define CST_UNKNOWN 0 -#define CST_INITIALIZED 1 -#define CST_FAILED -1 +#define CST_FAILED 1 +#define CST_INITIALIZED 2 class abstractCh { public: @@ -14,6 +14,7 @@ public: virtual int Anounce () {return 0;}; virtual int Stop() {return 0;}; //Should free resources virtual int Status() {return CST_UNKNOWN;} + virtual void setStatus(uint8_t status) {} protected: diff --git a/lighthub/abstractout.cpp b/lighthub/abstractout.cpp index 615f689..282eb38 100644 --- a/lighthub/abstractout.cpp +++ b/lighthub/abstractout.cpp @@ -1,4 +1,5 @@ - + + #include "item.h" #include "abstractout.h" #include "itemCmd.h" @@ -24,4 +25,16 @@ int abstractOut::Setup() { if (item && (item->getCmd()==-1)) item->setCmd(CMD_OFF); return 1; - } \ No newline at end of file + } + +int abstractOut::Status() +{ + if (item && item->itemArr) + return item->itemArr->subtype; + return CST_UNKNOWN; + } + +void abstractOut::setStatus(uint8_t status) +{ + if (item && item->itemArr) item->itemArr->subtype = status & 0xF; +} \ No newline at end of file diff --git a/lighthub/abstractout.h b/lighthub/abstractout.h index 504375d..ae86136 100644 --- a/lighthub/abstractout.h +++ b/lighthub/abstractout.h @@ -14,6 +14,8 @@ public: virtual itemCmd getDefaultOnVal(){return itemCmd().Percents255(255);}; virtual int getChanType(){return 0;} virtual int getDefaultStorageType(){return 0;} /// Remove?? Now getChanType used instead + virtual int Status() override; + virtual void setStatus(uint8_t status) override; int Setup() override; protected: Item * item; diff --git a/lighthub/item.cpp b/lighthub/item.cpp index 9da0885..4df658b 100644 --- a/lighthub/item.cpp +++ b/lighthub/item.cpp @@ -2121,7 +2121,7 @@ int Item::VacomSetFan(itemCmd st) { default: return -1; } - + switch (cmd){ case CMD_OFF: case CMD_HALT: @@ -2165,7 +2165,7 @@ int Item::VacomSetFan(itemCmd st) { #define a 0.1842f #define b -36.68f -///move to float todo + int Item::VacomSetHeat(itemCmd st) { float val=st.getFloat(); @@ -2176,7 +2176,10 @@ int addr; if (itemArg->type != aJson_String) return 0; Item it(itemArg->valuestring); - if (it.isValid() && it.itemType == CH_VC) addr=it.getArg(); + if (it.isValid() && it.itemType == CH_VC) + { + addr=it.getArg(); + } else return 0; debugSerial<itemArr->subtype == AC_SENDING) +if (Status() == AC_SENDING) { while (store->timestamp && !isTimeOver(store->timestamp,millis(),150)) yield(); } @@ -299,7 +299,7 @@ if (item->itemArr->subtype == AC_SENDING) } } debugSerial.println(); -item->itemArr->subtype = AC_SENDING; +setStatus(AC_SENDING); // #if defined (__SAM3X8E__) // if (item->getArg(0)==2) postTransmission(); // #endif @@ -340,9 +340,9 @@ if (!portNum)// && (g_APinDescription[0].ulPinType == PIO_PA8A_URXD)) #endif } ACSerial->begin(9600); -item->itemArr->subtype = AC_IDLE; +setStatus (AC_IDLE); + -//driverStatus = CST_INITIALIZED; return 1; } @@ -353,10 +353,11 @@ debugSerial<setPersistent(NULL); store = NULL; -item->itemArr->subtype = CST_UNKNOWN; +setStatus (CST_UNKNOWN); return 1; } +/* int out_AC::Status() { if (!item) return 0; @@ -368,7 +369,8 @@ default: return CST_INITIALIZED; //return item->itemArr->subtype; } -} +}*/ + int out_AC::isActive() { if (!store) return 0; @@ -379,7 +381,7 @@ int out_AC::Poll(short cause) { if (!store) return -1; -switch (item->itemArr->subtype) +switch (Status()) { case AC_FAILED: return -1; case AC_UNKNOWN: return -1; @@ -387,7 +389,7 @@ case AC_SENDING: { if (store->timestamp && isTimeOver(store->timestamp,millis(),150)) { - item->itemArr->subtype = AC_IDLE; + setStatus(AC_IDLE); store->timestamp=millisNZ(); } } @@ -395,7 +397,7 @@ case AC_SENDING: if (cause!=POLLING_SLOW) return false; - if ((item->itemArr->subtype == AC_IDLE) && isTimeOver(store->timestamp,millis(),INTERVAL_AC_POLLING)) + if ((Status() == AC_IDLE) && isTimeOver(store->timestamp,millis(),INTERVAL_AC_POLLING)) { debugSerial.println(F("AC: Polling")); SendData(qstn, sizeof(qstn)/sizeof(byte)); //Опрос кондиционера diff --git a/lighthub/modules/out_ac.h b/lighthub/modules/out_ac.h index 0e3d998..1ab3f50 100644 --- a/lighthub/modules/out_ac.h +++ b/lighthub/modules/out_ac.h @@ -40,7 +40,6 @@ public: int Setup() override; int Poll(short cause) override; int Stop() override; - int Status() override; int isActive() override; int getChanType() override; int getDefaultStorageType(){return ST_FLOAT_CELSIUS;}; diff --git a/lighthub/modules/out_counter.cpp b/lighthub/modules/out_counter.cpp index 05f3c5a..7f24d01 100644 --- a/lighthub/modules/out_counter.cpp +++ b/lighthub/modules/out_counter.cpp @@ -8,25 +8,20 @@ #include "main.h" -static int driverStatus = CST_UNKNOWN; int out_counter::Setup() { abstractOut::Setup(); - driverStatus = CST_INITIALIZED; + setStatus(CST_INITIALIZED); return 1; } int out_counter::Stop() { -driverStatus = CST_UNKNOWN; +setStatus(CST_UNKNOWN); return 1; } -int out_counter::Status() -{ -return driverStatus; -} int out_counter::Poll(short cause) diff --git a/lighthub/modules/out_counter.h b/lighthub/modules/out_counter.h index 9ce7c38..297c480 100644 --- a/lighthub/modules/out_counter.h +++ b/lighthub/modules/out_counter.h @@ -13,7 +13,6 @@ public: int Setup() override; int Poll(short cause) override; int Stop() override; - int Status() override; int getChanType() override; int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override; }; diff --git a/lighthub/modules/out_dmx.cpp b/lighthub/modules/out_dmx.cpp index 4674710..956db21 100644 --- a/lighthub/modules/out_dmx.cpp +++ b/lighthub/modules/out_dmx.cpp @@ -9,28 +9,22 @@ #include "main.h" #include "dmx.h" -static int driverStatus = CST_UNKNOWN; int out_dmx::Setup() { abstractOut::Setup(); debugSerial<itemArr->name <itemArr->name << endl; -driverStatus = CST_UNKNOWN; +setStatus(CST_UNKNOWN); return 1; } -int out_dmx::Status() -{ -return driverStatus; -} - int out_dmx::getChanType() { if (item) diff --git a/lighthub/modules/out_dmx.h b/lighthub/modules/out_dmx.h index 2b2cdb1..53bf259 100644 --- a/lighthub/modules/out_dmx.h +++ b/lighthub/modules/out_dmx.h @@ -13,7 +13,6 @@ public: out_dmx(Item * _item):colorChannel(_item){}; int Setup() override; int Stop() override; - int Status() override; int getChanType() override; // int Ctrl(itemCmd cmd, char* subItem=NULL) override; diff --git a/lighthub/modules/out_mercury.cpp b/lighthub/modules/out_mercury.cpp index c291218..5ff52cd 100644 --- a/lighthub/modules/out_mercury.cpp +++ b/lighthub/modules/out_mercury.cpp @@ -78,14 +78,14 @@ store->timestamp=millisNZ(); if (getConfig()) { infoSerial<itemArr->name<driverStatus = CST_INITIALIZED; + setStatus(CST_INITIALIZED); store->lastSuccessTS = 0; initLine(true); return 1; } else { errorSerial<driverStatus = CST_FAILED; + setStatus(CST_FAILED); return 0; } @@ -101,18 +101,6 @@ store = NULL; return 1; } -int out_Mercury::Status() -{ -if (store) - return store->driverStatus; -return CST_UNKNOWN; -} - - -void out_Mercury::setStatus(short status) -{ -if (store) store->driverStatus=status; -} short out_Mercury::connectMercury() { @@ -337,7 +325,7 @@ int out_Mercury::Poll(short cause) //bool lineInitialized = false; if (cause==POLLING_SLOW) return 0; if (modbusBusy || ( mbusSlenceTimer && !isTimeOver(mbusSlenceTimer,millis(),100))) return 0; -if (store->driverStatus == CST_FAILED) return 0; +if (Status() == CST_FAILED) return 0; if (!getConfig()) return 0; switch (Status()) diff --git a/lighthub/modules/out_mercury.h b/lighthub/modules/out_mercury.h index 4d9c0f5..70d5980 100644 --- a/lighthub/modules/out_mercury.h +++ b/lighthub/modules/out_mercury.h @@ -12,7 +12,6 @@ class mercuryPersistent : public chPersistent { public: - int8_t driverStatus; uint32_t timestamp; uint32_t lastSuccessTS; }; @@ -47,7 +46,6 @@ public: int Setup() override; int Poll(short cause) override; int Stop() override; - int Status() override; int getChanType() override; int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override; int getDefaultStorageType(){return ST_INT32;}; @@ -58,7 +56,6 @@ protected: uint16_t pollingInterval; bool getConfig(); void initLine(bool full = false); - void setStatus(short); short connectMercury(); short disconnectMercury(); short getCurrentVal12(byte param, String topic,int divisor=1); diff --git a/lighthub/modules/out_modbus.cpp b/lighthub/modules/out_modbus.cpp index 95c097b..b7eeecc 100644 --- a/lighthub/modules/out_modbus.cpp +++ b/lighthub/modules/out_modbus.cpp @@ -180,12 +180,12 @@ store->timestamp=millisNZ(); if (getConfig()) { infoSerial<itemArr->name<driverStatus = CST_INITIALIZED; + setStatus(CST_INITIALIZED); return 1; } else { errorSerial<driverStatus = CST_FAILED; + setStatus(CST_FAILED); return 0; } @@ -202,12 +202,6 @@ store = NULL; return 1; } -int out_Modbus::Status() -{ -if (store) - return store->driverStatus; -return CST_UNKNOWN; -} diff --git a/lighthub/modules/out_modbus.h b/lighthub/modules/out_modbus.h index 0a1b9dc..132f624 100644 --- a/lighthub/modules/out_modbus.h +++ b/lighthub/modules/out_modbus.h @@ -11,8 +11,7 @@ class mbPersistent : public chPersistent { public: -// int addr - int8_t driverStatus; + int baud; serialParamType serialParam; uint16_t pollingInterval; @@ -37,7 +36,6 @@ public: int Setup() override; int Poll(short cause) override; int Stop() override; - int Status() override; int getChanType() override; int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override; int getDefaultStorageType(){return ST_INT32;}; diff --git a/lighthub/modules/out_motor.cpp b/lighthub/modules/out_motor.cpp index 404d9ae..e2b071f 100644 --- a/lighthub/modules/out_motor.cpp +++ b/lighthub/modules/out_motor.cpp @@ -8,7 +8,6 @@ #include "item.h" #include "main.h" -static int driverStatus = CST_UNKNOWN; void out_Motor::getConfig() { @@ -64,7 +63,7 @@ pinMode(pinFeedback, INPUT); item->setExt(0); item->clearFlag(FLAG_ACTION_NEEDED); item->clearFlag(FLAG_ACTION_IN_PROCESS); -driverStatus = CST_INITIALIZED; +setStatus(CST_INITIALIZED); motorQuote = MOTOR_QUOTE; return 1; } @@ -73,7 +72,7 @@ int out_Motor::Stop() { debugSerial.println("Motor: De-Init"); item->setExt(0); -driverStatus = CST_UNKNOWN; +setStatus(CST_UNKNOWN); if (isProtectedPin(pinUp)||isProtectedPin(pinDown)) {errorSerial<getCmd()) -{ - case CMD_OFF: - case CMD_HALT: - return 0; - break; - default: -st.loadItem(item); -return st.getPercents255(); -} -} -*/ int out_Motor::Poll(short cause) { if (cause==POLLING_SLOW) return 0; diff --git a/lighthub/modules/out_motor.h b/lighthub/modules/out_motor.h index 4fbac29..9bf9593 100644 --- a/lighthub/modules/out_motor.h +++ b/lighthub/modules/out_motor.h @@ -24,7 +24,6 @@ public: int Setup() override; int Poll(short cause) override; int Stop() override; - int Status() override; //int isActive() override; int getChanType() override; int getDefaultStorageType(){return ST_PERCENTS255;}; diff --git a/lighthub/modules/out_multivent.cpp b/lighthub/modules/out_multivent.cpp index ca3e8c3..67fa7b8 100644 --- a/lighthub/modules/out_multivent.cpp +++ b/lighthub/modules/out_multivent.cpp @@ -8,7 +8,6 @@ #include "item.h" #include "main.h" -static int driverStatus = CST_UNKNOWN; void out_Multivent::getConfig() { @@ -46,7 +45,7 @@ if (gatesObj /*&& aJson.getArraySize(item->itemArg)>=2*/) i=i->next; } debugSerial << F ("MultiVent init")<< endl; - driverStatus = CST_INITIALIZED; + setStatus(CST_INITIALIZED); return 1; } @@ -58,30 +57,10 @@ return 0; int out_Multivent::Stop() { debugSerial << F ("Multivent De-Init") << endl; -driverStatus = CST_UNKNOWN; +setStatus(CST_UNKNOWN); return 1; } -int out_Multivent::Status() -{ -return driverStatus; -} -/* -int out_Multivent::isActive() -{ -itemCmd st; -switch (item->getCmd()) -{ - case CMD_OFF: - case CMD_HALT: - return 0; - break; - default: -st.loadItem(item); -return st.getPercents255(); -} -} -*/ int out_Multivent::Poll(short cause) { return 0; @@ -93,7 +72,6 @@ int out_Multivent::getChanType() } - int out_Multivent::Ctrl(itemCmd cmd, char* subItem , bool toExecute, bool authorized) { diff --git a/lighthub/modules/out_multivent.h b/lighthub/modules/out_multivent.h index 93a47e8..f066f25 100644 --- a/lighthub/modules/out_multivent.h +++ b/lighthub/modules/out_multivent.h @@ -15,7 +15,6 @@ public: int Setup() override; int Poll(short cause) override; int Stop() override; - int Status() override; //int isActive() override; int getChanType() override; int getDefaultStorageType(){return ST_PERCENTS255;}; diff --git a/lighthub/modules/out_pid.cpp b/lighthub/modules/out_pid.cpp index 09bc24f..59bdb18 100644 --- a/lighthub/modules/out_pid.cpp +++ b/lighthub/modules/out_pid.cpp @@ -125,12 +125,12 @@ if (getConfig()) // if (item->getCmd()) item->setFlag(FLAG_COMMAND); // if (item->itemVal) item->setFlag(FLAG_PARAMETERS); store->prevOut = -2.0; - store->driverStatus = CST_INITIALIZED; + setStatus(CST_INITIALIZED); return 1; } else { errorSerial<driverStatus = CST_FAILED; + setStatus(CST_FAILED); return 0; } @@ -147,12 +147,6 @@ store = NULL; return 1; } -int out_pid::Status() -{ -if (store) - return store->driverStatus; -return CST_UNKNOWN; -} int out_pid::isActive() { diff --git a/lighthub/modules/out_pid.h b/lighthub/modules/out_pid.h index 8372abe..c3f3d83 100644 --- a/lighthub/modules/out_pid.h +++ b/lighthub/modules/out_pid.h @@ -15,7 +15,6 @@ public: double input; double setpoint; float prevOut; - int driverStatus; uint32_t alarmTimer; bool alarmArmed; uint16_t alarmTimeout; //in sec @@ -30,7 +29,6 @@ public: int Setup() override; int Poll(short cause) override; int Stop() override; - int Status() override; int isActive() override; int getChanType() override; int getDefaultStorageType(){return ST_FLOAT;}; diff --git a/lighthub/modules/out_pwm.cpp b/lighthub/modules/out_pwm.cpp index f841239..5f7f78c 100644 --- a/lighthub/modules/out_pwm.cpp +++ b/lighthub/modules/out_pwm.cpp @@ -8,7 +8,6 @@ #include "main.h" #include "dmx.h" -static int driverStatus = CST_UNKNOWN; #if defined(ARDUINO_ARCH_ESP32) void analogWrite(int pin, int val) @@ -55,7 +54,7 @@ switch (getChanType()) TCCR3B |= tval; #endif -driverStatus = CST_INITIALIZED; +setStatus(CST_INITIALIZED); return 1; } @@ -75,15 +74,10 @@ switch (getChanType()) default: pinMode(iaddr, INPUT); } -driverStatus = CST_UNKNOWN; +setStatus(CST_UNKNOWN); return 1; } -int out_pwm::Status() -{ -return driverStatus; -} - int out_pwm::getChanType() { diff --git a/lighthub/modules/out_pwm.h b/lighthub/modules/out_pwm.h index 75a68e3..47305b7 100644 --- a/lighthub/modules/out_pwm.h +++ b/lighthub/modules/out_pwm.h @@ -13,7 +13,7 @@ public: out_pwm(Item * _item):colorChannel(_item){numChannels=0;}; int Setup() override; int Stop() override; - int Status() override; + int getChanType() override; //int Ctrl(itemCmd cmd, char* subItem=NULL) override; diff --git a/lighthub/modules/out_relay.cpp b/lighthub/modules/out_relay.cpp index 013008a..4fbd8f1 100644 --- a/lighthub/modules/out_relay.cpp +++ b/lighthub/modules/out_relay.cpp @@ -8,7 +8,6 @@ #include "main.h" #include "dmx.h" #include "utils.h" -static int driverStatus = CST_UNKNOWN; void out_relay::getConfig() { @@ -43,7 +42,7 @@ digitalWrite(pin,INACTIVE); if (item) item->setExt(0); //if (item->getCmd()) item->setFlag(FLAG_COMMAND); //if (item->itemVal) item->setFlag(FLAG_PARAMETERS); -driverStatus = CST_INITIALIZED; +setStatus(CST_INITIALIZED); if (item->isActive()>0) ///???? { item->setExt(millisNZ()); @@ -55,24 +54,10 @@ int out_relay::Stop() { debugSerial<(leds, numLeds); #endif } -driverStatus = CST_INITIALIZED; +setStatus(CST_INITIALIZED); return 1; } @@ -78,15 +77,11 @@ delete leds; FastLED.clear(true); delete [] leds; #endif -driverStatus = CST_UNKNOWN; +setStatus(CST_UNKNOWN); return 1; } -int out_SPILed::Status() -{ -return driverStatus; -} int out_SPILed::getChanType() diff --git a/lighthub/modules/out_spiled.h b/lighthub/modules/out_spiled.h index 04f2ed7..c317d24 100644 --- a/lighthub/modules/out_spiled.h +++ b/lighthub/modules/out_spiled.h @@ -18,7 +18,6 @@ public: out_SPILed(Item * _item):colorChannel(_item){getConfig();}; int Setup() override; int Stop() override; - int Status() override; int getChanType() override; //int Ctrl(short cmd, short n=0, int * Parameters=NULL, int suffixCode=0, char* subItem=NULL) override; //int Ctrl(itemCmd cmd, char* subItem=NULL) override; diff --git a/lighthub/modules/out_uartbridge.cpp b/lighthub/modules/out_uartbridge.cpp index f61e75f..b4133fa 100644 --- a/lighthub/modules/out_uartbridge.cpp +++ b/lighthub/modules/out_uartbridge.cpp @@ -121,12 +121,12 @@ if (!store) if (getConfig()) { infoSerial<itemArr->name<driverStatus = CST_INITIALIZED; + setStatus(CST_INITIALIZED) return 1; } else { errorSerial<driverStatus = CST_FAILED; + setStatus(CST_FAILED); return 0; } @@ -146,12 +146,6 @@ store = NULL; return 1; } -int out_UARTbridge::Status() -{ -if (store) - return store->driverStatus; -return CST_UNKNOWN; -} String _RR_A; String _WR_A; diff --git a/lighthub/modules/out_uartbridge.h b/lighthub/modules/out_uartbridge.h index f54b911..cf7976e 100644 --- a/lighthub/modules/out_uartbridge.h +++ b/lighthub/modules/out_uartbridge.h @@ -43,8 +43,7 @@ class ubPersistent : public chPersistent { public: -// int addr - int8_t driverStatus; + int baud; serialParamType serialParam; //uint16_t pollingInterval; @@ -63,7 +62,6 @@ public: int Setup() override; int Poll(short cause) override; int Stop() override; - int Status() override; int getChanType() override; int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override; int getDefaultStorageType(){return ST_INT32;}; diff --git a/lighthub/owTerm.cpp b/lighthub/owTerm.cpp index 0a62ef6..9845d06 100644 --- a/lighthub/owTerm.cpp +++ b/lighthub/owTerm.cpp @@ -126,8 +126,6 @@ int owSetup() { //// todo - move memory allocation to here if (oneWire) return true; // Already initialized #ifdef DS2482_100_I2C_TO_1W_BRIDGE -//twi_setTimeoutInMicros() -i2cReset(); debugSerial<checkPresence()) + infoSerial<wireReset(); return INTERVAL_1W; } + if (!oneWire->checkPresence()) + { + infoSerial.println(F("1WT: lost DS2482-100")); + i2cReset(); + } #endif diff --git a/lighthub/utils.cpp b/lighthub/utils.cpp index e4850a6..03a7127 100644 --- a/lighthub/utils.cpp +++ b/lighthub/utils.cpp @@ -879,14 +879,8 @@ bool checkToken(char * token, char * data) -void i2cReset(){ - -#if defined (SCL_RESET) -Wire.endTransmission(true); -SCL_LOW(); -delay(300); -SCL_HIGH(); -#endif +bool i2cReset(){ +debugSerial.println("I2C Reset"); Wire.endTransmission(true); Wire.end(); @@ -901,6 +895,23 @@ pinMode(SDA,INPUT); delay(10);//10us мкс } Wire.begin(); + +#ifdef DS2482_100_I2C_TO_1W_BRIDGE +if (oneWire && oneWire->checkPresence()) +{ + oneWire->deviceReset(); +#ifndef APU_OFF + oneWire->setActivePullup(); +#endif + if (oneWire->wireReset()) + debugSerial.println(F("\tReset done")); + else + debugSerial.println(F("\tDS2482 reset error")); +} +#endif + + +return true; } #pragma message(VAR_NAME_VALUE(debugSerial)) diff --git a/lighthub/utils.h b/lighthub/utils.h index 967390a..e0464e3 100644 --- a/lighthub/utils.h +++ b/lighthub/utils.h @@ -79,5 +79,5 @@ bool getPinVal(uint8_t pin); int str2regSize(char * str); bool checkToken(char * token, char * data); bool isProtectedPin(short pin); - void i2cReset(); + bool i2cReset();