#[cfg(not(target_arch = "wasm32"))]
use std::io;
#[cfg(not(target_arch = "wasm32"))]
use std::time::Duration;
#[cfg(not(target_arch = "wasm32"))]
use std::thread::sleep;
pub struct NotebookAdapter {
pub serial_device: String,
pub byte_sleep: f32,
pub packet_sleep: f32,
pub verbose: bool,
}
impl NotebookAdapter {
pub const BYTE_SLEEP_DEFAULT: f32 = 0.025;
pub const PACKET_SLEEP_DEFAULT: f32 = 0.25;
pub fn new(
serial_device: String,
byte_sleep: Option<f32>,
packet_sleep: Option<f32>,
verbose: bool,
) -> Self {
NotebookAdapter {
serial_device,
byte_sleep: byte_sleep.unwrap_or(Self::BYTE_SLEEP_DEFAULT),
packet_sleep: packet_sleep.unwrap_or(Self::PACKET_SLEEP_DEFAULT),
verbose,
}
}
#[cfg(not(target_arch = "wasm32"))]
pub fn write(&self, packets: &[Vec<u8>]) -> io::Result<()> {
let port = serial2::SerialPort::open(&self.serial_device, 9600)?;
for packet in packets {
for &byte in packet {
if self.verbose {
print!("{:02X} ", byte);
}
port.write(&[byte])?;
sleep(Duration::from_secs_f32(self.byte_sleep));
}
sleep(Duration::from_secs_f32(self.packet_sleep));
if self.verbose {
println!();
}
}
Ok(())
}
#[cfg(target_arch = "wasm32")]
pub fn write(&self, _packets: &[Vec<u8>]) -> Result<(), &'static str> {
Err("Serial port functionality is not available in WebAssembly")
}
}
#[cfg(test)]
mod tests {
}