From 02b3a9a87ce6438c110a1bc5f189b3e71780b022 Mon Sep 17 00:00:00 2001 From: Andy Killorin <37423245+Speedy6451@users.noreply.github.com> Date: Fri, 14 Mar 2025 17:01:00 -0400 Subject: [PATCH] switch fast read to twos complement, as every 32bit number appears to be twos complement --- src/lib.rs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index d94d171..de043dd 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,7 @@ #![no_std] use embassy_embedded_hal::adapter::BlockingAsync; use embedded_hal_async::spi::{SpiBus, SpiDevice}; +use registers::*; #[cfg(feature = "ADIS1647x-1")] const DELTA_ANGLE_RANGE: f32 = 360.; @@ -51,8 +52,8 @@ impl ADIS16475 { Ok(()) } - /// efficiently reads multiple u32s by pipelining the spi bus - async fn read_u32_multi(&mut self, addr: [u8;N]) -> Result<[u32;N], T::Error> { + /// efficiently reads multiple i32s by pipelining the spi bus + async fn read_i32_multi(&mut self, addr: [u8;N]) -> Result<[i32;N], T::Error> { let read = |addr :u8| [(addr & 0x7F), 0]; // first address @@ -60,7 +61,7 @@ impl ADIS16475 { let mut responses = [0; N]; - let mut partial: [u16;2] = [0;2]; + let mut partial: [i16;2] = [0;2]; let mut partial_idx = 0; let mut buf: [u8;2] = [0;2]; @@ -69,19 +70,19 @@ impl ADIS16475 { let addr = addr[i/2] + (i as u8 % 2) * 2; self.bus.transfer(&mut buf, &read(addr)).await?; - partial[partial_idx] = u16::from_be_bytes(buf); + partial[partial_idx] = i16::from_be_bytes(buf); partial_idx += 1; if partial_idx == 2 { partial_idx = 0; - responses[i/2 -1] = (partial[1] as u32) << 16 + partial[0] as u32; + responses[i/2 -1] = (partial[1] as i32) << 16 + partial[0] as i32; } } // last address self.bus.read(&mut buf).await.unwrap(); - responses[addr.len() - 1] = partial[0] as u32 + (u16::from_be_bytes(buf) as u32) << 16; + responses[addr.len() - 1] = partial[0] as i32 + (i16::from_be_bytes(buf) as i32) << 16; Ok(responses) }