elocation: Add example for using the elocation API
Basic example to show API usage.
This commit is contained in:
parent
1fdf739ddc
commit
2fbcca50f7
|
@ -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
|
|
@ -0,0 +1,169 @@
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <Ecore.h>
|
||||||
|
#include <Elocation.h>
|
||||||
|
|
||||||
|
/* 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;
|
||||||
|
}
|
Loading…
Reference in New Issue