1pub trait I2cApi {
2 fn i2c_write(&mut self, dev: u8, adr: u8, data: &[u8]) -> Result<I2cResult, xous::Error>;
3
4 fn i2c_read(
6 &mut self,
7 dev: u8,
8 adr: u8,
9 buf: &mut [u8],
10 repeated_start: bool,
11 ) -> Result<I2cResult, xous::Error>;
12}
13
14#[cfg_attr(feature = "derive-rkyv", derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize))]
15#[derive(Debug, PartialEq, Eq)]
16pub enum I2cTransactionType {
17 Write,
18 Read,
19 ReadRepeatedStart,
20}
21
22#[cfg_attr(feature = "derive-rkyv", derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize))]
23#[derive(Debug, PartialEq, Eq, Copy, Clone)]
24pub enum I2cResult {
25 Pending,
27 Ack(usize),
29 Nack,
31 InternalError,
33}
34#[cfg_attr(feature = "derive-rkyv", derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize))]
35#[cfg(feature = "std")]
36#[derive(Debug)]
37pub struct I2cTransaction {
38 pub i2c_type: I2cTransactionType,
39 pub device: u8,
40 pub address: u8,
41 pub data: Vec<u8>,
42 pub result: I2cResult,
43}
44
45#[cfg_attr(feature = "derive-rkyv", derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize))]
46#[cfg(feature = "std")]
47pub struct I2cTransactions {
48 pub transactions: Vec<I2cTransaction>,
49}
50#[cfg(feature = "std")]
51impl From<Vec<I2cTransaction>> for I2cTransactions {
52 fn from(value: Vec<I2cTransaction>) -> Self { Self { transactions: value } }
53}