#include <glib.h>
#include <locations.h>
#include <location_bounds.h>
+#include <location_batch.h>
static location_manager_h manager;
static GMainLoop *g_mainloop = NULL;
-static char *menu;
+static int menu;
+static int repeat_count;
static void location_cleanup();
static int location_test();
prn, snr, is_in_use);
return true;
}
-#endif
-
-static bool satellites_foreach_cb(unsigned int azimuth, unsigned int elevation, unsigned int prn, int snr, bool is_in_use,
- void *user_data)
-{
- printf("[Satellite information] azimuth : %d, elevation: %d, prn: %d, snr: %d, used: %d\n", azimuth, elevation, prn,
- snr, is_in_use);
- return true;
-}
-static void _state_change_cb(location_service_state_e state, void *user_data)
-{
- fprintf(stderr, "--------------------------state change %d---------\n", state);
- location_manager_h lm = (location_manager_h) user_data;
- if (state == LOCATIONS_SERVICE_ENABLED) {
- int ret;
- double altitude;
- double latitude;
- double longitude;
- time_t timestamp;
- ret = location_manager_get_position(lm, &altitude, &latitude, &longitude, ×tamp);
- if (ret != LOCATIONS_ERROR_NONE) {
- printf(" Fail: location_manager_get_position ---> %d \n", ret);
- } else {
- printf("[%ld] alt: %g, lat %g, long %g\n", timestamp, altitude, latitude, longitude);
- }
-
- location_accuracy_level_e level;
- double horizontal;
- double vertical;
- ret = location_manager_get_accuracy(lm, &level, &horizontal, &vertical);
- if (ret != LOCATIONS_ERROR_NONE) {
- printf(" Fail: location_manager_get_accuracy ---> %d \n", ret);
- } else {
- printf("Level: %d, horizontal: %g, vertical %g\n", level, horizontal, vertical);
- }
-
- char *nmea;
- ret = gps_status_get_nmea(lm, &nmea);
- if (ret != LOCATIONS_ERROR_NONE) {
- printf(" Fail: gps_status_get_nmea ---> %d \n", ret);
- } else {
- printf("NMEA: %s\n", nmea);
- free(nmea);
- }
-
- int num_of_view = 0, num_of_active = 0;
- ret = gps_status_get_satellite(lm, &num_of_active, &num_of_view, ×tamp);
- if (ret != LOCATIONS_ERROR_NONE) {
- printf(" Fail: gps_status_get_satellite_count_in_view ---> %d \n", ret);
- } else {
- printf("[%ld] Satellite number of active: %d, in view: %d\n", timestamp, num_of_active, num_of_view);
- }
-
- if (num_of_view) {
- ret = gps_status_foreach_satellites_in_view(lm, satellites_foreach_cb, user_data);
- if (ret != LOCATIONS_ERROR_NONE) {
- printf(" Fail: gps_status_foreach_satellites_in_view ---> %d \n", ret);
- }
- }
- g_timeout_add_seconds(1, wait_test, NULL);
- }
-}
-
-#if 0
static bool __poly_coords_cb(location_coords_s coords, void *user_data)
{
printf("location_bounds_foreach_rect_coords(latitude: %lf, longitude: %lf) \n", coords.latitude, coords.longitude);
}
#endif
-void location_cb(int error, double latitude, double longitude, double altitude, time_t timestamp, double speed, double climb, double direction, void *user_data)
+static void _state_change_cb(location_service_state_e state, void *user_data)
+{
+ fprintf(stderr, "--------------------------state change: %d---------\n", state);
+ location_manager_h lm = (location_manager_h) user_data;
+ if (state == LOCATIONS_SERVICE_ENABLED) {
+ int ret;
+ double altitude;
+ double latitude;
+ double longitude;
+ time_t timestamp;
+ ret = location_manager_get_position(lm, &altitude, &latitude, &longitude, ×tamp);
+ if (ret != LOCATIONS_ERROR_NONE) {
+ printf(" Fail: location_manager_get_position ---> %d \n", ret);
+ } else {
+ printf("[%ld] alt: %g, lat %g, long %g\n", timestamp, altitude, latitude, longitude);
+ }
+
+ location_accuracy_level_e level;
+ double horizontal;
+ double vertical;
+ ret = location_manager_get_accuracy(lm, &level, &horizontal, &vertical);
+ if (ret != LOCATIONS_ERROR_NONE) {
+ printf(" Fail: location_manager_get_accuracy ---> %d \n", ret);
+ } else {
+ printf("Level: %d, horizontal: %g, vertical %g\n", level, horizontal, vertical);
+ }
+#if 0
+ char *nmea;
+ ret = gps_status_get_nmea(lm, &nmea);
+ if (ret != LOCATIONS_ERROR_NONE) {
+ printf(" Fail: gps_status_get_nmea ---> %d \n", ret);
+ } else {
+ printf("NMEA: %s\n", nmea);
+ free(nmea);
+ }
+#endif
+ }
+
+}
+
+void _position_updated_cb(double latitude, double longitude, double altitude, time_t timestamp, void *user_data)
+{
+ fprintf(stderr, "-------------------------- position updated --------------------------\n");
+ printf("[%ld] lat[%f] lon[%f] alt[%f]\n", timestamp, latitude, longitude, altitude);
+
+ repeat_count++;
+
+ if (repeat_count > 2) {
+ g_timeout_add_seconds(1, wait_test, NULL);
+ }
+}
+
+void _velocity_updated_cb(double speed, double direction, double climb, time_t timestamp, void *user_data)
+{
+ fprintf(stderr, "-------------------------- velocity updated --------------------------\n");
+ printf("[%ld] speed[%f] direction[%f] climb[%f]\n", timestamp, speed, direction, climb);
+}
+
+void _location_cb(int error, double latitude, double longitude, double altitude, time_t timestamp, double speed, double climb, double direction, void *user_data)
{
printf("error[%d]\n", error);
printf("location_cb: lat[%f] lon[%f] alt[%f]\n", latitude, longitude, altitude);
g_timeout_add_seconds(1, wait_test, NULL);
}
-static void __setting_cb(location_method_e method, bool enable, void *user_data)
+void _location_changed_cb(double latitude, double longitude, double altitude, double speed, double direction, double horizontal_accuracy, time_t timestamp, void *user_data)
{
- printf("method[%d], enable[%d]\n", method, enable);
+ fprintf(stderr, "-------------------------- location changed --------------------------\n");
+ printf("[%ld] lat[%f] lon[%f] alt[%f] speed[%lf] direction[%lf], horizontal_accuracy[%lf]\n", timestamp, latitude, longitude, altitude, speed, direction, horizontal_accuracy);
+
+ repeat_count++;
+
+ if (repeat_count > 2) {
+ g_timeout_add_seconds(1, wait_test, NULL);
+ }
}
-static void select_menu()
+bool _get_location_cb(double latitude, double longitude, double altitude, double speed, double direction, double horizontal, double vertical, time_t timestamp, void *user_data)
{
- char buf[256];
- int len = 0;
- char *str = NULL;
+ fprintf(stderr, "-------------------------- batch: get location --------------------------\n");
+ printf("[%ld] lat[%f] lon[%f] alt[%f] speed[%lf] direction[%lf], horizontal_accuracy[%lf]\n", timestamp, latitude, longitude, altitude, speed, direction, horizontal);
+ return TRUE;
+}
+
+void _location_batch_cb(int num_of_location, void *user_data)
+{
+ fprintf(stderr, "-------------------------- location batch --------------------------\n");
+ printf("num_of_location: [%d]\n", num_of_location);
- str = fgets(buf, 255, stdin);
- if (NULL == str) {
- printf("fgets return NULL. \n");
+ location_manager_h manager = user_data;
+
+ if (num_of_location > 0) {
+ location_manager_foreach_location_batch(manager, _get_location_cb, user_data);
}
- len = g_utf8_strlen(buf, -1);
- buf[len - 1] = '\0';
+ repeat_count++;
- g_free(menu);
- menu = g_strdup(buf);
+ if (repeat_count > 1) {
+ g_timeout_add_seconds(1, wait_test, NULL);
+ }
}
-static void print_menu()
+static void __setting_cb(location_method_e method, bool enable, void *user_data)
{
- printf("==== LOCATION TEST ======\n");
- printf("[1] LOCATIONS_METHOD_HYBRID: Get location\n");
- printf("[2] LOCATIONS_METHOD_GPS: Get location\n");
- printf("[3] LOCATIONS_METHOD_WPS: Get location\n");
- printf("[4] LOCATIONS_METHOD_HYBRID: Single location\n");
- printf("[5] LOCATIONS_METHOD_GPS: Single location\n");
- printf("[x] Exit!!!\n\n");
- printf("Select menu: ");
+ printf("method[%d], enable[%d]\n", method, enable);
}
-static int location_test()
+static void print_location_status()
{
- int ret = LOCATIONS_ERROR_NONE;
-
printf("==== LOCATION STATUS ======\n");
bool is_enabled = FALSE;
location_manager_is_enabled_method(LOCATIONS_METHOD_HYBRID, &is_enabled);
location_manager_is_enabled_method(LOCATIONS_METHOD_WPS, &is_enabled);
printf("wps: %d\n", is_enabled);
+}
+
+static int enable_method(location_method_e method, bool enable)
+{
+ int ret = 0;
+ printf("==== LOCATION STATUS ======\n");
+ location_manager_set_setting_changed_cb(LOCATIONS_METHOD_HYBRID, __setting_cb, NULL);
location_manager_set_setting_changed_cb(LOCATIONS_METHOD_GPS, __setting_cb, NULL);
location_manager_set_setting_changed_cb(LOCATIONS_METHOD_WPS, __setting_cb, NULL);
+ ret = location_manager_enable_method(method, enable);
+ printf("method[%d]: %d\n", method, enable);
+ return ret;
+}
+
+static void print_menu()
+{
+ printf("==== LOCATION TEST ======\n");
+ printf("[1] Get location: LOCATIONS_METHOD_HYBRID\n");
+ printf("[2] Get location: LOCATIONS_METHOD_GPS\n");
+ printf("[3] Get location: LOCATIONS_METHOD_WPS\n");
+ printf("[4] Single location: LOCATIONS_METHOD_HYBRID\n");
+ printf("[5] Single location: LOCATIONS_METHOD_GPS\n");
+ printf("[6] Single location: LOCATIONS_METHOD_WPS\n\n");
+ printf("[11] Change update interval: LOCATIONS_METHOD_HYBRID\n");
+ printf("[12] Change update interval: LOCATIONS_METHOD_GPS\n\n");
+ printf("[21] Distance based location update: LOCATIONS_METHOD_HYBRID\n");
+ printf("[22] Distance based location update: LOCATIONS_METHOD_GPS\n");
+ printf("[23] Distance based location update: LOCATIONS_METHOD_WPS\n\n");
+ printf("[31] Location batch update: LOCATIONS_METHOD_GPS\n\n");
+ printf("[41] Turn on/off method: LOCATIONS_METHOD_HYBRID\n");
+ printf("[42] Turn on/off method: LOCATIONS_METHOD_GPS\n");
+ printf("[43] Turn on/off method: LOCATIONS_METHOD_WPS\n\n");
+ printf("[51] Boundary Test\n\n");
+ printf("[0] Exit!!!\n\n");
+ printf("Select menu: ");
+
+ if (scanf("%d", &menu) < 0) {
+ printf("Can't read menu !!!\n");
+ }
+}
+
+static int location_test()
+{
+ int ret = LOCATIONS_ERROR_NONE;
+ int basic = 0;
+ int interval = 1;
+
+ print_location_status();
print_menu();
- select_menu();
-
- if (strcmp(menu, "1") == 0) {
- ret = location_manager_create(LOCATIONS_METHOD_HYBRID, &manager);
- printf("LOCATIONS_METHOD_HYBRID create: %d\n", ret);
- ret = location_manager_start(manager);
- printf("start: %d\n", ret);
- } else if (strcmp(menu, "2") == 0) {
- ret = location_manager_create(LOCATIONS_METHOD_GPS, &manager);
- printf("LOCATIONS_METHOD_GPS create: %d\n", ret);
- ret = location_manager_start(manager);
- printf("start: %d\n", ret);
- } else if (strcmp(menu, "3") == 0) {
- ret = location_manager_create(LOCATIONS_METHOD_WPS, &manager);
- printf("LOCATIONS_METHOD_WPS create: %d\n", ret);
- } else if (strcmp(menu, "4") == 0) {
- ret = location_manager_create(LOCATIONS_METHOD_HYBRID, &manager);
- printf("LOCATIONS_METHOD_HYBRID create: %d\n", ret);
- ret = location_manager_request_single_location(manager, 60, location_cb, manager);
- printf("single_location create: %d\n", ret);
- } else if (strcmp(menu, "5") == 0) {
- ret = location_manager_create(LOCATIONS_METHOD_GPS, &manager);
- printf("LOCATIONS_METHOD_HYBRID create: %d\n", ret);
- ret = location_manager_request_single_location(manager, 60, location_cb, manager);
- printf("single_location create: %d\n", ret);
- } else if (strcmp(menu, "x") == 0) {
- g_timeout_add_seconds(0.1, exit_program, NULL);
- return 0;
- } else {
- printf("Exit!!! Input: %s\n", menu);
- g_timeout_add_seconds(0.1, exit_program, NULL);
- return 0;
+
+ switch (menu) {
+ case 1:
+ basic = 1;
+ ret = location_manager_create(LOCATIONS_METHOD_HYBRID, &manager);
+ printf("LOCATIONS_METHOD_HYBRID create: %d\n", ret);
+ ret = location_manager_start(manager);
+ printf("start: %d\n", ret);
+ break;
+ case 2:
+ basic = 1;
+ ret = location_manager_create(LOCATIONS_METHOD_GPS, &manager);
+ printf("LOCATIONS_METHOD_GPS create: %d\n", ret);
+ ret = location_manager_start(manager);
+ printf("start: %d\n", ret);
+ break;
+ case 3:
+ basic = 1;
+ ret = location_manager_create(LOCATIONS_METHOD_WPS, &manager);
+ ret = location_manager_start(manager);
+ printf("start: %d\n", ret);
+ break;
+ case 4:
+ case 5:
+ case 6: {
+ int timeout = 30;
+
+ printf("\n Input timeout ==> ");
+ ret = scanf("%d", &timeout);
+
+ int method = menu - 4;
+ ret = location_manager_create(method, &manager);
+ ret = location_manager_request_single_location(manager, timeout, _location_cb, manager);
+ printf("request single_location (method: %d): %d\n", method, ret);
+ break;
+ }
+ case 11:
+ case 12:
+ case 13: {
+ repeat_count = 0;
+ int interval = 1;
+
+ printf("\n Input position interval ==> ");
+ ret = scanf("%d", &interval);
+
+ int method = menu - 4;
+ ret = location_manager_create(method, &manager);
+ printf("location_manager_create (method: %d): %d\n", method, ret);
+
+ ret = location_manager_set_position_updated_cb(manager, _position_updated_cb, interval, (void *)manager);
+ printf("set position changed callback: %d\n", ret);
+
+ /*
+ ret = location_manager_set_velocity_updated_cb(manager, _velocity_updated_cb, interval*2, (void *)manager);
+ printf("set velocity changed callback: %d\n", ret);
+ */
+
+ ret = location_manager_set_location_changed_cb(manager, _location_changed_cb, interval * 2, (void *)manager);
+ printf("set location changed callback: %d\n", ret);
+
+ ret = location_manager_start(manager);
+ repeat_count = 0;
+ break;
+ }
+ case 21:
+ case 22:
+ case 23: {
+ repeat_count = 0;
+ int interval = 1;
+ int method = menu - 21;
+
+ printf("\n Input position interval ==> ");
+ ret = scanf("%d", &interval);
+
+ ret = location_manager_create(method, &manager);
+ printf("location_manager_create (method : %d)", method);
+
+ /*ret = location_manager_set_position_updated_cb(manager, _position_updated_cb, interval, (void *)manager); */
+ /*printf("set position changed callback: %d\n", ret); */
+
+ ret = location_manager_set_distance_based_location_changed_cb(manager, _location_changed_cb, interval, 30, (void *)manager);
+ printf("set location changed callback: %d\n", ret);
+
+ ret = location_manager_start(manager);
+ break;
+ }
+ case 31: {
+ repeat_count = 0;
+ int interval = 1;
+ printf("\n Input batch interval ==> ");
+ ret = scanf("%d", &interval);
+
+ int period = 60;
+ printf(" Input batch period ==> ");
+ ret = scanf("%d", &period);
+
+
+ ret = location_manager_create(LOCATIONS_METHOD_GPS, &manager);
+ printf("location_manager_create (method : %d)\n", LOCATIONS_METHOD_GPS);
+
+ ret = location_manager_set_location_batch_cb(manager, _location_batch_cb, interval, period, (void *)manager);
+ printf("set location batch callback: %d\n", ret);
+
+ ret = location_manager_start_batch(manager);
+ break;
+ }
+ case 41:
+ case 42:
+ case 43: {
+ int method = menu - 41;
+ int onoff = 1;
+
+ printf("\n Input ON: 1 or OFF: 0 ==> ");
+ ret = scanf("%d", &onoff);
+
+ ret = enable_method(method, onoff);
+ printf("Enabling method[%d]: %d\n", method, ret);
+ break;
+ }
+
+ case 51: {
+ location_bounds_h hPolyLocationBound = NULL;
+ bool bIsContained = false;
+ int nPolySize = 3;
+ location_coords_s location_coord_list[nPolySize];
+ location_coord_list[0].latitude = 10;
+ location_coord_list[0].longitude = 10;
+ location_coord_list[1].latitude = 20;
+ location_coord_list[1].longitude = 20;
+ location_coord_list[2].latitude = 30;
+ location_coord_list[2].longitude = 10;
+
+ //Checking coordinates in location boundary
+ location_coords_s testLocationCoordinates;
+ testLocationCoordinates.latitude = 20;
+ testLocationCoordinates.longitude = 12;
+ location_bound_error_e nRet = location_bounds_create_polygon(location_coord_list, nPolySize, &hPolyLocationBound);
+
+ printf("location_bounds_create_polygon= %d\n", nRet);
+
+ bIsContained = location_bounds_contains_coordinates(hPolyLocationBound, testLocationCoordinates);// Target API
+ printf("bIsContained : %d\n", bIsContained);
+
+ location_bounds_destroy(hPolyLocationBound);
+ break;
+ }
+ case 0:
+ g_timeout_add_seconds(0.1, exit_program, NULL);
+ return 0;
+ default:
+ printf("Exit!!! Input: %d\n", menu);
+ g_timeout_add_seconds(0.1, exit_program, NULL);
+ return 0;
}
if (ret != LOCATIONS_ERROR_NONE) {
g_timeout_add_seconds(0.1, exit_program, NULL);
return 0;
}
- ret = location_manager_set_service_state_changed_cb(manager, _state_change_cb, (void *)manager);
- printf("set state callback: %d\n", ret);
-
- /* location_bounds_test(); */
- /* set zone changed callback */
- /*
- ret = location_manager_set_zone_changed_cb(manager, zone_event_cb, (void *)manager);
- printf("set zone callback: %d\n", ret);
- */
+
+ if (menu < 40) {
+ ret = location_manager_set_service_state_changed_cb(manager, _state_change_cb, (void *)manager);
+ printf("set state changed callback: %d\n", ret);
+
+ if (basic) {
+ ret = location_manager_set_position_updated_cb(manager, _position_updated_cb, interval, (void *)manager);
+ printf("set position changed callback: %d\n", ret);
+ }
+ }
+ else {
+ g_timeout_add_seconds(0.1, wait_test, NULL);
+ }
+
return 0;
}
static void location_cleanup()
{
+ int ret = 0;
if (manager != NULL) {
- int ret = location_manager_stop(manager);
+ ret = location_manager_stop(manager);
printf("stop: %d\n", ret);
+
+ ret = location_manager_unset_service_state_changed_cb(manager);
+ printf("unset: %d\n", ret);
+
+ ret = location_manager_unset_position_updated_cb(manager);
+ printf("unset: %d\n", ret);
+
ret = location_manager_destroy(manager);
printf("destroy: %d\n", ret);
manager = NULL;