diff options
author | henryk <henryk@6dc7ffe9-61d6-0310-9af1-9938baff3ed1> | 2007-12-06 19:38:50 +0000 |
---|---|---|
committer | henryk <henryk@6dc7ffe9-61d6-0310-9af1-9938baff3ed1> | 2007-12-06 19:38:50 +0000 |
commit | dc75722228b0c63666103613d742b769d5523531 (patch) | |
tree | d90c6b89e94b0a84e8f5b01f6068666dff51775d | |
parent | 45af06edee7ea828af9e6e3862e53456489feb1a (diff) |
Fix stupid buffer leakage code in standard mode
git-svn-id: https://svn.openpcd.org:2342/trunk@376 6dc7ffe9-61d6-0310-9af1-9938baff3ed1
-rw-r--r-- | openpicc/application/iso14443_layer3a.c | 1 | ||||
-rw-r--r-- | openpicc/application/ssc_picc.c | 7 |
2 files changed, 5 insertions, 3 deletions
diff --git a/openpicc/application/iso14443_layer3a.c b/openpicc/application/iso14443_layer3a.c index 1433b33..381097f 100644 --- a/openpicc/application/iso14443_layer3a.c +++ b/openpicc/application/iso14443_layer3a.c @@ -244,6 +244,7 @@ void iso14443_layer3a_state_machine (void *pvParameters) if(need_receive) { if(xQueueReceive(ssc_rx_queue, &buffer, portTICK_RATE_MS) && buffer != NULL) { vLedSetGreen(0); + vLedBlinkGreen(); portENTER_CRITICAL(); buffer->state = PROCESSING; portEXIT_CRITICAL(); diff --git a/openpicc/application/ssc_picc.c b/openpicc/application/ssc_picc.c index 55f8978..9f0630f 100644 --- a/openpicc/application/ssc_picc.c +++ b/openpicc/application/ssc_picc.c @@ -193,6 +193,7 @@ static ssc_dma_rx_buffer_t* __ramfunc __ssc_rx_unload(int secondary) } else { AT91F_PDC_SetRx(rx_pdc, 0, 0); } + if(buffer->state == PENDING) buffer->state = FREE; ssc_state.buffer[secondary] = NULL; return buffer; @@ -414,7 +415,7 @@ static void __ramfunc ssc_irq(void) ssc_state.buffer[0] = ssc_state.buffer[1]; ssc_state.buffer[1] = NULL; if(ssc_state.mode == SSC_MODE_EDGE_ONE_SHOT || ssc_state.mode == SSC_MODE_14443A_SHORT - || ssc_state.mode == SSC_MODE_14443A_SHORT) { + || ssc_state.mode == SSC_MODE_14443A_STANDARD) { // Stop sampling here ssc_rx_stop(); } else { @@ -428,13 +429,13 @@ static void __ramfunc ssc_irq(void) //gaportEXIT_CRITICAL(); task_woken = xQueueSendFromISR(ssc_rx_queue, &ssc_state.buffer[0], task_woken); } - if (__ssc_rx_load(0) == -1) + if(ssc_sr & AT91C_SSC_RXENA) if (__ssc_rx_load(0) == -1) AT91F_SSC_DisableIt(ssc, AT91C_SSC_ENDRX | AT91C_SSC_RXBUFF | AT91C_SSC_OVRUN); } - if (__ssc_rx_load(1) == -1) + if(ssc_sr & AT91C_SSC_RXENA) if (__ssc_rx_load(1) == -1) AT91F_SSC_DisableIt(ssc, AT91C_SSC_ENDRX | AT91C_SSC_RXBUFF | AT91C_SSC_OVRUN); |