Skip to content

Commit 0b787eb

Browse files
Add serial implementation of HYTE CNVS mousemat controller for Windows and leave libusb implementation for Linux
1 parent 1b7cff7 commit 0b787eb

File tree

7 files changed

+198
-10
lines changed

7 files changed

+198
-10
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
/*---------------------------------------------------------*\
2+
| HYTEMousematController.cpp |
3+
| |
4+
| Driver for HYTE CNVS RGB mousemat controller |
5+
| |
6+
| Adam Honse ([email protected]), 7/18/2023 |
7+
\*---------------------------------------------------------*/
8+
9+
#include "HYTEMousematController.h"
10+
11+
HYTEMousematController::HYTEMousematController(char* port)
12+
{
13+
port_name = port;
14+
15+
/*-----------------------------------------------------*\
16+
| Open the port |
17+
| Baud rate doesn't matter for ACM device |
18+
\*-----------------------------------------------------*/
19+
serialport = new serial_port(port_name.c_str(), 2000000);
20+
}
21+
22+
HYTEMousematController::~HYTEMousematController()
23+
{
24+
25+
}
26+
27+
std::string HYTEMousematController::GetLocation()
28+
{
29+
return(port_name);
30+
}
31+
32+
void HYTEMousematController::FirmwareAnimationControl(bool enabled)
33+
{
34+
unsigned char serial_buf[4];
35+
36+
/*-----------------------------------------------------*\
37+
| Zero out buffer |
38+
\*-----------------------------------------------------*/
39+
memset(serial_buf, 0, sizeof(serial_buf));
40+
41+
/*-----------------------------------------------------*\
42+
| Set up Firmware Animation Control packet |
43+
\*-----------------------------------------------------*/
44+
serial_buf[0] = 0xFF;
45+
serial_buf[1] = 0xDC;
46+
serial_buf[2] = 0x05;
47+
serial_buf[3] = enabled;
48+
49+
/*-----------------------------------------------------*\
50+
| Send packet |
51+
\*-----------------------------------------------------*/
52+
serialport->serial_write((char *)serial_buf, sizeof(serial_buf));
53+
}
54+
55+
void HYTEMousematController::StreamingCommand(RGBColor* colors)
56+
{
57+
unsigned char serial_buf[157];
58+
unsigned int max_brightness = 72;
59+
60+
/*-----------------------------------------------------*\
61+
| Zero out buffer |
62+
\*-----------------------------------------------------*/
63+
memset(serial_buf, 0, sizeof(serial_buf));
64+
65+
/*-----------------------------------------------------*\
66+
| Set up Streaming packet |
67+
\*-----------------------------------------------------*/
68+
serial_buf[0] = 0xFF;
69+
serial_buf[1] = 0xEE;
70+
serial_buf[2] = 0x02;
71+
serial_buf[3] = 0x01;
72+
serial_buf[4] = 0x00;
73+
serial_buf[5] = 0x32;
74+
serial_buf[6] = 0x00;
75+
76+
/*-----------------------------------------------------*\
77+
| Copy in colors |
78+
\*-----------------------------------------------------*/
79+
for(unsigned int color_idx = 0; color_idx < 50; color_idx++)
80+
{
81+
serial_buf[7 + (color_idx * 3)] = ( max_brightness * RGBGetGValue(colors[color_idx]) ) / 100;
82+
serial_buf[8 + (color_idx * 3)] = ( max_brightness * RGBGetRValue(colors[color_idx]) ) / 100;
83+
serial_buf[9 + (color_idx * 3)] = ( max_brightness * RGBGetBValue(colors[color_idx]) ) / 100;
84+
}
85+
86+
/*-----------------------------------------------------*\
87+
| Send packet |
88+
\*-----------------------------------------------------*/
89+
serialport->serial_write((char *)serial_buf, sizeof(serial_buf));
90+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*---------------------------------------------------------*\
2+
| HYTEMousematController.h |
3+
| |
4+
| Definitions for HYTE CNVS RGB mousemat controller |
5+
| |
6+
| Adam Honse ([email protected]), 7/18/2023 |
7+
\*---------------------------------------------------------*/
8+
9+
#pragma once
10+
11+
#include "RGBController.h"
12+
#include "serial_port.h"
13+
#include <vector>
14+
15+
class HYTEMousematController
16+
{
17+
public:
18+
HYTEMousematController(char* port);
19+
~HYTEMousematController();
20+
21+
std::string GetLocation();
22+
23+
void FirmwareAnimationControl(bool enabled);
24+
void StreamingCommand(RGBColor* colors);
25+
26+
private:
27+
std::string port_name;
28+
serial_port * serialport = nullptr;
29+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#include "Detector.h"
2+
#include "HYTEMousematController.h"
3+
#include "RGBController.h"
4+
#include "RGBController_HYTEMousemat.h"
5+
#include "find_usb_serial_port.h"
6+
#include <vector>
7+
8+
#define HYTE_VID 0x3402
9+
10+
#define HYTE_CNVS_HW_VER_1_PID 0x0B00
11+
#define HYTE_CNVS_HW_VER_2_PID 0x0B01
12+
13+
struct hyte_mousemat_type
14+
{
15+
unsigned short vid;
16+
unsigned short pid;
17+
const char * name;
18+
};
19+
20+
#define HYTE_MOUSEMAT_NUM_DEVICES 2
21+
22+
static const hyte_mousemat_type hyte_mousemat_devices[] =
23+
{
24+
{ HYTE_VID, HYTE_CNVS_HW_VER_1_PID, "HYTE CNVS" },
25+
{ HYTE_VID, HYTE_CNVS_HW_VER_2_PID, "HYTE CNVS" },
26+
};
27+
28+
/******************************************************************************************\
29+
* *
30+
* DetectHYTEMousematControllers *
31+
* *
32+
* Detect devices supported by the HyteMousemat driver *
33+
* *
34+
\******************************************************************************************/
35+
36+
void DetectHYTEMousematControllers()
37+
{
38+
for(unsigned int device_id = 0; device_id < HYTE_MOUSEMAT_NUM_DEVICES; device_id++)
39+
{
40+
std::vector<std::string *> ports = find_usb_serial_port(hyte_mousemat_devices[device_id].vid, hyte_mousemat_devices[device_id].pid);
41+
42+
for(unsigned int i = 0; i < ports.size(); i++)
43+
{
44+
if(*ports[i] != "")
45+
{
46+
HYTEMousematController * controller = new HYTEMousematController((char *)ports[i]->c_str());
47+
RGBController_HYTEMousemat * rgb_controller = new RGBController_HYTEMousemat(controller);
48+
rgb_controller->name = hyte_mousemat_devices[device_id].name;
49+
50+
ResourceManager::get()->RegisterRGBController(rgb_controller);
51+
}
52+
}
53+
}
54+
} /* DetectHYTEMousematControllers() */
55+
56+
REGISTER_DETECTOR("HYTE Mousemat", DetectHYTEMousematControllers);
57+
/*---------------------------------------------------------------------------------------------------------*\
58+
| Entries for dynamic UDEV rules |
59+
| |
60+
| DUMMY_DEVICE_DETECTOR("HYTE Mousemat", DetectHYTEMousematControllers, 0x3402, 0x0B00 ) |
61+
| DUMMY_DEVICE_DETECTOR("HYTE Mousemat", DetectHYTEMousematControllers, 0x3402, 0x0B01 ) |
62+
\*---------------------------------------------------------------------------------------------------------*/

OpenRGB.pro

+17-10
Original file line numberDiff line numberDiff line change
@@ -564,8 +564,6 @@ HEADERS +=
564564
Controllers/HyperXMouseController/RGBController_HyperXPulsefireRaid.h \
565565
Controllers/HyperXMousematController/HyperXMousematController.h \
566566
Controllers/HyperXMousematController/RGBController_HyperXMousemat.h \
567-
Controllers/HYTEMousematController/HYTEMousematController.h \
568-
Controllers/HYTEMousematController/RGBController_HYTEMousemat.h \
569567
Controllers/IntelArcA770LEController/IntelArcA770LEController.h \
570568
Controllers/IntelArcA770LEController/RGBController_IntelArcA770LE.h \
571569
Controllers/IonicoController/IonicoController.h \
@@ -1239,9 +1237,6 @@ SOURCES +=
12391237
Controllers/HyperXMousematController/HyperXMousematController.cpp \
12401238
Controllers/HyperXMousematController/HyperXMousematControllerDetect.cpp \
12411239
Controllers/HyperXMousematController/RGBController_HyperXMousemat.cpp \
1242-
Controllers/HYTEMousematController/HYTEMousematController.cpp \
1243-
Controllers/HYTEMousematController/HYTEMousematControllerDetect.cpp \
1244-
Controllers/HYTEMousematController/RGBController_HYTEMousemat.cpp \
12451240
Controllers/IntelArcA770LEController/IntelArcA770LEController.cpp \
12461241
Controllers/IntelArcA770LEController/IntelArcA770LEControllerDetect.cpp \
12471242
Controllers/IonicoController/IonicoController.cpp \
@@ -1630,6 +1625,7 @@ win32:INCLUDEPATH +=
16301625
dependencies/openrazer-win32 \
16311626
wmi/ \
16321627
Controllers/AsusTUFLaptopController \
1628+
Controllers/HYTEMousematController/HYTEMousematController_serial \
16331629
Controllers/NVIDIAIlluminationController \
16341630

16351631
win32:SOURCES += \
@@ -1734,6 +1730,9 @@ win32:SOURCES +=
17341730
Controllers/AsusTUFLaptopController/RGBController_AsusTUFLaptopWMI.cpp \
17351731
Controllers/ENESMBusController/XPGSpectrixS40GDetect_Windows.cpp \
17361732
Controllers/ENESMBusController/ENESMBusInterface/ENESMBusInterface_SpectrixS40G_Windows.cpp \
1733+
Controllers/HYTEMousematController/HYTEMousematController_serial/HYTEMousematController.cpp \
1734+
Controllers/HYTEMousematController/HYTEMousematController_serial/HYTEMousematControllerDetect.cpp \
1735+
Controllers/HYTEMousematController/RGBController_HYTEMousemat.cpp \
17371736
Controllers/NVIDIAIlluminationController/nvapi_accessor.cpp \
17381737
Controllers/NVIDIAIlluminationController/NVIDIAIlluminationV1Controller.cpp \
17391738
Controllers/NVIDIAIlluminationController/NVIDIAIlluminationControllerDetect.cpp \
@@ -1756,6 +1755,8 @@ win32:HEADERS +=
17561755
Controllers/AsusTUFLaptopController/AsusTUFLaptopController.h \
17571756
Controllers/AsusTUFLaptopController/RGBController_AsusTUFLaptopWMI.h \
17581757
Controllers/ENESMBusController/ENESMBusInterface/ENESMBusInterface_SpectrixS40G_Windows.h \
1758+
Controllers/HYTEMousematController/HYTEMousematController_serial/HYTEMousematController.h \
1759+
Controllers/HYTEMousematController/RGBController_HYTEMousemat.h \
17591760
Controllers/NVIDIAIlluminationController/nvapi_accessor.h \
17601761
Controllers/NVIDIAIlluminationController/NVIDIAIlluminationV1Controller.h \
17611762
Controllers/NVIDIAIlluminationController/RGBController_NVIDIAIllumination.h \
@@ -1847,15 +1848,18 @@ contains(QMAKE_PLATFORM, linux) {
18471848

18481849
INCLUDEPATH += \
18491850
Controllers/FaustusController \
1851+
Controllers/HYTEMousematController/HYTEMousematController_libusb \
18501852
Controllers/LinuxLEDController \
18511853

18521854
HEADERS += \
18531855
i2c_smbus/i2c_smbus_linux.h \
18541856
AutoStart/AutoStart-Linux.h \
1855-
Controllers/AsusTUFLaptopController/AsusTUFLaptopLinuxController.h \
1856-
Controllers/AsusTUFLaptopController/RGBController_AsusTUFLaptopLinux.h \
1857+
Controllers/AsusTUFLaptopController/AsusTUFLaptopLinuxController.h \
1858+
Controllers/AsusTUFLaptopController/RGBController_AsusTUFLaptopLinux.h \
18571859
Controllers/ENESMBusController/ENESMBusInterface/ENESMBusInterface_SpectrixS40G.h \
18581860
Controllers/FaustusController/RGBController_Faustus.h \
1861+
Controllers/HYTEMousematController/HYTEMousematController_libusb/HYTEMousematController.h \
1862+
Controllers/HYTEMousematController/RGBController_HYTEMousemat.h \
18591863
Controllers/LinuxLEDController/LinuxLEDController.h \
18601864
Controllers/LinuxLEDController/RGBController_LinuxLED.h \
18611865
Controllers/OpenRazerController/RGBController_OpenRazer.h \
@@ -1903,12 +1907,15 @@ contains(QMAKE_PLATFORM, linux) {
19031907
scsiapi/scsiapi_linux.c \
19041908
serial_port/find_usb_serial_port_linux.cpp \
19051909
AutoStart/AutoStart-Linux.cpp \
1906-
Controllers/AsusTUFLaptopController/AsusTUFLaptopLinuxController.cpp \
1907-
Controllers/AsusTUFLaptopController/AsusTUFLaptopLinuxDetect.cpp \
1908-
Controllers/AsusTUFLaptopController/RGBController_AsusTUFLaptopLinux.cpp \
1910+
Controllers/AsusTUFLaptopController/AsusTUFLaptopLinuxController.cpp \
1911+
Controllers/AsusTUFLaptopController/AsusTUFLaptopLinuxDetect.cpp \
1912+
Controllers/AsusTUFLaptopController/RGBController_AsusTUFLaptopLinux.cpp \
19091913
Controllers/ENESMBusController/XPGSpectrixS40GDetect.cpp \
19101914
Controllers/ENESMBusController/ENESMBusInterface/ENESMBusInterface_SpectrixS40G.cpp \
19111915
Controllers/FaustusController/RGBController_Faustus.cpp \
1916+
Controllers/HYTEMousematController/HYTEMousematController_libusb/HYTEMousematController.cpp \
1917+
Controllers/HYTEMousematController/HYTEMousematController_libusb/HYTEMousematControllerDetect.cpp \
1918+
Controllers/HYTEMousematController/RGBController_HYTEMousemat.cpp \
19121919
Controllers/LinuxLEDController/LinuxLEDController.cpp \
19131920
Controllers/LinuxLEDController/LinuxLEDControllerDetect.cpp \
19141921
Controllers/LinuxLEDController/RGBController_LinuxLED.cpp \

0 commit comments

Comments
 (0)