#include<stdio.h>
typedef enum moudule_id_tag
{
MODULE_A = 0x1000,
MODULE_B = 0x1001,
}module_id_t;
/* type define*/
typedef void(*func1_call_api_t)(void);
typedef void(*func2_call_api_t)(void);
typedef void(*func3_call_api_t)(void);
typedef struct demo_module_init_tag
{
func1_call_api_t func1_call_api;
func2_call_api_t func2_call_api;
func3_call_api_t func3_call_api;
}demo_module_init_t;
demo_module_init_t g_fp_demo_module_init;
/* func define */
void module_a_fun1_proc(void){
printf("module_a_fun1_proc!!!\n");
}
/* module A proc api */
void module_a_fun2_proc(void){
printf("module_a_fun2_proc!!!\n");
}
void module_a_fun3_proc(void){
printf("module_a_fun3_proc!!!\n");
}
/* module B proc api */
void module_b_fun1_proc(void){
printf("module_b_fun1_proc!!!\n");
}
void module_b_fun2_proc(void){
printf("module_b_fun2_proc!!!\n");
}
void module_b_fun3_proc(void){
printf("module_b_fun3_proc!!!\n");
}
/* init module */
void mudule_init(module_id_t module_id){
switch(module_id)
{
case MODULE_A:
g_fp_demo_module_init.func1_call_api = module_a_fun1_proc;
g_fp_demo_module_init.func2_call_api = module_a_fun2_proc;
g_fp_demo_module_init.func3_call_api = module_a_fun3_proc;
break;
case MODULE_B:
g_fp_demo_module_init.func1_call_api = module_b_fun1_proc;
g_fp_demo_module_init.func2_call_api = module_b_fun2_proc;
g_fp_demo_module_init.func3_call_api = module_b_fun3_proc;
break;
default:
printf("error module id,please check!!!");
break;
}
}
void main(){
module_id_t module_id = MODULE_B;
mudule_init(module_id);
g_fp_demo_module_init.func1_call_api();
g_fp_demo_module_init.func2_call_api();
g_fp_demo_module_init.func3_call_api();
return;
}