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"
|
#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:
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "item.h"
|
#include "item.h"
|
||||||
#include "abstractout.h"
|
#include "abstractout.h"
|
||||||
#include "itemCmd.h"
|
#include "itemCmd.h"
|
||||||
@@ -24,4 +25,16 @@ 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;
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
|||||||
@@ -2121,7 +2121,7 @@ int Item::VacomSetFan(itemCmd st) {
|
|||||||
default:
|
default:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (cmd){
|
switch (cmd){
|
||||||
case CMD_OFF:
|
case CMD_OFF:
|
||||||
case CMD_HALT:
|
case CMD_HALT:
|
||||||
@@ -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;
|
||||||
@@ -2464,7 +2468,7 @@ return 1;
|
|||||||
|
|
||||||
int Item::checkModbusDimmer(int data) {
|
int Item::checkModbusDimmer(int data) {
|
||||||
if (getFlag(FLAG_SEND_RETRY)) return 0; //Active send transaction
|
if (getFlag(FLAG_SEND_RETRY)) return 0; //Active send transaction
|
||||||
|
|
||||||
short mask = getArg(2);
|
short mask = getArg(2);
|
||||||
itemCmd st;
|
itemCmd st;
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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)); //Опрос кондиционера
|
||||||
|
|||||||
@@ -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;};
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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())
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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;};
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;};
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
@@ -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;};
|
||||||
|
|||||||
@@ -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()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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;};
|
||||||
|
|||||||
@@ -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()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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]="/";
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;};
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user