mirror of
https://github.com/djhackersdev/bemanitools.git
synced 2026-08-22 16:34:01 -05:00
feat(bt-module): Add optional “configurable” interface to bt io modules
This solves the problem have requiring nested configuration for several IO modules in bemanitools, e.g. com port configuration for p3io. Don’t make this a part of the specific IO API, e.g. iidxio, to keep the IO interface clean and independent of bemanitools. Any bemanitools functionality is composed as separate interfaces into a final module. This concept was already applied to all modules with providing the API vtables for threads, log and config.
This commit is contained in:
20
src/api/io.h
Normal file
20
src/api/io.h
Normal file
@@ -0,0 +1,20 @@
|
||||
#ifndef BT_API_IO_H
|
||||
#define BT_API_IO_H
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "api/core/config.h"
|
||||
|
||||
typedef bool (*bt_io_configure_t)(const bt_core_config_t *config);
|
||||
|
||||
typedef struct bt_io_api {
|
||||
uint16_t version;
|
||||
|
||||
struct {
|
||||
// Optional
|
||||
bt_io_configure_t configure;
|
||||
} v1;
|
||||
} bt_hook_api_t;
|
||||
|
||||
#endif
|
||||
8
src/main/module/configure.h
Normal file
8
src/main/module/configure.h
Normal file
@@ -0,0 +1,8 @@
|
||||
#ifndef MODULE_CONFIGURE_H
|
||||
#define MODULE_CONFIGURE_H
|
||||
|
||||
#include "api/core/config.h"
|
||||
|
||||
typedef bool (*bt_module_configure_do_t)(const bt_core_config_t *config);
|
||||
|
||||
#endif
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "iface-core/log.h"
|
||||
|
||||
#include "main/module/core.h"
|
||||
#include "main/module/configure.h"
|
||||
#include "main/module/io.h"
|
||||
#include "main/module/module.h"
|
||||
|
||||
@@ -21,6 +22,7 @@ struct module_io {
|
||||
bt_module_core_config_api_set_t core_config_api_set;
|
||||
bt_module_core_log_api_set_t core_log_api_set;
|
||||
bt_module_core_thread_api_set_t core_thread_api_set;
|
||||
bt_module_configure_do_t configure_do;
|
||||
|
||||
module_io_api_get_t api_get;
|
||||
// Keep for debug logging
|
||||
@@ -39,6 +41,9 @@ _module_io_resolve(module_io_t *module, const char *api_get_func_name)
|
||||
module->core_thread_api_set =
|
||||
(bt_module_core_thread_api_set_t) module_func_optional_resolve(
|
||||
module->module, "bt_module_core_thread_api_set");
|
||||
module->configure_do =
|
||||
(bt_module_configure_do_t) module_func_optional_resolve(
|
||||
module->module, "bt_module_configure_do");
|
||||
|
||||
module->api_get = (module_io_api_get_t) module_func_required_resolve(
|
||||
module->module, api_get_func_name);
|
||||
@@ -122,6 +127,28 @@ void module_io_core_thread_api_set(
|
||||
}
|
||||
}
|
||||
|
||||
bool module_io_configure_do(const module_io_t *module, const bt_core_config_t *config)
|
||||
{
|
||||
bool result;
|
||||
|
||||
log_assert(module);
|
||||
log_assert(config);
|
||||
|
||||
result = true;
|
||||
|
||||
if (module->configure_do) {
|
||||
module_func_pre_invoke_log(
|
||||
module->module, "bt_module_configure_do");
|
||||
|
||||
result = module->configure_do(config);
|
||||
|
||||
module_func_post_invoke_log(
|
||||
module->module, "bt_module_configure_do");
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void module_io_api_get(const module_io_t *module, void *api)
|
||||
{
|
||||
log_assert(module);
|
||||
|
||||
@@ -20,6 +20,7 @@ void module_io_core_log_api_set(
|
||||
const module_io_t *module, const bt_core_log_api_t *api);
|
||||
void module_io_core_thread_api_set(
|
||||
const module_io_t *module, const bt_core_thread_api_t *api);
|
||||
bool module_io_configure_do(const module_io_t *module, const bt_core_config_t *config);
|
||||
|
||||
void module_io_api_get(const module_io_t *module, void *api);
|
||||
|
||||
|
||||
10
src/sdk/module/configure.h
Normal file
10
src/sdk/module/configure.h
Normal file
@@ -0,0 +1,10 @@
|
||||
#ifndef MODULE_CONFIGURE_H
|
||||
#define MODULE_CONFIGURE_H
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "api/core/config.h"
|
||||
|
||||
bool bt_module_configure_do(const bt_core_config_t *config);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user