116 lines
3.6 KiB
C++
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));
|
|
}
|