Add product code for GL703 0x1869

This commit is contained in:
Luke
2020-04-28 08:09:40 +12:00
parent c6fee63789
commit 9aa431f0d6
8 changed files with 39 additions and 21 deletions

8
Cargo.lock generated
View File

@@ -344,9 +344,9 @@ dependencies = [
[[package]] [[package]]
name = "hermit-abi" name = "hermit-abi"
version = "0.1.11" version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a0d737e0f947a1864e93d33fdef4af8445a00d1ed8dc0c8ddb73139ea6abf15" checksum = "61565ff7aaace3525556587bd2dc31d4a07071957be715e63ce7b1eccf51a8f4"
dependencies = [ dependencies = [
"libc", "libc",
] ]
@@ -689,9 +689,9 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
[[package]] [[package]]
name = "syn" name = "syn"
version = "1.0.17" version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0df0eb663f387145cab623dea85b09c2c5b4b0aef44e945d928e682fce71bb03" checksum = "410a7488c0a728c7ceb4ad59b9567eb4053d02e8cc7f5c0e0eeeb39518369213"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",

View File

@@ -17,7 +17,7 @@ rusb = "^0.5.5"
gumdrop = "^0.8.0" gumdrop = "^0.8.0"
dbus = { version = "^0.8.2", features = ["futures"] } dbus = { version = "^0.8.2", features = ["futures"] }
dbus-tokio = "^0.5.1" dbus-tokio = "^0.5.1"
tokio = { version = "0.2.19", features = ["rt-threaded", "macros"] } tokio = { version = "0.2.4", features = ["rt-threaded", "macros"] }
serde = "1.0" serde = "1.0"
serde_derive = "1.0" serde_derive = "1.0"

View File

@@ -77,12 +77,14 @@ Fan mode toggling requires a newer kernel. I'm unsure when the patches required
**Supported:** **Supported:**
- GX502 (Tested on GX502GW) - GX502 (product 0x1866) (Tested on GX502GW)
**Please help test or provide info for:** **Please help test or provide info for:**
- GA502 (attempts to use same profile as GX502GW) - GL703(0x1869), GA502 (attempts to use same profile as GX502GW)
- GL753 (attempted support from researching 2nd-hand info, multizone may work) - GL553(0x1854) GL753 (attempted support from researching 2nd-hand info, multizone may work)
If the USB product ID is 0x1866 or 0x1869 then the per-key profile with hotkeys *should* work - 0x1866 is tested as this is what I have.
## Wireshark captures ## Wireshark captures

View File

@@ -54,7 +54,7 @@ pub fn aura_brightness_bytes(brightness: u8) -> [u8; 17] {
/// - 01 = breathe (can set two colours) /// - 01 = breathe (can set two colours)
/// - 02 = cycle (through all colours) /// - 02 = cycle (through all colours)
/// - 03 = rainbow /// - 03 = rainbow
/// - 04 = rain /// - 04 = rain (byte 9 sets random colour)
/// - 05 = random keys, red, white, turquoise /// - 05 = random keys, red, white, turquoise
/// - 06 = pressed keys light up and fade /// - 06 = pressed keys light up and fade
/// - 07 = pressed key emits laser /// - 07 = pressed key emits laser
@@ -137,8 +137,14 @@ impl From<SetAuraBuiltin> for [u8; LED_MSG_LEN] {
msg[7] = settings.speed as u8; msg[7] = settings.speed as u8;
msg[8] = settings.direction as u8; msg[8] = settings.direction as u8;
} }
SetAuraBuiltin::Rain(settings) => {
msg[4] = settings.colour.0;
msg[5] = settings.colour.1;
msg[6] = settings.colour.2;
msg[7] = settings.speed as u8;
msg[9] = settings.colour2.2;
}
SetAuraBuiltin::Breathe(settings) => { SetAuraBuiltin::Breathe(settings) => {
msg[3] = 0x01;
msg[4] = settings.colour.0; msg[4] = settings.colour.0;
msg[5] = settings.colour.1; msg[5] = settings.colour.1;
msg[6] = settings.colour.2; msg[6] = settings.colour.2;
@@ -150,8 +156,7 @@ impl From<SetAuraBuiltin> for [u8; LED_MSG_LEN] {
SetAuraBuiltin::Cycle(settings) | SetAuraBuiltin::Disco(settings) => { SetAuraBuiltin::Cycle(settings) | SetAuraBuiltin::Disco(settings) => {
msg[7] = settings.speed as u8; msg[7] = settings.speed as u8;
} }
SetAuraBuiltin::Rain(settings) SetAuraBuiltin::Highlight(settings)
| SetAuraBuiltin::Highlight(settings)
| SetAuraBuiltin::Laser(settings) | SetAuraBuiltin::Laser(settings)
| SetAuraBuiltin::Ripple(settings) => { | SetAuraBuiltin::Ripple(settings) => {
msg[4] = settings.colour.0; msg[4] = settings.colour.0;
@@ -271,7 +276,7 @@ impl Default for BuiltInModeBytes {
rainbow: <[u8; LED_MSG_LEN]>::from(SetAuraBuiltin::Rainbow( rainbow: <[u8; LED_MSG_LEN]>::from(SetAuraBuiltin::Rainbow(
SingleSpeedDirection::default(), SingleSpeedDirection::default(),
)), )),
rain: <[u8; LED_MSG_LEN]>::from(SetAuraBuiltin::Rain(SingleColourSpeed::default())), rain: <[u8; LED_MSG_LEN]>::from(SetAuraBuiltin::Rain(TwoColourSpeed::default())),
random: <[u8; LED_MSG_LEN]>::from(SetAuraBuiltin::Disco(SingleSpeed::default())), random: <[u8; LED_MSG_LEN]>::from(SetAuraBuiltin::Disco(SingleSpeed::default())),
highlight: <[u8; LED_MSG_LEN]>::from(SetAuraBuiltin::Highlight( highlight: <[u8; LED_MSG_LEN]>::from(SetAuraBuiltin::Highlight(
SingleColourSpeed::default(), SingleColourSpeed::default(),

View File

@@ -159,7 +159,7 @@ pub enum SetAuraBuiltin {
#[options(help = "rainbow cycling in one of four directions")] #[options(help = "rainbow cycling in one of four directions")]
Rainbow(SingleSpeedDirection), Rainbow(SingleSpeedDirection),
#[options(help = "random pattern mimicking raindrops")] #[options(help = "random pattern mimicking raindrops")]
Rain(SingleColourSpeed), Rain(TwoColourSpeed),
#[options(help = "random pattern of three preset colours")] #[options(help = "random pattern of three preset colours")]
Disco(SingleSpeed), Disco(SingleSpeed),
#[options(help = "pressed keys are highlighted to fade")] #[options(help = "pressed keys are highlighted to fade")]

View File

@@ -53,8 +53,13 @@ pub(crate) struct RogCore {
} }
impl RogCore { impl RogCore {
pub(crate) fn new(laptop: &dyn Laptop) -> Result<RogCore, AuraError> { pub(crate) fn new(
let mut dev_handle = RogCore::get_device(laptop.usb_vendor(), laptop.usb_product())?; vendor: u16,
product: u16,
led_endpoint: u8,
key_endpoint: u8,
) -> Result<RogCore, AuraError> {
let mut dev_handle = RogCore::get_device(vendor, product)?;
dev_handle.set_active_configuration(0).unwrap_or(()); dev_handle.set_active_configuration(0).unwrap_or(());
let dev_config = dev_handle.device().config_descriptor(0).unwrap(); let dev_config = dev_handle.device().config_descriptor(0).unwrap();
@@ -63,7 +68,7 @@ impl RogCore {
for iface in dev_config.interfaces() { for iface in dev_config.interfaces() {
for desc in iface.descriptors() { for desc in iface.descriptors() {
for endpoint in desc.endpoint_descriptors() { for endpoint in desc.endpoint_descriptors() {
if endpoint.address() == laptop.key_endpoint() { if endpoint.address() == key_endpoint {
debug!("INTERVAL: {:?}", endpoint.interval()); debug!("INTERVAL: {:?}", endpoint.interval());
debug!("MAX: {:?}", endpoint.max_packet_size()); debug!("MAX: {:?}", endpoint.max_packet_size());
debug!("SYNC: {:?}", endpoint.sync_type()); debug!("SYNC: {:?}", endpoint.sync_type());
@@ -83,8 +88,8 @@ impl RogCore {
Ok(RogCore { Ok(RogCore {
handle: dev_handle, handle: dev_handle,
initialised: false, initialised: false,
led_endpoint: laptop.led_endpoint(), led_endpoint: led_endpoint,
keys_endpoint: laptop.key_endpoint(), keys_endpoint: key_endpoint,
config: Config::default().read(), config: Config::default().read(),
virt_keys: VirtKeys::new(), virt_keys: VirtKeys::new(),
}) })

View File

@@ -28,7 +28,13 @@ type EffectType = Arc<Mutex<Option<Vec<Vec<u8>>>>>;
// DBUS processing takes 6ms if not tokiod // DBUS processing takes 6ms if not tokiod
pub async fn start_daemon() -> Result<(), Box<dyn Error>> { pub async fn start_daemon() -> Result<(), Box<dyn Error>> {
let laptop = match_laptop(); let laptop = match_laptop();
let mut rogcore = RogCore::new(&*laptop).map_or_else( let mut rogcore = RogCore::new(
laptop.usb_vendor(),
laptop.usb_product(),
laptop.led_endpoint(),
laptop.key_endpoint(),
)
.map_or_else(
|err| { |err| {
error!("{}", err); error!("{}", err);
panic!("{}", err); panic!("{}", err);

View File

@@ -17,7 +17,7 @@ pub(crate) fn match_laptop() -> Box<dyn Laptop> {
let device_desc = device.device_descriptor().unwrap(); let device_desc = device.device_descriptor().unwrap();
if device_desc.vendor_id() == 0x0b05 { if device_desc.vendor_id() == 0x0b05 {
match device_desc.product_id() { match device_desc.product_id() {
0x1866 => { 0x1869 | 0x1866 => {
info!("Found GX502 or similar"); info!("Found GX502 or similar");
return Box::new(LaptopGX502::new()); return Box::new(LaptopGX502::new());
} }