/*---------------------------------------------------------*\
| RealtekARGBControllerDetect.cpp                           |
|                                                           |
|   Detector for Realtek USB ARGB ICs                       |
|                                                           |
|   Jerry Fan (JerryFan0612)                    13 Mar 2026 |
|                                                           |
|   This file is part of the OpenRGB project                |
|   SPDX-License-Identifier: GPL-2.0-or-later               |
\*---------------------------------------------------------*/

#include "Detector.h"
#include "RGBController.h"
#include "RGBController_RealtekARGB.h"

/******************************************************************************************\
*                                                                                          *
*   DetectRealtekARGBControllers                                                           *
*                                                                                          *
*       Tests the USB address to see if an Realtek ARGB controller exists there            *
*                                                                                          *
\******************************************************************************************/
void DetectRealtekARGBControllers(hid_device_info* info, const std::string& /*name*/)
{
    RealtekARGBController* controller = NULL;
    RGBController_RealtekARGB* rgb_controller = NULL;
    hid_device* dev = hid_open_path(info->path);

    if(dev)
    {
        controller = new RealtekARGBController(dev, info);
        if(controller->get_support_openrgb())
        {
            rgb_controller = new RGBController_RealtekARGB(controller);
            if(rgb_controller->type != DEVICE_TYPE_UNKNOWN)
            {
                ResourceManager::get()->RegisterRGBController(rgb_controller);
            }
            else
            {
                delete rgb_controller;
            }
        }
        else
        {
            delete controller;
        }
    }
    return;
}

REGISTER_HID_DETECTOR_PU("RTL9209", DetectRealtekARGBControllers, REALTEK_ARGB_VID, REALTEK_ARGB_PID, REALTEK_ARGB_HID2SCSI_PG, REALTEK_ARGB_HID2SCSI_USAGE);
