*/
#include "mmi-provider-iface.h"
+#include "mmi-manager-dbg.h"
+
+#include <Ecore.h>
+#include <dirent.h>
+#include <stdio.h>
+#include <dlfcn.h>
+#include <string.h>
+
+#define PROVIDER_PATH "/lib/provider/"
+
+Eina_List *_provider_list = NULL;
int
mmi_provider_register_caps(mmi_provider_handle provider, int caps)
}
void
+_provider_load_module(const char *provider_name)
+{
+ mmi_provider_handle *provider;
+
+ void *module_info = NULL;
+ mmi_provider_module *mmi_provider_module_info = NULL;
+ mmi_provider_module_data *provider_module_data = NULL;
+
+ module_info = dlopen(PROVIDER_PATH, RTLD_LAZY);
+
+ if(!module_info)
+ {
+ LOGE("Failed to dlopen(error :%s, path :%s)!\n", dlerror(), provider_name);
+ return;
+ }
+
+ mmi_provider_module_info = dlsym(module_info, "mmi_provider_module");
+
+ if(!mmi_provider_module_info)
+ {
+ LOGE("Module(%s) dosen't have mmi_provider_module_info \n", provider_name);
+ goto err;
+ }
+
+ if(!mmi_provider_module_info->provider_init || !mmi_provider_module_info->provider_deinit)
+ {
+ LOGE("Module(%s) doesn't have init/deinit function\n", provider_name);
+ goto err;
+ }
+
+ provider_module_data = mmi_provider_module_info->provider_init();
+
+ if(!provider_module_data)
+ {
+ LOGE("Failed to init module (%s) !\n", provider_name);
+ goto err;
+ }
+
+ provider->module_info.provider_init = mmi_provider_module_info->provider_init;
+ provider->module_info.provider_deinit = mmi_provider_module_info->provider_deinit;
+
+ _provider_list = eina_list_append(_provider_list, provider);
+
+err:
+ if(mmi_provider_module_info && mmi_provider_module_info->provider_deinit)
+ mmi_provider_module_info->provider_deinit(provider_module_data);
+
+ if(module_info)
+ dlclose(module_info);
+}
+
+void
+_modality_providers_lookup(void)
+{
+ DIR *dir;
+ struct dirent *entry;
+
+ dir = opendir(PROVIDER_PATH);
+
+ if(!dir)
+ {
+ printf("no dir\n");
+ return;
+ }
+
+ while((entry = readdir(dir)) != NULL)
+ {
+ char provider_name[512];
+ if(strstr(entry->d_name, "libmmi_modality") != NULL)
+ {
+ snprintf(provider_name, sizeof(provider_name), "%s%s", PROVIDER_PATH, entry->d_name);
+ printf("Provider full path = %s\n", provider_name);
+ _provider_load_module(provider_name);
+ }
+ }
+
+ closedir(dir);
+}
+
+void
modality_providers_init(void)
{
//Lookup and init modality providers
+ _modality_providers_lookup();
}
void