diff options
author | norad <norad@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2012-04-22 12:44:14 +0000 |
---|---|---|
committer | norad <norad@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2012-04-22 12:44:14 +0000 |
commit | f31f446d959d775d542ed6eb0a6783725a45314b (patch) | |
tree | b6826614ab76bc9f53e1b3cde97f54b96358d60f /navit/vehicle | |
parent | d60dc73787e0ee91dc6c7cac0c33884ab2aab9e6 (diff) | |
download | navit-svn-f31f446d959d775d542ed6eb0a6783725a45314b.tar.gz |
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
Diffstat (limited to 'navit/vehicle')
-rw-r--r-- | navit/vehicle/webos/bluetooth.c | 2 | ||||
-rw-r--r-- | navit/vehicle/webos/vehicle_webos.c | 62 |
2 files changed, 33 insertions, 31 deletions
diff --git a/navit/vehicle/webos/bluetooth.c b/navit/vehicle/webos/bluetooth.c index b2066721..12271141 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 ebbf071a..bfbf1133 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); } |