From 8b098ea28e8cf117d59330e7910a22e98fd0e19e Mon Sep 17 00:00:00 2001 From: gnuite Date: Sat, 16 Aug 2008 09:42:29 +0000 Subject: [PATCH] * Made compatible with new Debian autobuilder architecture. * Added support for reading "cmt" tags in GPX. They are treated the same as "desc" tags. * Changed flite invocation to support shell scripts. * Fixed bad documentation regarding the "Area" tab of the "Manage Maps" dialog. * Fixed bug with handling unknown XML extensions. * Added support for extra-maemo compilation on Linux. git-svn-id: svn+ssh://garage/var/lib/gforge/svnroot/maemo-mapper/trunk@193 6c538b50-5814-0410-93ad-8bdf4c0149d1 --- data/help/en_US/maemomapper.xml | 16 ++-- data/help/en_US/maemomapper.xml.in | 10 +-- data/help/fi_FI/maemomapper.xml | 50 +++++++++--- dpkg-build.sh | 8 +- src/gps.c | 21 +++-- src/gpx.c | 119 +++++++++++++++++++++++++++-- src/path.c | 2 +- src/poi.c | 6 +- src/types.h | 42 ---------- 9 files changed, 181 insertions(+), 93 deletions(-) diff --git a/data/help/en_US/maemomapper.xml b/data/help/en_US/maemomapper.xml index ab6d00f..bcd8135 100644 --- a/data/help/en_US/maemomapper.xml +++ b/data/help/en_US/maemomapper.xml @@ -3,7 +3,7 @@ Maemo Mapper @@ -166,8 +187,7 @@ pohjassa vierittääksesi - - Valitse - + - Valitse automaattinen keskitys - Ohjelmoitavissa; oletuksena @@ -314,6 +334,13 @@ Tyhjennä - Tyhjentää käytössä olevan reittijäljen. + + Reittijälki käytössä - Tällä valinnalla + hallitaan onko reittijälki käytössä Maemo Mapperissa. Mikäli + valittuna, reittijälki talletetaan tiedostoon joka voidaan tallettaa + GPX-muodossa käyttäen valikon "Tallenna..." valintaa. Maemo Mapper + ei voi näyttää reittijälkeä, mikäli tämä valinta ei ole valittuna. + Kartat @@ -604,17 +631,16 @@ Kartan korjaus on vähän käytetty ominaisuus, joka korjaa harvinaisen - kartta ongelman. Joissakin paikoissa (kuten Brasiliassa ja Québecissä), + karttaongelman. Joissakin paikoissa (kuten Brasiliassa ja Québecissä), reittitiedot eivät välttämättä ole tarkat, vaikkakin ongelma on - systemaattinen. Virheen voi suomata liikkuessa, jolloin reittijälki - saattaa olla muutaman sata metriä syrjässä verrattuna käytetyn - karttavaraston tiehen. Kartan korjaus korjaa tämän ongelman. Kun - GPS-vastaanottin on saanut lukituksen ja Maemo Mapper näyttää sijantisi - väärin, niin kosketa ja pidä kohta jonka luulet olevan oikea - painettuna hetken aikaa ja valitse valikosta tämä valinta. - Korjaustieto tallennetaan osana Maemo Mapperin pysyviä asetuksia, - joten se säilyy myös silloin, kun Maemo Mapper tai laite käynnistetään - uudelleen. + systemaattinen. Virheen voi huomata liikkuessa, jolloin reittijälki + saattaa olla muutaman sata metriä syrjässä verrattuna käytettyyn karttaan. + Kartan korjaus korjaa tämän ongelman. Kun GPS-vastaanottin on saanut + lukituksen ja Maemo Mapper näyttää sijantisi väärin, niin kosketa ja pidä + kohta jonka luulet olevan oikea painettuna hetken aikaa ja valitse + valikosta tämä valinta. Korjaustieto tallennetaan osana Maemo Mapperin + pysyviä asetuksia, joten se säilyy myös silloin, kun Maemo Mapper tai + laite käynnistetään uudelleen. Kohdepiste diff --git a/dpkg-build.sh b/dpkg-build.sh index c614734..d0ea835 100755 --- a/dpkg-build.sh +++ b/dpkg-build.sh @@ -18,14 +18,8 @@ else VERSION_SUFFIX=-os2008 fi -# Test if this is the armel build (as opposed to the x86 build) -GCC_HOST_IS_ARMEL=`gcc --version | head -n 1 | grep arm` -if [ "x$GCC_HOST_IS_ARMEL" != "x" ]; then - DBP_EXTRA=-B -fi - sed -i "1,1s/(\([0-9.][0-9.]*\)[-a-zA-Z0-9]*)/(\1$VERSION_SUFFIX)/" $CHANGELOG -dpkg-buildpackage -rfakeroot -i $DBP_EXTRA +dpkg-buildpackage -rfakeroot -i -sa sed -i "1,1s/(\([0-9.][0-9.]*\)[-a-zA-Z0-9]*)/(\1)/" $CHANGELOG diff --git a/src/gps.c b/src/gps.c index 4414ee6..82d06f8 100644 --- a/src/gps.c +++ b/src/gps.c @@ -54,6 +54,10 @@ # include "gpsbt.h" #endif +#ifdef HAVE_LIBGPSMGR +# include "gpsmgr.h" +#endif + #include "path.h" #include "util.h" @@ -554,7 +558,10 @@ thread_read_nmea(GpsRcvrInfo *gri) GThread *my_thread = g_thread_self(); gboolean error = FALSE; #ifdef HAVE_LIBGPSBT - gpsbt_t gps_context; + gpsbt_t gpsbt_context; +#endif +#ifdef HAVE_LIBGPSMGR + gpsmgr_t gpsmgr_context; #endif gboolean is_context = FALSE; @@ -571,10 +578,10 @@ thread_read_nmea(GpsRcvrInfo *gri) { gchar errstr[BUFFER_SIZE] = ""; /* We need to start gpsd (via gpsbt) first. */ - memset(&gps_context, 0, sizeof(gps_context)); + memset(&gpsbt_context, 0, sizeof(gpsbt_context)); errno = 0; if(gpsbt_start(gri->bt_mac, 0, 0, 0, errstr, sizeof(errstr), - 0, &gps_context) < 0) + 0, &gpsbt_context) < 0) { g_printerr("Error connecting to GPS receiver: (%d) %s (%s)\n", errno, strerror(errno), errstr); @@ -620,10 +627,10 @@ thread_read_nmea(GpsRcvrInfo *gri) if (!gpsd_ctrl_sock) gpsd_ctrl_sock = "/tmp/.gpsd_ctrl_sock"; - memset(&gps_context, 0, sizeof(gps_context)); + memset(&gpsmgr_context, 0, sizeof(gpsmgr_context)); errno = 0; if(gpsmgr_start(gpsd_prog, devs, gpsd_ctrl_sock, - 0, 0, &gps_context.mgr) < 0) + 0, 0, &gpsmgr_context) < 0) { g_printerr("Error opening GPS device: (%d) %s\n", errno, strerror(errno)); @@ -777,13 +784,13 @@ thread_read_nmea(GpsRcvrInfo *gri) { #ifdef HAVE_LIBGPSBT case GPS_RCVR_BT: - gpsbt_stop(&gps_context); + gpsbt_stop(&gpsbt_context); break; #endif #ifdef HAVE_LIBGPSMGR case GPS_RCVR_FILE: - gpsmgr_stop(&gps_context.mgr); + gpsmgr_stop(&gpsmgr_context); break; #endif diff --git a/src/gpx.c b/src/gpx.c index 1ec1354..36bf815 100644 --- a/src/gpx.c +++ b/src/gpx.c @@ -35,6 +35,50 @@ #include "path.h" #include "util.h" +/** This enum defines the states of the SAX parsing state machine. */ +typedef enum +{ + START, + INSIDE_GPX, + INSIDE_WPT, + INSIDE_WPT_NAME, + INSIDE_WPT_DESC, + INSIDE_WPT_CMT, + INSIDE_PATH, + INSIDE_PATH_SEGMENT, + INSIDE_PATH_POINT, + INSIDE_PATH_POINT_ELE, + INSIDE_PATH_POINT_TIME, + INSIDE_PATH_POINT_DESC, + INSIDE_PATH_POINT_CMT, + FINISH, + UNKNOWN, + ERROR, +} SaxState; + +/** Data used during the SAX parsing operation. */ +typedef struct _SaxData SaxData; +struct _SaxData { + SaxState state; + SaxState prev_state; + gint unknown_depth; + gboolean at_least_one_trkpt; + GString *chars; +}; + +typedef struct _PathSaxData PathSaxData; +struct _PathSaxData { + SaxData sax_data; + Path path; +}; + +typedef struct _PoiSaxData PoiSaxData; +struct _PoiSaxData { + SaxData sax_data; + GList *poi_list; + PoiInfo *curr_poi; +}; + /** * Handle a start tag in the parsing of a GPX file. */ @@ -65,6 +109,7 @@ gpx_chars(SaxData *data, const xmlChar *ch, int len) case INSIDE_PATH_POINT_ELE: case INSIDE_PATH_POINT_TIME: case INSIDE_PATH_POINT_DESC: + case INSIDE_PATH_POINT_CMT: for(i = 0; i < len; i++) data->chars = g_string_append_c(data->chars, ch[i]); vprintf("%s\n", data->chars->str); @@ -193,13 +238,17 @@ gpx_path_start_element(PathSaxData *data, if(!strcmp((gchar*)name, "gpx")) data->sax_data.state = INSIDE_GPX; else + { MACRO_SET_UNKNOWN(); + } break; case INSIDE_GPX: if(!strcmp((gchar*)name, "trk")) data->sax_data.state = INSIDE_PATH; else + { MACRO_SET_UNKNOWN(); + } break; case INSIDE_PATH: if(!strcmp((gchar*)name, "trkseg")) @@ -208,7 +257,9 @@ gpx_path_start_element(PathSaxData *data, data->sax_data.at_least_one_trkpt = FALSE; } else + { MACRO_SET_UNKNOWN(); + } break; case INSIDE_PATH_SEGMENT: if(!strcmp((gchar*)name, "trkpt")) @@ -250,7 +301,9 @@ gpx_path_start_element(PathSaxData *data, data->sax_data.state = ERROR; } else + { MACRO_SET_UNKNOWN(); + } break; case INSIDE_PATH_POINT: if(!strcmp((gchar*)name, "time")) @@ -259,9 +312,13 @@ gpx_path_start_element(PathSaxData *data, data->sax_data.state = INSIDE_PATH_POINT_ELE; else if(!strcmp((gchar*)name, "desc")) data->sax_data.state = INSIDE_PATH_POINT_DESC; + else if(!strcmp((gchar*)name, "cmt")) + data->sax_data.state = INSIDE_PATH_POINT_CMT; else + { MACRO_SET_UNKNOWN(); + } break; case UNKNOWN: data->sax_data.unknown_depth++; @@ -402,11 +459,39 @@ gpx_path_end_element(PathSaxData *data, const xmlChar *name) else data->sax_data.state = ERROR; break; + case INSIDE_PATH_POINT_CMT: + /* only parse description for routes */ + if(!strcmp((gchar*)name, "cmt")) + { + if(data->path.wtail < data->path.whead + || data->path.wtail->point != data->path.tail) + { + MACRO_PATH_INCREMENT_WTAIL(data->path); + data->path.wtail->point = data->path.tail; + data->path.wtail->desc + = g_string_free(data->sax_data.chars, FALSE); + } + else + g_string_free(data->sax_data.chars, TRUE); + + data->sax_data.chars = g_string_new(""); + data->sax_data.state = INSIDE_PATH_POINT; + } + else + data->sax_data.state = ERROR; + break; case INSIDE_PATH_POINT_DESC: /* only parse description for routes */ if(!strcmp((gchar*)name, "desc")) { - MACRO_PATH_INCREMENT_WTAIL(data->path); + /* If we already have a desc (e.g. from cmt), then overwrite */ + if(data->path.wtail >= data->path.whead + && data->path.wtail->point == data->path.tail) + g_free(data->path.wtail->desc); + else + { + MACRO_PATH_INCREMENT_WTAIL(data->path); + } data->path.wtail->point = data->path.tail; data->path.wtail->desc = g_string_free(data->sax_data.chars, FALSE); @@ -419,8 +504,6 @@ gpx_path_end_element(PathSaxData *data, const xmlChar *name) case UNKNOWN: if(!--data->sax_data.unknown_depth) data->sax_data.state = data->sax_data.prev_state; - else - data->sax_data.state = ERROR; break; default: ; @@ -684,7 +767,9 @@ gpx_poi_start_element(PoiSaxData *data, if(!strcmp((gchar*)name, "gpx")) data->sax_data.state = INSIDE_GPX; else + { MACRO_SET_UNKNOWN(); + } break; case INSIDE_GPX: if(!strcmp((gchar*)name, "wpt")) @@ -727,18 +812,23 @@ gpx_poi_start_element(PoiSaxData *data, data->sax_data.state = ERROR; } else + { MACRO_SET_UNKNOWN(); + } break; case INSIDE_WPT: if(!strcmp((gchar*)name, "name")) data->sax_data.state = INSIDE_WPT_NAME; else if(!strcmp((gchar*)name, "desc")) data->sax_data.state = INSIDE_WPT_DESC; + else if(!strcmp((gchar*)name, "cmt")) + data->sax_data.state = INSIDE_WPT_CMT; else + { MACRO_SET_UNKNOWN(); + } break; case UNKNOWN: - printf("UNKNOWN!\n"); data->sax_data.unknown_depth++; break; default: @@ -789,9 +879,27 @@ gpx_poi_end_element(PoiSaxData *data, const xmlChar *name) else data->sax_data.state = ERROR; break; + case INSIDE_WPT_CMT: + if(!strcmp((gchar*)name, "cmt")) + { + /* Only use if we don't already have a desc */ + if(!data->curr_poi->desc) + { + data->curr_poi->desc + = g_string_free(data->sax_data.chars, FALSE); + data->sax_data.chars = g_string_new(""); + data->sax_data.state = INSIDE_WPT; + } + } + else + data->sax_data.state = ERROR; + break; case INSIDE_WPT_DESC: if(!strcmp((gchar*)name, "desc")) { + /* If we already have a desc (e.g. from cmt), then overwrite */ + if(data->curr_poi->desc) + g_free(data->curr_poi->desc); data->curr_poi->desc = g_string_free(data->sax_data.chars, FALSE); data->sax_data.chars = g_string_new(""); @@ -801,11 +909,8 @@ gpx_poi_end_element(PoiSaxData *data, const xmlChar *name) data->sax_data.state = ERROR; break; case UNKNOWN: - printf("UNKNOWN!\n"); if(!--data->sax_data.unknown_depth) data->sax_data.state = data->sax_data.prev_state; - else - data->sax_data.state = ERROR; break; default: ; diff --git a/src/path.c b/src/path.c index 85392ff..2fbf94f 100644 --- a/src/path.c +++ b/src/path.c @@ -942,7 +942,7 @@ track_add(time_t time, gboolean newly_fixed) # define _voice_synth_path "/usr/bin/flite" printf("%s %s\n", _voice_synth_path, _last_spoken_phrase); - execl(_voice_synth_path, _voice_synth_path, + execl("/bin/sh", _voice_synth_path, _voice_synth_path, "-t", _last_spoken_phrase, (char *)NULL); exit(0); } diff --git a/src/poi.c b/src/poi.c index 385d7be..1098199 100644 --- a/src/poi.c +++ b/src/poi.c @@ -228,7 +228,8 @@ poi_db_connect() " where c.enabled = 1" " and p.label like $QUERY or p.desc like $QUERY" " order by (($LAT - p.lat) * ($LAT - p.lat) " - "+ ($LON - p.lon) * ($LON - p.lon)) DESC", + "+ ($LON - p.lon) * ($LON - p.lon)) DESC " + " limit 100", -1, &_stmt_browse_poi, NULL); /* browse poi by category */ @@ -241,7 +242,8 @@ poi_db_connect() " and p.cat_id = $CATID" " and ( p.label like $QUERY or p.desc like $QUERY )" " order by (($LAT - p.lat) * ($LAT - p.lat) " - "+ ($LON - p.lon) * ($LON - p.lon)) DESC", + "+ ($LON - p.lon) * ($LON - p.lon)) DESC" + " limit 100", -1, &_stmt_browsecat_poi, NULL); /* Prepare our SQL statements. */ diff --git a/src/types.h b/src/types.h index 36a4753..b6ec785 100644 --- a/src/types.h +++ b/src/types.h @@ -81,25 +81,6 @@ typedef enum CENTER_LATLON = 2 } CenterMode; -/** This enum defines the states of the SAX parsing state machine. */ -typedef enum -{ - START, - INSIDE_GPX, - INSIDE_WPT, - INSIDE_WPT_NAME, - INSIDE_WPT_DESC, - INSIDE_PATH, - INSIDE_PATH_SEGMENT, - INSIDE_PATH_POINT, - INSIDE_PATH_POINT_ELE, - INSIDE_PATH_POINT_TIME, - INSIDE_PATH_POINT_DESC, - FINISH, - UNKNOWN, - ERROR, -} SaxState; - /** POI dialog action **/ typedef enum { @@ -312,22 +293,6 @@ struct _Path { WayPoint *wcap; /* points after last slot in array. */ }; -/** Data used during the SAX parsing operation. */ -typedef struct _SaxData SaxData; -struct _SaxData { - SaxState state; - SaxState prev_state; - gint unknown_depth; - gboolean at_least_one_trkpt; - GString *chars; -}; - -typedef struct _PathSaxData PathSaxData; -struct _PathSaxData { - SaxData sax_data; - Path path; -}; - /** Data to describe a POI. */ typedef struct _PoiInfo PoiInfo; struct _PoiInfo { @@ -340,13 +305,6 @@ struct _PoiInfo { gchar *clabel; }; -typedef struct _PoiSaxData PoiSaxData; -struct _PoiSaxData { - SaxData sax_data; - GList *poi_list; - PoiInfo *curr_poi; -}; - /** Data regarding a map repository. */ typedef struct _RepoData RepoData; struct _RepoData { -- 2.45.0