summaryrefslogtreecommitdiff
path: root/navit/vehicle
diff options
context:
space:
mode:
authornorad <norad@ffa7fe5e-494d-0410-b361-a75ebd5db220>2012-04-22 12:44:14 +0000
committernorad <norad@ffa7fe5e-494d-0410-b361-a75ebd5db220>2012-04-22 12:44:14 +0000
commitf31f446d959d775d542ed6eb0a6783725a45314b (patch)
treeb6826614ab76bc9f53e1b3cde97f54b96358d60f /navit/vehicle
parentd60dc73787e0ee91dc6c7cac0c33884ab2aab9e6 (diff)
downloadnavit-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.c2
-rw-r--r--navit/vehicle/webos/vehicle_webos.c62
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);
}