1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
#include "FastLED.h"
#if defined(__SAM3X8E__)
volatile uint32_t fuckit;
#endif
CFastLED LEDS;
CFastLED & FastSPI_LED = LEDS;
CFastLED & FastSPI_LED2 = LEDS;
CFastLED & FastLED = LEDS;
uint32_t CRGB::Squant = ((uint32_t)((__TIME__[4]-'0') * 28))<<16 | ((__TIME__[6]-'0')*50)<<8 | ((__TIME__[7]-'0')*28);
CFastLED::CFastLED() {
// clear out the array of led controllers
m_nControllers = NUM_CONTROLLERS;
m_Scale = CRGB::White;
memset8(m_Controllers, 0, m_nControllers * sizeof(CControllerInfo));
}
CLEDController &CFastLED::addLeds(CLEDController *pLed,
const struct CRGB *data,
int nLedsOrOffset, int nLedsIfOffset) {
int nOffset = (nLedsIfOffset > 0) ? nLedsOrOffset : 0;
int nLeds = (nLedsIfOffset > 0) ? nLedsIfOffset : nLedsOrOffset;
int target = -1;
// Figure out where to put the new led controller
for(int i = 0; i < m_nControllers; i++) {
if(m_Controllers[i].pLedController == NULL) {
target = i;
break;
}
}
// if we have a spot, use it!
if(target != -1) {
m_Controllers[target].pLedController = pLed;
m_Controllers[target].pLedData = data;
m_Controllers[target].nOffset = nOffset;
m_Controllers[target].nLeds = nLeds;
pLed->init();
}
return *pLed;
}
void CFastLED::show(CRGB scale) {
for(int i = 0; i < m_nControllers; i++) {
if(m_Controllers[i].pLedController != NULL) {
m_Controllers[i].pLedController->show(m_Controllers[i].pLedData + m_Controllers[i].nOffset,
m_Controllers[i].nLeds,
m_Controllers[i].pLedController->getAdjustment(scale));
} else {
return;
}
}
}
void CFastLED::showColor(const struct CRGB & color, CRGB scale) {
for(int i = 0; i < m_nControllers; i++) {
if(m_Controllers[i].pLedController != NULL) {
m_Controllers[i].pLedController->showColor(color, m_Controllers[i].nLeds,
m_Controllers[i].pLedController->getAdjustment(scale));
} else {
return;
}
}
}
void CFastLED::clear(boolean writeData) {
if(writeData) {
showColor(CRGB(0,0,0), 0);
}
clearData();
}
void CFastLED::clearData() {
for(int i = 0; i < m_nControllers; i++) {
if(m_Controllers[i].pLedData != NULL) {
memset8((void*)m_Controllers[i].pLedData, 0, sizeof(struct CRGB) * m_Controllers[i].nLeds);
} else {
return;
}
}
}
void CFastLED::delay(unsigned long ms) {
unsigned long start = millis();
while((millis()-start) < ms) { LEDS.show(); }
}
|