add option to insert an ack packet on autoack
This commit is contained in:
parent
e2d9082fc7
commit
0a2b86456b
|
@ -538,6 +538,32 @@ void add_to_rx(volatile packet_t *p) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void insert_at_rx_head(volatile packet_t *p) {
|
||||||
|
safe_irq_disable(MACA);
|
||||||
|
|
||||||
|
BOUND_CHECK(p);
|
||||||
|
|
||||||
|
if(!p) { PRINTF("insert_at_rx_head passed packet 0\n\r"); return; }
|
||||||
|
p->offset = 1; /* first byte is the length */
|
||||||
|
if(rx_head == 0) {
|
||||||
|
/* start a new queue if empty */
|
||||||
|
rx_end = p;
|
||||||
|
rx_end->left = 0; rx_end->right = 0;
|
||||||
|
rx_head = rx_end;
|
||||||
|
} else {
|
||||||
|
rx_head->right = p;
|
||||||
|
p->left = rx_head;
|
||||||
|
rx_head = p; rx_head->left = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// print_packets("insert at rx head");
|
||||||
|
irq_restore();
|
||||||
|
if(bit_is_set(*NIPEND, INT_NUM_MACA)) { *INTFRC = (1 << INT_NUM_MACA); }
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void decode_status(void) {
|
void decode_status(void) {
|
||||||
volatile uint32_t code;
|
volatile uint32_t code;
|
||||||
|
|
||||||
|
@ -656,6 +682,21 @@ void maca_isr(void) {
|
||||||
/* PRINTF("maca action complete %d\n\r", get_field(*MACA_CONTROL,SEQUENCE)); */
|
/* PRINTF("maca action complete %d\n\r", get_field(*MACA_CONTROL,SEQUENCE)); */
|
||||||
if(last_post == TX_POST) {
|
if(last_post == TX_POST) {
|
||||||
tx_head->status = get_field(*MACA_STATUS,CODE);
|
tx_head->status = get_field(*MACA_STATUS,CODE);
|
||||||
|
#if MACA_INSERT_ACK
|
||||||
|
if(tx_head->status == SUCCESS) {
|
||||||
|
static volatile packet_t *ack_p;
|
||||||
|
if(ack_p = get_free_packet()) {
|
||||||
|
ack_p->length = 3;
|
||||||
|
ack_p->offset = 1;
|
||||||
|
ack_p->data[0] = 3;
|
||||||
|
ack_p->data[1] = 0x02;
|
||||||
|
ack_p->data[2] = 0;
|
||||||
|
ack_p->data[3] = *MACA_TXSEQNR;
|
||||||
|
insert_at_rx_head(ack_p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if(maca_tx_callback != 0) { maca_tx_callback(tx_head); }
|
if(maca_tx_callback != 0) { maca_tx_callback(tx_head); }
|
||||||
dma_tx = 0;
|
dma_tx = 0;
|
||||||
free_tx_head();
|
free_tx_head();
|
||||||
|
|
Loading…
Reference in a new issue