58 lines
1.3 KiB
Rust
58 lines
1.3 KiB
Rust
use embedded_hal::i2c::{ErrorKind, ErrorType, I2c, Operation, SevenBitAddress};
|
|
use log::trace;
|
|
use std::fmt::{Display, Formatter};
|
|
|
|
#[derive(Debug)]
|
|
pub struct SimMcp23017 {}
|
|
|
|
impl SimMcp23017 {
|
|
pub fn new() -> Self {
|
|
trace!("SimMcp23017::new()");
|
|
Self {}
|
|
}
|
|
}
|
|
|
|
#[derive(Debug)]
|
|
pub struct ErrorWrapper(anyhow::Error);
|
|
|
|
impl embedded_hal::i2c::Error for ErrorWrapper {
|
|
fn kind(&self) -> ErrorKind {
|
|
ErrorKind::Other
|
|
}
|
|
}
|
|
|
|
impl Display for ErrorWrapper {
|
|
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
|
self.0.fmt(f)
|
|
}
|
|
}
|
|
|
|
impl std::error::Error for ErrorWrapper {}
|
|
|
|
impl ErrorType for SimMcp23017 {
|
|
type Error = ErrorWrapper;
|
|
}
|
|
|
|
impl I2c for SimMcp23017 {
|
|
fn transaction(
|
|
&mut self,
|
|
address: SevenBitAddress,
|
|
operations: &mut [Operation<'_>],
|
|
) -> Result<(), Self::Error> {
|
|
trace!(
|
|
"SimMcp23017::transaction(self: {self:?}, address: {address}, operations: {operations:?})"
|
|
);
|
|
for operation in operations {
|
|
match operation {
|
|
Operation::Write(_write_buffer) => {
|
|
// Ignore incoming write operations
|
|
}
|
|
Operation::Read(_read_buffer) => {
|
|
todo!("SimMcp23017 read")
|
|
}
|
|
}
|
|
}
|
|
Ok(())
|
|
}
|
|
}
|