1
2#[path = "fe310/gpio.rs"] mod gpio;
5
6pub type DioInstance =u8;
7pub type DioPort =u8;
8pub type DioPinNum = u8;
9
10pub struct DioPin {
11 pub instance: DioInstance,
12 pub port: DioPort,
13 pub pin_num: DioPinNum,
14}
15
16pub enum DioLogic{
17 H,
18 L,
19}
20
21enum DioDriveStrength{
22 I10ma,
23 I20ma,
24}
25
26pub enum DioPullUp{
27 Enabled,
28 Disabled,
29}
30
31pub enum DioFuncMode{
32 Gpio,
33 Mux,
34}
35
36pub enum DioMuxFunctions{
37 Spi,
38 Pwm,
39 I2c,
40 Uart,
41}
42
43pub struct DioConfig{
44 pin: DioPin,
45 mode: DioFuncMode,
46 func: DioMuxFunctions,
47 pup: DioPullUp,
48 ds: DioDriveStrength,
49}
50
51impl DioPin {
52 pub fn setup_pin(&self) {}
53 pub fn configure_pin(&self, cfg: DioConfig){}
54
55 pub fn enable_pin_inlet(&self) {
56 gpio::enable_inlet((*self).pin_num);
57 }
58
59 pub fn enable_pin_inlet_pullup(&self) {}
60
61 pub fn enable_pin_outlet(&self) {
62 gpio::enable_outlet((*self).pin_num);
63 }
64 pub fn read_pin_inlet_state(&self) -> DioLogic{
65 let p = DioLogic::H;
66 return p;
67 }
68 pub fn read_pin_outlet_state(&self) -> DioLogic {
69 let p = DioLogic::H;
70 return p;
71 }
72 pub fn write_pin_outlet_state(&self, v: DioLogic) {
73
74 }
75 pub fn toggle_pin_outlet_state(&self) {}
76
77 pub fn set_pin_outlet_high(&self) {
78 gpio::set_high((*self).pin_num);
79 }
80
81 pub fn set_pin_outlet_low(&self) {
82 gpio::set_low((*self).pin_num);
83 }
84
85 pub fn set_pin_dir_as_in(&self) {}
86 pub fn set_pin_dir_as_out(&self) {}
87 pub fn get_pin_func_mode(&self) -> DioFuncMode {
88 let p = DioFuncMode::Gpio;
89 return p;
90 }
91
92 pub fn set_pin_func_mode(&self, mode: &DioFuncMode){
93 match mode {
94 DioFuncMode::Gpio => gpio::set_as_dio((*self).pin_num),
95 DioFuncMode::Mux => gpio::set_as_iof((*self).pin_num),
96 }
97 }
98 pub fn select_pin_iof_func(&self, s: bool){
99 gpio::select_iof_func((*self).pin_num, s);
100 }
101}