Start config parser
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
/* Reflow Oven Controller
|
||||
*
|
||||
* Copyright (C) 2020 Mario Hüttel <mario.huettel@gmx.net>
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file config-parser.h
|
||||
* @brief Header file for the key-value pair config parser
|
||||
* @addtogroup config-parser
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _CONFIG_PARSER_H_
|
||||
#define _CONFIG_PARSER_H_
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <fatfs/ff.h>
|
||||
|
||||
struct config_parser {
|
||||
uint32_t magic;
|
||||
bool write;
|
||||
FIL file;
|
||||
char *buffer;
|
||||
};
|
||||
|
||||
typedef void * config_parser_handle_t;
|
||||
|
||||
enum config_parser_value_type {
|
||||
CONFIG_PARSER_TYPE_UINT = 0,
|
||||
CONFIG_PARSER_TYPE_INT,
|
||||
CONFIG_PARSER_TYPE_STRING,
|
||||
CONFIG_PARSER_TYPE_FLOAT,
|
||||
};
|
||||
|
||||
enum config_parser_ret {
|
||||
CONFIG_PARSER_OK = 0,
|
||||
CONFIG_PARSER_PARAM_ERR,
|
||||
CONFIG_PARSER_GENERIC_ERR,
|
||||
CONFIG_PARSER_IOERR,
|
||||
CONFIG_PARSER_LINE_TOO_LONG,
|
||||
CONFIG_PARSER_LINE_MALFORM,
|
||||
CONFIG_PARSER_END_REACHED,
|
||||
CONFIG_PARSER_WRONG_MODE,
|
||||
};
|
||||
|
||||
struct config_parser_entry {
|
||||
const char *name;
|
||||
enum config_parser_value_type type;
|
||||
union {
|
||||
uint32_t uint_val;
|
||||
int32_t int_val;
|
||||
const char *string_val;
|
||||
float float_val;
|
||||
} value;
|
||||
};
|
||||
|
||||
config_parser_handle_t config_parser_open_file(struct config_parser *config_parser, bool write, const char *file_name,
|
||||
char *working_buffer);
|
||||
|
||||
/**
|
||||
* @brief Parse the current line in the config file.
|
||||
* @param handle Config parser handle
|
||||
* @param[out] entry Entry read from config file.
|
||||
* @warning \p entry is only valid as long as no other function was called on the same \p handle. If necessary, the values
|
||||
* have to be copied
|
||||
* @return Config parser error
|
||||
*/
|
||||
enum config_parser_ret config_parser_get_line(config_parser_handle_t handle, struct config_parser_entry *entry);
|
||||
|
||||
enum config_parser_ret config_parser_reset_to_start(config_parser_handle_t handle);
|
||||
|
||||
enum config_parser_ret config_parser_write_entry(config_parser_handle_t handle, const struct config_parser_entry *entry);
|
||||
|
||||
enum config_parser_ret config_parser_close_file(config_parser_handle_t handle);
|
||||
|
||||
#endif /* _CONFIG_PARSER_H_ */
|
||||
|
||||
/** @} */
|
Reference in New Issue
Block a user