diff --git a/ublox-short-range/src/wifi/sta.rs b/ublox-short-range/src/wifi/sta.rs index 209bb0b..b2fc866 100644 --- a/ublox-short-range/src/wifi/sta.rs +++ b/ublox-short-range/src/wifi/sta.rs @@ -138,6 +138,17 @@ where Ok(()) } + pub fn activate(&mut self) -> Result<(), WifiConnectionError> { + self.send_internal( + &EdmAtCmdWrapper(ExecWifiStationAction { + config_id: CONFIG_ID, + action: WifiStationAction::Activate, + }), + true, + )?; + return Ok(()); + } + pub fn scan(&mut self) -> Result, WifiError> { match self.send_internal(&EdmAtCmdWrapper(WifiScan { ssid: None }), true) { Ok(resp) => resp @@ -160,25 +171,56 @@ where .unwrap_or_default() } - pub fn disconnect(&mut self) -> Result<(), WifiConnectionError> { - if let Some(con) = self.wifi_connection.take() { - match con.wifi_state { - WiFiState::Connected | WiFiState::NotConnected => { - defmt::debug!("Disconnecting from {:?}", con.network.ssid); - // con.wifi_state = WiFiState::Inactive; - self.send_internal( - &EdmAtCmdWrapper(ExecWifiStationAction { - config_id: CONFIG_ID, - action: WifiStationAction::Deactivate, - }), - true, - )?; - } - WiFiState::Inactive => {} + pub fn is_active_on_startup(&mut self) -> Result { + if let Ok(resp) = self.send_internal( + &EdmAtCmdWrapper(GetWifiStationConfig { + config_id: CONFIG_ID, + parameter: Some(WifiStationConfigParameter::ActiveOnStartup), + }), + false, + ) { + if let WifiStationConfigR::ActiveOnStartup(active) = resp.parameter { + return Ok(active == OnOff::On); } - } else { - return Err(WifiConnectionError::FailedToDisconnect); } + Err(WifiConnectionError::Illegal) + } + + pub fn get_ssid(&mut self) -> Result, WifiConnectionError> { + if let Ok(resp) = self.send_internal( + &EdmAtCmdWrapper(GetWifiStationConfig { + config_id: CONFIG_ID, + parameter: Some(WifiStationConfigParameter::SSID), + }), + false, + ) { + if let WifiStationConfigR::SSID(ssid) = resp.parameter { + return Ok(ssid); + } + }; + return Err(WifiConnectionError::Illegal); + } + + pub fn reset_config_profile(&mut self) -> Result<(), WifiConnectionError> { + self.send_internal( + &EdmAtCmdWrapper(ExecWifiStationAction { + config_id: CONFIG_ID, + action: WifiStationAction::Reset, + }), + false, + )?; + Ok(()) + } + + pub fn disconnect(&mut self) -> Result<(), WifiConnectionError> { + defmt::debug!("Disconnecting"); + self.send_internal( + &EdmAtCmdWrapper(ExecWifiStationAction { + config_id: CONFIG_ID, + action: WifiStationAction::Deactivate, + }), + true, + )?; Ok(()) } }