diff --git a/build/build.rs b/build/build.rs index b60fb6c367c..28adb785143 100644 --- a/build/build.rs +++ b/build/build.rs @@ -32,16 +32,24 @@ struct BindgenCallbacks; impl ParseCallbacks for BindgenCallbacks { fn int_macro(&self, name: &str, _value: i64) -> Option { // Make sure the ESP_ERR_*, ESP_OK and ESP_FAIL macros are all i32. - const PREFIX: &str = "ESP_"; - const SUFFIX: &str = "ERR_"; - const SUFFIX_SPECIAL: [&str; 2] = ["OK", "FAIL"]; + if let Some(name) = name.strip_prefix("ESP_") { + if name == "OK" || name == "FAIL" || name.starts_with("ERR_") { + return Some(IntKind::I32); + } + } - let name = name.strip_prefix(PREFIX)?; - if name.starts_with(SUFFIX) || SUFFIX_SPECIAL.iter().any(|&s| name == s) { - Some(IntKind::I32) - } else { - None + None + } + + fn add_derives(&self, name: &str) -> Vec { + let mut derives = vec![]; + + // Make sure log levels can be compared. + if name == "esp_log_level_t" { + derives.push("PartialOrd".into()); } + + derives } } @@ -98,15 +106,10 @@ fn main() -> anyhow::Result<()> { .parse_callbacks(Box::new(BindgenCallbacks)) .ctypes_prefix("crate::c_types") .header(header_file.try_to_str()?) - .default_enum_style(EnumVariation::Rust { - non_exhaustive: false, - }) + .default_enum_style(EnumVariation::NewType { is_bitfield: false }) + .constified_enum_module("flags") + .constified_enum_module("http_errno") .bitfield_enum(r"esp_netif_flags(_t)?") - .constified_enum(r"adc\d?_channel_t") - .constified_enum_module("gpio_num_t") - .constified_enum_module("ip_event_t") - .constified_enum_module("wifi_event_t") - .constified_enum("touch_pad_t") .no_default("wifi_init_config_t") .blocklist_function("strtold") .blocklist_function("_strtold_r") diff --git a/src/defaults.rs b/src/defaults.rs index 5a1d8bfa081..4ed2ad9d462 100644 --- a/src/defaults.rs +++ b/src/defaults.rs @@ -31,15 +31,17 @@ impl Default for wifi_init_config_t { impl Default for esp_log_level_t { fn default() -> Self { - if CONFIG_LOG_DEFAULT_LEVEL >= esp_log_level_t::ESP_LOG_VERBOSE as _ { + let default_log_level = esp_log_level_t(CONFIG_LOG_DEFAULT_LEVEL); + + if default_log_level >= esp_log_level_t::ESP_LOG_VERBOSE { esp_log_level_t::ESP_LOG_VERBOSE - } else if CONFIG_LOG_DEFAULT_LEVEL >= esp_log_level_t::ESP_LOG_DEBUG as _ { + } else if default_log_level >= esp_log_level_t::ESP_LOG_DEBUG { esp_log_level_t::ESP_LOG_DEBUG - } else if CONFIG_LOG_DEFAULT_LEVEL >= esp_log_level_t::ESP_LOG_INFO as _ { + } else if default_log_level >= esp_log_level_t::ESP_LOG_INFO { esp_log_level_t::ESP_LOG_INFO - } else if CONFIG_LOG_DEFAULT_LEVEL >= esp_log_level_t::ESP_LOG_WARN as _ { + } else if default_log_level >= esp_log_level_t::ESP_LOG_WARN { esp_log_level_t::ESP_LOG_WARN - } else if CONFIG_LOG_DEFAULT_LEVEL >= esp_log_level_t::ESP_LOG_ERROR as _ { + } else if default_log_level >= esp_log_level_t::ESP_LOG_ERROR { esp_log_level_t::ESP_LOG_ERROR } else { esp_log_level_t::ESP_LOG_NONE