Expand description
Exposes the underlying TWI device interface in a userland-safe way.
This is essentially a thread-safe wrapper around the underlying TWI
HAL. To send commands to the bus, you need to get a SerialBusClient
instance using the SerialBus::client()
method. Once you have
a client, you can issue commands using the various methods provided
by SerialBusClient
.
Only one instance of SerialBus
can exist per physical device, but there
may be multiple instances of SerialBusClient
for different client devices.
§Usage
use avr_oxide::hardware;
use avr_oxide::devices::serialbus::SerialBusClient;
#[avr_oxide::main(chip="atmega4809")]
pub fn main() {
let supervisor = avr_oxide::oxide::instance();
let bus = StaticWrap::new(OxideSerialBus::using_bus(hardware::twi::twi0::instance().mux(hardware::twi::twi0::TwiPins::MasterASlaveC).mode(InterfaceMode::I2C, PortSpeed::Fast)));
supervisor.listen(bus.borrow());
let mut i2c_device = OxideSerialBus::client(bus.borrow(), TwiAddr::addr(0xa0));
static COMMAND_BUFFER: [u8;6] = [0x00u8,0x00u8,0xdeu8,0xadu8,0xbeu8,0xefu8];
i2c_device.write_from(&COMMAND_BUFFER);