uint16_t sysCRC16(uint8_t *buffer, uint8_t length, uint16_t crc);
-uint8_t timeGetTicks();
void timeInit();
void timeSetDutyCycle (uint8_t dutyCycle);
void timeUpdate();
* @{
*/
-/// 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;
/// 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
}
/** @} */
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.
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);
}
/** @} */