#![allow(clippy::uninlined_format_args)]
#![allow(clippy::let_unit_value)]
use pokeys_lib::*;
use std::thread;
use std::time::Duration;
fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
println!("๐ Configuration Loader Example");
println!("===============================");
let device_count = enumerate_usb_devices()?;
if device_count == 0 {
return Err("No PoKeys devices found! Please connect a device and try again.".into());
}
println!("โ
Found {} device(s)", device_count);
let mut device = connect_to_device(0)?;
let _device_info = device.get_device_data()?;
println!("๐ฑ Connected to device");
apply_basic_configuration(&mut device)?;
test_device_functions(&mut device)?;
cleanup_device(&mut device)?;
println!("โ
Example completed successfully!");
Ok(())
}
fn apply_basic_configuration(
device: &mut PoKeysDevice,
) -> std::result::Result<(), Box<dyn std::error::Error>> {
println!("\n๐ง Applying configuration...");
device.set_pin_function(1, PinFunction::DigitalInput)?; device.set_pin_function(3, PinFunction::DigitalOutput)?; device.set_pin_function(4, PinFunction::DigitalOutput)?; device.set_digital_output(3, false)?;
device.set_digital_output(4, false)?;
device.set_pwm_period(20000)?; device.enable_pwm_for_pin(22, true)?; println!(" Pin 22: PWM Output (Servo Control)");
println!("โ
Configuration applied");
Ok(())
}
fn test_device_functions(
device: &mut PoKeysDevice,
) -> std::result::Result<(), Box<dyn std::error::Error>> {
println!("\n๐ฎ Testing device functions...");
for i in 0..10 {
let button = device.get_digital_input(1)?;
device.set_digital_output(3, button || i % 2 == 0)?;
device.set_digital_output(4, !button && i % 3 == 0)?;
let duty = (i * 10) % 100;
device.set_pwm_duty_cycle_for_pin(22, duty as u32)?;
if button {
println!(" Button pressed! LEDs responding...");
}
thread::sleep(Duration::from_millis(500));
}
Ok(())
}
fn cleanup_device(
device: &mut PoKeysDevice,
) -> std::result::Result<(), Box<dyn std::error::Error>> {
println!("\n๐งน Cleaning up...");
device.set_digital_output(3, false)?;
device.set_digital_output(4, false)?;
device.set_pwm_duty_cycle_for_pin(22, 0)?;
println!("โ
Cleanup complete");
Ok(())
}