37#ifndef PMW3901_RAD_PER_PX
38#define PMW3901_RAD_PER_PX 0.002443389
43#ifndef PMW3901_SPI_CDIV
44#define PMW3901_SPI_CDIV SPIDiv32
47#define PMW3901_REG_MOTION 0x02
48#define PMW3901_REG_DELTA_X_L 0x03
49#define PMW3901_REG_DELTA_X_H 0x04
50#define PMW3901_REG_DELTA_Y_L 0x05
51#define PMW3901_REG_DELTA_Y_H 0x06
99#define writeRegister(_addr, _data) writeRegister_blocking(pmw, (_addr), (_data))
100#define readRegister(_addr) readRegister_blocking(pmw, (_addr))
101#define wait_ms(_ms) sys_time_usleep((_ms) * 1000)
void sys_time_usleep(uint32_t us)
sys_time_usleep(uint32_t us)
void pprz_bsem_init(pprz_bsem_t *bsem, bool taken)
int pprz_thread_create(pprz_thread_t *thread, size_t size, const char *name, uint8_t prio, void(*pf)(void *), void *arg)
Creates a new thread whose stack is dynamically allocated.
void pprz_bsem_wait(pprz_bsem_t *bsem)
Some architecture independent helper functions for GPIOs.
enum SPIClockPolarity cpol
clock polarity control
enum SPIClockPhase cpha
clock phase control
enum SPISlaveSelect select
slave selection behavior
SPICallback before_cb
NULL or function called before the transaction.
SPICallback after_cb
NULL or function called after the transaction.
enum SPIDataSizeSelect dss
data transfer word size
volatile uint8_t * output_buf
pointer to transmit buffer for DMA
uint16_t input_length
number of data words to read
enum SPIClockDiv cdiv
prescaler of main clock to use as SPI clock
volatile uint8_t * input_buf
pointer to receive buffer for DMA
uint8_t slave_idx
slave id: SPI_SLAVE0 to SPI_SLAVE4
enum SPIBitOrder bitorder
MSB/LSB order.
uint16_t output_length
number of data words to write
enum SPITransactionStatus status
enum SPITransactionStatus spi_blocking_transceive(struct spi_periph *p, struct spi_transaction *t, float timeout)
Perform a spi transaction (blocking).
void spi_slave_unselect(uint8_t slave)
spi_slave_unselect() function
void spi_slave_select(uint8_t slave)
spi_slave_select() function
@ SPICpolIdleHigh
CPOL = 1.
@ SPINoSelect
slave is not selected nor unselected
SPI peripheral structure.
static uint8_t readRegister_blocking(struct pmw3901_t *pmw, uint8_t addr)
#define PMW3901_RAD_PER_PX
#define PMW3901_REG_MOTION
void pmw3901_init(struct pmw3901_t *pmw, struct spi_periph *periph, uint8_t slave_idx)
static void writeRegister_blocking(struct pmw3901_t *pmw, uint8_t addr, uint8_t data)
#define PMW3901_REG_DELTA_X_H
#define readRegister(_addr)
#define PMW3901_REG_DELTA_X_L
#define PMW3901_REG_DELTA_Y_H
#define writeRegister(_addr, _data)
bool pmw3901_get_data(struct pmw3901_t *pmw, int16_t *delta_x, int16_t *delta_y)
#define PMW3901_REG_DELTA_Y_L
static void initializeSensor(struct pmw3901_t *pmw)
static void pmw3901_thd(void *arg)
volatile uint8_t spi_output_buf[SPI_BUFFER_SIZE]
struct spi_periph * periph
volatile uint8_t spi_input_buf[SPI_BUFFER_SIZE]
struct spi_transaction trans
Architecture independent timing functions.
short int16_t
Typedef defining 16 bit short type.
unsigned char uint8_t
Typedef defining 8 bit unsigned char type.