Corsair Lighting Protocol  0.15.0
Control LEDs connected to an Arduino with iCUE
FastLEDController.h
1 /*
2  Copyright 2019 Leon Kiefer
3 
4  Licensed under the Apache License, Version 2.0 (the "License");
5  you may not use this file except in compliance with the License.
6  You may obtain a copy of the License at
7 
8  http://www.apache.org/licenses/LICENSE-2.0
9 
10  Unless required by applicable law or agreed to in writing, software
11  distributed under the License is distributed on an "AS IS" BASIS,
12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  See the License for the specific language governing permissions and
14  limitations under the License.
15 */
16 #pragma once
17 
18 #include <FastLED.h>
19 
20 #include "Arduino.h"
21 #include "FastLEDControllerStorage.h"
22 #include "LEDController.h"
23 #include "TemperatureController.h"
24 
25 #ifndef LED_CONTROLLER_TIMEOUT
26 #define LED_CONTROLLER_TIMEOUT 30000
27 #endif
28 
41  struct ChannelData {
42  uint8_t ledCount = 0;
43  CRGB* leds = nullptr;
47  uint8_t* valuesBuffer[3] = {nullptr};
51  uint16_t temp;
52  void (*onUpdateCallback)(void) = nullptr;
53  };
54 
55 public:
72  FastLEDController(TemperatureController* temperatureController, FastLEDControllerStorage* storage);
82  virtual void addLEDs(uint8_t channel, CRGB* leds, uint8_t length);
90  CRGB* getLEDs(uint8_t channel);
98  uint8_t getLEDCount(uint8_t channel);
105  virtual bool updateLEDs();
113  void onUpdateHook(uint8_t channel, void (*callback)(void));
114 
115 protected:
116  TemperatureController* const temperatureController;
117  FastLEDControllerStorage* const storage;
118 
119  bool trigger_update = false;
120 
121  ChannelData channelData[CHANNEL_NUM];
122 
123  unsigned long lastUpdate = 0;
124  unsigned long currentUpdate = 0;
125 
126  int applySpeed(int duration, const GroupSpeed speed);
134  int animation_step(int duration, int steps);
142  int animation_step_count(int duration, int steps);
143 
149  CRGB randomColor();
150 
151  bool renderRainbowWave(ChannelData& channelData, LEDGroup& group, int groupLedCount);
152  bool renderColorShift(ChannelData& channelData, LEDGroup& group, int groupLedCount);
153  bool renderColorPulse(ChannelData& channelData, LEDGroup& group, int groupLedCount);
154  bool renderColorWave(ChannelData& channelData, LEDGroup& group, int groupLedCount);
155  bool renderStatic(ChannelData& channelData, LEDGroup& group, int groupLedCount);
156  bool renderTemperature(ChannelData& channelData, LEDGroup& group, int groupLedCount);
157  bool renderVisor(ChannelData& channelData, LEDGroup& group, int groupLedCount);
158  bool renderMarquee(ChannelData& channelData, LEDGroup& group, int groupLedCount);
159  bool renderBlink(ChannelData& channelData, LEDGroup& group, int groupLedCount);
160  bool renderSequential(ChannelData& channelData, LEDGroup& group, int groupLedCount);
161  bool renderRainbow(ChannelData& channelData, LEDGroup& group, int groupLedCount);
162 
163  bool load() override;
164  bool save() override;
165 
166  virtual void triggerLEDUpdate() override;
167  virtual void setLEDExternalTemperature(uint8_t channel, uint16_t temp) override;
168  virtual void setLEDColorValues(uint8_t channel, uint8_t color, uint8_t offset, const uint8_t* values,
169  size_t len) override;
170  virtual void clearLEDColorValues(uint8_t channel) override;
171  virtual uint8_t getLEDAutodetectionResult(uint8_t channel) override;
175  virtual void timeoutAction();
176 };
GroupSpeed
Definition: LEDController.h:84
Definition: FastLEDControllerStorage.h:20
Definition: FastLEDController.h:37
virtual uint8_t getLEDAutodetectionResult(uint8_t channel) override
Definition: FastLEDController.cpp:515
virtual void addLEDs(uint8_t channel, CRGB *leds, uint8_t length)
Definition: FastLEDController.cpp:36
virtual void timeoutAction()
Definition: FastLEDController.cpp:517
FastLEDController(FastLEDControllerStorage *storage)
Definition: FastLEDController.cpp:18
virtual bool updateLEDs()
Definition: FastLEDController.cpp:351
uint8_t getLEDCount(uint8_t channel)
Definition: FastLEDController.cpp:54
virtual void setLEDColorValues(uint8_t channel, uint8_t color, uint8_t offset, const uint8_t *values, size_t len) override
Definition: FastLEDController.cpp:501
virtual void setLEDExternalTemperature(uint8_t channel, uint16_t temp) override
Definition: FastLEDController.cpp:499
int animation_step_count(int duration, int steps)
Definition: FastLEDController.cpp:79
CRGB * getLEDs(uint8_t channel)
Definition: FastLEDController.cpp:47
CRGB randomColor()
Definition: FastLEDController.cpp:88
virtual void triggerLEDUpdate() override
Definition: FastLEDController.cpp:497
int animation_step(int duration, int steps)
Definition: FastLEDController.cpp:74
virtual void clearLEDColorValues(uint8_t channel) override
Definition: FastLEDController.cpp:509
void onUpdateHook(uint8_t channel, void(*callback)(void))
Definition: FastLEDController.cpp:465
Definition: LEDController.h:161
Definition: TemperatureController.h:38
Definition: LEDController.h:114