escw-mcu 0.1.0

Embedded software C wrapper of MCU.
Documentation
//! Define trait for the peripheral I2C.

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),
}