diff options
| author | Keith Packard <keithp@keithp.com> | 2012-06-17 19:04:53 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2012-06-17 19:04:53 -0700 | 
| commit | 976a8375932ddb46ca3100863b0a892732c0923e (patch) | |
| tree | 1160e6acd0c2414edc7d1df4ba09620e03b5e87e /src/drivers/ao_cc1120.c | |
| parent | 629f43e7c7abbff33e14b168a08a4b6a9c88b937 (diff) | |
altos: make cc1120 ao_radio_send re-entrant
It gets called from multiple tasks, so put local data on the stack.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/drivers/ao_cc1120.c')
| -rw-r--r-- | src/drivers/ao_cc1120.c | 28 | 
1 files changed, 15 insertions, 13 deletions
diff --git a/src/drivers/ao_cc1120.c b/src/drivers/ao_cc1120.c index 231d14d4..67a36c5c 100644 --- a/src/drivers/ao_cc1120.c +++ b/src/drivers/ao_cc1120.c @@ -27,6 +27,12 @@ uint8_t ao_radio_abort;  #define CC1120_DEBUG	1  #define CC1120_TRACE	0 +#if CC1120_TRACE +#define fec_dump_bytes(b,l,n) ao_fec_dump_bytes(b,l,n) +#else +#define fec_dump_bytes(b,l,n) +#endif +  uint32_t	ao_radio_cal = 0x6ca333;  #define FOSC	32000000 @@ -330,33 +336,29 @@ void  ao_radio_send(void *d, uint8_t size)  {  	uint8_t		marc_status; -	static uint8_t	prepare[128]; +	uint8_t		prepare[size + AO_FEC_PREPARE_EXTRA];  	uint8_t		prepare_len; -	static uint8_t	encode[256]; +	uint8_t		encode[sizeof(prepare) * 2];  	uint8_t		encode_len; -	static uint8_t	interleave[256]; +	uint8_t		interleave[sizeof(encode)];  	uint8_t		interleave_len; -	ao_fec_dump_bytes(d, size, "Input"); +	fec_dump_bytes(d, size, "Input"); -#if 1  	prepare_len = ao_fec_prepare(d, size, prepare); -	ao_fec_dump_bytes(prepare, prepare_len, "Prepare"); +	fec_dump_bytes(prepare, prepare_len, "Prepare");  	ao_fec_whiten(prepare, prepare_len, prepare); -	ao_fec_dump_bytes(prepare, prepare_len, "Whiten"); +	fec_dump_bytes(prepare, prepare_len, "Whiten");  	encode_len = ao_fec_encode(prepare, prepare_len, encode); -	ao_fec_dump_bytes(encode, encode_len, "Encode"); +	fec_dump_bytes(encode, encode_len, "Encode");  	interleave_len = ao_fec_interleave(encode, encode_len, interleave); -	ao_fec_dump_bytes(interleave, interleave_len, "Interleave"); +	fec_dump_bytes(interleave, interleave_len, "Interleave"); +  	ao_radio_get(interleave_len);  	ao_radio_fifo_write(interleave, interleave_len); -#else -	ao_radio_get(size); -	ao_radio_fifo_write(d, size); -#endif  	ao_radio_wake = 0;  | 
