From 8f7e4963de34b0dabb88ed05d459538dc1afde3a Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Wed, 31 Jul 2024 01:02:34 -0500 Subject: [PATCH] Fix wstring to string conversion in CoolerMaster controllers --- .../CMARGBController/CMARGBController.cpp | 31 +++++++----- .../CMARGBController/CMARGBController.h | 1 - .../CMARGBGen2A1Controller.cpp | 24 ++++------ .../CMARGBGen2A1Controller.h | 1 - .../CMKeyboardAbstractController.cpp | 7 ++- .../CMMM711Controller/CMMM711Controller.cpp | 31 +++++++----- .../CMMMController/CMMMController.cpp | 32 ++++++++----- .../CMMMController/CMMMController.h | 2 - .../CMMP750Controller/CMMP750Controller.cpp | 43 +++++++++-------- .../CMMP750Controller/CMMP750Controller.h | 1 - .../CMMonitorController.cpp | 24 ++++------ .../CMMonitorController/CMMonitorController.h | 2 +- .../CMR6000Controller/CMR6000Controller.cpp | 44 +++++++++-------- .../CMR6000Controller/CMR6000Controller.h | 1 - .../CMRGBController/CMRGBController.cpp | 31 +++++++----- .../CMRGBController/CMRGBController.h | 2 +- .../CMSmallARGBController.cpp | 47 ++++++++++--------- .../CMSmallARGBController.h | 2 +- 18 files changed, 173 insertions(+), 153 deletions(-) diff --git a/Controllers/CoolerMasterController/CMARGBController/CMARGBController.cpp b/Controllers/CoolerMasterController/CMARGBController/CMARGBController.cpp index d8cf66be..01b2b580 100644 --- a/Controllers/CoolerMasterController/CMARGBController/CMARGBController.cpp +++ b/Controllers/CoolerMasterController/CMARGBController/CMARGBController.cpp @@ -10,28 +10,25 @@ \*---------------------------------------------------------*/ #include "CMARGBController.h" +#include "StringUtils.h" CMARGBController::CMARGBController(hid_device* dev_handle, char *_path, unsigned char _zone_idx, std::shared_ptr cm_mutex) { - const int szTemp = 256; - wchar_t tmpName[szTemp]; - dev = dev_handle; location = _path; zone_index = _zone_idx; mutex_ptr = cm_mutex; - hid_get_manufacturer_string(dev, tmpName, szTemp); - std::wstring wName = std::wstring(tmpName); - device_name = std::string(wName.begin(), wName.end()); + /*---------------------------------------------------------*\ + | Get device name from HID manufacturer and product strings | + \*---------------------------------------------------------*/ + wchar_t name_string[HID_MAX_STR]; - hid_get_product_string(dev, tmpName, szTemp); - wName = std::wstring(tmpName); - device_name.append(" ").append(std::string(wName.begin(), wName.end())); + hid_get_manufacturer_string(dev, name_string, HID_MAX_STR); + device_name = StringUtils::wstring_to_string(name_string); - hid_get_serial_number_string(dev, tmpName, szTemp); - wName = std::wstring(tmpName); - serial = std::string(wName.begin(), wName.end()); + hid_get_product_string(dev, name_string, HID_MAX_STR); + device_name.append(" ").append(StringUtils::wstring_to_string(name_string)); GetStatus(); } @@ -92,7 +89,15 @@ std::string CMARGBController::GetDeviceName() std::string CMARGBController::GetSerial() { - return(serial); + wchar_t serial_string[HID_MAX_STR]; + int ret = hid_get_serial_number_string(dev, serial_string, HID_MAX_STR); + + if(ret != 0) + { + return(""); + } + + return(StringUtils::wstring_to_string(serial_string)); } std::string CMARGBController::GetLocation() diff --git a/Controllers/CoolerMasterController/CMARGBController/CMARGBController.h b/Controllers/CoolerMasterController/CMARGBController/CMARGBController.h index b4e47493..9f8a715d 100644 --- a/Controllers/CoolerMasterController/CMARGBController/CMARGBController.h +++ b/Controllers/CoolerMasterController/CMARGBController/CMARGBController.h @@ -121,7 +121,6 @@ public: private: std::string device_name; - std::string serial; std::string location; hid_device* dev; std::shared_ptr mutex_ptr; diff --git a/Controllers/CoolerMasterController/CMARGBGen2A1Controller/CMARGBGen2A1Controller.cpp b/Controllers/CoolerMasterController/CMARGBGen2A1Controller/CMARGBGen2A1Controller.cpp index 6c7ad072..5ea68f9c 100644 --- a/Controllers/CoolerMasterController/CMARGBGen2A1Controller/CMARGBGen2A1Controller.cpp +++ b/Controllers/CoolerMasterController/CMARGBGen2A1Controller/CMARGBGen2A1Controller.cpp @@ -11,25 +11,13 @@ #include #include "CMARGBGen2A1Controller.h" +#include "StringUtils.h" CMARGBGen2A1controller::CMARGBGen2A1controller(hid_device* dev_handle, const hid_device_info& info) { dev = dev_handle; location = info.path; - wchar_t serial_string[128]; - int ret = hid_get_serial_number_string(dev, serial_string, 128); - - if(ret != 0) - { - serial_number = ""; - } - else - { - std::wstring return_wstring = serial_string; - serial_number = std::string(return_wstring.begin(), return_wstring.end()); - } - /*---------------------------------------------*\ | Setup direct mode on start | \*---------------------------------------------*/ @@ -48,7 +36,15 @@ std::string CMARGBGen2A1controller::GetDeviceLocation() std::string CMARGBGen2A1controller::GetSerialString() { - return(serial_number); + wchar_t serial_string[128]; + int ret = hid_get_serial_number_string(dev, serial_string, 128); + + if(ret != 0) + { + return(""); + } + + return(StringUtils::wstring_to_string(serial_string)); } void CMARGBGen2A1controller::SaveToFlash() diff --git a/Controllers/CoolerMasterController/CMARGBGen2A1Controller/CMARGBGen2A1Controller.h b/Controllers/CoolerMasterController/CMARGBGen2A1Controller/CMARGBGen2A1Controller.h index adb7bc48..c82489f6 100644 --- a/Controllers/CoolerMasterController/CMARGBGen2A1Controller/CMARGBGen2A1Controller.h +++ b/Controllers/CoolerMasterController/CMARGBGen2A1Controller/CMARGBGen2A1Controller.h @@ -81,7 +81,6 @@ public: void SaveToFlash(); private: - std::string serial_number; std::string location; bool software_mode_activated = false; hid_device* dev; diff --git a/Controllers/CoolerMasterController/CMKeyboardController/CMKeyboardAbstractController.cpp b/Controllers/CoolerMasterController/CMKeyboardController/CMKeyboardAbstractController.cpp index 3505a516..faab708f 100644 --- a/Controllers/CoolerMasterController/CMKeyboardController/CMKeyboardAbstractController.cpp +++ b/Controllers/CoolerMasterController/CMKeyboardController/CMKeyboardAbstractController.cpp @@ -10,6 +10,7 @@ \*---------------------------------------------------------*/ #include "CMKeyboardAbstractController.h" +#include "StringUtils.h" CMKeyboardAbstractController::CMKeyboardAbstractController(hid_device* dev_handle, hid_device_info* dev_info) { @@ -20,12 +21,10 @@ CMKeyboardAbstractController::CMKeyboardAbstractController(hid_device* dev_handl m_sLocation = dev_info->path; hid_get_manufacturer_string(m_pDev, tmp, HID_MAX_STR); - std::wstring wVendorName = std::wstring(tmp); - m_vendorName = std::string(wVendorName.begin(), wVendorName.end()); + m_vendorName = StringUtils::wstring_to_string(tmp); hid_get_product_string(m_pDev, tmp, HID_MAX_STR); - std::wstring wDeviceName = std::wstring(tmp); - m_deviceName = std::string(wDeviceName.begin(), wDeviceName.end()); + m_deviceName = StringUtils::wstring_to_string(tmp); m_serialNumber = m_deviceName; bool bNotFound = true; diff --git a/Controllers/CoolerMasterController/CMMM711Controller/CMMM711Controller.cpp b/Controllers/CoolerMasterController/CMMM711Controller/CMMM711Controller.cpp index 11e92291..e6cc5007 100644 --- a/Controllers/CoolerMasterController/CMMM711Controller/CMMM711Controller.cpp +++ b/Controllers/CoolerMasterController/CMMM711Controller/CMMM711Controller.cpp @@ -11,27 +11,24 @@ #include #include "CMMM711Controller.h" +#include "StringUtils.h" CMMM711Controller::CMMM711Controller(hid_device* dev_handle, char *_path) { - const int szTemp = HID_MAX_STR; - wchar_t tmpName[szTemp]; - dev = dev_handle; location = _path; current_speed = CM_MM711_SPEED_NORMAL; - hid_get_manufacturer_string(dev, tmpName, szTemp); - std::wstring wName = std::wstring(tmpName); - device_name = std::string(wName.begin(), wName.end()); + /*---------------------------------------------------------*\ + | Get device name from HID manufacturer and product strings | + \*---------------------------------------------------------*/ + wchar_t name_string[HID_MAX_STR]; - hid_get_product_string(dev, tmpName, szTemp); - wName = std::wstring(tmpName); - device_name.append(" ").append(std::string(wName.begin(), wName.end())); + hid_get_manufacturer_string(dev, name_string, HID_MAX_STR); + device_name = StringUtils::wstring_to_string(name_string); - hid_get_indexed_string(dev, 2, tmpName, szTemp); - wName = std::wstring(tmpName); - serial = std::string(wName.begin(), wName.end()); + hid_get_product_string(dev, name_string, HID_MAX_STR); + device_name.append(" ").append(StringUtils::wstring_to_string(name_string)); SendInitPacket(); GetColourStatus(); @@ -94,7 +91,15 @@ std::string CMMM711Controller::GetDeviceName() std::string CMMM711Controller::GetSerial() { - return(serial); + wchar_t serial_string[HID_MAX_STR]; + int ret = hid_get_serial_number_string(dev, serial_string, HID_MAX_STR); + + if(ret != 0) + { + return(""); + } + + return(StringUtils::wstring_to_string(serial_string)); } std::string CMMM711Controller::GetLocation() diff --git a/Controllers/CoolerMasterController/CMMMController/CMMMController.cpp b/Controllers/CoolerMasterController/CMMMController/CMMMController.cpp index 142ecf3e..53e3e922 100644 --- a/Controllers/CoolerMasterController/CMMMController/CMMMController.cpp +++ b/Controllers/CoolerMasterController/CMMMController/CMMMController.cpp @@ -12,24 +12,14 @@ #include #include "CMMMController.h" +#include "StringUtils.h" CMMMController::CMMMController(hid_device* dev_handle, char *_path, uint16_t pid) : product_id(pid) { - const int szTemp = HID_MAX_STR; - wchar_t tmpName[szTemp]; - dev = dev_handle; location = _path; current_speed = CM_MM_SPEED_3; - hid_get_manufacturer_string(dev, tmpName, szTemp); - std::wstring wName = std::wstring(tmpName); - vendor = std::string(wName.begin(), wName.end()); - - hid_get_indexed_string(dev, 2, tmpName, szTemp); - wName = std::wstring(tmpName); - serial = std::string(wName.begin(), wName.end()); - if(product_id == CM_MM530_PID || product_id == CM_MM531_PID) { command_code = CM_MM5XX_COMMAND; @@ -125,12 +115,28 @@ void CMMMController::GetModeStatus() std::string CMMMController::GetDeviceVendor() { - return vendor; + wchar_t vendor_string[HID_MAX_STR]; + int ret = hid_get_manufacturer_string(dev, vendor_string, HID_MAX_STR); + + if(ret != 0) + { + return(""); + } + + return(StringUtils::wstring_to_string(vendor_string)); } std::string CMMMController::GetSerial() { - return serial; + wchar_t serial_string[HID_MAX_STR]; + int ret = hid_get_indexed_string(dev, 2, serial_string, HID_MAX_STR); + + if(ret != 0) + { + return(""); + } + + return(StringUtils::wstring_to_string(serial_string)); } std::string CMMMController::GetLocation() diff --git a/Controllers/CoolerMasterController/CMMMController/CMMMController.h b/Controllers/CoolerMasterController/CMMMController/CMMMController.h index 0f69b839..32623bac 100644 --- a/Controllers/CoolerMasterController/CMMMController/CMMMController.h +++ b/Controllers/CoolerMasterController/CMMMController/CMMMController.h @@ -114,8 +114,6 @@ public: void SendSavePacket(); private: std::string name; - std::string vendor; - std::string serial; std::string location; hid_device* dev; diff --git a/Controllers/CoolerMasterController/CMMP750Controller/CMMP750Controller.cpp b/Controllers/CoolerMasterController/CMMP750Controller/CMMP750Controller.cpp index acabd4c5..10342f22 100644 --- a/Controllers/CoolerMasterController/CMMP750Controller/CMMP750Controller.cpp +++ b/Controllers/CoolerMasterController/CMMP750Controller/CMMP750Controller.cpp @@ -10,6 +10,7 @@ \*---------------------------------------------------------*/ #include "CMMP750Controller.h" +#include "StringUtils.h" static unsigned char colour_mode_data[][6] = { @@ -31,20 +32,16 @@ CMMP750Controller::CMMP750Controller(hid_device* dev_handle, char *_path) dev = dev_handle; location = _path; - const int szTemp = 256; - wchar_t tmpName[szTemp]; + /*---------------------------------------------------------*\ + | Get device name from HID manufacturer and product strings | + \*---------------------------------------------------------*/ + wchar_t name_string[HID_MAX_STR]; - hid_get_manufacturer_string(dev, tmpName, szTemp); - std::wstring wName = std::wstring(tmpName); - device_name = std::string(wName.begin(), wName.end()); + hid_get_manufacturer_string(dev, name_string, HID_MAX_STR); + device_name = StringUtils::wstring_to_string(name_string); - hid_get_product_string(dev, tmpName, szTemp); - wName = std::wstring(tmpName); - device_name.append(" ").append(std::string(wName.begin(), wName.end())); - - hid_get_serial_number_string(dev, tmpName, szTemp); - wName = std::wstring(tmpName); - serial = std::string(wName.begin(), wName.end()); + hid_get_product_string(dev, name_string, HID_MAX_STR); + device_name.append(" ").append(StringUtils::wstring_to_string(name_string)); GetStatus(); //When setting up device get current status } @@ -88,12 +85,20 @@ void CMMP750Controller::GetStatus() std::string CMMP750Controller::GetDeviceName() { - return device_name; + return(device_name); } std::string CMMP750Controller::GetSerial() { - return serial; + wchar_t serial_string[HID_MAX_STR]; + int ret = hid_get_serial_number_string(dev, serial_string, HID_MAX_STR); + + if(ret != 0) + { + return(""); + } + + return(StringUtils::wstring_to_string(serial_string)); } std::string CMMP750Controller::GetLocation() @@ -103,27 +108,27 @@ std::string CMMP750Controller::GetLocation() unsigned char CMMP750Controller::GetMode() { - return current_mode; + return(current_mode); } unsigned char CMMP750Controller::GetLedRed() { - return current_red; + return(current_red); } unsigned char CMMP750Controller::GetLedGreen() { - return current_green; + return(current_green); } unsigned char CMMP750Controller::GetLedBlue() { - return current_blue; + return(current_blue); } unsigned char CMMP750Controller::GetLedSpeed() { - return current_speed; + return(current_speed); } void CMMP750Controller::SetMode(unsigned char mode, unsigned char speed) diff --git a/Controllers/CoolerMasterController/CMMP750Controller/CMMP750Controller.h b/Controllers/CoolerMasterController/CMMP750Controller/CMMP750Controller.h index 77c80d98..00df9599 100644 --- a/Controllers/CoolerMasterController/CMMP750Controller/CMMP750Controller.h +++ b/Controllers/CoolerMasterController/CMMP750Controller/CMMP750Controller.h @@ -84,7 +84,6 @@ public: private: std::string device_name; - std::string serial; std::string location; hid_device* dev; diff --git a/Controllers/CoolerMasterController/CMMonitorController/CMMonitorController.cpp b/Controllers/CoolerMasterController/CMMonitorController/CMMonitorController.cpp index 301334c5..d2e5aeaf 100644 --- a/Controllers/CoolerMasterController/CMMonitorController/CMMonitorController.cpp +++ b/Controllers/CoolerMasterController/CMMonitorController/CMMonitorController.cpp @@ -11,6 +11,7 @@ #include #include "CMMonitorController.h" +#include "StringUtils.h" using namespace std::chrono_literals; @@ -18,19 +19,6 @@ CMMonitorController::CMMonitorController(hid_device* dev_handle, const hid_devic { dev = dev_handle; location = info.path; - - wchar_t serial_string[128]; - int ret = hid_get_serial_number_string(dev, serial_string, 128); - - if(ret != 0) - { - serial_number = ""; - } - else - { - std::wstring return_wstring = serial_string; - serial_number = std::string(return_wstring.begin(), return_wstring.end()); - } } CMMonitorController::~CMMonitorController() @@ -45,7 +33,15 @@ std::string CMMonitorController::GetDeviceLocation() std::string CMMonitorController::GetSerialString() { - return(serial_number); + wchar_t serial_string[128]; + int ret = hid_get_serial_number_string(dev, serial_string, 128); + + if(ret != 0) + { + return(""); + } + + return(StringUtils::wstring_to_string(serial_string)); } void CMMonitorController::SetMode(uint8_t mode_value, const RGBColor& color, uint8_t speed, uint8_t brightness) diff --git a/Controllers/CoolerMasterController/CMMonitorController/CMMonitorController.h b/Controllers/CoolerMasterController/CMMonitorController/CMMonitorController.h index df4efa13..bf296d10 100644 --- a/Controllers/CoolerMasterController/CMMonitorController/CMMonitorController.h +++ b/Controllers/CoolerMasterController/CMMonitorController/CMMonitorController.h @@ -49,8 +49,8 @@ public: void SendDirect(const std::vector& colors); void SetMode(uint8_t mode_value, const RGBColor& color, uint8_t speed, uint8_t brightness); void SetCustomMode(const std::vector& colors, uint8_t brightnesss); + private: - std::string serial_number; std::string location; hid_device* dev; bool software_mode_enabled = false; diff --git a/Controllers/CoolerMasterController/CMR6000Controller/CMR6000Controller.cpp b/Controllers/CoolerMasterController/CMR6000Controller/CMR6000Controller.cpp index 140e5ca6..05babe7b 100644 --- a/Controllers/CoolerMasterController/CMR6000Controller/CMR6000Controller.cpp +++ b/Controllers/CoolerMasterController/CMR6000Controller/CMR6000Controller.cpp @@ -11,6 +11,7 @@ #include #include "CMR6000Controller.h" +#include "StringUtils.h" CMR6000Controller::CMR6000Controller(hid_device* dev_handle, char *_path, uint16_t _pid) { @@ -18,21 +19,16 @@ CMR6000Controller::CMR6000Controller(hid_device* dev_handle, char *_path, uint16 location = _path; pid = _pid; - const int szTemp = 256; - wchar_t tmpName[szTemp]; + /*---------------------------------------------------------*\ + | Get device name from HID manufacturer and product strings | + \*---------------------------------------------------------*/ + wchar_t name_string[HID_MAX_STR]; - hid_get_manufacturer_string(dev, tmpName, szTemp); - std::wstring wName = std::wstring(tmpName); - device_name = std::string(wName.begin(), wName.end()); - - hid_get_product_string(dev, tmpName, szTemp); - wName = std::wstring(tmpName); - device_name.append(" ").append(std::string(wName.begin(), wName.end())); - - hid_get_serial_number_string(dev, tmpName, szTemp); - wName = std::wstring(tmpName); - serial = std::string(wName.begin(), wName.end()); + hid_get_manufacturer_string(dev, name_string, HID_MAX_STR); + device_name = StringUtils::wstring_to_string(name_string); + hid_get_product_string(dev, name_string, HID_MAX_STR); + device_name.append(" ").append(StringUtils::wstring_to_string(name_string)); } CMR6000Controller::~CMR6000Controller() @@ -45,12 +41,20 @@ CMR6000Controller::~CMR6000Controller() std::string CMR6000Controller::GetDeviceName() { - return device_name; + return(device_name); } std::string CMR6000Controller::GetSerial() { - return serial; + wchar_t serial_string[HID_MAX_STR]; + int ret = hid_get_serial_number_string(dev, serial_string, HID_MAX_STR); + + if(ret != 0) + { + return(""); + } + + return(StringUtils::wstring_to_string(serial_string)); } std::string CMR6000Controller::GetLocation() @@ -60,27 +64,27 @@ std::string CMR6000Controller::GetLocation() unsigned char CMR6000Controller::GetMode() { - return current_mode; + return(current_mode); } unsigned char CMR6000Controller::GetLedSpeed() { - return current_speed; + return(current_speed); } unsigned char CMR6000Controller::GetBrightness() { - return current_brightness; + return(current_brightness); } bool CMR6000Controller::GetRandomColours() { - return current_random; + return(current_random); } uint16_t CMR6000Controller::GetPID() { - return pid; + return(pid); } void CMR6000Controller::SetMode(unsigned char mode, unsigned char speed, RGBColor color1, RGBColor color2, unsigned char random, unsigned char brightness) diff --git a/Controllers/CoolerMasterController/CMR6000Controller/CMR6000Controller.h b/Controllers/CoolerMasterController/CMR6000Controller/CMR6000Controller.h index 15410d2b..07ed6527 100644 --- a/Controllers/CoolerMasterController/CMR6000Controller/CMR6000Controller.h +++ b/Controllers/CoolerMasterController/CMR6000Controller/CMR6000Controller.h @@ -78,7 +78,6 @@ public: private: std::string device_name; - std::string serial; std::string location; hid_device* dev; uint16_t pid; diff --git a/Controllers/CoolerMasterController/CMRGBController/CMRGBController.cpp b/Controllers/CoolerMasterController/CMRGBController/CMRGBController.cpp index 82b1d0f2..4daa97e7 100644 --- a/Controllers/CoolerMasterController/CMRGBController/CMRGBController.cpp +++ b/Controllers/CoolerMasterController/CMRGBController/CMRGBController.cpp @@ -12,26 +12,23 @@ #include #include "RGBController_CMRGBController.h" #include "CMRGBController.h" +#include "StringUtils.h" CMRGBController::CMRGBController(hid_device* dev_handle, char* path) { - const int szTemp = 256; - wchar_t tmpName[szTemp]; - dev = dev_handle; location = path; - hid_get_manufacturer_string(dev, tmpName, szTemp); - std::wstring wName = std::wstring(tmpName); - device_name = std::string(wName.begin(), wName.end()); + /*---------------------------------------------------------*\ + | Get device name from HID manufacturer and product strings | + \*---------------------------------------------------------*/ + wchar_t name_string[HID_MAX_STR]; - hid_get_product_string(dev, tmpName, szTemp); - wName = std::wstring(tmpName); - device_name.append(" ").append(std::string(wName.begin(), wName.end())); + hid_get_manufacturer_string(dev, name_string, HID_MAX_STR); + device_name = StringUtils::wstring_to_string(name_string); - hid_get_serial_number_string(dev, tmpName, szTemp); - wName = std::wstring(tmpName); - serial = std::string(wName.begin(), wName.end()); + hid_get_product_string(dev, name_string, HID_MAX_STR); + device_name.append(" ").append(StringUtils::wstring_to_string(name_string)); ReadCurrentMode(); } @@ -301,7 +298,15 @@ std::string CMRGBController::GetDeviceName() std::string CMRGBController::GetSerial() { - return(serial); + wchar_t serial_string[HID_MAX_STR]; + int ret = hid_get_serial_number_string(dev, serial_string, HID_MAX_STR); + + if(ret != 0) + { + return(""); + } + + return(StringUtils::wstring_to_string(serial_string)); } std::string CMRGBController::GetLocation() diff --git a/Controllers/CoolerMasterController/CMRGBController/CMRGBController.h b/Controllers/CoolerMasterController/CMRGBController/CMRGBController.h index c1f92afa..9b94f13a 100644 --- a/Controllers/CoolerMasterController/CMRGBController/CMRGBController.h +++ b/Controllers/CoolerMasterController/CMRGBController/CMRGBController.h @@ -37,6 +37,7 @@ #define CM_RGBC_SPEED_NONE 0x05 #define CM_RGBC_BRIGHTNESS_OFF 0x03 +#define HID_MAX_STR 255 /*-------------------------------------------------*\ | OP OPCODES | @@ -123,7 +124,6 @@ public: private: std::string device_name; - std::string serial; std::string location; hid_device* dev; diff --git a/Controllers/CoolerMasterController/CMSmallARGBController/CMSmallARGBController.cpp b/Controllers/CoolerMasterController/CMSmallARGBController/CMSmallARGBController.cpp index 2e35c0db..397d8405 100644 --- a/Controllers/CoolerMasterController/CMSmallARGBController/CMSmallARGBController.cpp +++ b/Controllers/CoolerMasterController/CMSmallARGBController/CMSmallARGBController.cpp @@ -11,6 +11,7 @@ #include #include "CMSmallARGBController.h" +#include "StringUtils.h" cm_small_argb_headers cm_small_argb_header_data[1] = { @@ -19,25 +20,21 @@ cm_small_argb_headers cm_small_argb_header_data[1] = CMSmallARGBController::CMSmallARGBController(hid_device* dev_handle, char *_path, unsigned char _zone_idx) { - const int szTemp = 256; - wchar_t tmpName[szTemp]; - dev = dev_handle; location = _path; zone_index = _zone_idx; current_speed = CM_SMALL_ARGB_SPEED_NORMAL; - hid_get_manufacturer_string(dev, tmpName, szTemp); - std::wstring wName = std::wstring(tmpName); - device_name = std::string(wName.begin(), wName.end()); + /*---------------------------------------------------------*\ + | Get device name from HID manufacturer and product strings | + \*---------------------------------------------------------*/ + wchar_t name_string[HID_MAX_STR]; - hid_get_product_string(dev, tmpName, szTemp); - wName = std::wstring(tmpName); - device_name.append(" ").append(std::string(wName.begin(), wName.end())); + hid_get_manufacturer_string(dev, name_string, HID_MAX_STR); + device_name = StringUtils::wstring_to_string(name_string); - hid_get_serial_number_string(dev, tmpName, szTemp); - wName = std::wstring(tmpName); - serial = std::string(wName.begin(), wName.end()); + hid_get_product_string(dev, name_string, HID_MAX_STR); + device_name.append(" ").append(StringUtils::wstring_to_string(name_string)); GetStatus(); } @@ -80,12 +77,20 @@ void CMSmallARGBController::GetStatus() std::string CMSmallARGBController::GetDeviceName() { - return device_name; + return(device_name); } std::string CMSmallARGBController::GetSerial() { - return serial; + wchar_t serial_string[HID_MAX_STR]; + int ret = hid_get_serial_number_string(dev, serial_string, HID_MAX_STR); + + if(ret != 0) + { + return(""); + } + + return(StringUtils::wstring_to_string(serial_string)); } std::string CMSmallARGBController::GetLocation() @@ -95,37 +100,37 @@ std::string CMSmallARGBController::GetLocation() unsigned char CMSmallARGBController::GetZoneIndex() { - return zone_index; + return(zone_index); } unsigned char CMSmallARGBController::GetMode() { - return current_mode; + return(current_mode); } unsigned char CMSmallARGBController::GetLedRed() { - return current_red; + return(current_red); } unsigned char CMSmallARGBController::GetLedGreen() { - return current_green; + return(current_green); } unsigned char CMSmallARGBController::GetLedBlue() { - return current_blue; + return(current_blue); } unsigned char CMSmallARGBController::GetLedSpeed() { - return current_speed; + return(current_speed); } bool CMSmallARGBController::GetRandomColours() { - return bool_random; + return(bool_random); } void CMSmallARGBController::SetLedCount(int zone, int led_count) diff --git a/Controllers/CoolerMasterController/CMSmallARGBController/CMSmallARGBController.h b/Controllers/CoolerMasterController/CMSmallARGBController/CMSmallARGBController.h index 78660b8f..04aa367b 100644 --- a/Controllers/CoolerMasterController/CMSmallARGBController/CMSmallARGBController.h +++ b/Controllers/CoolerMasterController/CMSmallARGBController/CMSmallARGBController.h @@ -22,6 +22,7 @@ #define CM_SMALL_ARGB_PACKET_SIZE 65 #define CM_SMALL_ARGB_INTERRUPT_TIMEOUT 250 +#define HID_MAX_STR 255 enum { @@ -93,7 +94,6 @@ public: void SetLedsDirect(RGBColor * led_colours, unsigned int led_count); private: std::string device_name; - std::string serial; std::string location; hid_device* dev;