diff options
| author | Keith Packard <keithp@keithp.com> | 2012-07-10 20:35:19 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2012-07-10 20:35:19 -0700 | 
| commit | fb60d87b02c0fc83a0b4268212f0b6b740c984e3 (patch) | |
| tree | 596b33c51248f5a8e5d243d16ba8be2f9b2b1738 /src/drivers | |
| parent | bca72b782a2909ecedef15ad589292647221ca56 (diff) | |
altos: Signal continuity over radio in pad mode (trac #40)
This is especially useful for telemini which has no beeper, allowing
you to hear the continuity signal while at the pad over the air.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/drivers')
| -rw-r--r-- | src/drivers/ao_cc1120.c | 69 | 
1 files changed, 53 insertions, 16 deletions
| diff --git a/src/drivers/ao_cc1120.c b/src/drivers/ao_cc1120.c index 1d28148b..a36d922c 100644 --- a/src/drivers/ao_cc1120.c +++ b/src/drivers/ao_cc1120.c @@ -160,7 +160,7 @@ ao_radio_fifo_read(uint8_t *data, uint8_t len)  }  static uint8_t -ao_radio_fifo_write(uint8_t *data, uint8_t len) +ao_radio_fifo_write_start(void)  {  	uint8_t	addr = ((0 << CC1120_READ)  |  			(1 << CC1120_BURST) | @@ -169,24 +169,28 @@ ao_radio_fifo_write(uint8_t *data, uint8_t len)  	ao_radio_select();  	ao_radio_duplex(&addr, &status, 1); -	ao_radio_spi_send(data, len); +	return status; +} + +static inline uint8_t ao_radio_fifo_write_stop(uint8_t status) {  	ao_radio_deselect();  	return status;  }  static uint8_t -ao_radio_fifo_write_fixed(uint8_t data, uint8_t len) +ao_radio_fifo_write(uint8_t *data, uint8_t len)  { -	uint8_t	addr = ((0 << CC1120_READ)  | -			(1 << CC1120_BURST) | -			CC1120_FIFO); -	uint8_t status; +	uint8_t	status = ao_radio_fifo_write_start(); +	ao_radio_spi_send(data, len); +	return ao_radio_fifo_write_stop(status); +} -	ao_radio_select(); -	ao_radio_duplex(&addr, &status, 1); +static uint8_t +ao_radio_fifo_write_fixed(uint8_t data, uint8_t len) +{ +	uint8_t status = ao_radio_fifo_write_start();  	ao_radio_spi_send_fixed(data, len); -	ao_radio_deselect(); -	return status; +	return ao_radio_fifo_write_stop(status);  }  static uint8_t @@ -446,19 +450,20 @@ ao_radio_get(uint8_t len)  #define ao_radio_put()	ao_mutex_put(&ao_radio_mutex) -void -ao_radio_rdf(uint8_t len) +static void +ao_rdf_start(uint8_t len)  { -	int i; -  	ao_radio_abort = 0;  	ao_radio_get(len);  	ao_radio_set_mode(AO_RADIO_MODE_RDF);  	ao_radio_wake = 0; -	ao_radio_fifo_write_fixed(ao_radio_rdf_value, len); +} +static void +ao_rdf_run(void) +{  	ao_radio_start_tx();  	cli(); @@ -471,6 +476,38 @@ ao_radio_rdf(uint8_t len)  }  void +ao_radio_rdf(void) +{ +	ao_rdf_start(AO_RADIO_RDF_LEN); + +	ao_radio_fifo_write_fixed(ao_radio_rdf_value, AO_RADIO_RDF_LEN); + +	ao_rdf_run(); +} + +void +ao_radio_continuity(uint8_t c) +{ +	uint8_t	i; +	uint8_t status; + +	ao_rdf_start(AO_RADIO_CONT_TOTAL_LEN); + +	status = ao_radio_fifo_write_start(); +	for (i = 0; i < 3; i++) { +		ao_radio_spi_send_fixed(0x00, AO_RADIO_CONT_PAUSE_LEN); +		if (i < c) +			ao_radio_spi_send_fixed(ao_radio_rdf_value, AO_RADIO_CONT_TONE_LEN); +		else +			ao_radio_spi_send_fixed(0x00, AO_RADIO_CONT_TONE_LEN); +	} +	ao_radio_spi_send_fixed(0x00, AO_RADIO_CONT_PAUSE_LEN); +	status = ao_radio_fifo_write_stop(status); +	(void) status; +	ao_rdf_run(); +} + +void  ao_radio_rdf_abort(void)  {  	ao_radio_abort = 1; | 
