mirror of
https://github.com/thooge/esp32-nmea2000-obp60.git
synced 2025-12-15 15:03:07 +01:00
Delete FastLED and implement DMA to SPI for all RGB leds
This commit is contained in:
96
lib/obp60task/LedSpiTask.h
Normal file
96
lib/obp60task/LedSpiTask.h
Normal file
@@ -0,0 +1,96 @@
|
||||
#ifndef _GWSPILEDS_H
|
||||
#define _GWSPILEDS_H
|
||||
#include "GwSynchronized.h"
|
||||
#include "GwApi.h"
|
||||
#include "OBP60Hardware.h"
|
||||
|
||||
|
||||
class Color{
|
||||
public:
|
||||
uint8_t r;
|
||||
uint8_t g;
|
||||
uint8_t b;
|
||||
Color():r(0),g(0),b(0){}
|
||||
Color(uint8_t cr, uint8_t cg,uint8_t cb):
|
||||
b(cb),g(cg),r(cr){}
|
||||
Color(const Color &o):b(o.b),g(o.g),r(o.r){}
|
||||
bool equal(const Color &o) const{
|
||||
return o.r == r && o.g == g && o.b == b;
|
||||
}
|
||||
bool operator == (const Color &other) const{
|
||||
return equal(other);
|
||||
}
|
||||
bool operator != (const Color &other) const{
|
||||
return ! equal(other);
|
||||
}
|
||||
};
|
||||
|
||||
static Color COLOR_GREEN=Color(0,255,0);
|
||||
static Color COLOR_RED=Color(255,0,0);
|
||||
static Color COLOR_BLUE=Color(0,0,255);
|
||||
static Color COLOR_WHITE=Color(255,255,255);
|
||||
static Color COLOR_BLACK=Color(0,0,0);
|
||||
|
||||
Color setBrightness(const Color &color,uint8_t brightness);
|
||||
|
||||
|
||||
class LedInterface {
|
||||
private:
|
||||
bool equals(const Color *v1, const Color *v2, int num) const{
|
||||
for (int i=0;i<num;i++){
|
||||
if (!v1->equal(*v2)) return false;
|
||||
v1++;
|
||||
v2++;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
void set(Color *v,int len, const Color &c){
|
||||
for (int i=0;i<len;i++){
|
||||
*v=c;
|
||||
v++;
|
||||
}
|
||||
}
|
||||
public:
|
||||
Color flash[NUM_FLASH_LED];
|
||||
Color backlight[NUM_BACKLIGHT_LED];
|
||||
int flashLen() const {return NUM_FLASH_LED;}
|
||||
int backlightLen() const {return NUM_BACKLIGHT_LED;}
|
||||
bool flasChanged(const LedInterface &other){
|
||||
return ! equals(flash,other.flash,flashLen());
|
||||
}
|
||||
bool backlightChanged(const LedInterface &other){
|
||||
return ! equals(backlight,other.backlight,backlightLen());
|
||||
}
|
||||
void setFlash(const Color &c){
|
||||
set(flash,flashLen(),c);
|
||||
}
|
||||
void setBacklight(const Color &c){
|
||||
set(backlight,backlightLen(),c);
|
||||
}
|
||||
};
|
||||
class LedTaskData{
|
||||
private:
|
||||
SemaphoreHandle_t locker;
|
||||
LedInterface leds;
|
||||
long updateCount=0;
|
||||
public:
|
||||
GwApi *api=NULL;
|
||||
LedTaskData(GwApi *api){
|
||||
locker=xSemaphoreCreateMutex();
|
||||
this->api=api;
|
||||
}
|
||||
void setLedData(const LedInterface &values){
|
||||
GWSYNCHRONIZED(&locker);
|
||||
leds=values;
|
||||
}
|
||||
LedInterface getLedData(){
|
||||
GWSYNCHRONIZED(&locker);
|
||||
return leds;
|
||||
}
|
||||
};
|
||||
|
||||
//task function
|
||||
void createSpiLedTask(LedTaskData *param);
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user