Support fn+calc on G712. Customise ROG key

This commit is contained in:
Luke
2020-07-09 11:17:14 +12:00
parent 1f297ba98e
commit 4f4e0b8f3f
14 changed files with 369 additions and 64 deletions

View File

@@ -1,6 +1,6 @@
[package]
name = "rog-daemon"
version = "0.14.5"
version = "0.15.0"
license = "MPL-2.0"
readme = "README.md"
authors = ["Luke <luke@ljones.dev>"]

View File

@@ -1,3 +1,4 @@
use crate::virt_device::ConsumerKeys;
use rog_client::aura_modes::AuraModes;
use serde_derive::{Deserialize, Serialize};
use std::fs::{File, OpenOptions};
@@ -7,6 +8,7 @@ pub static CONFIG_PATH: &str = "/etc/rogcore.conf";
#[derive(Default, Deserialize, Serialize)]
pub struct Config {
pub rog_key: ConsumerKeys,
pub fan_mode: u8,
pub bat_charge_limit: u8,
pub brightness: u8,

View File

@@ -7,7 +7,7 @@ use rog_client::{
error::AuraError,
};
//use keycode::{KeyMap, KeyMappingId, KeyState, KeyboardState};
use crate::virt_device::ConsumerKeys;
use crate::virt_device::{ConsumerKeys, KeyboardKeys};
use log::{info, warn};
static HELP_ADDRESS: &str = "https://github.com/flukejones/rog-core";
@@ -192,30 +192,22 @@ impl LaptopBase {
}
FnKeys::ScreenBrightUp => rogcore.virt_keys().press(ConsumerKeys::BacklightInc.into()), //self.backlight.step_up(),
FnKeys::ScreenBrightDn => rogcore.virt_keys().press(ConsumerKeys::BacklightDec.into()),
FnKeys::ScreenToggle => rogcore.virt_keys().press(ConsumerKeys::BacklightTog.into()),
FnKeys::ScreenToggle => {}
FnKeys::Sleep => rogcore.suspend_with_systemd(),
FnKeys::AirplaneMode => rogcore.toggle_airplane_mode(),
FnKeys::MicToggle => {}
FnKeys::MicToggle => rogcore.virt_keys().press(KeyboardKeys::MicToggle.into()),
FnKeys::Fan => {
rogcore.fan_mode_step(&mut config).unwrap_or_else(|err| {
warn!("Couldn't toggle fan mode: {:?}", err);
});
}
FnKeys::TouchPadToggle => {
let mut key = [0u8; 32];
key[0] = 0x01;
key[3] = 0x070;
rogcore.virt_keys().press(key);
}
FnKeys::Rog => {
//rogcore.aura_effect_init()?;
//rogcore.aura_write_effect(&self.per_key_led)?;
let mut key = [0u8; 32];
key[0] = 0x01;
key[3] = 0x68; // XF86Tools? F13
rogcore.virt_keys().press(key);
}
FnKeys::TouchPadToggle => rogcore
.virt_keys()
.press(KeyboardKeys::TouchpadToggle.into()),
FnKeys::Rog => rogcore.virt_keys().press(config.rog_key.into()),
FnKeys::Calc => rogcore
.virt_keys()
.press(ConsumerKeys::LaunchCalculator.into()),
FnKeys::None => {
if key_buf[0] != 0x5A {
info!("Unmapped key, attempt passthrough: {:X?}", &key_buf[1]);
@@ -266,6 +258,7 @@ pub enum FnKeys {
LedBrightDown = 0xC5,
AuraPrevious = 0xB2,
AuraNext = 0xB3,
Calc = 0x90,
None,
}
@@ -285,6 +278,7 @@ impl From<u8> for FnKeys {
0xC5 => FnKeys::LedBrightDown,
0xB2 => FnKeys::AuraPrevious,
0xB3 => FnKeys::AuraNext,
0x90 => FnKeys::Calc,
_ => FnKeys::None,
}
}

View File

@@ -9,7 +9,7 @@ use rog_client::{
};
use std::io::Write;
static VERSION: &str = "0.14.5";
static VERSION: &str = "0.15.0";
#[derive(Options)]
struct CLIStart {

View File

@@ -1,4 +1,5 @@
use log::error;
use serde_derive::{Deserialize, Serialize};
use uhid_virt::{Bus, CreateParams, UHIDDevice};
/// Create a virtual device to emit key-presses
@@ -113,12 +114,11 @@ impl VirtKeys {
}
#[allow(dead_code)]
#[derive(Copy, Clone)]
#[derive(Copy, Clone, Deserialize, Serialize)]
pub enum ConsumerKeys {
Power = 0x30,
Sleep = 0x32,
Menu = 0x0040,
// Menu = 0x40,
MediaRecord = 0xB2,
MediaFastFwd = 0xB3,
MediaRewind = 0xB4,
@@ -126,41 +126,21 @@ pub enum ConsumerKeys {
MediaPrev = 0xB6,
MediaStop = 0xB7,
MediaPlayPause = 0xCD,
MediaPause = 0xB0,
MediaVolMute = 0xE2,
MediaVolUp = 0xE9,
MediaVolDown = 0xEA,
BacklightInc = 0x6F,
BacklightDec = 0x70,
BacklightTog = 0x72, // USAGE (Backlight toggle? display toggle?)
BacklightMin = 0x73,
BacklightMax = 0x74,
// BacklightTog = 0x72, // USAGE (Backlight toggle? display toggle?)
ControlConfig = 0x183,
LaunchWordEditor = 0x184,
LaunchTextEditor = 0x185,
LaunchSpreadSheet = 0x186,
LaunchGraphicsEditor = 0x187,
LaunchPresentationApp = 0x188,
LaunchDatabaseEditor = 0x189,
LaunchEmailApp = 0x18A,
LaunchNewsReader = 0x18B,
LaunchCalendarApp = 0x018E,
LaunchTaskManagementApp = 0x18F,
LaunchCalendar = 0x018E,
LaunchCalculator = 0x192,
LaunchWebBrowser = 0x196,
ControlPanel = 0x19F,
VideoOutStep = 0x82,
Documents = 0x1A7,
// VideoOutStep = 0x82,
FileBrowser = 0x1B4,
ImageBrowser = 0x1B6,
AudioBrowser = 0x1B7,
MovieBrowser = 0x1B8,
}
impl From<ConsumerKeys> for [u8; 32] {
@@ -172,3 +152,30 @@ impl From<ConsumerKeys> for [u8; 32] {
bytes
}
}
impl Default for ConsumerKeys {
fn default() -> Self {
ConsumerKeys::ControlConfig
}
}
/// Implements only a small subset of useful keys
#[allow(dead_code)]
#[derive(Copy, Clone)]
pub enum KeyboardKeys {
Config = 0x68, // Desktop configuration, F13
MicToggle = 0x6f, // Microphone toggle, F20
TouchpadToggle = 0x70, // Touchpad toggle, F21
WWW = 0xf0, // Web browser
Sleep = 0xf8, // Sleep
Coffee = 0xf9, // lockscreen
}
impl From<KeyboardKeys> for [u8; 32] {
fn from(key: KeyboardKeys) -> Self {
let mut bytes = [0u8; 32];
bytes[0] = 0x01; // report ID for keyboard
bytes[3] = key as u8;
bytes
}
}