/* Reflow Oven Controller * * Copyright (C) 2020 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 . */ /** * @addtogroup config-parser * @{ */ #include #include #include #define CONFIG_PARSER_MAGIC 0x464a6e2bUL #define CONFIG_PARSER(p) ((struct config_parser *)(p)) #define config_parser_check_handle(handle) do { if (!(handle) || \ ((struct config_parser *)(handle))->magic != CONFIG_PARSER_MAGIC) \ return CONFIG_PARSER_PARAM_ERR; \ } while (0) config_parser_handle_t config_parser_open_file(struct config_parser *config_parser, bool write, const char *file_name, char *working_buffer) { FRESULT res; if (!config_parser || !file_name || !working_buffer) return NULL; config_parser->magic = CONFIG_PARSER_MAGIC; config_parser->write = write; config_parser->buffer = working_buffer; res = f_open(&config_parser->file, file_name, (write ? FA_CREATE_ALWAYS | FA_WRITE : FA_READ)); if (res != FR_OK) return NULL; return (config_parser_handle_t)config_parser; } enum config_parser_ret config_parser_get_line(config_parser_handle_t handle, struct config_parser_entry *entry) { (void)entry; config_parser_check_handle(handle); return CONFIG_PARSER_OK; } enum config_parser_ret config_parser_reset_to_start(config_parser_handle_t handle) { FRESULT res; struct config_parser *p; config_parser_check_handle(handle); p = CONFIG_PARSER(handle); res = f_rewind(&p->file); if (res != FR_OK) return CONFIG_PARSER_IOERR; return CONFIG_PARSER_OK; } enum config_parser_ret config_parser_write_entry(config_parser_handle_t handle, const struct config_parser_entry *entry) { (void)entry; config_parser_check_handle(handle); return CONFIG_PARSER_OK; } enum config_parser_ret config_parser_close_file(config_parser_handle_t handle) { struct config_parser *p; FRESULT res; config_parser_check_handle(handle); p = CONFIG_PARSER(handle); res = f_close(&p->file); return (res == FR_OK ? CONFIG_PARSER_OK : CONFIG_PARSER_IOERR); } /** @} */