Set duty cycle as cli arg, rename executable
This commit is contained in:
parent
2e7e91cc58
commit
ff0e74e87d
3 changed files with 137 additions and 33 deletions
83
Cargo.lock
generated
83
Cargo.lock
generated
|
@ -20,6 +20,15 @@ version = "1.0.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9"
|
checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "colored"
|
||||||
|
version = "3.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "fde0e0ec90c9dfb3b4b1a0891a7dcd0e2bffde2f7efed5fe7c9bb00e5bfb915e"
|
||||||
|
dependencies = [
|
||||||
|
"windows-sys",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "core-foundation"
|
name = "core-foundation"
|
||||||
version = "0.10.1"
|
version = "0.10.1"
|
||||||
|
@ -66,6 +75,7 @@ dependencies = [
|
||||||
name = "kulifuli-host"
|
name = "kulifuli-host"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"colored",
|
||||||
"eyre",
|
"eyre",
|
||||||
"serialport",
|
"serialport",
|
||||||
]
|
]
|
||||||
|
@ -238,3 +248,76 @@ name = "winapi-x86_64-pc-windows-gnu"
|
||||||
version = "0.4.0"
|
version = "0.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-sys"
|
||||||
|
version = "0.59.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
|
||||||
|
dependencies = [
|
||||||
|
"windows-targets",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-targets"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
|
||||||
|
dependencies = [
|
||||||
|
"windows_aarch64_gnullvm",
|
||||||
|
"windows_aarch64_msvc",
|
||||||
|
"windows_i686_gnu",
|
||||||
|
"windows_i686_gnullvm",
|
||||||
|
"windows_i686_msvc",
|
||||||
|
"windows_x86_64_gnu",
|
||||||
|
"windows_x86_64_gnullvm",
|
||||||
|
"windows_x86_64_msvc",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_aarch64_gnullvm"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_aarch64_msvc"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_i686_gnu"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_i686_gnullvm"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_i686_msvc"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_x86_64_gnu"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_x86_64_gnullvm"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_x86_64_msvc"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
|
||||||
|
|
|
@ -6,6 +6,11 @@ edition = "2024"
|
||||||
[profile.release]
|
[profile.release]
|
||||||
lto = true
|
lto = true
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "kulifuli"
|
||||||
|
path = "src/main.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
colored = "3.0.0"
|
||||||
eyre = "0.6.12"
|
eyre = "0.6.12"
|
||||||
serialport = "4.7.2"
|
serialport = "4.7.2"
|
||||||
|
|
82
src/main.rs
82
src/main.rs
|
@ -1,48 +1,64 @@
|
||||||
|
use colored::Colorize;
|
||||||
use eyre::{Result, bail, ensure, eyre};
|
use eyre::{Result, bail, ensure, eyre};
|
||||||
use serialport::TTYPort;
|
use serialport::TTYPort;
|
||||||
use std::env::args;
|
use std::env::args;
|
||||||
use std::io::{Read, Write, stdin, stdout};
|
use std::io::{Read, Write};
|
||||||
use std::process::exit;
|
use std::process::exit;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
fn main() -> Result<()> {
|
struct ParsedArgs {
|
||||||
let args = args().collect::<Vec<_>>();
|
serial_device: String,
|
||||||
let serial_device = args.get(1);
|
duty_cycle: u8,
|
||||||
if serial_device.is_none() {
|
}
|
||||||
println!("Please give a serial device path as program argument");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
let serial_device = serial_device.unwrap();
|
|
||||||
|
|
||||||
let mut port = serialport::new(serial_device, 9600)
|
fn main() -> Result<()> {
|
||||||
.timeout(Duration::from_secs(3600))
|
let args = parse_args();
|
||||||
|
|
||||||
|
let mut port = serialport::new(args.serial_device, 9600)
|
||||||
|
.timeout(Duration::from_secs(1))
|
||||||
.open_native()?;
|
.open_native()?;
|
||||||
|
|
||||||
loop {
|
println!("Sending to fan controller...");
|
||||||
print!("Enter duty cycle: ");
|
let bytes_written = port.write(&[188, 92, 136, 14, 154, 39, 154, 139, args.duty_cycle])?;
|
||||||
stdout().flush()?;
|
if bytes_written != 9 {
|
||||||
let mut requested_dc = String::new();
|
bail!("Could not write enough bytes to serial device");
|
||||||
stdin().read_line(&mut requested_dc)?;
|
}
|
||||||
|
println!("Awaiting confirmation...");
|
||||||
|
|
||||||
if let Ok(duty_cycle) = u8::from_str(requested_dc.trim())
|
let response_byte = read_byte(&mut port)?;
|
||||||
&& duty_cycle <= 79
|
if response_byte == args.duty_cycle {
|
||||||
{
|
println!("Duty cycle set succesfully");
|
||||||
println!("Sending to fan controller...");
|
}
|
||||||
let bytes_written = port.write(&[188, 92, 136, 14, 154, 39, 154, 139, duty_cycle])?;
|
|
||||||
if bytes_written != 9 {
|
|
||||||
bail!("Could not write enough bytes to serial device");
|
|
||||||
}
|
|
||||||
println!("Awaiting confirmation...");
|
|
||||||
|
|
||||||
let response_byte = read_byte(&mut port)?;
|
Ok(())
|
||||||
if response_byte == duty_cycle {
|
}
|
||||||
println!("Duty cycle set succesfully");
|
|
||||||
}
|
fn parse_args() -> ParsedArgs {
|
||||||
} else {
|
let args = args().collect::<Vec<_>>();
|
||||||
println!("Invalid duty cycle, should be an integer between 0 and 79");
|
if args.len() != 3 {
|
||||||
}
|
println!("Incorrect number of arguments");
|
||||||
println!();
|
println!("Usage: kulifuli {}", "serial-device duty-cycle".italic());
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
let serial_device = args.get(1).unwrap().clone();
|
||||||
|
let requested_duty_cycle = args.get(2).unwrap();
|
||||||
|
|
||||||
|
let duty_cycle = u8::from_str(requested_duty_cycle);
|
||||||
|
if duty_cycle.is_err() {
|
||||||
|
println!("Invalid duty cycle, should be an integer between 0 and 79");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
let duty_cycle = duty_cycle.unwrap();
|
||||||
|
|
||||||
|
if duty_cycle > 79 {
|
||||||
|
println!("Invalid duty cycle, should be an integer between 0 and 79");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
ParsedArgs {
|
||||||
|
serial_device,
|
||||||
|
duty_cycle,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue