int privacy_evt_id;
lbs_client_cb user_cb;
lbs_client_cb batch_cb;
+ lbs_client_cb set_mock_cb;
void *user_data;
} lbs_client_dbus_s;
lbs_client_start(lbs_client_dbus_h lbs_client, unsigned int interval, lbs_client_callback_e callback_type, lbs_client_cb callback, void *user_data)
{
LBS_CLIENT_LOGD("lbs_client_start");
-
g_return_val_if_fail(lbs_client, LBS_CLIENT_ERROR_PARAMETER);
g_return_val_if_fail(callback_type >= LBS_CLIENT_LOCATION_CB && callback_type <= LBS_CLIENT_BATCH_CB, LBS_CLIENT_ERROR_PARAMETER);
EXPORT_API int
lbs_client_get_nmea(lbs_client_dbus_h lbs_client, int *timestamp, char **nmea)
{
- LBS_CLIENT_LOGD("ENTER >>>");
g_return_val_if_fail(lbs_client, LBS_CLIENT_ERROR_PARAMETER);
g_return_val_if_fail(timestamp, LBS_CLIENT_ERROR_PARAMETER);
g_return_val_if_fail(nmea, LBS_CLIENT_ERROR_PARAMETER);
ret = LBS_CLIENT_ERROR_DBUS_CALL;
}
g_error_free(error);
- lbs_client_signal_unsubcribe(handle);
return ret;
}
handle->user_cb = NULL;
handle->batch_cb = NULL;
+ handle->set_mock_cb = NULL;
handle->user_data = NULL;
if (handle->conn) {
return LBS_CLIENT_ERROR_NONE;
}
+
+/* Tizen 3.0 */
+
+static void __dbus_set_location_callback(GObject *source_object, GAsyncResult *res, gpointer user_data)
+{
+ LBS_CLIENT_LOGD("ENTER >>>");
+
+ g_return_if_fail(source_object);
+ g_return_if_fail(res);
+
+ lbs_client_dbus_s *handle = (lbs_client_dbus_s *)user_data;
+ GError *error = NULL;
+ gboolean success = FALSE;
+ gchar *sig = NULL;
+ GVariant *param = NULL;
+
+ LbsManager *proxy = (LbsManager *)source_object;
+
+ /* TODO: lbs-server will send method and status via DBUS. Have to change lbs.xml */
+ success = lbs_manager_call_set_mock_location_finish(proxy, res, &error);
+ if (success) {
+ if (handle && handle->set_mock_cb) {
+ sig = g_strdup("SetLocation");
+ param = g_variant_new("(ii)", LBS_CLIENT_METHOD_MOCK, 5); /* LBS_STATUS_BATCH + 1 */
+ handle->set_mock_cb(sig, param, handle->user_data);
+
+ g_free(sig);
+ g_variant_unref(param);
+ }
+ } else {
+ LBS_CLIENT_LOGW("SetLocation failed!!!");
+ if (handle && handle->set_mock_cb) {
+ sig = g_strdup("SetLocation");
+ param = g_variant_new("(ii)", LBS_CLIENT_METHOD_MOCK, 6); /* LBS_STATUS_BATCH + 2 */
+ handle->set_mock_cb(sig, param, handle->user_data);
+
+ g_free(sig);
+ g_variant_unref(param);
+ }
+
+ if (error && error->message) {
+ if (error->code == G_DBUS_ERROR_ACCESS_DENIED) {
+ LBS_CLIENT_LOGE("Access denied. Msg[%s]", error->message);
+ } else {
+ LBS_CLIENT_LOGE("Fail to new proxy ErrCode[%d], Msg[%s]", error->code, error->message);
+ }
+ g_error_free(error);
+ }
+ }
+
+ LBS_CLIENT_LOGD("EXIT <<<");
+}
+
+EXPORT_API int
+lbs_client_set_mock_location_async(lbs_client_dbus_h lbs_client,
+ gint method,
+ gdouble latitude,
+ gdouble longitude,
+ gdouble altitude,
+ gdouble speed,
+ gdouble direction,
+ gdouble accuracy,
+ lbs_client_cb callback, void *user_data)
+{
+ LBS_CLIENT_LOGD("ENTER >>>");
+ g_return_val_if_fail(lbs_client, LBS_CLIENT_ERROR_PARAMETER);
+
+ lbs_client_dbus_s *handle = (lbs_client_dbus_s *)lbs_client;
+ int ret = LBS_CLIENT_ERROR_NONE;
+
+ handle->set_mock_cb = callback;
+ handle->user_data = user_data;
+
+ LbsManager *proxy = NULL;
+ GError *error = NULL;
+
+ proxy = lbs_manager_proxy_new_sync(handle->conn,
+ G_DBUS_PROXY_FLAGS_NONE,
+ SERVICE_NAME,
+ SERVICE_PATH,
+ NULL,
+ &error);
+
+ if (proxy) {
+ lbs_manager_call_set_mock_location(proxy, method, latitude, longitude, altitude, speed, direction, accuracy,
+ NULL, __dbus_set_location_callback, handle);
+
+ g_object_unref(proxy);
+ proxy = NULL;
+ } else {
+ if (error && error->message) {
+ if (error->code == G_DBUS_ERROR_ACCESS_DENIED) {
+ LBS_CLIENT_LOGE("Access denied. Msg[%s]", error->message);
+ ret = LBS_CLIENT_ERROR_ACCESS_DENIED;
+ } else {
+ LBS_CLIENT_LOGE("Fail to new proxy ErrCode[%d], Msg[%s]", error->code, error->message);
+ ret = LBS_CLIENT_ERROR_DBUS_CALL;
+ }
+ g_error_free(error);
+ }
+ }
+ LBS_CLIENT_LOGD("EXIT <<<");
+
+ return ret;
+}
typedef void (*GpsGeofencePauseFenceCB)(gint fence_id, gpointer userdata);
typedef void (*GpsGeofenceResumeFenceCB)(gint fence_id, gint monitor_states, gpointer userdata);
+/* Tizen 3.0 */
+typedef void (*LbsDbusSetMockLocationCB)(int method, double latitude, double longtitude, double altitude,
+ double speed, double direction, double accuracy, gpointer userdata);
+
+
typedef enum {
LBS_SERVER_ERROR_NONE = 0x0,
LBS_SERVER_ERROR_UNKNOWN,
typedef void *lbs_server_dbus_h;
+/* Tizen 3.0 */
+typedef struct _lbs_server_dbus_cb_t {
+ LbsDbusSetOptionsCB set_options_cb;
+ LbsDbusShutdownCB shutdown_cb;
+ LbsDbusUpdateIntervalCB update_interval_cb;
+ LbsDbusRequestChangeIntervalCB request_change_interval_cb;
+ LbsDbusGetNmeaCB get_nmea_cb;
+ GpsGeofenceAddFenceCB add_hw_fence_cb;
+ GpsGeofenceDeleteFenceCB delete_hw_fence_cb;
+ GpsGeofencePauseFenceCB pause_hw_fence_cb;
+ GpsGeofenceResumeFenceCB resume_hw_fence_cb;
+
+ LbsDbusSetMockLocationCB set_mock_location_cb;
+} lbs_server_dbus_cb_t;
+
+
int
lbs_server_emit_position_changed(lbs_server_dbus_h lbs_server,
gint arg_method,
int
lbs_server_emit_gps_geofence_changed(lbs_server_dbus_h lbs_server, gint fence_id, gint transition, gdouble latitude, gdouble longitude, gdouble altitude, gdouble speed, gdouble bearing, gdouble hor_accuracy);
+
+#ifdef TIZEN_2_4
int
lbs_server_create(char *service_name,
char *service_path,
GpsGeofenceResumeFenceCB resume_hw_fence_cb,
gpointer userdata);
+#endif
+
+/* Tizen 3.0 */
+
+int
+lbs_server_create(char *service_name,
+ char *service_path,
+ char *name,
+ char *description,
+ lbs_server_dbus_h *lbs_server,
+ lbs_server_dbus_cb_t *lbs_server_cb,
+ gpointer userdata);
+
int
lbs_server_destroy(lbs_server_dbus_h lbs_server);
GpsGeofenceDeleteFenceCB delete_hw_fence_cb;
GpsGeofencePauseFenceCB pause_hw_fence_cb;
GpsGeofenceResumeFenceCB resume_hw_fence_cb;
+
+ /* Tizen 3.0 */
+ guint set_mock_location_h;
+ LbsDbusSetMockLocationCB set_mock_location_cb;
+
+#ifdef TIZEN_3_0_OPT
+ lbs_server_dbus_cb_t callback;
+#endif
} lbs_server_dbus_s;
typedef enum {
LBS_SERVER_METHOD_NPS,
LBS_SERVER_METHOD_AGPS,
LBS_SERVER_METHOD_GEOFENCE,
+ LBS_SERVER_METHOD_MOCK,
LBS_SERVER_METHOD_SIZE,
} lbs_server_method_e;
static gboolean
on_manager_getproviderinfo(LbsManager *mgr,
- GDBusMethodInvocation *invocation,
- gpointer user_data)
+ GDBusMethodInvocation *invocation,
+ gpointer user_data)
{
LBS_SERVER_LOGD("on_manager_getproviderinfo");
lbs_server_dbus_s *ctx = (lbs_server_dbus_s *)user_data;
static gboolean
on_manager_getstatus(LbsManager *mgr,
- GDBusMethodInvocation *invocation,
- gpointer user_data)
+ GDBusMethodInvocation *invocation,
+ gpointer user_data)
{
LBS_SERVER_LOGD("on_manager_getstatus");
lbs_server_dbus_s *ctx = (lbs_server_dbus_s *)user_data;
static gboolean
on_nmea_getnmea(LbsNmea *nmea,
- GDBusMethodInvocation *invocation,
+ GDBusMethodInvocation *invocation,
gpointer user_data)
{
lbs_server_dbus_s *ctx = (lbs_server_dbus_s *)user_data;
static gboolean
on_manager_setoptions(LbsManager *mgr,
GDBusMethodInvocation *invocation,
- GVariant *options,
- gpointer user_data)
+ GVariant *options,
+ gpointer user_data)
{
LBS_SERVER_LOGD("ENTER >>>");
lbs_server_dbus_s *ctx = (lbs_server_dbus_s *)user_data;
static gboolean
on_manager_addreference(LbsManager *mgr,
- GDBusMethodInvocation *invocation,
+ GDBusMethodInvocation *invocation,
int method,
- gpointer user_data)
+ gpointer user_data)
{
LBS_SERVER_LOGD("method: %d", method);
- if(method < 0 || method >= LBS_SERVER_METHOD_SIZE) return FALSE;
+ if (method < 0 || method >= LBS_SERVER_METHOD_SIZE) return FALSE;
lbs_server_dbus_s *ctx = (lbs_server_dbus_s *)user_data;
if (!ctx) {
}
count = count_arr[method];
-
- LBS_SERVER_LOGD("sender: [%s] method:%d count:%d table:%p", sender_cp, method, count, count_arr);
count++;
if (count <= 0) {
if (ctx->shutdown_cb) {
ctx->shutdown_cb(ctx->userdata, shutdown_arr);
- LBS_SERVER_LOGD("shutdown_cb called.. gps:%d, nps:%d",
- shutdown_arr[LBS_SERVER_METHOD_GPS], shutdown_arr[LBS_SERVER_METHOD_NPS]);
+ LBS_SERVER_LOGD("shutdown_cb called.. gps:%d, nps:%d, mock:%d",
+ shutdown_arr[LBS_SERVER_METHOD_GPS], shutdown_arr[LBS_SERVER_METHOD_NPS], shutdown_arr[LBS_SERVER_METHOD_MOCK]);
}
g_free(shutdown_arr);
}
static gboolean on_manager_removereference(LbsManager *mgr,
- GDBusMethodInvocation *invocation,
- int method,
- gpointer user_data)
+ GDBusMethodInvocation *invocation,
+ int method,
+ gpointer user_data)
{
LBS_SERVER_LOGD("method: %d", method);
- if(method < 0 || method >= LBS_SERVER_METHOD_SIZE) return FALSE;
+ if (method < 0 || method >= LBS_SERVER_METHOD_SIZE) return FALSE;
lbs_server_dbus_s *ctx = (lbs_server_dbus_s *)user_data;
if (!ctx) {
gint monitor_states,
gint notification_responsiveness,
gint unknown_timer,
- gpointer user_data)
+ gpointer user_data)
{
LBS_SERVER_LOGD("on_gps_geofence_addfence");
static gboolean
on_gps_geofence_deletefence(LbsGpsGeofence *gps_geofence,
- GDBusMethodInvocation *invocation,
- gint fence_id,
- gpointer user_data)
+ GDBusMethodInvocation *invocation,
+ gint fence_id,
+ gpointer user_data)
{
LBS_SERVER_LOGD("on_gps_geofence_deletefence");
static gboolean
on_gps_geofence_pausefence(LbsGpsGeofence *gps_geofence,
- GDBusMethodInvocation *invocation,
+ GDBusMethodInvocation *invocation,
gint fence_id,
gpointer user_data)
{
static gboolean
on_gps_geofence_resumefence(LbsGpsGeofence *gps_geofence,
- GDBusMethodInvocation *invocation,
+ GDBusMethodInvocation *invocation,
gint fence_id,
gint monitor_states,
- gpointer user_data)
+ gpointer user_data)
{
LBS_SERVER_LOGD("on_gps_geofence_resumefence");
return TRUE;
}
+
+/* Tizen 3.0 */
+
+static gboolean
+on_manager_setmocklocation(LbsManager *mgr,
+ GDBusMethodInvocation *invocation,
+ gint method,
+ gdouble latitude,
+ gdouble longitude,
+ gdouble altitude,
+ gdouble speed,
+ gdouble direction,
+ gdouble accuracy,
+ gpointer user_data)
+{
+ LBS_SERVER_LOGD("method: %d", method);
+ if (method < 0 || method >= LBS_SERVER_METHOD_SIZE) return FALSE;
+
+ lbs_server_dbus_s *ctx = (lbs_server_dbus_s *)user_data;
+ if (!ctx) {
+ return FALSE;
+ }
+
+ if (ctx->set_mock_location_cb) {
+ ctx->set_mock_location_cb(method, latitude, longitude, altitude, speed, direction, accuracy, user_data);
+
+ LBS_SERVER_LOGD("set_mock_location_cb was called");
+ }
+
+ lbs_manager_complete_set_mock_location(mgr, invocation);
+
+ return TRUE;
+}
+
static gboolean
lbs_remove_client_by_force(const char *client, void *data)
{
if (ctx->shutdown_cb) {
ctx->shutdown_cb(ctx->userdata, shutdown_arr);
- LBS_SERVER_LOGD("shutdown_cb called.. gps:%d, nps:%d",
- shutdown_arr[LBS_SERVER_METHOD_GPS], shutdown_arr[LBS_SERVER_METHOD_NPS]);
+ LBS_SERVER_LOGD("shutdown_cb called.. gps:%d, nps:%d, mock:%d",
+ shutdown_arr[LBS_SERVER_METHOD_GPS], shutdown_arr[LBS_SERVER_METHOD_NPS], shutdown_arr[LBS_SERVER_METHOD_MOCK]);
}
if (ctx->update_interval_cb) {
static void
on_name_owner_changed(GDBusConnection *connection,
- const gchar *sender_name,
- const gchar *object_path,
- const gchar *interface_name,
- const gchar *signal_name,
- GVariant *parameters, /* 1. service name 2. prev_owner 3. new_owner */
- gpointer user_data)
+ const gchar *sender_name,
+ const gchar *object_path,
+ const gchar *interface_name,
+ const gchar *signal_name,
+ GVariant *parameters, /* 1. service name 2. prev_owner 3. new_owner */
+ gpointer user_data)
{
lbs_server_dbus_s *handle = (lbs_server_dbus_s *)user_data;
g_return_if_fail(handle);
ctx); /* user_data */
}
+ /* Tizen 3.0 */
+ if (ctx->set_mock_location_cb) {
+ ctx->set_mock_location_h = g_signal_connect(mgr,
+ "handle-set-mock-location",
+ G_CALLBACK(on_manager_setmocklocation),
+ ctx);
+ }
+
/* Add interface for nmea method*/
LbsNmea *nmea = NULL;
nmea = lbs_nmea_skeleton_new();
g_dbus_interface_skeleton_export(G_DBUS_INTERFACE_SKELETON(mgr), conn, ctx->service_path, NULL);
g_dbus_interface_skeleton_export(G_DBUS_INTERFACE_SKELETON(nmea), conn, ctx->service_path, NULL);
- /* g_dbus_interface_skeleton_export(G_DBUS_INTERFACE_SKELETON(nmea), conn, path, NULL); */
g_dbus_object_manager_server_set_connection(ctx->manager, conn);
char *name,
char *description,
lbs_server_dbus_h *lbs_server,
- LbsDbusSetOptionsCB set_options_cb,
- LbsDbusShutdownCB shutdown_cb,
- LbsDbusUpdateIntervalCB update_interval_cb,
- LbsDbusRequestChangeIntervalCB request_change_interval_cb,
- LbsDbusGetNmeaCB get_nmea_cb,
- GpsGeofenceAddFenceCB add_hw_fence_cb,
- GpsGeofenceDeleteFenceCB delete_hw_fence_cb,
- GpsGeofencePauseFenceCB pause_hw_fence_cb,
- GpsGeofenceResumeFenceCB resume_hw_fence_cb,
+ lbs_server_dbus_cb_t *lbs_server_cb,
gpointer userdata)
-
{
LBS_SERVER_LOGD("ENTER >>>");
g_return_val_if_fail(service_name, LBS_SERVER_ERROR_PARAMETER);
server->connections = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
server->userdata = userdata;
- server->set_options_cb = set_options_cb;
- server->shutdown_cb = shutdown_cb;
- server->update_interval_cb = update_interval_cb;
- server->request_change_interval_cb = request_change_interval_cb;
- server->get_nmea_cb = get_nmea_cb;
+
+#if TIZEN_3_0_OPT
+ server->callback = lbs_server_cb;
+#endif
+
+ server->set_options_cb = lbs_server_cb->set_options_cb;
+ server->shutdown_cb = lbs_server_cb->shutdown_cb;
+ server->update_interval_cb = lbs_server_cb->update_interval_cb;
+ server->request_change_interval_cb = lbs_server_cb->request_change_interval_cb;
+ server->get_nmea_cb = lbs_server_cb->get_nmea_cb;
+
+ /* Tizen 3.0 */
+ server->set_mock_location_cb = lbs_server_cb->set_mock_location_cb;
/* add H/W gps-gefence callbacks */
- server->add_hw_fence_cb = add_hw_fence_cb;
- server->delete_hw_fence_cb = delete_hw_fence_cb;
- server->pause_hw_fence_cb = pause_hw_fence_cb;
- server->resume_hw_fence_cb = resume_hw_fence_cb;
+ server->add_hw_fence_cb = lbs_server_cb->add_hw_fence_cb;
+ server->delete_hw_fence_cb = lbs_server_cb->delete_hw_fence_cb;
+ server->pause_hw_fence_cb = lbs_server_cb->pause_hw_fence_cb;
+ server->resume_hw_fence_cb = lbs_server_cb->resume_hw_fence_cb;
server->owner_id = g_bus_own_name(G_BUS_TYPE_SYSTEM,
service_name,
g_signal_handler_disconnect(lbs_mgr, handle->remove_reference_h);
handle->remove_reference_h = 0;
}
+
+ if (handle->set_mock_location_h) {
+ g_signal_handler_disconnect(lbs_mgr, handle->set_mock_location_h);
+ handle->set_mock_location_h = 0;
+ }
g_object_unref(lbs_mgr);
LbsNmea *nmea = NULL;