read/write registers
This commit is contained in:
parent
5f8e48674a
commit
279e31d195
1 changed files with 31 additions and 6 deletions
37
src/lib.rs
37
src/lib.rs
|
@ -1,18 +1,43 @@
|
|||
use embassy_embedded_hal::adapter::BlockingAsync;
|
||||
use embedded_hal_async::spi::SpiBus;
|
||||
use embedded_hal_async::spi::{SpiBus, SpiDevice};
|
||||
|
||||
pub struct ADIS16475<T> where T: SpiBus {
|
||||
bus: BlockingAsync<T>,
|
||||
bus: T,
|
||||
}
|
||||
|
||||
impl<T: SpiBus> ADIS16475<T> {
|
||||
pub fn new(bus: T) -> Self {
|
||||
let bus = BlockingAsync::new(bus);
|
||||
//let bus = BlockingAsync::new(bus);
|
||||
Self { bus }
|
||||
}
|
||||
|
||||
async fn read_word(&self, addr: u8) {
|
||||
let mut dat = [0;4];
|
||||
self.bus.read(&mut dat).await;
|
||||
async fn read_u16(&mut self, addr: u8) -> Result<u16, T::Error> {
|
||||
let request = [addr & 0x7F, 0];
|
||||
self.bus.write(&request).await?;
|
||||
let mut dat = [0;2];
|
||||
self.bus.read(&mut dat).await?;
|
||||
|
||||
Ok(u16::from_be_bytes(dat))
|
||||
}
|
||||
|
||||
async fn write_u8(&mut self, addr: u8, data: u8) -> Result<(), T::Error> {
|
||||
let request = [addr | 0x80, data];
|
||||
self.bus.write(&request).await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn read_u32(&mut self, addr: u8) -> Result<u32, T::Error> {
|
||||
let low = self.read_u16(addr).await? as u32;
|
||||
let high = self.read_u16(addr+2).await? as u32;
|
||||
Ok(high << 16 + low)
|
||||
}
|
||||
|
||||
async fn write_u16(&mut self, addr: u8, data: u16) -> Result<(), T::Error> {
|
||||
let data = u16::to_le_bytes(data);
|
||||
// TODO: do some soul searching
|
||||
self.write_u8(addr, data[0]).await?; // lower byte
|
||||
self.write_u8(addr+1, data[1]).await?; // higher byte
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue