I2C autoreset, driver status refactor, VC_TEMP fix

This commit is contained in:
2023-11-12 01:04:53 +03:00
parent fe054c3c4e
commit 2e21362fd8
32 changed files with 102 additions and 187 deletions

View File

@@ -2,8 +2,8 @@
#include "Arduino.h" #include "Arduino.h"
#define CST_UNKNOWN 0 #define CST_UNKNOWN 0
#define CST_INITIALIZED 1 #define CST_FAILED 1
#define CST_FAILED -1 #define CST_INITIALIZED 2
class abstractCh { class abstractCh {
public: public:
@@ -14,6 +14,7 @@ public:
virtual int Anounce () {return 0;}; virtual int Anounce () {return 0;};
virtual int Stop() {return 0;}; //Should free resources virtual int Stop() {return 0;}; //Should free resources
virtual int Status() {return CST_UNKNOWN;} virtual int Status() {return CST_UNKNOWN;}
virtual void setStatus(uint8_t status) {}
protected: protected:

View File

@@ -1,4 +1,5 @@
#include "item.h" #include "item.h"
#include "abstractout.h" #include "abstractout.h"
#include "itemCmd.h" #include "itemCmd.h"
@@ -25,3 +26,15 @@ int abstractOut::Setup()
if (item && (item->getCmd()==-1)) item->setCmd(CMD_OFF); if (item && (item->getCmd()==-1)) item->setCmd(CMD_OFF);
return 1; return 1;
} }
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;
}

View File

@@ -14,6 +14,8 @@ public:
virtual itemCmd getDefaultOnVal(){return itemCmd().Percents255(255);}; virtual itemCmd getDefaultOnVal(){return itemCmd().Percents255(255);};
virtual int getChanType(){return 0;} virtual int getChanType(){return 0;}
virtual int getDefaultStorageType(){return 0;} /// Remove?? Now getChanType used instead virtual int getDefaultStorageType(){return 0;} /// Remove?? Now getChanType used instead
virtual int Status() override;
virtual void setStatus(uint8_t status) override;
int Setup() override; int Setup() override;
protected: protected:
Item * item; Item * item;

View File

@@ -2165,7 +2165,7 @@ int Item::VacomSetFan(itemCmd st) {
#define a 0.1842f #define a 0.1842f
#define b -36.68f #define b -36.68f
///move to float todo
int Item::VacomSetHeat(itemCmd st) int Item::VacomSetHeat(itemCmd st)
{ {
float val=st.getFloat(); float val=st.getFloat();
@@ -2176,7 +2176,10 @@ int addr;
if (itemArg->type != aJson_String) return 0; if (itemArg->type != aJson_String) return 0;
Item it(itemArg->valuestring); 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; else return 0;
debugSerial<<F("MB: VC_heat#")<<addr<<F("=")<<val<<F(" cmd=")<<cmd<<endl; debugSerial<<F("MB: VC_heat#")<<addr<<F("=")<<val<<F(" cmd=")<<cmd<<endl;
@@ -2197,17 +2200,18 @@ int addr;
switch (cmd) { switch (cmd) {
case CMD_OFF: case CMD_OFF:
case CMD_HALT: case CMD_HALT:
case CMD_FAN:
regval = 0; regval = 0;
it.itemArr->subtype = 0;
break; break;
default: default:
it.itemArr->subtype = 1;
regval = round(( val - b) * 10 / a); regval = round(( val - b) * 10 / a);
} }
//debugSerial<<regval);
result=node.writeSingleRegister(2004 - 1, regval); result=node.writeSingleRegister(2004 - 1, regval);
modbusBusy = 0; modbusBusy = 0;
//resumeModbus();
if (result == node.ku8MBSuccess) return 1; if (result == node.ku8MBSuccess) return 1;
mb_fail(result); mb_fail(result);
return 0; return 0;

View File

@@ -126,7 +126,6 @@ if (reg!=0xff)
} }
else //ESP I2C glitch else //ESP I2C glitch
{ {
debugSerial.println("I2C Reset");
i2cReset(); i2cReset();
} }
return INTERVAL_SLOW_POLLING; return INTERVAL_SLOW_POLLING;

View File

@@ -19,10 +19,10 @@ extern bool disableCMD;
#define INTERVAL_AC_POLLING 5000L #define INTERVAL_AC_POLLING 5000L
#define AC_FAILED 15 #define AC_FAILED CST_FAILED
#define AC_UNKNOWN CST_UNKNOWN #define AC_UNKNOWN CST_UNKNOWN
#define AC_IDLE CST_INITIALIZED #define AC_IDLE CST_INITIALIZED
#define AC_SENDING 2 #define AC_SENDING 3
//byte inCheck = 0; //byte inCheck = 0;
byte qstn[] = {255,255,10,0,0,0,0,0,1,1,77,1,90}; // Команда опроса byte qstn[] = {255,255,10,0,0,0,0,0,1,1,77,1,90}; // Команда опроса
@@ -273,7 +273,7 @@ byte getCRC(byte req[], size_t size){
void out_AC::SendData(byte req[], size_t size){ void out_AC::SendData(byte req[], size_t size){
if (!store || !item) return; if (!store || !item) return;
if (item->itemArr->subtype == AC_SENDING) if (Status() == AC_SENDING)
{ {
while (store->timestamp && !isTimeOver(store->timestamp,millis(),150)) yield(); while (store->timestamp && !isTimeOver(store->timestamp,millis(),150)) yield();
} }
@@ -299,7 +299,7 @@ if (item->itemArr->subtype == AC_SENDING)
} }
} }
debugSerial.println(); debugSerial.println();
item->itemArr->subtype = AC_SENDING; setStatus(AC_SENDING);
// #if defined (__SAM3X8E__) // #if defined (__SAM3X8E__)
// if (item->getArg(0)==2) postTransmission(); // if (item->getArg(0)==2) postTransmission();
// #endif // #endif
@@ -340,9 +340,9 @@ if (!portNum)// && (g_APinDescription[0].ulPinType == PIO_PA8A_URXD))
#endif #endif
} }
ACSerial->begin(9600); ACSerial->begin(9600);
item->itemArr->subtype = AC_IDLE; setStatus (AC_IDLE);
//driverStatus = CST_INITIALIZED;
return 1; return 1;
} }
@@ -353,10 +353,11 @@ debugSerial<<F("AC: De-Init: ")<<portNum<<endl;
delete store; delete store;
item->setPersistent(NULL); item->setPersistent(NULL);
store = NULL; store = NULL;
item->itemArr->subtype = CST_UNKNOWN; setStatus (CST_UNKNOWN);
return 1; return 1;
} }
/*
int out_AC::Status() int out_AC::Status()
{ {
if (!item) return 0; if (!item) return 0;
@@ -368,7 +369,8 @@ default:
return CST_INITIALIZED; return CST_INITIALIZED;
//return item->itemArr->subtype; //return item->itemArr->subtype;
} }
} }*/
int out_AC::isActive() int out_AC::isActive()
{ {
if (!store) return 0; if (!store) return 0;
@@ -379,7 +381,7 @@ int out_AC::Poll(short cause)
{ {
if (!store) return -1; if (!store) return -1;
switch (item->itemArr->subtype) switch (Status())
{ {
case AC_FAILED: return -1; case AC_FAILED: return -1;
case AC_UNKNOWN: return -1; case AC_UNKNOWN: return -1;
@@ -387,7 +389,7 @@ case AC_SENDING:
{ {
if (store->timestamp && isTimeOver(store->timestamp,millis(),150)) if (store->timestamp && isTimeOver(store->timestamp,millis(),150))
{ {
item->itemArr->subtype = AC_IDLE; setStatus(AC_IDLE);
store->timestamp=millisNZ(); store->timestamp=millisNZ();
} }
} }
@@ -395,7 +397,7 @@ case AC_SENDING:
if (cause!=POLLING_SLOW) return false; 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")); debugSerial.println(F("AC: Polling"));
SendData(qstn, sizeof(qstn)/sizeof(byte)); //Опрос кондиционера SendData(qstn, sizeof(qstn)/sizeof(byte)); //Опрос кондиционера

View File

@@ -40,7 +40,6 @@ public:
int Setup() override; int Setup() override;
int Poll(short cause) override; int Poll(short cause) override;
int Stop() override; int Stop() override;
int Status() override;
int isActive() override; int isActive() override;
int getChanType() override; int getChanType() override;
int getDefaultStorageType(){return ST_FLOAT_CELSIUS;}; int getDefaultStorageType(){return ST_FLOAT_CELSIUS;};

View File

@@ -8,25 +8,20 @@
#include "main.h" #include "main.h"
static int driverStatus = CST_UNKNOWN;
int out_counter::Setup() int out_counter::Setup()
{ {
abstractOut::Setup(); abstractOut::Setup();
driverStatus = CST_INITIALIZED; setStatus(CST_INITIALIZED);
return 1; return 1;
} }
int out_counter::Stop() int out_counter::Stop()
{ {
driverStatus = CST_UNKNOWN; setStatus(CST_UNKNOWN);
return 1; return 1;
} }
int out_counter::Status()
{
return driverStatus;
}
int out_counter::Poll(short cause) int out_counter::Poll(short cause)

View File

@@ -13,7 +13,6 @@ public:
int Setup() override; int Setup() override;
int Poll(short cause) override; int Poll(short cause) override;
int Stop() override; int Stop() override;
int Status() override;
int getChanType() override; int getChanType() override;
int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override; int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override;
}; };

View File

@@ -9,28 +9,22 @@
#include "main.h" #include "main.h"
#include "dmx.h" #include "dmx.h"
static int driverStatus = CST_UNKNOWN;
int out_dmx::Setup() int out_dmx::Setup()
{ {
abstractOut::Setup(); abstractOut::Setup();
debugSerial<<F("DMX-Out Init: ")<< item->itemArr->name <<endl; debugSerial<<F("DMX-Out Init: ")<< item->itemArr->name <<endl;
driverStatus = CST_INITIALIZED; setStatus(CST_INITIALIZED);
return 1; return 1;
} }
int out_dmx::Stop() int out_dmx::Stop()
{ {
debugSerial<<F("DMX-Out stop: ")<< item->itemArr->name << endl; debugSerial<<F("DMX-Out stop: ")<< item->itemArr->name << endl;
driverStatus = CST_UNKNOWN; setStatus(CST_UNKNOWN);
return 1; return 1;
} }
int out_dmx::Status()
{
return driverStatus;
}
int out_dmx::getChanType() int out_dmx::getChanType()
{ {
if (item) if (item)

View File

@@ -13,7 +13,6 @@ public:
out_dmx(Item * _item):colorChannel(_item){}; out_dmx(Item * _item):colorChannel(_item){};
int Setup() override; int Setup() override;
int Stop() override; int Stop() override;
int Status() override;
int getChanType() override; int getChanType() override;
// int Ctrl(itemCmd cmd, char* subItem=NULL) override; // int Ctrl(itemCmd cmd, char* subItem=NULL) override;

View File

@@ -78,14 +78,14 @@ store->timestamp=millisNZ();
if (getConfig()) if (getConfig())
{ {
infoSerial<<F("Mercury: config loaded ")<< item->itemArr->name<<endl; infoSerial<<F("Mercury: config loaded ")<< item->itemArr->name<<endl;
store->driverStatus = CST_INITIALIZED; setStatus(CST_INITIALIZED);
store->lastSuccessTS = 0; store->lastSuccessTS = 0;
initLine(true); initLine(true);
return 1; return 1;
} }
else else
{ errorSerial<<F("Mercury: config error")<<endl; { errorSerial<<F("Mercury: config error")<<endl;
store->driverStatus = CST_FAILED; setStatus(CST_FAILED);
return 0; return 0;
} }
@@ -101,18 +101,6 @@ store = NULL;
return 1; 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() short out_Mercury::connectMercury()
{ {
@@ -337,7 +325,7 @@ int out_Mercury::Poll(short cause)
//bool lineInitialized = false; //bool lineInitialized = false;
if (cause==POLLING_SLOW) return 0; if (cause==POLLING_SLOW) return 0;
if (modbusBusy || ( mbusSlenceTimer && !isTimeOver(mbusSlenceTimer,millis(),100))) 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; if (!getConfig()) return 0;
switch (Status()) switch (Status())

View File

@@ -12,7 +12,6 @@
class mercuryPersistent : public chPersistent { class mercuryPersistent : public chPersistent {
public: public:
int8_t driverStatus;
uint32_t timestamp; uint32_t timestamp;
uint32_t lastSuccessTS; uint32_t lastSuccessTS;
}; };
@@ -47,7 +46,6 @@ public:
int Setup() override; int Setup() override;
int Poll(short cause) override; int Poll(short cause) override;
int Stop() override; int Stop() override;
int Status() override;
int getChanType() override; int getChanType() override;
int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override; int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override;
int getDefaultStorageType(){return ST_INT32;}; int getDefaultStorageType(){return ST_INT32;};
@@ -58,7 +56,6 @@ protected:
uint16_t pollingInterval; uint16_t pollingInterval;
bool getConfig(); bool getConfig();
void initLine(bool full = false); void initLine(bool full = false);
void setStatus(short);
short connectMercury(); short connectMercury();
short disconnectMercury(); short disconnectMercury();
short getCurrentVal12(byte param, String topic,int divisor=1); short getCurrentVal12(byte param, String topic,int divisor=1);

View File

@@ -180,12 +180,12 @@ store->timestamp=millisNZ();
if (getConfig()) if (getConfig())
{ {
infoSerial<<F("MBUS: config loaded ")<< item->itemArr->name<<endl; infoSerial<<F("MBUS: config loaded ")<< item->itemArr->name<<endl;
store->driverStatus = CST_INITIALIZED; setStatus(CST_INITIALIZED);
return 1; return 1;
} }
else else
{ errorSerial<<F("MBUS: config error")<<endl; { errorSerial<<F("MBUS: config error")<<endl;
store->driverStatus = CST_FAILED; setStatus(CST_FAILED);
return 0; return 0;
} }
@@ -202,12 +202,6 @@ store = NULL;
return 1; return 1;
} }
int out_Modbus::Status()
{
if (store)
return store->driverStatus;
return CST_UNKNOWN;
}

View File

@@ -11,8 +11,7 @@
class mbPersistent : public chPersistent { class mbPersistent : public chPersistent {
public: public:
// int addr
int8_t driverStatus;
int baud; int baud;
serialParamType serialParam; serialParamType serialParam;
uint16_t pollingInterval; uint16_t pollingInterval;
@@ -37,7 +36,6 @@ public:
int Setup() override; int Setup() override;
int Poll(short cause) override; int Poll(short cause) override;
int Stop() override; int Stop() override;
int Status() override;
int getChanType() override; int getChanType() override;
int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override; int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override;
int getDefaultStorageType(){return ST_INT32;}; int getDefaultStorageType(){return ST_INT32;};

View File

@@ -8,7 +8,6 @@
#include "item.h" #include "item.h"
#include "main.h" #include "main.h"
static int driverStatus = CST_UNKNOWN;
void out_Motor::getConfig() void out_Motor::getConfig()
{ {
@@ -64,7 +63,7 @@ pinMode(pinFeedback, INPUT);
item->setExt(0); item->setExt(0);
item->clearFlag(FLAG_ACTION_NEEDED); item->clearFlag(FLAG_ACTION_NEEDED);
item->clearFlag(FLAG_ACTION_IN_PROCESS); item->clearFlag(FLAG_ACTION_IN_PROCESS);
driverStatus = CST_INITIALIZED; setStatus(CST_INITIALIZED);
motorQuote = MOTOR_QUOTE; motorQuote = MOTOR_QUOTE;
return 1; return 1;
} }
@@ -73,7 +72,7 @@ int out_Motor::Stop()
{ {
debugSerial.println("Motor: De-Init"); debugSerial.println("Motor: De-Init");
item->setExt(0); item->setExt(0);
driverStatus = CST_UNKNOWN; setStatus(CST_UNKNOWN);
if (isProtectedPin(pinUp)||isProtectedPin(pinDown)) {errorSerial<<F("pin disabled")<<endl;return 0;} if (isProtectedPin(pinUp)||isProtectedPin(pinDown)) {errorSerial<<F("pin disabled")<<endl;return 0;}
digitalWrite(pinUp,INACTIVE); digitalWrite(pinUp,INACTIVE);
@@ -82,26 +81,6 @@ digitalWrite(pinDown,INACTIVE);
return 1; return 1;
} }
int out_Motor::Status()
{
return driverStatus;
}
/*
int out_Motor::isActive()
{
itemCmd st;
switch (item->getCmd())
{
case CMD_OFF:
case CMD_HALT:
return 0;
break;
default:
st.loadItem(item);
return st.getPercents255();
}
}
*/
int out_Motor::Poll(short cause) int out_Motor::Poll(short cause)
{ {
if (cause==POLLING_SLOW) return 0; if (cause==POLLING_SLOW) return 0;

View File

@@ -24,7 +24,6 @@ public:
int Setup() override; int Setup() override;
int Poll(short cause) override; int Poll(short cause) override;
int Stop() override; int Stop() override;
int Status() override;
//int isActive() override; //int isActive() override;
int getChanType() override; int getChanType() override;
int getDefaultStorageType(){return ST_PERCENTS255;}; int getDefaultStorageType(){return ST_PERCENTS255;};

View File

@@ -8,7 +8,6 @@
#include "item.h" #include "item.h"
#include "main.h" #include "main.h"
static int driverStatus = CST_UNKNOWN;
void out_Multivent::getConfig() void out_Multivent::getConfig()
{ {
@@ -46,7 +45,7 @@ if (gatesObj /*&& aJson.getArraySize(item->itemArg)>=2*/)
i=i->next; i=i->next;
} }
debugSerial << F ("MultiVent init")<< endl; debugSerial << F ("MultiVent init")<< endl;
driverStatus = CST_INITIALIZED; setStatus(CST_INITIALIZED);
return 1; return 1;
} }
@@ -58,30 +57,10 @@ return 0;
int out_Multivent::Stop() int out_Multivent::Stop()
{ {
debugSerial << F ("Multivent De-Init") << endl; debugSerial << F ("Multivent De-Init") << endl;
driverStatus = CST_UNKNOWN; setStatus(CST_UNKNOWN);
return 1; 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) int out_Multivent::Poll(short cause)
{ {
return 0; return 0;
@@ -93,7 +72,6 @@ int out_Multivent::getChanType()
} }
int out_Multivent::Ctrl(itemCmd cmd, char* subItem , bool toExecute, bool authorized) int out_Multivent::Ctrl(itemCmd cmd, char* subItem , bool toExecute, bool authorized)
{ {

View File

@@ -15,7 +15,6 @@ public:
int Setup() override; int Setup() override;
int Poll(short cause) override; int Poll(short cause) override;
int Stop() override; int Stop() override;
int Status() override;
//int isActive() override; //int isActive() override;
int getChanType() override; int getChanType() override;
int getDefaultStorageType(){return ST_PERCENTS255;}; int getDefaultStorageType(){return ST_PERCENTS255;};

View File

@@ -125,12 +125,12 @@ if (getConfig())
// if (item->getCmd()) item->setFlag(FLAG_COMMAND); // if (item->getCmd()) item->setFlag(FLAG_COMMAND);
// if (item->itemVal) item->setFlag(FLAG_PARAMETERS); // if (item->itemVal) item->setFlag(FLAG_PARAMETERS);
store->prevOut = -2.0; store->prevOut = -2.0;
store->driverStatus = CST_INITIALIZED; setStatus(CST_INITIALIZED);
return 1; return 1;
} }
else else
{ errorSerial<<F("PID: config error")<<endl; { errorSerial<<F("PID: config error")<<endl;
store->driverStatus = CST_FAILED; setStatus(CST_FAILED);
return 0; return 0;
} }
@@ -147,12 +147,6 @@ store = NULL;
return 1; return 1;
} }
int out_pid::Status()
{
if (store)
return store->driverStatus;
return CST_UNKNOWN;
}
int out_pid::isActive() int out_pid::isActive()
{ {

View File

@@ -15,7 +15,6 @@ public:
double input; double input;
double setpoint; double setpoint;
float prevOut; float prevOut;
int driverStatus;
uint32_t alarmTimer; uint32_t alarmTimer;
bool alarmArmed; bool alarmArmed;
uint16_t alarmTimeout; //in sec uint16_t alarmTimeout; //in sec
@@ -30,7 +29,6 @@ public:
int Setup() override; int Setup() override;
int Poll(short cause) override; int Poll(short cause) override;
int Stop() override; int Stop() override;
int Status() override;
int isActive() override; int isActive() override;
int getChanType() override; int getChanType() override;
int getDefaultStorageType(){return ST_FLOAT;}; int getDefaultStorageType(){return ST_FLOAT;};

View File

@@ -8,7 +8,6 @@
#include "main.h" #include "main.h"
#include "dmx.h" #include "dmx.h"
static int driverStatus = CST_UNKNOWN;
#if defined(ARDUINO_ARCH_ESP32) #if defined(ARDUINO_ARCH_ESP32)
void analogWrite(int pin, int val) void analogWrite(int pin, int val)
@@ -55,7 +54,7 @@ switch (getChanType())
TCCR3B |= tval; TCCR3B |= tval;
#endif #endif
driverStatus = CST_INITIALIZED; setStatus(CST_INITIALIZED);
return 1; return 1;
} }
@@ -75,15 +74,10 @@ switch (getChanType())
default: default:
pinMode(iaddr, INPUT); pinMode(iaddr, INPUT);
} }
driverStatus = CST_UNKNOWN; setStatus(CST_UNKNOWN);
return 1; return 1;
} }
int out_pwm::Status()
{
return driverStatus;
}
int out_pwm::getChanType() int out_pwm::getChanType()
{ {

View File

@@ -13,7 +13,7 @@ public:
out_pwm(Item * _item):colorChannel(_item){numChannels=0;}; out_pwm(Item * _item):colorChannel(_item){numChannels=0;};
int Setup() override; int Setup() override;
int Stop() override; int Stop() override;
int Status() override;
int getChanType() override; int getChanType() override;
//int Ctrl(itemCmd cmd, char* subItem=NULL) override; //int Ctrl(itemCmd cmd, char* subItem=NULL) override;

View File

@@ -8,7 +8,6 @@
#include "main.h" #include "main.h"
#include "dmx.h" #include "dmx.h"
#include "utils.h" #include "utils.h"
static int driverStatus = CST_UNKNOWN;
void out_relay::getConfig() void out_relay::getConfig()
{ {
@@ -43,7 +42,7 @@ digitalWrite(pin,INACTIVE);
if (item) item->setExt(0); if (item) item->setExt(0);
//if (item->getCmd()) item->setFlag(FLAG_COMMAND); //if (item->getCmd()) item->setFlag(FLAG_COMMAND);
//if (item->itemVal) item->setFlag(FLAG_PARAMETERS); //if (item->itemVal) item->setFlag(FLAG_PARAMETERS);
driverStatus = CST_INITIALIZED; setStatus(CST_INITIALIZED);
if (item->isActive()>0) ///???? if (item->isActive()>0) ///????
{ {
item->setExt(millisNZ()); item->setExt(millisNZ());
@@ -55,24 +54,10 @@ int out_relay::Stop()
{ {
debugSerial<<F("Relay-Out #")<<pin<<F(" stop")<<endl; debugSerial<<F("Relay-Out #")<<pin<<F(" stop")<<endl;
pinMode(pin, INPUT); pinMode(pin, INPUT);
driverStatus = CST_UNKNOWN; setStatus(CST_UNKNOWN);
return 1; return 1;
} }
int out_relay::Status()
{
return driverStatus;
}
/*
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";
*/
void out_relay::relay(bool state) void out_relay::relay(bool state)
{ {
char subtopic[10]="/"; char subtopic[10]="/";

View File

@@ -15,7 +15,6 @@ public:
int Setup() override; int Setup() override;
int Poll(short cause) override; int Poll(short cause) override;
int Stop() override; int Stop() override;
int Status() override;
int getChanType() override; int getChanType() override;
int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override; int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override;

View File

@@ -24,7 +24,6 @@ static CRGB *leds = NULL;
#define NUM_LEDS 43 #define NUM_LEDS 43
static int driverStatus = CST_UNKNOWN;
void out_SPILed::getConfig() void out_SPILed::getConfig()
{ {
@@ -63,7 +62,7 @@ FastLED.addLeds<CONTROLLER, DATA_PIN, ORDER>(leds, numLeds);
#endif #endif
} }
driverStatus = CST_INITIALIZED; setStatus(CST_INITIALIZED);
return 1; return 1;
} }
@@ -78,15 +77,11 @@ delete leds;
FastLED.clear(true); FastLED.clear(true);
delete [] leds; delete [] leds;
#endif #endif
driverStatus = CST_UNKNOWN; setStatus(CST_UNKNOWN);
return 1; return 1;
} }
int out_SPILed::Status()
{
return driverStatus;
}
int out_SPILed::getChanType() int out_SPILed::getChanType()

View File

@@ -18,7 +18,6 @@ public:
out_SPILed(Item * _item):colorChannel(_item){getConfig();}; out_SPILed(Item * _item):colorChannel(_item){getConfig();};
int Setup() override; int Setup() override;
int Stop() override; int Stop() override;
int Status() override;
int getChanType() override; int getChanType() override;
//int Ctrl(short cmd, short n=0, int * Parameters=NULL, int suffixCode=0, char* subItem=NULL) 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; //int Ctrl(itemCmd cmd, char* subItem=NULL) override;

View File

@@ -121,12 +121,12 @@ if (!store)
if (getConfig()) if (getConfig())
{ {
infoSerial<<F("UARTbridge config loaded ")<< item->itemArr->name<<endl; infoSerial<<F("UARTbridge config loaded ")<< item->itemArr->name<<endl;
store->driverStatus = CST_INITIALIZED; setStatus(CST_INITIALIZED)
return 1; return 1;
} }
else else
{ errorSerial<<F("UARTbridge config error")<<endl; { errorSerial<<F("UARTbridge config error")<<endl;
store->driverStatus = CST_FAILED; setStatus(CST_FAILED);
return 0; return 0;
} }
@@ -146,12 +146,6 @@ store = NULL;
return 1; return 1;
} }
int out_UARTbridge::Status()
{
if (store)
return store->driverStatus;
return CST_UNKNOWN;
}
String _RR_A; String _RR_A;
String _WR_A; String _WR_A;

View File

@@ -43,8 +43,7 @@
class ubPersistent : public chPersistent { class ubPersistent : public chPersistent {
public: public:
// int addr
int8_t driverStatus;
int baud; int baud;
serialParamType serialParam; serialParamType serialParam;
//uint16_t pollingInterval; //uint16_t pollingInterval;
@@ -63,7 +62,6 @@ public:
int Setup() override; int Setup() override;
int Poll(short cause) override; int Poll(short cause) override;
int Stop() override; int Stop() override;
int Status() override;
int getChanType() override; int getChanType() override;
int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override; int Ctrl(itemCmd cmd, char* subItem=NULL, bool toExecute=true, bool authorized = false) override;
int getDefaultStorageType(){return ST_INT32;}; int getDefaultStorageType(){return ST_INT32;};

View File

@@ -126,8 +126,6 @@ int owSetup() {
//// todo - move memory allocation to here //// todo - move memory allocation to here
if (oneWire) return true; // Already initialized if (oneWire) return true; // Already initialized
#ifdef DS2482_100_I2C_TO_1W_BRIDGE #ifdef DS2482_100_I2C_TO_1W_BRIDGE
//twi_setTimeoutInMicros()
i2cReset();
debugSerial<<F("DS2482_100_I2C_TO_1W_BRIDGE init")<<endl; debugSerial<<F("DS2482_100_I2C_TO_1W_BRIDGE init")<<endl;
debugSerial<<F("Free:")<<freeRam()<<endl; debugSerial<<F("Free:")<<freeRam()<<endl;
@@ -165,8 +163,14 @@ if (!oneWire)
} }
else else
{ {
errorSerial.println(F("1WT: DS2482-100 not present")); i2cReset();
return false; if (oneWire->checkPresence())
infoSerial<<F("1WT: DS2482-100 I2C restored")<<endl;
else
{
errorSerial.println(F("1WT: DS2482-100 not present"));
return false;
}
} }
#else #else
// software driver // software driver
@@ -235,6 +239,11 @@ int sensors_loop(void) {
oneWire->wireReset(); oneWire->wireReset();
return INTERVAL_1W; return INTERVAL_1W;
} }
if (!oneWire->checkPresence())
{
infoSerial.println(F("1WT: lost DS2482-100"));
i2cReset();
}
#endif #endif

View File

@@ -879,14 +879,8 @@ bool checkToken(char * token, char * data)
void i2cReset(){ bool i2cReset(){
debugSerial.println("I2C Reset");
#if defined (SCL_RESET)
Wire.endTransmission(true);
SCL_LOW();
delay(300);
SCL_HIGH();
#endif
Wire.endTransmission(true); Wire.endTransmission(true);
Wire.end(); Wire.end();
@@ -901,6 +895,23 @@ pinMode(SDA,INPUT);
delay(10);//10us мкс delay(10);//10us мкс
} }
Wire.begin(); 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)) #pragma message(VAR_NAME_VALUE(debugSerial))

View File

@@ -79,5 +79,5 @@ bool getPinVal(uint8_t pin);
int str2regSize(char * str); int str2regSize(char * str);
bool checkToken(char * token, char * data); bool checkToken(char * token, char * data);
bool isProtectedPin(short pin); bool isProtectedPin(short pin);
void i2cReset(); bool i2cReset();