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
86
87
88
89
90
91
92
93
94
use super::{AtcaDeviceType, AtcaIface, AtcaIfaceCfg, AtcaIfaceI2c, AtcaIfaceType};
use log::error;

impl Default for AtcaIfaceCfg {
    fn default() -> AtcaIfaceCfg {
        AtcaIfaceCfg {
            iface_type: AtcaIfaceType::AtcaUnknownIface,
            devtype: AtcaDeviceType::AtcaDevUnknown,
            iface: None,
            wake_delay: 0u16,
            rx_retries: 0i32,
        }
    }
}

impl Default for AtcaIface {
    fn default() -> AtcaIface {
        AtcaIface {
            atcai2c: AtcaIfaceI2c::default(),
        }
    }
}

impl Default for AtcaIfaceI2c {
    fn default() -> AtcaIfaceI2c {
        AtcaIfaceI2c {
            slave_address: 0u8,
            bus: 0u8,
            baud: 0u32,
        }
    }
}

impl AtcaIfaceCfg {
    pub fn set_iface_type(mut self, iface_type: String) -> AtcaIfaceCfg {
        self.iface_type = match iface_type.as_str() {
            "i2c" => AtcaIfaceType::AtcaI2cIface,
            "test-interface" => AtcaIfaceType::AtcaTestIface,
            _ => {
                error!("Unsupported ATCA interface type {}", iface_type);
                AtcaIfaceType::AtcaUnknownIface
            }
        };
        self
    }
    pub fn set_devtype(mut self, devtype: String) -> AtcaIfaceCfg {
        self.devtype = match devtype.as_str() {
            "atecc608a" => AtcaDeviceType::ATECC608A,
            "atecc508a" => AtcaDeviceType::ATECC508A,
            "always-fail" => AtcaDeviceType::AtcaTestDevFail,
            "always-success" => AtcaDeviceType::AtcaTestDevSuccess,
            "unimplemented-fail" => AtcaDeviceType::AtcaTestDevFailUnimplemented,
            _ => {
                error!("Unsupported ATCA device type {}", devtype);
                AtcaDeviceType::AtcaDevUnknown
            }
        };
        self
    }
    pub fn set_wake_delay(mut self, wake_delay: u16) -> AtcaIfaceCfg {
        self.wake_delay = wake_delay;
        self
    }
    pub fn set_rx_retries(mut self, rx_retries: i32) -> AtcaIfaceCfg {
        self.rx_retries = rx_retries;
        self
    }
    pub fn set_iface(mut self, iface: AtcaIface) -> AtcaIfaceCfg {
        self.iface = Some(iface);
        self
    }
}

impl AtcaIface {
    pub fn set_atcai2c(mut self, atcai2c: AtcaIfaceI2c) -> AtcaIface {
        self.atcai2c = atcai2c;
        self
    }
}

impl AtcaIfaceI2c {
    pub fn set_slave_address(mut self, slave_address: u8) -> AtcaIfaceI2c {
        self.slave_address = slave_address;
        self
    }
    pub fn set_bus(mut self, bus: u8) -> AtcaIfaceI2c {
        self.bus = bus;
        self
    }
    pub fn set_baud(mut self, baud: u32) -> AtcaIfaceI2c {
        self.baud = baud;
        self
    }
}