use std::thread::sleep;
use std::time::Duration;
use makcu::{Button, Device, LockTarget, Result, VERSION};
const PAUSE: Duration = Duration::from_millis(500);
fn main() -> Result<()> {
println!("=== makcu v{} — Basic Example ===\n", VERSION);
let device = Device::connect()?;
println!("Connected to: {}", device.port_name());
sleep(PAUSE);
let version = device.version()?;
println!("Firmware: {}", version);
let serial = device.serial()?;
println!("Serial: {}", serial);
sleep(PAUSE);
println!("\nMoving cursor right 80...");
device.move_xy(80, 0)?;
sleep(PAUSE);
println!("Moving cursor back...");
device.move_xy(-80, 0)?;
sleep(PAUSE);
println!("Silent move (10,10)...");
device.silent_move(10, 10)?;
sleep(PAUSE);
device.silent_move(-10, -10)?;
println!("Silent moved back");
sleep(PAUSE);
println!("\nScrolling up 3...");
device.wheel(3)?;
sleep(PAUSE);
println!("Scrolling down 3...");
device.wheel(-3)?;
sleep(PAUSE);
println!("\nLeft click (down + up)...");
device.button_down(Button::Left)?;
sleep(Duration::from_millis(50));
device.button_up(Button::Left)?;
sleep(PAUSE);
let left = device.button_state(Button::Left)?;
println!("Left button pressed: {}", left);
device.button_up_force(Button::Left)?;
println!("Left force-released");
sleep(PAUSE);
println!("\nLocking X axis...");
device.set_lock(LockTarget::X, true)?;
let locked = device.lock_state(LockTarget::X)?;
println!("X locked: {} (try moving your mouse horizontally!)", locked);
sleep(Duration::from_secs(2));
device.set_lock(LockTarget::X, false)?;
println!("X unlocked");
sleep(PAUSE);
println!("\nFire-and-forget moves...");
let ff = device.ff();
ff.move_xy(40, 0)?;
sleep(Duration::from_millis(200));
ff.move_xy(-40, 0)?;
println!("F&F moves sent (no response wait)");
sleep(PAUSE);
println!("\nButton stream (press a mouse button now!)...");
device.enable_button_stream()?;
let rx = device.button_events();
sleep(Duration::from_secs(2));
match rx.try_recv() {
Ok(mask) => println!(
"Button event: left={}, right={}, mid={}",
mask.left(),
mask.right(),
mask.middle()
),
Err(_) => println!("No button events received"),
}
device.disable_button_stream()?;
sleep(PAUSE);
let raw = device.send_raw(b"km.version()\r\n")?;
println!("\nRaw command response: {} bytes", raw.len());
sleep(PAUSE);
device.disconnect();
println!("Disconnected");
println!("\n=== Done! ===");
Ok(())
}