rust_cryptoauthlib/
atca_iface_cfg.rs

1use super::{AtcaDeviceType, AtcaIface, AtcaIfaceCfg, AtcaIfaceI2c, AtcaIfaceType};
2use log::error;
3
4impl Default for AtcaIfaceCfg {
5    fn default() -> AtcaIfaceCfg {
6        AtcaIfaceCfg {
7            iface_type: AtcaIfaceType::AtcaUnknownIface,
8            devtype: AtcaDeviceType::AtcaDevUnknown,
9            iface: None,
10            wake_delay: 0u16,
11            rx_retries: 0i32,
12        }
13    }
14}
15
16impl Default for AtcaIface {
17    fn default() -> AtcaIface {
18        AtcaIface {
19            atcai2c: AtcaIfaceI2c::default(),
20        }
21    }
22}
23
24impl AtcaIfaceCfg {
25    pub fn set_iface_type(mut self, iface_type: String) -> AtcaIfaceCfg {
26        self.iface_type = match iface_type.as_str() {
27            "i2c" => AtcaIfaceType::AtcaI2cIface,
28            "test-interface" => AtcaIfaceType::AtcaTestIface,
29            _ => {
30                error!("Unsupported ATCA interface type {}", iface_type);
31                AtcaIfaceType::AtcaUnknownIface
32            }
33        };
34        self
35    }
36    pub fn set_devtype(mut self, devtype: String) -> AtcaIfaceCfg {
37        self.devtype = match devtype.as_str() {
38            "atecc608a" => AtcaDeviceType::ATECC608A,
39            "atecc508a" => AtcaDeviceType::ATECC508A,
40            "always-fail" => AtcaDeviceType::AtcaTestDevFail,
41            "always-success" => AtcaDeviceType::AtcaTestDevSuccess,
42            "unimplemented-fail" => AtcaDeviceType::AtcaTestDevFailUnimplemented,
43            _ => {
44                error!("Unsupported ATCA device type {}", devtype);
45                AtcaDeviceType::AtcaDevUnknown
46            }
47        };
48        self
49    }
50    pub fn set_wake_delay(mut self, wake_delay: u16) -> AtcaIfaceCfg {
51        self.wake_delay = wake_delay;
52        self
53    }
54    pub fn set_rx_retries(mut self, rx_retries: i32) -> AtcaIfaceCfg {
55        self.rx_retries = rx_retries;
56        self
57    }
58    pub fn set_iface(mut self, iface: AtcaIface) -> AtcaIfaceCfg {
59        self.iface = Some(iface);
60        self
61    }
62}
63
64impl AtcaIface {
65    pub fn set_atcai2c(mut self, atcai2c: AtcaIfaceI2c) -> AtcaIface {
66        self.atcai2c = atcai2c;
67        self
68    }
69}
70
71impl AtcaIfaceI2c {
72    pub fn set_slave_address(mut self, slave_address: u8) -> AtcaIfaceI2c {
73        self.slave_address = slave_address;
74        self
75    }
76    pub fn set_bus(mut self, bus: u8) -> AtcaIfaceI2c {
77        self.bus = bus;
78        self
79    }
80    pub fn set_baud(mut self, baud: u32) -> AtcaIfaceI2c {
81        self.baud = baud;
82        self
83    }
84}