Files
OpenRGB/Controllers/LEDStripController/LEDStripControllerDetect.cpp

132 lines
4.9 KiB
C++

/*---------------------------------------------------------*\
| LEDStripControllerDetect.cpp |
| |
| Detector for serial LED strips |
| |
| Adam Honse (calcprogrammer1@gmail.com) 11 Dec 2016 |
| |
| This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-or-later |
\*---------------------------------------------------------*/
#include "DetectionManager.h"
#include "LEDStripController.h"
#include "LogManager.h"
#include "ResourceManager.h"
#include "RGBController_LEDStrip.h"
#include "SettingsManager.h"
DetectedControllers DetectLEDStripControllers()
{
DetectedControllers detected_controllers;
json ledstrip_settings;
LEDStripDevice dev;
/*-----------------------------------------------------*\
| Get LED Strip settings from settings manager |
\*-----------------------------------------------------*/
ledstrip_settings = ResourceManager::get()->GetSettingsManager()->GetSettings("LEDStripDevices");
/*-----------------------------------------------------*\
| If the LEDStrip settings contains devices, process |
\*-----------------------------------------------------*/
if(ledstrip_settings.contains("devices"))
{
for(unsigned int device_idx = 0; device_idx < ledstrip_settings["devices"].size(); device_idx++)
{
if(ledstrip_settings["devices"][device_idx].contains("name"))
{
dev.name = ledstrip_settings["devices"][device_idx]["name"];
}
else
{
/*-----------------------------------------*\
| Default name |
\*-----------------------------------------*/
dev.name = "LED Strip";
}
if(ledstrip_settings["devices"][device_idx].contains("port"))
{
dev.port = ledstrip_settings["devices"][device_idx]["port"];
}
if(ledstrip_settings["devices"][device_idx].contains("baud"))
{
dev.baud = ledstrip_settings["devices"][device_idx]["baud"];
}
if(ledstrip_settings["devices"][device_idx].contains("num_leds"))
{
dev.num_leds = ledstrip_settings["devices"][device_idx]["num_leds"];
}
if(ledstrip_settings["devices"][device_idx].contains("protocol"))
{
std::string protocol_string = ledstrip_settings["devices"][device_idx]["protocol"];
if(protocol_string == "keyboard_visualizer")
{
dev.protocol = LED_PROTOCOL_KEYBOARD_VISUALIZER;
}
else if(protocol_string == "adalight")
{
dev.protocol = LED_PROTOCOL_ADALIGHT;
}
else if(protocol_string == "tpm2")
{
dev.protocol = LED_PROTOCOL_TPM2;
}
else if(protocol_string == "basic_i2c")
{
dev.protocol = LED_PROTOCOL_BASIC_I2C;
}
else
{
LOG_WARNING("[LEDStripController] '%s' is not a valid value for protocol", protocol_string.c_str());
break;
}
}
else
{
/*-----------------------------------------*\
| Default to the Keyboard Visualizer |
| protocol |
\*-----------------------------------------*/
dev.protocol = LED_PROTOCOL_KEYBOARD_VISUALIZER;
}
if(dev.port.empty())
{
LOG_WARNING("[LEDStripController] port value cannot be left empty.");
break;
}
if(dev.baud <= 0)
{
LOG_WARNING("[LEDStripController] baud value cannot be left empty.");
break;
}
if(dev.num_leds <= 0)
{
LOG_WARNING("[LEDStripController] num_leds value cannot be left empty.");
break;
}
std::string value = dev.port + "," + std::to_string(dev.baud) + "," + std::to_string(dev.num_leds);
LEDStripController* controller = new LEDStripController(dev.name);
controller->Initialize((char *)value.c_str(), dev.protocol);
RGBController_LEDStrip* rgb_controller = new RGBController_LEDStrip(controller);
detected_controllers.push_back(rgb_controller);
}
}
return(detected_controllers);
}
REGISTER_DETECTOR("LED Strip", DetectLEDStripControllers);