Fix wstring to string conversion in CoolerMaster controllers

This commit is contained in:
Adam Honse 2024-07-31 01:02:34 -05:00
parent 10e6e8c91f
commit 8f7e4963de
18 changed files with 173 additions and 153 deletions

View file

@ -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<std::mutex> 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()

View file

@ -121,7 +121,6 @@ public:
private:
std::string device_name;
std::string serial;
std::string location;
hid_device* dev;
std::shared_ptr<std::mutex> mutex_ptr;

View file

@ -11,25 +11,13 @@
#include <cstring>
#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()

View file

@ -81,7 +81,6 @@ public:
void SaveToFlash();
private:
std::string serial_number;
std::string location;
bool software_mode_activated = false;
hid_device* dev;

View file

@ -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;

View file

@ -11,27 +11,24 @@
#include <cstring>
#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()

View file

@ -12,24 +12,14 @@
#include <cstring>
#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()

View file

@ -114,8 +114,6 @@ public:
void SendSavePacket();
private:
std::string name;
std::string vendor;
std::string serial;
std::string location;
hid_device* dev;

View file

@ -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)

View file

@ -84,7 +84,6 @@ public:
private:
std::string device_name;
std::string serial;
std::string location;
hid_device* dev;

View file

@ -11,6 +11,7 @@
#include <cstring>
#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)

View file

@ -49,8 +49,8 @@ public:
void SendDirect(const std::vector<RGBColor>& colors);
void SetMode(uint8_t mode_value, const RGBColor& color, uint8_t speed, uint8_t brightness);
void SetCustomMode(const std::vector<RGBColor>& colors, uint8_t brightnesss);
private:
std::string serial_number;
std::string location;
hid_device* dev;
bool software_mode_enabled = false;

View file

@ -11,6 +11,7 @@
#include <cstring>
#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)

View file

@ -78,7 +78,6 @@ public:
private:
std::string device_name;
std::string serial;
std::string location;
hid_device* dev;
uint16_t pid;

View file

@ -12,26 +12,23 @@
#include <cstring>
#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()

View file

@ -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;

View file

@ -11,6 +11,7 @@
#include <cstring>
#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)

View file

@ -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;