use anyhow::{anyhow, Result}; use log::{debug, error, info, warn}; use std::{ fs::{File, OpenOptions}, io::{Read, Write}, str::from_utf8, }; fn main() -> Result<()> { pretty_env_logger::try_init()?; let mut controller_data = [0; 4]; let mut vblank = File::open("vblank")?; let mut input = OpenOptions::new().write(true).open("input")?; info!("ready"); loop { let mut data = [0; 3]; debug!("waiting for vblank"); vblank.read(&mut data)?; let str = from_utf8(&data)?; debug!("got data: {}", str); match str { "OK\n" => input.write(&controller_data)?, "BYE" => { warn!("asked to exit by the game"); return Ok(()); }, _ => { error!("got unknown FIFO data {}", str); return Err(anyhow!("unknown FIFO data received")); } }; } }