Skip to main content

RegisterBus

Trait RegisterBus 

Source
pub trait RegisterBus {
    type Error;

    // Required methods
    fn read_registers(
        &mut self,
        first: u8,
        buffer: &mut [u8],
    ) -> Result<(), Self::Error>;
    fn write_register(
        &mut self,
        register: u8,
        value: u8,
    ) -> Result<(), Self::Error>;

    // Provided method
    fn read_register(&mut self, register: u8) -> Result<u8, Self::Error> { ... }
}
Expand description

A part’s register map reached over some bus.

§Examples

use pamoja_hal::script::{I2cScript, I2cStep};
use pamoja_sensors::bme280::{register, CHIP_ID, I2C_ADDRESS_PRIMARY, RESET_WORD};
use pamoja_sensors::driver::{I2cRegisters, RegisterBus};

// A BME280 answers its chip id, then takes the word that resets it.
const PART: u8 = I2C_ADDRESS_PRIMARY;
let script = I2cScript::new([
    I2cStep::write_read(PART, [register::CHIP_ID], [CHIP_ID]),
    I2cStep::write(PART, [register::RESET, RESET_WORD]),
]);
let mut part = I2cRegisters::new(script, PART);
assert_eq!(part.read_register(register::CHIP_ID)?, CHIP_ID);
part.write_register(register::RESET, RESET_WORD)?;
assert!(part.release().done());

Required Associated Types§

Source

type Error

The error the bus underneath reports.

Required Methods§

Source

fn read_registers( &mut self, first: u8, buffer: &mut [u8], ) -> Result<(), Self::Error>

Reads consecutive registers starting at first, as many as buffer holds.

§Arguments
  • first - the address of the first register.
  • buffer - where the register values go, one byte per register.
§Errors

Returns the bus error if the part does not answer.

Source

fn write_register(&mut self, register: u8, value: u8) -> Result<(), Self::Error>

Writes one register.

§Arguments
  • register - the register address.
  • value - the byte to write.
§Errors

Returns the bus error if the part does not answer.

Provided Methods§

Source

fn read_register(&mut self, register: u8) -> Result<u8, Self::Error>

Reads one register.

§Arguments
  • register - the register address.
§Returns

The register’s byte.

§Errors

Returns the bus error if the part does not answer.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§

Source§

impl<I2C: I2c> RegisterBus for I2cRegisters<I2C>

Source§

type Error = <I2C as ErrorType>::Error

Source§

impl<SPI: SpiDevice> RegisterBus for SpiRegisters<SPI>

Source§

type Error = <SPI as ErrorType>::Error