diff --git a/elocation/Makefile.am b/elocation/Makefile.am new file mode 100644 index 00000000..3c843f8b --- /dev/null +++ b/elocation/Makefile.am @@ -0,0 +1,51 @@ +MAINTAINERCLEANFILES = Makefile.in + +AM_CPPFLAGS = \ +-I$(top_builddir)/src/lib/efl \ +-I$(top_srcdir)/src/lib/eina \ +-I$(top_srcdir)/src/lib/eo \ +-I$(top_srcdir)/src/lib/ecore \ +-I$(top_srcdir)/src/lib/eldbus \ +-I$(top_srcdir)/src/lib/elocation \ +-I$(top_builddir)/src/lib/eina \ +-I$(top_builddir)/src/lib/eo \ +-I$(top_builddir)/src/lib/ecore \ +-I$(top_builddir)/src/lib/eldbus \ +-I$(top_builddir)/src/lib/elocation + +EXTRA_PROGRAMS = \ +elocation + +elocation_SOURCES = elocation.c +elocation_LDADD = \ +$(top_builddir)/src/lib/elocation/libelocation.la \ +$(top_builddir)/src/lib/eo/libeo.la \ +$(top_builddir)/src/lib/ecore/libecore.la \ +$(top_builddir)/src/lib/eldbus/libeldbus.la \ +$(top_builddir)/src/lib/eina/libeina.la \ +@ELOCATION_LDFLAGS@ + +SRCS = \ +elocation.c + +DATA_FILES = Makefile.examples + +EXTRA_DIST = $(DATA_FILES) + +examples: $(EXTRA_PROGRAMS) + +clean-local: + rm -f $(EXTRA_PROGRAMS) + +install-examples: + mkdir -p $(datadir)/elocation/examples + cd $(srcdir) && $(install_sh_DATA) -c $(SRCS) $(DATA_FILES) $(datadir)/elocation/examples + +uninstall-local: + for f in $(SRCS) $(DATA_FILES); do \ + rm -f $(datadir)/elocation/examples/$$f ; \ + done + +if ALWAYS_BUILD_EXAMPLES +noinst_PROGRAMS = $(EXTRA_PROGRAMS) +endif diff --git a/unsorted/elocation/elocation.c b/unsorted/elocation/elocation.c new file mode 100644 index 00000000..30068444 --- /dev/null +++ b/unsorted/elocation/elocation.c @@ -0,0 +1,169 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +#include +#include + +/* A set of callbacks to react on incoming elocation events. They are standard + * ecore events and we register callbacks based on these events in the main + * function. + */ +static Eina_Bool +status_changed(void *data, int ev_type, void *event) +{ + int *status = event; + + printf("Status changed to: %i\n", *status); + printf("\n"); + + return ECORE_CALLBACK_DONE; +} + +static Eina_Bool +rgeocode_arrived(void *data, int ev_type, void *event) +{ + Elocation_Address *address; + + address = event; + printf("Geocode reply:\n"); + printf("Country: %s\n", address->country); + printf("Countrycode: %s\n", address->countrycode); + printf("Locality: %s\n", address->locality); + printf("Postalcode: %s\n", address->postalcode); + printf("Region: %s\n", address->region); + printf("Timezone: %s\n", address->timezone); + printf("Accuracy level: %i\n", address->accur->level); + printf("Accuracy horizontal: %f\n", address->accur->horizontal); + printf("Accuracy vertical: %f\n", address->accur->vertical); + printf("\n"); + + return ECORE_CALLBACK_DONE; +} + +static Eina_Bool +geocode_arrived(void *data, int ev_type, void *event) +{ + Elocation_Position *position; + + position = event; + printf("Reverse geocode reply:\n"); + printf("Latitude:\t %f\n", position->latitude); + printf("Longitude:\t %f\n", position->longitude); + printf("Altitude:\t %f\n", position->altitude); + printf("Accuracy level: %i\n", position->accur->level); + printf("Accuracy horizontal: %f\n", position->accur->horizontal); + printf("Accuracy vertical: %f\n", position->accur->vertical); + printf("\n"); + + return ECORE_CALLBACK_DONE; +} + +static Eina_Bool +address_changed(void *data, int ev_type, void *event) +{ + Elocation_Address *address; + + address = event; + printf("Address update with data from timestamp: %i\n", address->timestamp); + printf("Country: %s\n", address->country); + printf("Countrycode: %s\n", address->countrycode); + printf("Locality: %s\n", address->locality); + printf("Postalcode: %s\n", address->postalcode); + printf("Region: %s\n", address->region); + printf("Timezone: %s\n", address->timezone); + printf("Accuracy level: %i\n", address->accur->level); + printf("Accuracy horizontal: %f\n", address->accur->horizontal); + printf("Accuracy vertical: %f\n", address->accur->vertical); + printf("\n"); + + return ECORE_CALLBACK_DONE; +} + +static Eina_Bool +position_changed(void *data, int ev_type, void *event) +{ + Elocation_Position *position; + + position = event; + printf("GeoClue position reply with data from timestamp %i\n", position->timestamp); + printf("Latitude:\t %f\n", position->latitude); + printf("Longitude:\t %f\n", position->longitude); + printf("Altitude:\t %f\n", position->altitude); + printf("Accuracy level: %i\n", position->accur->level); + printf("Accuracy horizontal: %f\n", position->accur->horizontal); + printf("Accuracy vertical: %f\n", position->accur->vertical); + printf("\n"); + + return ECORE_CALLBACK_DONE; +} + +int +main(void) +{ + Elocation_Address *address, *addr_geocode; + Elocation_Position *position, *pos_geocode; + int status; + + /* Init the needed efl subsystems so we can safely use them */ + ecore_init(); + eldbus_init(); + elocation_init(); + + /* Create an address and positon object that we use for all our operations. + * Needs to be freed manually with elocation_*_free when we now longer use + * them */ + address = elocation_address_new(); + position = elocation_position_new(); + + /* Register callback so we get updates later on */ + ecore_event_handler_add(ELOCATION_EVENT_STATUS, status_changed, NULL); + ecore_event_handler_add(ELOCATION_EVENT_POSITION, position_changed, NULL); + ecore_event_handler_add(ELOCATION_EVENT_ADDRESS, address_changed, NULL); + ecore_event_handler_add(ELOCATION_EVENT_GEOCODE, geocode_arrived, NULL); + ecore_event_handler_add(ELOCATION_EVENT_REVERSEGEOCODE, rgeocode_arrived, NULL); + + /* To the initial request for status address and position. This fills in the + * objects with the data from GeoClue */ + elocation_status_get(&status); + elocation_position_get(position); + elocation_address_get(address); + + /* Another set of address and position object. This time for demonstrating + * the GeoCode functionalities */ + addr_geocode = elocation_address_new(); + pos_geocode = elocation_position_new(); + + /* The Freeform API could use any string to transform it into position + * coordinates. How good that works depends on the used GeoClue provider */ + elocation_freeform_address_to_position("London", pos_geocode); + + /* Some demo values to show the position to address conversion */ + pos_geocode->latitude = 51.7522; + pos_geocode->longitude = -1.25596; + pos_geocode->accur->level = 3; + elocation_position_to_address(pos_geocode, addr_geocode); + + /* And now from address to position */ + addr_geocode->locality = "Cambridge"; + addr_geocode->countrycode = "UK"; + elocation_address_to_position(addr_geocode, pos_geocode); + + /* Enter the mainloop now that we are setup with initial data and waiting for + * events. */ + ecore_main_loop_begin(); + + /* Cleanup allocated memory now that we shut down */ + elocation_address_free(addr_geocode); + elocation_position_free(pos_geocode); + elocation_address_free(address); + elocation_position_free(position); + + /* Make sure we also shut down the initialized subsystems */ + elocation_shutdown(); + eldbus_shutdown(); + ecore_shutdown(); + return 0; +}