* Copyright (c) 2021 Huawei Device Co., Ltd.
*
* HDF is dual licensed: you can use it either under the terms of
* the GPL, or the BSD license, at your option.
* See the LICENSE file in the root of this repository for complete details.
*/
#include "module_manager.h"
#include "hdf_log.h"
#ifdef ENABLE_LWIP_MONITOR
#include "softbus_lwip_monitor.h"
#endif
#ifdef ENABLE_WLAN_PARAM_MONITOR
#include "wlan_param_monitor.h"
#endif
#define HDF_LOG_TAG "hdf_dsoftbus"
static SoftbusDriverModule g_modules[] = {
#ifdef ENABLE_LWIP_MONITOR
{
.init = SoftbusLwipMonitorInit,
.deinit = NULL,
.process = NULL,
},
#endif
#ifdef ENABLE_WLAN_PARAM_MONITOR
{
.init = SoftbusWlanParamMonitorInit,
.deinit = NULL,
.process = SoftbusWlanParamMonitorProcess,
},
#endif
};
void SoftbusDispatchModuleCommand(int32_t moduleId, const struct HdfSBuf *reqData, struct HdfSBuf *rspData)
{
int32_t i;
for (i = 0; i < HDF_ARRAY_SIZE(g_modules); ++i) {
if (g_modules[i].moduleId != moduleId) {
continue;
}
if (g_modules[i].process == NULL) {
HDF_LOGE("module(%d) no process function", moduleId);
break;
}
g_modules[i].process(reqData, rspData);
return;
}
HDF_LOGE("no moduleId: %d process command", moduleId);
}
int32_t SoftbusModuleManagerInit(struct HdfDeviceObject *device)
{
int32_t i;
for (i = 0; i < HDF_ARRAY_SIZE(g_modules); ++i) {
if (g_modules[i].init == NULL) {
HDF_LOGE("module(%d) is no init function", g_modules[i].moduleId);
break;
}
if (g_modules[i].init(device) != HDF_SUCCESS) {
HDF_LOGE("init module(%d) fail", g_modules[i].moduleId);
break;
}
}
if (i < HDF_ARRAY_SIZE(g_modules)) {
for (i = i - 1; i >= 0; --i) {
if (g_modules[i].deinit == NULL) {
continue;
}
g_modules[i].deinit();
}
return HDF_FAILURE;
}
HDF_LOGE("init softbus module manager success");
return HDF_SUCCESS;
}
void SoftbusModuleManagerDeinit(void)
{
int32_t i;
for (i = 0; i < HDF_ARRAY_SIZE(g_modules); ++i) {
if (g_modules[i].deinit == NULL) {
continue;
}
g_modules[i].deinit();
}
HDF_LOGE("deinit softbus module manager");
}