diff --git a/source/Core/BSP/Pinecil/configuration.h b/source/Core/BSP/Pinecil/configuration.h index 7fae28b4..ce1abdbd 100644 --- a/source/Core/BSP/Pinecil/configuration.h +++ b/source/Core/BSP/Pinecil/configuration.h @@ -63,10 +63,10 @@ * OLED Brightness * */ -#define MIN_BRIGHTNESS 0 // Min OLED brightness selectable -#define MAX_BRIGHTNESS 100 // Max OLED brightness selectable -#define BRIGHTNESS_STEP 25 // OLED brightness increment -#define DEFAULT_BRIGHTNESS 25 // default OLED brightness +#define MIN_BRIGHTNESS 0 // Min OLED brightness selectable +#define MAX_BRIGHTNESS 100 // Max OLED brightness selectable +#define BRIGHTNESS_STEP 25 // OLED brightness increment +#define DEFAULT_BRIGHTNESS 25 // default OLED brightness /** * Temp change settings @@ -162,10 +162,11 @@ #define HARDWARE_MAX_WATTAGE_X10 750 #define TIP_THERMAL_MASS 65 // X10 watts to raise 1 deg C in 1 second #define TIP_RESISTANCE 75 // x10 ohms, 7.5 typical for Pinecil tips +#define CANT_DIRECT_READ_SETTINGS #endif #endif -#define FLASH_LOGOADDR (0x08000000 + (126 * 1024)) +#define FLASH_LOGOADDR (0x08000000 + (126 * 1024)) #define SETTINGS_START_PAGE (0x08000000 + (127 * 1024)) #define HAS_POWER_DEBUG_MENU diff --git a/source/Core/BSP/Pinecilv2/configuration.h b/source/Core/BSP/Pinecilv2/configuration.h index 9796af61..d7a73f9d 100644 --- a/source/Core/BSP/Pinecilv2/configuration.h +++ b/source/Core/BSP/Pinecilv2/configuration.h @@ -163,7 +163,7 @@ #define TIP_THERMAL_MASS 65 // X10 watts to raise 1 deg C in 1 second #define BLE_ENABLED #define NEEDS_VBUS_PROBE 0 - +#define CANT_DIRECT_READ_SETTINGS #endif #endif diff --git a/source/Core/Src/Settings.cpp b/source/Core/Src/Settings.cpp index 2d55db63..4cb2c29e 100644 --- a/source/Core/Src/Settings.cpp +++ b/source/Core/Src/Settings.cpp @@ -106,9 +106,20 @@ static const SettingConstants settingsConstants[(int)SettingsOptions::SettingsOp static_assert((sizeof(settingsConstants) / sizeof(SettingConstants)) == ((int)SettingsOptions::SettingsOptionsLength)); void saveSettings() { +#ifdef CANT_DIRECT_READ_SETTINGS + // For these devices flash is not 1:1 mapped, so need to read into staging buffer + systemSettingsType temp; + flash_read_buffer((uint8_t *)&temp, sizeof(systemSettingsType)); + if (memcmp((void *)&temp, (void *)&systemSettings, sizeof(systemSettingsType))) { + flash_save_buffer((uint8_t *)&systemSettings, sizeof(systemSettingsType)); + } + +#else if (memcmp((void *)SETTINGS_START_PAGE, (void *)&systemSettings, sizeof(systemSettingsType))) { flash_save_buffer((uint8_t *)&systemSettings, sizeof(systemSettingsType)); } + +#endif } bool loadSettings() { @@ -157,13 +168,12 @@ void resetSettings() { } void setSettingValue(const enum SettingsOptions option, const uint16_t newValue) { - const auto constants = settingsConstants[(int)option]; - uint16_t constrainedValue = newValue; + const auto constants = settingsConstants[(int)option]; + uint16_t constrainedValue = newValue; if (constrainedValue < constants.min) { // If less than min, constrain constrainedValue = constants.min; - } - else if (constrainedValue > constants.max) { + } else if (constrainedValue > constants.max) { // If hit max, constrain constrainedValue = constants.max; }