2 scp module
2.1.所有 module 信息的维护
fwk_module_idx.h 中包含了所有模块的枚举,定义如下:
enum fwk_module_idx {
FWK_MODULE_IDX_TEST0,
FWK_MODULE_IDX_TEST1,
FWK_MODULE_IDX_TEST2,
FWK_MODULE_IDX_COUNT,
};
static const fwk_id_t fwk_module_id_test0 =
FWK_ID_MODULE_INIT(FWK_MODULE_IDX_TEST0);
static const fwk_id_t fwk_module_id_test1 =
FWK_ID_MODULE_INIT(FWK_MODULE_IDX_TEST1);
static const fwk_id_t fwk_module_id_test2 =
FWK_ID_MODULE_INIT(FWK_MODULE_IDX_TEST2);
注:fwk_id_t = FWK_ID_MODULE(fwk_module_idx),FWK_ID_MODULE 为转换 id
的宏定义
fwk_module_list.c 中包含了所有模块的结构体表及其配置结构体表。定义如
下:
const struct fwk_module *module_table[FWK_MODULE_IDX_COUNT] = {
@SCP_MODULE_GEN@
};
const struct fwk_module_config *module_config_table[FWK_MODULE_IDX_COUNT] = {
@SCP_MODULE_CONFIG_GEN@
};
fwk_module_idx.h、fwk_module_list.c 为自动生成的文件。其中
Makefile 中 BS_FIRMWARE_MODULES 变量经过处理变为
FIRMWARE_MODULES_LIST,并入传入到 gen_module_code.py 脚本自动生成文件.
2.2.module 功能的提供
在 scp 代码中,所有的功能都由一个个模块提供。每个模块以 api 枚举及其结
构体的方式对外提供该模块的功能,,并在模块通用结构体 fwk_module 中提
供.init(模块初始化)、.bind(该模块获取并绑定其依赖模块的 api)、
process_bind_request(该模块被其他模块依赖的 api 的获取并绑定请求函数)
等通用接口。