From 15d255778c8100cea74a6dfaa603180210d0bcad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20H=C3=BCttel?= Date: Sun, 16 Aug 2020 12:52:16 +0200 Subject: [PATCH] Fix #1: Implement save function for calibration --- .../settings/settings-sd-card.h | 4 +++- .../reflow-controller/settings/settings.h | 4 +++- stm-firmware/settings/settings-sd-card.c | 19 ++++++++++++++++--- stm-firmware/settings/settings.c | 4 ++-- stm-firmware/shell.c | 7 +++++-- 5 files changed, 29 insertions(+), 9 deletions(-) diff --git a/stm-firmware/include/reflow-controller/settings/settings-sd-card.h b/stm-firmware/include/reflow-controller/settings/settings-sd-card.h index e59d50a..242bfac 100644 --- a/stm-firmware/include/reflow-controller/settings/settings-sd-card.h +++ b/stm-firmware/include/reflow-controller/settings/settings-sd-card.h @@ -21,8 +21,10 @@ #ifndef __SETTINGS_SETTINGS_SD_CARD_H__ #define __SETTINGS_SETTINGS_SD_CARD_H__ +#include + #define CALIBRATION_FILE_NAME "cal.toml" -int sd_card_settings_save_calibration(float sens_deviation, float offset); +int sd_card_settings_save_calibration(float sens_deviation, float offset, bool active); #endif /* __SETTINGS_SETTINGS_SD_CARD_H__ */ diff --git a/stm-firmware/include/reflow-controller/settings/settings.h b/stm-firmware/include/reflow-controller/settings/settings.h index 4197e69..484d891 100644 --- a/stm-firmware/include/reflow-controller/settings/settings.h +++ b/stm-firmware/include/reflow-controller/settings/settings.h @@ -22,12 +22,14 @@ #ifndef __SETTINGS_SETTINGS_H__ #define __SETTINGS_SETTINGS_H__ +#include + /** * @brief Save the calibration * @param sens_deviation * @param offset * @return 0 if successful, -1 if generic error, -2 if medium unavailable */ -int settings_save_calibration(float sens_deviation, float offset); +int settings_save_calibration(float sens_deviation, float offset, bool active); #endif /* __SETTINGS_SETTINGS_H__ */ diff --git a/stm-firmware/settings/settings-sd-card.c b/stm-firmware/settings/settings-sd-card.c index cb8fc8b..e798e2d 100644 --- a/stm-firmware/settings/settings-sd-card.c +++ b/stm-firmware/settings/settings-sd-card.c @@ -77,7 +77,7 @@ static int open_or_create_controller_folder(DIR *controller_folder) return ret; } -int sd_card_settings_save_calibration(float sens_deviation, float offset) +int sd_card_settings_save_calibration(float sens_deviation, float offset, bool active) { DIR folder; FIL cal_file; @@ -85,6 +85,7 @@ int sd_card_settings_save_calibration(float sens_deviation, float offset) FRESULT res; UINT bw; int ret = 0; + char buff[256]; status = open_or_create_controller_folder(&folder); f_closedir(&folder); @@ -95,9 +96,21 @@ int sd_card_settings_save_calibration(float sens_deviation, float offset) /* Create new calibration file */ res = f_open(&cal_file, CALIBRATION_FILE_NAME, FA_CREATE_ALWAYS | FA_WRITE); if (res == FR_OK) { - f_write(&cal_file, "Test", 4U, &bw); + status = snprintf(buff, sizeof(buff), "[cal]\noffset = %f\nsensdev = %f\nactive = %s\n", + offset, sens_deviation, (active ? "true" : "false")); + + if ((unsigned int)status < sizeof(buff) && status >= 0) { + f_write(&cal_file, buff, status, &bw); + if (bw == (unsigned int)status) + ret = 0; + else + ret = -3; + } else { + ret = -4; + } + f_close(&cal_file); - ret = 0; + } else { ret = -1; } diff --git a/stm-firmware/settings/settings.c b/stm-firmware/settings/settings.c index 806babc..93985cf 100644 --- a/stm-firmware/settings/settings.c +++ b/stm-firmware/settings/settings.c @@ -21,8 +21,8 @@ #include #include -settings_save_calibration(float sens_deviation, float offset) +settings_save_calibration(float sens_deviation, float offset, bool active) { /* There is no other configuration location besides the SD card (yet) */ - return sd_card_settings_save_calibration(sens_deviation, offset); + return sd_card_settings_save_calibration(sens_deviation, offset, active); } diff --git a/stm-firmware/shell.c b/stm-firmware/shell.c index 1a3226b..c2e39c9 100644 --- a/stm-firmware/shell.c +++ b/stm-firmware/shell.c @@ -415,9 +415,12 @@ static shellmatta_retCode_t shell_cmd_save_cal(const shellmatta_handle_t handle, (void)length; (void)arguments; int res; + float offset, sens_dev; + bool active; + + adc_pt1000_get_resistance_calibration(&offset, &sens_dev, &active); + res = settings_save_calibration(sens_dev, offset, active); - /* TODO: Change this */ - res = settings_save_calibration(0.0f, 0.0f); if (res) { shellmatta_printf(handle, "Error saving %d\r\n", res); } else {