Add settings load function for PID parameters
This commit is contained in:
@@ -138,7 +138,7 @@ int sd_card_settings_try_load_calibration(float *sens_deviation, float *offset)
|
||||
p = config_parser_open_file(&parser, false, path, workbuff, sizeof(workbuff));
|
||||
status = 0;
|
||||
do {
|
||||
res = config_parser_get_line(p, &entry);
|
||||
res = config_parser_get_line(p, &entry, true);
|
||||
if (res == CONFIG_PARSER_OK) {
|
||||
if (!strcmp(entry.name, "offset") && entry.type == CONFIG_PARSER_TYPE_FLOAT) {
|
||||
offset_loaded = true;
|
||||
@@ -161,3 +161,58 @@ int sd_card_settings_try_load_calibration(float *sens_deviation, float *offset)
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
enum settings_load_result sd_card_settings_load_pid_oven_parameters(struct oven_pid_settings *settings)
|
||||
{
|
||||
enum settings_load_result ret = SETT_LOAD_ERR;
|
||||
const char * const file_name = SETTINGS_PID_PARAMETER_FILE;
|
||||
struct config_parser parser;
|
||||
config_parser_handle_t p;
|
||||
enum config_parser_ret parse_result;
|
||||
struct config_parser_entry entry;
|
||||
bool kp_loaded = false, kd_loaded = false, ki_loaded = false, int_max_loaded = false, t_sample = false;
|
||||
|
||||
if (!settings) {
|
||||
ret = SETT_LOAD_ERR;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
workbuff[0] = 0;
|
||||
p = config_parser_open_file(&parser, false, file_name, workbuff, sizeof(workbuff));
|
||||
if (!p)
|
||||
goto exit;
|
||||
do {
|
||||
parse_result = config_parser_get_line(p, &entry, true);
|
||||
if (parse_result == CONFIG_PARSER_OK) {
|
||||
if (!strcmp(entry.name, "kp")) {
|
||||
kp_loaded = true;
|
||||
settings->kp = entry.value.float_val;
|
||||
} else if (!strcmp(entry.name, "kd")) {
|
||||
kd_loaded = true;
|
||||
settings->kd = entry.value.float_val;
|
||||
} else if (!strcmp(entry.name, "ki")) {
|
||||
ki_loaded = true;
|
||||
settings->ki = entry.value.float_val;
|
||||
} else if (!strcmp(entry.name, "max_int")) {
|
||||
int_max_loaded = true;
|
||||
settings->max_integral = entry.value.float_val;
|
||||
} else if (!strcmp(entry.name, "sample_period")) {
|
||||
t_sample = true;
|
||||
settings->t_sample = entry.value.float_val / 1000.0f;
|
||||
}
|
||||
}
|
||||
|
||||
} while (parse_result != CONFIG_PARSER_END_REACHED &&
|
||||
parse_result != CONFIG_PARSER_GENERIC_ERR &&
|
||||
parse_result != CONFIG_PARSER_IOERR &&
|
||||
parse_result != CONFIG_PARSER_PARAM_ERR);
|
||||
|
||||
|
||||
if (kp_loaded && kd_loaded && ki_loaded && t_sample && int_max_loaded)
|
||||
ret = SETT_LOAD_SUCCESS;
|
||||
|
||||
config_parser_close_file(p);
|
||||
|
||||
exit:
|
||||
return ret;
|
||||
}
|
||||
|
@@ -31,3 +31,8 @@ int settings_load_calibration(float *sens_dev, float *offset)
|
||||
{
|
||||
return sd_card_settings_try_load_calibration(sens_dev, offset);
|
||||
}
|
||||
|
||||
enum settings_load_result settings_load_pid_oven_parameters(struct oven_pid_settings *settings)
|
||||
{
|
||||
return sd_card_settings_load_pid_oven_parameters(settings);
|
||||
}
|
||||
|
Reference in New Issue
Block a user