Browse Source

ArduCopter: fixed print_latlon bug in which it would print negative lat/lon numbers incorrectly (i.e. -1234567890 would be printed as -124.xxx).

mission-4.1.18
rmackay9 13 years ago
parent
commit
2a216ce900
  1. 13
      ArduCopter/Log.pde
  2. 16
      libraries/AP_GPS/examples/GPS_AUTO_test/GPS_AUTO_test.pde

13
ArduCopter/Log.pde

@ -220,13 +220,20 @@ process_logs(uint8_t argc, const Menu::arg *argv)
return 0; return 0;
} }
// print_latlon - prints an latitude or longitude value held in an int32_t // print_latlon - prints an latitude or longitude value held in an int32_t
// probably this should be moved to AP_Common // probably this should be moved to AP_Common
void print_latlon(BetterStream *s, int32_t lat_or_lon) void print_latlon(BetterStream *s, int32_t lat_or_lon)
{ {
int32_t dec_portion = lat_or_lon / T7; int32_t dec_portion, frac_portion;
int32_t frac_portion = labs(lat_or_lon - dec_portion*T7);
// extract decimal portion (special handling of negative numbers to ensure we round towards zero)
dec_portion = labs(lat_or_lon) / T7;
if( lat_or_lon < 0 ){
dec_portion = -dec_portion;
}
// extract fractional portion
frac_portion = labs(lat_or_lon - dec_portion*T7);
s->printf("%ld.%07ld",(long)dec_portion,(long)frac_portion); s->printf("%ld.%07ld",(long)dec_portion,(long)frac_portion);
} }

16
libraries/AP_GPS/examples/GPS_AUTO_test/GPS_AUTO_test.pde

@ -17,13 +17,21 @@ AP_GPS_Auto GPS(&Serial1, &gps);
#define T6 1000000 #define T6 1000000
#define T7 10000000 #define T7 10000000
// print_latlon - prints an latitude or longitude value held in an int32_t // print_latlon - prints an latitude or longitude value held in an int32_t
// probably this should be moved to AP_Common // probably this should be moved to AP_Common
void print_latlon(BetterStream *s, int32_t lat_or_lon) void print_latlon(BetterStream *s, int32_t lat_or_lon)
{ {
int32_t dec_portion = lat_or_lon / T7; int32_t dec_portion, frac_portion;
int32_t frac_portion = labs(lat_or_lon - dec_portion*T7);
s->printf("%ld.%07ld",dec_portion,frac_portion); // extract decimal portion (special handling of negative numbers to ensure we round towards zero)
dec_portion = labs(lat_or_lon) / T7;
if( lat_or_lon < 0 ){
dec_portion = -dec_portion;
}
// extract fractional portion
frac_portion = labs(lat_or_lon - dec_portion*T7);
s->printf("%ld.%07ld",(long)dec_portion,(long)frac_portion);
} }
void setup() void setup()

Loading…
Cancel
Save