This repository was archived by the owner on May 6, 2021. It is now read-only.
File tree Expand file tree Collapse file tree 4 files changed +94
-0
lines changed Expand file tree Collapse file tree 4 files changed +94
-0
lines changed Original file line number Diff line number Diff line change @@ -30,6 +30,7 @@ SET(Leddevice_HEADERS
30
30
${CURRENT_SOURCE_DIR} /LedDeviceTest.h
31
31
${CURRENT_SOURCE_DIR} /LedDeviceHyperionUsbasp.h
32
32
${CURRENT_SOURCE_DIR} /LedDeviceTpm2.h
33
+ ${CURRENT_SOURCE_DIR} /LedDeviceAtmo.h
33
34
)
34
35
35
36
SET (Leddevice_SOURCES
@@ -47,6 +48,7 @@ SET(Leddevice_SOURCES
47
48
${CURRENT_SOURCE_DIR} /LedDeviceHyperionUsbasp.cpp
48
49
${CURRENT_SOURCE_DIR} /LedDevicePhilipsHue.cpp
49
50
${CURRENT_SOURCE_DIR} /LedDeviceTpm2.cpp
51
+ ${CURRENT_SOURCE_DIR} /LedDeviceAtmo.cpp
50
52
)
51
53
52
54
if (ENABLE_SPIDEV )
Original file line number Diff line number Diff line change
1
+
2
+ // STL includes
3
+ #include < cstring>
4
+ #include < cstdio>
5
+ #include < iostream>
6
+
7
+ // Linux includes
8
+ #include < fcntl.h>
9
+ #include < sys/ioctl.h>
10
+
11
+ // hyperion local includes
12
+ #include " LedDeviceAtmo.h"
13
+
14
+ LedDeviceAtmo::LedDeviceAtmo (const std::string& outputDevice, const unsigned baudrate) :
15
+ LedRs232Device(outputDevice, baudrate),
16
+ _ledBuffer(0 )
17
+ {
18
+ _ledBuffer.resize (4 + 3 *5 );
19
+ _ledBuffer[0 ] = 0xFF ; // Startbyte
20
+ _ledBuffer[1 ] = 0x00 ; // StartChannel(Low)
21
+ _ledBuffer[2 ] = 0x00 ; // StartChannel(High)
22
+ _ledBuffer[3 ] = 0x0F ; // Number of Databytes send (always! 15)
23
+ }
24
+
25
+ int LedDeviceAtmo::write (const std::vector<ColorRgb> &ledValues)
26
+ {
27
+ // The protocol is shomehow limited. we always need to send exactly 5 channels + header
28
+ // (19 bytes) for the hardware to recognize the data
29
+ if (ledValues.size () != 5 )
30
+ {
31
+ printf (" AtmoLight: %d channels configured. This should always be 5!\n " , ledValues.size ());
32
+ return 0 ;
33
+ }
34
+
35
+ // write data
36
+ memcpy (4 + _ledBuffer.data (), ledValues.data (), ledValues.size () * 3 );
37
+ return writeBytes (_ledBuffer.size (), _ledBuffer.data ());
38
+ }
39
+
40
+ int LedDeviceAtmo::switchOff ()
41
+ {
42
+ memset (4 + _ledBuffer.data (), 0 , _ledBuffer.size () - 4 );
43
+ return writeBytes (_ledBuffer.size (), _ledBuffer.data ());
44
+ }
Original file line number Diff line number Diff line change
1
+ #pragma once
2
+
3
+ // STL includes
4
+ #include < string>
5
+
6
+ // hyperion incluse
7
+ #include " LedRs232Device.h"
8
+
9
+ // /
10
+ // / Implementation of the LedDevice interface for writing to serial device using tpm2 protocol.
11
+ // /
12
+ class LedDeviceAtmo : public LedRs232Device
13
+ {
14
+ public:
15
+ // /
16
+ // / Constructs the LedDevice for attached serial device using supporting tpm2 protocol
17
+ // / All LEDs in the stripe are handled as one frame
18
+ // /
19
+ // / @param outputDevice The name of the output device (eg '/dev/ttyAMA0')
20
+ // / @param baudrate The used baudrate for writing to the output device
21
+ // /
22
+ LedDeviceAtmo (const std::string& outputDevice, const unsigned baudrate);
23
+
24
+ // /
25
+ // / Writes the led color values to the led-device
26
+ // /
27
+ // / @param ledValues The color-value per led
28
+ // / @return Zero on succes else negative
29
+ // /
30
+ virtual int write (const std::vector<ColorRgb> &ledValues);
31
+
32
+ // / Switch the leds off
33
+ virtual int switchOff ();
34
+
35
+ private:
36
+ // / The buffer containing the packed RGB values
37
+ std::vector<uint8_t > _ledBuffer;
38
+ };
Original file line number Diff line number Diff line change 30
30
#include " LedDeviceHyperionUsbasp.h"
31
31
#include " LedDevicePhilipsHue.h"
32
32
#include " LedDeviceTpm2.h"
33
+ #include " LedDeviceAtmo.h"
33
34
34
35
#ifdef ENABLE_WS2812BPWM
35
36
#include " LedDeviceWS2812b.h"
@@ -186,6 +187,15 @@ LedDevice * LedDeviceFactory::construct(const Json::Value & deviceConfig)
186
187
deviceTpm2->open ();
187
188
device = deviceTpm2;
188
189
}
190
+ else if (type == " atmo" )
191
+ {
192
+ const std::string output = deviceConfig[" output" ].asString ();
193
+ const unsigned rate = 38400 ;
194
+
195
+ LedDeviceAtmo * deviceAtmo = new LedDeviceAtmo (output, rate);
196
+ deviceAtmo->open ();
197
+ device = deviceAtmo;
198
+ }
189
199
#ifdef ENABLE_WS2812BPWM
190
200
else if (type == " ws2812b" )
191
201
{
You can’t perform that action at this time.
0 commit comments