#ifndef VL53_BOARD_H #define VL53_BOARD_H #include #include #include "vl53l1_api.h" #include "vl53l1_platform.h" #ifdef __cplusplus extern "C" { #endif #define VL53_MAX_DEVS_PER_BOARD 4 typedef struct { I2C_HandleTypeDef *hi2c; GPIO_TypeDef *xshut_port; uint16_t xshut_pin; uint8_t runtime_addr_8bit; const char *name; uint8_t id; } Vl53BoardHwCfg_t; typedef struct { float x; float alpha; uint8_t initialized; } Vl53EMA_t; typedef struct { uint32_t tick_ms; uint16_t range_mm[VL53_MAX_DEVS_PER_BOARD]; float range_mm_filtered[VL53_MAX_DEVS_PER_BOARD]; uint8_t range_status[VL53_MAX_DEVS_PER_BOARD]; uint8_t valid_mask; } Vl53BoardSnapshot_t; typedef struct { VL53L1_Dev_t dev[VL53_MAX_DEVS_PER_BOARD]; Vl53EMA_t ema[VL53_MAX_DEVS_PER_BOARD]; uint8_t init_mask; uint8_t dev_count; uint32_t timing_budget_us; } Vl53Board_t; VL53L1_Error Vl53Board_Init(Vl53Board_t *board, const Vl53BoardHwCfg_t *hw_cfgs, uint8_t count, uint32_t timing_budget_us); VL53L1_Error Vl53Board_StartContinuous(Vl53Board_t *board); VL53L1_Error Vl53Board_StopContinuous(Vl53Board_t *board); VL53L1_Error Vl53Board_ReadAll(Vl53Board_t *board, Vl53BoardSnapshot_t *snapshot); #ifdef __cplusplus } #endif #endif /* VL53_BOARD_H */