Circular include problem

This commit is contained in:
cschwinne
2021-01-15 15:43:11 +01:00
parent 25b77db4cd
commit ef904e01ec
5 changed files with 220 additions and 562 deletions

View File

@@ -5,58 +5,10 @@
* Class for addressing various light types
*/
#include "const.h"
#include "wled.h"
#include "bus_wrapper.h"
class BusManager {
public:
BusManager() {
};
int add(uint8_t busType, uint8_t* pins, uint16_t len = 1) {
if (numBusses >= WLED_MAX_BUSSES) return -1;
if (IS_DIGITAL(busType)) {
busses[numBusses] = new BusDigital(busType, pins, len, numBusses);
} else {
busses[numBusses] = new BusPwm(busType, pins);
}
numBusses++;
return numBusses -1;
}
void removeAll() {
for (uint8_t i = 0; i < numBusses; i++) delete busses[i];
numBusses = 0;
}
//void remove(uint8_t id);
void show() {
for (uint8_t i = 0; i < numBusses; i++) {
busses[i]->show();
}
}
void setPixelColor(uint16_t pix, uint32_t c) {
for (uint8_t i = 0; i < numBusses; i++) {
Bus* b = busses[i];
uint16_t bstart = b->getStart();
if (pix < bstart) continue;
busses[i]->setPixelColor(pix - bstart, c);
}
}
void setBrightness(uint8_t b) {
for (uint8_t i = 0; i < numBusses; i++) {
busses[i]->setBrightness(b);
}
}
private:
uint8_t numBusses = 0;
Bus* busses[WLED_MAX_BUSSES];
};
//parent class of BusDigital and BusPwm
class Bus {
public:
@@ -65,6 +17,7 @@ class Bus {
};
virtual void show() {}
virtual bool canShow() { return true; }
virtual void setPixelColor(uint16_t pix, uint32_t c) {};
@@ -88,6 +41,10 @@ class Bus {
return COL_ORDER_RGB;
}
virtual uint16_t getLength() {
return 1;
}
virtual void setColorOrder() {}
uint8_t getType() {
@@ -122,14 +79,27 @@ class BusDigital : public Bus {
PolyBus::show(_busPtr, _iType);
}
void setPixelColor(uint16_t pix, uint32_t c) {
bool canShow() {
return PolyBus::canShow(_busPtr, _iType);
}
void setPixelColor(uint16_t pix, uint32_t c) {
//TODO color order
}
uint32_t getPixelColor(uint16_t pix) {
//TODO
return 0;
}
uint8_t getColorOrder() {
return _colorOrder;
}
uint16_t getLength() {
return _len;
}
void setColorOrder(uint8_t colorOrder) {
if (colorOrder > 5) return;
_colorOrder = colorOrder;
@@ -242,4 +212,69 @@ class BusPwm : public Bus {
}
};
class BusManager {
public:
BusManager() {
};
int add(uint8_t busType, uint8_t* pins, uint16_t len = 1) {
if (numBusses >= WLED_MAX_BUSSES) return -1;
if (IS_DIGITAL(busType)) {
busses[numBusses] = new BusDigital(busType, pins, len, numBusses);
} else {
busses[numBusses] = new BusPwm(busType, pins);
}
numBusses++;
return numBusses -1;
}
void removeAll() {
for (uint8_t i = 0; i < numBusses; i++) delete busses[i];
numBusses = 0;
}
//void remove(uint8_t id);
void show() {
for (uint8_t i = 0; i < numBusses; i++) {
busses[i]->show();
}
}
void setPixelColor(uint16_t pix, uint32_t c) {
for (uint8_t i = 0; i < numBusses; i++) {
Bus* b = busses[i];
uint16_t bstart = b->getStart();
if (pix < bstart) continue;
busses[i]->setPixelColor(pix - bstart, c);
}
}
void setBrightness(uint8_t b) {
for (uint8_t i = 0; i < numBusses; i++) {
busses[i]->setBrightness(b);
}
}
uint32_t getPixelColor(uint16_t pix) {
for (uint8_t i = 0; i < numBusses; i++) {
Bus* b = busses[i];
uint16_t bstart = b->getStart();
if (pix < bstart || pix >= bstart + b->getLength()) continue;
return b->getPixelColor(pix - bstart);
}
return 0;
}
bool canAllShow() {
for (uint8_t i = 0; i < numBusses; i++) {
if (busses[i]->canShow()) return false;
}
return true;
}
private:
uint8_t numBusses = 0;
Bus* busses[WLED_MAX_BUSSES];
};
#endif