/* Reflow Oven Controller * * Copyright (C) 2021 Mario Hüttel * * This file is part of the Reflow Oven Controller Project. * * The reflow oven controller is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * The Reflow Oven Control Firmware is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the reflow oven controller project. * If not, see . */ #ifndef __CONFIG_PARSER_TEMP_PROFILE_PARSER_H__ #define __CONFIG_PARSER_TEMP_PROFILE_PARSER_H__ #include #include enum pl_command_type { PL_PID_CONF = 0, PL_SET_TEMP, PL_SET_RAMP, PL_WAIT_FOR_TEMP, PL_WAIT_FOR_TIME, PL_LOUDSPEAKER_SET, PL_OFF, PL_CLEAR_FLAGS, _PL_NUM_CMDS, }; enum pl_ret_val { PL_RET_SUCCESS = 0, PL_RET_DISK_ERR, PL_RET_PARAM_ERR, PL_RET_LIST_FULL, PL_RET_SCRIPT_ERR, }; #define PROFILE_LANG_MAX_NUM_ARGS (8) struct pl_command { enum pl_command_type cmd; float params[PROFILE_LANG_MAX_NUM_ARGS]; }; /** * @brief Parse a temperature profile from file and generate the command list * * Commands are parsed into the list given by \p command_list. If \p max_len is reached, * the function returns with @ref PL_RET_LIST_FULL * * In any case, the command list not cleared afterwards. The user has to clear the command list manually * using @ref temp_profile_free_command_list. * * @param filename File to parse * @param[in, out] command_list Command list to output @ref pl_command elements in. * @param max_len maximum number of commands. * @param cmds_parsed Number of parsed commands * @return */ enum pl_ret_val temp_profile_parse_from_file(const char *filename, SlList **command_list, uint32_t max_len, uint32_t *cmds_parsed); /** * @brief Fully free a comamnd list including hte sotred command structures. * * \p list's destination is set to NULL to indicate the empty list. * * @param[in, out] list Pointer to list. */ void temp_profile_free_command_list(SlList **list); #endif /* __CONFIG_PARSER_TEMP_PROFILE_PARSER_H__ */