use crate::common::{AsyncKind, Result};
pub trait I2c {
type I2cNo;
fn new(i2c: Self::I2cNo, role: I2cRole) -> Self;
fn with_event(&mut self, event: fn());
fn is_device_ready(&self, device: u16, trials: u32, timeout: u32) -> Result<()>;
fn send(&self, data: &[u8], timeout: u32) -> Result<()>;
fn receive(&self, device: u16, data: &mut [u8], timeout: u32) -> Result<()>;
fn memory_write(
&self,
device: u16,
address: I2cAddress,
data: &[u8],
timeout: u32,
) -> Result<()>;
fn async_send(&self, kind: AsyncKind, data: &[u8], timeout: u32) -> Result<()>;
fn async_receive(
&self,
kind: AsyncKind,
device: u16,
data: &mut [u8],
timeout: u32,
) -> Result<()>;
fn async_memory_write(
&self,
kind: AsyncKind,
device: u16,
address: I2cAddress,
data: &[u8],
timeout: u32,
) -> Result<()>;
fn abort_async(&self, device: u16) -> Result<()>;
}
pub enum I2cRole {
Master,
Slave,
}
pub enum I2cAddress {
One(u8),
Double(u16),
}