1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#![no_std]

pub mod error;
pub mod event;
pub mod mqtt;
pub mod wifi;

pub use esp_idf_sys as sys;

use core::convert::TryFrom;
use error::{Error, EspError};
use esp_idf_sys::*;

pub fn esp_int_into_result(value: i32) -> Result<(), Error> {
    if value == 0 {
        Ok(())
    } else if let Ok(error) = EspError::try_from(value) {
        Err(Error::EspIdf { error })
    } else {
        Err(Error::EnumFromIntError { value: value })
    }
}

pub mod nvs {
    use crate::*;
    pub fn init() -> Result<(), error::Error> {
        unsafe {
            let retval = nvs_flash_init() as u32;
            if retval == ESP_ERR_NVS_NO_FREE_PAGES || retval == ESP_ERR_NVS_NEW_VERSION_FOUND {
                let retval = nvs_flash_erase();
                esp_int_into_result(retval)?;
                let retval = nvs_flash_init();
                esp_int_into_result(retval)
            } else {
                esp_int_into_result(retval as i32)
            }
        }
    }
}

pub mod tcpip {
    use crate::*;
    pub fn init() {
        unsafe {
            tcpip_adapter_init();
        }
    }
}