1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#[derive(Copy, Clone, Debug)]
pub enum StopBits {
One = 0,
Two = 2,
}
#[derive(Copy, Clone, Debug)]
pub enum Parity {
None = 0,
Odd = 1,
Even = 2,
}
#[derive(Copy, Clone, Debug)]
pub struct UARTParams {
pub baud_rate: u32,
pub stop_bits: StopBits,
pub parity: Parity,
pub hw_flow_control: bool,
}
#[derive(Copy, Clone, PartialEq)]
pub enum Error {
ParityError,
FramingError,
OverrunError,
RepeatCallError,
ResetError,
CommandComplete,
}
pub trait UART {
fn set_client(&self, client: &'static Client);
fn init(&self, params: UARTParams);
fn transmit(&self, tx_data: &'static mut [u8], tx_len: usize);
fn receive(&self, rx_buffer: &'static mut [u8], rx_len: usize);
}
pub trait UARTAdvanced: UART {
fn receive_automatic(&self, rx_buffer: &'static mut [u8], interbyte_timeout: u8);
fn receive_until_terminator(&self, rx_buffer: &'static mut [u8], terminator: u8);
}
pub trait Client {
fn transmit_complete(&self, tx_buffer: &'static mut [u8], error: Error);
fn receive_complete(&self, rx_buffer: &'static mut [u8], rx_len: usize, error: Error);
}