Diff of /trunk/src/gps.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 36 by harbaum, Thu Jul 30 12:41:20 2009 UTC revision 53 by harbaum, Wed Aug 12 19:18:53 2009 UTC
# Line 97  float gps_get_heading(appdata_t *appdata Line 97  float gps_get_heading(appdata_t *appdata
97    return retval;    return retval;
98  }  }
99    
100  float gps_get_epe(appdata_t *appdata) {  float gps_get_eph(appdata_t *appdata) {
101    float retval = NAN;    float retval = NAN;
102    
103    g_mutex_lock(appdata->gps_state->mutex);    g_mutex_lock(appdata->gps_state->mutex);
# Line 180  void gps_clear_fix(struct gps_fix_t *fix Line 180  void gps_clear_fix(struct gps_fix_t *fix
180    fixp->altitude = NAN;    fixp->altitude = NAN;
181    fixp->ept = NAN;    fixp->ept = NAN;
182    fixp->eph = NAN;    fixp->eph = NAN;
   fixp->epv = NAN;  
183    fixp->epd = NAN;    fixp->epd = NAN;
184    fixp->eps = NAN;    fixp->eps = NAN;
185    fixp->epc = NAN;    fixp->epc = NAN;
# Line 211  static void gps_unpack(char *buf, struct Line 210  static void gps_unpack(char *buf, struct
210            /* C - cycle isn't supported by gpxview */            /* C - cycle isn't supported by gpxview */
211            /* D - utc time isn't supported by gpxview */            /* D - utc time isn't supported by gpxview */
212          case 'E':          case 'E':
213            gpsdata->epe = gpsdata->fix.eph = gpsdata->fix.epv = NAN;            gpsdata->fix.eph = NAN;
214            /* epe should always be present if eph or epv is */            /* epe should always be present if eph or epv is */
215            if (sp[2] != '?') {            if (sp[2] != '?') {
216              char epe[20], eph[20], epv[20];              char epe[20], eph[20], epv[20];
217              (void)sscanf(sp, "E=%s %s %s", epe, eph, epv);              (void)sscanf(sp, "E=%s %s %s", epe, eph, epv);
218  #define DEFAULT(val) (val[0] == '?') ? NAN : g_ascii_strtod(val, NULL)  #define DEFAULT(val) (val[0] == '?') ? NAN : g_ascii_strtod(val, NULL)
             gpsdata->epe = DEFAULT(epe);  
219              gpsdata->fix.eph = DEFAULT(eph);              gpsdata->fix.eph = DEFAULT(eph);
             gpsdata->fix.epv = DEFAULT(epv);  
220  #undef DEFAULT  #undef DEFAULT
221            }            }
222            break;            break;
# Line 260  static void gps_unpack(char *buf, struct Line 257  static void gps_unpack(char *buf, struct
257                nf.ept = DEFAULT(ept);                nf.ept = DEFAULT(ept);
258                nf.altitude = DEFAULT(alt);                nf.altitude = DEFAULT(alt);
259                nf.eph = DEFAULT(eph);                nf.eph = DEFAULT(eph);
               nf.epv = DEFAULT(epv);  
260                nf.track = DEFAULT(track);                nf.track = DEFAULT(track);
261                nf.speed = DEFAULT(speed);                nf.speed = DEFAULT(speed);
262                nf.climb = DEFAULT(climb);                nf.climb = DEFAULT(climb);
# Line 276  static void gps_unpack(char *buf, struct Line 272  static void gps_unpack(char *buf, struct
272                  gpsdata->set |= ALTITUDE_SET | CLIMB_SET;                  gpsdata->set |= ALTITUDE_SET | CLIMB_SET;
273                if (isnan(nf.eph)==0)                if (isnan(nf.eph)==0)
274                  gpsdata->set |= HERR_SET;                  gpsdata->set |= HERR_SET;
               if (isnan(nf.epv)==0)  
                 gpsdata->set |= VERR_SET;  
275                if (isnan(nf.track)==0)                if (isnan(nf.track)==0)
276                  gpsdata->set |= TRACK_SET | SPEED_SET;                  gpsdata->set |= TRACK_SET | SPEED_SET;
277                if (isnan(nf.eps)==0)                if (isnan(nf.eps)==0)
# Line 507  location_changed(LocationGPSDevice *devi Line 501  location_changed(LocationGPSDevice *devi
501    if(gps_state->fields & LOCATION_GPS_DEVICE_LATLONG_SET) {    if(gps_state->fields & LOCATION_GPS_DEVICE_LATLONG_SET) {
502      gps_state->latitude = device->fix->latitude;      gps_state->latitude = device->fix->latitude;
503      gps_state->longitude = device->fix->longitude;      gps_state->longitude = device->fix->longitude;
504      gps_state->epe = device->fix->eph;      gps_state->eph = device->fix->eph/100.0;  // we want eph in meters
505    }    }
506    
507    if(gps_state->fields & LOCATION_GPS_DEVICE_TRACK_SET)    if(gps_state->fields & LOCATION_GPS_DEVICE_TRACK_SET)
# Line 618  float gps_get_heading(appdata_t *appdata Line 612  float gps_get_heading(appdata_t *appdata
612    return gps_state->heading;    return gps_state->heading;
613  }  }
614    
615  float gps_get_epe(appdata_t *appdata) {  float gps_get_eph(appdata_t *appdata) {
616    gps_state_t *gps_state = appdata->gps_state;    gps_state_t *gps_state = appdata->gps_state;
617    
618    if(!(gps_state->fields & LOCATION_GPS_DEVICE_LATLONG_SET))    if(!(gps_state->fields & LOCATION_GPS_DEVICE_LATLONG_SET))
619      return NAN;      return NAN;
620    
621    return gps_state->epe;    return gps_state->eph;
622  }  }
623    
624  gps_sat_t *gps_get_sats(appdata_t *appdata) {  gps_sat_t *gps_get_sats(appdata_t *appdata) {

Legend:
Removed from v.36  
changed lines
  Added in v.53