diff --git a/esp-config/src/bin/esp-config/main.rs b/esp-config/src/bin/esp-config/main.rs index f1ae441be..6edccfb24 100644 --- a/esp-config/src/bin/esp-config/main.rs +++ b/esp-config/src/bin/esp-config/main.rs @@ -145,7 +145,7 @@ fn parse_configs( chip_from_args: Option, config_file: Option<&str>, ) -> Result, Box> { - let config_toml_path = path.join(config_file.as_deref().unwrap_or(DEFAULT_CONFIG_PATH)); + let config_toml_path = path.join(config_file.unwrap_or(DEFAULT_CONFIG_PATH)); let config_toml_content = std::fs::read_to_string(config_toml_path)?; let config_toml = config_toml_content.as_str().parse::()?; diff --git a/esp-config/src/bin/esp-config/tui.rs b/esp-config/src/bin/esp-config/tui.rs index f034b6c06..77002cd1b 100644 --- a/esp-config/src/bin/esp-config/tui.rs +++ b/esp-config/src/bin/esp-config/tui.rs @@ -28,10 +28,10 @@ impl Item { match self { Item::TopLevel(crate_name) => crate_name.clone(), Item::CrateLevel(config_option) => { - let display_value = format_using_display_hint( - &config_option.actual_value, - &config_option.option.display_hint, - ); + let display_value = config_option + .option + .display_hint + .format_value(&config_option.actual_value); let default_indicator = if config_option.actual_value == config_option.option.default_value { ui_elements.default_value @@ -81,24 +81,11 @@ impl Item { fn display_hint(&self) -> DisplayHint { match self { Item::TopLevel(_) => unreachable!(), - Item::CrateLevel(config_option) => config_option.option.display_hint.clone(), + Item::CrateLevel(config_option) => config_option.option.display_hint, } } } -fn format_using_display_hint(value: &Value, hint: &DisplayHint) -> String { - match value { - Value::Bool(b) => b.to_string(), - Value::Integer(i) => match hint { - DisplayHint::None => format!("{}", i), - DisplayHint::Binary => format!("0b{:0b}", i), - DisplayHint::Hex => format!("0x{:x}", i), - DisplayHint::Octal => format!("0o{:o}", i), - }, - Value::String(s) => s.clone(), - } -} - impl Repository { pub fn new(options: Vec) -> Self { Self { @@ -474,11 +461,10 @@ impl App<'_> { self.handle_error(set_res); } Value::Integer(_) => { - let display_value = format_using_display_hint( - ¤t, - &self.repository.current_level()[selected] - .display_hint(), - ); + let display_value = self.repository.current_level() + [selected] + .display_hint() + .format_value(¤t); self.textarea = make_text_area(&display_value, &self.colors); self.editing_constraints = constraint; diff --git a/esp-config/src/generate/markdown.rs b/esp-config/src/generate/markdown.rs index d39656334..15ff94ea8 100644 --- a/esp-config/src/generate/markdown.rs +++ b/esp-config/src/generate/markdown.rs @@ -3,8 +3,8 @@ use std::fmt::Write; use crate::{ConfigOption, Value}; pub(crate) const DOC_TABLE_HEADER: &str = r#" -| Name | Description | Default value | Allowed value | -|------|-------------|--------------------|--------------------| +| Option | Stability | Default value | Allowed values | +|--------|:---------:|:------------------:|:-------------------:| "#; pub(crate) const SELECTED_TABLE_HEADER: &str = r#" @@ -21,11 +21,11 @@ pub(crate) fn write_doc_table_line(mut table: impl Write, name: &str, option: &C writeln!( table, - "|

{key}

{stability}

|

{description}

|
{default}
|
{allowed}
", + "|

**{key}**

{description}

| {stability} | {default} | {allowed}", description = option.description, key = name, stability = option.stability, - default = option.default_value, + default = option.display_hint.format_value(&option.default_value), allowed = allowed_values ) .unwrap(); diff --git a/esp-config/src/generate/mod.rs b/esp-config/src/generate/mod.rs index fa3c13a10..6dc9451ef 100644 --- a/esp-config/src/generate/mod.rs +++ b/esp-config/src/generate/mod.rs @@ -440,7 +440,7 @@ impl Display for Stability { } /// A display hint (for tooling only) -#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)] +#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq)] pub enum DisplayHint { /// No display hint None, @@ -455,6 +455,22 @@ pub enum DisplayHint { Octal, } +impl DisplayHint { + /// Converts a [Value] to String applying the correct display hint. + pub fn format_value(self, value: &Value) -> String { + match value { + Value::Bool(b) => b.to_string(), + Value::Integer(i) => match self { + DisplayHint::None => format!("{i}"), + DisplayHint::Binary => format!("0b{i:0b}"), + DisplayHint::Hex => format!("0x{i:X}"), + DisplayHint::Octal => format!("0o{i:o}"), + }, + Value::String(s) => s.clone(), + } + } +} + /// A configuration option. #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)] pub struct ConfigOption { diff --git a/esp-hal/esp_config.yml b/esp-hal/esp_config.yml index 639998986..f356a0c6c 100644 --- a/esp-hal/esp_config.yml +++ b/esp-hal/esp_config.yml @@ -55,6 +55,7 @@ options: validator: enumeration value: - '32' + active: 'chip == "esp32" || chip == "esp32c2"' - name: spi-address-workaround description: "Enables a workaround for the issue where SPI in