mirror of
https://github.com/anklimov/lighthub
synced 2025-12-07 20:29:50 +03:00
driver status, setup, stop
This commit is contained in:
@@ -1,13 +1,19 @@
|
||||
#pragma once
|
||||
#include "Arduino.h"
|
||||
|
||||
#define CST_UNKNOWN 0
|
||||
#define CST_INITIALIZED 1
|
||||
|
||||
class abstractCh {
|
||||
public:
|
||||
abstractCh(){};
|
||||
virtual ~abstractCh(){};
|
||||
virtual int Poll() = 0;
|
||||
virtual int Setup() =0;
|
||||
virtual int Setup() =0; //Should initialize hardware and reserve resources
|
||||
virtual int Anounce () {};
|
||||
virtual int Stop() {}; //Should free resources
|
||||
virtual int Status() {return CST_UNKNOWN;}
|
||||
|
||||
|
||||
protected:
|
||||
virtual int publishTopic(char* topic, long value, char* subtopic = NULL);
|
||||
|
||||
@@ -135,15 +135,33 @@ void Item::Parse() {
|
||||
{
|
||||
case CH_SPILED:
|
||||
driver = new out_SPILed (this);
|
||||
debugSerial<<F("SPILED driver created")<<endl;
|
||||
|
||||
break;
|
||||
}
|
||||
// debugSerial << F(" Item:") << itemArr->name << F(" T:") << itemType << F(" =") << getArg() << endl;
|
||||
}
|
||||
}
|
||||
|
||||
boolean Item::Setup()
|
||||
{
|
||||
|
||||
if (driver)
|
||||
{
|
||||
if (driver->Status()) driver->Stop();
|
||||
driver->Setup();
|
||||
return true;
|
||||
}
|
||||
else return false;
|
||||
}
|
||||
|
||||
Item::~Item()
|
||||
{
|
||||
if (driver) delete driver;
|
||||
if (driver)
|
||||
{
|
||||
delete driver;
|
||||
debugSerial<<F("Driver destroyed")<<endl;
|
||||
}
|
||||
}
|
||||
|
||||
Item::Item(char *name) //Constructor
|
||||
@@ -359,7 +377,7 @@ int Item::Ctrl(short cmd, short n, int *Parameters, boolean send, int suffixCode
|
||||
}
|
||||
debugSerial<<endl;
|
||||
|
||||
if (driver) return driver->Ctrl(cmd, n, Parameters, send, suffixCode, subItem);
|
||||
if (driver) return driver->Ctrl(cmd, n, Parameters, send, suffixCode, subItem);
|
||||
|
||||
int iaddr = getArg();
|
||||
HSVstore st;
|
||||
@@ -1222,6 +1240,13 @@ int Item::checkModbusDimmer(int data) {
|
||||
}
|
||||
|
||||
int Item::Poll() {
|
||||
|
||||
if (driver && driver->Status())
|
||||
{
|
||||
driver->Poll();
|
||||
return INTERVAL_POLLING; //TODO refactoring
|
||||
}
|
||||
// Legacy polling
|
||||
switch (itemType) {
|
||||
case CH_MODBUS:
|
||||
checkModbusDimmer();
|
||||
|
||||
@@ -129,6 +129,7 @@ class Item
|
||||
~Item();
|
||||
|
||||
boolean isValid ();
|
||||
boolean Setup();
|
||||
virtual int Ctrl(short cmd, short n=0, int * Parameters=NULL, boolean send=true, int suffixCode=0, char* subItem=NULL);
|
||||
virtual int Ctrl(char * payload, boolean send=true, char * subItem=NULL);
|
||||
|
||||
|
||||
@@ -907,7 +907,8 @@ void applyConfig() {
|
||||
while (items && item)
|
||||
if (item->type == aJson_Array && aJson.getArraySize(item)>1) {
|
||||
Item it(item);
|
||||
if (it.isValid()) {
|
||||
if (it.isValid() && !it.Setup()) {
|
||||
//Legacy Setup
|
||||
short inverse = 0;
|
||||
int pin=it.getArg();
|
||||
if (pin<0) {pin=-pin; inverse = 1;}
|
||||
@@ -1162,7 +1163,7 @@ void saveFlash(short n, char *str) {
|
||||
if (len>MAXFLASHSTR-1) len=MAXFLASHSTR-1;
|
||||
for(int i=0;i<len;i++) EEPROM.write(n+i,str[i]);
|
||||
EEPROM.write(n+len,0);
|
||||
|
||||
|
||||
#if defined(ARDUINO_ARCH_ESP8266)
|
||||
// write the data to EEPROM
|
||||
short res = EEPROM.commitReset();
|
||||
|
||||
@@ -7,16 +7,33 @@
|
||||
#include "FastLED.h"
|
||||
|
||||
#define NUM_LEDS 60
|
||||
#define DATA_PIN 11
|
||||
#define DATA_PIN 4
|
||||
|
||||
CRGB leds[NUM_LEDS];
|
||||
static int driverStatus = CST_UNKNOWN;
|
||||
|
||||
int out_SPILed::Setup()
|
||||
{
|
||||
Serial.println("SPI-LED Init");
|
||||
FastLED.addLeds<TM1809, DATA_PIN, BRG>(leds, NUM_LEDS);
|
||||
driverStatus = CST_INITIALIZED;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int out_SPILed::Stop()
|
||||
{
|
||||
Serial.println("SPI-LED De-Init");
|
||||
FastLED.addLeds<TM1809, DATA_PIN, BRG>(leds, NUM_LEDS);
|
||||
driverStatus = CST_UNKNOWN;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int out_SPILed::Status()
|
||||
{
|
||||
return driverStatus;
|
||||
}
|
||||
|
||||
|
||||
int out_SPILed::Poll()
|
||||
{
|
||||
FastLED.show();
|
||||
@@ -32,7 +49,7 @@ if (subItem)
|
||||
from=atoi(subItem);
|
||||
to=from;
|
||||
}
|
||||
|
||||
debugSerial<<from<<F("-")<<to<<F(" cmd=")<<cmd<<endl;
|
||||
for (n=from;n<=to;n++)
|
||||
{
|
||||
|
||||
|
||||
@@ -9,7 +9,9 @@ public:
|
||||
out_SPILed(Item * _item):abstractOut(_item){};
|
||||
int Setup() override;
|
||||
int Poll() override;
|
||||
virtual int Ctrl(short cmd, short n=0, int * Parameters=NULL, boolean send=true, int suffixCode=0, char* subItem=NULL) override;
|
||||
int Stop() override;
|
||||
int Status() override;
|
||||
int Ctrl(short cmd, short n=0, int * Parameters=NULL, boolean send=true, int suffixCode=0, char* subItem=NULL) override;
|
||||
|
||||
protected:
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user