1
0
mirror of https://github.com/MatMoul/g810-led.git synced 2024-12-23 01:06:11 +00:00

Merge pull request #191 from pearsonk/g815

G815 Effects Support
This commit is contained in:
MatMoul 2019-10-16 22:58:16 +02:00 committed by GitHub
commit 37d98ada71
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 91 additions and 12 deletions

View File

@ -377,6 +377,7 @@ bool LedKeyboard::commit() {
case KeyboardModel::g513: case KeyboardModel::g513:
case KeyboardModel::g610: case KeyboardModel::g610:
case KeyboardModel::g810: case KeyboardModel::g810:
case KeyboardModel::g815:
case KeyboardModel::gpro: case KeyboardModel::gpro:
data = { 0x11, 0xff, 0x0c, 0x5a }; data = { 0x11, 0xff, 0x0c, 0x5a };
break; break;
@ -541,7 +542,12 @@ bool LedKeyboard::setGroupKeys(KeyGroup keyGroup, LedKeyboard::Color color) {
keyArray = keyGroupLogo; keyArray = keyGroupLogo;
break; break;
case KeyGroup::indicators: case KeyGroup::indicators:
switch (currentDevice.model) {
case KeyboardModel::g815:
return true;
default:
keyArray = keyGroupIndicators; keyArray = keyGroupIndicators;
}
break; break;
case KeyGroup::gkeys: case KeyGroup::gkeys:
keyArray = keyGroupGKeys; keyArray = keyGroupGKeys;
@ -733,12 +739,15 @@ bool LedKeyboard::setNativeEffect(NativeEffect effect, NativeEffectPart part,
break; break;
case NativeEffectGroup::cycle: case NativeEffectGroup::cycle:
case NativeEffectGroup::waves: case NativeEffectGroup::waves:
case NativeEffectGroup::ripple:
if (! setGroupKeys( if (! setGroupKeys(
LedKeyboard::KeyGroup::indicators, LedKeyboard::KeyGroup::indicators,
LedKeyboard::Color({0xff, 0xff, 0xff})) LedKeyboard::Color({0xff, 0xff, 0xff}))
) return false; ) return false;
if (! commit()) return false; if (! commit()) return false;
break; break;
default:
break;
} }
return ( return (
setNativeEffect(effect, LedKeyboard::NativeEffectPart::keys, period, color, storage) && setNativeEffect(effect, LedKeyboard::NativeEffectPart::keys, period, color, storage) &&
@ -760,6 +769,10 @@ bool LedKeyboard::setNativeEffect(NativeEffect effect, NativeEffectPart part,
protocolBytes[0] = 0x0d; protocolBytes[0] = 0x0d;
protocolBytes[1] = 0x3c; protocolBytes[1] = 0x3c;
break; break;
case KeyboardModel::g815:
protocolBytes[0] = 0x0f;
protocolBytes[1] = 0x1c;
break;
case KeyboardModel::g910: case KeyboardModel::g910:
protocolBytes[0] = 0x10; protocolBytes[0] = 0x10;
protocolBytes[1] = 0x3c; protocolBytes[1] = 0x3c;
@ -768,10 +781,6 @@ bool LedKeyboard::setNativeEffect(NativeEffect effect, NativeEffectPart part,
return false; return false;
} }
if ((effectGroup == NativeEffectGroup::waves) && (part == NativeEffectPart::logo)) {
return setNativeEffect(NativeEffect::color, part, std::chrono::seconds(0), Color({0x00, 0xff, 0xff}), storage);
}
byte_buffer_t data = { byte_buffer_t data = {
0x11, 0xff, protocolBytes[0], protocolBytes[1], 0x11, 0xff, protocolBytes[0], protocolBytes[1],
(uint8_t)part, static_cast<uint8_t>(effectGroup), (uint8_t)part, static_cast<uint8_t>(effectGroup),
@ -790,7 +799,71 @@ bool LedKeyboard::setNativeEffect(NativeEffect effect, NativeEffectPart part,
0, // unused? 0, // unused?
0, // unused? 0, // unused?
}; };
return sendDataInternal(data);
byte_buffer_t setupData;
bool retval;
switch (currentDevice.model) {
case KeyboardModel::g815:
setupData = { 0x11, 0xff, 0x0f, 0x5c, 0x01, 0x03, 0x03 };
setupData.resize(20, 0x00);
retval = sendDataInternal(setupData);
data[16] = 0x01;
switch (part) {
case NativeEffectPart::keys:
data[4] = 0x01;
//Seems to conflict with a star-like effect on G410 and G810
switch (effect) {
case NativeEffect::ripple:
//Adjust periodicity
data[9]=0x00;
data[10]=period.count() >> 8 & 0xff;;
data[11]=period.count() & 0xff;
data[12]=0x00;
break;
default:
break;
}
break;
case NativeEffectPart::logo:
data[4] = 0x00;
switch (effect) {
case NativeEffect::breathing:
data[5]=0x03;
break;
case NativeEffect::cwave:
case NativeEffect::vwave:
case NativeEffect::hwave:
data[5]=0x02;
data[13]=0x64;
break;
case NativeEffect::waves:
case NativeEffect::cycle:
data[5]=0x02;
break;
case NativeEffect::ripple:
case NativeEffect::off:
data[5]=0x00;
break;
default:
data[5]=0x01;
break;
}
break;
default:
break;
}
break;
default: //Many devices may not support logo coloring for wave?
if ((effectGroup == NativeEffectGroup::waves) && (part == NativeEffectPart::logo)) {
return setNativeEffect(NativeEffect::color, part, std::chrono::seconds(0), Color({0x00, 0xff, 0xff}), storage);
}
break;
}
retval = sendDataInternal(data);
return retval;
} }

View File

@ -53,6 +53,7 @@ class LedKeyboard {
{ 0x46d, 0xc338, (uint16_t)KeyboardModel::g610 }, { 0x46d, 0xc338, (uint16_t)KeyboardModel::g610 },
{ 0x46d, 0xc331, (uint16_t)KeyboardModel::g810 }, { 0x46d, 0xc331, (uint16_t)KeyboardModel::g810 },
{ 0x46d, 0xc337, (uint16_t)KeyboardModel::g810 }, { 0x46d, 0xc337, (uint16_t)KeyboardModel::g810 },
{ 0x46d, 0xc33f, (uint16_t)KeyboardModel::g815 },
{ 0x46d, 0xc32b, (uint16_t)KeyboardModel::g910 }, { 0x46d, 0xc32b, (uint16_t)KeyboardModel::g910 },
{ 0x46d, 0xc335, (uint16_t)KeyboardModel::g910 }, { 0x46d, 0xc335, (uint16_t)KeyboardModel::g910 },
{ 0x46d, 0xc339, (uint16_t)KeyboardModel::gpro } { 0x46d, 0xc339, (uint16_t)KeyboardModel::gpro }
@ -66,6 +67,7 @@ class LedKeyboard {
g513, g513,
g610, g610,
g810, g810,
g815,
g910, g910,
gpro gpro
}; };
@ -77,19 +79,23 @@ class LedKeyboard {
color color
}; };
enum class NativeEffectGroup : uint8_t { enum class NativeEffectGroup : uint8_t {
color = 0x01, off,
color,
breathing, breathing,
cycle, cycle,
waves waves,
ripple
}; };
enum class NativeEffect : uint16_t { enum class NativeEffect : uint16_t {
off,
color = static_cast<uint16_t>(NativeEffectGroup::color) << 8, color = static_cast<uint16_t>(NativeEffectGroup::color) << 8,
breathing = static_cast<uint16_t>(NativeEffectGroup::breathing) << 8, breathing = static_cast<uint16_t>(NativeEffectGroup::breathing) << 8,
cycle = static_cast<uint16_t>(NativeEffectGroup::cycle) << 8, cycle = static_cast<uint16_t>(NativeEffectGroup::cycle) << 8,
waves = static_cast<uint16_t>(NativeEffectGroup::waves) << 8, waves = static_cast<uint16_t>(NativeEffectGroup::waves) << 8,
hwave, hwave,
vwave, vwave,
cwave cwave,
ripple = static_cast<uint16_t>(NativeEffectGroup::ripple) << 8
}; };
enum class NativeEffectPart : uint8_t { enum class NativeEffectPart : uint8_t {
all = 0xff, all = 0xff,