hyperion.ng/libsrc/leddevice/LedDeviceAdalightApa102.h
tociek 7551a06cf4 Corrected APA102 USB (adalight) led device
I have removed the 'hack' that allowed to use APA102 with original
version of adalight. I have modified adalight code and placed it into
dependencies folder. This change is not backward compatible, so it won't
work with original adalight code.
The reason for the change is that last leds were not acting as they
should (last led red). Additionally with this change and new arduino
code, performance is  lot better and lights change much smoother.
I have also changed switchOff method that requires different data sent
to apa102 to turn all leds off.

Enjoy :)
Jacek


Former-commit-id: 624fe6c429aee896b150d23289f0be19e040474d
2015-11-12 00:22:11 +01:00

51 lines
1.3 KiB
C++

#pragma once
// STL includes
#include <string>
// Qt includes
#include <QTimer>
// hyperion incluse
#include "LedDeviceAdalight.h"
///
/// Implementation of the LedDevice interface for writing to an Adalight led device for APA102.
///
class LedDeviceAdalightApa102 : public LedDeviceAdalight
{
Q_OBJECT
public:
///
/// Constructs the LedDevice for attached Adalight device
///
/// @param outputDevice The name of the output device (eg '/dev/ttyS0')
/// @param baudrate The used baudrate for writing to the output device
///
LedDeviceAdalightApa102(const std::string& outputDevice, const unsigned baudrate, int delayAfterConnect_ms);
///
/// Writes the led color values to the led-device
///
/// @param ledValues The color-value per led
/// @return Zero on succes else negative
///
virtual int write(const std::vector<ColorRgb> & ledValues);
virtual int switchOff();
private slots:
/// Write the last data to the leds again
void rewriteLeds();
private:
/// The buffer containing the packed RGB values
std::vector<uint8_t> _ledBuffer;
unsigned int ledCount;
/// Timer object which makes sure that led data is written at a minimum rate
/// The Adalight device will switch off when it does not receive data at least
/// every 15 seconds
QTimer _timer;
};