1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
use std::time; use picollar::*; use apigpio::*; use apigpio::Level::*; use sequence::*; use tokio::time::delay_for; async fn transmit(pi : &Connection, pulses : &[Pulse], ms : u32) -> Result<()> { pi.wave_clear().await?; pi.wave_add_generic(&pulses).await?; println!("{}us / {}us", pi.wave_get_micros().await?, pi.wave_get_max_micros().await?); let w = pi.wave_create().await?; pi.wave_send_repeat(w).await?; delay_for(time::Duration::from_millis(ms as u64)).await; pi.wave_tx_stop().await?; pi.wave_clear().await?; pi.gpio_write(GPIO,L).await?; Ok(()) } const USAGE : &str = "usage: sync KEY CHANNEL MODE [POWER] [MS]"; async fn execute() -> Result<()> { let mut args = picollar::args::Args::new(USAGE); let _ : String = args.parse_next("argv0"); let key = args.next().unwrap_or_else(|| args.badusage("missing key")); let key = u16::from_str_radix(&key, 16) .unwrap_or_else(|e| args.badusage(&format!("bad (hex) key: {:?}", e))); let channel = args.parse_next("channel"); let mode : Mode = args.parse_next("mode"); let power = if !mode.needs_power() { 1 } else { args.parse_next("power") }; let ms = if args.len()==0 { 400 } else { args.parse_next("durationr") }; let c = Command { key, channel, mode, power }; let (pulses, desc) = mk_pulses(&c); println!("will transmit {}", desc); let pi = Connection::new().await?; transmit(&pi, &pulses, ms).await?; Ok(()) } #[tokio::main] async fn main(){ execute().await.expect("error"); }