1
0
mirror of https://github.com/MatMoul/g810-led.git synced 2025-12-24 15:52:36 +00:00

Initial work to add G213 support

Currently supported:
- G213 by region {1..5}
- Standard FX calls
- Startup behavior
- Help and command-line app support

resolves MatMoul/g810-led#69

Signed-off-by: Kevin Pearson <pearson.kevin.m@gmail.com>
This commit is contained in:
Kevin Pearson
2017-04-17 12:37:57 -04:00
committed by Kevin Pearson
parent 1f0458ea4f
commit 793aa0d557
13 changed files with 73 additions and 11 deletions

View File

@@ -231,6 +231,8 @@ LedKeyboard::KeyboardModel LedKeyboard::getKeyboardModel() {
bool LedKeyboard::commit() {
byte_buffer_t data;
switch (m_keyboardModel) {
case KeyboardModel::g213:
break; // Keyboard is non-transactional
case KeyboardModel::g410:
case KeyboardModel::g610:
case KeyboardModel::g810:
@@ -430,17 +432,32 @@ bool LedKeyboard::setGroupKeys(KeyGroup keyGroup, LedKeyboard::Color color) {
bool LedKeyboard::setAllKeys(LedKeyboard::Color color) {
KeyValueArray keyValues;
for (uint8_t i = 0; i < keyGroupLogo.size(); i++) keyValues.push_back({keyGroupLogo[i], color});
for (uint8_t i = 0; i < keyGroupIndicators.size(); i++) keyValues.push_back({keyGroupIndicators[i], color});
for (uint8_t i = 0; i < keyGroupMultimedia.size(); i++) keyValues.push_back({keyGroupMultimedia[i], color});
for (uint8_t i = 0; i < keyGroupGKeys.size(); i++) keyValues.push_back({keyGroupGKeys[i], color});
for (uint8_t i = 0; i < keyGroupFKeys.size(); i++) keyValues.push_back({keyGroupFKeys[i], color});
for (uint8_t i = 0; i < keyGroupFunctions.size(); i++) keyValues.push_back({keyGroupFunctions[i], color});
for (uint8_t i = 0; i < keyGroupArrows.size(); i++) keyValues.push_back({keyGroupArrows[i], color});
for (uint8_t i = 0; i < keyGroupNumeric.size(); i++) keyValues.push_back({keyGroupNumeric[i], color});
for (uint8_t i = 0; i < keyGroupModifiers.size(); i++) keyValues.push_back({keyGroupModifiers[i], color});
for (uint8_t i = 0; i < keyGroupKeys.size(); i++) keyValues.push_back({keyGroupKeys[i], color});
return setKeys(keyValues);
switch (m_keyboardModel) {
case KeyboardModel::g213:
for (uint8_t rIndex=0x01; rIndex <= 0x05; rIndex++) {
if (! setRegion(rIndex,color)) return false;
}
return true;
case KeyboardModel::g410:
case KeyboardModel::g610:
case KeyboardModel::g810:
case KeyboardModel::g910:
for (uint8_t i = 0; i < keyGroupLogo.size(); i++) keyValues.push_back({keyGroupLogo[i], color});
for (uint8_t i = 0; i < keyGroupIndicators.size(); i++) keyValues.push_back({keyGroupIndicators[i], color});
for (uint8_t i = 0; i < keyGroupMultimedia.size(); i++) keyValues.push_back({keyGroupMultimedia[i], color});
for (uint8_t i = 0; i < keyGroupGKeys.size(); i++) keyValues.push_back({keyGroupGKeys[i], color});
for (uint8_t i = 0; i < keyGroupFKeys.size(); i++) keyValues.push_back({keyGroupFKeys[i], color});
for (uint8_t i = 0; i < keyGroupFunctions.size(); i++) keyValues.push_back({keyGroupFunctions[i], color});
for (uint8_t i = 0; i < keyGroupArrows.size(); i++) keyValues.push_back({keyGroupArrows[i], color});
for (uint8_t i = 0; i < keyGroupNumeric.size(); i++) keyValues.push_back({keyGroupNumeric[i], color});
for (uint8_t i = 0; i < keyGroupModifiers.size(); i++) keyValues.push_back({keyGroupModifiers[i], color});
for (uint8_t i = 0; i < keyGroupKeys.size(); i++) keyValues.push_back({keyGroupKeys[i], color});
return setKeys(keyValues);
default:
return false;
}
return false;
}
@@ -510,10 +527,25 @@ bool LedKeyboard::setGKeysMode(uint8_t value) {
return false;
}
bool LedKeyboard::setRegion(uint8_t region, LedKeyboard::Color color) {
LedKeyboard::byte_buffer_t data;
switch (m_keyboardModel) {
case KeyboardModel::g213:
data = {0x11, 0xff, 0x0c, 0x3a, region, 0x01, color.red, color.green, color.blue };
data.resize(20,0x00);
return sendDataInternal(data);
break;
default:
break;
}
return false;
}
bool LedKeyboard::setStartupMode(StartupMode startupMode) {
byte_buffer_t data;
switch (m_keyboardModel) {
case KeyboardModel::g213:
case KeyboardModel::g410:
case KeyboardModel::g610:
case KeyboardModel::g810:
@@ -535,6 +567,11 @@ bool LedKeyboard::setNativeEffect(NativeEffect effect, NativeEffectPart part, ui
uint8_t protocolByte = 0;
switch (m_keyboardModel) {
case KeyboardModel::g213:
protocolByte = 0x0c;
if (part == NativeEffectPart::logo) return false; //Does not have logo component
break;
case KeyboardModel::g410:
case KeyboardModel::g610: // Unconfirmed
case KeyboardModel::g810:
@@ -653,6 +690,8 @@ bool LedKeyboard::sendDataInternal(byte_buffer_t &data) {
LedKeyboard::byte_buffer_t LedKeyboard::getKeyGroupAddress(LedKeyboard::KeyAddressGroup keyAddressGroup) {
switch (m_keyboardModel) {
case KeyboardModel::g213:
return {}; // Device doesn't support per-key setting
case KeyboardModel::g410:
case KeyboardModel::g610:
case KeyboardModel::g810:

View File

@@ -17,6 +17,7 @@ class LedKeyboard {
private:
const std::vector<std::vector<uint16_t>> SupportedKeyboards = {
{ 0x46d, 0xc336, (u_int16_t)KeyboardModel::g213 },
{ 0x46d, 0xc330, (u_int16_t)KeyboardModel::g410 },
{ 0x46d, 0xc333, (u_int16_t)KeyboardModel::g610 },
{ 0x46d, 0xc338, (u_int16_t)KeyboardModel::g610 },
@@ -40,6 +41,7 @@ class LedKeyboard {
enum class KeyboardModel : uint8_t {
unknown = 0x00,
g213,
g410,
g610,
g810,
@@ -144,6 +146,7 @@ class LedKeyboard {
bool setMNKey(uint8_t value);
bool setGKeysMode(uint8_t value);
bool setRegion(uint8_t region, Color color);
bool setStartupMode(StartupMode startupMode);
bool setNativeEffect(NativeEffect effect, NativeEffectPart part, uint8_t speed, Color color);