#define FUSION_PATH "/lib/fusion/"
Eina_List *_fusion_list = NULL;
+int _loaded_fusion_cnt = 0;
-void
+int
_fusion_load_module(const char *fusion_name)
{
mmi_fusion_handle *fusion = (mmi_fusion_handle *)calloc(1, sizeof(mmi_fusion_handle));
- void *module_info = NULL;
+ void *fusion_info = NULL;
mmi_fusion_module *mmi_fusion_module_info = NULL;
- module_info = dlopen(fusion_name, RTLD_LAZY);
+ fusion_info = dlopen(fusion_name, RTLD_LAZY);
- if(!module_info)
+ if(!fusion_info)
{
LOGE("Failed to dlopen(error :%s, path :%s)!\n", dlerror(), fusion_name);
- return;
+ return _loaded_fusion_cnt;
}
- mmi_fusion_module_info = dlsym(module_info, "mmi_fusion_module_info");
+ mmi_fusion_module_info = dlsym(fusion_info, "mmi_fusion_module_info");
if(!mmi_fusion_module_info)
{
goto err;
}
+ fusion->fusion_info = fusion_info;
+ fusion->module_info = mmi_fusion_module_info;
_fusion_list = eina_list_append(_fusion_list, fusion);
+ return ++_loaded_fusion_cnt;
+
err:
- if(module_info)
- dlclose(module_info);
+ if(fusion_info)
+ dlclose(fusion_info);
+ return _loaded_fusion_cnt;
}
-void
+int
_modality_fusions_lookup(void)
{
DIR *dir;
if(!dir)
{
LOGE("no dir = %s\n", FUSION_PATH);
- return;
+ return -1;
}
while((entry = readdir(dir)) != NULL)
_fusion_load_module(fusion_name);
}
}
+
+ return _loaded_fusion_cnt;
}
void
modality_fusions_init(void)
{
- _modality_fusions_lookup();
+ int fusion_cnt = -1;
+ fusion_cnt = _modality_fusions_lookup();
+
+ if(fusion_cnt < 0)
+ {
+ LOGE("No find any fusion in path = %s\n", FUSION_PATH);
+ return;
+ }
+
+ LOGD("fusion_cnt is loaded fusion cnt\n");
}
void
modality_fusions_shutdown(void)
{
+ if(!_fusion_list)
+ return;
+
+ Eina_List *l = NULL;
+ mmi_fusion_handle *fusion = NULL;
+ EINA_LIST_FOREACH(_fusion_list, l, fusion)
+ {
+ if(fusion->module_info)
+ {
+ if(fusion->module_data)
+ fusion->module_info->fusion_deinit(fusion->module_data);
+ fusion->module_data = NULL;
+ fusion->module_info = NULL;
+ }
+ if(fusion->fusion_info)
+ dlclose(fusion->fusion_info);
+ }
+
+ _fusion_list = eina_list_free(_fusion_list);
+ _fusion_list = NULL;
+ _loaded_fusion_cnt = 0;
}