use crate::Error;
#[derive(Debug, PartialEq, Eq)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct UiccLink(());
impl UiccLink {
pub async fn new() -> Result<Self, Error> {
if unsafe { !nrfxlib_sys::nrf_modem_is_initialized() } {
return Err(Error::ModemNotInitialized);
}
crate::MODEM_RUNTIME_STATE.activate_uicc().await?;
Ok(Self(()))
}
pub async fn deactivate(self) -> Result<(), Error> {
core::mem::forget(self);
let result = crate::MODEM_RUNTIME_STATE.deactivate_uicc().await;
if result.is_err() {
crate::MODEM_RUNTIME_STATE.set_error_active();
}
result
}
}
impl Drop for UiccLink {
fn drop(&mut self) {
#[cfg(feature = "defmt")]
defmt::warn!(
"Turning off UICC synchronously. Use async function `deactivate` to avoid blocking and to get more guarantees that the modem is actually shut off."
);
if let Err(_e) = crate::MODEM_RUNTIME_STATE.deactivate_uicc_blocking() {
#[cfg(feature = "defmt")]
defmt::error!("Could not turn off the UICC: {}", _e);
crate::MODEM_RUNTIME_STATE.set_error_active();
}
}
}