Issue #26: Add overtemp limit setting to settings module and load it from EEPROM at startup
This commit is contained in:
		@@ -259,7 +259,7 @@ uint32_t safety_controller_get_timing_monitor_count(void);
 | 
				
			|||||||
 * @param over_temperature Over temperature to set
 | 
					 * @param over_temperature Over temperature to set
 | 
				
			||||||
 * @return 0 if successfully saved and applied, negative if error
 | 
					 * @return 0 if successfully saved and applied, negative if error
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
int safety_controller_configure_overtemp_limit(float over_temperature);
 | 
					int safety_controller_set_overtemp_limit(float over_temperature);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @brief Read the current overtemperature limit.
 | 
					 * @brief Read the current overtemperature limit.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,7 +29,7 @@ int settings_eeprom_save_calibration(float sens, float offset, bool active);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int settings_eeprom_load_calibration(float *sens, float *offset, bool *active);
 | 
					int settings_eeprom_load_calibration(float *sens, float *offset, bool *active);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int settings_eeprom_save_overtemp_limit(float overtemp_limit);
 | 
					int settings_eeprom_save_overtemp_limit(float overtemp_limit, bool active);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int settings_eeprom_load_overtemp_limit(float *overtemp_limit);
 | 
					int settings_eeprom_load_overtemp_limit(float *overtemp_limit);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -54,6 +54,10 @@ int settings_load_calibration(float *sens_dev, float *offset);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
enum settings_load_result settings_load_pid_oven_parameters(struct oven_pid_settings *settings);
 | 
					enum settings_load_result settings_load_pid_oven_parameters(struct oven_pid_settings *settings);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum settings_load_result settings_load_overtemp_limit(float *over_temp_limit);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int settings_save_overtemp_limit(float over_temp_limit, bool active);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void settings_setup(void);
 | 
					void settings_setup(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* __SETTINGS_SETTINGS_H__ */
 | 
					#endif /* __SETTINGS_SETTINGS_H__ */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -168,6 +168,8 @@ static inline void handle_boot_status(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static inline void setup_system(void)
 | 
					static inline void setup_system(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						float tmp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	setup_nvic_priorities();
 | 
						setup_nvic_priorities();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Init safety controller and safety memory */
 | 
						/* Init safety controller and safety memory */
 | 
				
			||||||
@@ -182,6 +184,11 @@ static inline void setup_system(void)
 | 
				
			|||||||
	uart_gpio_config();
 | 
						uart_gpio_config();
 | 
				
			||||||
	settings_setup();
 | 
						settings_setup();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* Load the overtemperature limit from eeprom if available. Otherwise the default value will be used */
 | 
				
			||||||
 | 
						if (settings_load_overtemp_limit(&tmp) == SETT_LOAD_SUCCESS) {
 | 
				
			||||||
 | 
							safety_controller_set_overtemp_limit(tmp);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	handle_boot_status();
 | 
						handle_boot_status();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	setup_shell_uart(&shell_uart);
 | 
						setup_shell_uart(&shell_uart);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,7 @@
 | 
				
			|||||||
#include <stm-periph/crc-unit.h>
 | 
					#include <stm-periph/crc-unit.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define EEPROM_HEADER_MAGIC 0xA5
 | 
					#define EEPROM_HEADER_MAGIC 0xC5
 | 
				
			||||||
#define EEPROM_HEADER_COMP_VER 0x01
 | 
					#define EEPROM_HEADER_COMP_VER 0x01
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const uint8_t expected_header[2] = {EEPROM_HEADER_MAGIC, EEPROM_HEADER_COMP_VER};
 | 
					static const uint8_t expected_header[2] = {EEPROM_HEADER_MAGIC, EEPROM_HEADER_COMP_VER};
 | 
				
			||||||
@@ -57,6 +57,7 @@ static bool check_eeprom_header(void)
 | 
				
			|||||||
static void settings_eeprom_zero()
 | 
					static void settings_eeprom_zero()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	settings_eeprom_save_calibration(0.0f, 0.0f, false);
 | 
						settings_eeprom_save_calibration(0.0f, 0.0f, false);
 | 
				
			||||||
 | 
						settings_eeprom_save_overtemp_limit(0.0, false);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool settings_eeprom_detect_and_prepare(void)
 | 
					bool settings_eeprom_detect_and_prepare(void)
 | 
				
			||||||
@@ -145,10 +146,17 @@ int settings_eeprom_load_calibration(float *sens, float *offset, bool *active)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int settings_eeprom_save_overtemp_limit(float overtemp_limit)
 | 
					int settings_eeprom_save_overtemp_limit(float overtemp_limit, bool active)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int res;
 | 
						int res;
 | 
				
			||||||
	struct eeprom_over_temp_config over_temp_conf_entry;
 | 
						struct eeprom_over_temp_config over_temp_conf_entry;
 | 
				
			||||||
 | 
						const uint8_t zero_vals[sizeof(over_temp_conf_entry)] = {0};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!active) {
 | 
				
			||||||
 | 
							res = spi_eeprom_write(EEPROM_OVER_TEMP_CONFIG_BASE_ADDR, (const uint8_t *)zero_vals,
 | 
				
			||||||
 | 
									 sizeof(zero_vals));
 | 
				
			||||||
 | 
							return res ? -1 : 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	over_temp_conf_entry.over_temperature = overtemp_limit;
 | 
						over_temp_conf_entry.over_temperature = overtemp_limit;
 | 
				
			||||||
	crc_unit_reset();
 | 
						crc_unit_reset();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -64,3 +64,30 @@ void settings_setup(void)
 | 
				
			|||||||
	else
 | 
						else
 | 
				
			||||||
		settings_use_eeprom = false;
 | 
							settings_use_eeprom = false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum settings_load_result settings_load_overtemp_limit(float *over_temp_limit)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int res;
 | 
				
			||||||
 | 
						float tmp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!over_temp_limit)
 | 
				
			||||||
 | 
							return SETT_LOAD_ERR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!settings_use_eeprom)
 | 
				
			||||||
 | 
							return SETT_LOAD_FILE_NOT_FOUND;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						res = settings_eeprom_load_overtemp_limit(&tmp);
 | 
				
			||||||
 | 
						if (res)
 | 
				
			||||||
 | 
							return SETT_LOAD_DISK_ERR;
 | 
				
			||||||
 | 
						*over_temp_limit = tmp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return SETT_LOAD_SUCCESS;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int settings_save_overtemp_limit(float over_temp_limit, bool active)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (settings_use_eeprom)
 | 
				
			||||||
 | 
							return settings_eeprom_save_overtemp_limit(over_temp_limit, active);
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							return -100;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user