132 lines
4.9 KiB
Markdown
132 lines
4.9 KiB
Markdown
The configuration module maps a configuration file section to a `paramdef_t` structure array. One `config_get` call can be used to return the values of all the parameters described in the `paramdef_t` array.
|
|
Retrieving a single occurence of a parameter set ( a group in the libconfig terminology) is just a two steps task:
|
|
1. describe the parameters in a `paramdef_t` array
|
|
1. call the `config_get` function
|
|
|
|
|
|
[config_get example](../../config/devusage/addaparam.md)
|
|
|
|
|
|
In oai some parameters set may be instantiated a variable number of occurrences. In a configuration file this is mapped to lists of group of parameters, with this syntax:
|
|
```c
|
|
NB-IoT_MACRLCs =
|
|
/* start list element 1 */
|
|
(
|
|
/* start a group of parameters */
|
|
{
|
|
num_cc = 2;
|
|
.....
|
|
remote_s_portd = 55001;
|
|
}
|
|
),
|
|
/* start list element 2 */
|
|
(
|
|
/* start a group of parameters */
|
|
{
|
|
num_cc = 1;
|
|
......
|
|
remote_s_portd = 65001;
|
|
}
|
|
);
|
|
|
|
```
|
|
The configuration module provides the `config_getlist` call to support lists of group of parameters. Below is a commented code example, using the config_getlist call.
|
|
|
|
```c
|
|
/* name of section containing the list */
|
|
#define NBIOT_MACRLCLIST_CONFIG_STRING "NB-IoT_MACRLCs"
|
|
|
|
/*
|
|
The following macro define the parameters names, as used in the
|
|
configuration file
|
|
*/
|
|
#define CONFIG_STRING_MACRLC_CC "num_cc"
|
|
.....
|
|
#define CONFIG_MACRLC_S_PORTD "remote_s_portd"
|
|
|
|
/*
|
|
now define a macro which will be used to initialize the NbIoT_MacRLC_Params
|
|
variable. NbIoT_MacRLC_Params is an array of paramdef_t structure, each item
|
|
describing a parameter. When using the config_getlist call you must let the config
|
|
module allocate the memory for the parameters values.
|
|
*/
|
|
/*------------------------------------------------------------------------------------------------------------*/
|
|
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
|
/*------------------------------------------------------------------------------------------------------------*/
|
|
|
|
#define MACRLCPARAMS_DESC { \
|
|
{CONFIG_STRING_MACRLC_CC, NULL, 0, uptr:NULL, defintval:1, TYPE_UINT, 0}, \
|
|
............. \
|
|
{CONFIG_MACRLC_S_PORTD, NULL, 0, uptr:NULL, defintval:50021, TYPE_UINT, 0}, \
|
|
}
|
|
|
|
/*
|
|
the following macros define the indexes used to access the NbIoT_MacRLC_Params array
|
|
items. They must be maintained consistent with the previous MACRLCPARAMS_DESC macro
|
|
which is used to initialize the NbIoT_MacRLC_Params variable
|
|
*/
|
|
#define MACRLC_CC_IDX 0
|
|
.........
|
|
#define MACRLC_REMOTE_S_PORTD_IDX 16
|
|
|
|
|
|
|
|
void RCconfig_NbIoTmacrlc(void) {
|
|
|
|
|
|
/*
|
|
define and initialize the array of paramdef_t structures describing the groups of
|
|
parameters we want to read. It will be passed as the second argument of the
|
|
config_getlist call, which will use it as an input only argument.
|
|
*/
|
|
paramdef_t NbIoT_MacRLC_Params[] = MACRLCPARAMS_DESC;
|
|
|
|
/*
|
|
now define and initialize a paramlist_def_t structure which will be passed
|
|
to the config_getlist call. The first field is the only one to be initialized
|
|
it contains the name of the section to be read.
|
|
that section contains the list of group of parameters.
|
|
The two other fields are output parameters used to return respectively
|
|
a pointer to a two dimensional array of paramdef_t structures pointers, and the
|
|
number of items in the list of groups (size of first dimension, the second one
|
|
being the number of parameters in each group.
|
|
*/
|
|
paramlist_def_t NbIoT_MacRLC_ParamList = {NBIOT_MACRLCLIST_CONFIG_STRING,NULL,0};
|
|
|
|
|
|
/*
|
|
the config_getlist will allocate the second field of the paramlist_def_t structure, a
|
|
two dimensional array of paramdef_t pointers. In each param_def item it will allocate
|
|
the value pointer and set the value to what it will get from the config source. The
|
|
numelt field of the paramlist_def_t structure will be set to the number of groups of
|
|
parameters in the list.
|
|
in this example the last argument of config_getlist is unused, it may contain a
|
|
character string, used as a prefix for the section name. It has to be specified when the
|
|
list to be read is under another section.
|
|
*/
|
|
config_getlist( &NbIoT_MacRLC_ParamList,NbIoT_MacRLC_Params,
|
|
sizeof(NbIoT_MacRLC_Params)/sizeof(paramdef_t),
|
|
NULL);
|
|
|
|
/*
|
|
start a loop in the nuber of groups in the list, the numelt field of the
|
|
paramlist_def_t structure has been set in the config_getlist call
|
|
*/
|
|
for (j=0 ; j<NbIoT_MacRLC_ParamList.numelt ; j++) {
|
|
|
|
..........
|
|
|
|
/* access the MACRLC_REMOTE_S_PORTD parameter in the j ieme group of the list */
|
|
RC.nb_iot_mac[j]->eth_params_s.remote_portd =
|
|
*(NbIoT_MacRLC_ParamList.paramarray[j][MACRLC_REMOTE_S_PORTD_IDX].iptr);
|
|
............
|
|
|
|
} // MacRLC_ParamList.numelt > 0
|
|
}
|
|
|
|
|
|
```
|
|
|
|
[Configuration module developer main page](../../config/devusage.md)
|
|
[Configuration module home](../../config.md)
|