summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2014-02-09 22:53:05 -0800
committerKeith Packard <keithp@keithp.com>2014-02-09 22:53:05 -0800
commit5001a0f882af53dde33fc531215944c9d727baf4 (patch)
treea78e1f00503df524680cd17d1a7ad8243a1db63f
parent864d1e2282ac1d241478cf663ee24112c9d3dc37 (diff)
altos: Re-send previous GPS position in APRS if lock is lost
APRS radios often show only the last received APRS packet, which means that erasing the last known GPS position when we lose lock by sending 0/0/0 is unhelpful. Instead, just send the last known position, and make sure that we send 0/0/0 before we're locked the first time. Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--src/drivers/ao_aprs.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/src/drivers/ao_aprs.c b/src/drivers/ao_aprs.c
index c327c897..d472af4e 100644
--- a/src/drivers/ao_aprs.c
+++ b/src/drivers/ao_aprs.c
@@ -531,9 +531,10 @@ static int tncComment(uint8_t *buf)
*/
static int tncPositionPacket(void)
{
- int32_t latitude = 0;
- int32_t longitude = 0;
- int32_t altitude = 0;
+ static int32_t latitude;
+ static int32_t longitude;
+ static int32_t altitude;
+ int32_t lat, lon, alt;
uint8_t *buf;
if (ao_gps_data.flags & AO_GPS_VALID) {
@@ -544,30 +545,29 @@ static int tncPositionPacket(void)
altitude = 0;
}
- altitude = (altitude * (int32_t) 10000 + (3048/2)) / (int32_t) 3048;
-
buf = tncBuffer;
*buf++ = '!';
/* Symbol table ID */
*buf++ = '/';
- latitude = ((uint64_t) 380926 * (900000000 - latitude)) / 10000000;
- longitude = ((uint64_t) 190463 * (1800000000 + longitude)) / 10000000;
+ lat = ((uint64_t) 380926 * (900000000 - latitude)) / 10000000;
+ lon = ((uint64_t) 190463 * (1800000000 + longitude)) / 10000000;
#define ALTITUDE_LOG_BASE 0.001998002662673f /* log(1.002) */
- altitude = logf((float) altitude) * (1/ALTITUDE_LOG_BASE);
+ alt = (altitude * (int32_t) 10000 + (3048/2)) / (int32_t) 3048;
+ alt = logf((float) altitude) * (1/ALTITUDE_LOG_BASE);
- tncCompressInt(buf, latitude, 4);
+ tncCompressInt(buf, lat, 4);
buf += 4;
- tncCompressInt(buf, longitude, 4);
+ tncCompressInt(buf, lon, 4);
buf += 4;
/* Symbol code */
*buf++ = '\'';
- tncCompressInt(buf, altitude, 2);
+ tncCompressInt(buf, alt, 2);
buf += 2;
*buf++ = 33 + ((1 << 5) | (2 << 3));