Add ViewSonic Elite Monitor (XG271QG)

This commit is contained in:
McNutnut 2025-06-25 22:29:03 -07:00 committed by Adam Honse
parent e87d20b08d
commit 28c0bd8592
4 changed files with 67 additions and 51 deletions

View file

@ -40,15 +40,15 @@ RGBController_XG270QG::RGBController_XG270QG(VS_XG270QG_Controller* controller_p
Off.color_mode = MODE_COLORS_NONE;
modes.push_back(Off);
mode StaticColor;
StaticColor.name = "Static";
StaticColor.value = VS_MODE_STATIC;
StaticColor.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_AUTOMATIC_SAVE;
StaticColor.colors_min = 1;
StaticColor.colors_max = 1;
StaticColor.color_mode = MODE_COLORS_MODE_SPECIFIC;
StaticColor.colors.resize(1);
modes.push_back(StaticColor);
mode Custom;
Custom.name = "Custom";
Custom.value = VS_MODE_STATIC;
Custom.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_AUTOMATIC_SAVE;
Custom.colors_min = 1;
Custom.colors_max = 1;
Custom.color_mode = MODE_COLORS_PER_LED;
Custom.colors.resize(1);
modes.push_back(Custom);
mode Rainbow;
Rainbow.name = "Rainbow Wave";
@ -60,10 +60,10 @@ RGBController_XG270QG::RGBController_XG270QG(VS_XG270QG_Controller* controller_p
mode Breath;
Breath.name = "Breathing";
Breath.value = VS_MODE_BREATHING;
Breath.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_AUTOMATIC_SAVE;
Breath.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_AUTOMATIC_SAVE;
Breath.colors_min = 1;
Breath.colors_max = 1;
Breath.color_mode = MODE_COLORS_MODE_SPECIFIC;
Breath.color_mode = MODE_COLORS_PER_LED;
Breath.colors.resize(1);
modes.push_back(Breath);
@ -77,10 +77,10 @@ RGBController_XG270QG::RGBController_XG270QG(VS_XG270QG_Controller* controller_p
mode Elite;
Elite.name = "Elite";
Elite.value = VS_MODE_ELITE;
Elite.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_AUTOMATIC_SAVE;
Elite.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_AUTOMATIC_SAVE;
Elite.colors_min = 1;
Elite.colors_max = 1;
Elite.color_mode = MODE_COLORS_MODE_SPECIFIC;
Elite.color_mode = MODE_COLORS_PER_LED;
Elite.colors.resize(1);
modes.push_back(Elite);
@ -107,34 +107,34 @@ RGBController_XG270QG::RGBController_XG270QG(VS_XG270QG_Controller* controller_p
void RGBController_XG270QG::SetupZones()
{
zone back_circle;
back_circle.name = "Back Circle";
back_circle.type = ZONE_TYPE_SINGLE;
back_circle.leds_min = 1;
back_circle.leds_max = 1;
back_circle.leds_count = 1;
back_circle.matrix_map = NULL;
zones.push_back(back_circle);
zone base;
base.name = "Base";
base.type = ZONE_TYPE_SINGLE;
base.leds_min = 1;
base.leds_max = 1;
base.leds_count = 1;
base.matrix_map = NULL;
zones.push_back(base);
zone down;
down.name = "Down Stuff";
down.type = ZONE_TYPE_SINGLE;
down.leds_min = 1;
down.leds_max = 1;
down.leds_count = 1;
down.matrix_map = NULL;
zones.push_back(down);
led back;
back.name = "Back";
back.value = 0x00;
leds.push_back(back);
zone rear;
rear.name = "Rear";
rear.type = ZONE_TYPE_SINGLE;
rear.leds_min = 1;
rear.leds_max = 1;
rear.leds_count = 1;
rear.matrix_map = NULL;
zones.push_back(rear);
led d;
d.name = "Down";
d.value = 0x01;
d.name = "Base";
d.value = 0x00;
leds.push_back(d);
led back;
back.name = "Rear";
back.value = 0x01;
leds.push_back(back);
SetupColors();
}
@ -147,9 +147,7 @@ void RGBController_XG270QG::ResizeZone(int /*zone*/, int /*new_size*/)
void RGBController_XG270QG::DeviceUpdateLEDs()
{
/*---------------------------------------------------------*\
| This device does not include any per-LED modes |
\*---------------------------------------------------------*/
DeviceUpdateMode();
}
void RGBController_XG270QG::UpdateZoneLEDs(int /*zone*/)
@ -164,14 +162,28 @@ void RGBController_XG270QG::UpdateSingleLED(int /*led*/)
void RGBController_XG270QG::DeviceUpdateMode()
{
uint8_t r = 0;
uint8_t g = 0;
uint8_t b = 0;
uint8_t r1 = 0;
uint8_t g1 = 0;
uint8_t b1 = 0;
uint8_t r2 = 0;
uint8_t g2 = 0;
uint8_t b2 = 0;
if(modes[active_mode].flags & MODE_FLAG_HAS_MODE_SPECIFIC_COLOR)
{
r = RGBGetRValue(modes[active_mode].colors[0]);
g = RGBGetGValue(modes[active_mode].colors[0]);
b = RGBGetBValue(modes[active_mode].colors[0]);
r1 = r2 = RGBGetRValue(modes[active_mode].colors[0]);
g1 = g2 = RGBGetGValue(modes[active_mode].colors[0]);
b1 = b2 = RGBGetBValue(modes[active_mode].colors[0]);
}
controller->SetMode(modes[active_mode].value, r, g, b);
else if (modes[active_mode].flags & MODE_FLAG_HAS_PER_LED_COLOR)
{
r1 = RGBGetRValue(colors[0]);
g1 = RGBGetGValue(colors[0]);
b1 = RGBGetBValue(colors[0]);
r2 = RGBGetRValue(colors[1]);
g2 = RGBGetGValue(colors[1]);
b2 = RGBGetBValue(colors[1]);
}
controller->SetMode(modes[active_mode].value, r1, g1, b1, modes[active_mode].value, r2, g2, b2);
}

View file

@ -43,9 +43,9 @@ std::string VS_XG270QG_Controller::GetSerial()
return(StringUtils::wstring_to_string(serial_string));
}
void VS_XG270QG_Controller::SetMode(uint8_t mode, uint8_t r, uint8_t g, uint8_t b)
void VS_XG270QG_Controller::SetMode(uint8_t mode1, uint8_t r1, uint8_t g1, uint8_t b1, uint8_t mode2, uint8_t r2, uint8_t g2, uint8_t b2)
{
SendModeComplete(mode, r, g, b, mode, r, g, b);
SendModeComplete(mode1, r1, g1, b1, mode2, r2, g2, b2);
}
void VS_XG270QG_Controller::SendModeComplete

View file

@ -38,7 +38,8 @@ public:
std::string GetLocation();
std::string GetSerial();
void SetMode(uint8_t mode, uint8_t r, uint8_t g, uint8_t b);
void SetMode(uint8_t mode1, uint8_t r1, uint8_t g1, uint8_t b1,
uint8_t mode2, uint8_t r2, uint8_t g2, uint8_t b2);
private:
hid_device* dev;

View file

@ -14,8 +14,10 @@
#include "VS_XG270QG_Controller.h"
#include "RGBController_XG270QG.h"
#define VIEWSONIC_VID 0x0416
#define WINBOND_VID 0x0416
#define VIEWSONIC_VID 0x0543
#define VS_XG270QG_PID 0x5020
#define VS_XG271QG_PID 0xA004
void DetectViewSonic(hid_device_info* info, const std::string& name)
{
@ -31,4 +33,5 @@ void DetectViewSonic(hid_device_info* info, const std::string& name)
}
}
REGISTER_HID_DETECTOR_IPU("ViewSonic Monitor XG270QG", DetectViewSonic, VIEWSONIC_VID, VS_XG270QG_PID, 0, 0xFF00, 1);
REGISTER_HID_DETECTOR_IPU("ViewSonic Monitor XG270QG", DetectViewSonic, WINBOND_VID, VS_XG270QG_PID, 0, 0xFF00, 1);
REGISTER_HID_DETECTOR_IP("ViewSonic Monitor XG271QG", DetectViewSonic, VIEWSONIC_VID, VS_XG271QG_PID, 0, 0x0001);