mirror of
https://github.com/anklimov/lighthub
synced 2025-12-06 11:49:51 +03:00
I2C autoreset, driver status refactor, VC_TEMP fix
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
|
||||
|
||||
#include "item.h"
|
||||
#include "abstractout.h"
|
||||
#include "itemCmd.h"
|
||||
@@ -25,3 +26,15 @@ int abstractOut::Setup()
|
||||
if (item && (item->getCmd()==-1)) item->setCmd(CMD_OFF);
|
||||
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;
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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<<F("MB: VC_heat#")<<addr<<F("=")<<val<<F(" cmd=")<<cmd<<endl;
|
||||
@@ -2197,17 +2200,18 @@ int addr;
|
||||
switch (cmd) {
|
||||
case CMD_OFF:
|
||||
case CMD_HALT:
|
||||
case CMD_FAN:
|
||||
regval = 0;
|
||||
it.itemArr->subtype = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
it.itemArr->subtype = 1;
|
||||
regval = round(( val - b) * 10 / a);
|
||||
}
|
||||
|
||||
//debugSerial<<regval);
|
||||
result=node.writeSingleRegister(2004 - 1, regval);
|
||||
modbusBusy = 0;
|
||||
//resumeModbus();
|
||||
if (result == node.ku8MBSuccess) return 1;
|
||||
mb_fail(result);
|
||||
return 0;
|
||||
|
||||
@@ -126,7 +126,6 @@ if (reg!=0xff)
|
||||
}
|
||||
else //ESP I2C glitch
|
||||
{
|
||||
debugSerial.println("I2C Reset");
|
||||
i2cReset();
|
||||
}
|
||||
return INTERVAL_SLOW_POLLING;
|
||||
|
||||
@@ -19,10 +19,10 @@ extern bool disableCMD;
|
||||
|
||||
#define INTERVAL_AC_POLLING 5000L
|
||||
|
||||
#define AC_FAILED 15
|
||||
#define AC_FAILED CST_FAILED
|
||||
#define AC_UNKNOWN CST_UNKNOWN
|
||||
#define AC_IDLE CST_INITIALIZED
|
||||
#define AC_SENDING 2
|
||||
#define AC_SENDING 3
|
||||
|
||||
//byte inCheck = 0;
|
||||
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){
|
||||
if (!store || !item) return;
|
||||
if (item->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<<F("AC: De-Init: ")<<portNum<<endl;
|
||||
delete store;
|
||||
item->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)); //Опрос кондиционера
|
||||
|
||||
@@ -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;};
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -9,28 +9,22 @@
|
||||
#include "main.h"
|
||||
#include "dmx.h"
|
||||
|
||||
static int driverStatus = CST_UNKNOWN;
|
||||
|
||||
int out_dmx::Setup()
|
||||
{
|
||||
abstractOut::Setup();
|
||||
debugSerial<<F("DMX-Out Init: ")<< item->itemArr->name <<endl;
|
||||
driverStatus = CST_INITIALIZED;
|
||||
setStatus(CST_INITIALIZED);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int out_dmx::Stop()
|
||||
{
|
||||
debugSerial<<F("DMX-Out stop: ")<< item->itemArr->name << endl;
|
||||
driverStatus = CST_UNKNOWN;
|
||||
setStatus(CST_UNKNOWN);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int out_dmx::Status()
|
||||
{
|
||||
return driverStatus;
|
||||
}
|
||||
|
||||
int out_dmx::getChanType()
|
||||
{
|
||||
if (item)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -78,14 +78,14 @@ store->timestamp=millisNZ();
|
||||
if (getConfig())
|
||||
{
|
||||
infoSerial<<F("Mercury: config loaded ")<< item->itemArr->name<<endl;
|
||||
store->driverStatus = CST_INITIALIZED;
|
||||
setStatus(CST_INITIALIZED);
|
||||
store->lastSuccessTS = 0;
|
||||
initLine(true);
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{ errorSerial<<F("Mercury: config error")<<endl;
|
||||
store->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())
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -180,12 +180,12 @@ store->timestamp=millisNZ();
|
||||
if (getConfig())
|
||||
{
|
||||
infoSerial<<F("MBUS: config loaded ")<< item->itemArr->name<<endl;
|
||||
store->driverStatus = CST_INITIALIZED;
|
||||
setStatus(CST_INITIALIZED);
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{ errorSerial<<F("MBUS: config error")<<endl;
|
||||
store->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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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;};
|
||||
|
||||
@@ -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<<F("pin disabled")<<endl;return 0;}
|
||||
digitalWrite(pinUp,INACTIVE);
|
||||
@@ -82,26 +81,6 @@ digitalWrite(pinDown,INACTIVE);
|
||||
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)
|
||||
{
|
||||
if (cause==POLLING_SLOW) return 0;
|
||||
|
||||
@@ -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;};
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
|
||||
@@ -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;};
|
||||
|
||||
@@ -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<<F("PID: config error")<<endl;
|
||||
store->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()
|
||||
{
|
||||
|
||||
@@ -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;};
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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<<F("Relay-Out #")<<pin<<F(" stop")<<endl;
|
||||
pinMode(pin, INPUT);
|
||||
driverStatus = CST_UNKNOWN;
|
||||
setStatus(CST_UNKNOWN);
|
||||
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)
|
||||
{
|
||||
char subtopic[10]="/";
|
||||
|
||||
@@ -15,7 +15,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;
|
||||
|
||||
@@ -24,7 +24,6 @@ static CRGB *leds = NULL;
|
||||
|
||||
#define NUM_LEDS 43
|
||||
|
||||
static int driverStatus = CST_UNKNOWN;
|
||||
|
||||
void out_SPILed::getConfig()
|
||||
{
|
||||
@@ -63,7 +62,7 @@ FastLED.addLeds<CONTROLLER, DATA_PIN, ORDER>(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()
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -121,12 +121,12 @@ if (!store)
|
||||
if (getConfig())
|
||||
{
|
||||
infoSerial<<F("UARTbridge config loaded ")<< item->itemArr->name<<endl;
|
||||
store->driverStatus = CST_INITIALIZED;
|
||||
setStatus(CST_INITIALIZED)
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{ errorSerial<<F("UARTbridge config error")<<endl;
|
||||
store->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;
|
||||
|
||||
@@ -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;};
|
||||
|
||||
@@ -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<<F("DS2482_100_I2C_TO_1W_BRIDGE init")<<endl;
|
||||
debugSerial<<F("Free:")<<freeRam()<<endl;
|
||||
@@ -163,11 +161,17 @@ if (!oneWire)
|
||||
debugSerial.println(F("\tDS2482 reset error"));
|
||||
//return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
i2cReset();
|
||||
if (oneWire->checkPresence())
|
||||
infoSerial<<F("1WT: DS2482-100 I2C restored")<<endl;
|
||||
else
|
||||
{
|
||||
errorSerial.println(F("1WT: DS2482-100 not present"));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
#else
|
||||
// software driver
|
||||
oneWire->reset();
|
||||
@@ -235,6 +239,11 @@ int sensors_loop(void) {
|
||||
oneWire->wireReset();
|
||||
return INTERVAL_1W;
|
||||
}
|
||||
if (!oneWire->checkPresence())
|
||||
{
|
||||
infoSerial.println(F("1WT: lost DS2482-100"));
|
||||
i2cReset();
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user