hyperion.ng/libsrc/leddevice/dev_spi/LedDeviceSk6822SPI.h

44 lines
1004 B
C
Raw Normal View History

[untested] added Sk6822 led device support (#397) * Adding support for sk6822 timing This isnt complete, but should be a good starting point for others to learn from. 1) Here is where the led device source is located: cd libsrc/leddevice 2) Find the files that need changing: root@loungepi:libsrc/leddevice# grep -ri 2812spi * CMakeLists.txt: ${CURRENT_SOURCE_DIR}/LedDeviceWs2812SPI.h CMakeLists.txt: ${CURRENT_SOURCE_DIR}/LedDeviceWs2812SPI.cpp LedDeviceFactory.cpp: #include "LedDeviceWs2812SPI.h" LedDeviceFactory.cpp: REGISTER(Ws2812SPI); LedDeviceSchemas.qrc: <file alias="schema-ws2812spi">schemas/schema-ws2812spi.json</file> LedDeviceWs2812SPI.cpp:#include "LedDeviceWs2812SPI.h" LedDeviceWs2812SPI.cpp:LedDeviceWs2812SPI::LedDeviceWs2812SPI(const QJsonObject &deviceConfig) LedDeviceWs2812SPI.cpp:LedDevice* LedDeviceWs2812SPI::construct(const QJsonObject &deviceConfig) LedDeviceWs2812SPI.cpp: return new LedDeviceWs2812SPI(deviceConfig); LedDeviceWs2812SPI.cpp:bool LedDeviceWs2812SPI::init(const QJsonObject &deviceConfig) LedDeviceWs2812SPI.cpp:int LedDeviceWs2812SPI::write(const std::vector<ColorRgb> &ledValues) LedDeviceWs2812SPI.h:class LedDeviceWs2812SPI : public ProviderSpi LedDeviceWs2812SPI.h: LedDeviceWs2812SPI(const QJsonObject &deviceConfig); 3) Copy the existing files as a starting point: cp LedDeviceWs2812SPI.cpp LedDeviceSk6822SPI.cpp cp LedDeviceWs2812SPI.h LedDeviceSk6822SPI.h cp schemas/schema-ws2812spi.json schemas/schema-sk6822spi.json 4) Do some search and replacing: :%s/Ws2812SPI/Sk6822SPI/g 5) edit the other files (see the diffs in this commit) * Added wait time and reset time * Fixed up debugging output and commented it out.
2017-02-14 09:33:28 +01:00
#pragma once
Disentangle LedDevice/LinearColorSmoothing, Bug Fixes & Test support (#654) * Handle Exceptions in main & Pythoninit * Have SSDPDiscover generic again * Have SSDPDiscover generic again * Change Info- to Debug logs as technical service messages * Nanoleaf - When switched on, ensure UDP mode * Include SQL Database in Cross-Compile instructions * Fix Clazy (QT code checker) and clang Warnings * Stop LedDevice:write for disabled device * Nanoleaf: Fix uint printfs * NanoLeaf: Fix indents to tabs * NanoLeaf - Add debug verbosity switches * Device switchability support, FileDevice with timestamp support * Nanoleaf Light Panels now support External Control V2 * Enhance LedDeviceFile by Timestamp + fix readyness * Stop color stream, if LedDevice disabled * Nanoleaf - remove switchability * Fix MultiColorAdjustment, if led-range is greater lednum * Fix logging * LedFileDevice/LedDevice - add testing support * New "Led Test" effect * LedDeviceFile - Add chrono include + Allow Led rewrites for testing * Stabilize Effects for LedDevices where latchtime = 0 * Update LedDeviceFile, allow latchtime = 0 * Distangle LinearColorSmoothing and LEDDevice, Fix Effect configuration updates * Updates LedDeviceFile - Initialize via Open * Updates LedDeviceNanoleaf - Initialize via Open, Remove throwing exceptions * Updates ProviderUDP - Remove throwing exceptions * Framebuffer - Use precise timer * TestSpi - Align to LedDevice updates * Pretty Print CrossCompileHowTo as markdown-file * Ensure that output is only written when LedDevice is ready * Align APA102 Device to new device staging * Logger - Remove clang warnings on extra semicolon * Devices SPI - Align to Device stages and methods * Fix cppcheck and clang findings * Add Code-Template for new Devices * Align devices to stages and methods, clean-up some code * Allow to reopen LedDevice without restart * Revert change "Remove Connect (PriorityMuxer::visiblePriorityChanged -> Hyperion::update) due to double writes" * Remove visiblePriorityChanged from LedDevice to decouple LedDevice from hyperion logic * Expose LedDevice getLedCount and align signedness
2020-02-10 15:21:58 +01:00
// hyperion includes
[untested] added Sk6822 led device support (#397) * Adding support for sk6822 timing This isnt complete, but should be a good starting point for others to learn from. 1) Here is where the led device source is located: cd libsrc/leddevice 2) Find the files that need changing: root@loungepi:libsrc/leddevice# grep -ri 2812spi * CMakeLists.txt: ${CURRENT_SOURCE_DIR}/LedDeviceWs2812SPI.h CMakeLists.txt: ${CURRENT_SOURCE_DIR}/LedDeviceWs2812SPI.cpp LedDeviceFactory.cpp: #include "LedDeviceWs2812SPI.h" LedDeviceFactory.cpp: REGISTER(Ws2812SPI); LedDeviceSchemas.qrc: <file alias="schema-ws2812spi">schemas/schema-ws2812spi.json</file> LedDeviceWs2812SPI.cpp:#include "LedDeviceWs2812SPI.h" LedDeviceWs2812SPI.cpp:LedDeviceWs2812SPI::LedDeviceWs2812SPI(const QJsonObject &deviceConfig) LedDeviceWs2812SPI.cpp:LedDevice* LedDeviceWs2812SPI::construct(const QJsonObject &deviceConfig) LedDeviceWs2812SPI.cpp: return new LedDeviceWs2812SPI(deviceConfig); LedDeviceWs2812SPI.cpp:bool LedDeviceWs2812SPI::init(const QJsonObject &deviceConfig) LedDeviceWs2812SPI.cpp:int LedDeviceWs2812SPI::write(const std::vector<ColorRgb> &ledValues) LedDeviceWs2812SPI.h:class LedDeviceWs2812SPI : public ProviderSpi LedDeviceWs2812SPI.h: LedDeviceWs2812SPI(const QJsonObject &deviceConfig); 3) Copy the existing files as a starting point: cp LedDeviceWs2812SPI.cpp LedDeviceSk6822SPI.cpp cp LedDeviceWs2812SPI.h LedDeviceSk6822SPI.h cp schemas/schema-ws2812spi.json schemas/schema-sk6822spi.json 4) Do some search and replacing: :%s/Ws2812SPI/Sk6822SPI/g 5) edit the other files (see the diffs in this commit) * Added wait time and reset time * Fixed up debugging output and commented it out.
2017-02-14 09:33:28 +01:00
#include "ProviderSpi.h"
///
/// Implementation of the LedDevice interface for writing to Ws2812 led device via spi.
///
class LedDeviceSk6822SPI : public ProviderSpi
{
public:
///
/// Constructs specific LedDevice
///
/// @param deviceConfig json device config
///
Disentangle LedDevice/LinearColorSmoothing, Bug Fixes & Test support (#654) * Handle Exceptions in main & Pythoninit * Have SSDPDiscover generic again * Have SSDPDiscover generic again * Change Info- to Debug logs as technical service messages * Nanoleaf - When switched on, ensure UDP mode * Include SQL Database in Cross-Compile instructions * Fix Clazy (QT code checker) and clang Warnings * Stop LedDevice:write for disabled device * Nanoleaf: Fix uint printfs * NanoLeaf: Fix indents to tabs * NanoLeaf - Add debug verbosity switches * Device switchability support, FileDevice with timestamp support * Nanoleaf Light Panels now support External Control V2 * Enhance LedDeviceFile by Timestamp + fix readyness * Stop color stream, if LedDevice disabled * Nanoleaf - remove switchability * Fix MultiColorAdjustment, if led-range is greater lednum * Fix logging * LedFileDevice/LedDevice - add testing support * New "Led Test" effect * LedDeviceFile - Add chrono include + Allow Led rewrites for testing * Stabilize Effects for LedDevices where latchtime = 0 * Update LedDeviceFile, allow latchtime = 0 * Distangle LinearColorSmoothing and LEDDevice, Fix Effect configuration updates * Updates LedDeviceFile - Initialize via Open * Updates LedDeviceNanoleaf - Initialize via Open, Remove throwing exceptions * Updates ProviderUDP - Remove throwing exceptions * Framebuffer - Use precise timer * TestSpi - Align to LedDevice updates * Pretty Print CrossCompileHowTo as markdown-file * Ensure that output is only written when LedDevice is ready * Align APA102 Device to new device staging * Logger - Remove clang warnings on extra semicolon * Devices SPI - Align to Device stages and methods * Fix cppcheck and clang findings * Add Code-Template for new Devices * Align devices to stages and methods, clean-up some code * Allow to reopen LedDevice without restart * Revert change "Remove Connect (PriorityMuxer::visiblePriorityChanged -> Hyperion::update) due to double writes" * Remove visiblePriorityChanged from LedDevice to decouple LedDevice from hyperion logic * Expose LedDevice getLedCount and align signedness
2020-02-10 15:21:58 +01:00
explicit LedDeviceSk6822SPI(const QJsonObject &deviceConfig);
[untested] added Sk6822 led device support (#397) * Adding support for sk6822 timing This isnt complete, but should be a good starting point for others to learn from. 1) Here is where the led device source is located: cd libsrc/leddevice 2) Find the files that need changing: root@loungepi:libsrc/leddevice# grep -ri 2812spi * CMakeLists.txt: ${CURRENT_SOURCE_DIR}/LedDeviceWs2812SPI.h CMakeLists.txt: ${CURRENT_SOURCE_DIR}/LedDeviceWs2812SPI.cpp LedDeviceFactory.cpp: #include "LedDeviceWs2812SPI.h" LedDeviceFactory.cpp: REGISTER(Ws2812SPI); LedDeviceSchemas.qrc: <file alias="schema-ws2812spi">schemas/schema-ws2812spi.json</file> LedDeviceWs2812SPI.cpp:#include "LedDeviceWs2812SPI.h" LedDeviceWs2812SPI.cpp:LedDeviceWs2812SPI::LedDeviceWs2812SPI(const QJsonObject &deviceConfig) LedDeviceWs2812SPI.cpp:LedDevice* LedDeviceWs2812SPI::construct(const QJsonObject &deviceConfig) LedDeviceWs2812SPI.cpp: return new LedDeviceWs2812SPI(deviceConfig); LedDeviceWs2812SPI.cpp:bool LedDeviceWs2812SPI::init(const QJsonObject &deviceConfig) LedDeviceWs2812SPI.cpp:int LedDeviceWs2812SPI::write(const std::vector<ColorRgb> &ledValues) LedDeviceWs2812SPI.h:class LedDeviceWs2812SPI : public ProviderSpi LedDeviceWs2812SPI.h: LedDeviceWs2812SPI(const QJsonObject &deviceConfig); 3) Copy the existing files as a starting point: cp LedDeviceWs2812SPI.cpp LedDeviceSk6822SPI.cpp cp LedDeviceWs2812SPI.h LedDeviceSk6822SPI.h cp schemas/schema-ws2812spi.json schemas/schema-sk6822spi.json 4) Do some search and replacing: :%s/Ws2812SPI/Sk6822SPI/g 5) edit the other files (see the diffs in this commit) * Added wait time and reset time * Fixed up debugging output and commented it out.
2017-02-14 09:33:28 +01:00
/// constructs leddevice
static LedDevice* construct(const QJsonObject &deviceConfig);
///
/// Sets configuration
///
/// @param deviceConfig the json device config
/// @return true if success
Disentangle LedDevice/LinearColorSmoothing, Bug Fixes & Test support (#654) * Handle Exceptions in main & Pythoninit * Have SSDPDiscover generic again * Have SSDPDiscover generic again * Change Info- to Debug logs as technical service messages * Nanoleaf - When switched on, ensure UDP mode * Include SQL Database in Cross-Compile instructions * Fix Clazy (QT code checker) and clang Warnings * Stop LedDevice:write for disabled device * Nanoleaf: Fix uint printfs * NanoLeaf: Fix indents to tabs * NanoLeaf - Add debug verbosity switches * Device switchability support, FileDevice with timestamp support * Nanoleaf Light Panels now support External Control V2 * Enhance LedDeviceFile by Timestamp + fix readyness * Stop color stream, if LedDevice disabled * Nanoleaf - remove switchability * Fix MultiColorAdjustment, if led-range is greater lednum * Fix logging * LedFileDevice/LedDevice - add testing support * New "Led Test" effect * LedDeviceFile - Add chrono include + Allow Led rewrites for testing * Stabilize Effects for LedDevices where latchtime = 0 * Update LedDeviceFile, allow latchtime = 0 * Distangle LinearColorSmoothing and LEDDevice, Fix Effect configuration updates * Updates LedDeviceFile - Initialize via Open * Updates LedDeviceNanoleaf - Initialize via Open, Remove throwing exceptions * Updates ProviderUDP - Remove throwing exceptions * Framebuffer - Use precise timer * TestSpi - Align to LedDevice updates * Pretty Print CrossCompileHowTo as markdown-file * Ensure that output is only written when LedDevice is ready * Align APA102 Device to new device staging * Logger - Remove clang warnings on extra semicolon * Devices SPI - Align to Device stages and methods * Fix cppcheck and clang findings * Add Code-Template for new Devices * Align devices to stages and methods, clean-up some code * Allow to reopen LedDevice without restart * Revert change "Remove Connect (PriorityMuxer::visiblePriorityChanged -> Hyperion::update) due to double writes" * Remove visiblePriorityChanged from LedDevice to decouple LedDevice from hyperion logic * Expose LedDevice getLedCount and align signedness
2020-02-10 15:21:58 +01:00
virtual bool init(const QJsonObject &deviceConfig) override;
[untested] added Sk6822 led device support (#397) * Adding support for sk6822 timing This isnt complete, but should be a good starting point for others to learn from. 1) Here is where the led device source is located: cd libsrc/leddevice 2) Find the files that need changing: root@loungepi:libsrc/leddevice# grep -ri 2812spi * CMakeLists.txt: ${CURRENT_SOURCE_DIR}/LedDeviceWs2812SPI.h CMakeLists.txt: ${CURRENT_SOURCE_DIR}/LedDeviceWs2812SPI.cpp LedDeviceFactory.cpp: #include "LedDeviceWs2812SPI.h" LedDeviceFactory.cpp: REGISTER(Ws2812SPI); LedDeviceSchemas.qrc: <file alias="schema-ws2812spi">schemas/schema-ws2812spi.json</file> LedDeviceWs2812SPI.cpp:#include "LedDeviceWs2812SPI.h" LedDeviceWs2812SPI.cpp:LedDeviceWs2812SPI::LedDeviceWs2812SPI(const QJsonObject &deviceConfig) LedDeviceWs2812SPI.cpp:LedDevice* LedDeviceWs2812SPI::construct(const QJsonObject &deviceConfig) LedDeviceWs2812SPI.cpp: return new LedDeviceWs2812SPI(deviceConfig); LedDeviceWs2812SPI.cpp:bool LedDeviceWs2812SPI::init(const QJsonObject &deviceConfig) LedDeviceWs2812SPI.cpp:int LedDeviceWs2812SPI::write(const std::vector<ColorRgb> &ledValues) LedDeviceWs2812SPI.h:class LedDeviceWs2812SPI : public ProviderSpi LedDeviceWs2812SPI.h: LedDeviceWs2812SPI(const QJsonObject &deviceConfig); 3) Copy the existing files as a starting point: cp LedDeviceWs2812SPI.cpp LedDeviceSk6822SPI.cpp cp LedDeviceWs2812SPI.h LedDeviceSk6822SPI.h cp schemas/schema-ws2812spi.json schemas/schema-sk6822spi.json 4) Do some search and replacing: :%s/Ws2812SPI/Sk6822SPI/g 5) edit the other files (see the diffs in this commit) * Added wait time and reset time * Fixed up debugging output and commented it out.
2017-02-14 09:33:28 +01:00
private:
///
/// Writes the led color values to the led-device
///
/// @param ledValues The color-value per led
/// @return Zero on succes else negative
///
Disentangle LedDevice/LinearColorSmoothing, Bug Fixes & Test support (#654) * Handle Exceptions in main & Pythoninit * Have SSDPDiscover generic again * Have SSDPDiscover generic again * Change Info- to Debug logs as technical service messages * Nanoleaf - When switched on, ensure UDP mode * Include SQL Database in Cross-Compile instructions * Fix Clazy (QT code checker) and clang Warnings * Stop LedDevice:write for disabled device * Nanoleaf: Fix uint printfs * NanoLeaf: Fix indents to tabs * NanoLeaf - Add debug verbosity switches * Device switchability support, FileDevice with timestamp support * Nanoleaf Light Panels now support External Control V2 * Enhance LedDeviceFile by Timestamp + fix readyness * Stop color stream, if LedDevice disabled * Nanoleaf - remove switchability * Fix MultiColorAdjustment, if led-range is greater lednum * Fix logging * LedFileDevice/LedDevice - add testing support * New "Led Test" effect * LedDeviceFile - Add chrono include + Allow Led rewrites for testing * Stabilize Effects for LedDevices where latchtime = 0 * Update LedDeviceFile, allow latchtime = 0 * Distangle LinearColorSmoothing and LEDDevice, Fix Effect configuration updates * Updates LedDeviceFile - Initialize via Open * Updates LedDeviceNanoleaf - Initialize via Open, Remove throwing exceptions * Updates ProviderUDP - Remove throwing exceptions * Framebuffer - Use precise timer * TestSpi - Align to LedDevice updates * Pretty Print CrossCompileHowTo as markdown-file * Ensure that output is only written when LedDevice is ready * Align APA102 Device to new device staging * Logger - Remove clang warnings on extra semicolon * Devices SPI - Align to Device stages and methods * Fix cppcheck and clang findings * Add Code-Template for new Devices * Align devices to stages and methods, clean-up some code * Allow to reopen LedDevice without restart * Revert change "Remove Connect (PriorityMuxer::visiblePriorityChanged -> Hyperion::update) due to double writes" * Remove visiblePriorityChanged from LedDevice to decouple LedDevice from hyperion logic * Expose LedDevice getLedCount and align signedness
2020-02-10 15:21:58 +01:00
virtual int write(const std::vector<ColorRgb> &ledValues) override;
[untested] added Sk6822 led device support (#397) * Adding support for sk6822 timing This isnt complete, but should be a good starting point for others to learn from. 1) Here is where the led device source is located: cd libsrc/leddevice 2) Find the files that need changing: root@loungepi:libsrc/leddevice# grep -ri 2812spi * CMakeLists.txt: ${CURRENT_SOURCE_DIR}/LedDeviceWs2812SPI.h CMakeLists.txt: ${CURRENT_SOURCE_DIR}/LedDeviceWs2812SPI.cpp LedDeviceFactory.cpp: #include "LedDeviceWs2812SPI.h" LedDeviceFactory.cpp: REGISTER(Ws2812SPI); LedDeviceSchemas.qrc: <file alias="schema-ws2812spi">schemas/schema-ws2812spi.json</file> LedDeviceWs2812SPI.cpp:#include "LedDeviceWs2812SPI.h" LedDeviceWs2812SPI.cpp:LedDeviceWs2812SPI::LedDeviceWs2812SPI(const QJsonObject &deviceConfig) LedDeviceWs2812SPI.cpp:LedDevice* LedDeviceWs2812SPI::construct(const QJsonObject &deviceConfig) LedDeviceWs2812SPI.cpp: return new LedDeviceWs2812SPI(deviceConfig); LedDeviceWs2812SPI.cpp:bool LedDeviceWs2812SPI::init(const QJsonObject &deviceConfig) LedDeviceWs2812SPI.cpp:int LedDeviceWs2812SPI::write(const std::vector<ColorRgb> &ledValues) LedDeviceWs2812SPI.h:class LedDeviceWs2812SPI : public ProviderSpi LedDeviceWs2812SPI.h: LedDeviceWs2812SPI(const QJsonObject &deviceConfig); 3) Copy the existing files as a starting point: cp LedDeviceWs2812SPI.cpp LedDeviceSk6822SPI.cpp cp LedDeviceWs2812SPI.h LedDeviceSk6822SPI.h cp schemas/schema-ws2812spi.json schemas/schema-sk6822spi.json 4) Do some search and replacing: :%s/Ws2812SPI/Sk6822SPI/g 5) edit the other files (see the diffs in this commit) * Added wait time and reset time * Fixed up debugging output and commented it out.
2017-02-14 09:33:28 +01:00
const int SPI_BYTES_PER_COLOUR;
const int SPI_BYTES_WAIT_TIME;
const int SPI_FRAME_END_LATCH_BYTES;
uint8_t bitpair_to_byte[4];
};