Files
OpenRGB/Controllers/LEDStripController/LEDStripControllerDetect.cpp

137 lines
5.5 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-only |
\*---------------------------------------------------------*/
#include "Detector.h"
#include "LEDStripController.h"
#include "RGBController_LEDStrip.h"
#include "SettingsManager.h"
#include "LogManager.h"
/******************************************************************************************\
* *
* DetectLEDStripControllers *
* *
* Detect devices supported by the LEDStrip driver *
* *
\******************************************************************************************/
void DetectLEDStripControllers()
{
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());
return;
}
}
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.");
return;
}
if(dev.baud <= 0)
{
LOG_WARNING("[LEDStripController] baud value cannot be left empty.");
return;
}
if(dev.num_leds <= 0)
{
LOG_WARNING("[LEDStripController] num_leds value cannot be left empty.");
return;
}
std::string value = dev.port + "," + std::to_string(dev.baud) + "," + std::to_string(dev.num_leds);
LEDStripController* controller = new LEDStripController();
controller->Initialize((char *)value.c_str(), dev.protocol);
RGBController_LEDStrip* rgb_controller = new RGBController_LEDStrip(controller);
rgb_controller->name = dev.name;
ResourceManager::get()->RegisterRGBController(rgb_controller);
}
}
} /* DetectLEDStripControllers() */
REGISTER_DETECTOR("LED Strip", DetectLEDStripControllers);