altos: Get CC115L radio working.
[fw/altos] / src / drivers / ao_aprs.c
index e3abe52eff9758eb0e6984d5a7888591c3a38d16..6ab61e6a3018f9d945bce57be25eb5176e251a3c 100644 (file)
@@ -265,6 +265,7 @@ static uint8_t TNC_AX25_HEADER[] = {
 static void
 tncSetCallsign(void)
 {
+#ifndef AO_APRS_TEST
        uint8_t i;
 
        for (i = 0; i < TNC_CALLSIGN_LEN; i++) {
@@ -274,7 +275,7 @@ tncSetCallsign(void)
        }
        for (; i < TNC_CALLSIGN_LEN; i++)
                TNC_AX25_HEADER[TNC_CALLSIGN_OFF + i] = ' ' << 1;
-               
+#endif
 }
 
 /// The next bit to transmit.
@@ -506,24 +507,32 @@ static int tncPositionPacket(void)
        longitude = -longitude;
     }
 
+    /* Round latitude and longitude by 0.005 minutes */
+    latitude = latitude + 833;
+    if (latitude > 900000000)
+       latitude = 900000000;
+    longitude = longitude + 833;
+    if (longitude > 1800000000)
+           longitude = 1800000000;
+
     lat_deg = latitude / 10000000;
     latitude -= lat_deg * 10000000;
     latitude *= 60;
     lat_min = latitude / 10000000;
     latitude -= lat_min * 10000000;
-    lat_frac = (latitude + 50000) / 100000;
+    lat_frac = latitude / 100000;
 
     lon_deg = longitude / 10000000;
     longitude -= lon_deg * 10000000;
     longitude *= 60;
     lon_min = longitude / 10000000;
     longitude -= lon_min * 10000000;
-    lon_frac = (longitude + 50000) / 100000;
+    lon_frac = longitude / 100000;
 
     if (altitude < 0)
        altitude = 0;
 
-    altitude = altitude * (int32_t) 1000 / (int32_t) 3048;
+    altitude = (altitude * (int32_t) 10000 + (3048/2)) / (int32_t) 3048;
     
     return sprintf ((char *) tncBuffer, "=%02u%02u.%02u%c\\%03u%02u.%02u%cO /A=%06u\015",
                    lat_deg, lat_min, lat_frac, lat_sign,
@@ -584,7 +593,7 @@ void ao_aprs_send(void)
     tncIndex = 0;
     tncMode = TNC_TX_SYNC;
 
-    ao_radio_send_lots(tncFill);
+    ao_radio_send_aprs(tncFill);
 }
 
 /** @} */