rainmaker_components/wifi_prov/
softap.rs1use 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}