pokeys_lib/protocols/
uart.rs1use crate::device::PoKeysDevice;
4use crate::error::{PoKeysError, Result};
5
6impl PoKeysDevice {
8 pub fn uart_configure(
10 &mut self,
11 baud_rate: u32,
12 data_bits: u8,
13 stop_bits: u8,
14 parity: u8,
15 ) -> Result<()> {
16 self.send_request(
17 0xD0,
18 (baud_rate & 0xFF) as u8,
19 ((baud_rate >> 8) & 0xFF) as u8,
20 data_bits,
21 stop_bits,
22 )?;
23
24 self.send_request(0xD1, parity, 0, 0, 0)?;
25 Ok(())
26 }
27
28 pub fn uart_write(&mut self, data: &[u8]) -> Result<()> {
30 if data.len() > 60 {
31 return Err(PoKeysError::Parameter("UART data too long".to_string()));
32 }
33
34 self.send_request(0xD2, data.len() as u8, 0, 0, 0)?;
35 Ok(())
37 }
38
39 pub fn uart_read(&mut self) -> Result<Vec<u8>> {
41 let response = self.send_request(0xD3, 0, 0, 0, 0)?;
42
43 let mut data = Vec::new();
44 if response.len() > 8 {
45 let data_len = response[8] as usize;
46 if response.len() >= 9 + data_len {
47 data.extend_from_slice(&response[9..9 + data_len]);
48 }
49 }
50
51 Ok(data)
52 }
53
54 pub fn uart_status(&mut self) -> Result<(u8, u8)> {
56 let response = self.send_request(0xD4, 0, 0, 0, 0)?;
57 Ok((response[8], response[9])) }
59}