openpcd/openpicc/application/ssc_buffer.h @ master
1 |
#ifndef SSC_BUFFER_H_
|
---|---|
2 |
#define SSC_BUFFER_H_
|
3 |
|
4 |
#include "iso14443.h"
|
5 |
|
6 |
#define SSC_RX_BUFFER_SIZE_AS_UINT8 2048
|
7 |
#define SSC_DMA_BUFFER_COUNT 0
|
8 |
|
9 |
/* in bytes, used for the sample buffer that holds the subcarrier modulation data at fc/8 = 1695 MHz */
|
10 |
#define SSC_TX_BUFFER_SIZE_AS_UINT8 ((MAXIMUM_FRAME_SIZE*( (8+1)*2 ) ) + 2 + 2)
|
11 |
|
12 |
#if SSC_RX_BUFFER_SIZE_AS_UINT8 < DIV_ROUND_UP((ISO14443A_MAX_RX_FRAME_SIZE_IN_BITS*ISO14443A_SAMPLE_LEN),8)
|
13 |
#undef SSC_RX_BUFFER_SIZE_AS_UINT8
|
14 |
#define SSC_RX_BUFFER_SIZE_AS_UINT8 DIV_ROUND_UP((ISO14443A_MAX_RX_FRAME_SIZE_IN_BITS*ISO14443A_SAMPLE_LEN),8)
|
15 |
#endif
|
16 |
|
17 |
typedef enum { |
18 |
SSC_FREE=0, /* Buffer is free */ |
19 |
SSC_PENDING, /* Buffer has been given to the DMA controller and is currently being filled */ |
20 |
SSC_FULL, /* DMA controller signalled that the buffer is full */ |
21 |
SSC_PROCESSING,/* The buffer is currently processed by the consumer (e.g. decoder) */ |
22 |
SSC_PREFILLED, /* The buffer has been prefilled for later usage (only used for TX) */ |
23 |
} ssc_dma_buffer_state_t; |
24 |
|
25 |
enum ssc_mode { |
26 |
SSC_MODE_NONE, |
27 |
SSC_MODE_14443A, |
28 |
};
|
29 |
|
30 |
typedef struct { |
31 |
enum ssc_mode mode; |
32 |
u_int16_t transfersize_ssc; |
33 |
u_int16_t transfersize_pdc; |
34 |
u_int16_t transfers; |
35 |
} ssc_mode_def; |
36 |
|
37 |
typedef struct { |
38 |
volatile ssc_dma_buffer_state_t state; |
39 |
u_int32_t len_transfers; /* Length of the content, in transfers */ |
40 |
struct { |
41 |
int overflow:1; |
42 |
} flags; |
43 |
const ssc_mode_def *reception_mode; /* Pointer to the SSC mode definition that the buffer has been loaded for (affects element size and count) */ |
44 |
u_int8_t data[SSC_RX_BUFFER_SIZE_AS_UINT8]; |
45 |
} ssc_dma_rx_buffer_t; |
46 |
|
47 |
typedef struct { |
48 |
volatile ssc_dma_buffer_state_t state; |
49 |
u_int32_t len; /* Length of the content in bytes */ |
50 |
void *source; /* Source pointer for a prefilled buffer; set to NULL if not used */ |
51 |
u_int8_t data[SSC_TX_BUFFER_SIZE_AS_UINT8]; |
52 |
} ssc_dma_tx_buffer_t; |
53 |
|
54 |
#endif /*SSC_BUFFER_H_*/ |