/*********************************************************************************
|
* Copyright: (C) 2018 LingYun IoT System Studio
|
* All rights reserved.
|
*
|
* Filename: iotd_conf.c
|
* Description: This file is for iotd configure file parser API
|
*
|
* Version: 1.0.0(2018年11月20日)
|
* Author: Guo Wenxue <guowenxue@gmail.com>
|
* ChangeLog: 1, Release initial version on "2018年11月20日 12时11分46秒"
|
*
|
********************************************************************************/
|
#include "iotd_conf.h"
|
#include "cp_iniparser.h"
|
|
int parser_iotd_conf(char *conf_file, iotd_conf_t *iotd_conf)
|
{
|
dictionary *ini;
|
char *str;
|
int data;
|
logger_t *logger;
|
nbiot_conf_t *nbiot;
|
lora_conf_t *lora;
|
mqtt_conf_t *mqtt;
|
|
|
if(!conf_file || !iotd_conf )
|
{
|
log_err("Invalid input arguments\n");
|
return -1;
|
}
|
|
ini = iniparser_load(conf_file);
|
if (ini==NULL)
|
{
|
log_err("cannot parse file: %s\n", conf_file);
|
return -2 ;
|
}
|
|
memset(iotd_conf, 0, sizeof(*iotd_conf));
|
logger = &iotd_conf->logger;
|
nbiot = &iotd_conf->nbiot_conf;
|
lora = &iotd_conf->lora_conf;
|
mqtt = &iotd_conf->mqtt_conf;
|
|
/*+----------------------------------+
|
| Program logger configuration |
|
+----------------------------------+*/
|
|
str = iniparser_getstring(ini, "log:file", NULL);
|
strncpy(logger->file, (strlen(str)>0 ? str : DEF_LOG_FILE), FILENAME_LEN);
|
log_nrml("Set log file [%s] from configuration.\n", logger->file);
|
|
/* If not set the log level from command line, then use the configure one*/
|
if( !(logger->flag&CP_LOGGER_LEVEL_OPT) )
|
{
|
logger->level = iniparser_getint(ini, "log:level", LOG_LEVEL_NRML);
|
log_nrml("Set log level[%d] from configuration.\n", logger->level);
|
}
|
|
/* Set the log maximum file size in the configure file */
|
logger->size = iniparser_getint(ini, "log:size", DEF_LOG_MAXSIZE);
|
logger->size = logger->size>DEF_LOG_MAXSIZE ? DEF_LOG_MAXSIZE : logger->size;
|
log_nrml("Set log size [%dKiB] from configuration\n", logger->size);
|
|
|
/*+----------------------------------+
|
| NB-IoT Module configuration |
|
+----------------------------------+*/
|
|
data = iniparser_getint(ini, "nbiot:enable", 0);
|
nbiot->enable = data? ENABLE : DISABLE;
|
log_nrml("Confiugre NB-IoT thread [%s]\n", nbiot->enable ? "enable" : "disable");
|
|
str = iniparser_getstring(ini, "nbiot:comport", NULL);
|
if( NULL!=str && strlen(str) > 0 )
|
{
|
strncpy(nbiot->comport, str, sizeof(nbiot->comport));
|
}
|
else
|
{
|
log_err("Configure without NB-IoT comport device, thread will not start\n");
|
nbiot->enable = DISABLE;
|
}
|
log_nrml("Configure NB-IoT comport device as '%s'\n", lora->comport);
|
|
nbiot->baudrate = iniparser_getint(ini, "nbiot:baudrate", 9600);
|
log_nrml("Configure NB-IoT comport baudrate as '%d'\n", nbiot->baudrate);
|
|
str = iniparser_getstring(ini, "nbiot:settings", "8N1N");
|
if( NULL!=str && strlen(str) >= 4 )
|
{
|
strncpy(nbiot->settings, str, 4);
|
log_nrml("Configure NB-IoT comport settings as '%s'\n", nbiot->settings);
|
}
|
else
|
{
|
log_err("Configure Invalid NB-IoT comport settings '%s', thread will not start.\n", str);
|
nbiot->enable = DISABLE;
|
}
|
|
|
/*+----------------------------------+
|
| LoRa Module configuration |
|
+----------------------------------+*/
|
|
data = iniparser_getint(ini, "lora:enable", 0);
|
lora->enable = data? ENABLE : DISABLE;
|
log_nrml("Confiugre LoRa thread [%s]\n", lora->enable ? "enable" : "disable");
|
|
str = iniparser_getstring(ini, "lora:comport", NULL);
|
if( NULL!=str && strlen(str) > 0 )
|
{
|
strncpy(lora->comport, str, sizeof(lora->comport));
|
}
|
else
|
{
|
log_err("Configure without LoRa comport device, thread will not start\n");
|
lora->enable = DISABLE;
|
}
|
log_nrml("Configure LoRa comport device as '%s'\n", lora->comport);
|
|
lora->baudrate = iniparser_getint(ini, "lora:baudrate", 115200);
|
log_nrml("Configure LoRa comport baudrate as '%d'\n", lora->baudrate);
|
|
str = iniparser_getstring(ini, "lora:settings", "8N1N");
|
if( NULL!=str && strlen(str) >= 4 )
|
{
|
strncpy(lora->settings, str, 4);
|
log_nrml("Configure LoRa comport settings as '%s'\n", lora->settings);
|
}
|
else
|
{
|
log_err("Configure Invalid LoRa comport settings '%s', thread will not start.\n", str);
|
lora->enable = DISABLE;
|
}
|
|
|
/*+----------------------------------+
|
| MQTT Server configuration |
|
+----------------------------------+*/
|
|
data = iniparser_getint(ini, "mqtt:enable", 0);
|
mqtt->enable = data? ENABLE : DISABLE;
|
log_nrml("Confiugre MQTT thread [%s]\n", lora->enable ? "enable" : "disable");
|
|
str = iniparser_getstring(ini, "mqtt:hostname", NULL);
|
if( !str || strlen(str) <= 0 )
|
{
|
log_err("Configure MQTT Server hostname invalid, thread will not start\n");
|
mqtt->enable = DISABLE;
|
}
|
strncpy(mqtt->hostname, str, HOSTN_LEN);
|
log_nrml("Configure MQTT Server hostname: \"%s\" \n", mqtt->hostname);
|
|
data = iniparser_getint(ini, "mqtt:port", 0);
|
if( !data )
|
{
|
log_err("Configure MQTT Server port invalid, thread will not start\n");
|
mqtt->enable = DISABLE;
|
}
|
mqtt->port = data;
|
log_nrml("Configure MQTT Server port: [%d]\n", mqtt->port);
|
|
|
|
iniparser_freedict(ini);
|
|
return 0;
|
}
|