mirror of
https://gitlab.com/asus-linux/asusctl.git
synced 2026-02-06 00:15:04 +01:00
Compare commits
65 Commits
6.1.18
...
d787f85605
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d787f85605 | ||
|
|
aa063c20fd | ||
|
|
8551908452 | ||
|
|
5ecb174b8f | ||
|
|
fa266bff5b | ||
|
|
f53f1f360f | ||
|
|
da19216b78 | ||
|
|
46efd4190f | ||
|
|
ed3022e25e | ||
|
|
7c10d6c6d9 | ||
|
|
af5f3a5c71 | ||
|
|
7d5ec5f2c7 | ||
|
|
1c8acf6de3 | ||
|
|
7b644e7ad6 | ||
|
|
0f02fe868c | ||
|
|
abd3100e30 | ||
|
|
6f651c2b85 | ||
|
|
93ec5d1bce | ||
|
|
5aea7f51c0 | ||
|
|
d03d8ce67f | ||
|
|
ae3693e0d9 | ||
|
|
c8b9248eda | ||
|
|
22098794fe | ||
|
|
10d49f4fc8 | ||
|
|
5aba2854b0 | ||
|
|
ea32ad6e0a | ||
|
|
ee0e612c04 | ||
|
|
e565ce748a | ||
|
|
7024941663 | ||
|
|
817a0165b5 | ||
|
|
efcd038f40 | ||
|
|
375d99b8fc | ||
|
|
3a206eb76f | ||
|
|
4449838282 | ||
|
|
58d740f77a | ||
|
|
f0488d9750 | ||
|
|
f1b9ae6f71 | ||
|
|
db5de3b854 | ||
|
|
7a3d39b8f1 | ||
|
|
7a5d6325c0 | ||
|
|
574b954866 | ||
|
|
a811f20f65 | ||
|
|
0c9c263be6 | ||
|
|
6571c04bfe | ||
|
|
e48acbb8a2 | ||
|
|
f33496ef68 | ||
|
|
cd3176b565 | ||
|
|
7595613d7e | ||
|
|
b8d0245e7a | ||
|
|
54bd2ec800 | ||
|
|
b6c8566565 | ||
|
|
052c096014 | ||
|
|
81cbe3c522 | ||
|
|
09f7492bec | ||
|
|
6adfb2cf48 | ||
|
|
a2a56792a8 | ||
|
|
317daf4ed1 | ||
|
|
eb0d9514b5 | ||
|
|
d324b1bce5 | ||
|
|
d1c7385146 | ||
|
|
48a4935fc7 | ||
|
|
7e917b91a5 | ||
|
|
45f8b8ffb0 | ||
|
|
031a36242b | ||
|
|
8ad26ad136 |
@@ -1,22 +1,26 @@
|
|||||||
image: rust:latest
|
image: rust:latest
|
||||||
|
|
||||||
|
# Use shallow clone to reduce checkout size
|
||||||
|
variables:
|
||||||
|
GIT_DEPTH: "1"
|
||||||
|
# Put cargo home and target under project dir so we can clean them easily
|
||||||
|
CARGO_HOME: "$CI_PROJECT_DIR/.cargo"
|
||||||
|
CARGO_TARGET_DIR: "$CI_PROJECT_DIR/ci-target"
|
||||||
|
GIT_SUBMODULE_STRATEGY: normal
|
||||||
|
|
||||||
|
# Cache only cargo registries/git metadata to speed dependency fetches.
|
||||||
|
# Avoid caching compiled `target` artifacts which are large and easily fill disk.
|
||||||
.rust_cache: &rust_cache
|
.rust_cache: &rust_cache
|
||||||
cache:
|
cache:
|
||||||
# key: $CI_COMMIT_REF_SLUG
|
key: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
|
||||||
paths:
|
paths:
|
||||||
# Don't include `incremental` to save space
|
- .cargo/registry
|
||||||
# Debug
|
- .cargo/git
|
||||||
- target/debug/build/
|
|
||||||
- target/debug/deps/
|
|
||||||
- target/debug/.fingerprint/
|
|
||||||
- target/debug/.cargo-lock
|
|
||||||
# Release
|
|
||||||
- target/release/build/
|
|
||||||
- target/release/deps/
|
|
||||||
- target/release/.fingerprint/
|
|
||||||
- target/release/.cargo-lock
|
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
|
- df -h
|
||||||
|
- echo "Cleaning stale targets to free space if present"
|
||||||
|
- rm -rf "$CI_PROJECT_DIR/target" "$CI_PROJECT_DIR/ci-target" || true
|
||||||
- apt-get update -qq && apt-get install -y -qq libudev-dev libgtk-3-dev grep llvm clang libclang-dev libsdl2-dev libsdl2-gfx-dev
|
- apt-get update -qq && apt-get install -y -qq libudev-dev libgtk-3-dev grep llvm clang libclang-dev libsdl2-dev libsdl2-gfx-dev
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
@@ -33,6 +37,9 @@ format:
|
|||||||
script:
|
script:
|
||||||
- rustup component add rustfmt || true
|
- rustup component add rustfmt || true
|
||||||
- cargo fmt --check
|
- cargo fmt --check
|
||||||
|
after_script:
|
||||||
|
- du -sh "$CI_PROJECT_DIR/ci-target" || true
|
||||||
|
- rm -rf "$CI_PROJECT_DIR/ci-target" || true
|
||||||
|
|
||||||
check:
|
check:
|
||||||
except:
|
except:
|
||||||
@@ -44,6 +51,8 @@ check:
|
|||||||
# deny currently catches too much
|
# deny currently catches too much
|
||||||
#- cargo install cargo-deny && cargo deny
|
#- cargo install cargo-deny && cargo deny
|
||||||
- cargo install cargo-cranky && cargo cranky
|
- cargo install cargo-cranky && cargo cranky
|
||||||
|
after_script:
|
||||||
|
- rm -rf "$CI_PROJECT_DIR/ci-target" || true
|
||||||
|
|
||||||
test:
|
test:
|
||||||
except:
|
except:
|
||||||
@@ -52,6 +61,8 @@ test:
|
|||||||
script:
|
script:
|
||||||
- mkdir -p .git/hooks > /dev/null
|
- mkdir -p .git/hooks > /dev/null
|
||||||
- cargo test --locked --all
|
- cargo test --locked --all
|
||||||
|
after_script:
|
||||||
|
- rm -rf "$CI_PROJECT_DIR/ci-target" || true
|
||||||
|
|
||||||
release:
|
release:
|
||||||
only:
|
only:
|
||||||
@@ -59,11 +70,15 @@ release:
|
|||||||
<<: *rust_cache
|
<<: *rust_cache
|
||||||
script:
|
script:
|
||||||
- cargo install cargo-vendor-filterer
|
- cargo install cargo-vendor-filterer
|
||||||
|
- cargo fetch
|
||||||
- make FROZEN=1 && make vendor
|
- make FROZEN=1 && make vendor
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- vendor_asusctl*.tar.xz
|
- vendor_asusctl*.tar.xz
|
||||||
- cargo-config
|
- cargo-config
|
||||||
|
expire_in: 1 week
|
||||||
|
after_script:
|
||||||
|
- rm -rf vendor vendor_asusctl*.tar.xz "$CI_PROJECT_DIR/ci-target" || true
|
||||||
|
|
||||||
pages:
|
pages:
|
||||||
stage: deploy
|
stage: deploy
|
||||||
@@ -74,11 +89,11 @@ pages:
|
|||||||
- cargo doc --locked --document-private-items --no-deps --workspace
|
- cargo doc --locked --document-private-items --no-deps --workspace
|
||||||
- rm -rf public
|
- rm -rf public
|
||||||
- mkdir public
|
- mkdir public
|
||||||
- cp -R target/doc/* public
|
- cp -R ci-target/doc/* public
|
||||||
- cp extra/index.html public
|
- cp extra/index.html public
|
||||||
artifacts:
|
artifacts:
|
||||||
paths:
|
paths:
|
||||||
- public
|
- public
|
||||||
|
expire_in: 1 week
|
||||||
variables:
|
after_script:
|
||||||
GIT_SUBMODULE_STRATEGY: normal
|
- rm -rf "$CI_PROJECT_DIR/ci-target" || true
|
||||||
|
|||||||
32
CHANGELOG.md
32
CHANGELOG.md
@@ -2,6 +2,38 @@
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Added support for TUF keyboard powerstate control
|
||||||
|
|
||||||
|
## [6.2.0]
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Added aura support for FX607V: thanks @jomp16
|
||||||
|
- Added testing support for G835LW
|
||||||
|
- Added support for GU605C models slash lighting: thanks @Otters
|
||||||
|
- Restore fedora: thanks @ali205412
|
||||||
|
- Add support to G614F models slash lighting
|
||||||
|
|
||||||
|
## [6.1.22]
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Allow configuration of nv_tgp
|
||||||
|
- Treat dGPU attributes as power profiles
|
||||||
|
- Add EXPERTBOOK DMI match to ensure the service is loaded
|
||||||
|
- Support G815L thanks to @solost !
|
||||||
|
|
||||||
|
## [6.1.21]
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Kill Fedora: screw your cursed cargo bullshit
|
||||||
|
- Restore CI building
|
||||||
|
|
||||||
|
## [6.1.20]
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Addded support for G635L: thanks @luca_pisl !
|
||||||
|
- Suppress verbose output in applications too, not just daemon
|
||||||
|
|
||||||
## [6.1.18]
|
## [6.1.18]
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|||||||
813
Cargo.lock
generated
813
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
|||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "6.1.18"
|
version = "6.2.0"
|
||||||
rust-version = "1.82"
|
rust-version = "1.82"
|
||||||
license = "MPL-2.0"
|
license = "MPL-2.0"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
@@ -57,12 +57,12 @@ glam = { version = "^0.22", features = ["serde"] }
|
|||||||
gumdrop = "^0.8"
|
gumdrop = "^0.8"
|
||||||
udev = { version = "^0.8", features = ["mio"] }
|
udev = { version = "^0.8", features = ["mio"] }
|
||||||
rusb = "^0.9"
|
rusb = "^0.9"
|
||||||
inotify = "^0.10.0"
|
inotify = "^0.10"
|
||||||
|
|
||||||
png_pong = "^0.8"
|
png_pong = "^0.8"
|
||||||
pix = "^0.13"
|
pix = "^0.13"
|
||||||
tinybmp = "^0.4.0"
|
tinybmp = "^0.4"
|
||||||
gif = "^0.12.0"
|
gif = "^0.12"
|
||||||
|
|
||||||
versions = "6.2"
|
versions = "6.2"
|
||||||
|
|
||||||
|
|||||||
2
Makefile
2
Makefile
@@ -158,6 +158,8 @@ vendor:
|
|||||||
mv .cargo/config ./cargo-config
|
mv .cargo/config ./cargo-config
|
||||||
rm -rf .cargo
|
rm -rf .cargo
|
||||||
rm -rf vendor
|
rm -rf vendor
|
||||||
|
# Ensure cargo-vendor-filterer is installed (CI installs it already)
|
||||||
|
command -v cargo-vendor-filterer >/dev/null 2>&1 || cargo install --locked cargo-vendor-filterer
|
||||||
cargo vendor-filterer --all-features --platform x86_64-unknown-linux-gnu vendor
|
cargo vendor-filterer --all-features --platform x86_64-unknown-linux-gnu vendor
|
||||||
tar pcfJ vendor_asusctl_$(VERSION).tar.xz vendor
|
tar pcfJ vendor_asusctl_$(VERSION).tar.xz vendor
|
||||||
rm -rf vendor
|
rm -rf vendor
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ use aura_cli::{LedPowerCommand1, LedPowerCommand2};
|
|||||||
use dmi_id::DMIID;
|
use dmi_id::DMIID;
|
||||||
use fan_curve_cli::FanCurveCommand;
|
use fan_curve_cli::FanCurveCommand;
|
||||||
use gumdrop::{Opt, Options};
|
use gumdrop::{Opt, Options};
|
||||||
use log::{error, info};
|
use log::{error, info, LevelFilter};
|
||||||
use rog_anime::usb::get_anime_type;
|
use rog_anime::usb::get_anime_type;
|
||||||
use rog_anime::{AnimTime, AnimeDataBuffer, AnimeDiagonal, AnimeGif, AnimeImage, AnimeType, Vec2};
|
use rog_anime::{AnimTime, AnimeDataBuffer, AnimeDiagonal, AnimeGif, AnimeImage, AnimeType, Vec2};
|
||||||
use rog_aura::keyboard::{AuraPowerState, LaptopAuraPower};
|
use rog_aura::keyboard::{AuraPowerState, LaptopAuraPower};
|
||||||
@@ -44,12 +44,16 @@ mod scsi_cli;
|
|||||||
mod slash_cli;
|
mod slash_cli;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
// Ensure tracing spans are quiet by default unless user overrides
|
||||||
|
if std::env::var_os("RUST_LOG").is_none() {
|
||||||
|
std::env::set_var("RUST_LOG", "warn,tracing=error,zbus=error");
|
||||||
|
}
|
||||||
let mut logger = env_logger::Builder::new();
|
let mut logger = env_logger::Builder::new();
|
||||||
logger
|
logger
|
||||||
.parse_default_env()
|
.parse_default_env()
|
||||||
.target(env_logger::Target::Stdout)
|
.filter_level(LevelFilter::Info)
|
||||||
|
.target(env_logger::Target::Stderr)
|
||||||
.format_timestamp(None)
|
.format_timestamp(None)
|
||||||
.filter_level(log::LevelFilter::Debug)
|
|
||||||
.init();
|
.init();
|
||||||
|
|
||||||
let self_version = env!("CARGO_PKG_VERSION");
|
let self_version = env!("CARGO_PKG_VERSION");
|
||||||
|
|||||||
@@ -170,7 +170,9 @@ impl crate::Reloadable for AsusArmouryAttribute {
|
|||||||
info!("Reloading {}", self.attr.name());
|
info!("Reloading {}", self.attr.name());
|
||||||
let name: FirmwareAttribute = self.attr.name().into();
|
let name: FirmwareAttribute = self.attr.name().into();
|
||||||
|
|
||||||
if name.is_ppt() {
|
// Treat dGPU attributes the same as PPT attributes for power-profile
|
||||||
|
// behaviour so they follow AC/DC tuning groups.
|
||||||
|
if name.is_ppt() || name.is_dgpu() {
|
||||||
let profile: PlatformProfile = self.platform.get_platform_profile()?.into();
|
let profile: PlatformProfile = self.platform.get_platform_profile()?.into();
|
||||||
let power_plugged = self
|
let power_plugged = self
|
||||||
.power
|
.power
|
||||||
@@ -277,7 +279,7 @@ impl AsusArmouryAttribute {
|
|||||||
|
|
||||||
async fn restore_default(&self) -> fdo::Result<()> {
|
async fn restore_default(&self) -> fdo::Result<()> {
|
||||||
self.attr.restore_default()?;
|
self.attr.restore_default()?;
|
||||||
if self.name().is_ppt() {
|
if self.name().is_ppt() || self.name().is_dgpu() {
|
||||||
let profile: PlatformProfile = self.platform.get_platform_profile()?.into();
|
let profile: PlatformProfile = self.platform.get_platform_profile()?.into();
|
||||||
let power_plugged = self
|
let power_plugged = self
|
||||||
.power
|
.power
|
||||||
@@ -336,7 +338,7 @@ impl AsusArmouryAttribute {
|
|||||||
|
|
||||||
#[zbus(property)]
|
#[zbus(property)]
|
||||||
async fn current_value(&self) -> fdo::Result<i32> {
|
async fn current_value(&self) -> fdo::Result<i32> {
|
||||||
if self.name().is_ppt() {
|
if self.name().is_ppt() || self.name().is_dgpu() {
|
||||||
let profile: PlatformProfile = self.platform.get_platform_profile()?.into();
|
let profile: PlatformProfile = self.platform.get_platform_profile()?.into();
|
||||||
let power_plugged = self
|
let power_plugged = self
|
||||||
.power
|
.power
|
||||||
@@ -369,86 +371,9 @@ impl AsusArmouryAttribute {
|
|||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn stored_value_for_power(&self, on_ac: bool) -> fdo::Result<i32> {
|
|
||||||
if !self.name().is_ppt() {
|
|
||||||
return Err(fdo::Error::NotSupported(
|
|
||||||
"Stored values are only available for PPT attributes".to_string(),
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
let profile: PlatformProfile = self.platform.get_platform_profile()?.into();
|
|
||||||
let config = self.config.lock().await;
|
|
||||||
if let Some(tuning) = config.select_tunings_ref(on_ac, profile) {
|
|
||||||
if let Some(tune) = tuning.group.get(&self.name()) {
|
|
||||||
return Ok(*tune);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if let AttrValue::Integer(i) = self.attr.default_value() {
|
|
||||||
return Ok(*i);
|
|
||||||
}
|
|
||||||
Err(fdo::Error::Failed(
|
|
||||||
"Could not read stored value".to_string(),
|
|
||||||
))
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn set_value_for_power(&mut self, on_ac: bool, value: i32) -> fdo::Result<()> {
|
|
||||||
if !self.name().is_ppt() {
|
|
||||||
return Err(fdo::Error::NotSupported(
|
|
||||||
"Setting stored values is only supported for PPT attributes".to_string(),
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
let profile: PlatformProfile = self.platform.get_platform_profile()?.into();
|
|
||||||
let apply_now;
|
|
||||||
|
|
||||||
{
|
|
||||||
let mut config = self.config.lock().await;
|
|
||||||
let tuning = config.select_tunings(on_ac, profile);
|
|
||||||
|
|
||||||
if let Some(tune) = tuning.group.get_mut(&self.name()) {
|
|
||||||
*tune = value;
|
|
||||||
} else {
|
|
||||||
tuning.group.insert(self.name(), value);
|
|
||||||
debug!(
|
|
||||||
"Store {} value for {} power = {}",
|
|
||||||
self.attr.name(),
|
|
||||||
if on_ac { "AC" } else { "DC" },
|
|
||||||
value
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
apply_now = tuning.enabled;
|
|
||||||
config.write();
|
|
||||||
}
|
|
||||||
|
|
||||||
if apply_now {
|
|
||||||
let power_plugged = self
|
|
||||||
.power
|
|
||||||
.get_online()
|
|
||||||
.map_err(|e| {
|
|
||||||
error!("Could not get power status: {e:?}");
|
|
||||||
e
|
|
||||||
})
|
|
||||||
.unwrap_or_default()
|
|
||||||
!= 0;
|
|
||||||
|
|
||||||
if power_plugged == on_ac {
|
|
||||||
self.attr
|
|
||||||
.set_current_value(&AttrValue::Integer(value))
|
|
||||||
.map_err(|e| {
|
|
||||||
error!("Could not set value: {e:?}");
|
|
||||||
e
|
|
||||||
})?;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
#[zbus(property)]
|
#[zbus(property)]
|
||||||
async fn set_current_value(&mut self, value: i32) -> fdo::Result<()> {
|
async fn set_current_value(&mut self, value: i32) -> fdo::Result<()> {
|
||||||
if self.name().is_ppt() {
|
if self.name().is_ppt() || self.name().is_dgpu() {
|
||||||
let profile: PlatformProfile = self.platform.get_platform_profile()?.into();
|
let profile: PlatformProfile = self.platform.get_platform_profile()?.into();
|
||||||
let power_plugged = self
|
let power_plugged = self
|
||||||
.power
|
.power
|
||||||
@@ -538,8 +463,7 @@ pub async fn start_attributes_zbus(
|
|||||||
"Skipping attribute '{}' due to reload error: {e:?}",
|
"Skipping attribute '{}' due to reload error: {e:?}",
|
||||||
attr.attr.name()
|
attr.attr.name()
|
||||||
);
|
);
|
||||||
// continue with others
|
break;
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let attr_name = attr.attribute_name();
|
let attr_name = attr.attribute_name();
|
||||||
@@ -577,7 +501,7 @@ pub async fn set_config_or_default(
|
|||||||
) {
|
) {
|
||||||
for attr in attrs.attributes().iter() {
|
for attr in attrs.attributes().iter() {
|
||||||
let name: FirmwareAttribute = attr.name().into();
|
let name: FirmwareAttribute = attr.name().into();
|
||||||
if name.is_ppt() {
|
if name.is_ppt() || name.is_dgpu() {
|
||||||
let tuning = config.select_tunings(power_plugged, profile);
|
let tuning = config.select_tunings(power_plugged, profile);
|
||||||
if !tuning.enabled {
|
if !tuning.enabled {
|
||||||
debug!("Tuning group is not enabled, skipping");
|
debug!("Tuning group is not enabled, skipping");
|
||||||
|
|||||||
@@ -71,7 +71,13 @@ impl AuraZbus {
|
|||||||
#[zbus(property)]
|
#[zbus(property)]
|
||||||
async fn set_brightness(&mut self, brightness: LedBrightness) -> Result<(), ZbErr> {
|
async fn set_brightness(&mut self, brightness: LedBrightness) -> Result<(), ZbErr> {
|
||||||
if let Some(bl) = self.0.backlight.as_ref() {
|
if let Some(bl) = self.0.backlight.as_ref() {
|
||||||
return Ok(bl.lock().await.set_brightness(brightness.into())?);
|
let res = bl.lock().await.set_brightness(brightness.into());
|
||||||
|
if res.is_ok() {
|
||||||
|
let mut config = self.0.config.lock().await;
|
||||||
|
config.brightness = brightness;
|
||||||
|
config.write();
|
||||||
|
}
|
||||||
|
return Ok(res?);
|
||||||
}
|
}
|
||||||
Err(ZbErr::Failed("No sysfs brightness control".to_string()))
|
Err(ZbErr::Failed("No sysfs brightness control".to_string()))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -132,7 +132,7 @@ impl DeviceManager {
|
|||||||
if let Some(usb_id) = usb_device.attribute_value("idProduct") {
|
if let Some(usb_id) = usb_device.attribute_value("idProduct") {
|
||||||
if let Some(vendor_id) = usb_device.attribute_value("idVendor") {
|
if let Some(vendor_id) = usb_device.attribute_value("idVendor") {
|
||||||
if vendor_id != "0b05" {
|
if vendor_id != "0b05" {
|
||||||
debug!("Not ASUS vendor ID");
|
debug!("Not ASUS vendor ID: {}", vendor_id.to_string_lossy());
|
||||||
return Ok(devices);
|
return Ok(devices);
|
||||||
}
|
}
|
||||||
// Almost all devices are identified by the productId.
|
// Almost all devices are identified by the productId.
|
||||||
|
|||||||
@@ -8,6 +8,12 @@ use serde::{Deserialize, Serialize};
|
|||||||
|
|
||||||
const CONFIG_FILE: &str = "asusd.ron";
|
const CONFIG_FILE: &str = "asusd.ron";
|
||||||
|
|
||||||
|
/// Default value for base_charge_control_end_threshold when not present in config.
|
||||||
|
/// Returns 0 so restore_charge_limit() skips restoration for upgraded configs.
|
||||||
|
fn default_base_charge_limit() -> u8 {
|
||||||
|
0
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Default, Clone, Deserialize, Serialize, PartialEq)]
|
#[derive(Default, Clone, Deserialize, Serialize, PartialEq)]
|
||||||
pub struct Tuning {
|
pub struct Tuning {
|
||||||
pub enabled: bool,
|
pub enabled: bool,
|
||||||
@@ -19,8 +25,8 @@ type Tunings = HashMap<PlatformProfile, Tuning>;
|
|||||||
pub struct Config {
|
pub struct Config {
|
||||||
// The current charge limit applied
|
// The current charge limit applied
|
||||||
pub charge_control_end_threshold: u8,
|
pub charge_control_end_threshold: u8,
|
||||||
/// Save charge limit for restoring
|
/// Save charge limit for restoring after one-shot full charge
|
||||||
#[serde(skip)]
|
#[serde(default = "default_base_charge_limit")]
|
||||||
pub base_charge_control_end_threshold: u8,
|
pub base_charge_control_end_threshold: u8,
|
||||||
pub disable_nvidia_powerd_on_battery: bool,
|
pub disable_nvidia_powerd_on_battery: bool,
|
||||||
/// An optional command/script to run when power is changed to AC
|
/// An optional command/script to run when power is changed to AC
|
||||||
@@ -86,6 +92,9 @@ impl Default for Config {
|
|||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
charge_control_end_threshold: 100,
|
charge_control_end_threshold: 100,
|
||||||
|
// NOTE: This is intentionally 100 (not 0 like the serde default).
|
||||||
|
// New installs get 100 (no limit). Upgraded configs missing this
|
||||||
|
// field get 0 via serde, which skips restore_charge_limit().
|
||||||
base_charge_control_end_threshold: 100,
|
base_charge_control_end_threshold: 100,
|
||||||
disable_nvidia_powerd_on_battery: true,
|
disable_nvidia_powerd_on_battery: true,
|
||||||
ac_command: Default::default(),
|
ac_command: Default::default(),
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ ENV{DMI_FAMILY}=="*Zenbook*", GOTO="asusd_start"
|
|||||||
ENV{DMI_FAMILY}=="*ProArt*", GOTO="asusd_start"
|
ENV{DMI_FAMILY}=="*ProArt*", GOTO="asusd_start"
|
||||||
ENV{DMI_FAMILY}=="*TX Air*", GOTO="asusd_start"
|
ENV{DMI_FAMILY}=="*TX Air*", GOTO="asusd_start"
|
||||||
ENV{DMI_FAMILY}=="*TX Gaming*", GOTO="asusd_start"
|
ENV{DMI_FAMILY}=="*TX Gaming*", GOTO="asusd_start"
|
||||||
|
ENV{DMI_FAMILY}=="*EXPERTBOOK*", GOTO="asusd_start"
|
||||||
# No match so
|
# No match so
|
||||||
GOTO="asusd_end"
|
GOTO="asusd_end"
|
||||||
|
|
||||||
|
|||||||
87
distro-packaging/asusctl.spec
Executable file → Normal file
87
distro-packaging/asusctl.spec
Executable file → Normal file
@@ -20,9 +20,9 @@
|
|||||||
%global debug_package %{nil}
|
%global debug_package %{nil}
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%define version 6.1.18
|
%define version 6.2.0
|
||||||
%define specrelease %{?dist}
|
%define specrelease %{?dist}
|
||||||
%define pkg_release 9%{specrelease}
|
%define pkg_release 1%{specrelease}
|
||||||
|
|
||||||
# Use hardening ldflags.
|
# Use hardening ldflags.
|
||||||
%global rustflags -Clink-arg=-Wl,-z,relro,-z,now
|
%global rustflags -Clink-arg=-Wl,-z,relro,-z,now
|
||||||
@@ -31,7 +31,6 @@ Version: %{version}
|
|||||||
Release: %{pkg_release}
|
Release: %{pkg_release}
|
||||||
Summary: Control fan speeds, LEDs, graphics modes, and charge levels for ASUS notebooks
|
Summary: Control fan speeds, LEDs, graphics modes, and charge levels for ASUS notebooks
|
||||||
License: MPLv2
|
License: MPLv2
|
||||||
Requires: power-profiles-daemon
|
|
||||||
|
|
||||||
Group: System Environment/Kernel
|
Group: System Environment/Kernel
|
||||||
|
|
||||||
@@ -56,6 +55,7 @@ BuildRequires: pkgconfig(libseat)
|
|||||||
BuildRequires: pkgconfig(libudev)
|
BuildRequires: pkgconfig(libudev)
|
||||||
BuildRequires: pkgconfig(xkbcommon)
|
BuildRequires: pkgconfig(xkbcommon)
|
||||||
BuildRequires: pkgconfig(libzstd)
|
BuildRequires: pkgconfig(libzstd)
|
||||||
|
BuildRequires: pkgconfig(fontconfig)
|
||||||
BuildRequires: desktop-file-utils
|
BuildRequires: desktop-file-utils
|
||||||
|
|
||||||
%description
|
%description
|
||||||
@@ -68,6 +68,7 @@ asus-nb-ctrl enables third-party apps to use the above with dbus methods.
|
|||||||
|
|
||||||
%package rog-gui
|
%package rog-gui
|
||||||
Summary: An experimental GUI for %{name}
|
Summary: An experimental GUI for %{name}
|
||||||
|
Requires: %{name} = %{version}-%{release}
|
||||||
|
|
||||||
%description rog-gui
|
%description rog-gui
|
||||||
A one-stop-shop GUI tool for asusd/asusctl. It aims to provide most controls,
|
A one-stop-shop GUI tool for asusd/asusctl. It aims to provide most controls,
|
||||||
@@ -75,11 +76,6 @@ a notification service, and ability to run in the background.
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%autosetup
|
%autosetup
|
||||||
%if %{defined fedora}
|
|
||||||
%cargo_prep
|
|
||||||
sed -i 's|offline = true|offline = false|' .cargo/config.toml
|
|
||||||
sed -i 's|source.crates-io|source.ignore_this|' .cargo/config.toml
|
|
||||||
%else
|
|
||||||
mkdir -p .cargo
|
mkdir -p .cargo
|
||||||
cat > .cargo/config.toml << 'EOF'
|
cat > .cargo/config.toml << 'EOF'
|
||||||
[term]
|
[term]
|
||||||
@@ -87,28 +83,78 @@ verbose = true
|
|||||||
[net]
|
[net]
|
||||||
offline = false
|
offline = false
|
||||||
EOF
|
EOF
|
||||||
%endif
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
export RUSTFLAGS="%{rustflags}"
|
export RUSTFLAGS="%{rustflags}"
|
||||||
%if %{defined fedora}
|
%if %{defined fedora}
|
||||||
%# Use an explicit cargo invocation for Fedora to avoid the macro adding `--locked`.
|
/usr/bin/cargo build --release --locked
|
||||||
%# `--locked` breaks Fedora builds because the lockfile may not be appropriate for the distro buildroot.
|
|
||||||
/usr/bin/cargo auditable build --release
|
|
||||||
%else
|
%else
|
||||||
/usr/bin/cargo auditable build --release
|
/usr/bin/cargo auditable build --release --locked
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%install
|
%install
|
||||||
export RUSTFLAGS="%{rustflags}"
|
export RUSTFLAGS="%{rustflags}"
|
||||||
mkdir -p "%{buildroot}/%{_bindir}" "%{buildroot}%{_docdir}"
|
|
||||||
%make_install
|
|
||||||
|
|
||||||
install -D -m 0644 README.md %{buildroot}/%{_docdir}/%{name}/README.md
|
%define _target_dir target/release
|
||||||
install -D -m 0644 rog-anime/README.md %{buildroot}/%{_docdir}/%{name}/README-anime.md
|
|
||||||
install -D -m 0644 rog-anime/data/diagonal-template.png %{buildroot}/%{_docdir}/%{name}/diagonal-template.png
|
|
||||||
|
|
||||||
desktop-file-validate %{buildroot}/%{_datadir}/applications/rog-control-center.desktop
|
# Install binaries
|
||||||
|
install -D -m 0755 %{_target_dir}/asusd %{buildroot}%{_bindir}/asusd
|
||||||
|
install -D -m 0755 %{_target_dir}/asusd-user %{buildroot}%{_bindir}/asusd-user
|
||||||
|
install -D -m 0755 %{_target_dir}/asusctl %{buildroot}%{_bindir}/asusctl
|
||||||
|
install -D -m 0755 %{_target_dir}/rog-control-center %{buildroot}%{_bindir}/rog-control-center
|
||||||
|
|
||||||
|
# Install systemd units
|
||||||
|
install -D -m 0644 data/asusd.service %{buildroot}%{_unitdir}/asusd.service
|
||||||
|
install -D -m 0644 data/asusd-user.service %{buildroot}%{_userunitdir}/asusd-user.service
|
||||||
|
|
||||||
|
# Install udev rules
|
||||||
|
install -D -m 0644 data/asusd.rules %{buildroot}%{_udevrulesdir}/99-asusd.rules
|
||||||
|
|
||||||
|
# Install dbus config
|
||||||
|
install -D -m 0644 data/asusd.conf %{buildroot}%{_datadir}/dbus-1/system.d/asusd.conf
|
||||||
|
|
||||||
|
# Install asusd data
|
||||||
|
install -D -m 0644 rog-aura/data/aura_support.ron %{buildroot}%{_datadir}/asusd/aura_support.ron
|
||||||
|
cp -r rog-anime/data/anime %{buildroot}%{_datadir}/asusd/
|
||||||
|
|
||||||
|
# Install rog-gui data
|
||||||
|
install -D -m 0644 rog-control-center/data/rog-control-center.desktop %{buildroot}%{_datadir}/applications/rog-control-center.desktop
|
||||||
|
install -D -m 0644 rog-control-center/data/rog-control-center.png %{buildroot}%{_datadir}/icons/hicolor/512x512/apps/rog-control-center.png
|
||||||
|
mkdir -p %{buildroot}%{_datadir}/rog-gui/layouts
|
||||||
|
cp -r rog-aura/data/layouts/*.ron %{buildroot}%{_datadir}/rog-gui/layouts/
|
||||||
|
|
||||||
|
# Install icons
|
||||||
|
install -D -m 0644 data/icons/asus_notif_yellow.png %{buildroot}%{_datadir}/icons/hicolor/512x512/apps/asus_notif_yellow.png
|
||||||
|
install -D -m 0644 data/icons/asus_notif_green.png %{buildroot}%{_datadir}/icons/hicolor/512x512/apps/asus_notif_green.png
|
||||||
|
install -D -m 0644 data/icons/asus_notif_blue.png %{buildroot}%{_datadir}/icons/hicolor/512x512/apps/asus_notif_blue.png
|
||||||
|
install -D -m 0644 data/icons/asus_notif_red.png %{buildroot}%{_datadir}/icons/hicolor/512x512/apps/asus_notif_red.png
|
||||||
|
install -D -m 0644 data/icons/asus_notif_orange.png %{buildroot}%{_datadir}/icons/hicolor/512x512/apps/asus_notif_orange.png
|
||||||
|
install -D -m 0644 data/icons/asus_notif_white.png %{buildroot}%{_datadir}/icons/hicolor/512x512/apps/asus_notif_white.png
|
||||||
|
install -D -m 0644 data/icons/scalable/gpu-compute.svg %{buildroot}%{_datadir}/icons/hicolor/scalable/status/gpu-compute.svg
|
||||||
|
install -D -m 0644 data/icons/scalable/gpu-hybrid.svg %{buildroot}%{_datadir}/icons/hicolor/scalable/status/gpu-hybrid.svg
|
||||||
|
install -D -m 0644 data/icons/scalable/gpu-integrated.svg %{buildroot}%{_datadir}/icons/hicolor/scalable/status/gpu-integrated.svg
|
||||||
|
install -D -m 0644 data/icons/scalable/gpu-nvidia.svg %{buildroot}%{_datadir}/icons/hicolor/scalable/status/gpu-nvidia.svg
|
||||||
|
install -D -m 0644 data/icons/scalable/gpu-vfio.svg %{buildroot}%{_datadir}/icons/hicolor/scalable/status/gpu-vfio.svg
|
||||||
|
install -D -m 0644 data/icons/scalable/notification-reboot.svg %{buildroot}%{_datadir}/icons/hicolor/scalable/status/notification-reboot.svg
|
||||||
|
|
||||||
|
# Install docs
|
||||||
|
install -D -m 0644 README.md %{buildroot}%{_docdir}/%{name}/README.md
|
||||||
|
install -D -m 0644 rog-anime/README.md %{buildroot}%{_docdir}/%{name}/README-anime.md
|
||||||
|
install -D -m 0644 rog-anime/data/diagonal-template.png %{buildroot}%{_docdir}/%{name}/diagonal-template.png
|
||||||
|
|
||||||
|
# Install LICENSE to asusctl datadir
|
||||||
|
install -D -m 0644 LICENSE %{buildroot}%{_datadir}/asusctl/LICENSE
|
||||||
|
|
||||||
|
desktop-file-validate %{buildroot}%{_datadir}/applications/rog-control-center.desktop
|
||||||
|
|
||||||
|
%post
|
||||||
|
%systemd_post asusd.service
|
||||||
|
|
||||||
|
%preun
|
||||||
|
%systemd_preun asusd.service
|
||||||
|
|
||||||
|
%postun
|
||||||
|
%systemd_postun_with_restart asusd.service
|
||||||
|
|
||||||
%files
|
%files
|
||||||
%license LICENSE
|
%license LICENSE
|
||||||
@@ -118,8 +164,6 @@ desktop-file-validate %{buildroot}/%{_datadir}/applications/rog-control-center.d
|
|||||||
%{_unitdir}/asusd.service
|
%{_unitdir}/asusd.service
|
||||||
%{_userunitdir}/asusd-user.service
|
%{_userunitdir}/asusd-user.service
|
||||||
%{_udevrulesdir}/99-asusd.rules
|
%{_udevrulesdir}/99-asusd.rules
|
||||||
#%dir %{_sysconfdir}/asusd/
|
|
||||||
%{_datadir}/asusd/aura_support.ron
|
|
||||||
%{_datadir}/dbus-1/system.d/asusd.conf
|
%{_datadir}/dbus-1/system.d/asusd.conf
|
||||||
%{_datadir}/icons/hicolor/512x512/apps/asus_notif_yellow.png
|
%{_datadir}/icons/hicolor/512x512/apps/asus_notif_yellow.png
|
||||||
%{_datadir}/icons/hicolor/512x512/apps/asus_notif_green.png
|
%{_datadir}/icons/hicolor/512x512/apps/asus_notif_green.png
|
||||||
@@ -134,6 +178,7 @@ desktop-file-validate %{buildroot}/%{_datadir}/applications/rog-control-center.d
|
|||||||
%{_datadir}/icons/hicolor/scalable/status/gpu-vfio.svg
|
%{_datadir}/icons/hicolor/scalable/status/gpu-vfio.svg
|
||||||
%{_datadir}/icons/hicolor/scalable/status/notification-reboot.svg
|
%{_datadir}/icons/hicolor/scalable/status/notification-reboot.svg
|
||||||
%{_docdir}/%{name}/
|
%{_docdir}/%{name}/
|
||||||
|
%{_datadir}/asusctl/
|
||||||
%{_datadir}/asusd/
|
%{_datadir}/asusd/
|
||||||
|
|
||||||
%files rog-gui
|
%files rog-gui
|
||||||
|
|||||||
@@ -63,6 +63,8 @@ pub enum AnimeType {
|
|||||||
GA401,
|
GA401,
|
||||||
GA402,
|
GA402,
|
||||||
GU604,
|
GU604,
|
||||||
|
G635L,
|
||||||
|
G835L,
|
||||||
#[default]
|
#[default]
|
||||||
Unsupported,
|
Unsupported,
|
||||||
}
|
}
|
||||||
@@ -71,12 +73,21 @@ impl FromStr for AnimeType {
|
|||||||
type Err = AnimeError;
|
type Err = AnimeError;
|
||||||
|
|
||||||
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
|
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
|
||||||
Ok(match s {
|
let dmi = s.to_uppercase();
|
||||||
"ga401" | "GA401" => Self::GA401,
|
|
||||||
"ga402" | "GA402" => Self::GA402,
|
if dmi.contains("GA401") {
|
||||||
"gu604" | "GU604" => Self::GU604,
|
return Ok(Self::GA401);
|
||||||
_ => Self::Unsupported,
|
} else if dmi.contains("GA402") {
|
||||||
})
|
return Ok(Self::GA402);
|
||||||
|
} else if dmi.contains("GU604") {
|
||||||
|
return Ok(Self::GU604);
|
||||||
|
} else if dmi.contains("G635L") {
|
||||||
|
return Ok(Self::G635L);
|
||||||
|
} else if dmi.contains("G835L") {
|
||||||
|
return Ok(Self::G835L);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(Self::Unsupported)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,6 +100,8 @@ impl AnimeType {
|
|||||||
AnimeType::GA402
|
AnimeType::GA402
|
||||||
} else if board_name.contains("GU604V") {
|
} else if board_name.contains("GU604V") {
|
||||||
AnimeType::GU604
|
AnimeType::GU604
|
||||||
|
} else if board_name.contains("G635L") || board_name.contains("G635L") {
|
||||||
|
AnimeType::G635L
|
||||||
} else {
|
} else {
|
||||||
AnimeType::Unsupported
|
AnimeType::Unsupported
|
||||||
}
|
}
|
||||||
@@ -98,6 +111,7 @@ impl AnimeType {
|
|||||||
pub fn width(&self) -> usize {
|
pub fn width(&self) -> usize {
|
||||||
match self {
|
match self {
|
||||||
AnimeType::GU604 => 70,
|
AnimeType::GU604 => 70,
|
||||||
|
AnimeType::G835L => 74,
|
||||||
_ => 74,
|
_ => 74,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -107,6 +121,7 @@ impl AnimeType {
|
|||||||
match self {
|
match self {
|
||||||
AnimeType::GA401 => 36,
|
AnimeType::GA401 => 36,
|
||||||
AnimeType::GU604 => 43,
|
AnimeType::GU604 => 43,
|
||||||
|
AnimeType::G835L => 39,
|
||||||
_ => 39,
|
_ => 39,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -116,6 +131,7 @@ impl AnimeType {
|
|||||||
match self {
|
match self {
|
||||||
AnimeType::GA401 => PANE_LEN * 2,
|
AnimeType::GA401 => PANE_LEN * 2,
|
||||||
AnimeType::GU604 => PANE_LEN * 3,
|
AnimeType::GU604 => PANE_LEN * 3,
|
||||||
|
AnimeType::G835L => PANE_LEN * 3,
|
||||||
_ => PANE_LEN * 3,
|
_ => PANE_LEN * 3,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -180,7 +196,13 @@ impl TryFrom<AnimeDataBuffer> for AnimePacketType {
|
|||||||
|
|
||||||
let mut buffers = match anime.anime {
|
let mut buffers = match anime.anime {
|
||||||
AnimeType::GA401 => vec![[0; 640]; 2],
|
AnimeType::GA401 => vec![[0; 640]; 2],
|
||||||
AnimeType::GA402 | AnimeType::GU604 | AnimeType::Unsupported => vec![[0; 640]; 3],
|
AnimeType::GA402
|
||||||
|
| AnimeType::GU604
|
||||||
|
| AnimeType::G635L
|
||||||
|
| AnimeType::G835L
|
||||||
|
| AnimeType::Unsupported => {
|
||||||
|
vec![[0; 640]; 3]
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
for (idx, chunk) in anime.data.as_slice().chunks(PANE_LEN).enumerate() {
|
for (idx, chunk) in anime.data.as_slice().chunks(PANE_LEN).enumerate() {
|
||||||
@@ -191,7 +213,11 @@ impl TryFrom<AnimeDataBuffer> for AnimePacketType {
|
|||||||
|
|
||||||
if matches!(
|
if matches!(
|
||||||
anime.anime,
|
anime.anime,
|
||||||
AnimeType::GA402 | AnimeType::GU604 | AnimeType::Unsupported
|
AnimeType::GA402
|
||||||
|
| AnimeType::GU604
|
||||||
|
| AnimeType::G635L
|
||||||
|
| AnimeType::G835L
|
||||||
|
| AnimeType::Unsupported
|
||||||
) {
|
) {
|
||||||
buffers[2][..7].copy_from_slice(&USB_PREFIX3);
|
buffers[2][..7].copy_from_slice(&USB_PREFIX3);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -243,7 +243,7 @@ impl From<AnimShutdown> for i32 {
|
|||||||
#[inline]
|
#[inline]
|
||||||
pub fn get_anime_type() -> AnimeType {
|
pub fn get_anime_type() -> AnimeType {
|
||||||
let dmi = DMIID::new().unwrap_or_default();
|
let dmi = DMIID::new().unwrap_or_default();
|
||||||
let board_name = dmi.board_name;
|
let board_name = dmi.board_name.to_uppercase();
|
||||||
|
|
||||||
if board_name.contains("GA401I") || board_name.contains("GA401Q") {
|
if board_name.contains("GA401I") || board_name.contains("GA401Q") {
|
||||||
AnimeType::GA401
|
AnimeType::GA401
|
||||||
@@ -251,6 +251,10 @@ pub fn get_anime_type() -> AnimeType {
|
|||||||
AnimeType::GA402
|
AnimeType::GA402
|
||||||
} else if board_name.contains("GU604V") {
|
} else if board_name.contains("GU604V") {
|
||||||
AnimeType::GU604
|
AnimeType::GU604
|
||||||
|
} else if board_name.contains("G635L") {
|
||||||
|
AnimeType::G635L
|
||||||
|
} else if board_name.contains("G835L") {
|
||||||
|
AnimeType::G835L
|
||||||
} else {
|
} else {
|
||||||
AnimeType::Unsupported
|
AnimeType::Unsupported
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,16 @@
|
|||||||
(
|
(
|
||||||
device_name: "FA617NS",
|
device_name: "FA617NS",
|
||||||
product_id: "",
|
product_id: "",
|
||||||
layout_name: "fx505d",
|
layout_name: "fa507",
|
||||||
|
basic_modes: [Static, Breathe, Pulse],
|
||||||
|
basic_zones: [],
|
||||||
|
advanced_type: r#None,
|
||||||
|
power_zones: [Keyboard],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
device_name: "FA617NT",
|
||||||
|
product_id: "",
|
||||||
|
layout_name: "fa507",
|
||||||
basic_modes: [Static, Breathe, Pulse],
|
basic_modes: [Static, Breathe, Pulse],
|
||||||
basic_zones: [],
|
basic_zones: [],
|
||||||
advanced_type: r#None,
|
advanced_type: r#None,
|
||||||
@@ -47,7 +56,16 @@
|
|||||||
(
|
(
|
||||||
device_name: "FA617XS",
|
device_name: "FA617XS",
|
||||||
product_id: "",
|
product_id: "",
|
||||||
layout_name: "fx505d",
|
layout_name: "fa507",
|
||||||
|
basic_modes: [Static, Breathe, Pulse],
|
||||||
|
basic_zones: [],
|
||||||
|
advanced_type: r#None,
|
||||||
|
power_zones: [Keyboard],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
device_name: "FA617XT",
|
||||||
|
product_id: "",
|
||||||
|
layout_name: "fa507",
|
||||||
basic_modes: [Static, Breathe, Pulse],
|
basic_modes: [Static, Breathe, Pulse],
|
||||||
basic_zones: [],
|
basic_zones: [],
|
||||||
advanced_type: r#None,
|
advanced_type: r#None,
|
||||||
@@ -107,6 +125,15 @@
|
|||||||
advanced_type: r#None,
|
advanced_type: r#None,
|
||||||
power_zones: [Keyboard],
|
power_zones: [Keyboard],
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
device_name: "FX607V",
|
||||||
|
product_id: "",
|
||||||
|
layout_name: "fa506i",
|
||||||
|
basic_modes: [Static, Breathe, RainbowCycle, Pulse],
|
||||||
|
basic_zones: [],
|
||||||
|
advanced_type: Zoned([SingleZone]),
|
||||||
|
power_zones: [Keyboard],
|
||||||
|
),
|
||||||
(
|
(
|
||||||
device_name: "FX617X",
|
device_name: "FX617X",
|
||||||
product_id: "",
|
product_id: "",
|
||||||
@@ -287,6 +314,15 @@
|
|||||||
advanced_type: r#None,
|
advanced_type: r#None,
|
||||||
power_zones: [Keyboard, Lightbar],
|
power_zones: [Keyboard, Lightbar],
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
device_name: "G614JU",
|
||||||
|
product_id: "",
|
||||||
|
layout_name: "g634j-per-key",
|
||||||
|
basic_modes: [Static, Breathe, RainbowCycle, RainbowWave, Star, Rain, Highlight, Laser, Ripple, Pulse, Comet, Flash],
|
||||||
|
basic_zones: [],
|
||||||
|
advanced_type: PerKey,
|
||||||
|
power_zones: [Keyboard, Lightbar, Logo],
|
||||||
|
),
|
||||||
(
|
(
|
||||||
device_name: "G614JZ",
|
device_name: "G614JZ",
|
||||||
product_id: "",
|
product_id: "",
|
||||||
@@ -305,6 +341,15 @@
|
|||||||
advanced_type: PerKey,
|
advanced_type: PerKey,
|
||||||
power_zones: [Keyboard, Lightbar, Logo, RearGlow],
|
power_zones: [Keyboard, Lightbar, Logo, RearGlow],
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
device_name: "G635L",
|
||||||
|
product_id: "",
|
||||||
|
layout_name: "g635l-per-key",
|
||||||
|
basic_modes: [Static, Breathe, RainbowCycle, RainbowWave, Star, Rain, Highlight, Laser, Ripple, Pulse, Comet, Flash],
|
||||||
|
basic_zones: [],
|
||||||
|
advanced_type: PerKey,
|
||||||
|
power_zones: [Keyboard, Lightbar, Logo],
|
||||||
|
),
|
||||||
(
|
(
|
||||||
device_name: "G712LI",
|
device_name: "G712LI",
|
||||||
product_id: "",
|
product_id: "",
|
||||||
@@ -503,6 +548,15 @@
|
|||||||
advanced_type: PerKey,
|
advanced_type: PerKey,
|
||||||
power_zones: [Keyboard, Lightbar],
|
power_zones: [Keyboard, Lightbar],
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
device_name: "G815L",
|
||||||
|
product_id: "",
|
||||||
|
layout_name: "g814ji-per-key",
|
||||||
|
basic_modes: [Static, Breathe, RainbowCycle, RainbowWave, Star, Rain, Highlight, Laser, Ripple, Pulse, Comet, Flash],
|
||||||
|
basic_zones: [],
|
||||||
|
advanced_type: PerKey,
|
||||||
|
power_zones: [Keyboard, Lightbar],
|
||||||
|
),
|
||||||
(
|
(
|
||||||
device_name: "G834J",
|
device_name: "G834J",
|
||||||
product_id: "",
|
product_id: "",
|
||||||
|
|||||||
375
rog-aura/data/layouts/g635l-per-key_US.ron
Normal file
375
rog-aura/data/layouts/g635l-per-key_US.ron
Normal file
@@ -0,0 +1,375 @@
|
|||||||
|
(
|
||||||
|
locale: "US",
|
||||||
|
key_shapes: {
|
||||||
|
"regular": Led(
|
||||||
|
width: 1.0,
|
||||||
|
height: 1.0,
|
||||||
|
pad_left: 0.1,
|
||||||
|
pad_right: 0.1,
|
||||||
|
pad_top: 0.1,
|
||||||
|
pad_bottom: 0.1,
|
||||||
|
),
|
||||||
|
"regular_spacing": Blank(
|
||||||
|
width: 1.2,
|
||||||
|
height: 0.0,
|
||||||
|
),
|
||||||
|
"rog_row": Led(
|
||||||
|
width: 1.0,
|
||||||
|
height: 0.7,
|
||||||
|
pad_left: 0.1,
|
||||||
|
pad_right: 0.1,
|
||||||
|
pad_top: 0.1,
|
||||||
|
pad_bottom: 0.6,
|
||||||
|
),
|
||||||
|
"rog_row_blocking": Blank(
|
||||||
|
width: 1.2,
|
||||||
|
height: 0.0,
|
||||||
|
),
|
||||||
|
"func_space": Blank(
|
||||||
|
width: 0.6,
|
||||||
|
height: 0.0,
|
||||||
|
),
|
||||||
|
"backspace": Led(
|
||||||
|
width: 2.2,
|
||||||
|
height: 1.0,
|
||||||
|
pad_left: 0.1,
|
||||||
|
pad_right: 0.1,
|
||||||
|
pad_top: 0.1,
|
||||||
|
pad_bottom: 0.1,
|
||||||
|
),
|
||||||
|
"tab": Led(
|
||||||
|
width: 1.6,
|
||||||
|
height: 1.0,
|
||||||
|
pad_left: 0.1,
|
||||||
|
pad_right: 0.1,
|
||||||
|
pad_top: 0.1,
|
||||||
|
pad_bottom: 0.1,
|
||||||
|
),
|
||||||
|
"backslash": Led(
|
||||||
|
width: 1.6,
|
||||||
|
height: 1.0,
|
||||||
|
pad_left: 0.1,
|
||||||
|
pad_right: 0.1,
|
||||||
|
pad_top: 0.1,
|
||||||
|
pad_bottom: 0.1,
|
||||||
|
),
|
||||||
|
"capsplonk": Led(
|
||||||
|
width: 2.0,
|
||||||
|
height: 1.0,
|
||||||
|
pad_left: 0.1,
|
||||||
|
pad_right: 0.1,
|
||||||
|
pad_top: 0.1,
|
||||||
|
pad_bottom: 0.1,
|
||||||
|
),
|
||||||
|
"return": Led(
|
||||||
|
width: 2.4,
|
||||||
|
height: 1.0,
|
||||||
|
pad_left: 0.1,
|
||||||
|
pad_right: 0.1,
|
||||||
|
pad_top: 0.1,
|
||||||
|
pad_bottom: 0.1,
|
||||||
|
),
|
||||||
|
"lshift": Led(
|
||||||
|
width: 2.6,
|
||||||
|
height: 1.0,
|
||||||
|
pad_left: 0.1,
|
||||||
|
pad_right: 0.1,
|
||||||
|
pad_top: 0.1,
|
||||||
|
pad_bottom: 0.1,
|
||||||
|
),
|
||||||
|
"rshift": Led(
|
||||||
|
width: 3.0,
|
||||||
|
height: 1.0,
|
||||||
|
pad_left: 0.1,
|
||||||
|
pad_right: 0.1,
|
||||||
|
pad_top: 0.1,
|
||||||
|
pad_bottom: 0.1,
|
||||||
|
),
|
||||||
|
"lctrl": Led(
|
||||||
|
width: 1.4,
|
||||||
|
height: 1.0,
|
||||||
|
pad_left: 0.1,
|
||||||
|
pad_right: 0.1,
|
||||||
|
pad_top: 0.1,
|
||||||
|
pad_bottom: 0.1,
|
||||||
|
),
|
||||||
|
"spacebar": Led(
|
||||||
|
width: 5.8,
|
||||||
|
height: 1.0,
|
||||||
|
pad_left: 0.1,
|
||||||
|
pad_right: 0.1,
|
||||||
|
pad_top: 0.1,
|
||||||
|
pad_bottom: 0.1,
|
||||||
|
),
|
||||||
|
"rctrl": Led(
|
||||||
|
width: 1.2,
|
||||||
|
height: 1.0,
|
||||||
|
pad_left: 0.1,
|
||||||
|
pad_right: 0.1,
|
||||||
|
pad_top: 0.1,
|
||||||
|
pad_bottom: 0.1,
|
||||||
|
),
|
||||||
|
"up_arrow": Led(
|
||||||
|
width: 0.8,
|
||||||
|
height: 0.8,
|
||||||
|
pad_left: 1.1,
|
||||||
|
pad_right: 1.1,
|
||||||
|
pad_top: 0.1,
|
||||||
|
pad_bottom: 0.1,
|
||||||
|
),
|
||||||
|
"arrows_spacer": Blank(
|
||||||
|
width: 15.0,
|
||||||
|
height: 0.0,
|
||||||
|
),
|
||||||
|
"arrows": Led(
|
||||||
|
width: 0.8,
|
||||||
|
height: 0.8,
|
||||||
|
pad_left: 0.1,
|
||||||
|
pad_right: 0.1,
|
||||||
|
pad_top: -0.1,
|
||||||
|
pad_bottom: 0.1,
|
||||||
|
),
|
||||||
|
"row_end_spacing": Blank(
|
||||||
|
width: 0.4,
|
||||||
|
height: 0.0,
|
||||||
|
),
|
||||||
|
"lid_logo": Led(
|
||||||
|
width: 2.6,
|
||||||
|
height: 1.2,
|
||||||
|
pad_left: 0.1,
|
||||||
|
pad_right: 0.1,
|
||||||
|
pad_top: 0.8,
|
||||||
|
pad_bottom: 0.0,
|
||||||
|
),
|
||||||
|
"lightbar_left": Led(
|
||||||
|
width: 0.6,
|
||||||
|
height: 3.6,
|
||||||
|
pad_left: -1.2,
|
||||||
|
pad_right: 0.2,
|
||||||
|
pad_top: -3.0,
|
||||||
|
pad_bottom: 0.3,
|
||||||
|
),
|
||||||
|
"lightbar_corner_left": Led(
|
||||||
|
width: 0.8,
|
||||||
|
height: 0.6,
|
||||||
|
pad_left: -0.6,
|
||||||
|
pad_right: 0.2,
|
||||||
|
pad_top: 0.8,
|
||||||
|
pad_bottom: 0.0,
|
||||||
|
),
|
||||||
|
"lightbar_bottom": Led(
|
||||||
|
width: 12.6,
|
||||||
|
height: 0.5,
|
||||||
|
pad_left: -0.1,
|
||||||
|
pad_right: -0.1,
|
||||||
|
pad_top: 0.8,
|
||||||
|
pad_bottom: 0.0,
|
||||||
|
),
|
||||||
|
"lightbar_corner_right": Led(
|
||||||
|
width: 0.8,
|
||||||
|
height: 0.6,
|
||||||
|
pad_left: 0.0,
|
||||||
|
pad_right: 0.2,
|
||||||
|
pad_top: 0.8,
|
||||||
|
pad_bottom: 0.0,
|
||||||
|
),
|
||||||
|
"lightbar_right": Led(
|
||||||
|
width: 0.6,
|
||||||
|
height: 3.6,
|
||||||
|
pad_left: -0.8,
|
||||||
|
pad_right: 0.2,
|
||||||
|
pad_top: -3.0,
|
||||||
|
pad_bottom: 0.3,
|
||||||
|
),
|
||||||
|
},
|
||||||
|
key_rows: [
|
||||||
|
(
|
||||||
|
pad_left: 0.1,
|
||||||
|
pad_right: 0.1,
|
||||||
|
pad_top: 0.1,
|
||||||
|
pad_bottom: 0.1,
|
||||||
|
row: [
|
||||||
|
(Blocking, "rog_row_blocking"),
|
||||||
|
(Blocking, "rog_row_blocking"),
|
||||||
|
(VolDown, "rog_row"),
|
||||||
|
(VolUp, "rog_row"),
|
||||||
|
(MicMute, "rog_row"),
|
||||||
|
(RogFan, "rog_row"),
|
||||||
|
(RogApp, "rog_row"),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
pad_left: 0.1,
|
||||||
|
pad_right: 0.1,
|
||||||
|
pad_top: 0.1,
|
||||||
|
pad_bottom: 0.1,
|
||||||
|
row: [
|
||||||
|
(Esc, "regular"),
|
||||||
|
(Spacing, "regular_spacing"),
|
||||||
|
(F1, "regular"),
|
||||||
|
(F2, "regular"),
|
||||||
|
(F3, "regular"),
|
||||||
|
(F4, "regular"),
|
||||||
|
(Spacing, "func_space"),
|
||||||
|
(F5, "regular"),
|
||||||
|
(F6, "regular"),
|
||||||
|
(F7, "regular"),
|
||||||
|
(F8, "regular"),
|
||||||
|
(Spacing, "func_space"),
|
||||||
|
(F9, "regular"),
|
||||||
|
(F10, "regular"),
|
||||||
|
(F11, "regular"),
|
||||||
|
(F12, "regular"),
|
||||||
|
(Spacing, "row_end_spacing"),
|
||||||
|
(Del, "regular"), // Should be super/insert
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
pad_left: 0.1,
|
||||||
|
pad_right: 0.1,
|
||||||
|
pad_top: 0.1,
|
||||||
|
pad_bottom: 0.1,
|
||||||
|
row: [
|
||||||
|
(Tilde, "regular"),
|
||||||
|
(N1, "regular"),
|
||||||
|
(N2, "regular"),
|
||||||
|
(N3, "regular"),
|
||||||
|
(N4, "regular"),
|
||||||
|
(N5, "regular"),
|
||||||
|
(N6, "regular"),
|
||||||
|
(N7, "regular"),
|
||||||
|
(N8, "regular"),
|
||||||
|
(N9, "regular"),
|
||||||
|
(N0, "regular"),
|
||||||
|
(Hyphen, "regular"),
|
||||||
|
(Equals, "regular"),
|
||||||
|
(Backspace, "backspace"),
|
||||||
|
(Spacing, "row_end_spacing"),
|
||||||
|
(MediaPlay, "regular"),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
pad_left: 0.1,
|
||||||
|
pad_right: 0.1,
|
||||||
|
pad_top: 0.1,
|
||||||
|
pad_bottom: 0.1,
|
||||||
|
row: [
|
||||||
|
(Tab, "tab"),
|
||||||
|
(Q, "regular"),
|
||||||
|
(W, "regular"),
|
||||||
|
(E, "regular"),
|
||||||
|
(R, "regular"),
|
||||||
|
(T, "regular"),
|
||||||
|
(Y, "regular"),
|
||||||
|
(U, "regular"),
|
||||||
|
(I, "regular"),
|
||||||
|
(O, "regular"),
|
||||||
|
(P, "regular"),
|
||||||
|
(LBracket, "regular"),
|
||||||
|
(RBracket, "regular"),
|
||||||
|
(BackSlash, "backslash"),
|
||||||
|
(Spacing, "row_end_spacing"),
|
||||||
|
(MediaStop, "regular"),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
pad_left: 0.1,
|
||||||
|
pad_right: 0.1,
|
||||||
|
pad_top: 0.1,
|
||||||
|
pad_bottom: 0.1,
|
||||||
|
row: [
|
||||||
|
(Caps, "capsplonk"),
|
||||||
|
(A, "regular"),
|
||||||
|
(S, "regular"),
|
||||||
|
(D, "regular"),
|
||||||
|
(F, "regular"),
|
||||||
|
(G, "regular"),
|
||||||
|
(H, "regular"),
|
||||||
|
(J, "regular"),
|
||||||
|
(K, "regular"),
|
||||||
|
(L, "regular"),
|
||||||
|
(SemiColon, "regular"),
|
||||||
|
(Quote, "regular"),
|
||||||
|
(Return, "return"),
|
||||||
|
(Spacing, "row_end_spacing"),
|
||||||
|
(MediaNext, "regular"),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
pad_left: 0.1,
|
||||||
|
pad_right: 0.1,
|
||||||
|
pad_top: 0.1,
|
||||||
|
pad_bottom: 0.1,
|
||||||
|
row: [
|
||||||
|
(LShift, "lshift"),
|
||||||
|
(Z, "regular"),
|
||||||
|
(X, "regular"),
|
||||||
|
(C, "regular"),
|
||||||
|
(V, "regular"),
|
||||||
|
(B, "regular"),
|
||||||
|
(N, "regular"),
|
||||||
|
(M, "regular"),
|
||||||
|
(Comma, "regular"),
|
||||||
|
(Period, "regular"),
|
||||||
|
(FwdSlash, "regular"),
|
||||||
|
(Rshift, "rshift"),
|
||||||
|
(Spacing, "row_end_spacing"),
|
||||||
|
(MediaPrev, "regular"),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
pad_left: 0.1,
|
||||||
|
pad_right: 0.1,
|
||||||
|
pad_top: 0.1,
|
||||||
|
pad_bottom: 0.1,
|
||||||
|
row: [
|
||||||
|
(LCtrl, "lctrl"),
|
||||||
|
(LFn, "regular"),
|
||||||
|
(Meta, "regular"),
|
||||||
|
(LAlt, "regular"),
|
||||||
|
(Spacebar, "spacebar"),
|
||||||
|
(RAlt, "regular"),
|
||||||
|
(PrtSc, "regular"),
|
||||||
|
(RCtrl, "rctrl"),
|
||||||
|
(Up, "up_arrow"),
|
||||||
|
(Spacing, "row_end_spacing"),
|
||||||
|
(PrtSc, "regular"),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
pad_left: 0.1,
|
||||||
|
pad_right: 0.1,
|
||||||
|
pad_top: 0.1,
|
||||||
|
pad_bottom: 0.1,
|
||||||
|
row: [
|
||||||
|
(Spacing, "arrows_spacer"),
|
||||||
|
(Left, "arrows"),
|
||||||
|
(Down, "arrows"),
|
||||||
|
(Right, "arrows"),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
pad_left: 6.5,
|
||||||
|
pad_right: 6.5,
|
||||||
|
pad_top: 0.2,
|
||||||
|
pad_bottom: 0.1,
|
||||||
|
row: [
|
||||||
|
(LidLogo, "lid_logo"),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
(
|
||||||
|
pad_left: 0.1,
|
||||||
|
pad_right: 0.1,
|
||||||
|
pad_top: 0.1,
|
||||||
|
pad_bottom: 0.1,
|
||||||
|
row: [
|
||||||
|
(LightbarLeft, "lightbar_left"),
|
||||||
|
(LightbarLeftCorner, "lightbar_corner_left"),
|
||||||
|
(LightbarLeftBottom, "lightbar_bottom"),
|
||||||
|
(LightbarRightBottom, "lightbar_bottom"),
|
||||||
|
(LightbarRightCorner, "lightbar_corner_right"),
|
||||||
|
(LightbarRight, "lightbar_right"),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
@@ -164,6 +164,25 @@ impl LedSupportFile {
|
|||||||
return Some(data);
|
return Some(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If the system-wide files were not found (typical in CI or
|
||||||
|
// development environments), attempt to load the bundled
|
||||||
|
// `data/aura_support.ron` from the crate so tests and local runs
|
||||||
|
// behave the same as when the package is installed.
|
||||||
|
// Attempt to load a bundled `aura_support.ron` included at compile time.
|
||||||
|
// Using `include_str!` ensures the data is available regardless of
|
||||||
|
// runtime `CARGO_MANIFEST_DIR` or CI environment differences.
|
||||||
|
let bundled_buf = include_str!("../data/aura_support.ron");
|
||||||
|
if !bundled_buf.is_empty() {
|
||||||
|
if let Ok(tmp) = ron::from_str::<LedSupportFile>(bundled_buf) {
|
||||||
|
data.0.append(&mut tmp.0.clone());
|
||||||
|
data.0.sort_by(|a, b| a.device_name.cmp(&b.device_name));
|
||||||
|
info!("Loaded bundled LED support data (embedded)");
|
||||||
|
return Some(data);
|
||||||
|
} else {
|
||||||
|
warn!("Could not parse embedded bundled data file");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
warn!("Does {} exist?", ASUS_LED_MODE_USER_CONF);
|
warn!("Does {} exist?", ASUS_LED_MODE_USER_CONF);
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,11 +24,16 @@ use tokio::runtime::Runtime;
|
|||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<()> {
|
async fn main() -> Result<()> {
|
||||||
|
// Ensure tracing spans are quiet by default unless user overrides
|
||||||
|
if std::env::var_os("RUST_LOG").is_none() {
|
||||||
|
std::env::set_var("RUST_LOG", "warn,tracing=error,zbus=error");
|
||||||
|
}
|
||||||
let mut logger = env_logger::Builder::new();
|
let mut logger = env_logger::Builder::new();
|
||||||
logger
|
logger
|
||||||
.filter_level(LevelFilter::Warn)
|
|
||||||
.parse_default_env()
|
.parse_default_env()
|
||||||
.target(env_logger::Target::Stdout)
|
.filter_level(LevelFilter::Info)
|
||||||
|
.parse_default_env()
|
||||||
|
.target(env_logger::Target::Stderr)
|
||||||
.format_timestamp(None)
|
.format_timestamp(None)
|
||||||
.init();
|
.init();
|
||||||
|
|
||||||
|
|||||||
@@ -168,15 +168,24 @@ pub fn setup_fan_curve_page(ui: &MainWindow, _config: Arc<Mutex<Config>>) {
|
|||||||
|
|
||||||
update_fan_data(handle, balanced, perf, quiet);
|
update_fan_data(handle, balanced, perf, quiet);
|
||||||
|
|
||||||
|
let choices_for_ui = platform_profile_choices.clone();
|
||||||
let handle_next1 = handle_copy.clone();
|
let handle_next1 = handle_copy.clone();
|
||||||
if let Err(e) = handle_copy.upgrade_in_event_loop(move |handle| {
|
if let Err(e) = handle_copy.upgrade_in_event_loop(move |handle| {
|
||||||
let global = handle.global::<FanPageData>();
|
let global = handle.global::<FanPageData>();
|
||||||
let fans1 = fans.clone();
|
let fans1 = fans.clone();
|
||||||
|
let choices = choices_for_ui.clone();
|
||||||
global.on_set_profile_default(move |profile| {
|
global.on_set_profile_default(move |profile| {
|
||||||
let fans = fans1.clone();
|
let fans = fans1.clone();
|
||||||
let handle_next = handle_next1.clone();
|
let handle_next = handle_next1.clone();
|
||||||
|
let choices = choices.clone();
|
||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
if fans.set_curves_to_defaults(profile.into()).await.is_err() {
|
let mut target: PlatformProfile = profile.into();
|
||||||
|
if target == PlatformProfile::Quiet
|
||||||
|
&& !choices.contains(&PlatformProfile::Quiet)
|
||||||
|
{
|
||||||
|
target = PlatformProfile::LowPower;
|
||||||
|
}
|
||||||
|
if fans.set_curves_to_defaults(target).await.is_err() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let Ok(balanced) = fans
|
let Ok(balanced) = fans
|
||||||
|
|||||||
@@ -40,6 +40,10 @@ pub fn setup_system_page(ui: &MainWindow, _config: Arc<Mutex<Config>>) {
|
|||||||
ui.global::<SystemPageData>().set_platform_profile(-1);
|
ui.global::<SystemPageData>().set_platform_profile(-1);
|
||||||
ui.global::<SystemPageData>().set_panel_overdrive(-1);
|
ui.global::<SystemPageData>().set_panel_overdrive(-1);
|
||||||
ui.global::<SystemPageData>().set_boot_sound(-1);
|
ui.global::<SystemPageData>().set_boot_sound(-1);
|
||||||
|
ui.global::<SystemPageData>().set_kbd_leds_awake(-1);
|
||||||
|
ui.global::<SystemPageData>().set_kbd_leds_sleep(-1);
|
||||||
|
ui.global::<SystemPageData>().set_kbd_leds_boot(-1);
|
||||||
|
ui.global::<SystemPageData>().set_kbd_leds_shutdown(-1);
|
||||||
ui.global::<SystemPageData>().set_screen_auto_brightness(-1);
|
ui.global::<SystemPageData>().set_screen_auto_brightness(-1);
|
||||||
ui.global::<SystemPageData>().set_mcu_powersave(-1);
|
ui.global::<SystemPageData>().set_mcu_powersave(-1);
|
||||||
ui.global::<SystemPageData>().set_mini_led_mode(-1);
|
ui.global::<SystemPageData>().set_mini_led_mode(-1);
|
||||||
@@ -669,6 +673,26 @@ pub fn setup_system_page_callbacks(ui: &MainWindow, _states: Arc<Mutex<Config>>)
|
|||||||
setup_callback!(boot_sound, handle, attr, i32);
|
setup_callback!(boot_sound, handle, attr, i32);
|
||||||
setup_external!(boot_sound, i32, handle, attr, value)
|
setup_external!(boot_sound, i32, handle, attr, value)
|
||||||
}
|
}
|
||||||
|
FirmwareAttribute::KbdLedsAwake => {
|
||||||
|
init_property!(kbd_leds_awake, handle, value, i32);
|
||||||
|
setup_callback!(kbd_leds_awake, handle, attr, i32);
|
||||||
|
setup_external!(kbd_leds_awake, i32, handle, attr, value)
|
||||||
|
}
|
||||||
|
FirmwareAttribute::KbdLedsSleep => {
|
||||||
|
init_property!(kbd_leds_sleep, handle, value, i32);
|
||||||
|
setup_callback!(kbd_leds_sleep, handle, attr, i32);
|
||||||
|
setup_external!(kbd_leds_sleep, i32, handle, attr, value)
|
||||||
|
}
|
||||||
|
FirmwareAttribute::KbdLedsBoot => {
|
||||||
|
init_property!(kbd_leds_boot, handle, value, i32);
|
||||||
|
setup_callback!(kbd_leds_boot, handle, attr, i32);
|
||||||
|
setup_external!(kbd_leds_boot, i32, handle, attr, value)
|
||||||
|
}
|
||||||
|
FirmwareAttribute::KbdLedsShutdown => {
|
||||||
|
init_property!(kbd_leds_shutdown, handle, value, i32);
|
||||||
|
setup_callback!(kbd_leds_shutdown, handle, attr, i32);
|
||||||
|
setup_external!(kbd_leds_shutdown, i32, handle, attr, value)
|
||||||
|
}
|
||||||
FirmwareAttribute::ScreenAutoBrightness => {
|
FirmwareAttribute::ScreenAutoBrightness => {
|
||||||
init_property!(screen_auto_brightness, handle, value, i32);
|
init_property!(screen_auto_brightness, handle, value, i32);
|
||||||
setup_callback!(screen_auto_brightness, handle, attr, i32);
|
setup_callback!(screen_auto_brightness, handle, attr, i32);
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if paths.len() > 1 {
|
if paths.len() > 1 {
|
||||||
println!("Multiple asusd interfaces devices found");
|
log::warn!("Multiple asusd interfaces devices found");
|
||||||
}
|
}
|
||||||
if !paths.is_empty() {
|
if !paths.is_empty() {
|
||||||
let mut ctrl = Vec::new();
|
let mut ctrl = Vec::new();
|
||||||
@@ -129,7 +129,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if paths.len() > 1 {
|
if paths.len() > 1 {
|
||||||
println!("Multiple asusd interfaces devices found");
|
log::warn!("Multiple asusd interfaces devices found");
|
||||||
}
|
}
|
||||||
if !paths.is_empty() {
|
if !paths.is_empty() {
|
||||||
let mut ctrl = Vec::new();
|
let mut ctrl = Vec::new();
|
||||||
|
|||||||
@@ -51,6 +51,14 @@ export global SystemPageData {
|
|||||||
callback cb_panel_overdrive(int);
|
callback cb_panel_overdrive(int);
|
||||||
in-out property <int> boot_sound;
|
in-out property <int> boot_sound;
|
||||||
callback cb_boot_sound(int);
|
callback cb_boot_sound(int);
|
||||||
|
in-out property <int> kbd_leds_awake;
|
||||||
|
callback cb_kbd_leds_awake(int);
|
||||||
|
in-out property <int> kbd_leds_sleep;
|
||||||
|
callback cb_kbd_leds_sleep(int);
|
||||||
|
in-out property <int> kbd_leds_boot;
|
||||||
|
callback cb_kbd_leds_boot(int);
|
||||||
|
in-out property <int> kbd_leds_shutdown;
|
||||||
|
callback cb_kbd_leds_shutdown(int);
|
||||||
in-out property <int> screen_auto_brightness;
|
in-out property <int> screen_auto_brightness;
|
||||||
callback cb_screen_auto_brightness(int);
|
callback cb_screen_auto_brightness(int);
|
||||||
in-out property <int> mcu_powersave;
|
in-out property <int> mcu_powersave;
|
||||||
@@ -278,6 +286,44 @@ export component PageSystem inherits Rectangle {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GroupBox {
|
||||||
|
title: @tr("Keyboard Power Management");
|
||||||
|
HorizontalLayout {
|
||||||
|
spacing: 10px;
|
||||||
|
if SystemPageData.kbd_leds_awake != -1: SystemToggleInt {
|
||||||
|
text: @tr("Keyboard Awake Effect");
|
||||||
|
checked_int <=> SystemPageData.kbd_leds_awake;
|
||||||
|
toggled => {
|
||||||
|
SystemPageData.cb_kbd_leds_awake(SystemPageData.kbd_leds_awake)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if SystemPageData.kbd_leds_sleep != -1: SystemToggleInt {
|
||||||
|
text: @tr("Keyboard Sleep Effect");
|
||||||
|
checked_int <=> SystemPageData.kbd_leds_sleep;
|
||||||
|
toggled => {
|
||||||
|
SystemPageData.cb_kbd_leds_sleep(SystemPageData.kbd_leds_sleep)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if SystemPageData.kbd_leds_boot != -1: SystemToggleInt {
|
||||||
|
text: @tr("Keyboard Boot Effect");
|
||||||
|
checked_int <=> SystemPageData.kbd_leds_boot;
|
||||||
|
toggled => {
|
||||||
|
SystemPageData.cb_kbd_leds_boot(SystemPageData.kbd_leds_boot)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if SystemPageData.kbd_leds_shutdown != -1: SystemToggleInt {
|
||||||
|
text: @tr("Keyboard Shutdown Effect");
|
||||||
|
checked_int <=> SystemPageData.kbd_leds_shutdown;
|
||||||
|
toggled => {
|
||||||
|
SystemPageData.cb_kbd_leds_shutdown(SystemPageData.kbd_leds_shutdown)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
HorizontalBox {
|
HorizontalBox {
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
spacing: 10px;
|
spacing: 10px;
|
||||||
|
|||||||
@@ -286,6 +286,10 @@ define_attribute_getters!(
|
|||||||
dgpu_tgp,
|
dgpu_tgp,
|
||||||
charge_mode,
|
charge_mode,
|
||||||
boot_sound,
|
boot_sound,
|
||||||
|
kbd_leds_awake,
|
||||||
|
kbd_leds_sleep,
|
||||||
|
kbd_leds_boot,
|
||||||
|
kbd_leds_shutdown,
|
||||||
mcu_powersave,
|
mcu_powersave,
|
||||||
panel_od,
|
panel_od,
|
||||||
panel_hd_mode,
|
panel_hd_mode,
|
||||||
@@ -342,6 +346,10 @@ pub enum FirmwareAttribute {
|
|||||||
PptEnabled = 24,
|
PptEnabled = 24,
|
||||||
None = 25,
|
None = 25,
|
||||||
ScreenAutoBrightness = 26,
|
ScreenAutoBrightness = 26,
|
||||||
|
KbdLedsAwake = 27,
|
||||||
|
KbdLedsSleep = 28,
|
||||||
|
KbdLedsBoot = 29,
|
||||||
|
KbdLedsShutdown = 30,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FirmwareAttribute {
|
impl FirmwareAttribute {
|
||||||
@@ -383,9 +391,13 @@ impl From<&str> for FirmwareAttribute {
|
|||||||
"nv_dynamic_boost" => Self::NvDynamicBoost,
|
"nv_dynamic_boost" => Self::NvDynamicBoost,
|
||||||
"nv_temp_target" => Self::NvTempTarget,
|
"nv_temp_target" => Self::NvTempTarget,
|
||||||
"nv_base_tgp" => Self::DgpuBaseTgp,
|
"nv_base_tgp" => Self::DgpuBaseTgp,
|
||||||
"dgpu_tgp" => Self::DgpuTgp,
|
"nv_tgp" => Self::DgpuTgp,
|
||||||
"charge_mode" => Self::ChargeMode,
|
"charge_mode" => Self::ChargeMode,
|
||||||
"boot_sound" => Self::BootSound,
|
"boot_sound" => Self::BootSound,
|
||||||
|
"kbd_leds_awake" => Self::KbdLedsAwake,
|
||||||
|
"kbd_leds_sleep" => Self::KbdLedsSleep,
|
||||||
|
"kbd_leds_boot" => Self::KbdLedsBoot,
|
||||||
|
"kbd_leds_shutdown" => Self::KbdLedsShutdown,
|
||||||
"mcu_powersave" => Self::McuPowersave,
|
"mcu_powersave" => Self::McuPowersave,
|
||||||
"panel_overdrive" => Self::PanelOverdrive,
|
"panel_overdrive" => Self::PanelOverdrive,
|
||||||
"panel_hd_mode" => Self::PanelHdMode,
|
"panel_hd_mode" => Self::PanelHdMode,
|
||||||
@@ -420,7 +432,7 @@ impl From<FirmwareAttribute> for &str {
|
|||||||
FirmwareAttribute::NvDynamicBoost => "nv_dynamic_boost",
|
FirmwareAttribute::NvDynamicBoost => "nv_dynamic_boost",
|
||||||
FirmwareAttribute::NvTempTarget => "nv_temp_target",
|
FirmwareAttribute::NvTempTarget => "nv_temp_target",
|
||||||
FirmwareAttribute::DgpuBaseTgp => "dgpu_base_tgp",
|
FirmwareAttribute::DgpuBaseTgp => "dgpu_base_tgp",
|
||||||
FirmwareAttribute::DgpuTgp => "dgpu_tgp",
|
FirmwareAttribute::DgpuTgp => "nv_tgp",
|
||||||
FirmwareAttribute::ChargeMode => "charge_mode",
|
FirmwareAttribute::ChargeMode => "charge_mode",
|
||||||
FirmwareAttribute::BootSound => "boot_sound",
|
FirmwareAttribute::BootSound => "boot_sound",
|
||||||
FirmwareAttribute::McuPowersave => "mcu_powersave",
|
FirmwareAttribute::McuPowersave => "mcu_powersave",
|
||||||
@@ -431,6 +443,10 @@ impl From<FirmwareAttribute> for &str {
|
|||||||
FirmwareAttribute::DgpuDisable => "dgpu_disable",
|
FirmwareAttribute::DgpuDisable => "dgpu_disable",
|
||||||
FirmwareAttribute::GpuMuxMode => "gpu_mux_mode",
|
FirmwareAttribute::GpuMuxMode => "gpu_mux_mode",
|
||||||
FirmwareAttribute::MiniLedMode => "mini_led_mode",
|
FirmwareAttribute::MiniLedMode => "mini_led_mode",
|
||||||
|
FirmwareAttribute::KbdLedsAwake => "kbd_leds_awake",
|
||||||
|
FirmwareAttribute::KbdLedsSleep => "kbd_leds_sleep",
|
||||||
|
FirmwareAttribute::KbdLedsBoot => "kbd_leds_boot",
|
||||||
|
FirmwareAttribute::KbdLedsShutdown => "kbd_leds_shutdown",
|
||||||
FirmwareAttribute::PendingReboot => "pending_reboot",
|
FirmwareAttribute::PendingReboot => "pending_reboot",
|
||||||
FirmwareAttribute::ScreenAutoBrightness => "screen_auto_brightness",
|
FirmwareAttribute::ScreenAutoBrightness => "screen_auto_brightness",
|
||||||
FirmwareAttribute::None => "none",
|
FirmwareAttribute::None => "none",
|
||||||
|
|||||||
@@ -13,8 +13,11 @@ use crate::usb::{PROD_ID1, PROD_ID1_STR, PROD_ID2, PROD_ID2_STR};
|
|||||||
#[derive(Default, Debug, Copy, Clone, PartialEq, Eq, Deserialize, Serialize)]
|
#[derive(Default, Debug, Copy, Clone, PartialEq, Eq, Deserialize, Serialize)]
|
||||||
pub enum SlashType {
|
pub enum SlashType {
|
||||||
GA403,
|
GA403,
|
||||||
|
GA403W,
|
||||||
GA605,
|
GA605,
|
||||||
GU605,
|
GU605,
|
||||||
|
GU605C,
|
||||||
|
G614F,
|
||||||
#[default]
|
#[default]
|
||||||
Unsupported,
|
Unsupported,
|
||||||
}
|
}
|
||||||
@@ -22,28 +25,40 @@ pub enum SlashType {
|
|||||||
impl SlashType {
|
impl SlashType {
|
||||||
pub const fn prod_id(&self) -> u16 {
|
pub const fn prod_id(&self) -> u16 {
|
||||||
match self {
|
match self {
|
||||||
|
SlashType::GA403W => PROD_ID2,
|
||||||
SlashType::GA403 => PROD_ID1,
|
SlashType::GA403 => PROD_ID1,
|
||||||
SlashType::GA605 => PROD_ID2,
|
SlashType::GA605 => PROD_ID2,
|
||||||
SlashType::GU605 => PROD_ID1,
|
SlashType::GU605 => PROD_ID1,
|
||||||
|
SlashType::GU605C => PROD_ID2,
|
||||||
|
SlashType::G614F => PROD_ID2,
|
||||||
SlashType::Unsupported => 0,
|
SlashType::Unsupported => 0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub const fn prod_id_str(&self) -> &str {
|
pub const fn prod_id_str(&self) -> &str {
|
||||||
match self {
|
match self {
|
||||||
|
SlashType::GA403W => PROD_ID2_STR,
|
||||||
SlashType::GA403 => PROD_ID1_STR,
|
SlashType::GA403 => PROD_ID1_STR,
|
||||||
SlashType::GA605 => PROD_ID2_STR,
|
SlashType::GA605 => PROD_ID2_STR,
|
||||||
SlashType::GU605 => PROD_ID1_STR,
|
SlashType::GU605 => PROD_ID1_STR,
|
||||||
|
SlashType::GU605C => PROD_ID2_STR,
|
||||||
|
SlashType::G614F => PROD_ID2_STR,
|
||||||
SlashType::Unsupported => "",
|
SlashType::Unsupported => "",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn from_dmi() -> Self {
|
pub fn from_dmi() -> Self {
|
||||||
let board_name = DMIID::new().unwrap_or_default().board_name.to_uppercase();
|
let board_name = DMIID::new().unwrap_or_default().board_name.to_uppercase();
|
||||||
if board_name.contains("GA403") {
|
if board_name.contains("G614F") {
|
||||||
|
SlashType::G614F
|
||||||
|
} else if board_name.contains("GA403W") {
|
||||||
|
SlashType::GA403W
|
||||||
|
} else if board_name.contains("GA403") {
|
||||||
SlashType::GA403
|
SlashType::GA403
|
||||||
} else if board_name.contains("GA605") {
|
} else if board_name.contains("GA605") {
|
||||||
SlashType::GA605
|
SlashType::GA605
|
||||||
|
} else if board_name.contains("GU605C") {
|
||||||
|
SlashType::GU605C
|
||||||
} else if board_name.contains("GU605") {
|
} else if board_name.contains("GU605") {
|
||||||
SlashType::GU605
|
SlashType::GU605
|
||||||
} else {
|
} else {
|
||||||
@@ -56,10 +71,13 @@ impl FromStr for SlashType {
|
|||||||
type Err = SlashError;
|
type Err = SlashError;
|
||||||
|
|
||||||
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
|
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
|
||||||
Ok(match s {
|
Ok(match s.to_uppercase().as_str() {
|
||||||
"ga403" | "GA403" => Self::GA403,
|
"GA403W" => Self::GA403W,
|
||||||
"ga605" | "GA605" => Self::GA605,
|
"GA403" => Self::GA403,
|
||||||
"gu605" | "GU605" => Self::GU605,
|
"GA605" => Self::GA605,
|
||||||
|
"GU605C" => Self::GU605C,
|
||||||
|
"GU605" => Self::GU605,
|
||||||
|
"G614FR" => Self::G614F,
|
||||||
_ => Self::Unsupported,
|
_ => Self::Unsupported,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -68,6 +86,7 @@ impl FromStr for SlashType {
|
|||||||
#[cfg_attr(feature = "dbus", derive(Type, Value, OwnedValue))]
|
#[cfg_attr(feature = "dbus", derive(Type, Value, OwnedValue))]
|
||||||
#[derive(Debug, Default, PartialEq, Eq, Copy, Clone, Deserialize, Serialize)]
|
#[derive(Debug, Default, PartialEq, Eq, Copy, Clone, Deserialize, Serialize)]
|
||||||
pub enum SlashMode {
|
pub enum SlashMode {
|
||||||
|
Static = 0x06,
|
||||||
Bounce = 0x10,
|
Bounce = 0x10,
|
||||||
Slash = 0x12,
|
Slash = 0x12,
|
||||||
Loading = 0x13,
|
Loading = 0x13,
|
||||||
@@ -91,6 +110,7 @@ impl FromStr for SlashMode {
|
|||||||
|
|
||||||
fn from_str(s: &str) -> Result<Self, SlashError> {
|
fn from_str(s: &str) -> Result<Self, SlashError> {
|
||||||
match s {
|
match s {
|
||||||
|
"Static" => Ok(SlashMode::Static),
|
||||||
"Bounce" => Ok(SlashMode::Bounce),
|
"Bounce" => Ok(SlashMode::Bounce),
|
||||||
"Slash" => Ok(SlashMode::Slash),
|
"Slash" => Ok(SlashMode::Slash),
|
||||||
"Loading" => Ok(SlashMode::Loading),
|
"Loading" => Ok(SlashMode::Loading),
|
||||||
@@ -114,6 +134,7 @@ impl FromStr for SlashMode {
|
|||||||
impl Display for SlashMode {
|
impl Display for SlashMode {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
let str = match &self {
|
let str = match &self {
|
||||||
|
SlashMode::Static => String::from("Static"),
|
||||||
SlashMode::Bounce => String::from("Bounce"),
|
SlashMode::Bounce => String::from("Bounce"),
|
||||||
SlashMode::Slash => String::from("Slash"),
|
SlashMode::Slash => String::from("Slash"),
|
||||||
SlashMode::Loading => String::from("Loading"),
|
SlashMode::Loading => String::from("Loading"),
|
||||||
@@ -135,8 +156,9 @@ impl Display for SlashMode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl SlashMode {
|
impl SlashMode {
|
||||||
pub fn list() -> [String; 15] {
|
pub fn list() -> [String; 16] {
|
||||||
[
|
[
|
||||||
|
SlashMode::Static.to_string(),
|
||||||
SlashMode::Bounce.to_string(),
|
SlashMode::Bounce.to_string(),
|
||||||
SlashMode::Slash.to_string(),
|
SlashMode::Slash.to_string(),
|
||||||
SlashMode::Loading.to_string(),
|
SlashMode::Loading.to_string(),
|
||||||
|
|||||||
@@ -37,12 +37,17 @@ pub fn get_slash_type() -> SlashType {
|
|||||||
let dmi = DMIID::new()
|
let dmi = DMIID::new()
|
||||||
.map_err(|_| SlashError::NoDevice)
|
.map_err(|_| SlashError::NoDevice)
|
||||||
.unwrap_or_default();
|
.unwrap_or_default();
|
||||||
let board_name = dmi.board_name;
|
let board_name = dmi.board_name.to_uppercase();
|
||||||
|
if board_name.contains("G614F") {
|
||||||
if board_name.contains("GA403") {
|
SlashType::G614F
|
||||||
|
} else if board_name.contains("GA403W") {
|
||||||
|
SlashType::GA403W
|
||||||
|
} else if board_name.contains("GA403") {
|
||||||
SlashType::GA403
|
SlashType::GA403
|
||||||
} else if board_name.contains("GA605") {
|
} else if board_name.contains("GA605") {
|
||||||
SlashType::GA605
|
SlashType::GA605
|
||||||
|
} else if board_name.contains("GU605C") {
|
||||||
|
SlashType::GU605C
|
||||||
} else if board_name.contains("GU605") {
|
} else if board_name.contains("GU605") {
|
||||||
SlashType::GU605
|
SlashType::GU605
|
||||||
} else {
|
} else {
|
||||||
@@ -52,9 +57,12 @@ pub fn get_slash_type() -> SlashType {
|
|||||||
|
|
||||||
pub const fn report_id(slash_type: SlashType) -> u8 {
|
pub const fn report_id(slash_type: SlashType) -> u8 {
|
||||||
match slash_type {
|
match slash_type {
|
||||||
|
SlashType::GA403W => REPORT_ID_19B6,
|
||||||
SlashType::GA403 => REPORT_ID_193B,
|
SlashType::GA403 => REPORT_ID_193B,
|
||||||
SlashType::GA605 => REPORT_ID_19B6,
|
SlashType::GA605 => REPORT_ID_19B6,
|
||||||
|
SlashType::G614F => REPORT_ID_19B6,
|
||||||
SlashType::GU605 => REPORT_ID_193B,
|
SlashType::GU605 => REPORT_ID_193B,
|
||||||
|
SlashType::GU605C => REPORT_ID_19B6,
|
||||||
SlashType::Unsupported => REPORT_ID_19B6,
|
SlashType::Unsupported => REPORT_ID_19B6,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,10 +43,12 @@ impl AniMatrix {
|
|||||||
vertical: 2,
|
vertical: 2,
|
||||||
horizontal: 5,
|
horizontal: 5,
|
||||||
},
|
},
|
||||||
AnimeType::GA402 | AnimeType::Unsupported => LedShape {
|
AnimeType::GA402 | AnimeType::G635L | AnimeType::G835L | AnimeType::Unsupported => {
|
||||||
vertical: 2,
|
LedShape {
|
||||||
horizontal: 5,
|
vertical: 2,
|
||||||
},
|
horizontal: 5,
|
||||||
|
}
|
||||||
|
}
|
||||||
AnimeType::GU604 => LedShape {
|
AnimeType::GU604 => LedShape {
|
||||||
vertical: 2,
|
vertical: 2,
|
||||||
horizontal: 5,
|
horizontal: 5,
|
||||||
@@ -56,7 +58,9 @@ impl AniMatrix {
|
|||||||
// Do a hard mapping of each (derived from wireshardk captures)
|
// Do a hard mapping of each (derived from wireshardk captures)
|
||||||
let rows = match model {
|
let rows = match model {
|
||||||
AnimeType::GA401 => GA401.to_vec(),
|
AnimeType::GA401 => GA401.to_vec(),
|
||||||
AnimeType::GA402 | AnimeType::Unsupported => GA402.to_vec(),
|
AnimeType::GA402 | AnimeType::G635L | AnimeType::G835L | AnimeType::Unsupported => {
|
||||||
|
GA402.to_vec()
|
||||||
|
}
|
||||||
AnimeType::GU604 => GU604.to_vec(),
|
AnimeType::GU604 => GU604.to_vec(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user