use usbsid_pico::UsbSid;
fn main() {
env_logger::init();
let mut us = UsbSid::new();
if let Err(e) = us.init(true, true) {
eprintln!("Failed to initialise USBSID: {e}");
return;
}
let is_init = us.is_initialised();
let is_avail = us.is_available();
let is_open = us.is_open();
println!("initialised={is_init} available={is_avail} open={is_open}");
let buf = [0u8; 4];
let _ = us.single_write(&buf);
let rs = us.single_read(0x0C).unwrap_or(0);
println!("single_read(0x0C) = 0x{rs:02X}");
us.disable_thread();
let _ = us.write_buffer(&buf);
let _ = us.write(0x01, 0x01);
let _ = us.write_cycled(0x01, 0x01, 0xFFFF);
let r = us.read(0x0C).unwrap_or(0);
println!("read(0x0C) = 0x{r:02X}");
let _ = us.enable_thread();
let _ = us.write_ring_cycled(0x01, 0x01, 0xFFFF);
let _ = us.enable_thread();
us.disable_thread();
us.set_flush();
us.flush();
us.restart_ring_buffer();
us.set_buffer_size(8192);
us.set_diff_size(64);
let _ = us.restart_thread(true);
let d = us.wait_for_cycle(0xFFFF);
println!("wait_for_cycle(0xFFFF) = {d} ns");
us.set_clock_rate(985_248, true); let cr = us.get_clock_rate();
let rr = us.get_refresh_rate();
let rar = us.get_raster_rate();
let nsids = us.get_num_sids();
let nfmsid = us.get_fmopl_sid();
let pcbv = us.get_pcb_version();
println!(
"clock={cr} refresh={rr} raster={rar} sids={nsids} fmopl={nfmsid} pcb_ver={pcbv}"
);
us.set_stereo(1);
us.toggle_stereo();
us.pause();
us.mute();
us.unmute();
us.clear_bus();
us.reset_all_registers();
us.reset();
us.close();
println!("Done.");
}