mirror of
https://gitlab.com/asus-linux/asusctl.git
synced 2026-02-06 00:15:04 +01:00
Proper fix of laptop mode conversion bug
This commit is contained in:
@@ -5,6 +5,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
## [0.14.3] - 2020-05-07
|
||||||
|
### Changed
|
||||||
|
- Proper fix of laptop mode conversion bug
|
||||||
|
|
||||||
## [0.14.2] - 2020-04-07
|
## [0.14.2] - 2020-04-07
|
||||||
### Changed
|
### Changed
|
||||||
- Try to correct how laptop modes are handled
|
- Try to correct how laptop modes are handled
|
||||||
|
|||||||
@@ -234,6 +234,7 @@ impl From<&AuraModes> for u8 {
|
|||||||
AuraModes::Comet(_) => COMET,
|
AuraModes::Comet(_) => COMET,
|
||||||
AuraModes::Flash(_) => FLASH,
|
AuraModes::Flash(_) => FLASH,
|
||||||
AuraModes::MultiStatic(_) => MULTISTATIC,
|
AuraModes::MultiStatic(_) => MULTISTATIC,
|
||||||
|
AuraModes::RGB(_) => RGB,
|
||||||
_ => panic!("Invalid mode"),
|
_ => panic!("Invalid mode"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -279,6 +280,7 @@ impl From<u8> for AuraModes {
|
|||||||
COMET => AuraModes::Comet(SingleColour::default()),
|
COMET => AuraModes::Comet(SingleColour::default()),
|
||||||
FLASH => AuraModes::Flash(SingleColour::default()),
|
FLASH => AuraModes::Flash(SingleColour::default()),
|
||||||
MULTISTATIC => AuraModes::MultiStatic(MultiColour::default()),
|
MULTISTATIC => AuraModes::MultiStatic(MultiColour::default()),
|
||||||
|
RGB => AuraModes::RGB(vec![]),
|
||||||
_ => panic!("Invalid mode byte"),
|
_ => panic!("Invalid mode byte"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -151,8 +151,7 @@ impl From<&AuraModes> for [u8; LED_MSG_LEN] {
|
|||||||
AuraModes::Pulse(_) => msg[3] = 0x0a,
|
AuraModes::Pulse(_) => msg[3] = 0x0a,
|
||||||
AuraModes::Comet(_) => msg[3] = 0x0b,
|
AuraModes::Comet(_) => msg[3] = 0x0b,
|
||||||
AuraModes::Flash(_) => msg[3] = 0x0c,
|
AuraModes::Flash(_) => msg[3] = 0x0c,
|
||||||
AuraModes::MultiStatic(_) => msg[3] = 0x0d,
|
_ => panic!("Mode not convertable to 1D array: {}", <&str>::from(mode)),
|
||||||
_ => print!("Mode not convertable to array: {}", <&str>::from(mode)),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
match mode {
|
match mode {
|
||||||
@@ -195,7 +194,7 @@ impl From<&AuraModes> for [u8; LED_MSG_LEN] {
|
|||||||
msg[5] = settings.colour.1;
|
msg[5] = settings.colour.1;
|
||||||
msg[6] = settings.colour.2;
|
msg[6] = settings.colour.2;
|
||||||
}
|
}
|
||||||
_ => panic!("Mode not convertable to array"),
|
_ => panic!("Mode not convertable to 1D array: {}", <&str>::from(mode)),
|
||||||
}
|
}
|
||||||
msg
|
msg
|
||||||
}
|
}
|
||||||
@@ -240,7 +239,7 @@ impl From<&AuraModes> for [[u8; LED_MSG_LEN]; 4] {
|
|||||||
msg[3][5] = settings.colour4.1;
|
msg[3][5] = settings.colour4.1;
|
||||||
msg[3][6] = settings.colour4.2;
|
msg[3][6] = settings.colour4.2;
|
||||||
}
|
}
|
||||||
_ => panic!("Mode not convertable to array"),
|
_ => panic!("Mode not convertable to 2D array: {}", <&str>::from(mode)),
|
||||||
}
|
}
|
||||||
msg
|
msg
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ impl Config {
|
|||||||
let byte: u8 = (&mode).into();
|
let byte: u8 = (&mode).into();
|
||||||
for (index, n) in self.builtin_modes.iter().enumerate() {
|
for (index, n) in self.builtin_modes.iter().enumerate() {
|
||||||
if byte == u8::from(n) {
|
if byte == u8::from(n) {
|
||||||
|
// Consume it, OMNOMNOMNOM
|
||||||
self.builtin_modes[index] = mode;
|
self.builtin_modes[index] = mode;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ where
|
|||||||
///
|
///
|
||||||
/// `aura_effect_init` must be called any effect routine, and called only once.
|
/// `aura_effect_init` must be called any effect routine, and called only once.
|
||||||
#[inline]
|
#[inline]
|
||||||
async fn write_effect(&mut self, effect: Vec<Vec<u8>>) -> Result<(), RogError> {
|
async fn write_effect(&mut self, effect: &Vec<Vec<u8>>) -> Result<(), RogError> {
|
||||||
if self.flip_effect_write {
|
if self.flip_effect_write {
|
||||||
for row in effect.iter().rev() {
|
for row in effect.iter().rev() {
|
||||||
self.write_bytes(row).await?;
|
self.write_bytes(row).await?;
|
||||||
@@ -121,14 +121,6 @@ where
|
|||||||
#[inline]
|
#[inline]
|
||||||
async fn set_and_save(&mut self, mode: AuraModes, config: &mut Config) -> Result<(), RogError> {
|
async fn set_and_save(&mut self, mode: AuraModes, config: &mut Config) -> Result<(), RogError> {
|
||||||
match mode {
|
match mode {
|
||||||
AuraModes::RGB(v) => {
|
|
||||||
if v[0].is_empty() {
|
|
||||||
let bytes = KeyColourArray::get_init_msg();
|
|
||||||
self.write_bytes(&bytes).await?;
|
|
||||||
} else {
|
|
||||||
self.write_effect(v).await?;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
AuraModes::LedBrightness(n) => {
|
AuraModes::LedBrightness(n) => {
|
||||||
let bytes: [u8; LED_MSG_LEN] = (&mode).into();
|
let bytes: [u8; LED_MSG_LEN] = (&mode).into();
|
||||||
self.write_bytes(&bytes).await?;
|
self.write_bytes(&bytes).await?;
|
||||||
@@ -138,10 +130,36 @@ where
|
|||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
let mode_num: u8 = u8::from(&mode);
|
let mode_num: u8 = u8::from(&mode);
|
||||||
|
self.write_mode(&mode).await?;
|
||||||
|
config.current_mode = mode_num;
|
||||||
|
config.set_mode_data(mode);
|
||||||
|
config.write();
|
||||||
|
info!(
|
||||||
|
"Switched LED mode to {}",
|
||||||
|
<&str>::from(&<AuraModes>::from(config.current_mode))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
async fn write_mode(&mut self, mode: &AuraModes) -> Result<(), RogError> {
|
||||||
|
match mode {
|
||||||
|
AuraModes::RGB(v) => {
|
||||||
|
if v.is_empty() || v[0].is_empty() {
|
||||||
|
let bytes = KeyColourArray::get_init_msg();
|
||||||
|
self.write_bytes(&bytes).await?;
|
||||||
|
} else {
|
||||||
|
self.write_effect(v).await?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
let mode_num: u8 = u8::from(mode);
|
||||||
match mode {
|
match mode {
|
||||||
AuraModes::MultiStatic(_) => {
|
AuraModes::MultiStatic(_) => {
|
||||||
if self.supported_modes.contains(&mode_num) {
|
if self.supported_modes.contains(&mode_num) {
|
||||||
let bytes: [[u8; LED_MSG_LEN]; 4] = (&mode).into();
|
let bytes: [[u8; LED_MSG_LEN]; 4] = mode.into();
|
||||||
for array in bytes.iter() {
|
for array in bytes.iter() {
|
||||||
self.write_bytes(array).await?;
|
self.write_bytes(array).await?;
|
||||||
}
|
}
|
||||||
@@ -149,7 +167,7 @@ where
|
|||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
if self.supported_modes.contains(&mode_num) {
|
if self.supported_modes.contains(&mode_num) {
|
||||||
let bytes: [u8; LED_MSG_LEN] = (&mode).into();
|
let bytes: [u8; LED_MSG_LEN] = mode.into();
|
||||||
self.write_bytes(&bytes).await?;
|
self.write_bytes(&bytes).await?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -157,10 +175,6 @@ where
|
|||||||
self.write_bytes(&LED_SET).await?;
|
self.write_bytes(&LED_SET).await?;
|
||||||
// Changes won't persist unless apply is set
|
// Changes won't persist unless apply is set
|
||||||
self.write_bytes(&LED_APPLY).await?;
|
self.write_bytes(&LED_APPLY).await?;
|
||||||
config.current_mode = mode_num;
|
|
||||||
config.set_mode_data(mode);
|
|
||||||
config.write();
|
|
||||||
info!("Switched LED mode to {:#?}", config.current_mode);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ use rog_client::{
|
|||||||
};
|
};
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
|
|
||||||
static VERSION: &str = "0.14.2";
|
static VERSION: &str = "0.14.3";
|
||||||
|
|
||||||
#[derive(Options)]
|
#[derive(Options)]
|
||||||
struct CLIStart {
|
struct CLIStart {
|
||||||
|
|||||||
Reference in New Issue
Block a user