From bb037eefcde03a99c3cb685d2b49c652b9574347 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Jos=C3=A9=20Pereira?= Date: Wed, 11 Dec 2024 05:26:22 -0300 Subject: [PATCH 1/4] lib: Add support to navigator v2 in pi4 and navigator v1 to pi5 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Patrick José Pereira --- src/lib.rs | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index 7b5c5a12b..fbefcfc22 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -401,6 +401,74 @@ impl NavigatorBuilder { Navigator { devices } } + pub fn build_navigator_v2_pi4(self) -> Navigator { + let mut devices: Vec> = vec![ + Box::new(Ads1115Device::builder().build().unwrap()), + Box::new(Ak09915Device::builder().build().unwrap()), + Box::new(Bmp390Device::builder().build().unwrap()), + Box::new(Icm20689Device::builder().build().unwrap()), + Box::new(LeakDetector::builder().build().unwrap()), + Box::new(LedController::builder().build()), + Box::new(Pca9685Device::builder().build().unwrap()), + ]; + + let rgb_device = RgbController::builder() + .with_led_count(self.rgb_led_strip_size) + .build() + .unwrap(); + devices.push(Box::new(rgb_device)); + + Navigator { devices } + } + + pub fn build_navigator_v1_pi5(self) -> Navigator { + let gpiochip = "/dev/gpiochip4"; + let devices: Vec> = vec![ + Box::new( + Ads1115Device::builder() + .build() + .expect("Failed to create Ads1115"), + ), + Box::new( + Ak09915Device::builder() + .build() + .expect("Failed to create Ak09915"), + ), + Box::new( + Bmp280Device::builder() + .build() + .expect("Failed to create Bmp390"), + ), + Box::new( + Icm20689Device::builder() + .build() + .expect("Failed to create Icm20689"), + ), + Box::new( + LeakDetector::builder() + .with_gpiochip(gpiochip) + .build() + .expect("Failed to create LedDetector"), + ), + Box::new(LedController::builder().with_gpiochip(gpiochip).build()), + Box::new( + Pca9685Device::builder() + .with_gpiochip(gpiochip) + .with_i2c_bus("/dev/i2c-3") + .build() + .expect("Failed to create Pca9685"), + ), + Box::new( + RgbController::builder() + .with_led_count(self.rgb_led_strip_size) + .build() + .expect("Failed to create RgbController"), + ), + ]; + + Navigator { devices } + } + pub fn build_navigator_v2_pi5(self) -> Navigator { let gpiochip = "/dev/gpiochip4"; let devices: Vec> = vec![ From af8886497db4dbc5847f5d46e2553072ecedf65c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Jos=C3=A9=20Pereira?= Date: Wed, 11 Dec 2024 05:29:20 -0300 Subject: [PATCH 2/4] lib: Add expect messages to builder MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Patrick José Pereira --- src/lib.rs | 72 +++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 60 insertions(+), 12 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index fbefcfc22..da1c0d57f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -383,13 +383,37 @@ impl NavigatorBuilder { pub fn build_navigator_v1_pi4(self) -> Navigator { let mut devices: Vec> = vec![ - Box::new(Ads1115Device::builder().build().unwrap()), - Box::new(Ak09915Device::builder().build().unwrap()), - Box::new(Bmp280Device::builder().build().unwrap()), - Box::new(Icm20689Device::builder().build().unwrap()), - Box::new(LeakDetector::builder().build().unwrap()), + Box::new( + Ads1115Device::builder() + .build() + .expect("Failed to create Ads1115"), + ), + Box::new( + Ak09915Device::builder() + .build() + .expect("Failed to create Ak09915"), + ), + Box::new( + Bmp280Device::builder() + .build() + .expect("Failed to create Bmp280"), + ), + Box::new( + Icm20689Device::builder() + .build() + .expect("Failed to create Icm20689"), + ), + Box::new( + LeakDetector::builder() + .build() + .expect("Failed to create LedDetector"), + ), Box::new(LedController::builder().build()), - Box::new(Pca9685Device::builder().build().unwrap()), + Box::new( + Pca9685Device::builder() + .build() + .expect("Failed to create Pca9685"), + ), ]; let rgb_device = RgbController::builder() @@ -403,13 +427,37 @@ impl NavigatorBuilder { pub fn build_navigator_v2_pi4(self) -> Navigator { let mut devices: Vec> = vec![ - Box::new(Ads1115Device::builder().build().unwrap()), - Box::new(Ak09915Device::builder().build().unwrap()), - Box::new(Bmp390Device::builder().build().unwrap()), - Box::new(Icm20689Device::builder().build().unwrap()), - Box::new(LeakDetector::builder().build().unwrap()), + Box::new( + Ads1115Device::builder() + .build() + .expect("Failed to create Ads1115"), + ), + Box::new( + Ak09915Device::builder() + .build() + .expect("Failed to create Ak09915"), + ), + Box::new( + Bmp390Device::builder() + .build() + .expect("Failed to create Bmp390"), + ), + Box::new( + Icm20689Device::builder() + .build() + .expect("Failed to create Icm20689"), + ), + Box::new( + LeakDetector::builder() + .build() + .expect("Failed to create LedDetector"), + ), Box::new(LedController::builder().build()), - Box::new(Pca9685Device::builder().build().unwrap()), + Box::new( + Pca9685Device::builder() + .build() + .expect("Failed to create Pca9685"), + ), ]; let rgb_device = RgbController::builder() From 93e4159b5a1a0208a4093381de3dd41433af589c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Jos=C3=A9=20Pereira?= Date: Wed, 11 Dec 2024 06:41:36 -0300 Subject: [PATCH 3/4] lib: Avoid ambiguous name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Patrick José Pereira --- src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index da1c0d57f..bf0d1d816 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -17,11 +17,11 @@ mod rgb; use peripherals::*; +use crate::bmp280::Bmp280Device; +use crate::icm20689::Icm20689Device; use ads1115::Ads1115Device; use ak09915::Ak09915Device; -use bmp280::Bmp280Device; use bmp390::Bmp390Device; -use icm20689::Icm20689Device; use leak::LeakDetector; use led::LedController; use pca9685::Pca9685Device; From 5d4df278ae5b4600efc56429fac25a0aeb3b4f39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Jos=C3=A9=20Pereira?= Date: Fri, 20 Dec 2024 10:03:48 -0300 Subject: [PATCH 4/4] src: lib: Add build pattern for navigator and raspberry MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Patrick José Pereira --- src/lib.rs | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index bf0d1d816..8bfa6aa31 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -27,6 +27,22 @@ use led::LedController; use pca9685::Pca9685Device; use rgb::RgbController; +// add docs ( difference btwen boards) +#[derive(Debug, Default, Clone, Copy)] +pub enum NavigatorVersion { + #[default] + V1 = 1, + V2, +} + +// add docs ( explicit difference btwen overlays) +#[derive(Debug, Default, Clone, Copy)] +pub enum PiVersion { + #[default] + Pi4 = 4, + Pi5, +} + /// Set of available options to select ADC's channel. #[derive(Debug, Clone, Copy)] pub enum AdcChannel { @@ -101,6 +117,8 @@ impl Navigator { pub fn create() -> NavigatorBuilder { NavigatorBuilder { + navigator: Default::default(), + pi: Default::default(), rgb_led_strip_size: 1, // There is only a single LED on the board } } @@ -372,15 +390,40 @@ impl Navigator { } pub struct NavigatorBuilder { + navigator: NavigatorVersion, + pi: PiVersion, rgb_led_strip_size: usize, } impl NavigatorBuilder { + pub fn with_navigator(mut self, navigator: NavigatorVersion) -> Self { + self.navigator = navigator; + self + } + + pub fn with_pi(mut self, pi: PiVersion) -> Self { + self.pi = pi; + self + } + pub fn with_rgb_led_strip_size(mut self, size: usize) -> Self { self.rgb_led_strip_size = size; self } + pub fn build(self) -> Navigator { + match self.pi { + PiVersion::Pi4 => match self.navigator { + NavigatorVersion::V1 => self.build_navigator_v1_pi4(), + NavigatorVersion::V2 => self.build_navigator_v2_pi4(), + }, + PiVersion::Pi5 => match self.navigator { + NavigatorVersion::V1 => self.build_navigator_v1_pi5(), + NavigatorVersion::V2 => self.build_navigator_v2_pi5(), + }, + } + } + pub fn build_navigator_v1_pi4(self) -> Navigator { let mut devices: Vec> = vec![ Box::new(