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
//! Blocking I2C API /// Blocking read pub trait Read { /// Error type type Error; /// Reads enough bytes from slave with `address` to fill `buffer` /// /// # I2C Events (contract) /// /// ``` text /// Master: ST SAD+R MAK MAK ... NMAK SP /// Slave: SAK B0 B1 ... BN /// ``` /// /// Where /// /// - `ST` = start condition /// - `SAD+R` = slave address with 8th bit set to 1 /// - `SAK` = slave acknowledge /// - `Bi` = ith byte of data /// - `MAK` = master acknowledge /// - `NMAK` = master no acknowledge /// - `SP` = stop condition fn read(&mut self, address: u8, buffer: &mut [u8]) -> Result<(), Self::Error>; } /// Blocking write pub trait Write { /// Error type type Error; /// Sends bytes to slave with address `addr` /// /// # I2C Events (contract) /// /// ``` text /// Master: ST SAD+W B0 B1 ... BN SP /// Slave: SAK SAK SAK ... SAK /// ``` /// /// Where /// /// - `ST` = start condition /// - `SAD+W` = slave address with 8th bit set to 0 /// - `SAK` = slave acknowledge /// - `Bi` = ith byte of data /// - `SP` = stop condition fn write(&mut self, addr: u8, bytes: &[u8]) -> Result<(), Self::Error>; } /// Blocking write + read pub trait WriteRead { /// Error type type Error; /// Sends bytes to slave with address `addr` and then reads enough bytes to fill `buffer` *in a /// single transaction* /// /// # I2C Events (contract) /// /// ``` text /// Master: ST SAD+W O0 O1 ... OM SR SAD+R MAK MAK ... NMAK SP /// Slave: SAK SAK SAK ... SAK SAK I0 I1 ... IN /// ``` /// /// Where /// /// - `ST` = start condition /// - `SAD+W` = slave address with 8th bit set to 0 /// - `SAK` = slave acknowledge /// - `Oi` = ith outgoing byte of data /// - `SR` = repeated start condition /// - `SAD+R` = slave address with 8th bit set to 1 /// - `Ii` = ith incoming byte of data /// - `MAK` = master acknowledge /// - `NMAK` = master no acknowledge /// - `SP` = stop condition fn write_read( &mut self, address: u8, bytes: &[u8], buffer: &mut [u8], ) -> Result<(), Self::Error>; }