From 840512751ce9c322120a4739f5b9dfccff389b76 Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Thu, 14 Aug 2025 20:08:31 -0500 Subject: [PATCH] Store name in SonyDualSenseController to avoid setting it in detector --- .../RGBController_SonyDualSense.cpp | 56 +++++++++---------- .../SonyDualSenseController.cpp | 14 +++-- .../SonyDualSenseController.h | 4 +- .../SonyGamepadControllerDetect.cpp | 10 ++-- 4 files changed, 47 insertions(+), 37 deletions(-) diff --git a/Controllers/SonyGamepadController/SonyDualSenseController/RGBController_SonyDualSense.cpp b/Controllers/SonyGamepadController/SonyDualSenseController/RGBController_SonyDualSense.cpp index b7d26fb4..2045017b 100644 --- a/Controllers/SonyGamepadController/SonyDualSenseController/RGBController_SonyDualSense.cpp +++ b/Controllers/SonyGamepadController/SonyDualSenseController/RGBController_SonyDualSense.cpp @@ -25,49 +25,49 @@ RGBController_SonyDualSense::RGBController_SonyDualSense(SonyDualSenseController* controller_ptr) { - controller = controller_ptr; + controller = controller_ptr; - name = "Sony DualSense"; + name = controller->GetName(); if(controller->IsBluetooth()) { name.append(" (BT)"); } - vendor = "Sony"; - type = DEVICE_TYPE_GAMEPAD; - description = "Sony DualSense Device"; - location = controller->GetLocation(); - serial = controller->GetSerialString(); + vendor = "Sony"; + type = DEVICE_TYPE_GAMEPAD; + description = "Sony DualSense Device"; + location = controller->GetLocation(); + serial = controller->GetSerialString(); mode Direct; - Direct.value = SONY_DUALSENSE_DIRECT_MODE_VALUE; - Direct.name = "Direct"; - Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; - Direct.color_mode = MODE_COLORS_PER_LED; - Direct.brightness_min = SONY_DUALSENSE_BRIGHTNESS_MIN; - Direct.brightness_max = SONY_DUALSENSE_BRIGHTNESS_MAX; - Direct.brightness = SONY_DUALSENSE_DEFAULT_BRIGHTNESS; + Direct.value = SONY_DUALSENSE_DIRECT_MODE_VALUE; + Direct.name = "Direct"; + Direct.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Direct.color_mode = MODE_COLORS_PER_LED; + Direct.brightness_min = SONY_DUALSENSE_BRIGHTNESS_MIN; + Direct.brightness_max = SONY_DUALSENSE_BRIGHTNESS_MAX; + Direct.brightness = SONY_DUALSENSE_DEFAULT_BRIGHTNESS; modes.push_back(Direct); mode Micoff; - Micoff.value = SONY_DUALSENSE_MIC_OFF_MODE_VALUE; - Micoff.name = "Mic Off (Direct)"; - Micoff.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; - Micoff.color_mode = MODE_COLORS_PER_LED; - Micoff.brightness_min = SONY_DUALSENSE_BRIGHTNESS_MIN; - Micoff.brightness_max = SONY_DUALSENSE_BRIGHTNESS_MAX; - Micoff.brightness = SONY_DUALSENSE_DEFAULT_BRIGHTNESS; + Micoff.value = SONY_DUALSENSE_MIC_OFF_MODE_VALUE; + Micoff.name = "Mic Off (Direct)"; + Micoff.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Micoff.color_mode = MODE_COLORS_PER_LED; + Micoff.brightness_min = SONY_DUALSENSE_BRIGHTNESS_MIN; + Micoff.brightness_max = SONY_DUALSENSE_BRIGHTNESS_MAX; + Micoff.brightness = SONY_DUALSENSE_DEFAULT_BRIGHTNESS; modes.push_back(Micoff); mode Micpulse; - Micpulse.value = SONY_DUALSENSE_MIC_PULSE_MODE_VALUE; - Micpulse.name = "Mic Pulse (Direct)"; - Micpulse.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; - Micpulse.color_mode = MODE_COLORS_PER_LED; - Micpulse.brightness_min = SONY_DUALSENSE_BRIGHTNESS_MIN; - Micpulse.brightness_max = SONY_DUALSENSE_BRIGHTNESS_MAX; - Micpulse.brightness = SONY_DUALSENSE_DEFAULT_BRIGHTNESS; + Micpulse.value = SONY_DUALSENSE_MIC_PULSE_MODE_VALUE; + Micpulse.name = "Mic Pulse (Direct)"; + Micpulse.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS; + Micpulse.color_mode = MODE_COLORS_PER_LED; + Micpulse.brightness_min = SONY_DUALSENSE_BRIGHTNESS_MIN; + Micpulse.brightness_max = SONY_DUALSENSE_BRIGHTNESS_MAX; + Micpulse.brightness = SONY_DUALSENSE_DEFAULT_BRIGHTNESS; modes.push_back(Micpulse); SetupZones(); diff --git a/Controllers/SonyGamepadController/SonyDualSenseController/SonyDualSenseController.cpp b/Controllers/SonyGamepadController/SonyDualSenseController/SonyDualSenseController.cpp index 5971d914..32c44566 100644 --- a/Controllers/SonyGamepadController/SonyDualSenseController/SonyDualSenseController.cpp +++ b/Controllers/SonyGamepadController/SonyDualSenseController/SonyDualSenseController.cpp @@ -15,11 +15,12 @@ #include "SonyDualSenseController.h" #include "StringUtils.h" -SonyDualSenseController::SonyDualSenseController(hid_device * device_handle, const char * device_path, bool is_bluetooth) +SonyDualSenseController::SonyDualSenseController(hid_device * device_handle, const char * device_path, bool is_bluetooth, std::string dev_name) { - dev = device_handle; - location = device_path; - this->is_bluetooth = is_bluetooth; + dev = device_handle; + location = device_path; + name = dev_name; + this->is_bluetooth = is_bluetooth; } SonyDualSenseController::~SonyDualSenseController() @@ -32,6 +33,11 @@ std::string SonyDualSenseController::GetLocation() return("HID: " + location); } +std::string SonyDualSenseController::GetName() +{ + return(name); +} + std::string SonyDualSenseController::GetSerialString() { wchar_t serial_string[128]; diff --git a/Controllers/SonyGamepadController/SonyDualSenseController/SonyDualSenseController.h b/Controllers/SonyGamepadController/SonyDualSenseController/SonyDualSenseController.h index 20b8abb9..e2953f26 100644 --- a/Controllers/SonyGamepadController/SonyDualSenseController/SonyDualSenseController.h +++ b/Controllers/SonyGamepadController/SonyDualSenseController/SonyDualSenseController.h @@ -34,10 +34,11 @@ enum class SonyDualSenseController { public: - SonyDualSenseController(hid_device * device_handle, const char * device_path, bool is_bluetooth); + SonyDualSenseController(hid_device * device_handle, const char * device_path, bool is_bluetooth, std::string dev_name); ~SonyDualSenseController(); std::string GetLocation(); + std::string GetName(); std::string GetSerialString(); void SetColors(std::vector colors, unsigned char brightness, unsigned char mode_value); @@ -46,5 +47,6 @@ public: private: hid_device* dev; std::string location; + std::string name; bool is_bluetooth; }; diff --git a/Controllers/SonyGamepadController/SonyGamepadControllerDetect.cpp b/Controllers/SonyGamepadController/SonyGamepadControllerDetect.cpp index 98c58bb1..409226ef 100644 --- a/Controllers/SonyGamepadController/SonyGamepadControllerDetect.cpp +++ b/Controllers/SonyGamepadController/SonyGamepadControllerDetect.cpp @@ -28,11 +28,12 @@ void DetectSonyDS4Controllers(hid_device_info* info, const std::string&) { hid_device* dev = hid_open_path(info->path); + if(dev) { SonyDS4Controller* controller = new SonyDS4Controller(dev, info->path); RGBController_SonyDS4* rgb_controller = new RGBController_SonyDS4(controller); - // Constructor sets the name + ResourceManager::get()->RegisterRGBController(rgb_controller); } } @@ -40,12 +41,13 @@ void DetectSonyDS4Controllers(hid_device_info* info, const std::string&) void DetectSonyDualSenseControllers(hid_device_info* info, const std::string& name) { hid_device* dev = hid_open_path(info->path); + if(dev) { bool is_bluetooth = info->interface_number == -1; - SonyDualSenseController* controller = new SonyDualSenseController(dev, info->path, is_bluetooth); + SonyDualSenseController* controller = new SonyDualSenseController(dev, info->path, is_bluetooth, name); RGBController_SonyDualSense* rgb_controller = new RGBController_SonyDualSense(controller); - rgb_controller->name = name; + ResourceManager::get()->RegisterRGBController(rgb_controller); } } @@ -54,4 +56,4 @@ REGISTER_HID_DETECTOR("Sony DualShock 4", DetectSonyDS4Controllers, SONY_V REGISTER_HID_DETECTOR("Sony DualShock 4", DetectSonyDS4Controllers, SONY_VID, SONY_DS4_V2_PID); REGISTER_HID_DETECTOR("Sony DualShock 4", DetectSonyDS4Controllers, SONY_VID, SONY_DS4_RECEIVER_PID); REGISTER_HID_DETECTOR("Sony DualSense", DetectSonyDualSenseControllers, SONY_VID, SONY_DUALSENSE_PID); -REGISTER_HID_DETECTOR("Sony DualSense Edge", DetectSonyDualSenseControllers, SONY_VID, SONY_DUALSENSE_EDGE_PID); \ No newline at end of file +REGISTER_HID_DETECTOR("Sony DualSense Edge", DetectSonyDualSenseControllers, SONY_VID, SONY_DUALSENSE_EDGE_PID);