mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2023-10-10 13:36:59 +02:00
Leddevice rework2 (#193)
* commit debug code to save it due to merge * migrate first devices to new device registry and configure on runtime * fadecandy and rs232 resets device if config is set * try to hunt crash on osx * test commit if this works with osx * refactor spi devices * cleanup * refactor leddevices file, tinkerforge and ws2812b * refactor raw usb devices * refactor udp devices * - add tpm2net driver - remove old udp driver from build (files left in place for reference for new udp driver) - json serverinfo shows available leddevices * finish rework part 2 of leddevices * add schemas for leddevices. currently only compiled in, but not usedx
This commit is contained in:
parent
c207828069
commit
d679affeb4
@ -15,7 +15,7 @@ then
|
||||
|
||||
mkdir build || exit 1
|
||||
cd build
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_TESTS=ON -Wno-dev .. || exit 2
|
||||
cmake -DCMAKE_BUILD_TYPE=Debug -DENABLE_TESTS=ON -Wno-dev .. || exit 2
|
||||
make -j$procs || exit 3
|
||||
# make -j$(nproc) package || exit 4 # currently osx(dmg) package creation not implemented
|
||||
fi
|
||||
@ -25,7 +25,7 @@ if [[ $TRAVIS_OS_NAME == 'linux' ]]
|
||||
then
|
||||
mkdir build || exit 1
|
||||
cd build
|
||||
cmake -DPLATFORM=x86-dev -DCMAKE_BUILD_TYPE=Release .. || exit 2
|
||||
cmake -DPLATFORM=x86-dev -DCMAKE_BUILD_TYPE=Debug .. || exit 2
|
||||
make -j$(nproc) || exit 3
|
||||
make -j$(nproc) package || exit 4
|
||||
fi
|
||||
|
@ -1,6 +1,8 @@
|
||||
#!/bin/bash
|
||||
|
||||
# install osx deps for hyperion compile
|
||||
if [[ $TRAVIS_OS_NAME == 'osx' ]]; then
|
||||
if [[ $TRAVIS_OS_NAME == 'osx' ]]
|
||||
then
|
||||
echo "Install OSX deps"
|
||||
time brew update
|
||||
time brew install qt5 || true
|
||||
@ -10,7 +12,8 @@ if [[ $TRAVIS_OS_NAME == 'osx' ]]; then
|
||||
fi
|
||||
|
||||
# install linux deps for hyperion compile
|
||||
if [[ $TRAVIS_OS_NAME == 'linux' ]]; then
|
||||
if [[ $TRAVIS_OS_NAME == 'linux' ]]
|
||||
then
|
||||
echo "Install linux deps"
|
||||
sudo apt-get -qq update
|
||||
sudo apt-get install -qq -y qtbase5-dev libqt5serialport5-dev libusb-1.0-0-dev python-dev libxrender-dev libavahi-core-dev libavahi-compat-libdnssd-dev doxygen
|
||||
|
@ -41,7 +41,7 @@ MyClass::MyClass() : myVarA(0),
|
||||
|
||||
good:
|
||||
MyClass::MyClass()
|
||||
: myVarA(0),
|
||||
: myVarA(0)
|
||||
, myVarB("eee")
|
||||
, myVarC(true)
|
||||
{
|
||||
|
@ -2,14 +2,21 @@
|
||||
|
||||
// STL incldues
|
||||
#include <vector>
|
||||
|
||||
#include <QObject>
|
||||
#include <map>
|
||||
|
||||
// Utility includes
|
||||
#include <utils/ColorRgb.h>
|
||||
#include <utils/ColorRgbw.h>
|
||||
#include <utils/RgbToRgbw.h>
|
||||
#include <utils/Logger.h>
|
||||
#include <functional>
|
||||
#include <json/json.h>
|
||||
|
||||
class LedDevice;
|
||||
|
||||
typedef LedDevice* ( *LedDeviceCreateFuncType ) ( const Json::Value& );
|
||||
typedef std::map<std::string,LedDeviceCreateFuncType> LedDeviceRegistry;
|
||||
|
||||
///
|
||||
/// Interface (pure virtual base class) for LedDevices.
|
||||
@ -44,6 +51,10 @@ public:
|
||||
///
|
||||
virtual int open();
|
||||
|
||||
static int addToDeviceMap(std::string name, LedDeviceCreateFuncType funcPtr);
|
||||
static const LedDeviceRegistry& getDeviceMap();
|
||||
static void setActiveDevice(std::string dev);
|
||||
static std::string activeDevice() { return _activeDevice; };
|
||||
protected:
|
||||
/// The common Logger instance for all LedDevices
|
||||
Logger * _log;
|
||||
@ -53,4 +64,6 @@ protected:
|
||||
/// The buffer containing the packed RGB values
|
||||
std::vector<uint8_t> _ledBuffer;
|
||||
|
||||
static std::string _activeDevice;
|
||||
static LedDeviceRegistry _ledDeviceMap;
|
||||
};
|
||||
|
@ -565,7 +565,6 @@ Hyperion::Hyperion(const Json::Value &jsonConfig, const std::string configFile)
|
||||
, _raw2ledTransform(createLedColorsTransform(_ledString.leds().size(), jsonConfig["color"]))
|
||||
, _raw2ledTemperature(createLedColorsTemperature(_ledString.leds().size(), jsonConfig["color"]))
|
||||
, _raw2ledAdjustment(createLedColorsAdjustment(_ledString.leds().size(), jsonConfig["color"]))
|
||||
, _device(LedDeviceFactory::construct(jsonConfig["device"]))
|
||||
, _effectEngine(nullptr)
|
||||
, _messageForwarder(createMessageForwarder(jsonConfig["forwarder"]))
|
||||
, _jsonConfig(jsonConfig)
|
||||
@ -575,6 +574,7 @@ Hyperion::Hyperion(const Json::Value &jsonConfig, const std::string configFile)
|
||||
, _hwLedCount(_ledString.leds().size())
|
||||
, _sourceAutoSelectEnabled(true)
|
||||
{
|
||||
_device = LedDeviceFactory::construct(jsonConfig["device"]);
|
||||
registerPriority("Off", PriorityMuxer::LOWEST_PRIORITY);
|
||||
|
||||
if (!_raw2ledAdjustment->verifyAdjustments())
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include <hyperion/ColorCorrection.h>
|
||||
#include <hyperion/ColorAdjustment.h>
|
||||
#include <utils/ColorRgb.h>
|
||||
#include <leddevice/LedDevice.h>
|
||||
#include <HyperionConfig.h>
|
||||
#include <utils/jsonschema/JsonFactory.h>
|
||||
|
||||
@ -624,21 +625,31 @@ void JsonClientConnection::handleServerInfoCommand(const Json::Value &, const st
|
||||
<< std::hex << unsigned(priorityInfo.ledColors.begin()->blue);
|
||||
|
||||
LEDcolor["HEX Value"].append(hex.str());
|
||||
|
||||
|
||||
activeLedColors.append(LEDcolor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// get available led devices
|
||||
info["ledDevices"]["active"] = LedDevice::activeDevice();
|
||||
info["ledDevices"]["available"] = Json::Value(Json::arrayValue);
|
||||
for ( auto dev: LedDevice::getDeviceMap())
|
||||
{
|
||||
info["ledDevices"]["available"].append(dev.first);
|
||||
}
|
||||
|
||||
|
||||
// Add Hyperion Version, build time
|
||||
Json::Value & version = info["hyperion"] = Json::Value(Json::arrayValue);
|
||||
//Json::Value & version =
|
||||
info["hyperion"] = Json::Value(Json::arrayValue);
|
||||
Json::Value ver;
|
||||
ver["jsonrpc_version"] = HYPERION_JSON_VERSION;
|
||||
ver["version"] = HYPERION_VERSION;
|
||||
ver["build"] = HYPERION_BUILD_ID;
|
||||
ver["time"] = __DATE__ " " __TIME__;
|
||||
ver["build"] = HYPERION_BUILD_ID;
|
||||
ver["time"] = __DATE__ " " __TIME__;
|
||||
|
||||
version.append(ver);
|
||||
info["hyperion"].append(ver);
|
||||
|
||||
// send the result
|
||||
sendMessage(result);
|
||||
@ -941,7 +952,7 @@ void JsonClientConnection::handleConfigSetCommand(const Json::Value &message, co
|
||||
sendSuccessReply(command, tan);
|
||||
}
|
||||
} else
|
||||
sendErrorReply("Error while parsing json: Message size " + message.size(), command, tan);
|
||||
sendErrorReply("Error while parsing json: Message size " + std::to_string(message.size()), command, tan);
|
||||
}
|
||||
|
||||
void JsonClientConnection::handleComponentStateCommand(const Json::Value& message, const std::string &command, const int tan)
|
||||
|
@ -34,13 +34,12 @@ SET(Leddevice_HEADERS
|
||||
${CURRENT_SOURCE_DIR}/LedDevicePiBlaster.h
|
||||
${CURRENT_SOURCE_DIR}/LedDeviceSedu.h
|
||||
${CURRENT_SOURCE_DIR}/LedDeviceFile.h
|
||||
${CURRENT_SOURCE_DIR}/LedDeviceFadeCandy.h
|
||||
${CURRENT_SOURCE_DIR}/LedDeviceUdp.h
|
||||
${CURRENT_SOURCE_DIR}/LedDeviceUdpRaw.h
|
||||
${CURRENT_SOURCE_DIR}/LedDeviceUdpE131.h
|
||||
${CURRENT_SOURCE_DIR}/LedUdpDevice.h
|
||||
${CURRENT_SOURCE_DIR}/LedDeviceHyperionUsbasp.h
|
||||
${CURRENT_SOURCE_DIR}/LedDeviceTpm2.h
|
||||
${CURRENT_SOURCE_DIR}/LedDeviceTpm2net.h
|
||||
${CURRENT_SOURCE_DIR}/LedDeviceAtmo.h
|
||||
)
|
||||
|
||||
@ -62,13 +61,13 @@ SET(Leddevice_SOURCES
|
||||
${CURRENT_SOURCE_DIR}/LedDeviceSedu.cpp
|
||||
${CURRENT_SOURCE_DIR}/LedDeviceFile.cpp
|
||||
${CURRENT_SOURCE_DIR}/LedDeviceFadeCandy.cpp
|
||||
${CURRENT_SOURCE_DIR}/LedDeviceUdp.cpp
|
||||
${CURRENT_SOURCE_DIR}/LedDeviceUdpRaw.cpp
|
||||
${CURRENT_SOURCE_DIR}/LedDeviceUdpE131.cpp
|
||||
${CURRENT_SOURCE_DIR}/LedUdpDevice.cpp
|
||||
${CURRENT_SOURCE_DIR}/LedDeviceHyperionUsbasp.cpp
|
||||
${CURRENT_SOURCE_DIR}/LedDevicePhilipsHue.cpp
|
||||
${CURRENT_SOURCE_DIR}/LedDeviceTpm2.cpp
|
||||
${CURRENT_SOURCE_DIR}/LedDeviceTpm2net.cpp
|
||||
${CURRENT_SOURCE_DIR}/LedDeviceAtmo.cpp
|
||||
)
|
||||
|
||||
@ -131,7 +130,13 @@ if(ENABLE_TINKERFORGE)
|
||||
)
|
||||
endif()
|
||||
|
||||
set(LedDevice_RESOURCES
|
||||
${CURRENT_SOURCE_DIR}/LedDeviceSchemas.qrc
|
||||
)
|
||||
|
||||
QT5_WRAP_CPP(Leddevice_HEADERS_MOC ${Leddevice_QT_HEADERS})
|
||||
qt5_add_resources(LedDevice_RESOURCES_RCC ${LedDevice_RESOURCES} OPTIONS "-no-compress")
|
||||
|
||||
|
||||
|
||||
add_library(leddevice
|
||||
@ -139,13 +144,14 @@ add_library(leddevice
|
||||
${Leddevice_QT_HEADERS}
|
||||
${Leddevice_HEADERS_MOC}
|
||||
${Leddevice_SOURCES}
|
||||
${LedDevice_RESOURCES}
|
||||
${LedDevice_RESOURCES_RCC}
|
||||
)
|
||||
|
||||
qt5_use_modules(leddevice Network SerialPort)
|
||||
|
||||
target_link_libraries(leddevice
|
||||
hyperion-utils
|
||||
# serialport
|
||||
${LIBUSB_1_LIBRARIES} #apt-get install libusb-1.0-0-dev
|
||||
${CMAKE_THREAD_LIBS_INIT}
|
||||
${QT_LIBRARIES}
|
||||
|
@ -1,5 +1,8 @@
|
||||
#include <leddevice/LedDevice.h>
|
||||
|
||||
LedDeviceRegistry LedDevice::_ledDeviceMap = LedDeviceRegistry();
|
||||
std::string LedDevice::_activeDevice = "";
|
||||
|
||||
LedDevice::LedDevice()
|
||||
: QObject()
|
||||
, _log(Logger::getInstance("LedDevice"))
|
||||
@ -9,8 +12,24 @@ LedDevice::LedDevice()
|
||||
{
|
||||
}
|
||||
|
||||
// dummy implemention
|
||||
int LedDevice::open()
|
||||
{
|
||||
//dummy implemention
|
||||
return 0;
|
||||
}
|
||||
|
||||
int LedDevice::addToDeviceMap(std::string name, LedDeviceCreateFuncType funcPtr)
|
||||
{
|
||||
_ledDeviceMap.emplace(name,funcPtr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
const LedDeviceRegistry& LedDevice::getDeviceMap()
|
||||
{
|
||||
return _ledDeviceMap;
|
||||
}
|
||||
|
||||
void LedDevice::setActiveDevice(std::string dev)
|
||||
{
|
||||
_activeDevice = dev;
|
||||
}
|
@ -12,9 +12,15 @@
|
||||
// hyperion local includes
|
||||
#include "LedDeviceAPA102.h"
|
||||
|
||||
LedDeviceAPA102::LedDeviceAPA102(const std::string& outputDevice, const unsigned baudrate)
|
||||
: LedSpiDevice(outputDevice, baudrate, 500000)
|
||||
LedDeviceAPA102::LedDeviceAPA102(const Json::Value &deviceConfig)
|
||||
: LedSpiDevice(deviceConfig)
|
||||
{
|
||||
_latchTime_ns = 500000;
|
||||
}
|
||||
|
||||
LedDevice* LedDeviceAPA102::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDeviceAPA102(deviceConfig);
|
||||
}
|
||||
|
||||
int LedDeviceAPA102::write(const std::vector<ColorRgb> &ledValues)
|
||||
|
@ -5,22 +5,23 @@
|
||||
|
||||
// hyperion incluse
|
||||
#include "LedSpiDevice.h"
|
||||
#include <json/json.h>
|
||||
|
||||
///
|
||||
/// Implementation of the LedDevice interface for writing to APA102 led device.
|
||||
///
|
||||
/// APA102 is
|
||||
///
|
||||
class LedDeviceAPA102 : public LedSpiDevice
|
||||
{
|
||||
public:
|
||||
///
|
||||
/// Constructs the LedDevice for a string containing leds of the type APA102
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
/// @param outputDevice The name of the output device (eg '/dev/spidev.0.0')
|
||||
/// @param baudrate The used baudrate for writing to the output device
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDeviceAPA102(const std::string& outputDevice, const unsigned baudrate );
|
||||
LedDeviceAPA102(const Json::Value &deviceConfig);
|
||||
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
|
||||
///
|
||||
|
@ -10,9 +10,10 @@
|
||||
|
||||
// hyperion local includes
|
||||
#include "LedDeviceAdalight.h"
|
||||
#include <leddevice/LedDevice.h>
|
||||
|
||||
LedDeviceAdalight::LedDeviceAdalight(const std::string& outputDevice, const unsigned baudrate, int delayAfterConnect_ms)
|
||||
: LedRs232Device(outputDevice, baudrate, delayAfterConnect_ms)
|
||||
LedDeviceAdalight::LedDeviceAdalight(const Json::Value &deviceConfig)
|
||||
: LedRs232Device(deviceConfig)
|
||||
, _timer()
|
||||
{
|
||||
// setup the timer
|
||||
@ -24,6 +25,11 @@ LedDeviceAdalight::LedDeviceAdalight(const std::string& outputDevice, const unsi
|
||||
_timer.start();
|
||||
}
|
||||
|
||||
LedDevice* LedDeviceAdalight::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDeviceAdalight(deviceConfig);
|
||||
}
|
||||
|
||||
int LedDeviceAdalight::write(const std::vector<ColorRgb> & ledValues)
|
||||
{
|
||||
if (_ledBuffer.size() == 0)
|
||||
|
@ -18,12 +18,14 @@ class LedDeviceAdalight : public LedRs232Device
|
||||
|
||||
public:
|
||||
///
|
||||
/// Constructs the LedDevice for attached Adalight device
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
/// @param outputDevice The name of the output device (eg '/dev/ttyS0')
|
||||
/// @param baudrate The used baudrate for writing to the output device
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDeviceAdalight(const std::string& outputDevice, const unsigned baudrate, int delayAfterConnect_ms);
|
||||
LedDeviceAdalight(const Json::Value &deviceConfig);
|
||||
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Writes the led color values to the led-device
|
||||
@ -46,3 +48,4 @@ protected:
|
||||
/// every 15 seconds
|
||||
QTimer _timer;
|
||||
};
|
||||
|
||||
|
@ -11,11 +11,17 @@
|
||||
// hyperion local includes
|
||||
#include "LedDeviceAdalightApa102.h"
|
||||
|
||||
LedDeviceAdalightApa102::LedDeviceAdalightApa102(const std::string& outputDevice, const unsigned baudrate, int delayAfterConnect_ms)
|
||||
: LedDeviceAdalight(outputDevice, baudrate, delayAfterConnect_ms)
|
||||
LedDeviceAdalightApa102::LedDeviceAdalightApa102(const Json::Value &deviceConfig)
|
||||
: LedDeviceAdalight(deviceConfig)
|
||||
{
|
||||
}
|
||||
|
||||
LedDevice* LedDeviceAdalightApa102::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDeviceAdalightApa102(deviceConfig);
|
||||
}
|
||||
|
||||
|
||||
//comparing to ws2801 adalight, the following changes were needed:
|
||||
// 1- differnt data frame (4 bytes instead of 3)
|
||||
// 2 - in order to accomodate point 1 above, number of leds sent to adalight is increased by 1/3rd
|
||||
|
@ -20,7 +20,10 @@ public:
|
||||
/// @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);
|
||||
LedDeviceAdalightApa102(const Json::Value &deviceConfig);
|
||||
|
||||
/// create leddevice when type in config is set to this type
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Writes the led color values to the led-device
|
||||
@ -33,3 +36,4 @@ public:
|
||||
/// Switch the leds off
|
||||
virtual int switchOff();
|
||||
};
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
// hyperion local includes
|
||||
#include "LedDeviceAtmo.h"
|
||||
|
||||
LedDeviceAtmo::LedDeviceAtmo(const std::string& outputDevice, const unsigned baudrate)
|
||||
: LedRs232Device(outputDevice, baudrate)
|
||||
LedDeviceAtmo::LedDeviceAtmo(const Json::Value &deviceConfig)
|
||||
: LedRs232Device(deviceConfig)
|
||||
{
|
||||
_ledBuffer.resize(4 + 5*3); // 4-byte header, 5 RGB values
|
||||
_ledBuffer[0] = 0xFF; // Startbyte
|
||||
@ -11,6 +11,12 @@ LedDeviceAtmo::LedDeviceAtmo(const std::string& outputDevice, const unsigned bau
|
||||
_ledBuffer[3] = 0x0F; // Number of Databytes send (always! 15)
|
||||
}
|
||||
|
||||
LedDevice* LedDeviceAtmo::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDeviceAtmo(deviceConfig);
|
||||
}
|
||||
|
||||
|
||||
int LedDeviceAtmo::write(const std::vector<ColorRgb> &ledValues)
|
||||
{
|
||||
// The protocol is shomehow limited. we always need to send exactly 5 channels + header
|
||||
|
@ -13,13 +13,14 @@ 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
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
/// @param outputDevice The name of the output device (eg '/dev/ttyAMA0')
|
||||
/// @param baudrate The used baudrate for writing to the output device
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDeviceAtmo(const std::string& outputDevice, const unsigned baudrate);
|
||||
LedDeviceAtmo(const Json::Value &deviceConfig);
|
||||
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Writes the led color values to the led-device
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include <QNetworkReply>
|
||||
|
||||
#include <stdexcept>
|
||||
#include <sstream>
|
||||
#include <string>
|
||||
#include <set>
|
||||
|
||||
@ -15,23 +16,10 @@ AtmoOrbLight::AtmoOrbLight(unsigned int id) {
|
||||
// Not implemented
|
||||
}
|
||||
|
||||
LedDeviceAtmoOrb::LedDeviceAtmoOrb(
|
||||
const std::string &output,
|
||||
bool useOrbSmoothing,
|
||||
int transitiontime,
|
||||
int skipSmoothingDiff,
|
||||
int port,
|
||||
int numLeds,
|
||||
std::vector<unsigned int> orbIds)
|
||||
LedDeviceAtmoOrb::LedDeviceAtmoOrb(const Json::Value &deviceConfig)
|
||||
: LedDevice()
|
||||
, _multicastGroup(output.c_str())
|
||||
, _useOrbSmoothing(useOrbSmoothing)
|
||||
, _transitiontime(transitiontime)
|
||||
, _skipSmoothingDiff(skipSmoothingDiff)
|
||||
, _multiCastGroupPort(port)
|
||||
, _numLeds(numLeds)
|
||||
, _orbIds(orbIds)
|
||||
{
|
||||
setConfig(deviceConfig);
|
||||
_manager = new QNetworkAccessManager();
|
||||
_groupAddress = QHostAddress(_multicastGroup);
|
||||
|
||||
@ -41,6 +29,44 @@ LedDeviceAtmoOrb::LedDeviceAtmoOrb(
|
||||
joinedMulticastgroup = _udpSocket->joinMulticastGroup(_groupAddress);
|
||||
}
|
||||
|
||||
bool LedDeviceAtmoOrb::setConfig(const Json::Value &deviceConfig)
|
||||
{
|
||||
_multicastGroup = deviceConfig["output"].asString().c_str();
|
||||
_useOrbSmoothing = deviceConfig.get("useOrbSmoothing", false).asBool();
|
||||
_transitiontime = deviceConfig.get("transitiontime", 0).asInt();
|
||||
_skipSmoothingDiff = deviceConfig.get("skipSmoothingDiff", 0).asInt();
|
||||
_multiCastGroupPort = deviceConfig.get("port", 49692).asInt();
|
||||
_numLeds = deviceConfig.get("numLeds", 24).asInt();
|
||||
|
||||
const std::string orbId = deviceConfig["orbIds"].asString();
|
||||
_orbIds.clear();
|
||||
|
||||
// If we find multiple Orb ids separate them and add to list
|
||||
const std::string separator (",");
|
||||
if (orbId.find(separator) != std::string::npos)
|
||||
{
|
||||
std::stringstream ss(orbId);
|
||||
std::vector<int> output;
|
||||
unsigned int i;
|
||||
while (ss >> i)
|
||||
{
|
||||
_orbIds.push_back(i);
|
||||
if (ss.peek() == ',' || ss.peek() == ' ') ss.ignore();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_orbIds.push_back(atoi(orbId.c_str()));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
LedDevice* LedDeviceAtmoOrb::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDeviceAtmoOrb(deviceConfig);
|
||||
}
|
||||
|
||||
int LedDeviceAtmoOrb::write(const std::vector <ColorRgb> &ledValues)
|
||||
{
|
||||
// If not in multicast group return
|
||||
|
@ -45,20 +45,21 @@ public:
|
||||
bool joinedMulticastgroup;
|
||||
|
||||
///
|
||||
/// Constructs the device.
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
/// @param output is the multicast address of Orbs
|
||||
/// @param transitiontime is optional and not used at the moment
|
||||
/// @param useOrbSmoothing use Orbs own (external) smoothing algorithm (default: false)
|
||||
/// @param skipSmoothingDiff minimal color (0-255) difference to override smoothing so that if current and previously received colors are higher than set dif we override smoothing
|
||||
/// @param port is the multicast port.
|
||||
/// @param numLeds is the total amount of leds per Orb
|
||||
/// @param array containing orb ids
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDeviceAtmoOrb(const std::string &output, bool useOrbSmoothing =
|
||||
false, int transitiontime = 0, int skipSmoothingDiff = 0, int port = 49692, int numLeds = 24,
|
||||
std::vector<unsigned int> orbIds = std::vector<unsigned int>());
|
||||
LedDeviceAtmoOrb(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Sets configuration
|
||||
///
|
||||
/// @param deviceConfig the json device config
|
||||
/// @return true if success
|
||||
bool setConfig(const Json::Value &deviceConfig);
|
||||
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
///
|
||||
/// Destructor of this device
|
||||
///
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include <sstream>
|
||||
#include <algorithm>
|
||||
#include <exception>
|
||||
#include <map>
|
||||
|
||||
// Build configuration
|
||||
#include <HyperionConfig.h>
|
||||
@ -10,6 +11,7 @@
|
||||
// Leddevice includes
|
||||
#include <leddevice/LedDeviceFactory.h>
|
||||
#include <utils/Logger.h>
|
||||
#include <leddevice/LedDevice.h>
|
||||
|
||||
// Local Leddevice includes
|
||||
#ifdef ENABLE_SPIDEV
|
||||
@ -35,7 +37,7 @@
|
||||
#include "LedDeviceSedu.h"
|
||||
#include "LedDeviceFile.h"
|
||||
#include "LedDeviceFadeCandy.h"
|
||||
#include "LedDeviceUdp.h"
|
||||
#include "LedDeviceTpm2net.h"
|
||||
#include "LedDeviceUdpRaw.h"
|
||||
#include "LedDeviceUdpE131.h"
|
||||
#include "LedDeviceHyperionUsbasp.h"
|
||||
@ -63,281 +65,81 @@ LedDevice * LedDeviceFactory::construct(const Json::Value & deviceConfig)
|
||||
std::string type = deviceConfig.get("type", "UNSPECIFIED").asString();
|
||||
std::transform(type.begin(), type.end(), type.begin(), ::tolower);
|
||||
|
||||
// rs232 devices
|
||||
LedDevice::addToDeviceMap("adalight" , LedDeviceAdalight::construct);
|
||||
LedDevice::addToDeviceMap("adalightapa102", LedDeviceAdalightApa102::construct);
|
||||
LedDevice::addToDeviceMap("sedu" , LedDeviceSedu::construct);
|
||||
LedDevice::addToDeviceMap("tpm2" , LedDeviceTpm2::construct);
|
||||
LedDevice::addToDeviceMap("atmo" , LedDeviceAtmo::construct);
|
||||
LedDevice::addToDeviceMap("fadecandy" , LedDeviceFadeCandy::construct);
|
||||
|
||||
// spi devices
|
||||
#ifdef ENABLE_SPIDEV
|
||||
LedDevice::addToDeviceMap("apa102" , LedDeviceAPA102::construct);
|
||||
LedDevice::addToDeviceMap("lpd6803" , LedDeviceLpd6803::construct);
|
||||
LedDevice::addToDeviceMap("lpd8806" , LedDeviceLpd8806::construct);
|
||||
LedDevice::addToDeviceMap("p9813" , LedDeviceP9813::construct);
|
||||
LedDevice::addToDeviceMap("ws2801" , LedDeviceWs2801::construct);
|
||||
LedDevice::addToDeviceMap("ws2812spi" , LedDeviceWs2812SPI::construct);
|
||||
LedDevice::addToDeviceMap("sk6812rgbw-spi", LedDeviceSk6812SPI::construct);
|
||||
#endif
|
||||
|
||||
// pwm devices
|
||||
#ifdef ENABLE_WS2812BPWM
|
||||
LedDevice::addToDeviceMap("ws2812b", LedDeviceWS2812b::construct);
|
||||
#endif
|
||||
#ifdef ENABLE_WS281XPWM
|
||||
LedDevice::addToDeviceMap("ws281x", LedDeviceWS281x::construct);
|
||||
#endif
|
||||
|
||||
// network lights
|
||||
LedDevice::addToDeviceMap("tmp2net", LedDeviceTpm2net::construct);
|
||||
LedDevice::addToDeviceMap("udpraw", LedDeviceUdpRaw::construct);
|
||||
LedDevice::addToDeviceMap("e131", LedDeviceUdpE131::construct);
|
||||
#ifdef ENABLE_TINKERFORGE
|
||||
LedDevice::addToDeviceMap("tinkerforge", LedDeviceTinkerforge::construct);
|
||||
#endif
|
||||
LedDevice::addToDeviceMap("philipshue", LedDevicePhilipsHue::construct);
|
||||
LedDevice::addToDeviceMap("atmoorb", LedDeviceAtmoOrb::construct);
|
||||
|
||||
// direct usb
|
||||
LedDevice::addToDeviceMap("hyperion-usbasp", LedDeviceHyperionUsbasp::construct);
|
||||
LedDevice::addToDeviceMap("rawhid", LedDeviceRawHID::construct);
|
||||
LedDevice::addToDeviceMap("paintpack", LedDevicePaintpack::construct);
|
||||
LedDevice::addToDeviceMap("lightpack", LedDeviceLightpack::construct);
|
||||
LedDevice::addToDeviceMap("multi-lightpack", LedDeviceMultiLightpack::construct);
|
||||
|
||||
// other
|
||||
LedDevice::addToDeviceMap("file", LedDeviceFile::construct);
|
||||
LedDevice::addToDeviceMap("piblaster", LedDevicePiBlaster::construct);
|
||||
|
||||
const LedDeviceRegistry& devList = LedDevice::getDeviceMap();
|
||||
LedDevice* device = nullptr;
|
||||
try
|
||||
{
|
||||
if (false) {}
|
||||
else if (type == "adalight")
|
||||
for ( auto dev: devList)
|
||||
{
|
||||
device = new LedDeviceAdalight(
|
||||
deviceConfig["output"].asString(),
|
||||
deviceConfig["rate"].asInt(),
|
||||
deviceConfig.get("delayAfterConnect",500).asInt()
|
||||
);
|
||||
}
|
||||
else if (type == "adalightapa102")
|
||||
{
|
||||
device = new LedDeviceAdalightApa102(
|
||||
deviceConfig["output"].asString(),
|
||||
deviceConfig["rate"].asInt(),
|
||||
deviceConfig.get("delayAfterConnect",500).asInt()
|
||||
);
|
||||
}
|
||||
#ifdef ENABLE_SPIDEV
|
||||
else if (type == "lpd6803" || type == "ldp6803")
|
||||
{
|
||||
device = new LedDeviceLpd6803(
|
||||
deviceConfig["output"].asString(),
|
||||
deviceConfig["rate"].asInt()
|
||||
);
|
||||
}
|
||||
else if (type == "lpd8806" || type == "ldp8806")
|
||||
{
|
||||
device = new LedDeviceLpd8806(
|
||||
deviceConfig["output"].asString(),
|
||||
deviceConfig["rate"].asInt()
|
||||
);
|
||||
}
|
||||
else if (type == "p9813")
|
||||
{
|
||||
device = new LedDeviceP9813(
|
||||
deviceConfig["output"].asString(),
|
||||
deviceConfig["rate"].asInt()
|
||||
);
|
||||
}
|
||||
else if (type == "apa102")
|
||||
{
|
||||
device = new LedDeviceAPA102(
|
||||
deviceConfig["output"].asString(),
|
||||
deviceConfig["rate"].asInt()
|
||||
);
|
||||
}
|
||||
else if (type == "ws2801" || type == "lightberry")
|
||||
{
|
||||
device = new LedDeviceWs2801(
|
||||
deviceConfig["output"].asString(),
|
||||
deviceConfig["rate"].asInt(),
|
||||
deviceConfig.get("latchtime",500000).asInt(),
|
||||
deviceConfig.get("spimode",0).asInt(),
|
||||
deviceConfig.get("invert",false).asBool()
|
||||
);
|
||||
}
|
||||
else if (type == "ws2812spi")
|
||||
{
|
||||
device = new LedDeviceWs2812SPI(
|
||||
deviceConfig["output"].asString(),
|
||||
deviceConfig.get("rate",2857143).asInt(),
|
||||
deviceConfig.get("spimode",0).asInt(),
|
||||
deviceConfig.get("invert",false).asBool()
|
||||
);
|
||||
}
|
||||
else if (type == "sk6812rgbw-spi")
|
||||
{
|
||||
device = new LedDeviceSk6812SPI(
|
||||
deviceConfig["output"].asString(),
|
||||
deviceConfig.get("rate",2857143).asInt(),
|
||||
deviceConfig.get("white_algorithm","").asString(),
|
||||
deviceConfig.get("spimode",0).asInt(),
|
||||
deviceConfig.get("invert",false).asBool()
|
||||
);
|
||||
}
|
||||
#endif
|
||||
#ifdef ENABLE_TINKERFORGE
|
||||
else if (type=="tinkerforge")
|
||||
{
|
||||
device = new LedDeviceTinkerforge(
|
||||
deviceConfig.get("output", "127.0.0.1").asString(),
|
||||
deviceConfig.get("port", 4223).asInt(),
|
||||
deviceConfig["uid"].asString(),
|
||||
deviceConfig["rate"].asInt()
|
||||
);
|
||||
|
||||
}
|
||||
#endif
|
||||
else if (type == "rawhid")
|
||||
{
|
||||
const int delay_ms = deviceConfig["delayAfterConnect"].asInt();
|
||||
auto VendorIdString = deviceConfig.get("VID", "0x2341").asString();
|
||||
auto ProductIdString = deviceConfig.get("PID", "0x8036").asString();
|
||||
|
||||
// Convert HEX values to integer
|
||||
auto VendorId = std::stoul(VendorIdString, nullptr, 16);
|
||||
auto ProductId = std::stoul(ProductIdString, nullptr, 16);
|
||||
|
||||
device = new LedDeviceRawHID(VendorId, ProductId, delay_ms);
|
||||
}
|
||||
else if (type == "lightpack")
|
||||
{
|
||||
device = new LedDeviceLightpack(
|
||||
deviceConfig.get("output", "").asString()
|
||||
);
|
||||
}
|
||||
else if (type == "multi-lightpack")
|
||||
{
|
||||
device = new LedDeviceMultiLightpack();
|
||||
}
|
||||
else if (type == "paintpack")
|
||||
{
|
||||
const int delay_ms = deviceConfig["delayAfterConnect"].asInt();
|
||||
auto VendorIdString = deviceConfig.get("VID", "0x0EBF").asString();
|
||||
auto ProductIdString = deviceConfig.get("PID", "0x0025").asString();
|
||||
|
||||
// Convert HEX values to integer
|
||||
auto VendorId = std::stoul(VendorIdString, nullptr, 16);
|
||||
auto ProductId = std::stoul(ProductIdString, nullptr, 16);
|
||||
|
||||
device = new LedDevicePaintpack(VendorId, ProductId, delay_ms);
|
||||
}
|
||||
else if (type == "piblaster")
|
||||
{
|
||||
const std::string output = deviceConfig.get("output", "").asString();
|
||||
const std::string assignment = deviceConfig.get("assignment", "").asString();
|
||||
const Json::Value gpioMapping = deviceConfig.get("gpiomap", Json::nullValue);
|
||||
|
||||
if (! assignment.empty())
|
||||
if (dev.first == type)
|
||||
{
|
||||
throw std::runtime_error("Piblaster: The piblaster configuration syntax has changed in this version.");
|
||||
device = dev.second(deviceConfig);
|
||||
LedDevice::setActiveDevice(dev.first);
|
||||
Info(log,"LedDevice '%s' configured.", dev.first.c_str());
|
||||
break;
|
||||
}
|
||||
if (gpioMapping.isNull())
|
||||
{
|
||||
throw std::runtime_error("Piblaster: no gpiomap defined.");
|
||||
}
|
||||
device = new LedDevicePiBlaster(output, gpioMapping);
|
||||
}
|
||||
else if (type == "sedu")
|
||||
{
|
||||
device = new LedDeviceSedu(
|
||||
deviceConfig["output"].asString(),
|
||||
deviceConfig["rate"].asInt()
|
||||
);
|
||||
}
|
||||
else if (type == "hyperion-usbasp-ws2801")
|
||||
{
|
||||
device = new LedDeviceHyperionUsbasp(LedDeviceHyperionUsbasp::CMD_WRITE_WS2801);
|
||||
}
|
||||
else if (type == "hyperion-usbasp-ws2812")
|
||||
{
|
||||
device = new LedDeviceHyperionUsbasp(LedDeviceHyperionUsbasp::CMD_WRITE_WS2812);
|
||||
}
|
||||
else if (type == "philipshue")
|
||||
{
|
||||
const std::string output = deviceConfig["output"].asString();
|
||||
const std::string username = deviceConfig.get("username", "newdeveloper").asString();
|
||||
const bool switchOffOnBlack = deviceConfig.get("switchOffOnBlack", true).asBool();
|
||||
const int transitiontime = deviceConfig.get("transitiontime", 1).asInt();
|
||||
std::vector<unsigned int> lightIds;
|
||||
for (Json::Value::ArrayIndex i = 0; i < deviceConfig["lightIds"].size(); i++) {
|
||||
lightIds.push_back(deviceConfig["lightIds"][i].asInt());
|
||||
}
|
||||
device = new LedDevicePhilipsHue(output, username, switchOffOnBlack, transitiontime, lightIds);
|
||||
}
|
||||
else if (type == "atmoorb")
|
||||
{
|
||||
const std::string output = deviceConfig["output"].asString();
|
||||
const bool useOrbSmoothing = deviceConfig.get("useOrbSmoothing", false).asBool();
|
||||
const int transitiontime = deviceConfig.get("transitiontime", 1).asInt();
|
||||
const int skipSmoothingDiff = deviceConfig.get("skipSmoothingDiff", 0).asInt();
|
||||
const int port = deviceConfig.get("port", 1).asInt();
|
||||
const int numLeds = deviceConfig.get("numLeds", 1).asInt();
|
||||
const std::string orbId = deviceConfig["orbIds"].asString();
|
||||
std::vector<unsigned int> orbIds;
|
||||
|
||||
// If we find multiple Orb ids separate them and add to list
|
||||
const std::string separator (",");
|
||||
if (orbId.find(separator) != std::string::npos) {
|
||||
std::stringstream ss(orbId);
|
||||
std::vector<int> output;
|
||||
unsigned int i;
|
||||
while (ss >> i) {
|
||||
orbIds.push_back(i);
|
||||
if (ss.peek() == ',' || ss.peek() == ' ')
|
||||
ss.ignore();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
orbIds.push_back(atoi(orbId.c_str()));
|
||||
}
|
||||
|
||||
device = new LedDeviceAtmoOrb(output, useOrbSmoothing, transitiontime, skipSmoothingDiff, port, numLeds, orbIds);
|
||||
}
|
||||
else if (type == "fadecandy")
|
||||
{
|
||||
device = new LedDeviceFadeCandy(deviceConfig);
|
||||
}
|
||||
else if (type == "udp")
|
||||
{
|
||||
device = new LedDeviceUdp(
|
||||
deviceConfig["output"].asString(),
|
||||
deviceConfig["protocol"].asInt(),
|
||||
deviceConfig["maxpacket"].asInt()
|
||||
);
|
||||
}
|
||||
else if (type == "udpraw")
|
||||
{
|
||||
device = new LedDeviceUdpRaw(
|
||||
deviceConfig["output"].asString(),
|
||||
deviceConfig.get("latchtime",500000).asInt()
|
||||
);
|
||||
}
|
||||
else if (type == "e131")
|
||||
{
|
||||
device = new LedDeviceUdpE131(
|
||||
deviceConfig["output"].asString(),
|
||||
deviceConfig.get("latchtime",104000).asInt(),
|
||||
deviceConfig.get("universe",1).asInt()
|
||||
);
|
||||
}
|
||||
else if (type == "tpm2")
|
||||
{
|
||||
device = new LedDeviceTpm2(
|
||||
deviceConfig["output"].asString(),
|
||||
deviceConfig["rate"].asInt()
|
||||
);
|
||||
}
|
||||
else if (type == "atmo")
|
||||
{
|
||||
device = new LedDeviceAtmo(
|
||||
deviceConfig["output"].asString(),
|
||||
38400
|
||||
);
|
||||
}
|
||||
#ifdef ENABLE_WS2812BPWM
|
||||
else if (type == "ws2812b")
|
||||
{
|
||||
device = new LedDeviceWS2812b();
|
||||
}
|
||||
#endif
|
||||
#ifdef ENABLE_WS281XPWM
|
||||
else if (type == "ws281x")
|
||||
{
|
||||
device = new LedDeviceWS281x(
|
||||
deviceConfig.get("gpio", 18).asInt(),
|
||||
deviceConfig.get("leds", 256).asInt(),
|
||||
deviceConfig.get("freq", (Json::UInt)800000ul).asInt(),
|
||||
deviceConfig.get("dmanum", 5).asInt(),
|
||||
deviceConfig.get("pwmchannel", 0).asInt(),
|
||||
deviceConfig.get("invert", 0).asInt(),
|
||||
deviceConfig.get("rgbw", 0).asInt(),
|
||||
deviceConfig.get("white_algorithm","").asString()
|
||||
);
|
||||
}
|
||||
#endif
|
||||
else if (type == "file")
|
||||
{
|
||||
device = new LedDeviceFile( deviceConfig.get("output", "/dev/null").asString() );
|
||||
}
|
||||
else
|
||||
|
||||
if (device == nullptr)
|
||||
{
|
||||
Error(log, "Dummy device used, because configured device '%s' is unknown", type.c_str() );
|
||||
throw std::runtime_error("unknown device");
|
||||
}
|
||||
}
|
||||
catch(std::exception e)
|
||||
catch(std::exception& e)
|
||||
{
|
||||
|
||||
Error(log, "Dummy device used, because configured device '%s' throws error '%s'", type.c_str(), e.what());
|
||||
device = new LedDeviceFile( "/dev/null" );
|
||||
const Json::Value dummyDeviceConfig;
|
||||
device = LedDeviceFile::construct(Json::nullValue);
|
||||
}
|
||||
|
||||
device->open();
|
||||
|
@ -1,6 +1,6 @@
|
||||
#include "LedDeviceFadeCandy.h"
|
||||
|
||||
static const signed MAX_NUM_LEDS = 10000; // OPC can handle 21845 leds - in theory, fadecandy device should handle 10000 leds
|
||||
static const signed MAX_NUM_LEDS = 10000; // OPC can handle 21845 leds - in theory, fadecandy device should handle 10000 leds
|
||||
static const unsigned OPC_SET_PIXELS = 0; // OPC command codes
|
||||
static const unsigned OPC_SYS_EX = 255; // OPC command codes
|
||||
static const unsigned OPC_HEADER_SIZE = 4; // OPC header size
|
||||
@ -10,13 +10,6 @@ LedDeviceFadeCandy::LedDeviceFadeCandy(const Json::Value &deviceConfig)
|
||||
: LedDevice()
|
||||
{
|
||||
setConfig(deviceConfig);
|
||||
_opc_data.resize( OPC_HEADER_SIZE );
|
||||
_opc_data[0] = _channel;
|
||||
_opc_data[1] = OPC_SET_PIXELS;
|
||||
_opc_data[2] = 0;
|
||||
_opc_data[3] = 0;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -25,8 +18,16 @@ LedDeviceFadeCandy::~LedDeviceFadeCandy()
|
||||
_client.close();
|
||||
}
|
||||
|
||||
LedDevice* LedDeviceFadeCandy::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDeviceFadeCandy(deviceConfig);
|
||||
}
|
||||
|
||||
|
||||
bool LedDeviceFadeCandy::setConfig(const Json::Value &deviceConfig)
|
||||
{
|
||||
_client.close();
|
||||
|
||||
_host = deviceConfig.get("output", "127.0.0.1").asString();
|
||||
_port = deviceConfig.get("port", 7890).asInt();
|
||||
_channel = deviceConfig.get("channel", 0).asInt();
|
||||
@ -49,6 +50,12 @@ bool LedDeviceFadeCandy::setConfig(const Json::Value &deviceConfig)
|
||||
_whitePoint_b = whitePointConfig[2].asDouble();
|
||||
}
|
||||
|
||||
_opc_data.resize( OPC_HEADER_SIZE );
|
||||
_opc_data[0] = _channel;
|
||||
_opc_data[1] = OPC_SET_PIXELS;
|
||||
_opc_data[2] = 0;
|
||||
_opc_data[3] = 0;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,6 @@
|
||||
|
||||
// Leddevice includes
|
||||
#include <leddevice/LedDevice.h>
|
||||
#include <json/json.h>
|
||||
|
||||
///
|
||||
/// Implementation of the LedDevice interface for sending to
|
||||
@ -48,6 +47,9 @@ public:
|
||||
///
|
||||
virtual ~LedDeviceFadeCandy();
|
||||
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Sets configuration
|
||||
///
|
||||
@ -66,7 +68,6 @@ public:
|
||||
/// Switch the leds off
|
||||
virtual int switchOff();
|
||||
|
||||
|
||||
private:
|
||||
QTcpSocket _client;
|
||||
std::string _host;
|
||||
@ -115,3 +116,4 @@ private:
|
||||
void sendFadeCandyConfiguration();
|
||||
|
||||
};
|
||||
|
||||
|
@ -2,16 +2,32 @@
|
||||
// Local-Hyperion includes
|
||||
#include "LedDeviceFile.h"
|
||||
|
||||
LedDeviceFile::LedDeviceFile(const std::string& output)
|
||||
LedDeviceFile::LedDeviceFile(const Json::Value &deviceConfig)
|
||||
: LedDevice()
|
||||
, _ofs( output.empty() ? "/dev/null" : output.c_str())
|
||||
{
|
||||
// empty
|
||||
setConfig(deviceConfig);
|
||||
}
|
||||
|
||||
LedDeviceFile::~LedDeviceFile()
|
||||
{
|
||||
// empty
|
||||
}
|
||||
|
||||
LedDevice* LedDeviceFile::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDeviceFile(deviceConfig);
|
||||
}
|
||||
|
||||
bool LedDeviceFile::setConfig(const Json::Value &deviceConfig)
|
||||
{
|
||||
if ( _ofs.is_open() )
|
||||
{
|
||||
_ofs.close();
|
||||
}
|
||||
|
||||
std::string fileName = deviceConfig.get("output","/dev/null").asString();
|
||||
_ofs.open( fileName.c_str() );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int LedDeviceFile::write(const std::vector<ColorRgb> & ledValues)
|
||||
|
@ -14,15 +14,27 @@ class LedDeviceFile : public LedDevice
|
||||
{
|
||||
public:
|
||||
///
|
||||
/// Constructs the test-device, which opens an output stream to the file
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
LedDeviceFile(const std::string& output);
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDeviceFile(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Destructor of this test-device
|
||||
///
|
||||
virtual ~LedDeviceFile();
|
||||
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Sets configuration
|
||||
///
|
||||
/// @param deviceConfig the json device config
|
||||
/// @return true if success
|
||||
virtual bool setConfig(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Writes the given led-color values to the output stream
|
||||
///
|
||||
|
@ -11,12 +11,12 @@ uint16_t LedDeviceHyperionUsbasp::_usbProductId = 0x05dc;
|
||||
std::string LedDeviceHyperionUsbasp::_usbProductDescription = "Hyperion led controller";
|
||||
|
||||
|
||||
LedDeviceHyperionUsbasp::LedDeviceHyperionUsbasp(uint8_t writeLedsCommand)
|
||||
LedDeviceHyperionUsbasp::LedDeviceHyperionUsbasp(const Json::Value &deviceConfig)
|
||||
: LedDevice()
|
||||
, _writeLedsCommand(writeLedsCommand)
|
||||
, _libusbContext(nullptr)
|
||||
, _deviceHandle(nullptr)
|
||||
{
|
||||
setConfig(deviceConfig);
|
||||
}
|
||||
|
||||
LedDeviceHyperionUsbasp::~LedDeviceHyperionUsbasp()
|
||||
@ -37,6 +37,25 @@ LedDeviceHyperionUsbasp::~LedDeviceHyperionUsbasp()
|
||||
}
|
||||
}
|
||||
|
||||
bool LedDeviceHyperionUsbasp::setConfig(const Json::Value &deviceConfig)
|
||||
{
|
||||
std::string ledType = deviceConfig.get("output", "ws2801").asString();
|
||||
if (ledType != "ws2801" && ledType != "ws2812")
|
||||
{
|
||||
throw std::runtime_error("HyperionUsbasp: invalid output; must be 'ws2801' or 'ws2812'.");
|
||||
}
|
||||
|
||||
_writeLedsCommand = (ledType == "ws2801") ? CMD_WRITE_WS2801 : CMD_WRITE_WS2812;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
LedDevice* LedDeviceHyperionUsbasp::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDeviceHyperionUsbasp(deviceConfig);
|
||||
}
|
||||
|
||||
|
||||
int LedDeviceHyperionUsbasp::open()
|
||||
{
|
||||
int error;
|
||||
|
@ -24,9 +24,21 @@ public:
|
||||
};
|
||||
|
||||
///
|
||||
/// Constructs the LedDeviceLightpack
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
LedDeviceHyperionUsbasp(uint8_t writeLedsCommand);
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDeviceHyperionUsbasp(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Sets configuration
|
||||
///
|
||||
/// @param deviceConfig the json device config
|
||||
/// @return true if success
|
||||
bool setConfig(const Json::Value &deviceConfig);
|
||||
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Destructor of the LedDevice; closes the output device if it is open
|
||||
@ -70,7 +82,7 @@ private:
|
||||
|
||||
private:
|
||||
/// command to write the leds
|
||||
const uint8_t _writeLedsCommand;
|
||||
uint8_t _writeLedsCommand;
|
||||
|
||||
/// libusb context
|
||||
libusb_context * _libusbContext;
|
||||
|
@ -45,6 +45,12 @@ LedDeviceLightpack::LedDeviceLightpack(const std::string & serialNumber)
|
||||
_ledCount = -1;
|
||||
}
|
||||
|
||||
LedDeviceLightpack::LedDeviceLightpack(const Json::Value &deviceConfig)
|
||||
: LedDeviceLightpack()
|
||||
{
|
||||
setConfig(deviceConfig);
|
||||
}
|
||||
|
||||
LedDeviceLightpack::~LedDeviceLightpack()
|
||||
{
|
||||
if (_deviceHandle != nullptr)
|
||||
@ -63,6 +69,18 @@ LedDeviceLightpack::~LedDeviceLightpack()
|
||||
}
|
||||
}
|
||||
|
||||
bool LedDeviceLightpack::setConfig(const Json::Value &deviceConfig)
|
||||
{
|
||||
_serialNumber = deviceConfig.get("output", "").asString();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
LedDevice* LedDeviceLightpack::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDeviceLightpack(deviceConfig);
|
||||
}
|
||||
|
||||
int LedDeviceLightpack::open()
|
||||
{
|
||||
int error;
|
||||
|
@ -23,6 +23,22 @@ public:
|
||||
/// @param serialNumber serial output device
|
||||
///
|
||||
LedDeviceLightpack(const std::string & serialNumber = "");
|
||||
///
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDeviceLightpack(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Sets configuration
|
||||
///
|
||||
/// @param deviceConfig the json device config
|
||||
/// @return true if success
|
||||
bool setConfig(const Json::Value &deviceConfig);
|
||||
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Destructor of the LedDevice; closes the output device if it is open
|
||||
|
@ -10,11 +10,16 @@
|
||||
// hyperion local includes
|
||||
#include "LedDeviceLpd6803.h"
|
||||
|
||||
LedDeviceLpd6803::LedDeviceLpd6803(const std::string& outputDevice, const unsigned baudrate)
|
||||
: LedSpiDevice(outputDevice, baudrate)
|
||||
LedDeviceLpd6803::LedDeviceLpd6803(const Json::Value &deviceConfig)
|
||||
: LedSpiDevice(deviceConfig)
|
||||
{
|
||||
}
|
||||
|
||||
LedDevice* LedDeviceLpd6803::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDeviceLpd6803(deviceConfig);
|
||||
}
|
||||
|
||||
int LedDeviceLpd6803::write(const std::vector<ColorRgb> &ledValues)
|
||||
{
|
||||
unsigned messageLength = 4 + 2*ledValues.size() + ledValues.size()/8 + 1;
|
||||
|
@ -18,12 +18,14 @@ class LedDeviceLpd6803 : public LedSpiDevice
|
||||
{
|
||||
public:
|
||||
///
|
||||
/// Constructs the LedDevice for a string containing leds of the type LDP6803
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
/// @param[in] outputDevice The name of the output device (eg '/dev/spidev0.0')
|
||||
/// @param[in] baudrate The used baudrate for writing to the output device
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDeviceLpd6803(const std::string& outputDevice, const unsigned baudrate);
|
||||
LedDeviceLpd6803(const Json::Value &deviceConfig);
|
||||
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Writes the led color values to the led-device
|
||||
|
@ -10,10 +10,14 @@
|
||||
// hyperion local includes
|
||||
#include "LedDeviceLpd8806.h"
|
||||
|
||||
LedDeviceLpd8806::LedDeviceLpd8806(const std::string& outputDevice, const unsigned baudrate)
|
||||
: LedSpiDevice(outputDevice, baudrate)
|
||||
LedDeviceLpd8806::LedDeviceLpd8806(const Json::Value &deviceConfig)
|
||||
: LedSpiDevice(deviceConfig)
|
||||
{
|
||||
// empty
|
||||
}
|
||||
|
||||
LedDevice* LedDeviceLpd8806::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDeviceLpd8806(deviceConfig);
|
||||
}
|
||||
|
||||
int LedDeviceLpd8806::write(const std::vector<ColorRgb> &ledValues)
|
||||
|
@ -79,12 +79,14 @@ class LedDeviceLpd8806 : public LedSpiDevice
|
||||
{
|
||||
public:
|
||||
///
|
||||
/// Constructs the LedDevice for a string containing leds of the type LPD8806
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
/// @param[in] outputDevice The name of the output device (eg '/dev/spidev0.0')
|
||||
/// @param[in] baudrate The used baudrate for writing to the output device
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDeviceLpd8806(const std::string& outputDevice, const unsigned baudrate);
|
||||
LedDeviceLpd8806(const Json::Value &deviceConfig);
|
||||
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Writes the led color values to the led-device
|
||||
|
@ -17,7 +17,7 @@ bool compareLightpacks(LedDeviceLightpack * lhs, LedDeviceLightpack * rhs)
|
||||
return lhs->getSerialNumber() < rhs->getSerialNumber();
|
||||
}
|
||||
|
||||
LedDeviceMultiLightpack::LedDeviceMultiLightpack()
|
||||
LedDeviceMultiLightpack::LedDeviceMultiLightpack(const Json::Value &)
|
||||
: LedDevice()
|
||||
, _lightpacks()
|
||||
{
|
||||
@ -31,6 +31,11 @@ LedDeviceMultiLightpack::~LedDeviceMultiLightpack()
|
||||
}
|
||||
}
|
||||
|
||||
LedDevice* LedDeviceMultiLightpack::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDeviceMultiLightpack(deviceConfig);
|
||||
}
|
||||
|
||||
int LedDeviceMultiLightpack::open()
|
||||
{
|
||||
// retrieve a list with Lightpack serials
|
||||
|
@ -20,15 +20,20 @@ class LedDeviceMultiLightpack : public LedDevice
|
||||
{
|
||||
public:
|
||||
///
|
||||
/// Constructs the LedDeviceMultiLightpack
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
LedDeviceMultiLightpack();
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDeviceMultiLightpack(const Json::Value &);
|
||||
|
||||
///
|
||||
/// Destructor of the LedDevice; closes the output device if it is open
|
||||
///
|
||||
virtual ~LedDeviceMultiLightpack();
|
||||
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Opens and configures the output device7
|
||||
///
|
||||
|
@ -11,10 +11,14 @@
|
||||
// hyperion local includes
|
||||
#include "LedDeviceP9813.h"
|
||||
|
||||
LedDeviceP9813::LedDeviceP9813(const std::string& outputDevice, const unsigned baudrate)
|
||||
: LedSpiDevice(outputDevice, baudrate, 0)
|
||||
LedDeviceP9813::LedDeviceP9813(const Json::Value &deviceConfig)
|
||||
: LedSpiDevice(deviceConfig)
|
||||
{
|
||||
// empty
|
||||
}
|
||||
|
||||
LedDevice* LedDeviceP9813::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDeviceP9813(deviceConfig);
|
||||
}
|
||||
|
||||
int LedDeviceP9813::write(const std::vector<ColorRgb> &ledValues)
|
||||
|
@ -13,12 +13,14 @@ class LedDeviceP9813 : public LedSpiDevice
|
||||
{
|
||||
public:
|
||||
///
|
||||
/// Constructs the LedDevice for a string containing leds of the type P9813
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
/// @param outputDevice The name of the output device (eg '/etc/SpiDev.0.0')
|
||||
/// @param baudrate The used baudrate for writing to the output device
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDeviceP9813(const std::string& outputDevice, const unsigned baudrate);
|
||||
LedDeviceP9813(const Json::Value &deviceConfig);
|
||||
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Writes the led color values to the led-device
|
||||
|
@ -3,12 +3,16 @@
|
||||
#include "LedDevicePaintpack.h"
|
||||
|
||||
// Use out report HID device
|
||||
LedDevicePaintpack::LedDevicePaintpack(const unsigned short VendorId, const unsigned short ProductId, int delayAfterConnect_ms)
|
||||
: LedHIDDevice(VendorId, ProductId, delayAfterConnect_ms, false)
|
||||
LedDevicePaintpack::LedDevicePaintpack(const Json::Value &deviceConfig)
|
||||
: LedHIDDevice(deviceConfig)
|
||||
{
|
||||
// empty
|
||||
_useFeature = false;
|
||||
}
|
||||
|
||||
LedDevice* LedDevicePaintpack::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDevicePaintpack(deviceConfig);
|
||||
}
|
||||
|
||||
int LedDevicePaintpack::write(const std::vector<ColorRgb> & ledValues)
|
||||
{
|
||||
|
@ -12,10 +12,15 @@
|
||||
class LedDevicePaintpack : public LedHIDDevice
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* Constructs the paintpack device
|
||||
*/
|
||||
LedDevicePaintpack(const unsigned short VendorId, const unsigned short ProductId, int delayAfterConnect_ms);
|
||||
///
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDevicePaintpack(const Json::Value &deviceConfig);
|
||||
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Writes the RGB-Color values to the leds.
|
||||
|
@ -164,14 +164,11 @@ CiColor PhilipsHueLight::rgbToCiColor(float red, float green, float blue)
|
||||
return xy;
|
||||
}
|
||||
|
||||
LedDevicePhilipsHue::LedDevicePhilipsHue(const std::string& output, const std::string& username, bool switchOffOnBlack, int transitiontime, std::vector<unsigned int> lightIds)
|
||||
LedDevicePhilipsHue::LedDevicePhilipsHue(const Json::Value &deviceConfig)
|
||||
: LedDevice()
|
||||
, host(output.c_str())
|
||||
, username(username.c_str())
|
||||
, switchOffOnBlack(switchOffOnBlack)
|
||||
, transitiontime(transitiontime)
|
||||
, lightIds(lightIds)
|
||||
{
|
||||
setConfig(deviceConfig);
|
||||
|
||||
manager = new QNetworkAccessManager();
|
||||
timer.setInterval(3000);
|
||||
timer.setSingleShot(true);
|
||||
@ -183,6 +180,26 @@ LedDevicePhilipsHue::~LedDevicePhilipsHue()
|
||||
delete manager;
|
||||
}
|
||||
|
||||
bool LedDevicePhilipsHue::setConfig(const Json::Value &deviceConfig)
|
||||
{
|
||||
host = deviceConfig["output"].asString().c_str();
|
||||
username = deviceConfig.get("username", "newdeveloper").asString().c_str();
|
||||
switchOffOnBlack = deviceConfig.get("switchOffOnBlack", true).asBool();
|
||||
transitiontime = deviceConfig.get("transitiontime", 1).asInt();
|
||||
lightIds.clear();
|
||||
for (Json::Value::ArrayIndex i = 0; i < deviceConfig["lightIds"].size(); i++)
|
||||
{
|
||||
lightIds.push_back(deviceConfig["lightIds"][i].asInt());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
LedDevice* LedDevicePhilipsHue::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDevicePhilipsHue(deviceConfig);
|
||||
}
|
||||
|
||||
int LedDevicePhilipsHue::write(const std::vector<ColorRgb> & ledValues)
|
||||
{
|
||||
// Save light states if not done before.
|
||||
|
@ -115,22 +115,27 @@ class LedDevicePhilipsHue: public LedDevice {
|
||||
|
||||
public:
|
||||
///
|
||||
/// Constructs the device.
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
/// @param output the ip address of the bridge
|
||||
/// @param username username of the hue bridge (default: newdeveloper)
|
||||
/// @param switchOffOnBlack kill lights for black (default: false)
|
||||
/// @param transitiontime the time duration a light change takes in multiples of 100 ms (default: 400 ms).
|
||||
/// @param lightIds light ids of the lights to control if not starting at one in ascending order.
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDevicePhilipsHue(const std::string& output, const std::string& username = "newdeveloper", bool switchOffOnBlack =
|
||||
false, int transitiontime = 1, std::vector<unsigned int> lightIds = std::vector<unsigned int>());
|
||||
LedDevicePhilipsHue(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Destructor of this device
|
||||
///
|
||||
virtual ~LedDevicePhilipsHue();
|
||||
|
||||
///
|
||||
/// Sets configuration
|
||||
///
|
||||
/// @param deviceConfig the json device config
|
||||
/// @return true if success
|
||||
bool setConfig(const Json::Value &deviceConfig);
|
||||
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Sends the given led-color values via put request to the hue system
|
||||
///
|
||||
|
@ -13,11 +13,9 @@
|
||||
// Local LedDevice includes
|
||||
#include "LedDevicePiBlaster.h"
|
||||
|
||||
LedDevicePiBlaster::LedDevicePiBlaster(const std::string & deviceName, const Json::Value & gpioMapping)
|
||||
: _deviceName(deviceName)
|
||||
, _fid(nullptr)
|
||||
LedDevicePiBlaster::LedDevicePiBlaster(const Json::Value &deviceConfig)
|
||||
: _fid(nullptr)
|
||||
{
|
||||
|
||||
signal(SIGPIPE, SIG_IGN);
|
||||
|
||||
// initialise the mapping tables
|
||||
@ -32,7 +30,31 @@ LedDevicePiBlaster::LedDevicePiBlaster(const std::string & deviceName, const Jso
|
||||
_gpio_to_color[i] = 'z';
|
||||
}
|
||||
|
||||
// walk through the json config and populate the mapping tables
|
||||
setConfig(deviceConfig);
|
||||
}
|
||||
|
||||
LedDevicePiBlaster::~LedDevicePiBlaster()
|
||||
{
|
||||
// Close the device (if it is opened)
|
||||
if (_fid != nullptr)
|
||||
{
|
||||
fclose(_fid);
|
||||
_fid = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool LedDevicePiBlaster::setConfig(const Json::Value &deviceConfig)
|
||||
{
|
||||
_deviceName = deviceConfig.get("output", "").asString();
|
||||
Json::Value gpioMapping = deviceConfig.get("gpiomap", Json::nullValue);
|
||||
|
||||
if (gpioMapping.isNull())
|
||||
{
|
||||
throw std::runtime_error("Piblaster: no gpiomap defined.");
|
||||
}
|
||||
|
||||
// walk through the json config and populate the mapping tables
|
||||
for (const Json::Value& gpioMap : gpioMapping)
|
||||
{
|
||||
const int gpio = gpioMap.get("gpio",-1).asInt();
|
||||
@ -47,16 +69,12 @@ LedDevicePiBlaster::LedDevicePiBlaster(const std::string & deviceName, const Jso
|
||||
Warning( _log, "IGNORING gpio %d ledindex %d color %c", gpio,ledindex, ledcolor[0]);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
LedDevicePiBlaster::~LedDevicePiBlaster()
|
||||
LedDevice* LedDevicePiBlaster::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
// Close the device (if it is opened)
|
||||
if (_fid != nullptr)
|
||||
{
|
||||
fclose(_fid);
|
||||
_fid = nullptr;
|
||||
}
|
||||
return new LedDevicePiBlaster(deviceConfig);
|
||||
}
|
||||
|
||||
int LedDevicePiBlaster::open()
|
||||
|
@ -14,15 +14,24 @@ class LedDevicePiBlaster : public LedDevice
|
||||
{
|
||||
public:
|
||||
///
|
||||
/// Constructs the PiBlaster device which writes to the indicated device and for the assigned
|
||||
/// channels
|
||||
/// @param deviceName The name of the output device
|
||||
/// @param gpioMapping The RGB-Channel assignment json object
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
LedDevicePiBlaster(const std::string & deviceName, const Json::Value & gpioMapping);
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDevicePiBlaster(const Json::Value &deviceConfig);
|
||||
|
||||
virtual ~LedDevicePiBlaster();
|
||||
|
||||
///
|
||||
/// Sets configuration
|
||||
///
|
||||
/// @param deviceConfig the json device config
|
||||
/// @return true if success
|
||||
bool setConfig(const Json::Value &deviceConfig);
|
||||
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Attempts to open the piblaster-device. This will only succeed if the device is not yet open
|
||||
/// and the device is available.
|
||||
@ -50,7 +59,7 @@ public:
|
||||
private:
|
||||
|
||||
/// The name of the output device (very likely '/dev/pi-blaster')
|
||||
const std::string _deviceName;
|
||||
std::string _deviceName;
|
||||
|
||||
int _gpio_to_led[64];
|
||||
char _gpio_to_color[64];
|
||||
|
@ -12,10 +12,12 @@
|
||||
#include "LedDeviceRawHID.h"
|
||||
|
||||
// Use feature report HID device
|
||||
LedDeviceRawHID::LedDeviceRawHID(const unsigned short VendorId, const unsigned short ProductId, int delayAfterConnect_ms)
|
||||
: LedHIDDevice(VendorId, ProductId, delayAfterConnect_ms, true)
|
||||
LedDeviceRawHID::LedDeviceRawHID(const Json::Value &deviceConfig)
|
||||
: LedHIDDevice(deviceConfig)
|
||||
, _timer()
|
||||
{
|
||||
_useFeature = true;
|
||||
|
||||
// setup the timer
|
||||
_timer.setSingleShot(false);
|
||||
_timer.setInterval(5000);
|
||||
@ -25,6 +27,11 @@ LedDeviceRawHID::LedDeviceRawHID(const unsigned short VendorId, const unsigned s
|
||||
_timer.start();
|
||||
}
|
||||
|
||||
LedDevice* LedDeviceRawHID::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDeviceRawHID(deviceConfig);
|
||||
}
|
||||
|
||||
int LedDeviceRawHID::write(const std::vector<ColorRgb> & ledValues)
|
||||
{
|
||||
// Resize buffer if required
|
||||
|
@ -18,9 +18,14 @@ class LedDeviceRawHID : public LedHIDDevice
|
||||
|
||||
public:
|
||||
///
|
||||
/// Constructs the LedDevice for attached RawHID device
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
LedDeviceRawHID(const unsigned short VendorId, const unsigned short ProductId, int delayAfterConnect_ms);
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDeviceRawHID(const Json::Value &deviceConfig);
|
||||
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Writes the led color values to the led-device
|
||||
|
31
libsrc/leddevice/LedDeviceSchemas.qrc
Normal file
31
libsrc/leddevice/LedDeviceSchemas.qrc
Normal file
@ -0,0 +1,31 @@
|
||||
<RCC>
|
||||
<qresource prefix="/">
|
||||
<file alias="schema-adalightapa102">schemas/schema-adalightapa102.json</file>
|
||||
<file alias="schema-adalight">schemas/schema-adalight.json</file>
|
||||
<file alias="schema-apa102">schemas/schema-apa102.json</file>
|
||||
<file alias="schema-atmo">schemas/schema-atmo.json</file>
|
||||
<file alias="schema-atmoorb">schemas/schema-atmoorb.json</file>
|
||||
<file alias="schema-e131">schemas/schema-e131.json</file>
|
||||
<file alias="schema-fadecandy">schemas/schema-fadecandy.json</file>
|
||||
<file alias="schema-file">schemas/schema-file.json</file>
|
||||
<file alias="schema-hyperion-usbasp">schemas/schema-hyperion-usbasp.json</file>
|
||||
<file alias="schema-lightpack">schemas/schema-lightpack.json</file>
|
||||
<file alias="schema-lpd6803">schemas/schema-lpd6803.json</file>
|
||||
<file alias="schema-lpd8806">schemas/schema-lpd8806.json</file>
|
||||
<file alias="schema-multi-lightpack">schemas/schema-multi-lightpack.json</file>
|
||||
<file alias="schema-p9813">schemas/schema-p9813.json</file>
|
||||
<file alias="schema-paintpack">schemas/schema-paintpack.json</file>
|
||||
<file alias="schema-philipshue">schemas/schema-philipshue.json</file>
|
||||
<file alias="schema-piblaster">schemas/schema-piblaster.json</file>
|
||||
<file alias="schema-rawhid">schemas/schema-rawhid.json</file>
|
||||
<file alias="schema-sedu">schemas/schema-sedu.json</file>
|
||||
<file alias="schema-sk6812rgbw-spi">schemas/schema-sk6812rgbw-spi.json</file>
|
||||
<file alias="schema-tinkerforge">schemas/schema-tinkerforge.json</file>
|
||||
<file alias="schema-tmp2net">schemas/schema-tmp2net.json</file>
|
||||
<file alias="schema-tpm2.json">schemas/schema-tpm2.json</file>
|
||||
<file alias="schema-udpraw">schemas/schema-udpraw.json</file>
|
||||
<file alias="schema-ws2801">schemas/schema-ws2801.json</file>
|
||||
<file alias="schema-ws2812spi">schemas/schema-ws2812spi.json</file>
|
||||
<file alias="schema-ws281x">schemas/schema-ws281x.json</file>
|
||||
</qresource>
|
||||
</RCC>
|
@ -17,12 +17,17 @@ struct FrameSpec
|
||||
size_t size;
|
||||
};
|
||||
|
||||
LedDeviceSedu::LedDeviceSedu(const std::string& outputDevice, const unsigned baudrate)
|
||||
: LedRs232Device(outputDevice, baudrate)
|
||||
LedDeviceSedu::LedDeviceSedu(const Json::Value &deviceConfig)
|
||||
: LedRs232Device(deviceConfig)
|
||||
{
|
||||
// empty
|
||||
}
|
||||
|
||||
LedDevice* LedDeviceSedu::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDeviceSedu(deviceConfig);
|
||||
}
|
||||
|
||||
int LedDeviceSedu::write(const std::vector<ColorRgb> &ledValues)
|
||||
{
|
||||
if (_ledBuffer.size() == 0)
|
||||
|
@ -13,12 +13,14 @@ class LedDeviceSedu : public LedRs232Device
|
||||
{
|
||||
public:
|
||||
///
|
||||
/// Constructs the LedDevice for attached via SEDU device
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
/// @param outputDevice The name of the output device (eg '/dev/ttyS0')
|
||||
/// @param baudrate The used baudrate for writing to the output device
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDeviceSedu(const std::string& outputDevice, const unsigned baudrate);
|
||||
LedDeviceSedu(const Json::Value &deviceConfig);
|
||||
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Writes the led color values to the led-device
|
||||
|
@ -11,10 +11,8 @@
|
||||
// hyperion local includes
|
||||
#include "LedDeviceSk6812SPI.h"
|
||||
|
||||
LedDeviceSk6812SPI::LedDeviceSk6812SPI(const std::string& outputDevice, const unsigned baudrate, const std::string& whiteAlgorithm,
|
||||
const int spiMode, const bool spiDataInvert)
|
||||
: LedSpiDevice(outputDevice, baudrate, 0, spiMode, spiDataInvert)
|
||||
, _whiteAlgorithm(whiteAlgorithm)
|
||||
LedDeviceSk6812SPI::LedDeviceSk6812SPI(const Json::Value &deviceConfig)
|
||||
: LedSpiDevice(deviceConfig)
|
||||
, bitpair_to_byte {
|
||||
0b10001000,
|
||||
0b10001100,
|
||||
@ -23,7 +21,21 @@ LedDeviceSk6812SPI::LedDeviceSk6812SPI(const std::string& outputDevice, const un
|
||||
}
|
||||
|
||||
{
|
||||
Debug( _log, "whiteAlgorithm : %s", whiteAlgorithm.c_str());
|
||||
setConfig(deviceConfig);
|
||||
Debug( _log, "whiteAlgorithm : %s", _whiteAlgorithm.c_str());
|
||||
}
|
||||
|
||||
LedDevice* LedDeviceSk6812SPI::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDeviceSk6812SPI(deviceConfig);
|
||||
}
|
||||
|
||||
bool LedDeviceSk6812SPI::setConfig(const Json::Value &deviceConfig)
|
||||
{
|
||||
LedSpiDevice::setConfig(deviceConfig);
|
||||
_whiteAlgorithm = deviceConfig.get("white_algorithm","").asString();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int LedDeviceSk6812SPI::write(const std::vector<ColorRgb> &ledValues)
|
||||
|
@ -13,15 +13,22 @@ class LedDeviceSk6812SPI : public LedSpiDevice
|
||||
{
|
||||
public:
|
||||
///
|
||||
/// Constructs the LedDevice for a string containing leds of the type Sk6812SPI
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
/// @param outputDevice The name of the output device (eg '/etc/SpiDev.0.0')
|
||||
/// @param baudrate The used baudrate for writing to the output device
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDeviceSk6812SPI(const Json::Value &deviceConfig);
|
||||
|
||||
LedDeviceSk6812SPI(const std::string& outputDevice, const unsigned baudrate,
|
||||
const std::string& whiteAlgorithm, const int spiMode, const bool spiDataInvert);
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Sets configuration
|
||||
///
|
||||
/// @param deviceConfig the json device config
|
||||
/// @return true if success
|
||||
bool setConfig(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Writes the led color values to the led-device
|
||||
///
|
||||
|
@ -9,17 +9,13 @@
|
||||
static const unsigned MAX_NUM_LEDS = 320;
|
||||
static const unsigned MAX_NUM_LEDS_SETTABLE = 16;
|
||||
|
||||
LedDeviceTinkerforge::LedDeviceTinkerforge(const std::string & host, uint16_t port, const std::string & uid, const unsigned interval)
|
||||
LedDeviceTinkerforge::LedDeviceTinkerforge(const Json::Value &deviceConfig)
|
||||
: LedDevice()
|
||||
, _host(host)
|
||||
, _port(port)
|
||||
, _uid(uid)
|
||||
, _interval(interval)
|
||||
, _ipConnection(nullptr)
|
||||
, _ledStrip(nullptr)
|
||||
, _colorChannelSize(0)
|
||||
{
|
||||
// empty
|
||||
setConfig(deviceConfig);
|
||||
}
|
||||
|
||||
LedDeviceTinkerforge::~LedDeviceTinkerforge()
|
||||
@ -35,6 +31,21 @@ LedDeviceTinkerforge::~LedDeviceTinkerforge()
|
||||
delete _ledStrip;
|
||||
}
|
||||
|
||||
bool LedDeviceTinkerforge::setConfig(const Json::Value &deviceConfig)
|
||||
{
|
||||
_host = deviceConfig.get("output", "127.0.0.1").asString();
|
||||
_port = deviceConfig.get("port", 4223).asInt();
|
||||
_uid = deviceConfig["uid"].asString();
|
||||
_interval = deviceConfig["rate"].asInt();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
LedDevice* LedDeviceTinkerforge::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDeviceTinkerforge(deviceConfig);
|
||||
}
|
||||
|
||||
int LedDeviceTinkerforge::open()
|
||||
{
|
||||
// Check if connection is already createds
|
||||
|
@ -16,11 +16,25 @@ extern "C" {
|
||||
class LedDeviceTinkerforge : public LedDevice
|
||||
{
|
||||
public:
|
||||
|
||||
LedDeviceTinkerforge(const std::string &host, uint16_t port, const std::string &uid, const unsigned interval);
|
||||
///
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDeviceTinkerforge(const Json::Value &deviceConfig);
|
||||
|
||||
virtual ~LedDeviceTinkerforge();
|
||||
|
||||
///
|
||||
/// Sets configuration
|
||||
///
|
||||
/// @param deviceConfig the json device config
|
||||
/// @return true if success
|
||||
bool setConfig(const Json::Value &deviceConfig);
|
||||
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Attempts to open a connection to the master bricklet and the led strip bricklet.
|
||||
///
|
||||
@ -50,16 +64,16 @@ private:
|
||||
int transferLedData(LEDStrip *ledstrip, unsigned int index, unsigned int length, uint8_t *redChannel, uint8_t *greenChannel, uint8_t *blueChannel);
|
||||
|
||||
/// The host of the master brick
|
||||
const std::string _host;
|
||||
std::string _host;
|
||||
|
||||
/// The port of the master brick
|
||||
const uint16_t _port;
|
||||
uint16_t _port;
|
||||
|
||||
/// The uid of the led strip bricklet
|
||||
const std::string _uid;
|
||||
std::string _uid;
|
||||
|
||||
/// The interval/rate
|
||||
const unsigned _interval;
|
||||
unsigned _interval;
|
||||
|
||||
/// ip connection handle
|
||||
IPConnection *_ipConnection;
|
||||
|
@ -6,11 +6,16 @@
|
||||
|
||||
// hyperion local includes
|
||||
#include "LedDeviceTpm2.h"
|
||||
#include <json/json.h>
|
||||
|
||||
LedDeviceTpm2::LedDeviceTpm2(const std::string& outputDevice, const unsigned baudrate)
|
||||
: LedRs232Device(outputDevice, baudrate)
|
||||
LedDeviceTpm2::LedDeviceTpm2(const Json::Value &deviceConfig)
|
||||
: LedRs232Device(deviceConfig)
|
||||
{
|
||||
// empty
|
||||
}
|
||||
|
||||
LedDevice* LedDeviceTpm2::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDeviceTpm2(deviceConfig);
|
||||
}
|
||||
|
||||
int LedDeviceTpm2::write(const std::vector<ColorRgb> &ledValues)
|
||||
|
@ -13,13 +13,14 @@ class LedDeviceTpm2 : public LedRs232Device
|
||||
{
|
||||
public:
|
||||
///
|
||||
/// Constructs the LedDevice for attached serial device using supporting tpm2 protocol
|
||||
/// All LEDs in the stripe are handled as one frame
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
/// @param outputDevice The name of the output device (eg '/dev/ttyAMA0')
|
||||
/// @param baudrate The used baudrate for writing to the output device
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDeviceTpm2(const std::string& outputDevice, const unsigned baudrate);
|
||||
LedDeviceTpm2(const Json::Value &deviceConfig);
|
||||
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Writes the led color values to the led-device
|
||||
|
63
libsrc/leddevice/LedDeviceTpm2net.cpp
Normal file
63
libsrc/leddevice/LedDeviceTpm2net.cpp
Normal file
@ -0,0 +1,63 @@
|
||||
// STL includes
|
||||
#include <cstring>
|
||||
#include <cstdio>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
|
||||
// Local-Hyperion includes
|
||||
#include "LedDeviceTpm2net.h"
|
||||
|
||||
|
||||
LedDeviceTpm2net::LedDeviceTpm2net(const Json::Value &deviceConfig)
|
||||
: LedDevice()
|
||||
, _socket(this)
|
||||
{
|
||||
setConfig(deviceConfig);
|
||||
}
|
||||
|
||||
LedDeviceTpm2net::~LedDeviceTpm2net()
|
||||
{
|
||||
}
|
||||
|
||||
bool LedDeviceTpm2net::setConfig(const Json::Value &deviceConfig)
|
||||
{
|
||||
_host = QHostAddress(QString::fromStdString(deviceConfig.get("output", "127.0.0.1").asString()));
|
||||
_port = deviceConfig.get("port", 65506).asInt();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
LedDevice* LedDeviceTpm2net::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDeviceTpm2net(deviceConfig);
|
||||
}
|
||||
|
||||
int LedDeviceTpm2net::write(const std::vector<ColorRgb> & ledValues)
|
||||
{
|
||||
if (_ledBuffer.size() == 0)
|
||||
{
|
||||
_ledBuffer.resize(7 + 3*ledValues.size());
|
||||
_ledBuffer[0] = 0x9c; // block-start byte TPM.NET
|
||||
_ledBuffer[1] = 0xDA;
|
||||
_ledBuffer[2] = ((3 * ledValues.size()) >> 8) & 0xFF; // frame size high byte
|
||||
_ledBuffer[3] = (3 * ledValues.size()) & 0xFF; // frame size low byte
|
||||
_ledBuffer[4] = 1; // packets number
|
||||
_ledBuffer[5] = 1; // Number of packets
|
||||
_ledBuffer[(int)(7 + 3*ledValues.size()-1)] = 0x36; // block-end byte
|
||||
}
|
||||
|
||||
// write data
|
||||
memcpy(6 + _ledBuffer.data(), ledValues.data() /*Max 1,490 bytes*/, ledValues.size() * 3);
|
||||
|
||||
_socket.connectToHost(_host, _port);
|
||||
_socket.write((const char *)_ledBuffer.data());
|
||||
_socket.close();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int LedDeviceTpm2net::switchOff()
|
||||
{
|
||||
memset(6 + _ledBuffer.data(), 0, _ledBuffer.size() - 5);
|
||||
return 0;
|
||||
}
|
53
libsrc/leddevice/LedDeviceTpm2net.h
Normal file
53
libsrc/leddevice/LedDeviceTpm2net.h
Normal file
@ -0,0 +1,53 @@
|
||||
#pragma once
|
||||
|
||||
// STL includes
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <QUdpSocket>
|
||||
#include <QStringList>
|
||||
// Leddevice includes
|
||||
#include <leddevice/LedDevice.h>
|
||||
|
||||
///
|
||||
class LedDeviceTpm2net : public LedDevice
|
||||
{
|
||||
public:
|
||||
///
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDeviceTpm2net(const Json::Value &deviceConfig);
|
||||
|
||||
virtual ~LedDeviceTpm2net();
|
||||
|
||||
///
|
||||
/// Sets configuration
|
||||
///
|
||||
/// @param deviceConfig the json device config
|
||||
/// @return true if success
|
||||
bool setConfig(const Json::Value &deviceConfig);
|
||||
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Writes the given led-color values to the output stream
|
||||
///
|
||||
/// @param ledValues The color-value per led
|
||||
///
|
||||
/// @return Zero on success else negative
|
||||
///
|
||||
virtual int write(const std::vector<ColorRgb> & ledValues);
|
||||
|
||||
/// Switch the leds off
|
||||
virtual int switchOff();
|
||||
|
||||
private:
|
||||
/// The host of the master brick
|
||||
QHostAddress _host;
|
||||
|
||||
/// The port of the master brick
|
||||
uint16_t _port;
|
||||
QUdpSocket _socket;
|
||||
};
|
@ -12,12 +12,25 @@
|
||||
// hyperion local includes
|
||||
#include "LedDeviceUdpE131.h"
|
||||
|
||||
LedDeviceUdpE131::LedDeviceUdpE131(const std::string& outputDevice, const unsigned latchTime, const unsigned universe)
|
||||
: LedUdpDevice(outputDevice, latchTime)
|
||||
, _e131_universe(universe)
|
||||
LedDeviceUdpE131::LedDeviceUdpE131(const Json::Value &deviceConfig)
|
||||
: LedUdpDevice(deviceConfig)
|
||||
|
||||
{
|
||||
// empty
|
||||
setConfig(deviceConfig);
|
||||
}
|
||||
|
||||
bool LedDeviceUdpE131::setConfig(const Json::Value &deviceConfig)
|
||||
{
|
||||
LedUdpDevice::setConfig(deviceConfig);
|
||||
_LatchTime_ns = deviceConfig.get("latchtime",104000).asInt();
|
||||
_e131_universe = deviceConfig.get("universe",1).asInt();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
LedDevice* LedDeviceUdpE131::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDeviceUdpE131(deviceConfig);
|
||||
}
|
||||
|
||||
#define CID "hyperion!\0"
|
||||
|
@ -100,13 +100,21 @@ class LedDeviceUdpE131 : public LedUdpDevice
|
||||
{
|
||||
public:
|
||||
///
|
||||
/// Constructs the LedDevice for sending led colors via udp
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
/// @param outputDevice hostname:port
|
||||
/// @param latchTime
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDeviceUdpE131(const Json::Value &deviceConfig);
|
||||
|
||||
LedDeviceUdpE131(const std::string& outputDevice, const unsigned latchTime, const unsigned universe);
|
||||
///
|
||||
/// Sets configuration
|
||||
///
|
||||
/// @param deviceConfig the json device config
|
||||
/// @return true if success
|
||||
bool setConfig(const Json::Value &deviceConfig);
|
||||
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
|
||||
///
|
||||
|
@ -11,10 +11,23 @@
|
||||
// hyperion local includes
|
||||
#include "LedDeviceUdpRaw.h"
|
||||
|
||||
LedDeviceUdpRaw::LedDeviceUdpRaw(const std::string& outputDevice, const unsigned latchTime)
|
||||
: LedUdpDevice(outputDevice, latchTime)
|
||||
LedDeviceUdpRaw::LedDeviceUdpRaw(const Json::Value &deviceConfig)
|
||||
: LedUdpDevice(deviceConfig)
|
||||
{
|
||||
// empty
|
||||
setConfig(deviceConfig);
|
||||
}
|
||||
|
||||
bool LedDeviceUdpRaw::setConfig(const Json::Value &deviceConfig)
|
||||
{
|
||||
LedUdpDevice::setConfig(deviceConfig);
|
||||
_LatchTime_ns = deviceConfig.get("latchtime",500000).asInt();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
LedDevice* LedDeviceUdpRaw::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDeviceUdpRaw(deviceConfig);
|
||||
}
|
||||
|
||||
int LedDeviceUdpRaw::write(const std::vector<ColorRgb> &ledValues)
|
||||
|
@ -13,13 +13,21 @@ class LedDeviceUdpRaw : public LedUdpDevice
|
||||
{
|
||||
public:
|
||||
///
|
||||
/// Constructs the LedDevice for sending led colors via udp
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
/// @param outputDevice hostname:port
|
||||
/// @param latchTime
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDeviceUdpRaw(const Json::Value &deviceConfig);
|
||||
|
||||
LedDeviceUdpRaw(const std::string& outputDevice, const unsigned latchTime);
|
||||
///
|
||||
/// Sets configuration
|
||||
///
|
||||
/// @param deviceConfig the json device config
|
||||
/// @return true if success
|
||||
bool setConfig(const Json::Value &deviceConfig);
|
||||
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Writes the led color values to the led-device
|
||||
|
@ -258,6 +258,11 @@ LedDeviceWS2812b::LedDeviceWS2812b()
|
||||
printf("WS2812b init finished \n");
|
||||
}
|
||||
|
||||
LedDevice* LedDeviceWS2812b::construct(const Json::Value &)
|
||||
{
|
||||
return new LedDeviceWS2812b();
|
||||
}
|
||||
|
||||
#ifdef WS2812_ASM_OPTI
|
||||
|
||||
// rotate register, used to move the 1 around :-)
|
||||
|
@ -133,10 +133,24 @@ class LedDeviceWS2812b : public LedDevice
|
||||
{
|
||||
public:
|
||||
///
|
||||
/// Constructs the LedDevice for a string containing leds of the type WS2812
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDeviceWS2812b();
|
||||
|
||||
~LedDeviceWS2812b();
|
||||
|
||||
///
|
||||
/// Sets configuration
|
||||
///
|
||||
/// @param deviceConfig the json device config
|
||||
/// @return true if success
|
||||
bool setConfig(const Json::Value&) {};
|
||||
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &);
|
||||
|
||||
///
|
||||
/// Writes the led color values to the led-device
|
||||
///
|
||||
|
@ -4,31 +4,13 @@
|
||||
#include "LedDeviceWS281x.h"
|
||||
|
||||
// Constructor
|
||||
LedDeviceWS281x::LedDeviceWS281x(const int gpio, const int leds, const uint32_t freq, const int dmanum, const int pwmchannel, const int invert, const int rgbw, const std::string& whiteAlgorithm)
|
||||
LedDeviceWS281x::LedDeviceWS281x(const Json::Value &deviceConfig)
|
||||
: LedDevice()
|
||||
, _channel(pwmchannel)
|
||||
, _initialized(false)
|
||||
, _whiteAlgorithm(whiteAlgorithm)
|
||||
{
|
||||
Debug( _log, "whiteAlgorithm : %s", whiteAlgorithm.c_str());
|
||||
setConfig(deviceConfig);
|
||||
Debug( _log, "whiteAlgorithm : %s", _whiteAlgorithm.c_str());
|
||||
|
||||
_led_string.freq = freq;
|
||||
_led_string.dmanum = dmanum;
|
||||
if (pwmchannel != 0 && pwmchannel != 1)
|
||||
{
|
||||
throw std::runtime_error("WS281x: invalid PWM channel; must be 0 or 1.");
|
||||
}
|
||||
_led_string.channel[_channel].gpionum = gpio;
|
||||
_led_string.channel[_channel].invert = invert;
|
||||
_led_string.channel[_channel].count = leds;
|
||||
_led_string.channel[_channel].brightness = 255;
|
||||
_led_string.channel[_channel].strip_type = ((rgbw == 1) ? SK6812_STRIP_GRBW : WS2811_STRIP_RGB);
|
||||
|
||||
_led_string.channel[!_channel].gpionum = 0;
|
||||
_led_string.channel[!_channel].invert = invert;
|
||||
_led_string.channel[!_channel].count = 0;
|
||||
_led_string.channel[!_channel].brightness = 0;
|
||||
_led_string.channel[!_channel].strip_type = WS2811_STRIP_RGB;
|
||||
if (ws2811_init(&_led_string) < 0)
|
||||
{
|
||||
throw std::runtime_error("Unable to initialize ws281x library.");
|
||||
@ -36,6 +18,38 @@ LedDeviceWS281x::LedDeviceWS281x(const int gpio, const int leds, const uint32_t
|
||||
_initialized = true;
|
||||
}
|
||||
|
||||
bool LedDeviceWS281x::setConfig(const Json::Value &deviceConfig)
|
||||
{
|
||||
_whiteAlgorithm = deviceConfig.get("white_algorithm","").asString();
|
||||
_channel = deviceConfig.get("pwmchannel", 0).asInt();
|
||||
if (_channel != 0 && _channel != 1)
|
||||
{
|
||||
throw std::runtime_error("WS281x: invalid PWM channel; must be 0 or 1.");
|
||||
}
|
||||
|
||||
_led_string.freq = deviceConfig.get("freq", (Json::UInt)800000ul).asInt();
|
||||
_led_string.dmanum = deviceConfig.get("dmanum", 5).asInt();
|
||||
_led_string.channel[_channel].gpionum = deviceConfig.get("gpio", 18).asInt();
|
||||
_led_string.channel[_channel].count = deviceConfig.get("leds", 256).asInt();
|
||||
_led_string.channel[_channel].invert = deviceConfig.get("invert", 0).asInt();
|
||||
_led_string.channel[_channel].strip_type = ((deviceConfig.get("rgbw", 0).asInt() == 1) ? SK6812_STRIP_GRBW : WS2811_STRIP_RGB);
|
||||
_led_string.channel[_channel].brightness = 255;
|
||||
|
||||
_led_string.channel[!_channel].gpionum = 0;
|
||||
_led_string.channel[!_channel].invert = _led_string.channel[_channel].invert;
|
||||
_led_string.channel[!_channel].count = 0;
|
||||
_led_string.channel[!_channel].brightness = 0;
|
||||
_led_string.channel[!_channel].strip_type = WS2811_STRIP_RGB;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
LedDevice* LedDeviceWS281x::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDeviceWS281x(deviceConfig);
|
||||
}
|
||||
|
||||
|
||||
// Send new values down the LED chain
|
||||
int LedDeviceWS281x::write(const std::vector<ColorRgb> &ledValues)
|
||||
{
|
||||
|
@ -7,24 +7,26 @@ class LedDeviceWS281x : public LedDevice
|
||||
{
|
||||
public:
|
||||
///
|
||||
/// Constructs the LedDevice for WS281x (one wire 800kHz)
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
/// @param gpio The gpio pin to use (BCM chip counting, default is 18)
|
||||
/// @param leds The number of leds attached to the gpio pin
|
||||
/// @param freq The target frequency for the data line, default is 800000
|
||||
/// @param dmanum The DMA channel to use, default is 5
|
||||
/// @param pwmchannel The pwm channel to use
|
||||
/// @param invert Invert the output line to support an inverting level shifter
|
||||
/// @param rgbw Send 32 bit rgbw colour data for sk6812
|
||||
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDeviceWS281x(const int gpio, const int leds, const uint32_t freq, int dmanum, int pwmchannel, int invert,
|
||||
int rgbw, const std::string& whiteAlgorithm);
|
||||
LedDeviceWS281x(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Destructor of the LedDevice, waits for DMA to complete and then cleans up
|
||||
///
|
||||
~LedDeviceWS281x();
|
||||
|
||||
///
|
||||
/// Sets configuration
|
||||
///
|
||||
/// @param deviceConfig the json device config
|
||||
/// @return true if success
|
||||
bool setConfig(const Json::Value &deviceConfig);
|
||||
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Writes the led color values to the led-device
|
||||
|
@ -11,11 +11,14 @@
|
||||
// hyperion local includes
|
||||
#include "LedDeviceWs2801.h"
|
||||
|
||||
LedDeviceWs2801::LedDeviceWs2801(const std::string& outputDevice, const unsigned baudrate, const unsigned latchTime,
|
||||
const int spiMode, const bool spiDataInvert)
|
||||
: LedSpiDevice(outputDevice, baudrate, latchTime, spiMode, spiDataInvert)
|
||||
LedDeviceWs2801::LedDeviceWs2801(const Json::Value &deviceConfig)
|
||||
: LedSpiDevice(deviceConfig)
|
||||
{
|
||||
// empty
|
||||
}
|
||||
|
||||
LedDevice* LedDeviceWs2801::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDeviceWs2801(deviceConfig);
|
||||
}
|
||||
|
||||
int LedDeviceWs2801::write(const std::vector<ColorRgb> &ledValues)
|
||||
|
@ -13,17 +13,14 @@ class LedDeviceWs2801 : public LedSpiDevice
|
||||
{
|
||||
public:
|
||||
///
|
||||
/// Constructs the LedDevice for a string containing leds of the type Ws2801
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
/// @param outputDevice The name of the output device (eg '/etc/SpiDev.0.0')
|
||||
/// @param baudrate The used baudrate for writing to the output device
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDeviceWs2801(const Json::Value &deviceConfig);
|
||||
|
||||
LedDeviceWs2801(const std::string& outputDevice,
|
||||
const unsigned baudrate,
|
||||
const unsigned latchTime,
|
||||
const int spiMode,
|
||||
const bool spiDataInvert);
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Writes the led color values to the led-device
|
||||
|
@ -11,8 +11,8 @@
|
||||
// hyperion local includes
|
||||
#include "LedDeviceWs2812SPI.h"
|
||||
|
||||
LedDeviceWs2812SPI::LedDeviceWs2812SPI(const std::string& outputDevice, const unsigned baudrate, const int spiMode, const bool spiDataInvert)
|
||||
: LedSpiDevice(outputDevice, baudrate, 0, spiMode, spiDataInvert)
|
||||
LedDeviceWs2812SPI::LedDeviceWs2812SPI(const Json::Value &deviceConfig)
|
||||
: LedSpiDevice(deviceConfig)
|
||||
, bitpair_to_byte {
|
||||
0b10001000,
|
||||
0b10001100,
|
||||
@ -20,7 +20,11 @@ LedDeviceWs2812SPI::LedDeviceWs2812SPI(const std::string& outputDevice, const un
|
||||
0b11001100,
|
||||
}
|
||||
{
|
||||
// empty
|
||||
}
|
||||
|
||||
LedDevice* LedDeviceWs2812SPI::construct(const Json::Value &deviceConfig)
|
||||
{
|
||||
return new LedDeviceWs2812SPI(deviceConfig);
|
||||
}
|
||||
|
||||
int LedDeviceWs2812SPI::write(const std::vector<ColorRgb> &ledValues)
|
||||
|
@ -13,13 +13,14 @@ class LedDeviceWs2812SPI : public LedSpiDevice
|
||||
{
|
||||
public:
|
||||
///
|
||||
/// Constructs the LedDevice for a string containing leds of the type Ws2812SPI
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
/// @param outputDevice The name of the output device (eg '/etc/SpiDev.0.0')
|
||||
/// @param baudrate The used baudrate for writing to the output device
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedDeviceWs2812SPI(const std::string& outputDevice, const unsigned baudrate,
|
||||
const int spiMode, const bool spiDataInvert);
|
||||
LedDeviceWs2812SPI(const Json::Value &deviceConfig);
|
||||
|
||||
/// constructs leddevice
|
||||
static LedDevice* construct(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Writes the led color values to the led-device
|
||||
|
@ -9,15 +9,12 @@
|
||||
// Local Hyperion includes
|
||||
#include "LedHIDDevice.h"
|
||||
|
||||
LedHIDDevice::LedHIDDevice(const unsigned short VendorId, const unsigned short ProductId, int delayAfterConnect_ms, const bool useFeature)
|
||||
: _VendorId(VendorId)
|
||||
, _ProductId(ProductId)
|
||||
, _useFeature(useFeature)
|
||||
LedHIDDevice::LedHIDDevice(const Json::Value &deviceConfig)
|
||||
: _useFeature(false)
|
||||
, _deviceHandle(nullptr)
|
||||
, _delayAfterConnect_ms(delayAfterConnect_ms)
|
||||
, _blockedForDelay(false)
|
||||
{
|
||||
// empty
|
||||
setConfig(deviceConfig);
|
||||
}
|
||||
|
||||
LedHIDDevice::~LedHIDDevice()
|
||||
@ -31,6 +28,19 @@ LedHIDDevice::~LedHIDDevice()
|
||||
hid_exit();
|
||||
}
|
||||
|
||||
bool LedHIDDevice::setConfig(const Json::Value &deviceConfig)
|
||||
{
|
||||
_delayAfterConnect_ms = deviceConfig.get("delayAfterConnect", 0 ).asInt();
|
||||
auto VendorIdString = deviceConfig.get("VID", "0x2341").asString();
|
||||
auto ProductIdString = deviceConfig.get("PID", "0x8036").asString();
|
||||
|
||||
// Convert HEX values to integer
|
||||
_VendorId = std::stoul(VendorIdString, nullptr, 16);
|
||||
_ProductId = std::stoul(ProductIdString, nullptr, 16);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int LedHIDDevice::open()
|
||||
{
|
||||
// Initialize the usb context
|
||||
|
@ -17,18 +17,24 @@ class LedHIDDevice : public LedDevice
|
||||
|
||||
public:
|
||||
///
|
||||
/// Constructs the LedDevice attached to an HID-device
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
/// @param[in] VendorId The USB VID of the output device
|
||||
/// @param[in] ProductId The USB PID of the output device
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedHIDDevice(const unsigned short VendorId, const unsigned short ProductId, int delayAfterConnect_ms = 0, const bool useFeature = false);
|
||||
LedHIDDevice(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Destructor of the LedDevice; closes the output device if it is open
|
||||
///
|
||||
virtual ~LedHIDDevice();
|
||||
|
||||
///
|
||||
/// Sets configuration
|
||||
///
|
||||
/// @param deviceConfig the json device config
|
||||
/// @return true if success
|
||||
virtual bool setConfig(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Opens and configures the output device
|
||||
///
|
||||
@ -46,21 +52,20 @@ protected:
|
||||
*/
|
||||
int writeBytes(const unsigned size, const uint8_t *data);
|
||||
|
||||
private slots:
|
||||
/// Unblock the device after a connection delay
|
||||
void unblockAfterDelay();
|
||||
|
||||
private:
|
||||
// HID VID and PID
|
||||
const unsigned short _VendorId;
|
||||
const unsigned short _ProductId;
|
||||
const bool _useFeature;
|
||||
unsigned short _VendorId;
|
||||
unsigned short _ProductId;
|
||||
bool _useFeature;
|
||||
|
||||
/// libusb device handle
|
||||
hid_device * _deviceHandle;
|
||||
|
||||
/// Sleep after the connect before continuing
|
||||
const int _delayAfterConnect_ms;
|
||||
int _delayAfterConnect_ms;
|
||||
|
||||
bool _blockedForDelay;
|
||||
|
||||
private slots:
|
||||
/// Unblock the device after a connection delay
|
||||
void unblockAfterDelay();
|
||||
};
|
||||
|
@ -9,17 +9,25 @@
|
||||
// Local Hyperion includes
|
||||
#include "LedRs232Device.h"
|
||||
|
||||
LedRs232Device::LedRs232Device(const std::string& outputDevice, const unsigned baudrate, int delayAfterConnect_ms)
|
||||
: _deviceName(outputDevice)
|
||||
, _baudRate_Hz(baudrate)
|
||||
, _delayAfterConnect_ms(delayAfterConnect_ms)
|
||||
, _rs232Port(this)
|
||||
LedRs232Device::LedRs232Device(const Json::Value &deviceConfig)
|
||||
: _rs232Port(this)
|
||||
, _blockedForDelay(false)
|
||||
, _stateChanged(true)
|
||||
{
|
||||
setConfig(deviceConfig);
|
||||
connect(&_rs232Port, SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(error(QSerialPort::SerialPortError)));
|
||||
}
|
||||
|
||||
bool LedRs232Device::setConfig(const Json::Value &deviceConfig)
|
||||
{
|
||||
closeDevice();
|
||||
_deviceName = deviceConfig["output"].asString();
|
||||
_baudRate_Hz = deviceConfig["rate"].asInt();
|
||||
_delayAfterConnect_ms = deviceConfig.get("delayAfterConnect",250).asInt();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void LedRs232Device::error(QSerialPort::SerialPortError error)
|
||||
{
|
||||
if ( error != QSerialPort::NoError )
|
||||
@ -59,6 +67,11 @@ void LedRs232Device::error(QSerialPort::SerialPortError error)
|
||||
LedRs232Device::~LedRs232Device()
|
||||
{
|
||||
disconnect(&_rs232Port, SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(error(QSerialPort::SerialPortError)));
|
||||
closeDevice();
|
||||
}
|
||||
|
||||
void LedRs232Device::closeDevice()
|
||||
{
|
||||
if (_rs232Port.isOpen())
|
||||
{
|
||||
_rs232Port.close();
|
||||
@ -66,7 +79,6 @@ LedRs232Device::~LedRs232Device()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int LedRs232Device::open()
|
||||
{
|
||||
Info(_log, "Opening UART: %s", _deviceName.c_str());
|
||||
|
@ -15,12 +15,18 @@ class LedRs232Device : public LedDevice
|
||||
|
||||
public:
|
||||
///
|
||||
/// Constructs the LedDevice attached to a RS232-device
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
/// @param[in] outputDevice The name of the output device (eg '/etc/ttyS0')
|
||||
/// @param[in] baudrate The used baudrate for writing to the output device
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedRs232Device(const std::string& outputDevice, const unsigned baudrate, int delayAfterConnect_ms = 0);
|
||||
LedRs232Device(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Sets configuration
|
||||
///
|
||||
/// @param deviceConfig the json device config
|
||||
/// @return true if success
|
||||
virtual bool setConfig(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Destructor of the LedDevice; closes the output device if it is open
|
||||
@ -45,6 +51,8 @@ protected:
|
||||
*/
|
||||
int writeBytes(const unsigned size, const uint8_t *data);
|
||||
|
||||
void closeDevice();
|
||||
|
||||
private slots:
|
||||
/// Unblock the device after a connection delay
|
||||
void unblockAfterDelay();
|
||||
@ -55,10 +63,10 @@ private:
|
||||
bool tryOpen();
|
||||
|
||||
/// The name of the output device
|
||||
const std::string _deviceName;
|
||||
std::string _deviceName;
|
||||
|
||||
/// The used baudrate of the output device
|
||||
const qint32 _baudRate_Hz;
|
||||
qint32 _baudRate_Hz;
|
||||
|
||||
/// Sleep after the connect before continuing
|
||||
int _delayAfterConnect_ms;
|
||||
|
@ -14,14 +14,11 @@
|
||||
#include <utils/Logger.h>
|
||||
|
||||
|
||||
LedSpiDevice::LedSpiDevice(const std::string& outputDevice, const unsigned baudrate, const int latchTime_ns, const int spiMode, const bool spiDataInvert)
|
||||
: _deviceName(outputDevice)
|
||||
, _baudRate_Hz(baudrate)
|
||||
, _latchTime_ns(latchTime_ns)
|
||||
LedSpiDevice::LedSpiDevice(const Json::Value &deviceConfig)
|
||||
: LedDevice()
|
||||
, _fid(-1)
|
||||
, _spiMode(spiMode)
|
||||
, _spiDataInvert(spiDataInvert)
|
||||
{
|
||||
setConfig(deviceConfig);
|
||||
memset(&_spi, 0, sizeof(_spi));
|
||||
Debug(_log, "_spiDataInvert %d, _spiMode %d", _spiDataInvert, _spiMode);
|
||||
}
|
||||
@ -31,6 +28,17 @@ LedSpiDevice::~LedSpiDevice()
|
||||
// close(_fid);
|
||||
}
|
||||
|
||||
bool LedSpiDevice::setConfig(const Json::Value &deviceConfig)
|
||||
{
|
||||
_deviceName = deviceConfig.get("output","/dev/spidev.0.0").asString();
|
||||
_baudRate_Hz = deviceConfig.get("rate",1000000).asInt();
|
||||
_latchTime_ns = deviceConfig.get("latchtime",0).asInt();
|
||||
_spiMode = deviceConfig.get("spimode",SPI_MODE_0).asInt();
|
||||
_spiDataInvert = deviceConfig.get("invert",false).asBool();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int LedSpiDevice::open()
|
||||
{
|
||||
const int bitsPerWord = 8;
|
||||
|
@ -13,16 +13,18 @@ class LedSpiDevice : public LedDevice
|
||||
{
|
||||
public:
|
||||
///
|
||||
/// Constructs the LedDevice attached to a SPI-device
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
/// @param[in] outputDevice The name of the output device (eg '/dev/spidev.0.0')
|
||||
/// @param[in] baudrate The used baudrate for writing to the output device
|
||||
/// @param[in] latchTime_ns The latch-time to latch in the values across the SPI-device (negative
|
||||
/// means no latch required) [ns]
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedSpiDevice(const std::string& outputDevice, const unsigned baudrate, const int latchTime_ns = -1,
|
||||
const int spiMode = SPI_MODE_0, const bool spiDataInvert = false);
|
||||
LedSpiDevice(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Sets configuration
|
||||
///
|
||||
/// @param deviceConfig the json device config
|
||||
/// @return true if success
|
||||
virtual bool setConfig(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Destructor of the LedDevice; closes the output device if it is open
|
||||
@ -48,15 +50,14 @@ protected:
|
||||
///
|
||||
int writeBytes(const unsigned size, const uint8_t *data);
|
||||
|
||||
private:
|
||||
/// The name of the output device
|
||||
const std::string _deviceName;
|
||||
std::string _deviceName;
|
||||
|
||||
/// The used baudrate of the output device
|
||||
const int _baudRate_Hz;
|
||||
int _baudRate_Hz;
|
||||
|
||||
/// The time which the device should be untouched after a write
|
||||
const int _latchTime_ns;
|
||||
int _latchTime_ns;
|
||||
|
||||
/// The File Identifier of the opened output device (or -1 if not opened)
|
||||
int _fid;
|
||||
|
@ -15,24 +15,12 @@
|
||||
// Local Hyperion includes
|
||||
#include "LedUdpDevice.h"
|
||||
|
||||
LedUdpDevice::LedUdpDevice(const std::string& output, const int latchTime_ns)
|
||||
: _target(output)
|
||||
, _LatchTime_ns(latchTime_ns)
|
||||
LedUdpDevice::LedUdpDevice(const Json::Value &deviceConfig)
|
||||
: LedDevice()
|
||||
, _LatchTime_ns(-1)
|
||||
{
|
||||
setConfig(deviceConfig);
|
||||
_udpSocket = new QUdpSocket();
|
||||
QString str = QString::fromStdString(_target);
|
||||
QStringList str_splitted = str.split(":");
|
||||
if (str_splitted.size() != 2)
|
||||
{
|
||||
throw("Error parsing hostname:port");
|
||||
}
|
||||
QHostInfo info = QHostInfo::fromName(str_splitted.at(0));
|
||||
if (!info.addresses().isEmpty())
|
||||
{
|
||||
// use the first IP address
|
||||
_address = info.addresses().first();
|
||||
}
|
||||
_port = str_splitted.at(1).toInt();
|
||||
}
|
||||
|
||||
LedUdpDevice::~LedUdpDevice()
|
||||
@ -40,6 +28,19 @@ LedUdpDevice::~LedUdpDevice()
|
||||
_udpSocket->close();
|
||||
}
|
||||
|
||||
bool LedUdpDevice::setConfig(const Json::Value &deviceConfig)
|
||||
{
|
||||
QHostInfo info = QHostInfo::fromName( QString::fromStdString(deviceConfig["output"].asString()) );
|
||||
if (info.addresses().isEmpty())
|
||||
{
|
||||
throw("invalid target address");
|
||||
}
|
||||
_address = info.addresses().first();
|
||||
_port = deviceConfig["port"].asUInt();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int LedUdpDevice::open()
|
||||
{
|
||||
QHostAddress localAddress = QHostAddress::Any;
|
||||
|
@ -13,19 +13,24 @@ class LedUdpDevice : public LedDevice
|
||||
{
|
||||
public:
|
||||
///
|
||||
/// Constructs the LedDevice sendig data via udp
|
||||
/// Constructs specific LedDevice
|
||||
///
|
||||
/// @param[in] outputDevice string hostname:port
|
||||
/// @param[in] latchTime_ns The latch-time to latch in the values across the SPI-device (negative
|
||||
/// means no latch required) [ns]
|
||||
/// @param deviceConfig json device config
|
||||
///
|
||||
LedUdpDevice(const std::string& outputDevice, const int latchTime_ns = -1);
|
||||
LedUdpDevice(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Destructor of the LedDevice; closes the output device if it is open
|
||||
///
|
||||
virtual ~LedUdpDevice();
|
||||
|
||||
///
|
||||
/// Sets configuration
|
||||
///
|
||||
/// @param deviceConfig the json device config
|
||||
/// @return true if success
|
||||
bool setConfig(const Json::Value &deviceConfig);
|
||||
|
||||
///
|
||||
/// Opens and configures the output device
|
||||
///
|
||||
@ -45,12 +50,8 @@ protected:
|
||||
///
|
||||
int writeBytes(const unsigned size, const uint8_t *data);
|
||||
|
||||
private:
|
||||
/// The UDP destination as "host:port"
|
||||
const std::string _target;
|
||||
|
||||
/// The time which the device should be untouched after a write
|
||||
const int _LatchTime_ns;
|
||||
int _LatchTime_ns;
|
||||
|
||||
///
|
||||
QUdpSocket * _udpSocket;
|
||||
|
7
libsrc/leddevice/schemas/schema-adalight.json
Normal file
7
libsrc/leddevice/schemas/schema-adalight.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
7
libsrc/leddevice/schemas/schema-adalightapa102.json
Normal file
7
libsrc/leddevice/schemas/schema-adalightapa102.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
7
libsrc/leddevice/schemas/schema-apa102.json
Normal file
7
libsrc/leddevice/schemas/schema-apa102.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
7
libsrc/leddevice/schemas/schema-atmo.json
Normal file
7
libsrc/leddevice/schemas/schema-atmo.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
7
libsrc/leddevice/schemas/schema-atmoorb.json
Normal file
7
libsrc/leddevice/schemas/schema-atmoorb.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
7
libsrc/leddevice/schemas/schema-e131.json
Normal file
7
libsrc/leddevice/schemas/schema-e131.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
7
libsrc/leddevice/schemas/schema-fadecandy.json
Normal file
7
libsrc/leddevice/schemas/schema-fadecandy.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
7
libsrc/leddevice/schemas/schema-file.json
Normal file
7
libsrc/leddevice/schemas/schema-file.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
7
libsrc/leddevice/schemas/schema-hyperion-usbasp.json
Normal file
7
libsrc/leddevice/schemas/schema-hyperion-usbasp.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
7
libsrc/leddevice/schemas/schema-lightpack.json
Normal file
7
libsrc/leddevice/schemas/schema-lightpack.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
7
libsrc/leddevice/schemas/schema-lpd6803.json
Normal file
7
libsrc/leddevice/schemas/schema-lpd6803.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
7
libsrc/leddevice/schemas/schema-lpd8806.json
Normal file
7
libsrc/leddevice/schemas/schema-lpd8806.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
7
libsrc/leddevice/schemas/schema-multi-lightpack.json
Normal file
7
libsrc/leddevice/schemas/schema-multi-lightpack.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
7
libsrc/leddevice/schemas/schema-p9813.json
Normal file
7
libsrc/leddevice/schemas/schema-p9813.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
7
libsrc/leddevice/schemas/schema-paintpack.json
Normal file
7
libsrc/leddevice/schemas/schema-paintpack.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
7
libsrc/leddevice/schemas/schema-philipshue.json
Normal file
7
libsrc/leddevice/schemas/schema-philipshue.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
7
libsrc/leddevice/schemas/schema-piblaster.json
Normal file
7
libsrc/leddevice/schemas/schema-piblaster.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
7
libsrc/leddevice/schemas/schema-rawhid.json
Normal file
7
libsrc/leddevice/schemas/schema-rawhid.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
7
libsrc/leddevice/schemas/schema-sedu.json
Normal file
7
libsrc/leddevice/schemas/schema-sedu.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
7
libsrc/leddevice/schemas/schema-sk6812rgbw-spi.json
Normal file
7
libsrc/leddevice/schemas/schema-sk6812rgbw-spi.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
7
libsrc/leddevice/schemas/schema-tinkerforge.json
Normal file
7
libsrc/leddevice/schemas/schema-tinkerforge.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
7
libsrc/leddevice/schemas/schema-tmp2net.json
Normal file
7
libsrc/leddevice/schemas/schema-tmp2net.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
7
libsrc/leddevice/schemas/schema-tpm2.json
Normal file
7
libsrc/leddevice/schemas/schema-tpm2.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
7
libsrc/leddevice/schemas/schema-udpraw.json
Normal file
7
libsrc/leddevice/schemas/schema-udpraw.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
7
libsrc/leddevice/schemas/schema-ws2801.json
Normal file
7
libsrc/leddevice/schemas/schema-ws2801.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
7
libsrc/leddevice/schemas/schema-ws2812spi.json
Normal file
7
libsrc/leddevice/schemas/schema-ws2812spi.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"type":"object",
|
||||
"required":true,
|
||||
"properties":{
|
||||
},
|
||||
"additionalProperties": true
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user