Add ViewSonic Elite XG270QG
Amended for code style by Adam Honse <calcprogrammer1@gmail.com>
This commit is contained in:
parent
0d7e947575
commit
817d5d55df
6 changed files with 382 additions and 0 deletions
164
Controllers/ViewSonicController/RGBController_XG270QG.cpp
Normal file
164
Controllers/ViewSonicController/RGBController_XG270QG.cpp
Normal file
|
|
@ -0,0 +1,164 @@
|
|||
/*------------------------------------*\
|
||||
| RGBController_XG270QG.cpp |
|
||||
| Lanzaa 1/23/2022 |
|
||||
\*------------------------------------*/
|
||||
|
||||
#include "RGBController_XG270QG.h"
|
||||
#include "LogManager.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
RGBController_XG270QG::RGBController_XG270QG(VS_XG270QG_Controller* controller_ptr)
|
||||
{
|
||||
controller = controller_ptr;
|
||||
|
||||
name = "ViewSonic Elite XG270QG";
|
||||
vendor = "ViewSonic";
|
||||
version = controller->GetVersion();
|
||||
type = DEVICE_TYPE_UNKNOWN;
|
||||
description = "ViewSonic Monitor";
|
||||
location = controller->GetLocation();
|
||||
serial = controller->GetSerial();
|
||||
|
||||
mode Off;
|
||||
Off.name = "Off";
|
||||
Off.value = VS_MODE_OFF;
|
||||
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 Rainbow;
|
||||
Rainbow.name = "Rainbow Wave";
|
||||
Rainbow.value = VS_MODE_RAINBOW;
|
||||
Rainbow.flags = MODE_FLAG_AUTOMATIC_SAVE;
|
||||
Rainbow.color_mode = MODE_COLORS_NONE;
|
||||
modes.push_back(Rainbow);
|
||||
|
||||
mode Breath;
|
||||
Breath.name = "Breathing";
|
||||
Breath.value = VS_MODE_BREATHING;
|
||||
Breath.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_AUTOMATIC_SAVE;
|
||||
Breath.colors_min = 1;
|
||||
Breath.colors_max = 1;
|
||||
Breath.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
Breath.colors.resize(1);
|
||||
modes.push_back(Breath);
|
||||
|
||||
mode Waterfall;
|
||||
Waterfall.name = "Waterfall";
|
||||
Waterfall.value = VS_MODE_WATERFALL;
|
||||
Waterfall.flags = MODE_FLAG_AUTOMATIC_SAVE;
|
||||
Waterfall.color_mode = MODE_COLORS_NONE;
|
||||
modes.push_back(Waterfall);
|
||||
|
||||
mode Elite;
|
||||
Elite.name = "Elite";
|
||||
Elite.value = VS_MODE_ELITE;
|
||||
Elite.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_AUTOMATIC_SAVE;
|
||||
Elite.colors_min = 1;
|
||||
Elite.colors_max = 1;
|
||||
Elite.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
Elite.colors.resize(1);
|
||||
modes.push_back(Elite);
|
||||
|
||||
//mode Jazz;
|
||||
//Jazz.name = "Jazz Wave (Audio Reactive)";
|
||||
//Jazz.value = VS_MODE_JAZZ;
|
||||
////Jazz.color_mode = MODE_COLORS_NONE; // might have color
|
||||
//Jazz.flags = MODE_FLAG_HAS_MODE_SPECIFIC_COLOR | MODE_FLAG_AUTOMATIC_SAVE;
|
||||
//Jazz.colors_min = 1;
|
||||
//Jazz.colors_max = 1;
|
||||
//Jazz.color_mode = MODE_COLORS_MODE_SPECIFIC;
|
||||
//Jazz.colors.resize(1);
|
||||
//modes.push_back(Jazz);
|
||||
|
||||
//mode EliteGlobal;
|
||||
//EliteGlobal.name = "Elite Global (Audio Reactive)";
|
||||
//EliteGlobal.value = VS_MODE_ELITEGLOBAL;
|
||||
//EliteGlobal.flags = MODE_FLAG_AUTOMATIC_SAVE;
|
||||
//EliteGlobal.color_mode = MODE_COLORS_NONE;
|
||||
//modes.push_back(EliteGlobal);
|
||||
|
||||
RGBController_XG270QG::SetupZones();
|
||||
}
|
||||
|
||||
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;
|
||||
zones.push_back(back_circle);
|
||||
zone down;
|
||||
down.name = "down stuff";
|
||||
down.type = ZONE_TYPE_SINGLE;
|
||||
down.leds_min = 1;
|
||||
down.leds_max = 1;
|
||||
down.leds_count = 1;
|
||||
zones.push_back(down);
|
||||
|
||||
led back;
|
||||
back.name = "back";
|
||||
back.value = 0x00;
|
||||
leds.push_back(back);
|
||||
led d;
|
||||
d.name = "down";
|
||||
d.value = 0x01;
|
||||
leds.push_back(d);
|
||||
|
||||
SetupColors();
|
||||
}
|
||||
|
||||
void RGBController_XG270QG::ResizeZone(int zone, int new_size)
|
||||
{
|
||||
// Not applicable
|
||||
}
|
||||
|
||||
void RGBController_XG270QG::DeviceUpdateLEDs()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
void RGBController_XG270QG::UpdateZoneLEDs(int zone)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
void RGBController_XG270QG::UpdateSingleLED(int led)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
void RGBController_XG270QG::DeviceUpdateMode()
|
||||
{
|
||||
uint8_t r = 0;
|
||||
uint8_t g = 0;
|
||||
uint8_t b = 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]);
|
||||
}
|
||||
controller->SetMode(modes[active_mode].value, r, g, b);
|
||||
}
|
||||
|
||||
void RGBController_XG270QG::SetCustomMode()
|
||||
{
|
||||
/*-------------------------------------------------*\
|
||||
| Set mode to Static Color |
|
||||
\*-------------------------------------------------*/
|
||||
active_mode = 1;
|
||||
}
|
||||
|
||||
33
Controllers/ViewSonicController/RGBController_XG270QG.h
Normal file
33
Controllers/ViewSonicController/RGBController_XG270QG.h
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
/*------------------------------------*\
|
||||
| RGBController_XG270QG.h |
|
||||
| Lanzaa 1/23/2022 |
|
||||
\*------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
#include <vector>
|
||||
|
||||
#include "VS_XG270QG_Controller.h"
|
||||
#include "RGBController.h"
|
||||
|
||||
class RGBController_XG270QG : public RGBController
|
||||
{
|
||||
public:
|
||||
RGBController_XG270QG(VS_XG270QG_Controller* controller_ptr);
|
||||
|
||||
void SetupZones();
|
||||
|
||||
void ResizeZone(int zone, int new_size);
|
||||
|
||||
void DeviceUpdateLEDs();
|
||||
void UpdateZoneLEDs(int zone);
|
||||
void UpdateSingleLED(int led);
|
||||
|
||||
void DeviceUpdateMode();
|
||||
|
||||
void SetCustomMode();
|
||||
|
||||
private:
|
||||
VS_XG270QG_Controller* controller;
|
||||
};
|
||||
96
Controllers/ViewSonicController/VS_XG270QG_Controller.cpp
Normal file
96
Controllers/ViewSonicController/VS_XG270QG_Controller.cpp
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
/*-----------------------------------*\
|
||||
| VS_XG270QG_Controller.cpp |
|
||||
| Lanzaa 1/23/2022 |
|
||||
\*-----------------------------------*/
|
||||
|
||||
#include "VS_XG270QG_Controller.h"
|
||||
#include "LogManager.h"
|
||||
|
||||
#include <cstring>
|
||||
|
||||
VS_XG270QG_Controller::VS_XG270QG_Controller(hid_device* device, const char* path)
|
||||
{
|
||||
dev = device;
|
||||
location = path;
|
||||
}
|
||||
|
||||
VS_XG270QG_Controller::~VS_XG270QG_Controller()
|
||||
{
|
||||
hid_close(dev);
|
||||
}
|
||||
|
||||
std::string VS_XG270QG_Controller::GetVersion()
|
||||
{
|
||||
return "?";
|
||||
}
|
||||
|
||||
std::string VS_XG270QG_Controller::GetLocation()
|
||||
{
|
||||
return location;
|
||||
}
|
||||
|
||||
std::string VS_XG270QG_Controller::GetSerial()
|
||||
{
|
||||
wchar_t serial_string[128];
|
||||
int ret = hid_get_serial_number_string(dev, serial_string, 128);
|
||||
|
||||
if(ret != 0)
|
||||
{
|
||||
return("");
|
||||
}
|
||||
|
||||
std::wstring return_wstring = serial_string;
|
||||
std::string return_string(return_wstring.begin(), return_wstring.end());
|
||||
|
||||
return(return_string);
|
||||
return serial;
|
||||
}
|
||||
|
||||
void VS_XG270QG_Controller::SetMode(uint8_t mode, uint8_t r, uint8_t g, uint8_t b)
|
||||
{
|
||||
SendModeComplete(mode, r, g, b, mode, r, g, b);
|
||||
}
|
||||
|
||||
void VS_XG270QG_Controller::SendModeComplete
|
||||
(
|
||||
uint8_t mode1, uint8_t r1, uint8_t g1, uint8_t b1,
|
||||
uint8_t mode2, uint8_t r2, uint8_t g2, uint8_t b2
|
||||
)
|
||||
{
|
||||
uint8_t data[] = {
|
||||
0x02,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00,
|
||||
0x01,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
data[0x01] = mode1; // Downward facing LEDs
|
||||
data[0x02] = r1;
|
||||
data[0x03] = g1;
|
||||
data[0x04] = b1;
|
||||
data[0x05] = 0x00;
|
||||
data[0x06] = 0x0A;
|
||||
data[0x07] = 0x00;
|
||||
|
||||
data[0x08] = mode2; // Back facing LEDs
|
||||
data[0x09] = r2;
|
||||
data[0x0A] = g2;
|
||||
data[0x0B] = b2;
|
||||
data[0x0C] = 0x00;
|
||||
data[0x0D] = 0x0A; // Might be speed related
|
||||
|
||||
// original data packets are 0x40=64 long
|
||||
SendCommand(0, data, 0x20);
|
||||
}
|
||||
|
||||
void VS_XG270QG_Controller::SendCommand(uint16_t wIndex, uint8_t *data, size_t length)
|
||||
{
|
||||
hid_send_feature_report(dev, data, length);
|
||||
}
|
||||
|
||||
58
Controllers/ViewSonicController/VS_XG270QG_Controller.h
Normal file
58
Controllers/ViewSonicController/VS_XG270QG_Controller.h
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
/*---------------------------------------*\
|
||||
| VS_XG270QG_Controller.h |
|
||||
| |
|
||||
| Definitions and types for ViewSonic |
|
||||
| Elite XG270QG Monitor |
|
||||
| |
|
||||
| Lanzaa 1/23/2022 |
|
||||
\*---------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
#include <mutex>
|
||||
#include <string>
|
||||
|
||||
#include "RGBController.h"
|
||||
|
||||
#include <hidapi/hidapi.h>
|
||||
|
||||
enum
|
||||
{
|
||||
VS_MODE_OFF = 0x00,
|
||||
VS_MODE_STATIC = 0x01,
|
||||
VS_MODE_BREATHING = 0x02,
|
||||
VS_MODE_RAINBOW = 0x07,
|
||||
VS_MODE_ELITE = 0x0A,
|
||||
VS_MODE_JAZZ = 0x0C,
|
||||
VS_MODE_WATERFALL = 0x12,
|
||||
VS_MODE_ELITEGLOBAL = 0x13,
|
||||
};
|
||||
|
||||
class VS_XG270QG_Controller
|
||||
{
|
||||
public:
|
||||
VS_XG270QG_Controller(hid_device* device, const char* path);
|
||||
~VS_XG270QG_Controller();
|
||||
|
||||
std::string GetVersion();
|
||||
std::string GetLocation();
|
||||
std::string GetSerial();
|
||||
|
||||
void SetMode(uint8_t mode, uint8_t r, uint8_t g, uint8_t b);
|
||||
|
||||
private:
|
||||
hid_device* dev;
|
||||
std::string location;
|
||||
|
||||
std::string version;
|
||||
std::string serial;
|
||||
|
||||
std::string ReadVersion();
|
||||
void SendModeComplete
|
||||
(
|
||||
uint8_t mode1, uint8_t r1, uint8_t g1, uint8_t b1,
|
||||
uint8_t mode2, uint8_t r2, uint8_t g2, uint8_t b2
|
||||
);
|
||||
void SendCommand(uint16_t wIndex, uint8_t *config, size_t length);
|
||||
};
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
#include "Detector.h"
|
||||
#include "VS_XG270QG_Controller.h"
|
||||
#include "RGBController_XG270QG.h"
|
||||
#include <hidapi/hidapi.h>
|
||||
|
||||
#include "LogManager.h"
|
||||
|
||||
#define VIEWSONIC_VID 0x0416
|
||||
#define VS_XG270QG_PID 0x5020
|
||||
|
||||
void DetectViewSonic(hid_device_info* info, const std::string& name)
|
||||
{
|
||||
hid_device* dev = hid_open_path(info->path);
|
||||
|
||||
if(dev)
|
||||
{
|
||||
VS_XG270QG_Controller* controller = new VS_XG270QG_Controller(dev, info->path);
|
||||
RGBController_XG270QG* rgb_controller = new RGBController_XG270QG(controller);
|
||||
rgb_controller->name = name;
|
||||
|
||||
ResourceManager::get()->RegisterRGBController(rgb_controller);
|
||||
}
|
||||
}
|
||||
|
||||
REGISTER_HID_DETECTOR_IPU("ViewSonic Monitor XG270QG", DetectViewSonic, VIEWSONIC_VID, VS_XG270QG_PID, 0, 0xFF00, 1);
|
||||
|
|
@ -153,6 +153,7 @@ INCLUDEPATH +=
|
|||
Controllers/TecknetController/ \
|
||||
Controllers/ThermaltakePoseidonZRGBController/ \
|
||||
Controllers/ThermaltakeRiingController/ \
|
||||
Controllers/ViewSonicController/ \
|
||||
Controllers/WootingKeyboardController/ \
|
||||
Controllers/YeelightController/ \
|
||||
Controllers/ZalmanZSyncController/ \
|
||||
|
|
@ -539,6 +540,8 @@ HEADERS +=
|
|||
Controllers/TrustController/RGBController_TrustGXT180.h \
|
||||
Controllers/TrustController/TrustGXT114Controller.h \
|
||||
Controllers/TrustController/TrustGXT180Controller.h \
|
||||
Controllers/ViewSonicController/VS_XG270QG_Controller.h \
|
||||
Controllers/ViewSonicController/RGBController_XG270QG.h \
|
||||
Controllers/WootingKeyboardController/WootingKeyboardController.h \
|
||||
Controllers/WootingKeyboardController/WootingOneKeyboardController.h \
|
||||
Controllers/WootingKeyboardController/WootingTwoKeyboardController.h \
|
||||
|
|
@ -1047,6 +1050,9 @@ SOURCES +=
|
|||
Controllers/TrustController/TrustControllerDetect.cpp \
|
||||
Controllers/TrustController/RGBController_TrustGXT114.cpp \
|
||||
Controllers/TrustController/RGBController_TrustGXT180.cpp \
|
||||
Controllers/ViewSonicController/ViewSonicControllerDetect.cpp \
|
||||
Controllers/ViewSonicController/RGBController_XG270QG.cpp \
|
||||
Controllers/ViewSonicController/VS_XG270QG_Controller.cpp \
|
||||
Controllers/WootingKeyboardController/WootingKeyboardController.cpp \
|
||||
Controllers/WootingKeyboardController/WootingKeyboardControllerDetect.cpp \
|
||||
Controllers/WootingKeyboardController/WootingOneKeyboardController.cpp \
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue