mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2023-10-10 13:36:59 +02:00
Merge pull request #253 from aufano/master
Carsten Atmolight support Former-commit-id: a1a3c245a037e3d9604cff6c5a228e9f2842a7fb
This commit is contained in:
commit
b1f62cca40
@ -31,6 +31,7 @@ SET(Leddevice_HEADERS
|
|||||||
${CURRENT_SOURCE_DIR}/LedDeviceTest.h
|
${CURRENT_SOURCE_DIR}/LedDeviceTest.h
|
||||||
${CURRENT_SOURCE_DIR}/LedDeviceHyperionUsbasp.h
|
${CURRENT_SOURCE_DIR}/LedDeviceHyperionUsbasp.h
|
||||||
${CURRENT_SOURCE_DIR}/LedDeviceTpm2.h
|
${CURRENT_SOURCE_DIR}/LedDeviceTpm2.h
|
||||||
|
${CURRENT_SOURCE_DIR}/LedDeviceAtmo.h
|
||||||
)
|
)
|
||||||
|
|
||||||
SET(Leddevice_SOURCES
|
SET(Leddevice_SOURCES
|
||||||
@ -49,6 +50,7 @@ SET(Leddevice_SOURCES
|
|||||||
${CURRENT_SOURCE_DIR}/LedDeviceHyperionUsbasp.cpp
|
${CURRENT_SOURCE_DIR}/LedDeviceHyperionUsbasp.cpp
|
||||||
${CURRENT_SOURCE_DIR}/LedDevicePhilipsHue.cpp
|
${CURRENT_SOURCE_DIR}/LedDevicePhilipsHue.cpp
|
||||||
${CURRENT_SOURCE_DIR}/LedDeviceTpm2.cpp
|
${CURRENT_SOURCE_DIR}/LedDeviceTpm2.cpp
|
||||||
|
${CURRENT_SOURCE_DIR}/LedDeviceAtmo.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
if(ENABLE_SPIDEV)
|
if(ENABLE_SPIDEV)
|
||||||
|
44
libsrc/leddevice/LedDeviceAtmo.cpp
Normal file
44
libsrc/leddevice/LedDeviceAtmo.cpp
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
|
||||||
|
// STL includes
|
||||||
|
#include <cstring>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
// Linux includes
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
|
||||||
|
// hyperion local includes
|
||||||
|
#include "LedDeviceAtmo.h"
|
||||||
|
|
||||||
|
LedDeviceAtmo::LedDeviceAtmo(const std::string& outputDevice, const unsigned baudrate) :
|
||||||
|
LedRs232Device(outputDevice, baudrate),
|
||||||
|
_ledBuffer(0)
|
||||||
|
{
|
||||||
|
_ledBuffer.resize(4 + 3*5);
|
||||||
|
_ledBuffer[0] = 0xFF; // Startbyte
|
||||||
|
_ledBuffer[1] = 0x00; // StartChannel(Low)
|
||||||
|
_ledBuffer[2] = 0x00; // StartChannel(High)
|
||||||
|
_ledBuffer[3] = 0x0F; // Number of Databytes send (always! 15)
|
||||||
|
}
|
||||||
|
|
||||||
|
int LedDeviceAtmo::write(const std::vector<ColorRgb> &ledValues)
|
||||||
|
{
|
||||||
|
// The protocol is shomehow limited. we always need to send exactly 5 channels + header
|
||||||
|
// (19 bytes) for the hardware to recognize the data
|
||||||
|
if (ledValues.size() != 5)
|
||||||
|
{
|
||||||
|
printf("AtmoLight: %d channels configured. This should always be 5!\n", ledValues.size());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// write data
|
||||||
|
memcpy(4 + _ledBuffer.data(), ledValues.data(), ledValues.size() * 3);
|
||||||
|
return writeBytes(_ledBuffer.size(), _ledBuffer.data());
|
||||||
|
}
|
||||||
|
|
||||||
|
int LedDeviceAtmo::switchOff()
|
||||||
|
{
|
||||||
|
memset(4 + _ledBuffer.data(), 0, _ledBuffer.size() - 4);
|
||||||
|
return writeBytes(_ledBuffer.size(), _ledBuffer.data());
|
||||||
|
}
|
38
libsrc/leddevice/LedDeviceAtmo.h
Normal file
38
libsrc/leddevice/LedDeviceAtmo.h
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// STL includes
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
// hyperion incluse
|
||||||
|
#include "LedRs232Device.h"
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Implementation of the LedDevice interface for writing to serial device using tpm2 protocol.
|
||||||
|
///
|
||||||
|
class LedDeviceAtmo : public LedRs232Device
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
/// Constructs the LedDevice for attached serial device using supporting tpm2 protocol
|
||||||
|
/// All LEDs in the stripe are handled as one frame
|
||||||
|
///
|
||||||
|
/// @param outputDevice The name of the output device (eg '/dev/ttyAMA0')
|
||||||
|
/// @param baudrate The used baudrate for writing to the output device
|
||||||
|
///
|
||||||
|
LedDeviceAtmo(const std::string& outputDevice, const unsigned baudrate);
|
||||||
|
|
||||||
|
///
|
||||||
|
/// 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);
|
||||||
|
|
||||||
|
/// Switch the leds off
|
||||||
|
virtual int switchOff();
|
||||||
|
|
||||||
|
private:
|
||||||
|
/// The buffer containing the packed RGB values
|
||||||
|
std::vector<uint8_t> _ledBuffer;
|
||||||
|
};
|
@ -32,6 +32,7 @@
|
|||||||
#include "LedDeviceHyperionUsbasp.h"
|
#include "LedDeviceHyperionUsbasp.h"
|
||||||
#include "LedDevicePhilipsHue.h"
|
#include "LedDevicePhilipsHue.h"
|
||||||
#include "LedDeviceTpm2.h"
|
#include "LedDeviceTpm2.h"
|
||||||
|
#include "LedDeviceAtmo.h"
|
||||||
|
|
||||||
#ifdef ENABLE_WS2812BPWM
|
#ifdef ENABLE_WS2812BPWM
|
||||||
#include "LedDeviceWS2812b.h"
|
#include "LedDeviceWS2812b.h"
|
||||||
@ -211,6 +212,15 @@ LedDevice * LedDeviceFactory::construct(const Json::Value & deviceConfig)
|
|||||||
deviceTpm2->open();
|
deviceTpm2->open();
|
||||||
device = deviceTpm2;
|
device = deviceTpm2;
|
||||||
}
|
}
|
||||||
|
else if (type == "atmo")
|
||||||
|
{
|
||||||
|
const std::string output = deviceConfig["output"].asString();
|
||||||
|
const unsigned rate = 38400;
|
||||||
|
|
||||||
|
LedDeviceAtmo * deviceAtmo = new LedDeviceAtmo(output, rate);
|
||||||
|
deviceAtmo->open();
|
||||||
|
device = deviceAtmo;
|
||||||
|
}
|
||||||
#ifdef ENABLE_WS2812BPWM
|
#ifdef ENABLE_WS2812BPWM
|
||||||
else if (type == "ws2812b")
|
else if (type == "ws2812b")
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user