Add DDP (Distributed Display Protocol) controller support
This commit is contained in:
parent
570cc16c98
commit
a31c4f5254
8 changed files with 930 additions and 0 deletions
92
Controllers/DDPController/DDPControllerDetect.cpp
Normal file
92
Controllers/DDPController/DDPControllerDetect.cpp
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
/*---------------------------------------------------------*\
|
||||
| DDPControllerDetect.cpp |
|
||||
| |
|
||||
| Detector for DDP devices |
|
||||
| |
|
||||
| This file is part of the OpenRGB project |
|
||||
| SPDX-License-Identifier: GPL-2.0-only |
|
||||
\*---------------------------------------------------------*/
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "Detector.h"
|
||||
#include "RGBController.h"
|
||||
#include "RGBController_DDP.h"
|
||||
#include "SettingsManager.h"
|
||||
#include "LogManager.h"
|
||||
#include "nlohmann/json.hpp"
|
||||
|
||||
using json = nlohmann::json;
|
||||
|
||||
void DetectDDPControllers()
|
||||
{
|
||||
json ddp_settings;
|
||||
std::vector<std::vector<DDPDevice>> device_lists;
|
||||
DDPDevice dev;
|
||||
|
||||
ddp_settings = ResourceManager::get()->GetSettingsManager()->GetSettings("DDPDevices");
|
||||
|
||||
if(ddp_settings.contains("devices"))
|
||||
{
|
||||
for(unsigned int device_idx = 0; device_idx < ddp_settings["devices"].size(); device_idx++)
|
||||
{
|
||||
dev.name = "";
|
||||
dev.ip = "";
|
||||
dev.port = DDP_DEFAULT_PORT;
|
||||
dev.num_leds = 0;
|
||||
|
||||
if(ddp_settings["devices"][device_idx].contains("name"))
|
||||
dev.name = ddp_settings["devices"][device_idx]["name"];
|
||||
if(ddp_settings["devices"][device_idx].contains("ip"))
|
||||
dev.ip = ddp_settings["devices"][device_idx]["ip"];
|
||||
if(ddp_settings["devices"][device_idx].contains("port"))
|
||||
dev.port = ddp_settings["devices"][device_idx]["port"];
|
||||
if(ddp_settings["devices"][device_idx].contains("num_leds"))
|
||||
dev.num_leds = ddp_settings["devices"][device_idx]["num_leds"];
|
||||
|
||||
if(dev.name.empty())
|
||||
dev.name = "DDP Device " + std::to_string(device_idx + 1);
|
||||
if(dev.ip.empty())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if(dev.num_leds == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
bool device_added_to_existing_list = false;
|
||||
|
||||
for(unsigned int list_idx = 0; list_idx < device_lists.size(); list_idx++)
|
||||
{
|
||||
for(unsigned int existing_device_idx = 0; existing_device_idx < device_lists[list_idx].size(); existing_device_idx++)
|
||||
{
|
||||
if(dev.ip == device_lists[list_idx][existing_device_idx].ip &&
|
||||
dev.port == device_lists[list_idx][existing_device_idx].port)
|
||||
{
|
||||
device_lists[list_idx].push_back(dev);
|
||||
device_added_to_existing_list = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(device_added_to_existing_list)
|
||||
break;
|
||||
}
|
||||
|
||||
if(!device_added_to_existing_list)
|
||||
{
|
||||
std::vector<DDPDevice> new_list;
|
||||
new_list.push_back(dev);
|
||||
device_lists.push_back(new_list);
|
||||
}
|
||||
}
|
||||
|
||||
for(unsigned int list_idx = 0; list_idx < device_lists.size(); list_idx++)
|
||||
{
|
||||
RGBController_DDP* rgb_controller = new RGBController_DDP(device_lists[list_idx]);
|
||||
ResourceManager::get()->RegisterRGBController(rgb_controller);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_DETECTOR("DDP", DetectDDPControllers);
|
||||
Loading…
Add table
Add a link
Reference in a new issue