aboutsummaryrefslogtreecommitdiff
path: root/src/drivers
diff options
context:
space:
mode:
authorJohn Hiesey <john@hiesey.com>2014-05-20 01:25:52 -0700
committerJohn Hiesey <john@hiesey.com>2014-05-20 01:31:14 -0700
commit4a666d094d016527bcb342e6209fb3ad40f0ed58 (patch)
treebbab0ca6bf0a517a10e6b7211454951177791fc1 /src/drivers
parentb250e28abfaf4d1adc8bdfb815fff369e0e41cc6 (diff)
downloadpx4-firmware-4a666d094d016527bcb342e6209fb3ad40f0ed58.tar.gz
px4-firmware-4a666d094d016527bcb342e6209fb3ad40f0ed58.tar.bz2
px4-firmware-4a666d094d016527bcb342e6209fb3ad40f0ed58.zip
frsky_telemetry: fix gps data format
Eliminate inadvertent rounding and generate degrees/minutes instead of degrees/minutes/seconds output per frsky docs
Diffstat (limited to 'src/drivers')
-rw-r--r--src/drivers/frsky_telemetry/frsky_data.c15
1 files changed, 5 insertions, 10 deletions
diff --git a/src/drivers/frsky_telemetry/frsky_data.c b/src/drivers/frsky_telemetry/frsky_data.c
index 18de3f4da..dd9b90fb3 100644
--- a/src/drivers/frsky_telemetry/frsky_data.c
+++ b/src/drivers/frsky_telemetry/frsky_data.c
@@ -194,17 +194,12 @@ void frsky_send_frame1(int uart)
}
/**
- * Formats the decimal latitude/longitude to the required degrees/minutes/seconds.
+ * Formats the decimal latitude/longitude to the required degrees/minutes.
*/
static float frsky_format_gps(float dec)
{
- float dms_deg = (int) dec;
- float dec_deg = dec - dms_deg;
- float dms_min = (int) (dec_deg * 60);
- float dec_min = (dec_deg * 60) - dms_min;
- float dms_sec = dec_min * 60;
-
- return (dms_deg * 100.0f) + dms_min + (dms_sec / 100.0f);
+ float dm_deg = (int) dec;
+ return (dm_deg * 100.0f) + (dec - dm_deg) * 60;
}
/**
@@ -232,9 +227,9 @@ void frsky_send_frame2(int uart)
struct tm *tm_gps = gmtime(&time_gps);
course = (global_pos.yaw + M_PI_F) / M_PI_F * 180.0f;
- lat = frsky_format_gps(abs(global_pos.lat));
+ lat = frsky_format_gps(fabsf(global_pos.lat));
lat_ns = (global_pos.lat < 0) ? 'S' : 'N';
- lon = frsky_format_gps(abs(global_pos.lon));
+ lon = frsky_format_gps(fabsf(global_pos.lon));
lon_ew = (global_pos.lon < 0) ? 'W' : 'E';
speed = sqrtf(global_pos.vel_n * global_pos.vel_n + global_pos.vel_e * global_pos.vel_e)
* 25.0f / 46.0f;