OpenRGB/Controllers/MSIMysticLightController/MSIMysticLight64Controller/MSIMysticLight64Controller.cpp

116 lines
3.6 KiB
C++

/*---------------------------------------------------------*\
| MSIMysticLight64Controller.cpp |
| |
| Driver for MSI Mystic Light 64-byte motherboard |
| |
| T-bond 03 Apr 2020 |
| Adam Honse 06 Mar 2021 |
| Elchanan Haas 23 Aug 2022 |
| |
| This file is part of the OpenRGB project |
| SPDX-License-Identifier: GPL-2.0-only |
\*---------------------------------------------------------*/
#include <algorithm>
#include <array>
#include <bitset>
#include "MSIMysticLight64Controller.h"
#include "StringUtils.h"
MSIMysticLight64Controller::MSIMysticLight64Controller
(
hid_device *handle,
const char *path
)
{
dev = handle;
if(dev)
{
location = path;
}
}
MSIMysticLight64Controller::~MSIMysticLight64Controller()
{
hid_close(dev);
}
void MSIMysticLight64Controller::SetMode
(
MSI_64_MODE mode,
MSI_SPEED speed,
MSI_BRIGHTNESS brightness,
unsigned int num_colors,
Color colors[]
)
{
FeaturePacket_64 data;
for(int i = 0; i < MSI_64_MAX_COLORS; i++)
{
data.colors[i] = colors[i];
}
data.speed = speed;
data.brightness = brightness;
data.num_colors = num_colors;
data.mode = mode;
/*-----------------------------------------------------*\
| Send packet to hardware, return true if successful |
\*-----------------------------------------------------*/
hid_send_feature_report(dev, (unsigned char *)&data, sizeof(data));
return;
}
std::string MSIMysticLight64Controller::GetDeviceName()
{
wchar_t tname[256];
/*-----------------------------------------------------*\
| Get the manufacturer string from HID |
\*-----------------------------------------------------*/
hid_get_manufacturer_string(dev, tname, 256);
/*-----------------------------------------------------*\
| Convert wchar_t into std::wstring into std::string |
\*-----------------------------------------------------*/
std::wstring wname = std::wstring(tname);
std::string name = std::string(wname.begin(), wname.end());
/*-----------------------------------------------------*\
| Get the product string from HID |
\*-----------------------------------------------------*/
hid_get_product_string(dev, tname, 256);
/*-----------------------------------------------------*\
| Append the product string to the manufacturer string |
\*-----------------------------------------------------*/
wname = std::wstring(tname);
name.append(" ").append(std::string(wname.begin(), wname.end()));
return name;
}
std::string MSIMysticLight64Controller::GetFWVersion()
{
/*-----------------------------------------------------*\
| This device doesn't support firmware version |
\*-----------------------------------------------------*/
std::string firmware_version = "";
return firmware_version;
}
std::string MSIMysticLight64Controller::GetDeviceLocation()
{
return ("HID: " + location);
}
std::string MSIMysticLight64Controller::GetSerial()
{
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));
}