mirror of
https://gitlab.com/asus-linux/asusctl.git
synced 2026-01-22 17:33:19 +01:00
Use atomics for dbus thread. Update deps
This commit is contained in:
24
Cargo.lock
generated
24
Cargo.lock
generated
@@ -82,9 +82,9 @@ checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
|
||||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.0.50"
|
||||
version = "1.0.52"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd"
|
||||
checksum = "c3d87b23d6a92cd03af510a5ade527033f6aa6fa92161e2d5863a907d4c5e31d"
|
||||
|
||||
[[package]]
|
||||
name = "cexpr"
|
||||
@@ -138,9 +138,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "dbus"
|
||||
version = "0.7.1"
|
||||
version = "0.8.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "add8dd36d6d34a084220eb9fe216d3e230d52b37c31702e1ffda4fb2d4ef950e"
|
||||
checksum = "38f8875bb7afbc20dec12db09e18af3dcbd672b08592d2932950326a6437c616"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"libdbus-sys",
|
||||
@@ -148,18 +148,18 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "enumflags2"
|
||||
version = "0.6.3"
|
||||
version = "0.6.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a80e524ebf194285b57e5e7944018721c7fffc673253f5183f7accd88a2a3b0c"
|
||||
checksum = "83c8d82922337cd23a15f88b70d8e4ef5f11da38dd7cdb55e84dd5de99695da0"
|
||||
dependencies = [
|
||||
"enumflags2_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "enumflags2_derive"
|
||||
version = "0.6.3"
|
||||
version = "0.6.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2ed9afacaea0301eefb738c9deea725e6d53938004597cdc518a8cf9a7aa2f03"
|
||||
checksum = "946ee94e3dbf58fdd324f9ce245c7b238d46a66f00e86a020b71996349e46cce"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@@ -472,9 +472,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "sysfs-class"
|
||||
version = "0.1.2"
|
||||
version = "0.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "718e4a5d0e144ff01e05bb8618a4997d8901cdec74cf25826bca2535ef406f3e"
|
||||
checksum = "5e1bbcf869732c45a77898f7f61ed6d411dfc37613517e444842f58d428856d1"
|
||||
dependencies = [
|
||||
"numtoa",
|
||||
]
|
||||
@@ -555,9 +555,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "uhid-virt"
|
||||
version = "0.0.3"
|
||||
version = "0.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "03cee38747e38b73c5dd979a88eebc20829b78e785c2fb120c452305231a6340"
|
||||
checksum = "057ecb2608f960fd97c220557339335bf7cef77ae77b71fb342d9555e396c00c"
|
||||
dependencies = [
|
||||
"enumflags2",
|
||||
"libc",
|
||||
|
||||
18
Cargo.toml
18
Cargo.toml
@@ -13,16 +13,16 @@ name = "rog-core"
|
||||
path = "src/main.rs"
|
||||
|
||||
[dependencies]
|
||||
rusb = "0.5"
|
||||
gumdrop = "0.8"
|
||||
dbus = "0.7"
|
||||
rusb = "^0.5.5"
|
||||
gumdrop = "^0.8.0"
|
||||
dbus = "^0.8.2"
|
||||
serde = "1.0"
|
||||
serde_derive = "1.0"
|
||||
toml = "0.5"
|
||||
sysfs-class = "0.1.2"
|
||||
aho-corasick = "0.7"
|
||||
thiserror = "1.0.15"
|
||||
log = "0.4"
|
||||
uhid-virt = "0.0.3"
|
||||
sysfs-class = "^0.1.2"
|
||||
aho-corasick = "^0.7.10"
|
||||
thiserror = "^1.0.15"
|
||||
log = "^0.4.8"
|
||||
uhid-virt = "^0.0.4"
|
||||
#keycode = "0.3"
|
||||
env_logger = "0.7"
|
||||
env_logger = "^0.7.1"
|
||||
@@ -9,8 +9,8 @@ use dbus::{
|
||||
};
|
||||
use log::{error, info, warn};
|
||||
use std::error::Error;
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::time::Duration;
|
||||
use std::{cell::RefCell, rc::Rc};
|
||||
|
||||
pub fn start_daemon() -> Result<(), Box<dyn Error>> {
|
||||
let laptop = match_laptop();
|
||||
@@ -36,32 +36,27 @@ pub fn start_daemon() -> Result<(), Box<dyn Error>> {
|
||||
},
|
||||
);
|
||||
connection.request_name(DBUS_IFACE, false, true, false)?;
|
||||
let factory = Factory::new_fnmut::<()>();
|
||||
let factory = Factory::new_sync::<()>();
|
||||
|
||||
let daemon = Rc::new(RefCell::new(rogcore));
|
||||
let daemon = Arc::new(Mutex::new(rogcore));
|
||||
|
||||
// We create a tree with one object path inside and make that path introspectable.
|
||||
let tree = factory.tree(()).add(
|
||||
factory.object_path(DBUS_PATH, ()).introspectable().add(
|
||||
// We add an interface to the object path...
|
||||
factory
|
||||
.interface(DBUS_IFACE, ())
|
||||
// ...and a method inside the interface
|
||||
.add_m(
|
||||
factory
|
||||
.method("ledmessage", (), {
|
||||
let daemon = daemon.clone();
|
||||
let supported = Vec::from(laptop.supported_modes());
|
||||
move |m| {
|
||||
// Reads the args passed to the method
|
||||
factory.object_path(DBUS_PATH, ()).add(
|
||||
factory.interface(DBUS_IFACE, ()).add_m(
|
||||
factory
|
||||
// method for ledmessage
|
||||
.method("ledmessage", (), {
|
||||
let daemon = daemon.clone();
|
||||
let supported = Vec::from(laptop.supported_modes());
|
||||
move |m| {
|
||||
if let Ok(mut lock) = daemon.try_lock() {
|
||||
let bytes: Vec<u8> = m.msg.read1()?;
|
||||
match daemon
|
||||
.borrow_mut()
|
||||
.aura_set_and_save(&supported, &bytes[..])
|
||||
{
|
||||
match lock.aura_set_and_save(&supported, &bytes[..]) {
|
||||
Ok(_) => {
|
||||
let s = format!("Wrote {:x?}", bytes);
|
||||
let mret = m.msg.method_return().append1(&s);
|
||||
let mret = m
|
||||
.msg
|
||||
.method_return()
|
||||
.append1(&format!("Wrote {:x?}", bytes));
|
||||
Ok(vec![mret])
|
||||
}
|
||||
Err(err) => {
|
||||
@@ -69,17 +64,19 @@ pub fn start_daemon() -> Result<(), Box<dyn Error>> {
|
||||
Err(MethodErr::failed(&err))
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Err(MethodErr::failed("Could not lock daemon for access"))
|
||||
}
|
||||
})
|
||||
// Input?
|
||||
.outarg::<&str, _>("reply")
|
||||
.inarg::<Vec<u8>, _>("bytearray"),
|
||||
),
|
||||
}
|
||||
})
|
||||
.outarg::<&str, _>("reply")
|
||||
.inarg::<Vec<u8>, _>("bytearray"),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
// We add the tree to the connection so that incoming method calls will be handled.
|
||||
tree.start_receive(&connection);
|
||||
tree.start_receive_send(&connection);
|
||||
|
||||
loop {
|
||||
connection
|
||||
@@ -90,9 +87,10 @@ pub fn start_daemon() -> Result<(), Box<dyn Error>> {
|
||||
});
|
||||
|
||||
// TODO: this needs to move to a thread, but there is unsafety
|
||||
let mut borrowed_daemon = daemon.borrow_mut();
|
||||
laptop.run(&mut borrowed_daemon).unwrap_or_else(|err| {
|
||||
error!("{:?}", err);
|
||||
});
|
||||
if let Ok(mut lock) = daemon.try_lock() {
|
||||
laptop.run(&mut lock).unwrap_or_else(|err| {
|
||||
error!("{:?}", err);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user