55 lines
1.8 KiB
C
55 lines
1.8 KiB
C
#ifndef SSC_BUFFER_H_
|
|
#define SSC_BUFFER_H_
|
|
|
|
#include "iso14443.h"
|
|
|
|
#define SSC_RX_BUFFER_SIZE_AS_UINT8 2048
|
|
#define SSC_DMA_BUFFER_COUNT 0
|
|
|
|
/* in bytes, used for the sample buffer that holds the subcarrier modulation data at fc/8 = 1695 MHz */
|
|
#define SSC_TX_BUFFER_SIZE_AS_UINT8 ((MAXIMUM_FRAME_SIZE*( (8+1)*2 ) ) + 2 + 2)
|
|
|
|
#if SSC_RX_BUFFER_SIZE_AS_UINT8 < DIV_ROUND_UP((ISO14443A_MAX_RX_FRAME_SIZE_IN_BITS*ISO14443A_SAMPLE_LEN),8)
|
|
#undef SSC_RX_BUFFER_SIZE_AS_UINT8
|
|
#define SSC_RX_BUFFER_SIZE_AS_UINT8 DIV_ROUND_UP((ISO14443A_MAX_RX_FRAME_SIZE_IN_BITS*ISO14443A_SAMPLE_LEN),8)
|
|
#endif
|
|
|
|
typedef enum {
|
|
SSC_FREE=0, /* Buffer is free */
|
|
SSC_PENDING, /* Buffer has been given to the DMA controller and is currently being filled */
|
|
SSC_FULL, /* DMA controller signalled that the buffer is full */
|
|
SSC_PROCESSING,/* The buffer is currently processed by the consumer (e.g. decoder) */
|
|
SSC_PREFILLED, /* The buffer has been prefilled for later usage (only used for TX) */
|
|
} ssc_dma_buffer_state_t;
|
|
|
|
enum ssc_mode {
|
|
SSC_MODE_NONE,
|
|
SSC_MODE_14443A,
|
|
};
|
|
|
|
typedef struct {
|
|
enum ssc_mode mode;
|
|
u_int16_t transfersize_ssc;
|
|
u_int16_t transfersize_pdc;
|
|
u_int16_t transfers;
|
|
} ssc_mode_def;
|
|
|
|
typedef struct {
|
|
volatile ssc_dma_buffer_state_t state;
|
|
u_int32_t len_transfers; /* Length of the content, in transfers */
|
|
struct {
|
|
int overflow:1;
|
|
} flags;
|
|
const ssc_mode_def *reception_mode; /* Pointer to the SSC mode definition that the buffer has been loaded for (affects element size and count) */
|
|
u_int8_t data[SSC_RX_BUFFER_SIZE_AS_UINT8];
|
|
} ssc_dma_rx_buffer_t;
|
|
|
|
typedef struct {
|
|
volatile ssc_dma_buffer_state_t state;
|
|
u_int32_t len; /* Length of the content in bytes */
|
|
void *source; /* Source pointer for a prefilled buffer; set to NULL if not used */
|
|
u_int8_t data[SSC_TX_BUFFER_SIZE_AS_UINT8];
|
|
} ssc_dma_tx_buffer_t;
|
|
|
|
#endif /*SSC_BUFFER_H_*/
|