From 62e8982d751025e74bcdc2f59362ea89536d0b20 Mon Sep 17 00:00:00 2001 From: norad Date: Sun, 22 Apr 2012 12:44:14 +0000 Subject: Fix:vehicle/webos:callback_list_call_attr_0 must not be called by a PDL callback. Call through SDL event. git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@5031 ffa7fe5e-494d-0410-b361-a75ebd5db220 --- navit/vehicle/webos/bluetooth.c | 2 +- navit/vehicle/webos/vehicle_webos.c | 62 +++++++++++++++++++------------------ 2 files changed, 33 insertions(+), 31 deletions(-) (limited to 'navit/vehicle/webos') diff --git a/navit/vehicle/webos/bluetooth.c b/navit/vehicle/webos/bluetooth.c index b20667214..122711415 100644 --- a/navit/vehicle/webos/bluetooth.c +++ b/navit/vehicle/webos/bluetooth.c @@ -446,7 +446,6 @@ vehicle_webos_spp_handle_read(PDL_ServiceParameters *params, void *user) event.user = userevent; SDL_PushEvent(&event); - } vehicle_webos_spp_init_read(priv, buffer_size - priv->buffer_pos - 1); @@ -553,6 +552,7 @@ vehicle_webos_spp_notify(PDL_ServiceParameters *params, void *user) snprintf(parameters, sizeof(parameters), "{\"instanceId\":%i}",priv->spp_instance_id); mlPDL_ServiceCall("palm://com.palm.service.bluetooth.spp/close", parameters); priv->spp_instance_id = 0; + vehicle_webos_init_pdl_locationtracking(priv, 1); } diff --git a/navit/vehicle/webos/vehicle_webos.c b/navit/vehicle/webos/vehicle_webos.c index ebbf071a0..bfbf11338 100644 --- a/navit/vehicle/webos/vehicle_webos.c +++ b/navit/vehicle/webos/vehicle_webos.c @@ -80,36 +80,38 @@ vehicle_webos_callback(PDL_ServiceParameters *params, void *priv) static void vehicle_webos_gps_update(struct vehicle_priv *priv, PDL_Location *location) { - struct timeval tv; - gettimeofday(&tv,NULL); - - priv->delta = (int)difftime(tv.tv_sec, priv->fix_time); - dbg(2,"delta(%i)\n",priv->delta); - priv->fix_time = tv.tv_sec; - priv->geo.lat = location->latitude; - /* workaround for webOS GPS bug following */ - priv->geo.lng = (priv->pdk_version >= 200 && location->longitude >= -1 && location->longitude <= 1) ? - -location->longitude : location->longitude; - - dbg(2,"Location: %f %f %f %.12g %.12g +-%fm\n", - location->altitude, - location->velocity, - location->heading, - priv->geo.lat, - priv->geo.lng, - location->horizontalAccuracy); - - if (location->altitude != -1) - priv->altitude = location->altitude; - if (location->velocity != -1) - priv->speed = location->velocity * 3.6; - if (location->heading != -1) - priv->track = location->heading; - if (location->horizontalAccuracy != -1) - priv->radius = location->horizontalAccuracy; - - if (priv->pdk_version <= 100) - g_free(location); + if(location) { // location may be NULL if called by bluetooth-code. priv is already prefilled there + struct timeval tv; + gettimeofday(&tv,NULL); + + priv->delta = (int)difftime(tv.tv_sec, priv->fix_time); + dbg(2,"delta(%i)\n",priv->delta); + priv->fix_time = tv.tv_sec; + priv->geo.lat = location->latitude; + /* workaround for webOS GPS bug following */ + priv->geo.lng = (priv->pdk_version >= 200 && location->longitude >= -1 && location->longitude <= 1) ? + -location->longitude : location->longitude; + + dbg(2,"Location: %f %f %f %.12g %.12g +-%fm\n", + location->altitude, + location->velocity, + location->heading, + priv->geo.lat, + priv->geo.lng, + location->horizontalAccuracy); + + if (location->altitude != -1) + priv->altitude = location->altitude; + if (location->velocity != -1) + priv->speed = location->velocity * 3.6; + if (location->heading != -1) + priv->track = location->heading; + if (location->horizontalAccuracy != -1) + priv->radius = location->horizontalAccuracy; + + if (priv->pdk_version <= 100) + g_free(location); + } callback_list_call_attr_0(priv->cbl, attr_position_coord_geo); } -- cgit v1.2.1