hal/
dio.rs

1
2//! # Digital IO Abstraction
3
4#[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}