rainmaker_components/wifi_prov/
softap.rs

1use crate::{
2    protocomm::{ProtocommHttpd, ProtocommSecurity},
3    utils::WrappedInArcMutex,
4    wifi::{WifiApConfig, WifiMgr},
5};
6
7use super::WiFiProvTransportTrait;
8
9#[derive(Debug, Default, Clone)]
10pub struct WiFiProvSoftApConfig {
11    pub service_name: String,
12    pub service_key: Option<String>,
13}
14
15pub struct WiFiProvTransportSoftAp {
16    pc: ProtocommHttpd,
17    wifi: WrappedInArcMutex<WifiMgr<'static>>,
18    service_name: String,
19    service_key: Option<String>,
20}
21
22impl WiFiProvTransportSoftAp {
23    pub fn new(
24        config: WiFiProvSoftApConfig,
25        sec: ProtocommSecurity,
26        wifi: WrappedInArcMutex<WifiMgr<'static>>,
27    ) -> Self {
28        let pc = ProtocommHttpd::new(
29            crate::http::HttpConfiguration {
30                port: 80,
31                ..Default::default()
32            },
33            sec,
34        );
35        Self {
36            pc,
37            service_name: config.service_name,
38            service_key: config.service_key,
39            wifi,
40        }
41    }
42}
43
44impl WiFiProvTransportTrait for WiFiProvTransportSoftAp {
45    fn start(&mut self) -> Result<(), crate::error::Error> {
46        let mut wifi_ap_config = WifiApConfig {
47            ssid: self.service_name.clone(),
48            ..Default::default()
49        };
50
51        let key = &self.service_key;
52        if key.is_some() {
53            wifi_ap_config.password = key.as_ref().unwrap().clone();
54        }
55
56        let mut wifi = self.wifi.lock().unwrap();
57        wifi.set_ap_config(wifi_ap_config).unwrap();
58        Ok(())
59    }
60
61    fn add_endpoint(&mut self, ep_name: &str, cb: crate::protocomm::ProtocommCallbackType) {
62        self.pc.register_endpoint(ep_name, cb);
63    }
64
65    fn set_version_info(&mut self, ep_name: &str, version_info: String) {
66        self.pc.set_version_info(ep_name, version_info);
67    }
68
69    fn set_security_ep(&mut self, ep_name: &str) {
70        self.pc.set_security_endpoint(ep_name);
71    }
72}