raspberry_web/
setup.rs

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    // Should be set to 1
15    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    // Should be set to OUTPUT
22    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    // Should be set to INPUT
32    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    // Should be set to LOW
39    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    // Should be set to HIGH
47    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}