32 lines
889 B
Rust
32 lines
889 B
Rust
use std::io::{Cursor, Read};
|
||
use byteorder::{BigEndian, ReadBytesExt};
|
||
|
||
#[derive(Debug)]
|
||
pub(crate) struct SerialConfig {
|
||
pub port: Vec<u8>, // Port/binary(变长二进制数据)
|
||
pub baudrate: u32, // Baudrate:32
|
||
pub stopbits: u8, // Stopbits:8
|
||
pub parity: u8, // Parity:8
|
||
pub timeout: u32, // Timeout:32
|
||
}
|
||
|
||
pub(crate) fn parse_serial_config(data: &[u8]) -> std::io::Result<SerialConfig> {
|
||
let mut cursor = Cursor::new(data);
|
||
|
||
let port_len = cursor.read_u8()?;
|
||
let mut port = vec![0u8; port_len as usize];
|
||
cursor.read_exact(&mut port)?;
|
||
|
||
let baudrate = cursor.read_u32::<BigEndian>()?;
|
||
let stopbits = cursor.read_u8()?;
|
||
let parity = cursor.read_u8()?;
|
||
let timeout = cursor.read_u32::<BigEndian>()?;
|
||
|
||
Ok(SerialConfig {
|
||
port,
|
||
baudrate,
|
||
stopbits,
|
||
parity,
|
||
timeout,
|
||
})
|
||
} |