pinebuds/platform/hal/hal_sensor_eng.h

64 lines
1.5 KiB
C

#ifndef __HAL_SENSOR_HUB_H__
#define __HAL_SENSOR_HUB_H__
#ifdef __cplusplus
extern "C" {
#endif
#include "hal_dma.h"
#include "hal_gpio.h"
enum HAL_SENSOR_ENGINE_ID_T {
HAL_SENSOR_ENGINE_ID_0 = 0,
HAL_SENSOR_ENGINE_ID_1,
HAL_SENSOR_ENGINE_ID_2,
HAL_SENSOR_ENGINE_ID_3,
HAL_SENSOR_ENGINE_ID_QTY,
};
enum HAL_SENSOR_ENGINE_TRIGGER_T {
HAL_SENSOR_ENGINE_TRIGGER_TIMER = 0,
HAL_SENSOR_ENGINE_TRIGGER_GPIO,
HAL_SENSOR_ENGINE_TRIGGER_QTY,
};
enum HAL_SENSOR_ENGINE_DEVICE_T {
HAL_SENSOR_ENGINE_DEVICE_I2C0 = 0,
HAL_SENSOR_ENGINE_DEVICE_I2C1,
HAL_SENSOR_ENGINE_DEVICE_SPI0 = 4,
HAL_SENSOR_ENGINE_DEVICE_SPI1,
HAL_SENSOR_ENGINE_DEVICE_SPI2,
};
typedef void (*HAL_SENSOR_ENG_HANDLER_T)(enum HAL_SENSOR_ENGINE_ID_T id, enum HAL_SENSOR_ENGINE_DEVICE_T device, const uint8_t *buf, uint32_t len);
struct HAL_SENSOR_ENGINE_CFG_T {
enum HAL_SENSOR_ENGINE_ID_T id;
enum HAL_SENSOR_ENGINE_DEVICE_T device;
enum HAL_SENSOR_ENGINE_TRIGGER_T trigger_type;
enum HAL_GPIO_PIN_T trigger_gpio;
uint32_t period_us;
struct HAL_DMA_CH_CFG_T *tx_dma_cfg;
struct HAL_DMA_CH_CFG_T *rx_dma_cfg;
uint16_t device_address;
uint16_t rx_burst_len;
uint8_t rx_burst_cnt;
uint8_t data_to_vad;
HAL_SENSOR_ENG_HANDLER_T handler;
};
int hal_sensor_engine_open(const struct HAL_SENSOR_ENGINE_CFG_T *cfg);
int hal_sensor_engine_close(enum HAL_SENSOR_ENGINE_ID_T id);
void hal_sensor_process_rx_buffer(void);
#ifdef __cplusplus
}
#endif
#endif