diff options
| author | Keith Packard <keithp@keithp.com> | 2009-09-04 11:45:52 -0700 |
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2009-09-04 11:45:52 -0700 |
| commit | 54545640b0db7747137655f84bc67fd290ecb904 (patch) | |
| tree | 6cee8db5f36a5c2b7cfd2c3f6bc16287325d4d21 /src/ao_radio.c | |
| parent | 9fafee109e96435c96639b21211cac0500673a63 (diff) | |
Add back the RDF tone generator
Tracking the rocket on the ground may be easier using tones than using
the digital data stream, so we'll try that and see what we think.
This reverts commit 3a3bfd471a868d546d83cdc431b53c8f5208edb9.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/ao_radio.c')
| -rw-r--r-- | src/ao_radio.c | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/src/ao_radio.c b/src/ao_radio.c index ca1ec7e8..e4d42c6c 100644 --- a/src/ao_radio.c +++ b/src/ao_radio.c @@ -77,6 +77,29 @@ #define DEVIATION_M 6 #define DEVIATION_E 3 +/* + * For our RDF beacon, set the symbol rate to 2kBaud (for a 1kHz tone), + * so the DRATE_E and DRATE_M values are: + * + * M is 94 and E is 6 + * + * To make the tone last for 200ms, we need 2000 * .2 = 400 bits or 50 bytes + */ + +#define RDF_DRATE_E 6 +#define RDF_DRATE_M 94 +#define RDF_PACKET_LEN 50 + +/* + * RDF deviation should match the normal NFM value of 5kHz + * + * M is 6 and E is 1 + * + */ + +#define RDF_DEVIATION_M 6 +#define RDF_DEVIATION_E 1 + /* This are from the table for 433MHz */ #define RF_POWER_M30_DBM 0x12 @@ -184,6 +207,28 @@ static __code uint8_t radio_setup[] = { RF_IOCFG0_OFF, 0x00, }; +static __code uint8_t rdf_setup[] = { + RF_MDMCFG4_OFF, ((CHANBW_E << RF_MDMCFG4_CHANBW_E_SHIFT) | + (CHANBW_M << RF_MDMCFG4_CHANBW_M_SHIFT) | + (RDF_DRATE_E << RF_MDMCFG4_DRATE_E_SHIFT)), + RF_MDMCFG3_OFF, (RDF_DRATE_M << RF_MDMCFG3_DRATE_M_SHIFT), + RF_MDMCFG2_OFF, (RF_MDMCFG2_DEM_DCFILT_OFF | + RF_MDMCFG2_MOD_FORMAT_GFSK | + RF_MDMCFG2_SYNC_MODE_15_16_THRES), + RF_MDMCFG1_OFF, (RF_MDMCFG1_FEC_DIS | + RF_MDMCFG1_NUM_PREAMBLE_2 | + (2 << RF_MDMCFG1_CHANSPC_E_SHIFT)), + + RF_DEVIATN_OFF, ((RDF_DEVIATION_E << RF_DEVIATN_DEVIATION_E_SHIFT) | + (RDF_DEVIATION_M << RF_DEVIATN_DEVIATION_M_SHIFT)), + + /* packet length */ + RF_PKTLEN_OFF, RDF_PACKET_LEN, + RF_PKTCTRL1_OFF, ((1 << PKTCTRL1_PQT_SHIFT)| + PKTCTRL1_ADR_CHK_NONE), + RF_PKTCTRL0_OFF, (RF_PKTCTRL0_PKT_FORMAT_NORMAL| + RF_PKTCTRL0_LENGTH_CONFIG_FIXED), +}; static __code uint8_t telemetry_setup[] = { RF_MDMCFG4_OFF, ((CHANBW_E << RF_MDMCFG4_CHANBW_E_SHIFT) | @@ -275,6 +320,50 @@ ao_radio_recv(__xdata struct ao_radio_recv *radio) __reentrant ao_mutex_put(&ao_radio_mutex); } +__xdata ao_radio_rdf_running; +__xdata ao_radio_rdf_value = 0x55; + +void +ao_radio_rdf(void) +{ + uint8_t i; + ao_mutex_get(&ao_radio_mutex); + ao_radio_idle(); + ao_radio_rdf_running = 1; + for (i = 0; i < sizeof (rdf_setup); i += 2) + RF[rdf_setup[i]] = rdf_setup[i+1]; + + ao_dma_set_transfer(ao_radio_dma, + &ao_radio_rdf_value, + &RFDXADDR, + RDF_PACKET_LEN, + DMA_CFG0_WORDSIZE_8 | + DMA_CFG0_TMODE_SINGLE | + DMA_CFG0_TRIGGER_RADIO, + DMA_CFG1_SRCINC_0 | + DMA_CFG1_DESTINC_0 | + DMA_CFG1_PRIORITY_HIGH); + ao_dma_start(ao_radio_dma); + RFST = RFST_STX; + + __critical while (!ao_radio_dma_done) + ao_sleep(&ao_radio_dma_done); + ao_radio_rdf_running = 0; + ao_radio_idle(); + for (i = 0; i < sizeof (rdf_setup); i += 2) + RF[telemetry_setup[i]] = telemetry_setup[i+1]; + ao_mutex_put(&ao_radio_mutex); +} + +void +ao_radio_rdf_abort(void) +{ + if (ao_radio_rdf_running) { + ao_dma_abort(ao_radio_dma); + ao_radio_idle(); + } +} + void ao_radio_init(void) { |
