Add list of available technologies

Add E_Connman_Technology struct and create a list inside
E_Connman_Module_Context which will keep track of all available
technologies.

By: Lucas De Marchi <lucas.demarchi@profusion.mobi>


SVN revision: 45811
This commit is contained in:
Gustavo Sverzut Barbieri 2010-02-02 17:34:40 +00:00
parent 0384befb49
commit c99d8c8100
2 changed files with 81 additions and 0 deletions

View File

@ -662,6 +662,20 @@ _connman_services_free(E_Connman_Module_Context *ctxt)
}
}
E_Connman_Technology *
_connman_technology_find(E_Connman_Module_Context *ctxt, const char* name)
{
E_Connman_Technology *t;
EINA_INLIST_FOREACH(ctxt->technologies, t)
{
if (!strcmp(t->name, name))
return t;
}
return NULL;
}
static inline Eina_Bool
_connman_services_element_exists(const E_Connman_Module_Context *ctxt, const E_Connman_Element *element)
{
@ -674,6 +688,60 @@ _connman_services_element_exists(const E_Connman_Module_Context *ctxt, const E_C
return EINA_FALSE;
}
static inline Eina_Bool
_connman_technology_exists(const E_Connman_Module_Context *ctxt, const char* name)
{
const E_Connman_Technology *t;
EINA_INLIST_FOREACH(ctxt->technologies, t)
{
if (t->name == name)
return EINA_TRUE;
}
return EINA_FALSE;
}
static void
_connman_technologies_free(E_Connman_Module_Context *ctxt)
{
while (ctxt->technologies)
{
E_Connman_Technology *t = (E_Connman_Technology *) ctxt->technologies;
eina_stringshare_del(t->name);
ctxt->technologies = eina_inlist_remove(ctxt->technologies, EINA_INLIST_GET(t));
E_FREE(t);
}
}
static void
_connman_technologies_load(E_Connman_Module_Context *ctxt)
{
const char **names;
int count, i;
if (!e_connman_manager_technologies_available_get(&count, &names))
return;
printf("DBG CONNMAN technologies = %d\n", count);
for (i = 0; i < count; i++)
{
const char *name = eina_stringshare_add(names[i]);
E_Connman_Technology *t;
if ((name == NULL) || _connman_technology_exists(ctxt, name))
{
eina_stringshare_del(name);
continue;
}
t = E_NEW(E_Connman_Technology, 1);
t->name = name;
printf("DBG CONNMAN added technology: %s\n", t->name);
ctxt->technologies = eina_inlist_append(ctxt->technologies, EINA_INLIST_GET(t));
}
free(names);
}
static void
_connman_services_load(E_Connman_Module_Context *ctxt)
{
@ -1533,6 +1601,7 @@ _connman_manager_changed_do(void *data)
{
E_Connman_Module_Context *ctxt = data;
_connman_technologies_load(ctxt);
_connman_services_reload(ctxt);
ctxt->poller.manager_changed = NULL;
@ -1644,6 +1713,8 @@ e_modapi_init(E_Module *m)
if (!ctxt)
return NULL;
ctxt->technologies = NULL;
_connman_actions_register(ctxt);
e_gadcon_provider_register(&_gc_class);

View File

@ -13,6 +13,7 @@
typedef struct E_Connman_Instance E_Connman_Instance;
typedef struct E_Connman_Module_Context E_Connman_Module_Context;
typedef struct E_Connman_Service E_Connman_Service;
typedef struct E_Connman_Technology E_Connman_Technology;
struct E_Connman_Instance
{
@ -66,6 +67,13 @@ struct E_Connman_Service
Eina_Bool pass_required:1;
};
struct E_Connman_Technology
{
EINA_INLIST;
const char *name;
bool enabled;
};
struct E_Connman_Module_Context
{
Eina_List *instances;
@ -94,6 +102,7 @@ struct E_Connman_Module_Context
const char *technology;
const E_Connman_Service *default_service;
Eina_Inlist *services;
Eina_Inlist *technologies;
};
EAPI extern E_Module_Api e_modapi;
@ -101,4 +110,5 @@ EAPI void *e_modapi_init (E_Module *m);
EAPI int e_modapi_shutdown (E_Module *m);
EAPI int e_modapi_save (E_Module *m);
E_Connman_Technology *_connman_technology_find(E_Connman_Module_Context *ctxt, const char* name);
#endif