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:
committed by
Kevin Pearson
parent
1f0458ea4f
commit
793aa0d557
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user