Usage

Add afb-libcontroller as a static library to your binding

In your config.cmake file, add a dependency to the controller library, i.e:

set(PKG_REQUIRED_LIST
	json-c
	afb-binder
	afb-libcontroller --> this is the controller library dependency name.
)

Or you can also use the FIND_PACKAGE CMake command to add it.

Declare your controller config section in your binding

// CtlSectionT syntax:
// key: "section name in config file"
// loadCB: callback to process section
// handle: a void* pass to callback when processing section
static CtlSectionT ctlSections[]= {
    {.key="plugins" , .loadCB= PluginConfig, .handle= &halCallbacks},
    {.key="onload"  , .loadCB= OnloadConfig},
    {.key="halmap"  , .loadCB= MapConfigLoad},
    {.key=NULL}
};

The section count is unlimited. When declaring sections, the rules below must be followed:

  • the end of the array is marked with a section having a NULL key.
  • if more than one section have the same key, this is an error silently ignored but only the first section of that name is used.

Do the controller config parsing at binding pre-init

   // check if config file exist
    const char *dirList= getenv("CTL_CONFIG_PATH");
    if (!dirList) dirList=CONTROL_CONFIG_PATH;

    const char *configPath = CtlConfigSearch(apiHandle, dirList, "prefix");
    if(!confiPath) return -1;

    ctlConfig = CtlLoadMetaData(apiHandle, configPath);
    if (!ctlConfig) return -1;

    sts = CtlLoadSections(apiHandle, ctlConfig, ctlSections);
    if (sts < 0) return -1;

Execute the controller config during binding init

  int err = CtlConfigExec (ctlConfig);