File syn_spi_queue.h¶
File List > drivers > syn_spi_queue.h
Go to the documentation of this file
#ifndef SYN_SPI_QUEUE_H
#define SYN_SPI_QUEUE_H
#include "../common/syn_defs.h"
#include "../port/syn_port_gpio.h"
#include "../port/syn_port_spi.h"
#include "syn_spi.h"
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifndef SYN_SPI_QUEUE_MAX_DEPTH
#define SYN_SPI_QUEUE_MAX_DEPTH 16
#endif
typedef void (*SYN_SPI_Queue_Callback)(uint8_t bus, SYN_Status result, void *user_data);
typedef struct {
uint8_t bus;
SYN_GPIO_Pin cs_pin;
SYN_SPI_Mode mode;
uint32_t baudrate_hz;
bool keep_cs_active;
const uint8_t *tx_data;
uint8_t *rx_data;
size_t len;
SYN_SPI_Queue_Callback callback;
void *user_data;
} SYN_SPI_Transaction;
typedef struct {
SYN_SPI_Transaction ring[SYN_SPI_QUEUE_MAX_DEPTH];
uint16_t head;
uint16_t tail;
uint16_t count;
uint8_t bus;
bool active;
bool initialized;
} SYN_SPI_Queue;
SYN_Status syn_spi_queue_init(SYN_SPI_Queue *q, uint8_t bus);
SYN_Status syn_spi_queue_enqueue(SYN_SPI_Queue *q, const SYN_SPI_Transaction *tx);
SYN_Status syn_spi_queue_process(SYN_SPI_Queue *q);
SYN_Status syn_spi_queue_cancel_all(SYN_SPI_Queue *q);
size_t syn_spi_queue_count(const SYN_SPI_Queue *q);
#ifdef __cplusplus
}
#endif
#endif /* SYN_SPI_QUEUE_H */