lib/bluez/e_bluez_element.c File Reference
#include "e_bluez_private.h"
#include <stdlib.h>
#include <string.h>
#include <errno.h>
Include dependency graph for e_bluez_element.c:

Data Structures

struct  _E_Bluez_Element_Call_Data
struct  _E_Bluez_Element_Listener
struct  _E_Bluez_Element_Pending
struct  _E_Bluez_Element_Property
struct  e_bluez_elements_for_each_data
struct  e_bluez_elements_get_all_str_data

Typedefs

typedef struct
_E_Bluez_Element_Call_Data 
E_Bluez_Element_Call_Data
typedef struct
_E_Bluez_Element_Listener 
E_Bluez_Element_Listener
typedef struct
_E_Bluez_Element_Pending 
E_Bluez_Element_Pending
typedef struct
_E_Bluez_Element_Property 
E_Bluez_Element_Property

Functions

E_Bluez_Element_Dict_Entrye_bluez_element_array_dict_find_stringshared (const E_Bluez_Array *array, const char *key)
void e_bluez_element_array_free (E_Bluez_Array *array, E_Bluez_Array *new __UNUSED__)
void e_bluez_element_array_print (FILE *fp, E_Bluez_Array *array)
unsigned char * e_bluez_element_bytes_array_get_stringshared (const E_Bluez_Element *element, const char *property, unsigned int *count)
Eina_Bool e_bluez_element_call_full (E_Bluez_Element *element, const char *method_name, E_DBus_Method_Return_Cb cb, Eina_Inlist **pending, E_DBus_Method_Return_Cb user_cb, const void *user_data)
Eina_Bool e_bluez_element_call_with_path (E_Bluez_Element *element, const char *method_name, const char *string, E_DBus_Method_Return_Cb cb, Eina_Inlist **pending, E_DBus_Method_Return_Cb user_cb, const void *user_data)
Eina_Bool e_bluez_element_call_with_path_and_string (E_Bluez_Element *element, const char *method_name, const char *path, const char *string, E_DBus_Method_Return_Cb cb, Eina_Inlist **pending, E_DBus_Method_Return_Cb user_cb, const void *user_data)
Eina_Bool e_bluez_element_call_with_string (E_Bluez_Element *element, const char *method_name, const char *string, E_DBus_Method_Return_Cb cb, Eina_Inlist **pending, E_DBus_Method_Return_Cb user_cb, const void *user_data)
void e_bluez_element_event_add (int event_type, E_Bluez_Element *element)
E_Bluez_Elemente_bluez_element_get (const char *path)
Eina_Bool e_bluez_element_is_adapter (const E_Bluez_Element *element)
Eina_Bool e_bluez_element_is_device (const E_Bluez_Element *element)
E_Bluez_Arraye_bluez_element_iter_get_array (DBusMessageIter *itr, const char *key)
void e_bluez_element_list_properties (const E_Bluez_Element *element, Eina_Bool(*cb)(void *data, const E_Bluez_Element *element, const char *name, int type, const void *value), const void *data)
void e_bluez_element_listener_add (E_Bluez_Element *element, void(*cb)(void *data, const E_Bluez_Element *element), const void *data, void(*free_data)(void *data))
void e_bluez_element_listener_del (E_Bluez_Element *element, void(*cb)(void *data, const E_Bluez_Element *element), const void *data)
Eina_Bool e_bluez_element_message_send (E_Bluez_Element *element, const char *method_name, E_DBus_Method_Return_Cb cb, DBusMessage *msg, Eina_Inlist **pending, E_DBus_Method_Return_Cb user_cb, const void *user_data)
Eina_Bool e_bluez_element_objects_array_get_stringshared (const E_Bluez_Element *element, const char *property, unsigned int *count, E_Bluez_Element ***p_elements)
void e_bluez_element_print (FILE *fp, const E_Bluez_Element *element)
Eina_Bool e_bluez_element_properties_sync (E_Bluez_Element *element)
Eina_Bool e_bluez_element_properties_sync_full (E_Bluez_Element *element, E_DBus_Method_Return_Cb cb, const void *data)
Eina_Bool e_bluez_element_property_dict_get_stringshared (const E_Bluez_Element *element, const char *dict_name, const char *key, int *type, void *value)
Eina_Bool e_bluez_element_property_dict_set_full (E_Bluez_Element *element, const char *prop, const char *key, int type, const void *value, E_DBus_Method_Return_Cb cb, const void *data)
Eina_Bool e_bluez_element_property_get (const E_Bluez_Element *element, const char *name, int *type, void *value)
Eina_Bool e_bluez_element_property_get_stringshared (const E_Bluez_Element *element, const char *name, int *type, void *value)
Eina_Bool e_bluez_element_property_set (E_Bluez_Element *element, const char *prop, int type, const void *value)
Eina_Bool e_bluez_element_property_set_full (E_Bluez_Element *element, const char *prop, int type, const void *value, E_DBus_Method_Return_Cb cb, const void *data)
Eina_Bool e_bluez_element_property_type_get (const E_Bluez_Element *element, const char *name, int *type)
Eina_Bool e_bluez_element_property_type_get_stringshared (const E_Bluez_Element *element, const char *name, int *type)
int e_bluez_element_ref (E_Bluez_Element *element)
E_Bluez_Elemente_bluez_element_register (const char *path, const char *interface)
Eina_Bool e_bluez_element_strings_array_get_stringshared (const E_Bluez_Element *element, const char *property, unsigned int *count, const char ***strings)
int e_bluez_element_unref (E_Bluez_Element *element)
void e_bluez_element_unregister (E_Bluez_Element *element)
void e_bluez_elements_for_each (Eina_Hash_Foreach cb, const void *user_data)
Eina_Bool e_bluez_elements_get_all (unsigned int *count, E_Bluez_Element ***p_elements)
Eina_Bool e_bluez_elements_get_all_type (const char *type, unsigned int *count, E_Bluez_Element ***p_elements)
void e_bluez_elements_init (void)
void e_bluez_elements_shutdown (void)
void e_bluez_manager_clear_elements (void)

Typedef Documentation


Function Documentation

E_Bluez_Element_Dict_Entry* e_bluez_element_array_dict_find_stringshared ( const E_Bluez_Array array,
const char *  key 
)
void e_bluez_element_array_free ( E_Bluez_Array array,
E_Bluez_Array *new  __UNUSED__ 
)
unsigned char* e_bluez_element_bytes_array_get_stringshared ( const E_Bluez_Element element,
const char *  property,
unsigned int *  count 
)
Eina_Bool e_bluez_element_call_full ( E_Bluez_Element element,
const char *  method_name,
E_DBus_Method_Return_Cb  cb,
Eina_Inlist **  pending,
E_DBus_Method_Return_Cb  user_cb,
const void *  user_data 
)
Eina_Bool e_bluez_element_call_with_path ( E_Bluez_Element element,
const char *  method_name,
const char *  string,
E_DBus_Method_Return_Cb  cb,
Eina_Inlist **  pending,
E_DBus_Method_Return_Cb  user_cb,
const void *  user_data 
)
Eina_Bool e_bluez_element_call_with_path_and_string ( E_Bluez_Element element,
const char *  method_name,
const char *  path,
const char *  string,
E_DBus_Method_Return_Cb  cb,
Eina_Inlist **  pending,
E_DBus_Method_Return_Cb  user_cb,
const void *  user_data 
)
Eina_Bool e_bluez_element_call_with_string ( E_Bluez_Element element,
const char *  method_name,
const char *  string,
E_DBus_Method_Return_Cb  cb,
Eina_Inlist **  pending,
E_DBus_Method_Return_Cb  user_cb,
const void *  user_data 
)
void e_bluez_element_event_add ( int  event_type,
E_Bluez_Element element 
)
E_Bluez_Array* e_bluez_element_iter_get_array ( DBusMessageIter *  itr,
const char *  key 
)
void e_bluez_element_list_properties ( const E_Bluez_Element element,
Eina_Bool(*)(void *data, const E_Bluez_Element *element, const char *name, int type, const void *value)  cb,
const void *  data 
)
void e_bluez_element_listener_add ( E_Bluez_Element element,
void(*)(void *data, const E_Bluez_Element *element)  cb,
const void *  data,
void(*)(void *data)  free_data 
)
void e_bluez_element_listener_del ( E_Bluez_Element element,
void(*)(void *data, const E_Bluez_Element *element)  cb,
const void *  data 
)
Eina_Bool e_bluez_element_message_send ( E_Bluez_Element element,
const char *  method_name,
E_DBus_Method_Return_Cb  cb,
DBusMessage *  msg,
Eina_Inlist **  pending,
E_DBus_Method_Return_Cb  user_cb,
const void *  user_data 
)
Eina_Bool e_bluez_element_objects_array_get_stringshared ( const E_Bluez_Element element,
const char *  property,
unsigned int *  count,
E_Bluez_Element ***  p_elements 
)
Eina_Bool e_bluez_element_property_dict_get_stringshared ( const E_Bluez_Element element,
const char *  dict_name,
const char *  key,
int *  type,
void *  value 
)

Get dict value given its key inside a dict property.

This will look into properties for one of type dict that contains the given key, to find the property. If no property is found then EINA_FALSE is returned.

If EINA_FALSE is returned, then this call failed and parameter-returned values shall be considered invalid.

Parameters:
elementwhich element to get the property
dict_nameproperty name, must be previously stringshared
keykey inside dict, must be previously stringshared
typeif provided it will contain the value type.
valuewhere to store the property value, must be a pointer to the exact type, (Eina_Bool *) for booleans, (char **) for strings, and so on.
Returns:
EINA_TRUE on success, EINA_FALSE otherwise.

References _E_Bluez_Element_Property::array, _E_Bluez_Element_Dict_Entry::boolean, _E_Bluez_Element_Dict_Entry::byte, e_bluez_element_array_dict_find_stringshared(), ERR, _E_Bluez_Element_Dict_Entry::i16, _E_Bluez_Element_Property::name, _E_Bluez_Element_Dict_Entry::path, _E_Bluez_Element::path, _E_Bluez_Element::props, _E_Bluez_Element_Dict_Entry::str, _E_Bluez_Element_Dict_Entry::type, _E_Bluez_Array::type, _E_Bluez_Element_Property::type, _E_Bluez_Element_Dict_Entry::u16, _E_Bluez_Element_Dict_Entry::u32, _E_Bluez_Element_Dict_Entry::value, _E_Bluez_Element_Property::value, and WRN.

Eina_Bool e_bluez_element_property_dict_set_full ( E_Bluez_Element element,
const char *  prop,
const char *  key,
int  type,
const void *  value,
E_DBus_Method_Return_Cb  cb,
const void *  data 
)

Call method SetProperty(prop, {key: value}) at the given element on server.

This is a server call, not local, so it may fail and in that case no property is updated locally. If the value was set the event E_BLUEZ_EVENT_ELEMENT_UPDATED will be added to main loop.

Parameters:
elementto call method on server.
propproperty name.
keydict key name.
typeDBus type to use for value.
valuepointer to value, just like regular DBus, see dbus_message_iter_append_basic().
cbfunction to call when server replies or some error happens.
datadata to give to cb when it is called.
Returns:
EINA_TRUE on success, EINA_FALSE otherwise.

References _E_Bluez_Element::_pending, e_bluez_element_message_send(), e_bluez_system_bus_name_get(), ERR, _E_Bluez_Element::interface, _E_Bluez_Element::path, and _E_Bluez_Element::property_set.

Eina_Bool e_bluez_element_property_get ( const E_Bluez_Element element,
const char *  name,
int *  type,
void *  value 
)

Get property value given its name.

This will look into properties, to find the property. If no property is found then EINA_FALSE is returned.

If EINA_FALSE is returned, then this call failed and parameter-returned values shall be considered invalid.

Parameters:
elementwhich element to get the property
nameproperty name
typeif provided it will contain the value type.
valuewhere to store the property value, must be a pointer to the exact type, (Eina_Bool *) for booleans, (char **) for strings, and so on.
Returns:
EINA_TRUE on success, EINA_FALSE otherwise.

References e_bluez_element_property_get_stringshared().

Eina_Bool e_bluez_element_property_get_stringshared ( const E_Bluez_Element element,
const char *  name,
int *  type,
void *  value 
)

Get property value given its name.

This will look into properties, to find the property. If no property is found then EINA_FALSE is returned.

If EINA_FALSE is returned, then this call failed and parameter-returned values shall be considered invalid.

Parameters:
elementwhich element to get the property
nameproperty name, must be previously stringshared
typeif provided it will contain the value type.
valuewhere to store the property value, must be a pointer to the exact type, (Eina_Bool *) for booleans, (char **) for strings, and so on.
Returns:
EINA_TRUE on success, EINA_FALSE otherwise.

References _E_Bluez_Element_Property::array, _E_Bluez_Element_Property::boolean, _E_Bluez_Element_Property::byte, ERR, _E_Bluez_Element_Property::name, _E_Bluez_Element::path, _E_Bluez_Element_Property::path, _E_Bluez_Element::props, _E_Bluez_Element_Property::str, _E_Bluez_Element_Property::type, _E_Bluez_Element_Property::u16, _E_Bluez_Element_Property::u32, _E_Bluez_Element_Property::value, and WRN.

Eina_Bool e_bluez_element_property_set ( E_Bluez_Element element,
const char *  prop,
int  type,
const void *  value 
)

Call method SetProperty(prop, value) at the given element on server.

This is the simple version and there is no check of server reply for errors.

Parameters:
elementto call method on server.
propproperty name.
typeDBus type to use for value.
valuepointer to value, just like regular DBus, see dbus_message_iter_append_basic().
Returns:
EINA_TRUE on success, EINA_FALSE otherwise.

References e_bluez_element_property_set_full().

Eina_Bool e_bluez_element_property_set_full ( E_Bluez_Element element,
const char *  prop,
int  type,
const void *  value,
E_DBus_Method_Return_Cb  cb,
const void *  data 
)

Call method SetProperty(prop, value) at the given element on server.

This is a server call, not local, so it may fail and in that case no property is updated locally. If the value was set the event E_BLUEZ_EVENT_ELEMENT_UPDATED will be added to main loop.

Parameters:
elementto call method on server.
propproperty name.
typeDBus type to use for value.
valuepointer to value, just like regular DBus, see dbus_message_iter_append_basic().
cbfunction to call when server replies or some error happens.
datadata to give to cb when it is called.
Returns:
EINA_TRUE on success, EINA_FALSE otherwise.

References _E_Bluez_Element::_pending, e_bluez_element_message_send(), e_bluez_system_bus_name_get(), ERR, _E_Bluez_Element::interface, _E_Bluez_Element::path, and _E_Bluez_Element::property_set.

Eina_Bool e_bluez_element_property_type_get ( const E_Bluez_Element element,
const char *  name,
int *  type 
)

Get property type.

If EINA_FALSE is returned, then this call failed and parameter-returned values shall be considered invalid.

Parameters:
elementwhich element to get the property
nameproperty name
typewill contain the value type.
Returns:
EINA_TRUE on success, EINA_FALSE otherwise.

References e_bluez_element_property_type_get_stringshared().

Eina_Bool e_bluez_element_property_type_get_stringshared ( const E_Bluez_Element element,
const char *  name,
int *  type 
)

Get property type.

If EINA_FALSE is returned, then this call failed and parameter-returned values shall be considered invalid.

Parameters:
elementwhich element to get the property
nameproperty name, must be previously stringshared
typewill contain the value type.
Returns:
EINA_TRUE on success, EINA_FALSE otherwise.

References _E_Bluez_Element_Property::name, _E_Bluez_Element::path, _E_Bluez_Element::props, _E_Bluez_Element_Property::type, and WRN.

E_Bluez_Element* e_bluez_element_register ( const char *  path,
const char *  interface 
)

Register the given path, possible creating and element and return it.

This will check if path is already registered, in that case the exiting element is returned. If it was not registered yet, a new element is created, registered and returned.

This call will not add extra references to the object.

Parameters:
paththe path to register the element
Returns:
the registered object, no references are added.

References e_bluez_conn, e_bluez_element_event_add(), E_BLUEZ_EVENT_ELEMENT_ADD, e_bluez_system_bus_name_get(), e_dbus_signal_handler_add(), e_bluez_elements_get_all_str_data::elements, ERR, _E_Bluez_Element::interface, _E_Bluez_Element::path, and _E_Bluez_Element::signal_handler.

Referenced by e_bluez_manager_sync_elements().

Eina_Bool e_bluez_element_strings_array_get_stringshared ( const E_Bluez_Element element,
const char *  property,
unsigned int *  count,
const char ***  strings 
)
void e_bluez_element_unregister ( E_Bluez_Element element)

Forget about the given element.

This will remove the element from the pool of known objects, then add an E_BLUEZ_EVENT_ELEMENT_DEL and after that will unreference it, possible freeing it.

Parameters:
elementelement to forget about. Its reference will be removed.

References e_bluez_elements_get_all_str_data::elements, and _E_Bluez_Element::path.

void e_bluez_elements_for_each ( Eina_Hash_Foreach  cb,
const void *  user_data 
)

Call the given function for each existing element.

Parameters:
cbfunction to call for each element. It will get as parameters, in order: the element pointer and the given user_data.
user_datadata to give to cb for each element.

References e_bluez_elements_for_each_data::cb, e_bluez_elements_for_each_data::data, and ERR.

Eina_Bool e_bluez_elements_get_all ( unsigned int *  count,
E_Bluez_Element ***  p_elements 
)

Get all known elements.

No reference is added to these elements, since there are no threads in the system, you are free to add references yourself right after the return of this call without race condition, elements by the system (ie: elementRemoved signal)could only be touched on the next main loop iteration.

Parameters:
countreturn the number of elements in array.
p_elementsarray with all elements, these are not referenced and in no particular order, just set if return is 1.
Returns:
EINA_TRUE on success, EINA_FALSE otherwise.
Eina_Bool e_bluez_elements_get_all_type ( const char *  type,
unsigned int *  count,
E_Bluez_Element ***  p_elements 
)

Get all known elements of type.

No reference is added to these elements, since there are no threads in the system, you are free to add references yourself right after the return of this call without race condition, elements by the system (ie: ElementRemoved signal) could only be touched on the next main loop iteration.

Parameters:
typetype to filter, or NULL to get all.
countreturn the number of elements in array.
p_elementsarray with all elements, these are not referenced and in no particular order, just set if return is 1.
Returns:
EINA_TRUE on success, EINA_FALSE otherwise.
See also:
e_bluez_elements_get_all()

References e_bluez_elements_get_all_str_data::count, e_bluez_elements_get_all_str_data::elements, and e_bluez_elements_get_all_str_data::str.

void e_bluez_elements_init ( void  )

Creates elements hash.

This has no init counter since its already guarded by other code.

References e_bluez_elements_get_all_str_data::elements.

Referenced by e_bluez_manager_clear_elements(), and e_bluez_system_init().

void e_bluez_elements_shutdown ( void  )
void e_bluez_manager_clear_elements ( void  )

Remove all known elements.

This will remove all known elements but will NOT add any E_BLUEZ_EVENT_ELEMENT_DEL to main loop.

This is just useful to make sure next e_bluez_manager_sync_elements() will not leave any stale elements. This is unlikely to happen, as E_Bluez is supposed to catch all required events to avoid stale elements.

References e_bluez_elements_init(), and e_bluez_elements_shutdown().