diff options
author | norad <norad@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2012-04-22 12:43:53 +0000 |
---|---|---|
committer | norad <norad@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2012-04-22 12:43:53 +0000 |
commit | a196ccb670b0d933a00fadb5bdfc50560c67f95f (patch) | |
tree | a46e6b82e41da871efd828e95119dd55f1c06fff /navit/vehicle | |
parent | bcbd52724441ba313ba0c40ab207ca411814b8ce (diff) | |
download | navit-a196ccb670b0d933a00fadb5bdfc50560c67f95f.tar.gz |
Fix:vehicle/webos:use more of the NMEA data. Remove 1sec throttling
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@5030 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit/vehicle')
-rw-r--r-- | navit/vehicle/webos/bluetooth.c | 59 | ||||
-rw-r--r-- | navit/vehicle/webos/vehicle_webos.c | 77 | ||||
-rw-r--r-- | navit/vehicle/webos/vehicle_webos.h | 11 |
3 files changed, 108 insertions, 39 deletions
diff --git a/navit/vehicle/webos/bluetooth.c b/navit/vehicle/webos/bluetooth.c index ee627afbd..b20667214 100644 --- a/navit/vehicle/webos/bluetooth.c +++ b/navit/vehicle/webos/bluetooth.c @@ -105,6 +105,8 @@ vehicle_webos_init_pdl_locationtracking_callback(struct vehicle_priv *priv, stru { PDL_Err err; + priv->gps_type = param ? GPS_TYPE_INT: GPS_TYPE_NONE; + dbg(1,"Calling PDL_EnableLocationTracking(%i)\n",param); err = PDL_EnableLocationTracking(param); @@ -195,14 +197,14 @@ vehicle_webos_parse_nmea(struct vehicle_priv *priv, char *buffer) *p++ = '\0'; } - if (buffer[0] == '$') { - struct timeval tv; - gettimeofday(&tv,NULL); +// if (buffer[0] == '$') { +// struct timeval tv; +// gettimeofday(&tv,NULL); - priv->delta = (unsigned int)difftime(tv.tv_sec, priv->fix_time); - priv->fix_time = tv.tv_sec; - dbg(2,"delta(%i)\n",priv->delta); - } + priv->delta = 0; // (unsigned int)difftime(tv.tv_sec, priv->fix_time); +// priv->fix_time = tv.tv_sec; +// dbg(2,"delta(%i)\n",priv->delta); +// } if (!strncmp(buffer, "$GPGGA", 6)) { /* 1 1111 @@ -227,26 +229,23 @@ vehicle_webos_parse_nmea(struct vehicle_priv *priv, char *buffer) if (!g_strcasecmp(item[5],"W")) priv->geo.lng=-priv->geo.lng; - } -#if 0 priv->valid=attr_position_valid_valid; - dbg(2, "latitude '%2.4f' longitude %2.4f\n", priv->geo.lat, priv->geo.lng); + dbg(2, "latitude '%2.4f' longitude %2.4f\n", priv->geo.lat, priv->geo.lng); } else priv->valid=attr_position_valid_invalid; if (*item[6]) sscanf(item[6], "%d", &priv->status); if (*item[7]) - sscanf(item[7], "%d", &priv->sats_used); + sscanf(item[7], "%d", &priv->sats_used); if (*item[8]) sscanf(item[8], "%lf", &priv->hdop); -#endif -/* if (*item[1]) { + if (*item[1]) { struct tm tm; strptime(item[1],"%H%M%S",&tm); priv->fix_time = mktime(&tm); } -*/ + if (*item[9]) sscanf(item[9], "%lf", &priv->altitude); @@ -295,7 +294,6 @@ vehicle_webos_parse_nmea(struct vehicle_priv *priv, char *buffer) priv->speed = g_ascii_strtod( item[7], NULL ); priv->speed *= 1.852; -#if 0 struct tm tm; char time[13]; @@ -304,6 +302,7 @@ vehicle_webos_parse_nmea(struct vehicle_priv *priv, char *buffer) strptime(time,"%H%M%S%d%m%y",&tm); priv->fix_time = mktime(&tm); +#if 0 sscanf(item[9], "%02d%02d%02d", &priv->fixday, &priv->fixmonth, @@ -313,7 +312,6 @@ vehicle_webos_parse_nmea(struct vehicle_priv *priv, char *buffer) } ret = 1; } -#if 0 if (!strncmp(buffer, "$GPGSV", 6) && i >= 4) { /* 0 GSV Satellites in view @@ -331,6 +329,7 @@ vehicle_webos_parse_nmea(struct vehicle_priv *priv, char *buffer) if (item[3]) { sscanf(item[3], "%d", &priv->sats_visible); } +#if 0 j=4; while (j+4 <= i && priv->current_count < 24) { struct gps_sat *sat=&priv->next[priv->next_count++]; @@ -350,8 +349,8 @@ vehicle_webos_parse_nmea(struct vehicle_priv *priv, char *buffer) priv->current_count=priv->next_count; priv->next_count=0; } - } #endif + } #if 0 if (!strncmp(buffer, "$GPZDA", 6)) { /* @@ -370,7 +369,6 @@ vehicle_webos_parse_nmea(struct vehicle_priv *priv, char *buffer) } } #endif -#if 0 if (!strncmp(buffer, "$IISMD", 6)) { /* 0 1 2 3 4 @@ -385,7 +383,6 @@ vehicle_webos_parse_nmea(struct vehicle_priv *priv, char *buffer) dbg(1,"magnetic %d\n", priv->magnetic_direction); } } -#endif return ret; } @@ -410,6 +407,8 @@ vehicle_webos_spp_handle_read(PDL_ServiceParameters *params, void *user) memmove(priv->buffer + priv->buffer_pos, buffer, size); + + priv->buffer_pos += size; priv->buffer[priv->buffer_pos] = '\0'; dbg(1, "size=%d pos=%d buffer='%s'\n", size, @@ -434,8 +433,21 @@ vehicle_webos_spp_handle_read(PDL_ServiceParameters *params, void *user) dbg(0,"Overflow. Most likely wrong baud rate or no nmea protocol\n"); priv->buffer_pos = 0; } - if (rc && priv->delta) - callback_list_call_attr_0(priv->cbl, attr_position_coord_geo); + if (rc) { + SDL_Event event; + SDL_UserEvent userevent; + + userevent.type = SDL_USEREVENT; + userevent.code = PDL_GPS_UPDATE; + userevent.data1 = NULL; + userevent.data2 = NULL; + + event.type = SDL_USEREVENT; + event.user = userevent; + + SDL_PushEvent(&event); + + } vehicle_webos_spp_init_read(priv, buffer_size - priv->buffer_pos - 1); } @@ -472,6 +484,8 @@ vehicle_webos_spp_handle_open(PDL_ServiceParameters *params, void *user) dbg(1,"instanceId(%i)\n",priv->spp_instance_id); + priv->gps_type = GPS_TYPE_BT; + vehicle_webos_spp_init_read(priv, buffer_size-1); } @@ -535,6 +549,9 @@ vehicle_webos_spp_notify(PDL_ServiceParameters *params, void *user) } } else if(strcmp(notification,"notifndisconnected") == 0) { + priv->gps_type = GPS_TYPE_NONE; + 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; } diff --git a/navit/vehicle/webos/vehicle_webos.c b/navit/vehicle/webos/vehicle_webos.c index 9ee8ed9e6..ebbf071a0 100644 --- a/navit/vehicle/webos/vehicle_webos.c +++ b/navit/vehicle/webos/vehicle_webos.c @@ -178,6 +178,9 @@ vehicle_webos_open(struct vehicle_priv *priv) // vehicle_webos_close(priv); // return 0; } + + priv->gps_type = GPS_TYPE_INT; + if(!vehicle_webos_bt_open(priv)) return 0; } @@ -212,6 +215,26 @@ vehicle_webos_position_attr_get(struct vehicle_priv *priv, dbg(2,"Direction: %f\n", priv->track); attr->u.numd = &priv->track; break; + case attr_position_magnetic_direction: + switch (priv->gps_type) { + case GPS_TYPE_BT: + attr->u.num = priv->magnetic_direction; + break; + default: + return 0; + break; + } + break; + case attr_position_hdop: + switch (priv->gps_type) { + case GPS_TYPE_BT: + attr->u.numd = &priv->hdop; + break; + default: + return 0; + break; + } + break; case attr_position_coord_geo: dbg(2,"Coord: %.12g %.12g\n", priv->geo.lat, priv->geo.lng); attr->u.coord_geo = &priv->geo; @@ -241,26 +264,44 @@ vehicle_webos_position_attr_get(struct vehicle_priv *priv, break; case attr_position_fix_type: - if (priv->delta <= 0 || priv->radius == 0.0) - attr->u.num = 0; // strength = 1 - else if (priv->radius > 20.0) - attr->u.num = 1; // strength >= 2 - else - attr->u.num = 2; // strength >= 2 - + switch (priv->gps_type) { + case GPS_TYPE_INT: + if (priv->delta <= 0 || priv->radius == 0.0) + attr->u.num = 0; // strength = 1 + else if (priv->radius > 20.0) + attr->u.num = 1; // strength >= 2 + else + attr->u.num = 2; // strength >= 2 + break; + case GPS_TYPE_BT: + attr->u.num = priv->status; + break; + default: + return 0; + break; + } break; case attr_position_sats_used: - if (priv->delta <= 0) - attr->u.num = 0; - else if (priv->radius <= 6.0 ) - attr->u.num = 6; // strength = 5 - else if (priv->radius <= 10.0 ) - attr->u.num = 5; // strength = 4 - else if (priv->radius <= 15.0 ) - attr->u.num = 4; // strength = 3 - else - return 0; - + switch (priv->gps_type) { + case GPS_TYPE_INT: + if (priv->delta <= 0) + attr->u.num = 0; + else if (priv->radius <= 6.0 ) + attr->u.num = 6; // strength = 5 + else if (priv->radius <= 10.0 ) + attr->u.num = 5; // strength = 4 + else if (priv->radius <= 15.0 ) + attr->u.num = 4; // strength = 3 + else + return 0; + break; + case GPS_TYPE_BT: + attr->u.num = priv->sats_used; + break; + default: + return 0; + break; + } break; default: return 0; diff --git a/navit/vehicle/webos/vehicle_webos.h b/navit/vehicle/webos/vehicle_webos.h index 5de0c8d3b..4c7973051 100644 --- a/navit/vehicle/webos/vehicle_webos.h +++ b/navit/vehicle/webos/vehicle_webos.h @@ -1,5 +1,9 @@ #include "coord.h" +#define GPS_TYPE_NONE 0 +#define GPS_TYPE_INT 1 +#define GPS_TYPE_BT 2 + struct vehicle_priv { char *address; char *source; @@ -9,10 +13,17 @@ struct vehicle_priv { char *nmea_data; char fixiso8601[128]; double track, speed, altitude, radius; + double hdop; + int gps_type; int pdk_version; int spp_instance_id; int buffer_pos; int delta; + int sats_used; + int sats_visible; + int magnetic_direction; + int status; + int valid; time_t fix_time; struct attr ** attrs; struct callback *event_cb; |