diff --git a/pico_keyer.cpp b/pico_keyer.cpp index c70877b..705a5f1 100644 --- a/pico_keyer.cpp +++ b/pico_keyer.cpp @@ -20,8 +20,6 @@ int main() settings.mode = Mode::IAMBIC_A; settings.wpm = 25; - //store_settings(settings); - Settings newSettings{read_settings()}; printf("Iambic mode (loaded): %d\n", static_cast(newSettings.mode)); diff --git a/settings.cpp b/settings.cpp index 9d9f2e9..ea69a3a 100644 --- a/settings.cpp +++ b/settings.cpp @@ -34,12 +34,37 @@ void store_settings(Settings &settings) sleep_ms(250); gpio_put(LED_PIN, 0); sleep_ms(250); + gpio_put(LED_PIN, 1); + sleep_ms(250); + gpio_put(LED_PIN, 0); + sleep_ms(250); } } Settings read_settings() { Settings settings; + memcpy(&settings, flash_target_contents, sizeof(struct Settings)); + + if(settings.magic_number != MAGIC_NUMBER) { + settings = Settings(); + + gpio_put(LED_PIN, 1); + sleep_ms(1000); + gpio_put(LED_PIN, 0); + sleep_ms(250); + gpio_put(LED_PIN, 1); + sleep_ms(1000); + gpio_put(LED_PIN, 0); + sleep_ms(250); + gpio_put(LED_PIN, 1); + sleep_ms(1000); + gpio_put(LED_PIN, 0); + sleep_ms(250); + } + + store_settings(settings); + return settings; } \ No newline at end of file diff --git a/settings.h b/settings.h index ce0b95f..e1f5e62 100644 --- a/settings.h +++ b/settings.h @@ -3,6 +3,8 @@ #include +const uint16_t MAGIC_NUMBER = 2; + enum class Mode : uint8_t { IAMBIC_A = 0, @@ -12,9 +14,10 @@ enum class Mode : uint8_t struct Settings { - Mode mode{Mode::IAMBIC_B}; // Byte 1 - uint8_t wpm{20}; // Byte 2 - uint8_t dummy[FLASH_PAGE_SIZE - 2]{0}; // Fill up to next flash page size boundary + uint16_t magic_number; // Bytes: 2 + Mode mode{Mode::IAMBIC_B}; // Bytes: 1 + uint8_t wpm{20}; // Bytes: 1 + uint8_t dummy[FLASH_PAGE_SIZE - 4]{0}; // Sum : 4 }; void store_settings(Settings &settings);