From 7d21d7e0d7a3650f498b5fdf6c0fde59e7be4451 Mon Sep 17 00:00:00 2001 From: jomui Date: Wed, 2 Dec 2015 11:33:06 +0900 Subject: [PATCH] add new geofence API for proximity(except BLE) Signed-off-by: jomui Change-Id: Ib879f1ec195a890df5f52050141aa74f9b77c56b --- geofence/src/geofence_client.c | 13 +++++++++++++ introspection/geofence.xml | 7 +++++++ packaging/geofence-dbus.spec | 2 +- server/include/geofence_dbus_server.h | 2 ++ server/src/geofence_dbus_server.c | 19 +++++++++++++++++++ 5 files changed, 42 insertions(+), 1 deletion(-) diff --git a/geofence/src/geofence_client.c b/geofence/src/geofence_client.c index 0e25521..eca2942 100644 --- a/geofence/src/geofence_client.c +++ b/geofence/src/geofence_client.c @@ -28,6 +28,7 @@ typedef struct _geofence_client_dbus_s { gchar *service_path; gchar *signal_path; int geofence_evt_id; + int geofence_proximity_id; int geofence_evt_status_id; geofence_client_cb user_cb; void *user_data; @@ -432,6 +433,14 @@ EXPORT_API int geo_client_start(geofence_client_dbus_h geofence_client, geofence GEOFENCE_CLIENT_LOGD("Fail to listen GeofenceInout"); } + handle->geofence_proximity_id = g_dbus_connection_signal_subscribe(handle->conn, handle->service_name, GEOFENCE_INTERFACE_NAME, "GeofenceProximity", handle->signal_path, NULL, G_DBUS_SIGNAL_FLAGS_NONE, __geofence_signal_callback, handle, NULL); + + if (handle->geofence_proximity_id) { + GEOFENCE_CLIENT_LOGD("Listening GeofenceProximity"); + } else { + GEOFENCE_CLIENT_LOGD("Fail to listen GeofenceProximity"); + } + handle->geofence_evt_status_id = g_dbus_connection_signal_subscribe(handle->conn, handle->service_name, GEOFENCE_INTERFACE_NAME, "GeofenceEvent", handle->signal_path, NULL, G_DBUS_SIGNAL_FLAGS_NONE, __geofence_signal_callback, handle, NULL); if (handle->geofence_evt_status_id) { @@ -482,6 +491,10 @@ static void __geo_client_signal_unsubcribe(geofence_client_dbus_h geofence_clien g_dbus_connection_signal_unsubscribe(handle->conn, handle->geofence_evt_status_id); handle->geofence_evt_status_id = 0; } + if (handle->geofence_proximity_id) { + g_dbus_connection_signal_unsubscribe(handle->conn, handle->geofence_proximity_id); + handle->geofence_proximity_id = 0; + } } EXPORT_API int geo_client_stop(geofence_client_dbus_h geofence_client) diff --git a/introspection/geofence.xml b/introspection/geofence.xml index 391f37e..8a9a7e5 100644 --- a/introspection/geofence.xml +++ b/introspection/geofence.xml @@ -42,6 +42,13 @@ + + + + + + + diff --git a/packaging/geofence-dbus.spec b/packaging/geofence-dbus.spec index a8ab983..eb8de10 100644 --- a/packaging/geofence-dbus.spec +++ b/packaging/geofence-dbus.spec @@ -1,6 +1,6 @@ Name: geofence-dbus Summary: Dbus interface for Geofence service -Version: 0.3.1 +Version: 0.3.2 Release: 1 Group: Location/Libraries License: Apache-2.0 diff --git a/server/include/geofence_dbus_server.h b/server/include/geofence_dbus_server.h index 7448c2e..1504936 100644 --- a/server/include/geofence_dbus_server.h +++ b/server/include/geofence_dbus_server.h @@ -122,6 +122,8 @@ typedef GVariant *(*GeofenceGetPlacesCB)(const gchar *app_id, int *fence_cnt, in */ int geofence_dbus_server_send_geofence_inout_changed(geofence_dbus_server_h geofence_dbus_server, const gchar *app_id, gint fence_id, gint access_type, gint fence_state); +int geofence_dbus_server_send_geofence_proximity_changed(geofence_dbus_server_h geofence_dbus_server, const gchar *app_id, gint fence_id, gint access_type, gint fence_proximity_state, gint provider); + int geofence_dbus_server_send_geofence_event_changed(geofence_dbus_server_h geofence_dbus_server, gint place_id, gint fence_id, gint access_type, const gchar *app_id, gint error, gint state); typedef struct { diff --git a/server/src/geofence_dbus_server.c b/server/src/geofence_dbus_server.c index f3a6bd1..441dc75 100644 --- a/server/src/geofence_dbus_server.c +++ b/server/src/geofence_dbus_server.c @@ -443,6 +443,25 @@ EXPORT_API int geofence_dbus_server_send_geofence_inout_changed(geofence_dbus_se return GEOFENCE_DBUS_SERVER_ERROR_NONE; } +EXPORT_API int geofence_dbus_server_send_geofence_proximity_changed(geofence_dbus_server_h geofence_dbus_server, const gchar *app_id, gint fence_id, gint access_type, gint fence_proximity_state, gint provider) +{ + GEOFENCE_DBUS_SERVER_LOGD("ENTER >>>"); + g_return_val_if_fail(geofence_dbus_server, GEOFENCE_DBUS_SERVER_ERROR_PARAMETER); + + geofence_dbus_server_s *handle = (geofence_dbus_server_s *)geofence_dbus_server; + g_return_val_if_fail(handle->obj_skeleton, GEOFENCE_DBUS_SERVER_ERROR_PARAMETER); + + SLocGeofence *geofence = NULL; + geofence = sloc_object_get_geofence(SLOC_OBJECT(handle->obj_skeleton)); + g_return_val_if_fail(geofence, GEOFENCE_DBUS_SERVER_ERROR_PARAMETER); + + sloc_geofence_emit_geofence_proximity(geofence, app_id, fence_id, access_type, fence_proximity_state, provider); + g_object_unref(geofence); + + return GEOFENCE_DBUS_SERVER_ERROR_NONE; +} + + EXPORT_API int geofence_dbus_server_send_geofence_event_changed(geofence_dbus_server_h geofence_dbus_server, gint place_id, gint fence_id, gint access_type, const gchar *app_id, gint error, gint state) { GEOFENCE_DBUS_SERVER_LOGD("ENTER >>>"); -- 2.7.4