~ruther/qmk_firmware

5fab310e65f30514ec5d119af756f9a45e7e8454 — Joel Challis 1 year, 8 months ago a03de84
Implement data driven wear leveling (#21906)

* DD encoder map, wear leveling

* remove encoder map from DD

let's avoid the support headache

* wear leveling: specify the allowed drivers by name

Co-authored-by: Ryan <fauxpark@gmail.com>

* Add additional params

* Relocate under eeprom

* disable parsing

---------

Co-authored-by: Dimitris Mantzouranis <d3xter93@gmail.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
M data/mappings/info_config.hjson => data/mappings/info_config.hjson +4 -0
@@ 49,6 49,10 @@
    "DYNAMIC_KEYMAP_EEPROM_MAX_ADDR": {"info_key": "dynamic_keymap.eeprom_max_addr", "value_type": "int"},
    "DYNAMIC_KEYMAP_LAYER_COUNT": {"info_key": "dynamic_keymap.layer_count", "value_type": "int"},

    // EEPROM
    "WEAR_LEVELING_BACKING_SIZE": {"info_key": "eeprom.wear_leveling.backing_size", "value_type": "int", "to_json": false},
    "WEAR_LEVELING_LOGICAL_SIZE": {"info_key": "eeprom.wear_leveling.logical_size", "value_type": "int", "to_json": false},

    // Indicators
    "LED_CAPS_LOCK_PIN": {"info_key": "indicators.caps_lock"},
    "LED_NUM_LOCK_PIN": {"info_key": "indicators.num_lock"},

M data/mappings/info_rules.hjson => data/mappings/info_rules.hjson +1 -0
@@ 42,6 42,7 @@
    "STENO_ENABLE": {"info_key": "stenography.enabled", "value_type": "bool"},
    "STENO_PROTOCOL": {"info_key": "stenography.protocol"},
    "WAIT_FOR_USB": {"info_key": "usb.wait_for", "value_type": "bool"},
    "WEAR_LEVELING_DRIVER": {"info_key": "eeprom.wear_leveling.driver"},
    "WS2812_DRIVER": {"info_key": "ws2812.driver"},

    // Items we want flagged in lint

M data/schemas/keyboard.jsonschema => data/schemas/keyboard.jsonschema +13 -1
@@ 247,7 247,19 @@
        },
        "eeprom": {
            "properties": {
                "driver": {"type": "string"}
                "driver": {"type": "string"},
                "wear_leveling": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                        "driver": {
                            "type": "string",
                            "enum": ["custom", "embedded_flash", "legacy", "rp2040_flash", "spi_flash"]
                        },
                        "backing_size": {"$ref": "qmk.definitions.v1#/unsigned_int"},
                        "logical_size": {"$ref": "qmk.definitions.v1#/unsigned_int"}
                    }
                }
            }
        },
        "encoder": {

M docs/reference_info_json.md => docs/reference_info_json.md +7 -0
@@ 202,6 202,13 @@ Configures the [EEPROM](eeprom_driver.md) driver.
    * `driver`
        * The EEPROM backend to use. Must be one of `custom`, `i2c`, `legacy_stm32_flash`, `spi`, `transient`, `vendor`, `wear_leveling`.
        * Default: `"vendor"`
    * `wear_leveling`
        * `driver`
            * The driver to use. Must be one of `embedded_flash`, `legacy`, `rp2040_flash`, `spi_flash`, `custom`.
        * `backing_size`
            * Number of bytes used by the wear-leveling algorithm for its underlying storage, and needs to be a multiple of the logical size.
        * `logical_size`
            * Number of bytes “exposed” to the rest of QMK and denotes the size of the usable EEPROM.

## Encoder :id=encoder


Do not follow this link