X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=src%2Fao_radio.c;h=4c382bb9685b1f66045678066553e0d7e7378ffe;hp=d156f54349caefffa33bc24bc638b560e2d3982e;hb=6492218fc316f8cf6214a577807a8dd0a80a9b6a;hpb=fe5123fa801f5dafed8b052da607899d1ef20500 diff --git a/src/ao_radio.c b/src/ao_radio.c index d156f543..4c382bb9 100644 --- a/src/ao_radio.c +++ b/src/ao_radio.c @@ -161,8 +161,6 @@ static __code uint8_t radio_setup[] = { RF_SYNC0_OFF, 0x91, /* max packet length */ - RF_PKTLEN_OFF, sizeof (struct ao_telemetry), - RF_PKTCTRL1_OFF, ((1 << PKTCTRL1_PQT_SHIFT)| PKTCTRL1_APPEND_STATUS| PKTCTRL1_ADR_CHK_NONE), @@ -233,7 +231,6 @@ static __code uint8_t fixed_pkt_setup[] = { (DEVIATION_M << RF_DEVIATN_DEVIATION_M_SHIFT)), /* max packet length -- now set inline */ - // RF_PKTLEN_OFF, sizeof (struct ao_telemetry), RF_PKTCTRL1_OFF, ((1 << PKTCTRL1_PQT_SHIFT)| PKTCTRL1_APPEND_STATUS| PKTCTRL1_ADR_CHK_NONE), @@ -264,12 +261,11 @@ ao_radio_general_isr(void) __interrupt 16 } void -ao_radio_set_fixed_pkt(size_t size) +ao_radio_set_packet(void) { uint8_t i; for (i = 0; i < sizeof (fixed_pkt_setup); i += 2) RF[fixed_pkt_setup[i]] = fixed_pkt_setup[i+1]; - RF[RF_PKTLEN_OFF] = size; } void @@ -285,7 +281,7 @@ ao_radio_idle(void) } void -ao_radio_get(void) +ao_radio_get(uint8_t len) { ao_config_get(); ao_mutex_get(&ao_radio_mutex); @@ -294,13 +290,14 @@ ao_radio_get(void) RF_FREQ2 = (uint8_t) (ao_config.radio_cal >> 16); RF_FREQ1 = (uint8_t) (ao_config.radio_cal >> 8); RF_FREQ0 = (uint8_t) (ao_config.radio_cal); + RF_PKTLEN = len; } void ao_radio_send(__xdata void *packet, uint8_t size) __reentrant { - ao_radio_get(); + ao_radio_get(size); ao_radio_done = 0; ao_dma_set_transfer(ao_radio_dma, packet, @@ -323,7 +320,7 @@ uint8_t ao_radio_recv(__xdata void *packet, uint8_t size) __reentrant { ao_radio_abort = 0; - ao_radio_get(); + ao_radio_get(size - 2); ao_dma_set_transfer(ao_radio_dma, &RFDXADDR, packet, @@ -375,12 +372,6 @@ ao_radio_rdf(int ms) uint8_t i; uint8_t pkt_len; - ao_radio_abort = 0; - ao_radio_get(); - ao_radio_done = 0; - for (i = 0; i < sizeof (rdf_setup); i += 2) - RF[rdf_setup[i]] = rdf_setup[i+1]; - /* * Compute the packet length as follows: * @@ -391,7 +382,12 @@ ao_radio_rdf(int ms) if (ms > (255 * 4)) ms = 255 * 4; pkt_len = ms >> 2; - RF[RF_PKTLEN_OFF] = pkt_len; + + ao_radio_abort = 0; + ao_radio_get(pkt_len); + ao_radio_done = 0; + 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, @@ -411,7 +407,7 @@ ao_radio_rdf(int ms) ao_dma_abort(ao_radio_dma); ao_radio_idle(); } - ao_radio_set_telemetry(); + ao_radio_set_packet(); ao_radio_put(); } @@ -437,8 +433,10 @@ ao_radio_test(void) mode++; if ((mode & 2) && !radio_on) { ao_set_monitor(0); +#if PACKET_HAS_SLAVE ao_packet_slave_stop(); - ao_radio_get(); +#endif + ao_radio_get(0xff); RFST = RFST_STX; radio_on = 1; } @@ -455,8 +453,8 @@ ao_radio_test(void) } __code struct ao_cmds ao_radio_cmds[] = { - { 'C', ao_radio_test, "C <1 start, 0 stop, none both> Radio carrier test" }, - { 0, ao_radio_test, NULL }, + { ao_radio_test, "C <1 start, 0 stop, none both>\0Radio carrier test" }, + { 0, NULL }, }; void @@ -465,7 +463,7 @@ ao_radio_init(void) uint8_t i; for (i = 0; i < sizeof (radio_setup); i += 2) RF[radio_setup[i]] = radio_setup[i+1]; - ao_radio_set_telemetry(); + ao_radio_set_packet(); ao_radio_dma_done = 1; ao_radio_dma = ao_dma_alloc(&ao_radio_dma_done); RFIF = 0;