blob: 4bb98cb2f9a9f71b4492d739f6129f049f13207a [file] [log] [blame]
#ifndef __SPI_H
#define __SPI_H
#include <inttypes.h>
#include <seos.h>
#include <stdlib.h>
struct SpiDevice;
typedef uint8_t spi_cs_t;
typedef uint32_t SpiSpeed;
typedef void (*SpiCbkF)(void *cookie, int err);
struct SpiMode {
enum {
SPI_CPOL_IDLE_LO,
SPI_CPOL_IDLE_HI,
} cpol;
enum {
SPI_CPHA_LEADING_EDGE,
SPI_CPHA_TRAILING_EDGE,
} cpha;
uint8_t bitsPerWord;
enum {
SPI_FORMAT_LSB_FIRST,
SPI_FORMAT_MSB_FIRST,
} format;
uint16_t txWord;
SpiSpeed speed;
};
int spiMasterRxTx(uint8_t busId, spi_cs_t cs,
void *rxBuf[], const void *txBuf[], size_t size[], size_t n,
const struct SpiMode *mode, SpiCbkF callback,
void *cookie);
static inline int spiMasterRx(uint8_t busId, spi_cs_t cs,
void *buf, size_t size, const struct SpiMode *mode,
SpiCbkF callback, void *cookie)
{
void *rxBuf[1] = {buf};
const void *txBuf[1] = {NULL};
size_t sizes[1] = {size};
return spiMasterRxTx(busId, cs, rxBuf, txBuf, sizes, 1, mode,
callback, cookie);
}
static inline int spiMasterTx(uint8_t busId, spi_cs_t cs,
const void *buf, size_t size, const struct SpiMode *mode,
SpiCbkF callback, void *cookie)
{
void *rxBuf[1] = {NULL};
const void *txBuf[1] = {buf};
size_t sizes[1] = {size};
return spiMasterRxTx(busId, cs, rxBuf, txBuf, sizes, 1, mode,
callback, cookie);
}
int spiSlaveRequest(uint8_t busId, const struct SpiMode *mode,
struct SpiDevice **dev);
int spiSlaveRxTx(struct SpiDevice *dev,
void *rxBuf[], const void *txBuf[], size_t size[], size_t n,
SpiCbkF callback, void *cookie);
int spiSlaveWaitForInactive(struct SpiDevice *dev, SpiCbkF callback,
void *cookie);
int spiSlaveRelease(struct SpiDevice *dev);
static inline int spiSlaveRx(struct SpiDevice *dev,
void *buf, size_t size,
SpiCbkF callback, void *cookie)
{
void *rxBuf[1] = {buf};
const void *txBuf[1] = {NULL};
size_t sizes[1] = {size};
return spiSlaveRxTx(dev, rxBuf, txBuf, sizes, 1, callback, cookie);
}
static inline int spiSlaveTx(struct SpiDevice *dev,
const void *buf, size_t size,
SpiCbkF callback, void *cookie)
{
void *rxBuf[1] = {NULL};
const void *txBuf[1] = {buf};
size_t sizes[1] = {size};
return spiSlaveRxTx(dev, rxBuf, txBuf, sizes, 1, callback, cookie);
}
#endif /* __SPI_H */