mirror of
				https://github.com/hyperion-project/hyperion.ng.git
				synced 2025-03-01 10:33:28 +00:00 
			
		
		
		
	initial version of h801 led device
This commit is contained in:
		| @@ -35,6 +35,7 @@ SET(Leddevice_HEADERS | ||||
| 	${CURRENT_SOURCE_DIR}/LedDeviceSedu.h | ||||
| 	${CURRENT_SOURCE_DIR}/LedDeviceFile.h | ||||
| 	${CURRENT_SOURCE_DIR}/LedDeviceUdpRaw.h | ||||
|     ${CURRENT_SOURCE_DIR}/LedDeviceUdpH801.h | ||||
| 	${CURRENT_SOURCE_DIR}/LedDeviceUdpE131.h | ||||
| 	${CURRENT_SOURCE_DIR}/ProviderUdp.h | ||||
| 	${CURRENT_SOURCE_DIR}/LedDeviceHyperionUsbasp.h | ||||
| @@ -62,6 +63,7 @@ SET(Leddevice_SOURCES | ||||
| 	${CURRENT_SOURCE_DIR}/LedDeviceFile.cpp | ||||
| 	${CURRENT_SOURCE_DIR}/LedDeviceFadeCandy.cpp | ||||
| 	${CURRENT_SOURCE_DIR}/LedDeviceUdpRaw.cpp | ||||
|     ${CURRENT_SOURCE_DIR}/LedDeviceUdpH801.cpp | ||||
| 	${CURRENT_SOURCE_DIR}/LedDeviceUdpE131.cpp | ||||
| 	${CURRENT_SOURCE_DIR}/ProviderUdp.cpp | ||||
| 	${CURRENT_SOURCE_DIR}/LedDeviceHyperionUsbasp.cpp | ||||
|   | ||||
| @@ -46,6 +46,7 @@ | ||||
| #include "LedDeviceAtmo.h" | ||||
| #include "LedDeviceAdalightApa102.h" | ||||
| #include "LedDeviceAtmoOrb.h" | ||||
| #include "LedDeviceUdpH801.h" | ||||
|  | ||||
| #ifdef ENABLE_WS2812BPWM | ||||
| 	#include "LedDeviceWS2812b.h" | ||||
| @@ -101,7 +102,8 @@ LedDevice * LedDeviceFactory::construct(const Json::Value & deviceConfig) | ||||
| 	#endif | ||||
| 	LedDevice::addToDeviceMap("philipshue", LedDevicePhilipsHue::construct); | ||||
| 	LedDevice::addToDeviceMap("atmoorb", LedDeviceAtmoOrb::construct); | ||||
| 	 | ||||
| 	LedDevice::addToDeviceMap("h801", LedDeviceUdpH801::construct); | ||||
|  | ||||
| 	// direct usb | ||||
| 	LedDevice::addToDeviceMap("hyperion-usbasp", LedDeviceHyperionUsbasp::construct); | ||||
| 	LedDevice::addToDeviceMap("rawhid", LedDeviceRawHID::construct); | ||||
|   | ||||
| @@ -27,5 +27,6 @@ | ||||
| 		<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> | ||||
| 		<file alias="schema-h801">schemas/schema-h801.json</file> | ||||
| 	</qresource> | ||||
| </RCC> | ||||
|   | ||||
							
								
								
									
										67
									
								
								libsrc/leddevice/LedDeviceUdpH801.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								libsrc/leddevice/LedDeviceUdpH801.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,67 @@ | ||||
| // STL includes | ||||
| #include <cstring> | ||||
| #include <cstdio> | ||||
| #include <iostream> | ||||
|  | ||||
| #include <QHostInfo> | ||||
|  | ||||
| // hyperion local includes | ||||
| #include "LedDeviceUdpH801.h" | ||||
|  | ||||
| LedDeviceUdpH801::LedDeviceUdpH801(const Json::Value &deviceConfig) : ProviderUdp(deviceConfig) | ||||
| { | ||||
| 	setConfig(deviceConfig); | ||||
| } | ||||
|  | ||||
| bool LedDeviceUdpH801::setConfig(const Json::Value &deviceConfig) | ||||
| { | ||||
| 	/* The H801 port is fixed */ | ||||
| 	_port = 30977; | ||||
| 	/* 10ms seems to be a safe default for the wait time */ | ||||
| 	_LatchTime_ns = deviceConfig.get("latchtime", 10000000).asInt(); | ||||
|  | ||||
| 	_ids.clear(); | ||||
| 	for (Json::Value::ArrayIndex i = 0; i < deviceConfig["lightIds"].size(); i++) { | ||||
| 		QString id(deviceConfig["lightIds"][i].asCString()); | ||||
| 		_ids.push_back(id.toInt(nullptr, 16)); | ||||
| 	} | ||||
|  | ||||
| 	_message = QByteArray(_prefix_size + _colors + _id_size * _ids.size() + _suffix_size, 0x00); | ||||
| 	_message[0] = 0xFB; | ||||
| 	_message[1] = 0xEB; | ||||
|  | ||||
| 	for(int i=0; i<_ids.length(); i++){ | ||||
| 		_message[_prefix_size + _colors + i * _id_size + 0] = (_ids[i] >> 0x00) & 0xFF; | ||||
| 		_message[_prefix_size + _colors + i * _id_size + 1] = (_ids[i] >> 0x08) & 0xFF; | ||||
| 		_message[_prefix_size + _colors + i * _id_size + 2] = (_ids[i] >> 0x10) & 0xFF; | ||||
| 	} | ||||
|  | ||||
| 	Debug( _log, "H801 using %s:%d", _address.toString().toStdString().c_str() , _port ); | ||||
|  | ||||
| 	return true; | ||||
| } | ||||
|  | ||||
| LedDevice* LedDeviceUdpH801::construct(const Json::Value &deviceConfig) | ||||
| { | ||||
| 	return new LedDeviceUdpH801(deviceConfig); | ||||
| } | ||||
|  | ||||
| int LedDeviceUdpH801::write(const std::vector<ColorRgb> &ledValues) | ||||
| { | ||||
| 	ColorRgb color = ledValues[0]; | ||||
| 	_message[_prefix_size + 0] = color.red; | ||||
| 	_message[_prefix_size + 1] = color.green; | ||||
| 	_message[_prefix_size + 2] = color.blue; | ||||
|  | ||||
| 	writeBytes(_message.size(), reinterpret_cast<const uint8_t*>(_message.data())); | ||||
| } | ||||
|  | ||||
| int LedDeviceUdpH801::switchOff() | ||||
| { | ||||
| 	return write(std::vector<ColorRgb>(_ledCount, ColorRgb{0,0,0})); | ||||
| } | ||||
|  | ||||
| LedDeviceUdpH801::~LedDeviceUdpH801() | ||||
| { | ||||
| 	ProviderUdp::~ProviderUdp(); | ||||
| } | ||||
							
								
								
									
										59
									
								
								libsrc/leddevice/LedDeviceUdpH801.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								libsrc/leddevice/LedDeviceUdpH801.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | ||||
| #pragma once | ||||
|  | ||||
| #include <QtCore> | ||||
| #include <QByteArray> | ||||
| #include <QUdpSocket> | ||||
|  | ||||
| // STL includes | ||||
| #include <string> | ||||
|  | ||||
| // hyperion includes | ||||
| #include "ProviderUdp.h" | ||||
|  | ||||
| /// | ||||
| /// Implementation of the LedDevice interface for sending led colors via udp. | ||||
| /// | ||||
| class LedDeviceUdpH801 : public ProviderUdp | ||||
| { | ||||
| protected: | ||||
| 	QList<int> _ids; | ||||
| 	QByteArray _message; | ||||
| 	const int _prefix_size = 2; | ||||
| 	const int _colors = 5; | ||||
| 	const int _id_size = 3; | ||||
| 	const int _suffix_size = 1; | ||||
|  | ||||
| public: | ||||
| 	/// | ||||
| 	/// Constructs specific LedDevice | ||||
| 	/// | ||||
| 	/// @param deviceConfig json device config | ||||
| 	/// | ||||
| 	LedDeviceUdpH801(const Json::Value &deviceConfig); | ||||
|  | ||||
| 	/// | ||||
| 	/// Destructor of the LedDevice; closes the output device if it is open | ||||
| 	/// | ||||
| 	virtual ~LedDeviceUdpH801(); | ||||
|  | ||||
| 	/// | ||||
| 	/// 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 | ||||
| 	/// | ||||
| 	/// @param ledValues The color-value per led | ||||
| 	/// @return Zero on succes else negative | ||||
| 	/// | ||||
| 	virtual int write(const std::vector<ColorRgb> &ledValues); | ||||
|  | ||||
| 	/// Switch the leds off | ||||
| 	virtual int switchOff(); | ||||
| }; | ||||
							
								
								
									
										27
									
								
								libsrc/leddevice/schemas/schema-h801.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								libsrc/leddevice/schemas/schema-h801.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| { | ||||
| 	"type":"object", | ||||
| 	"required":true, | ||||
| 	"properties":{ | ||||
| 		"host" : { | ||||
| 			"type": "string", | ||||
| 			"title":"Target IP", | ||||
| 		    "default": "255.255.255.255", | ||||
| 			"propertyOrder" : 1 | ||||
| 		}, | ||||
| 		"port" : { | ||||
| 			"type": "integer", | ||||
| 			"title":"Port", | ||||
| 			"default": 30977, | ||||
| 			"propertyOrder" : 2 | ||||
| 		}, | ||||
| 		"lightIds": { | ||||
| 			"type": "array", | ||||
| 			"title":"Light ids", | ||||
| 			"items" : { | ||||
| 				"type" : "string" | ||||
| 			}, | ||||
| 			"propertyOrder" : 3 | ||||
| 		} | ||||
| 	}, | ||||
| 	"additionalProperties": true | ||||
| } | ||||
		Reference in New Issue
	
	Block a user