1use crate::errors::RpWebError;
2use crate::rpi::{
3 set_gpio_level_rpi,
4 GpioArcMutex,
5 reset_gpio_output_pin_rpi,
6 set_reset_on_drop_false_for_output_pin_rpi};
7use crate::settings::GpioConfig;
8use crate::utilities::{set_gpio_in_use_db, set_gpio_level_db, set_gpio_mode_db};
9use diesel::SqliteConnection;
10
11pub fn setup_rpi_and_db(
12 gpioconfig: &GpioConfig, conn: &SqliteConnection, gpio_arc_mutex: GpioArcMutex,
13) -> Result<(), RpWebError> {
14 if let Some(gpios_in_use) = &gpioconfig.gpios_in_use {
16 for idx in gpios_in_use.iter() {
17 let _ = set_gpio_in_use_db(*idx, 1, conn)?;
18 }
19 }
20
21 if let Some(gpios_mode_output) = &gpioconfig.gpios_mode_output {
23 for idx in gpios_mode_output.iter() {
24 let _ = set_gpio_mode_db(*idx, "output", conn)?;
25
26 reset_gpio_output_pin_rpi(*idx, gpio_arc_mutex.clone())?;
27 set_reset_on_drop_false_for_output_pin_rpi(*idx, gpio_arc_mutex.clone())?;
28 }
29 }
30
31 if let Some(gpios_mode_input) = &gpioconfig.gpios_mode_input {
33 for idx in gpios_mode_input.iter() {
34 let _ = set_gpio_mode_db(*idx, "input", conn)?;
35 }
36 }
37
38 if let Some(gpios_level_low) = &gpioconfig.gpios_level_low {
40 for idx in gpios_level_low.iter() {
41 let _ = set_gpio_level_rpi(*idx, "low", gpio_arc_mutex.clone())?;
42 let _ = set_gpio_level_db(*idx, "low", conn)?;
43 }
44 }
45
46 if let Some(gpios_level_high) = &gpioconfig.gpios_level_high {
48 for idx in gpios_level_high.iter() {
49 let _ = set_gpio_level_rpi(*idx, "high", gpio_arc_mutex.clone())?;
50 let _ = set_gpio_level_db(*idx, "high", conn)?;
51 }
52 }
53
54 Ok(())
55}