Add support for SteelSeries Apex 3 ten-zone keyboard
This commit is contained in:
parent
7bb745823d
commit
87234f4f44
8 changed files with 287 additions and 0 deletions
|
|
@ -743,6 +743,7 @@ SUBSYSTEMS=="usb", ATTR{idVendor}=="054c", ATTR{idProduct}=="0ba0", TAG+="uacces
|
|||
# Headsets: #
|
||||
# SteelSeries Siberia 350 #
|
||||
# Keyboards: #
|
||||
# SteelSeries Apex 3 #
|
||||
# SteelSeries Apex 5 #
|
||||
# SteelSeries Apex 7 #
|
||||
# SteelSeries Apex 7 TKL #
|
||||
|
|
@ -786,6 +787,7 @@ SUBSYSTEMS=="usb", ATTR{idVendor}=="1038", ATTR{idProduct}=="1612", TAG+="uacces
|
|||
SUBSYSTEMS=="usb", ATTR{idVendor}=="1038", ATTR{idProduct}=="1618", TAG+="uaccess"
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="1038", ATTR{idProduct}=="1610", TAG+="uaccess"
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="1038", ATTR{idProduct}=="1614", TAG+="uaccess"
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="1038", ATTR{idProduct}=="161a", TAG+="uaccess", TAG+="Apex3"
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="1038", ATTR{idProduct}=="0616", TAG+="uaccess"
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="1038", ATTR{idProduct}=="1202", TAG+="uaccess"
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="1038", ATTR{idProduct}=="1206", TAG+="uaccess"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,96 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_SteelSeriesApexTZone.cpp |
|
||||
| |
|
||||
| Edbgon 06.10.21 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#include "RGBController_SteelSeriesApexTZone.h"
|
||||
|
||||
RGBController_SteelSeriesApexTZone::RGBController_SteelSeriesApexTZone(SteelSeriesApexTZoneController* apex_tzone_ptr)
|
||||
{
|
||||
ApexTZone = apex_tzone_ptr;
|
||||
|
||||
name = ApexTZone->GetDeviceName();
|
||||
vendor = "SteelSeries";
|
||||
type = DEVICE_TYPE_KEYBOARD;
|
||||
description = "SteelSeries Apex 3 device";
|
||||
location = ApexTZone->GetDeviceLocation();
|
||||
serial = ApexTZone->GetSerialString();
|
||||
|
||||
mode direct;
|
||||
direct.name = "Direct";
|
||||
direct.value = 0;
|
||||
direct.flags = MODE_FLAG_HAS_PER_LED_COLOR | MODE_FLAG_HAS_BRIGHTNESS | MODE_FLAG_MANUAL_SAVE;
|
||||
direct.color_mode = MODE_COLORS_PER_LED;
|
||||
direct.brightness_min = 0x00;
|
||||
direct.brightness_max = 0x64;
|
||||
direct.brightness = 0x64;
|
||||
modes.push_back(direct);
|
||||
|
||||
SetupZones();
|
||||
}
|
||||
|
||||
RGBController_SteelSeriesApexTZone::~RGBController_SteelSeriesApexTZone()
|
||||
{
|
||||
delete ApexTZone;
|
||||
}
|
||||
|
||||
|
||||
void RGBController_SteelSeriesApexTZone::DeviceSaveMode()
|
||||
{
|
||||
ApexTZone->Save();
|
||||
}
|
||||
|
||||
void RGBController_SteelSeriesApexTZone::SetupZones()
|
||||
{
|
||||
for (int i = 1; i <= 10; i++)
|
||||
{
|
||||
zone curr_zone;
|
||||
curr_zone.name = "Zone " + std::to_string(i);
|
||||
curr_zone.type = ZONE_TYPE_LINEAR;
|
||||
curr_zone.leds_min = 1;
|
||||
curr_zone.leds_max = 1;
|
||||
curr_zone.leds_count = 1;
|
||||
curr_zone.matrix_map = NULL;
|
||||
zones.push_back(curr_zone);
|
||||
|
||||
led zone_led;
|
||||
zone_led.name = "Zone " + std::to_string(i);
|
||||
leds.push_back(zone_led);
|
||||
}
|
||||
|
||||
SetupColors();
|
||||
}
|
||||
|
||||
void RGBController_SteelSeriesApexTZone::ResizeZone(int /*zone*/, int /*new_size*/)
|
||||
{
|
||||
/*---------------------------------------------------------*\
|
||||
| This device does not support resizing zones |
|
||||
\*---------------------------------------------------------*/
|
||||
}
|
||||
|
||||
void RGBController_SteelSeriesApexTZone::DeviceUpdateLEDs()
|
||||
{
|
||||
ApexTZone->SetColor(colors, modes[active_mode].brightness);
|
||||
}
|
||||
|
||||
void RGBController_SteelSeriesApexTZone::UpdateZoneLEDs(int /*zone*/)
|
||||
{
|
||||
DeviceUpdateLEDs();
|
||||
}
|
||||
|
||||
|
||||
void RGBController_SteelSeriesApexTZone::UpdateSingleLED(int /*led*/)
|
||||
{
|
||||
DeviceUpdateLEDs();
|
||||
}
|
||||
|
||||
void RGBController_SteelSeriesApexTZone::SetCustomMode()
|
||||
{
|
||||
active_mode = 0;
|
||||
}
|
||||
|
||||
void RGBController_SteelSeriesApexTZone::DeviceUpdateMode()
|
||||
{
|
||||
DeviceUpdateLEDs();
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
/*-----------------------------------------*\
|
||||
| RGBController_SteelSeriesApexTZone.h |
|
||||
| |
|
||||
| Edbgon 06.10.21 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "RGBController.h"
|
||||
#include "SteelSeriesApexTZoneController.h"
|
||||
|
||||
class RGBController_SteelSeriesApexTZone : public RGBController
|
||||
{
|
||||
public:
|
||||
RGBController_SteelSeriesApexTZone(SteelSeriesApexTZoneController* apex_tzone_ptr);
|
||||
~RGBController_SteelSeriesApexTZone();
|
||||
|
||||
void SetupZones();
|
||||
|
||||
void ResizeZone(int zone, int new_size);
|
||||
|
||||
void DeviceUpdateLEDs();
|
||||
void UpdateZoneLEDs(int zone);
|
||||
void UpdateSingleLED(int led);
|
||||
|
||||
void SetCustomMode();
|
||||
void DeviceUpdateMode();
|
||||
void DeviceSaveMode();
|
||||
|
||||
private:
|
||||
SteelSeriesApexTZoneController* ApexTZone;
|
||||
};
|
||||
|
|
@ -0,0 +1,96 @@
|
|||
/*-----------------------------------------*\
|
||||
| SteelSeriesApexTZoneController.cpp |
|
||||
| |
|
||||
| Edbgon 06.10.21 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
|
||||
#include "SteelSeriesApexTZoneController.h"
|
||||
#include <cstring>
|
||||
|
||||
SteelSeriesApexTZoneController::SteelSeriesApexTZoneController
|
||||
(
|
||||
hid_device* dev_handle,
|
||||
steelseries_type proto_type,
|
||||
const char* path
|
||||
)
|
||||
{
|
||||
dev = dev_handle;
|
||||
location = path;
|
||||
proto = proto_type;
|
||||
}
|
||||
|
||||
SteelSeriesApexTZoneController::~SteelSeriesApexTZoneController()
|
||||
{
|
||||
hid_close(dev);
|
||||
}
|
||||
|
||||
std::string SteelSeriesApexTZoneController::GetDeviceLocation()
|
||||
{
|
||||
return("HID: " + location);
|
||||
}
|
||||
|
||||
char* SteelSeriesApexTZoneController::GetDeviceName()
|
||||
{
|
||||
return device_name;
|
||||
}
|
||||
|
||||
std::string SteelSeriesApexTZoneController::GetSerialString()
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
steelseries_type SteelSeriesApexTZoneController::GetKeyboardType()
|
||||
{
|
||||
return proto;
|
||||
}
|
||||
|
||||
void SteelSeriesApexTZoneController::Save()
|
||||
{
|
||||
unsigned char buf[33] = { 0x00 };
|
||||
memset(buf, 0x00, sizeof(buf));
|
||||
buf[0x01] = 0x06;
|
||||
buf[0x03] = 0x08;
|
||||
hid_write(dev, buf, sizeof(buf));
|
||||
|
||||
memset(buf, 0x00, sizeof(buf));
|
||||
buf[0x01] = 0x09;
|
||||
hid_write(dev, buf, sizeof(buf));
|
||||
}
|
||||
|
||||
void SteelSeriesApexTZoneController::SetColor(std::vector<RGBColor> colors, unsigned char brightness)
|
||||
{
|
||||
unsigned char buf[33] = { 0x00 };
|
||||
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer, set up packet and send |
|
||||
\*-----------------------------------------------------*/
|
||||
|
||||
memset(buf, 0x00, sizeof(buf));
|
||||
buf[0x01] = 0x0A;
|
||||
buf[0x03] = brightness;
|
||||
hid_write(dev, buf, sizeof(buf));
|
||||
|
||||
memset(buf, 0x00, sizeof(buf));
|
||||
buf[0x01] = 0x0B;
|
||||
|
||||
for(int i = 0; i < 10; i++)
|
||||
{
|
||||
buf[(3*i)+3] = RGBGetRValue(colors[i]);;
|
||||
buf[(3*i)+4] = RGBGetGValue(colors[i]);;
|
||||
buf[(3*i)+5] = RGBGetBValue(colors[i]);;
|
||||
}
|
||||
|
||||
hid_write(dev, buf, sizeof(buf));
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
/*-----------------------------------------*\
|
||||
| SteelSeriesApexTZoneController.h |
|
||||
| |
|
||||
| Edbgon 06.10.21 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#include <string>
|
||||
#include <hidapi/hidapi.h>
|
||||
|
||||
#include "SteelSeriesGeneric.h"
|
||||
#include "SteelSeriesApexBaseController.h"
|
||||
|
||||
#pragma once
|
||||
|
||||
class SteelSeriesApexTZoneController
|
||||
{
|
||||
public:
|
||||
SteelSeriesApexTZoneController
|
||||
(
|
||||
hid_device* dev_handle,
|
||||
steelseries_type proto_type,
|
||||
const char* path
|
||||
);
|
||||
|
||||
~SteelSeriesApexTZoneController();
|
||||
|
||||
std::string GetDeviceLocation();
|
||||
char* GetDeviceName();
|
||||
std::string GetSerialString();
|
||||
steelseries_type GetKeyboardType();
|
||||
|
||||
void SetColor(std::vector<RGBColor> colors, unsigned char brightness);
|
||||
void Save();
|
||||
|
||||
private:
|
||||
char device_name[32];
|
||||
hid_device* dev;
|
||||
std::string location;
|
||||
steelseries_type proto;
|
||||
};
|
||||
|
|
@ -4,6 +4,7 @@
|
|||
#include "SteelSeriesSiberiaController.h"
|
||||
#include "SteelSeriesQCKMatController.h"
|
||||
#include "SteelSeriesApexController.h"
|
||||
#include "SteelSeriesApexTZoneController.h"
|
||||
#include "SteelSeriesOldApexController.h"
|
||||
#include "SteelSeriesApexMController.h"
|
||||
#include "SteelSeriesSenseiController.h"
|
||||
|
|
@ -14,6 +15,7 @@
|
|||
#include "RGBController_SteelSeriesSiberia.h"
|
||||
#include "RGBController_SteelSeriesQCKMat.h"
|
||||
#include "RGBController_SteelSeriesApex.h"
|
||||
#include "RGBController_SteelSeriesApexTZone.h"
|
||||
#include "RGBController_SteelSeriesOldApex.h"
|
||||
#include "RGBController_SteelSeriesSensei.h"
|
||||
#include <hidapi/hidapi.h>
|
||||
|
|
@ -63,6 +65,7 @@
|
|||
/*-----------------------------------------------------*\
|
||||
| Keyboard product IDs |
|
||||
\*-----------------------------------------------------*/
|
||||
#define STEELSERIES_APEX_3_PID 0x161A
|
||||
#define STEELSERIES_APEX_5_PID 0x161C
|
||||
#define STEELSERIES_APEX_7_PID 0x1612
|
||||
#define STEELSERIES_APEX_7_TKL_PID 0x1618
|
||||
|
|
@ -72,6 +75,18 @@
|
|||
#define STEELSERIES_APEX_OG_PID 0x1202
|
||||
#define STEELSERIES_APEX_350_PID 0x1206
|
||||
|
||||
void DetectSteelSeriesApexTZone(hid_device_info* info, const std::string& name)
|
||||
{
|
||||
hid_device* dev = hid_open_path(info->path);
|
||||
if(dev)
|
||||
{
|
||||
SteelSeriesApexTZoneController* controller = new SteelSeriesApexTZoneController(dev, APEX_TZONE, info->path);
|
||||
RGBController_SteelSeriesApexTZone* rgb_controller = new RGBController_SteelSeriesApexTZone(controller);
|
||||
rgb_controller->name = name;
|
||||
ResourceManager::get()->RegisterRGBController(rgb_controller);
|
||||
}
|
||||
}
|
||||
|
||||
void DetectSteelSeriesApex(hid_device_info* info, const std::string& name)
|
||||
{
|
||||
hid_device* dev = hid_open_path(info->path);
|
||||
|
|
@ -258,6 +273,7 @@ REGISTER_HID_DETECTOR_I("SteelSeries QCK Prism Cloth 4XL", Det
|
|||
/*---------------------------------------------------------------------------------------------------------------------------------------------------------------------*\
|
||||
| Keyboards |
|
||||
\*---------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||
REGISTER_HID_DETECTOR_I("SteelSeries Apex 3", DetectSteelSeriesApexTZone, STEELSERIES_VID, STEELSERIES_APEX_3_PID, 3 );
|
||||
REGISTER_HID_DETECTOR_I("SteelSeries Apex 5", DetectSteelSeriesApex, STEELSERIES_VID, STEELSERIES_APEX_5_PID, 1 );
|
||||
REGISTER_HID_DETECTOR_I("SteelSeries Apex 7", DetectSteelSeriesApex, STEELSERIES_VID, STEELSERIES_APEX_7_PID, 1 );
|
||||
REGISTER_HID_DETECTOR_I("SteelSeries Apex 7 TKL", DetectSteelSeriesApexTKL, STEELSERIES_VID, STEELSERIES_APEX_7_TKL_PID, 1 );
|
||||
|
|
|
|||
|
|
@ -28,5 +28,6 @@ typedef enum
|
|||
SENSEI = 0x08,
|
||||
RIVAL_600 = 0x09,
|
||||
RIVAL_3 = 0x0a,
|
||||
APEX_TZONE = 0x0b,
|
||||
} steelseries_type;
|
||||
|
||||
|
|
|
|||
|
|
@ -429,6 +429,7 @@ HEADERS +=
|
|||
Controllers/SteelSeriesController/color32.h \
|
||||
Controllers/SteelSeriesController/SteelSeriesApexBaseController.h \
|
||||
Controllers/SteelSeriesController/SteelSeriesApexController.h \
|
||||
Controllers/SteelSeriesController/SteelSeriesApexTZoneController.h \
|
||||
Controllers/SteelSeriesController/SteelSeriesApexMController.h \
|
||||
Controllers/SteelSeriesController/SteelSeriesGeneric.h \
|
||||
Controllers/SteelSeriesController/SteelSeriesOldApexController.h \
|
||||
|
|
@ -438,6 +439,7 @@ HEADERS +=
|
|||
Controllers/SteelSeriesController/SteelSeriesSiberiaController.h \
|
||||
Controllers/SteelSeriesController/SteelSeriesQCKMatController.h \
|
||||
Controllers/SteelSeriesController/RGBController_SteelSeriesApex.h \
|
||||
Controllers/SteelSeriesController/RGBController_SteelSeriesApexTZone.h \
|
||||
Controllers/SteelSeriesController/RGBController_SteelSeriesOldApex.h \
|
||||
Controllers/SteelSeriesController/RGBController_SteelSeriesRival.h \
|
||||
Controllers/SteelSeriesController/RGBController_SteelSeriesRival3.h \
|
||||
|
|
@ -835,6 +837,7 @@ SOURCES +=
|
|||
Controllers/SonyDS4Controller/SonyDS4ControllerDetect.cpp \
|
||||
Controllers/SonyDS4Controller/RGBController_SonyDS4.cpp \
|
||||
Controllers/SteelSeriesController/SteelSeriesApexController.cpp \
|
||||
Controllers/SteelSeriesController/SteelSeriesApexTZoneController.cpp \
|
||||
Controllers/SteelSeriesController/SteelSeriesApexMController.cpp \
|
||||
Controllers/SteelSeriesController/SteelSeriesOldApexController.cpp \
|
||||
Controllers/SteelSeriesController/SteelSeriesRivalController.cpp \
|
||||
|
|
@ -844,6 +847,7 @@ SOURCES +=
|
|||
Controllers/SteelSeriesController/SteelSeriesQCKMatController.cpp \
|
||||
Controllers/SteelSeriesController/SteelSeriesControllerDetect.cpp \
|
||||
Controllers/SteelSeriesController/RGBController_SteelSeriesApex.cpp \
|
||||
Controllers/SteelSeriesController/RGBController_SteelSeriesApexTZone.cpp \
|
||||
Controllers/SteelSeriesController/RGBController_SteelSeriesOldApex.cpp \
|
||||
Controllers/SteelSeriesController/RGBController_SteelSeriesRival.cpp \
|
||||
Controllers/SteelSeriesController/RGBController_SteelSeriesRival3.cpp \
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue