altos: Start restructuring APRS code to create and send packets
[fw/altos] / src / drivers / ao_aprs.c
index 937be73409c214ff8f130b08494b3019a1d89a4b..b8d17bd94b257dfcd4cd45268091e3fe5fe236d5 100644 (file)
@@ -161,7 +161,6 @@ void ddsSetFTW (uint32_t ftw);
 
 uint16_t sysCRC16(uint8_t *buffer, uint8_t length, uint16_t crc);
 
-uint8_t timeGetTicks();
 void timeInit();
 void timeSetDutyCycle (uint8_t dutyCycle);
 void timeUpdate();
@@ -220,30 +219,6 @@ uint16_t sysCRC16(uint8_t *buffer, uint8_t length, uint16_t crc)
  *  @{
  */
 
-/// A counter that ticks every 100mS.
-uint8_t timeTicks;
-
-/// Counts the number of 104uS interrupts for a 100mS time period.
-uint16_t timeInterruptCount;
-
-/// Counts the number of 100mS time periods in 1 second.
-uint8_t time100ms;
-
-/// System time in seconds.
-uint8_t timeSeconds;
-
-/// System time in minutes.
-uint8_t timeMinutes;
-
-/// System time in hours.
-uint8_t timeHours;
-
-/// Desired LED duty cycle 0 to 9 where 0 = 0% and 9 = 90%.
-uint8_t timeDutyCycle;
-
-/// Current value of the timer 1 compare register used to generate 104uS interrupt rate (9600bps).
-uint16_t timeCompare;
-
 /// 16-bit NCO where the upper 8-bits are used to index into the frequency generation table.
 uint16_t timeNCO;
 
@@ -253,86 +228,14 @@ uint16_t timeNCOFreq;
 /// Counter used to deciminate down from the 104uS to 833uS interrupt rate.  (9600 to 1200 baud) 
 uint8_t timeLowRateCount;
 
-/// Flag set true once per second.
-bool_t timeUpdateFlag;
-
-/// Flag that indicate the flight time should run.
-bool_t timeRunFlag;
-
-/// The change in the CCP_1 register for each 104uS (9600bps) interrupt period.
-#define TIME_RATE 125
-
-/**
- *   Running 8-bit counter that ticks every 100mS.
- *
- *   @return 100mS time tick
- */
-uint8_t timeGetTicks()
-{
-    return timeTicks;
-}
-
 /**
  *   Initialize the real-time clock.
  */
 void timeInit()
 {
-    timeTicks = 0;
-    timeInterruptCount = 0;
-//    time100mS = 0;
-    timeSeconds = 0;
-    timeMinutes = 0;
-    timeHours = 0;
-    timeCompare = TIME_RATE;
-    timeUpdateFlag = false;
     timeNCO = 0x00;
     timeLowRateCount = 0;
     timeNCOFreq = 0x2000;
-    timeRunFlag = false;
-}
-
-/**
- *   Function return true once a second based on real-time clock.
- *
- *   @return true on one second tick; otherwise false
- */
-bool_t timeIsUpdate()
-{
-    if (timeUpdateFlag) 
-    {
-        timeUpdateFlag = false;
-        return true;
-    } // END if
-
-    return false;
-}
-
-/**
- *   Set a flag to indicate the flight time should run.  This flag is typically set when the payload
- *   lifts off.
- */
-void timeSetRunFlag()
-{
-    timeRunFlag = true;
-}
-
-/**
- *   Timer interrupt handler called every 104uS (9600 times/second).
- */
-void timeUpdate()
-{
-    // Setup the next interrupt for the operational mode.
-    timeCompare += TIME_RATE;
-
-    putchar ((timeNCO >> 8) < 0x80 ? 0xc0 : 0x40);
-
-    timeNCO += timeNCOFreq;
-
-    if (++timeLowRateCount == 8) 
-    {
-       timeLowRateCount = 0;
-       tnc1200TimerTick();
-    } // END if
 }
 
 /** @} */
@@ -634,6 +537,28 @@ void tncPositionPacket(void)
     tncLength += c;
 }
 
+static int16_t
+tncFill(uint8_t *buf, int16_t len)
+{
+    int16_t    l = 0;
+    uint8_t    b;
+    uint8_t    bit;
+
+    while (tncMode != TNC_TX_READY && l < len) {
+       b = 0;
+       for (bit = 0; bit < 8; bit++) {
+           b = b << 1 | (timeNCO >> 15);
+           timeNCO += timeNCOFreq;
+       }
+       *buf++ = b;
+       l++;
+       tnc1200TimerTick();
+    }
+    if (tncMode == TNC_TX_READY)
+       l = -l;
+    return l;
+}
+
 /** 
  *    Prepare an AX.25 data packet.  Each time this method is called, it automatically
  *    rotates through 1 of 3 messages.
@@ -670,19 +595,9 @@ void tncTxPacket(void)
     tncIndex = 0;
     tncMode = TNC_TX_SYNC;
 
-    // Turn on the PA chain.
-//    output_high (IO_PTT);
-
-    // Wait for the PA chain to power up.
-//    delay_ms (10);
-
-    // Key the DDS.
-//    output_high (IO_OSK);
+    timeInit();
 
-    // Log the battery and reference voltage just after we key the transmitter.
-//    sysLogVoltage();
-    while (tncMode != TNC_TX_READY)
-       timeUpdate();
+    ao_radio_send_lots(tncFill);
 }
 
 /** @} */