diff options
| -rw-r--r-- | src/drivers/ao_aprs.c | 52 | ||||
| -rw-r--r-- | src/test/ao_aprs_test.c | 52 | 
2 files changed, 72 insertions, 32 deletions
| diff --git a/src/drivers/ao_aprs.c b/src/drivers/ao_aprs.c index 7e9013a0..b8d17bd9 100644 --- a/src/drivers/ao_aprs.c +++ b/src/drivers/ao_aprs.c @@ -238,22 +238,6 @@ void timeInit()      timeNCOFreq = 0x2000;  } -/** - *   Timer interrupt handler called every 104uS (9600 times/second). - */ -void timeUpdate() -{ -    putchar ((timeNCO >> 8) < 0x80 ? 0xc0 : 0x40); - -    timeNCO += timeNCOFreq; - -    if (++timeLowRateCount == 8)  -    { -	timeLowRateCount = 0; -	tnc1200TimerTick(); -    } // END if -} -  /** @} */  /** @@ -553,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. @@ -589,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);  }  /** @} */ diff --git a/src/test/ao_aprs_test.c b/src/test/ao_aprs_test.c index 93dab577..d350ca0d 100644 --- a/src/test/ao_aprs_test.c +++ b/src/test/ao_aprs_test.c @@ -25,6 +25,27 @@  #define AO_APRS_TEST +typedef int16_t (*ao_radio_fill_func)(uint8_t *buffer, int16_t len); + +#define DEBUG 0 +#if DEBUG +void +ao_aprs_bit(uint8_t bit) +{ +	static int	seq = 0; +	printf ("%6d %d\n", seq++, bit ? 1 : 0); +} +#else +void +ao_aprs_bit(uint8_t bit) +{ +	putchar (bit ? 0xc0 : 0x40); +} +#endif + +void +ao_radio_send_lots(ao_radio_fill_func fill); +  #include <ao_aprs.c>  /* @@ -57,10 +78,12 @@  static void  audio_gap(int secs)  { +#if !DEBUG  	int	samples = secs * 9600;  	while (samples--) -		putchar(0x7f); +		ao_aprs_bit(0); +#endif  }  // This is where we go after reset. @@ -76,6 +99,27 @@ int main(int argc, char **argv)      exit(0);  } - - - +void +ao_radio_send_lots(ao_radio_fill_func fill) +{ +	int16_t	len; +	uint8_t	done = 0; +	uint8_t	buf[16], *b, c; +	uint8_t bit; + +	while (!done) { +		len = (*fill)(buf, sizeof (buf)); +		if (len < 0) { +			done = 1; +			len = -len; +		} +		b = buf; +		while (len--) { +			c = *b++; +			for (bit = 0; bit < 8; bit++) { +				ao_aprs_bit(c & 0x80); +				c <<= 1; +			} +		} +	} +} | 
