Instead of setting the packet size at configuration time, use the
provided packet size to the send/recv functions to configure the
radio. This eliminates many configuration calls, leaving us with 'RDF'
mode and 'packet' mode, the latter working for telemetry and the
bi-directional link.
Signed-off-by: Keith Packard <keithp@keithp.com>
ao_radio_general_isr(void) __interrupt 16;
void
ao_radio_general_isr(void) __interrupt 16;
void
+ao_radio_get(uint8_t len);
#define ao_radio_put() ao_mutex_put(&ao_radio_mutex)
void
#define ao_radio_put() ao_mutex_put(&ao_radio_mutex)
void
-ao_radio_set_fixed_pkt(size_t size);
-
-#define ao_radio_set_telemetry() \
- ao_radio_set_fixed_pkt(sizeof (struct ao_telemetry))
-
-#define ao_radio_set_packet() \
- ao_radio_set_fixed_pkt(sizeof (struct ao_packet))
+ao_radio_set_packet(void);
void
ao_radio_send(__xdata void *data, uint8_t size) __reentrant;
void
ao_radio_send(__xdata void *data, uint8_t size) __reentrant;
ao_packet_master(void)
{
ao_config_get();
ao_packet_master(void)
{
ao_config_get();
ao_tx_packet.addr = ao_serial_number;
ao_tx_packet.len = AO_PACKET_SYN;
ao_packet_master_time = ao_time();
ao_tx_packet.addr = ao_serial_number;
ao_tx_packet.len = AO_PACKET_SYN;
ao_packet_master_time = ao_time();
ao_packet_master_sleeping = 0;
}
}
ao_packet_master_sleeping = 0;
}
}
- ao_radio_set_telemetry();
void
ao_packet_slave(void)
{
void
ao_packet_slave(void)
{
ao_tx_packet.addr = ao_serial_number;
ao_tx_packet.len = AO_PACKET_SYN;
while (ao_packet_enable) {
ao_tx_packet.addr = ao_serial_number;
ao_tx_packet.len = AO_PACKET_SYN;
while (ao_packet_enable) {
ao_radio_recv_abort();
ao_delay(AO_MS_TO_TICKS(10));
}
ao_radio_recv_abort();
ao_delay(AO_MS_TO_TICKS(10));
}
- ao_radio_get();
- ao_radio_set_telemetry();
- ao_radio_put();
-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];
{
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;
+ao_radio_get(uint8_t len)
{
ao_config_get();
ao_mutex_get(&ao_radio_mutex);
{
ao_config_get();
ao_mutex_get(&ao_radio_mutex);
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_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);
}
void
ao_radio_send(__xdata void *packet, uint8_t size) __reentrant
{
}
void
ao_radio_send(__xdata void *packet, uint8_t size) __reentrant
{
ao_radio_done = 0;
ao_dma_set_transfer(ao_radio_dma,
packet,
ao_radio_done = 0;
ao_dma_set_transfer(ao_radio_dma,
packet,
ao_radio_recv(__xdata void *packet, uint8_t size) __reentrant
{
ao_radio_abort = 0;
ao_radio_recv(__xdata void *packet, uint8_t size) __reentrant
{
ao_radio_abort = 0;
+ ao_radio_get(size - 2);
ao_dma_set_transfer(ao_radio_dma,
&RFDXADDR,
packet,
ao_dma_set_transfer(ao_radio_dma,
&RFDXADDR,
packet,
uint8_t i;
uint8_t pkt_len;
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:
*
/*
* Compute the packet length as follows:
*
if (ms > (255 * 4))
ms = 255 * 4;
pkt_len = ms >> 2;
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,
ao_dma_set_transfer(ao_radio_dma,
&ao_radio_rdf_value,
ao_dma_abort(ao_radio_dma);
ao_radio_idle();
}
ao_dma_abort(ao_radio_dma);
ao_radio_idle();
}
- ao_radio_set_telemetry();
if ((mode & 2) && !radio_on) {
ao_set_monitor(0);
ao_packet_slave_stop();
if ((mode & 2) && !radio_on) {
ao_set_monitor(0);
ao_packet_slave_stop();
RFST = RFST_STX;
radio_on = 1;
}
RFST = RFST_STX;
radio_on = 1;
}
uint8_t i;
for (i = 0; i < sizeof (radio_setup); i += 2)
RF[radio_setup[i]] = radio_setup[i+1];
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_dma_done = 1;
ao_radio_dma = ao_dma_alloc(&ao_radio_dma_done);
RFIF = 0;
ao_radio_dma_done = 1;
ao_radio_dma = ao_dma_alloc(&ao_radio_dma_done);
RFIF = 0;