mirror of
https://github.com/CalcProgrammer1/OpenRGB.git
synced 2026-03-06 07:08:13 -05:00
Move HID detector calls to RunHIDDetector/RunHIDWrappedDetector functions and return controller list from detector functions
This commit is contained in:
@@ -45,14 +45,6 @@
|
||||
#define GENESIS_XENON_200_PID 0x1007
|
||||
#define RGB_KEYBOARD_010CPID 0x010C
|
||||
|
||||
/******************************************************************************************\
|
||||
* *
|
||||
* DetectSinowealthControllers *
|
||||
* *
|
||||
* Tests the USB address to see if a Sinowealth controller exists there. *
|
||||
* *
|
||||
\******************************************************************************************/
|
||||
|
||||
#define MAX_EXPECTED_REPORT_SIZE 2048
|
||||
|
||||
struct expected_report
|
||||
@@ -243,119 +235,111 @@ static bool DetectUsages(hid_device_info* info, std::string name, unsigned int d
|
||||
return true;
|
||||
}
|
||||
|
||||
static void DetectGenesisXenon200(hid_device_info* info, const std::string name)
|
||||
DetectedControllers DetectGenesisXenon200(hid_device_info* info, const std::string name)
|
||||
{
|
||||
expected_reports reports{expected_report(0x04, 154), expected_report(0x08, 9)};
|
||||
if(!DetectUsages(info, name, 5, reports))
|
||||
DetectedControllers detected_controllers;
|
||||
expected_reports reports{expected_report(0x04, 154), expected_report(0x08, 9)};
|
||||
|
||||
if(DetectUsages(info, name, 5, reports))
|
||||
{
|
||||
return;
|
||||
hid_device* dev = reports.at(0).device;
|
||||
hid_device* cmd_dev = reports.at(1).device;
|
||||
|
||||
GenesisXenon200Controller* controller = new GenesisXenon200Controller(dev, cmd_dev, info->path, name);
|
||||
RGBController* rgb_controller = new RGBController_GenesisXenon200(controller);
|
||||
|
||||
detected_controllers.push_back(rgb_controller);
|
||||
}
|
||||
|
||||
hid_device* dev = reports.at(0).device;
|
||||
hid_device* cmd_dev = reports.at(1).device;
|
||||
|
||||
GenesisXenon200Controller* controller = new GenesisXenon200Controller(dev, cmd_dev, info->path, name);
|
||||
RGBController* rgb_controller = new RGBController_GenesisXenon200(controller);
|
||||
|
||||
DetectionManager::get()->RegisterRGBController(rgb_controller);
|
||||
|
||||
return(detected_controllers);
|
||||
}
|
||||
|
||||
static void DetectZetFuryPro(hid_device_info* info, const std::string& name)
|
||||
DetectedControllers DetectZetFuryPro(hid_device_info* info, const std::string& name)
|
||||
{
|
||||
DetectedControllers detected_controllers;
|
||||
#ifdef USE_HID_USAGE
|
||||
expected_reports reports{expected_report(0x04, 59)};
|
||||
if(!DetectUsages(info, name, 5, reports))
|
||||
if(DetectUsages(info, name, 5, reports))
|
||||
{
|
||||
return;
|
||||
}
|
||||
hid_device* dev = reports.at(0).device;
|
||||
hid_device* dev = reports.at(0).device;
|
||||
#else
|
||||
hid_device* dev = hid_open_path(info->path);
|
||||
#endif
|
||||
|
||||
if(dev)
|
||||
{
|
||||
SinowealthController1007* controller = new SinowealthController1007(dev, info->path, name);
|
||||
RGBController_Sinowealth1007* rgb_controller = new RGBController_Sinowealth1007(controller);
|
||||
hid_device* dev = hid_open_path(info->path);
|
||||
#endif
|
||||
if(dev)
|
||||
{
|
||||
SinowealthController1007* controller = new SinowealthController1007(dev, info->path, name);
|
||||
RGBController_Sinowealth1007* rgb_controller = new RGBController_Sinowealth1007(controller);
|
||||
|
||||
DetectionManager::get()->RegisterRGBController(rgb_controller);
|
||||
detected_controllers.push_back(rgb_controller);
|
||||
}
|
||||
}
|
||||
return(detected_controllers);
|
||||
}
|
||||
|
||||
static void DetectSinowealthMouse(hid_device_info* info, const std::string& name)
|
||||
DetectedControllers DetectSinowealthMouse(hid_device_info* info, const std::string& name)
|
||||
{
|
||||
DetectedControllers detected_controllers;
|
||||
#ifdef USE_HID_USAGE
|
||||
unsigned char command[6] = {0x05, 0x11, 0x00, 0x00, 0x00, 0x00};
|
||||
expected_reports reports{expected_report(0x04, 520, command, sizeof(command))};
|
||||
|
||||
if(!DetectUsages(info, name, 3, reports))
|
||||
if(DetectUsages(info, name, 3, reports))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
hid_device *dev = reports.at(0).device;
|
||||
hid_device *dev_cmd = reports.at(0).cmd_device;
|
||||
hid_device *dev = reports.at(0).device;
|
||||
hid_device *dev_cmd = reports.at(0).cmd_device;
|
||||
#else
|
||||
hid_device* dev = hid_open_path(info->path);
|
||||
hid_device* dev_cmd = dev;
|
||||
{
|
||||
hid_device* dev = hid_open_path(info->path);
|
||||
hid_device* dev_cmd = dev;
|
||||
#endif
|
||||
|
||||
if(dev && dev_cmd)
|
||||
{
|
||||
SinowealthController* controller = new SinowealthController(dev, dev_cmd, info->path, name);
|
||||
RGBController_Sinowealth* rgb_controller = new RGBController_Sinowealth(controller);
|
||||
if(dev && dev_cmd)
|
||||
{
|
||||
SinowealthController* controller = new SinowealthController(dev, dev_cmd, info->path, name);
|
||||
RGBController_Sinowealth* rgb_controller = new RGBController_Sinowealth(controller);
|
||||
|
||||
DetectionManager::get()->RegisterRGBController(rgb_controller);
|
||||
detected_controllers.push_back(rgb_controller);
|
||||
}
|
||||
}
|
||||
|
||||
return(detected_controllers);
|
||||
}
|
||||
|
||||
static void DetectGMOW_Cable(hid_device_info* info, const std::string& name)
|
||||
DetectedControllers DetectGMOW_Cable(hid_device_info* info, const std::string& name)
|
||||
{
|
||||
LOG_DEBUG("[%s] Detected connection via USB cable", name.c_str());
|
||||
hid_device *dev = hid_open_path(info->path);
|
||||
DetectedControllers detected_controllers;
|
||||
hid_device* dev;
|
||||
|
||||
dev = hid_open_path(info->path);
|
||||
|
||||
if(dev)
|
||||
{
|
||||
SinowealthGMOWController* controller = new SinowealthGMOWController(dev, info->path, GMOW_CABLE_CONNECTED, name);
|
||||
RGBController_GMOW* rgb_controller = new RGBController_GMOW(controller);
|
||||
|
||||
DetectionManager::get()->RegisterRGBController(rgb_controller);
|
||||
detected_controllers.push_back(rgb_controller);
|
||||
}
|
||||
|
||||
return(detected_controllers);
|
||||
}
|
||||
|
||||
static void DetectGMOW_Dongle(hid_device_info* info, const std::string& name)
|
||||
DetectedControllers DetectGMOW_Dongle(hid_device_info* info, const std::string& name)
|
||||
{
|
||||
/*-------------------------------------------------------------------------*\
|
||||
| When the GMOW is connected only via the wireless dongle, only one |
|
||||
| device shows up (PID=2022), and RGB packets go to that device. |
|
||||
| Same for when it is only plugged in via a cable but not a dongle (except |
|
||||
| the device is PID=2011). However, when both are plugged in, packets |
|
||||
| should only go to the cable connected device |
|
||||
\*-------------------------------------------------------------------------*/
|
||||
LOG_DEBUG("[%s] Detected connection via wireless dongle", name.c_str());
|
||||
hid_device_info* start = hid_enumerate(SINOWEALTH_VID,0);
|
||||
hid_device_info* curr = start;
|
||||
DetectedControllers detected_controllers;
|
||||
hid_device* dev;
|
||||
|
||||
while(curr)
|
||||
{
|
||||
if(curr->product_id == Glorious_Model_OW_PID2 || curr->product_id == Glorious_Model_DW_PID2)
|
||||
{
|
||||
return;
|
||||
}
|
||||
curr = curr->next;
|
||||
}
|
||||
hid_free_enumeration(start);
|
||||
|
||||
hid_device *dev = hid_open_path(info->path);
|
||||
dev = hid_open_path(info->path);
|
||||
|
||||
if(dev)
|
||||
{
|
||||
SinowealthGMOWController* controller = new SinowealthGMOWController(dev, info->path, GMOW_DONGLE_CONNECTED, name);
|
||||
RGBController_GMOW* rgb_controller = new RGBController_GMOW(controller);
|
||||
|
||||
DetectionManager::get()->RegisterRGBController(rgb_controller);
|
||||
detected_controllers.push_back(rgb_controller);
|
||||
}
|
||||
|
||||
return(detected_controllers);
|
||||
}
|
||||
|
||||
// static void DetectSinowealthKeyboard16(hid_device_info* info, const std::string& name)
|
||||
@@ -416,40 +400,46 @@ static void DetectGMOW_Dongle(hid_device_info* info, const std::string& name)
|
||||
// #endif
|
||||
// }
|
||||
|
||||
static void DetectSinowealthGenesisKeyboard(hid_device_info* info, const std::string& name)
|
||||
DetectedControllers DetectSinowealthGenesisKeyboard(hid_device_info* info, const std::string& name)
|
||||
{
|
||||
unsigned int pid = info->product_id;
|
||||
hid_device* dev = hid_open_path(info->path);
|
||||
DetectedControllers detected_controllers;
|
||||
unsigned int pid = info->product_id;
|
||||
hid_device* dev;
|
||||
|
||||
dev = hid_open_path(info->path);
|
||||
|
||||
if(dev)
|
||||
{
|
||||
SinowealthKeyboard90Controller* controller = new SinowealthKeyboard90Controller(dev, info->path, pid, name);
|
||||
RGBController_SinowealthKeyboard90* rgb_controller = new RGBController_SinowealthKeyboard90(controller);
|
||||
|
||||
DetectionManager::get()->RegisterRGBController(rgb_controller);
|
||||
detected_controllers.push_back(rgb_controller);
|
||||
}
|
||||
|
||||
return(detected_controllers);
|
||||
}
|
||||
|
||||
static void DetectSinowealthKeyboard10c(hid_device_info* info, const std::string& name)
|
||||
DetectedControllers DetectSinowealthKeyboard10c(hid_device_info* info, const std::string& name)
|
||||
{
|
||||
unsigned char command[7] = {0x06, 0x82, 0x01, 0x00, 0x01, 0x00, 0x06};
|
||||
expected_reports reports{expected_report(0x06, 520, command, 520)};
|
||||
DetectedControllers detected_controllers;
|
||||
unsigned char command[7] = {0x06, 0x82, 0x01, 0x00, 0x01, 0x00, 0x06};
|
||||
expected_reports reports{expected_report(0x06, 520, command, 520)};
|
||||
|
||||
if(!DetectUsages(info, name, 3, reports))
|
||||
if(DetectUsages(info, name, 3, reports))
|
||||
{
|
||||
return;
|
||||
hid_device *dev = reports.at(0).device;
|
||||
unsigned char model_id = reports.at(0).response[13];
|
||||
|
||||
if(dev && sinowealth_10c_keyboards.find(model_id) != sinowealth_10c_keyboards.end())
|
||||
{
|
||||
SinowealthKeyboard10cController* controller = new SinowealthKeyboard10cController(dev, info->path, sinowealth_10c_keyboards.at(model_id).device_name);
|
||||
RGBController_SinowealthKeyboard10c* rgb_controller = new RGBController_SinowealthKeyboard10c(controller, model_id);
|
||||
|
||||
detected_controllers.push_back(rgb_controller);
|
||||
}
|
||||
}
|
||||
|
||||
hid_device *dev = reports.at(0).device;
|
||||
unsigned char model_id = reports.at(0).response[13];
|
||||
|
||||
if(dev && sinowealth_10c_keyboards.find(model_id) != sinowealth_10c_keyboards.end())
|
||||
{
|
||||
SinowealthKeyboard10cController* controller = new SinowealthKeyboard10cController(dev, info->path, sinowealth_10c_keyboards.at(model_id).device_name);
|
||||
RGBController_SinowealthKeyboard10c* rgb_controller = new RGBController_SinowealthKeyboard10c(controller, model_id);
|
||||
|
||||
DetectionManager::get()->RegisterRGBController(rgb_controller);
|
||||
}
|
||||
return(detected_controllers);
|
||||
}
|
||||
|
||||
#ifdef USE_HID_USAGE
|
||||
|
||||
Reference in New Issue
Block a user