mirror of
https://gitlab.com/asus-linux/asusctl.git
synced 2026-02-06 00:15:04 +01:00
Releasing
This commit is contained in:
199
CHANGELOG.md
199
CHANGELOG.md
@@ -5,201 +5,6 @@ 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]
|
||||||
### Added
|
|
||||||
- Support for G531
|
|
||||||
- Support for G731
|
|
||||||
|
|
||||||
## [0.15.3] - 2020-07-21
|
## [1.0.0] - 2020-08-13
|
||||||
## Changed
|
- Major fork and refactor to use asus-hid patch for ASUS N-Key device
|
||||||
- GX531 reverted to zone profile, G531 moved to per-key profile
|
|
||||||
|
|
||||||
## [0.15.2] - 2020-07-21
|
|
||||||
## Changed
|
|
||||||
- GX531 now supports same LED features as GX502
|
|
||||||
|
|
||||||
## Added
|
|
||||||
- Support for G532
|
|
||||||
|
|
||||||
## [0.15.0] - 2020-07-09
|
|
||||||
### Changed
|
|
||||||
- Support "Calc" fn key on G712
|
|
||||||
- ROG key has limited customization, see README.md for details.
|
|
||||||
+ Power
|
|
||||||
+ Sleep
|
|
||||||
+ MediaRecord
|
|
||||||
+ MediaFastFwd
|
|
||||||
+ MediaRewind
|
|
||||||
+ MediaNext
|
|
||||||
+ MediaPrev
|
|
||||||
+ MediaStop
|
|
||||||
+ MediaPlayPause
|
|
||||||
+ MediaVolMute
|
|
||||||
+ MediaVolUp
|
|
||||||
+ MediaVolDown
|
|
||||||
+ BacklightInc
|
|
||||||
+ BacklightDec
|
|
||||||
+ ControlConfig
|
|
||||||
+ LaunchTextEditor
|
|
||||||
+ LaunchEmailApp
|
|
||||||
+ LaunchNewsReader
|
|
||||||
+ LaunchCalendar
|
|
||||||
+ LaunchCalculator
|
|
||||||
+ LaunchWebBrowser
|
|
||||||
+ FileBrowser
|
|
||||||
|
|
||||||
### BREAKING
|
|
||||||
- `"rog_key": "ControlConfig",` is required to be added below line 1 in `/etc/rogcore.conf`
|
|
||||||
alternatively the config can be removed, allowing it to be recreated.
|
|
||||||
|
|
||||||
## [0.14.5] - 2020-07-07
|
|
||||||
### Changed
|
|
||||||
- Correct some device handling and order of operations
|
|
||||||
|
|
||||||
### BREAKING
|
|
||||||
- Not quite breaking, but the serice should now be static (not enabled) and
|
|
||||||
the udev rule `data/rog-core.rules` used to start the service. This ensures
|
|
||||||
the device is actually initialised fully before the service starts.
|
|
||||||
|
|
||||||
## [0.14.4] - 2020-07-07
|
|
||||||
### Changed
|
|
||||||
- Changes to the way rog-core is initialised
|
|
||||||
|
|
||||||
## [0.14.3] - 2020-07-05
|
|
||||||
### Changed
|
|
||||||
- Proper fix of laptop mode conversion bug
|
|
||||||
|
|
||||||
## [0.14.2] - 2020-07-04
|
|
||||||
### Changed
|
|
||||||
- Try to correct how laptop modes are handled
|
|
||||||
|
|
||||||
## [0.14.1] - 2020-07-04
|
|
||||||
### Added
|
|
||||||
- Support for G512 series
|
|
||||||
- Support for GU502 (variant of GA15)
|
|
||||||
|
|
||||||
## [0.14.0] - 2020-07-01
|
|
||||||
### Changed
|
|
||||||
- Further refine the way setting LED modes works so it is more universal, this
|
|
||||||
also allows for setting the brightness through `SetKeyBacklight`
|
|
||||||
|
|
||||||
### Added
|
|
||||||
- `README_DBUS.md` to document DBUS interface
|
|
||||||
- Dbus method `GetKeyBacklight`
|
|
||||||
- Dbus method `GetKeyBacklightModes`
|
|
||||||
|
|
||||||
## [0.13.1] - 2020-06-29
|
|
||||||
### Fixed
|
|
||||||
- Properly initialise the device
|
|
||||||
- Better log formatting
|
|
||||||
|
|
||||||
## [0.13.0] - 2020-06-29
|
|
||||||
### Changed
|
|
||||||
- Dbus command `LedWriteBytes` renamed to `SetKeyBacklight`
|
|
||||||
- Dbus command `SetKeyBacklight` will now take a JSON string instead of an array of bytes
|
|
||||||
+ Example:
|
|
||||||
```
|
|
||||||
{
|
|
||||||
"Breathe": {
|
|
||||||
"help": false,
|
|
||||||
"colour": [
|
|
||||||
254,
|
|
||||||
5,
|
|
||||||
171
|
|
||||||
],
|
|
||||||
"colour2": [
|
|
||||||
0,
|
|
||||||
156,
|
|
||||||
156
|
|
||||||
],
|
|
||||||
"speed": "High"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
note that `help` is unused but required as a side-effect of using `gumdrop`
|
|
||||||
for CLI.
|
|
||||||
- Dbus signal `LedCancelEffect` renamed to `KeyBacklightChanged`
|
|
||||||
- Config file is now in JSON format, and will store only the LED modes that a laptop
|
|
||||||
supports rather than the whole set
|
|
||||||
|
|
||||||
## [0.12.2] - 2020-06-29
|
|
||||||
### Changed
|
|
||||||
- "FanMode", "ChargeLimit" to "SetFanMode", "SetChargeLimit"
|
|
||||||
|
|
||||||
### Added
|
|
||||||
- Dbus signals "FanModeChanged", "ChargeLimitChanged"
|
|
||||||
- Dbus methods "GetFanMode", "GetChargeLimit"
|
|
||||||
- Support for ROG Strix G712
|
|
||||||
|
|
||||||
## [0.12.0] - 2020-06-26
|
|
||||||
### Changed
|
|
||||||
- Add modes for FX531 LEDs
|
|
||||||
- Change where USB reset is called
|
|
||||||
- Add support for G531GT
|
|
||||||
- Remove duplicated code: it looks like there is at least *some* consistency in Consumer-Device keycodes that ASUS uses
|
|
||||||
|
|
||||||
### BREAKING CHANGE
|
|
||||||
- `bat_charge_limit = 100` must be appended to the top of `/etc/rogcore.conf`
|
|
||||||
|
|
||||||
## [0.11.1] - 2020-06-11
|
|
||||||
### Changed
|
|
||||||
- Use DBUS_NAME instead of DBUS_IFACE when requesting the name
|
|
||||||
- Give different names for the bytearray arguments so that pydbus is not confused
|
|
||||||
- Add org.freedesktop.DBus.Method.NoReply annotations
|
|
||||||
- Remove dbus reply for multizone writes
|
|
||||||
- Move led_writer to a main loop due to strange mpsc behaviour, this combined with
|
|
||||||
mpsc channels offers a more reactive app
|
|
||||||
- Small fix for unreported mode indexing issue
|
|
||||||
|
|
||||||
## [0.11.0] - 2020-06-09
|
|
||||||
### BREAKING CHANGE
|
|
||||||
- Many of the RGB built-in modes have been renamed to match Armory-Crate names,
|
|
||||||
this means that the `/etc/rogcore.conf` needs to be removed so it can be
|
|
||||||
regenerated using the updated names.
|
|
||||||
|
|
||||||
### Changed
|
|
||||||
- Add better examples for AniMe display, and fix many small issues
|
|
||||||
- Don't halt app iff AniMe display not found when running on GA14/GA15 laptops
|
|
||||||
- Rename client crate to better suit
|
|
||||||
- Added a device reset for both keyboard and AniMe devices before configuring them
|
|
||||||
|
|
||||||
## [0.10.0] - 2020-05-23
|
|
||||||
### Changed
|
|
||||||
- Correctly set AMD boost
|
|
||||||
- Add animatrix support for G14 laptops
|
|
||||||
|
|
||||||
## [0.9.7] - 2020-05-23
|
|
||||||
### Changed
|
|
||||||
- Start differentiating between models using the 0x1866 USB device
|
|
||||||
- Refactor how to send multizone over dbus, and how to write it (write 4 packets before writing SET/APPLY)
|
|
||||||
- Begin implementing profiles per board_name
|
|
||||||
- Boost toggle for AMD (not freq adjustment yet)
|
|
||||||
|
|
||||||
## [0.9.6] - 2020-05-22
|
|
||||||
### Changed
|
|
||||||
- Fix needing to double-tap fan-mode to change mode
|
|
||||||
|
|
||||||
## [0.9.5] - 2020-05-22
|
|
||||||
### Changed
|
|
||||||
- Flip writing order of effect colour blocks every other block write to try
|
|
||||||
and even out. Previously the bottom rows were always last to be written.
|
|
||||||
- Add more examples: ball, comet, pulser.
|
|
||||||
- Refine the keyboard layout grid for GX502.
|
|
||||||
- Use tokio to delay main loop, not thread::sleep
|
|
||||||
- Minor tweaks to error handling. Needs refactor of errors.
|
|
||||||
|
|
||||||
## [0.9.4] - 2020-05-05
|
|
||||||
### Changed
|
|
||||||
- Fix reloading last keyboard brightness on boot
|
|
||||||
|
|
||||||
## [0.9.3] - 2020-05-04
|
|
||||||
### Changed
|
|
||||||
- Fixed return of rog-core in client mode
|
|
||||||
- Fixed writing of customised builtin LED modes
|
|
||||||
|
|
||||||
## [0.9.2] - 2020-05-04
|
|
||||||
### Added
|
|
||||||
- Begin keeping a Changelog
|
|
||||||
|
|
||||||
### Changed
|
|
||||||
- Internal structure changes to reduce the possibility of mutex await deadlocks when
|
|
||||||
writing to the LED endpoint
|
|
||||||
|
|||||||
70
asus-nb-ctrl.spec
Normal file
70
asus-nb-ctrl.spec
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
%if %{defined fedora}
|
||||||
|
%global debug_package %{nil}
|
||||||
|
%endif
|
||||||
|
|
||||||
|
# Use hardening ldflags.
|
||||||
|
%global rustflags -Clink-arg=-Wl,-z,relro,-z,now
|
||||||
|
Name: asus-nb-ctrl
|
||||||
|
Version: 1.0.0
|
||||||
|
Release: 0
|
||||||
|
Summary: Text editor for terminal
|
||||||
|
License: MPLv2
|
||||||
|
Group: Productivity/Text/Editors
|
||||||
|
URL: https://gitlab.com/asus-linux/asus-nb-ctrl
|
||||||
|
Source: %{name}-%{version}.tar.gz
|
||||||
|
# cargo vendor &&
|
||||||
|
# tar cfJ vendor.tar.xz vendor
|
||||||
|
Source1: vendor.tar.xz
|
||||||
|
BuildRequires: clang-devel
|
||||||
|
BuildRequires: cargo
|
||||||
|
BuildRequires: rust
|
||||||
|
BuildRequires: rust-std-static
|
||||||
|
BuildRequires: pkgconfig(dbus-1)
|
||||||
|
BuildRequires: pkgconfig(libudev)
|
||||||
|
|
||||||
|
%description
|
||||||
|
ASUS Laptop control
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q -n %name-next
|
||||||
|
%setup -q -n %name-next -D -T -a 1
|
||||||
|
|
||||||
|
mkdir .cargo
|
||||||
|
cat >.cargo/config <<EOF
|
||||||
|
[source.crates-io]
|
||||||
|
replace-with = "vendored-sources"
|
||||||
|
|
||||||
|
[source.vendored-sources]
|
||||||
|
directory = "vendor"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
%build
|
||||||
|
export RUSTFLAGS="%{rustflags}"
|
||||||
|
RUST_BACKTRACE=1 cargo build --release
|
||||||
|
|
||||||
|
%install
|
||||||
|
export RUSTFLAGS="%{rustflags}"
|
||||||
|
|
||||||
|
mkdir -p "%{buildroot}%{_bindir}"
|
||||||
|
install -D -m 0755 target/release/asusd %{buildroot}%{_bindir}/asusd
|
||||||
|
install -D -m 0755 target/release/asusctl %{buildroot}%{_bindir}/asusctl
|
||||||
|
install -D -m 0644 data/asusd.rules %{buildroot}%{_udevrulesdir}/90-asusd.rules
|
||||||
|
install -D -m 0644 data/asusd.conf %{buildroot}%{_sysconfdir}/dbus-1/system.d/asusd.conf
|
||||||
|
install -D -m 0644 data/asusd.service %{buildroot}%{_unitdir}/asusd.service
|
||||||
|
install -D -m 0644 data/asusd-ledmodes.toml %{buildroot}%{_sysconfdir}/asusd/asusd-ledmodes.toml
|
||||||
|
|
||||||
|
mkdir -p "%{buildroot}%{_datadir}/licenses/%{name}"
|
||||||
|
cp LICENSE "%{buildroot}%{_datadir}/licenses/%{name}/"
|
||||||
|
|
||||||
|
mkdir -p "%{buildroot}/bin"
|
||||||
|
|
||||||
|
%files
|
||||||
|
%license LICENSE
|
||||||
|
%{_bindir}/asusd
|
||||||
|
%{_bindir}/asusctl
|
||||||
|
%{_unitdir}/asusd.service
|
||||||
|
%{_udevrulesdir}/90-asusd.rules
|
||||||
|
%{_sysconfdir}/dbus-1/system.d/asusd.conf
|
||||||
|
%{_sysconfdir}/asusd/asusd-ledmodes.toml
|
||||||
|
|
||||||
|
%changelog
|
||||||
@@ -18,7 +18,8 @@ use tokio::sync::Mutex;
|
|||||||
use tokio::task::JoinHandle;
|
use tokio::task::JoinHandle;
|
||||||
|
|
||||||
pub struct CtrlKbdBacklight {
|
pub struct CtrlKbdBacklight {
|
||||||
dev_node: String,
|
led_node: String,
|
||||||
|
kbd_node: String,
|
||||||
bright_node: String,
|
bright_node: String,
|
||||||
supported_modes: Vec<u8>,
|
supported_modes: Vec<u8>,
|
||||||
flip_effect_write: bool,
|
flip_effect_write: bool,
|
||||||
@@ -130,32 +131,58 @@ impl crate::Controller for CtrlKbdBacklight {
|
|||||||
impl CtrlKbdBacklight {
|
impl CtrlKbdBacklight {
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn new(id_product: &str, supported_modes: Vec<u8>) -> Result<Self, std::io::Error> {
|
pub fn new(id_product: &str, supported_modes: Vec<u8>) -> Result<Self, std::io::Error> {
|
||||||
|
Ok(CtrlKbdBacklight {
|
||||||
|
led_node: Self::scan_led_node(id_product)?,
|
||||||
|
kbd_node: Self::scan_kbd_node(id_product)?,
|
||||||
|
// brightness node path should always be constant but this *might* change?
|
||||||
|
bright_node: "/sys/class/leds/asus::kbd_backlight/brightness".to_string(),
|
||||||
|
supported_modes,
|
||||||
|
flip_effect_write: false,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
fn scan_led_node(id_product: &str) -> Result<String, std::io::Error> {
|
||||||
let mut enumerator = udev::Enumerator::new()?;
|
let mut enumerator = udev::Enumerator::new()?;
|
||||||
enumerator.match_subsystem("hidraw")?;
|
enumerator.match_subsystem("hidraw")?;
|
||||||
|
|
||||||
for device in enumerator.scan_devices()? {
|
for device in enumerator.scan_devices()? {
|
||||||
if let Some(parent) = device.parent_with_subsystem_devtype("usb", "usb_device")? {
|
if let Some(parent) = device.parent_with_subsystem_devtype("usb", "usb_device")? {
|
||||||
if parent.attribute_value("idProduct").unwrap() == id_product
|
if parent.attribute_value("idProduct").unwrap() == id_product {
|
||||||
// && device.parent().unwrap().sysnum().unwrap() == 3
|
// && device.parent().unwrap().sysnum().unwrap() == 3
|
||||||
{
|
|
||||||
if let Some(dev_node) = device.devnode() {
|
if let Some(dev_node) = device.devnode() {
|
||||||
info!("Device has keyboard backlight control");
|
|
||||||
info!("Using device at: {:?} for LED control", dev_node);
|
info!("Using device at: {:?} for LED control", dev_node);
|
||||||
return Ok(CtrlKbdBacklight {
|
return Ok(dev_node.to_string_lossy().to_string());
|
||||||
dev_node: dev_node.to_string_lossy().to_string(),
|
|
||||||
bright_node: "/sys/class/leds/asus::kbd_backlight/brightness"
|
|
||||||
.to_string(),
|
|
||||||
supported_modes,
|
|
||||||
flip_effect_write: false,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(std::io::Error::new(
|
let err = std::io::Error::new(
|
||||||
std::io::ErrorKind::NotFound,
|
std::io::ErrorKind::NotFound,
|
||||||
"Device node not found",
|
"ASUS LED device node not found",
|
||||||
))
|
);
|
||||||
|
Err(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn scan_kbd_node(id_product: &str) -> Result<String, std::io::Error> {
|
||||||
|
let mut enumerator = udev::Enumerator::new()?;
|
||||||
|
enumerator.match_subsystem("input")?;
|
||||||
|
enumerator.match_property("ID_MODEL_ID", id_product)?;
|
||||||
|
|
||||||
|
for device in enumerator.scan_devices()? {
|
||||||
|
if let Some(dev_node) = device.devnode() {
|
||||||
|
if let Some(inum) = device.property_value("ID_USB_INTERFACE_NUM") {
|
||||||
|
if inum == "02" {
|
||||||
|
info!("Using device at: {:?} for keyboard polling", dev_node);
|
||||||
|
return Ok(dev_node.to_string_lossy().to_string());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let err = std::io::Error::new(
|
||||||
|
std::io::ErrorKind::NotFound,
|
||||||
|
"ASUS N-Key Consumer Device node not found",
|
||||||
|
);
|
||||||
|
Err(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn let_bright_check_change(&mut self, config: &mut Config) -> Result<(), Box<dyn Error>> {
|
fn let_bright_check_change(&mut self, config: &mut Config) -> Result<(), Box<dyn Error>> {
|
||||||
@@ -188,7 +215,7 @@ impl CtrlKbdBacklight {
|
|||||||
/// Should only be used if the bytes you are writing are verified correct
|
/// Should only be used if the bytes you are writing are verified correct
|
||||||
#[inline]
|
#[inline]
|
||||||
async fn write_bytes(&self, message: &[u8]) -> Result<(), Box<dyn Error>> {
|
async fn write_bytes(&self, message: &[u8]) -> Result<(), Box<dyn Error>> {
|
||||||
if let Ok(mut file) = OpenOptions::new().write(true).open(&self.dev_node) {
|
if let Ok(mut file) = OpenOptions::new().write(true).open(&self.led_node) {
|
||||||
file.write_all(message).unwrap();
|
file.write_all(message).unwrap();
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,3 +18,4 @@ impl fmt::Display for AuraError {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,9 +18,14 @@ prod_family = "ROG Strix"
|
|||||||
board_names = ["G512LI", "G712LI"]
|
board_names = ["G512LI", "G712LI"]
|
||||||
led_modes = [0, 1, 2, 3, 10]
|
led_modes = [0, 1, 2, 3, 10]
|
||||||
|
|
||||||
|
[[led_modes]]
|
||||||
|
prod_family = "Strix Scar 3"
|
||||||
|
board_names = ["G531GW"]
|
||||||
|
led_modes = [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 255]
|
||||||
|
|
||||||
[[led_modes]]
|
[[led_modes]]
|
||||||
prod_family = "Strix"
|
prod_family = "Strix"
|
||||||
board_names = ["G731GV", "G731GW", "G531GV", "G531GW"]
|
board_names = ["G731GV", "G731GW", "G531GV"]
|
||||||
led_modes = [0, 1, 2, 3, 13]
|
led_modes = [0, 1, 2, 3, 13]
|
||||||
|
|
||||||
[[led_modes]]
|
[[led_modes]]
|
||||||
|
|||||||
Reference in New Issue
Block a user