mirror of
				https://github.com/hyperion-project/hyperion.ng.git
				synced 2025-03-01 10:33:28 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Stl includes
 | |
| #include <exception>
 | |
| #include <map>
 | |
| 
 | |
| // Build configuration
 | |
| #include <HyperionConfig.h>
 | |
| 
 | |
| // Leddevice includes
 | |
| #include <leddevice/LedDeviceFactory.h>
 | |
| #include <leddevice/LedDeviceWrapper.h>
 | |
| #include <utils/Logger.h>
 | |
| #include <leddevice/LedDevice.h>
 | |
| 
 | |
| // autogen
 | |
| #include "LedDevice_headers.h"
 | |
| 
 | |
| LedDevice * LedDeviceFactory::construct(const QJsonObject & deviceConfig)
 | |
| {
 | |
| 	Logger * log = Logger::getInstance("LEDDEVICE");
 | |
| 	QJsonDocument config(deviceConfig);
 | |
| 	QString ss(config.toJson(QJsonDocument::Indented));
 | |
| 
 | |
| 	QString type = deviceConfig["type"].toString("UNSPECIFIED").toLower();
 | |
| 
 | |
| 	const LedDeviceRegistry& devList = LedDeviceWrapper::getDeviceMap();
 | |
| 	LedDevice* device = nullptr;
 | |
| 	try
 | |
| 	{
 | |
| 		for ( auto dev: devList)
 | |
| 		{
 | |
| 			if (dev.first == type)
 | |
| 			{
 | |
| 				device = dev.second(deviceConfig);
 | |
| 				Info(log,"LedDevice '%s' configured.", QSTRING_CSTR(dev.first));
 | |
| 				break;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		if (device == nullptr)
 | |
| 		{
 | |
| 			Error(log, "Dummy device used, because configured device '%s' is unknown", QSTRING_CSTR(type) );
 | |
| 			throw std::runtime_error("unknown device");
 | |
| 		}
 | |
| 	}
 | |
| 	catch(std::exception& e)
 | |
| 	{
 | |
| 
 | |
| 		Error(log, "Dummy device used, because configured device '%s' throws error '%s'", QSTRING_CSTR(type), e.what());
 | |
| 		const QJsonObject dummyDeviceConfig;
 | |
| 		device = LedDeviceFile::construct(QJsonObject());
 | |
| 	}
 | |
| 
 | |
| 	return device;
 | |
| }
 |