#ifndef IMS_ALS_LTR303ALS_H #define IMS_ALS_LTR303ALS_H #include "imsensors/common/sensors_common.h" typedef enum { IMS_LTR_303ALS_INT_100MS = 0U, IMS_LTR_303ALS_INT_50MS = 1U, IMS_LTR_303ALS_INT_200MS = 2U, IMS_LTR_303ALS_INT_400MS = 3U, IMS_LTR_303ALS_INT_150MS = 4U, IMS_LTR_303ALS_INT_250MS = 5U, IMS_LTR_303ALS_INT_300MS = 6U, IMS_LTR_303ALS_INT_350MS = 7U, } ims_ltr_303als_integration_time_t; typedef enum { IMS_LTR_303ALS_MEAS_50MS = 0U, IMS_LTR_303ALS_MEAS_100MS = 1U, IMS_LTR_303ALS_MEAS_200MS = 2U, IMS_LTR_303ALS_MEAS_500MS = 3U, IMS_LTR_303ALS_MEAS_1000MS = 4U, IMS_LTR_303ALS_MEAS_2000MS = 5U, } ims_ltr_303als_measurement_rate_t; typedef enum { IMS_LTR_303ALS_GAIN_1X = 0U, IMS_LTR_303ALS_GAIN_2X = 1U, IMS_LTR_303ALS_GAIN_4X = 2U, IMS_LTR_303ALS_GAIN_8X = 3U, IMS_LTR_303ALS_GAIN_48X = 6U, IMS_LTR_303ALS_GAIN_96X = 7U, } ims_ltr_303als_gain_t; typedef enum { IMS_LTR_303ALS_INT_ACTIVE_LOW = 0U, IMS_LTR_303ALS_INT_ACTIVE_HIGH = 1U, } ims_ltr_303als_int_polarity_t; typedef enum { IMS_LTR_303ALS_MODE_STANDBY = 0U, IMS_LTR_303ALS_MODE_ACTIVE = 1U, } ims_ltr_303als_mode_t; typedef struct { ims_ltr_303als_gain_t gain; bool interrupt_en; ims_ltr_303als_int_polarity_t interrupt_polarity; uint16_t threshold_high; uint16_t threshold_low; ims_ltr_303als_integration_time_t integration_time; ims_ltr_303als_measurement_rate_t measurement_rate; } ims_ltr_303als_config_t; typedef struct { bool data_valid; bool data_new; bool interrupt_active; ims_ltr_303als_gain_t gain; uint16_t ch0_value; uint16_t ch1_value; } ims_ltr_303als_result_t; typedef struct { ims_i2c_xfer_t i2c_xfer; ims_delay_t delay; } ims_ltr_303als_cb_t; typedef struct { void *pdev; ims_ltr_303als_cb_t cb; } ims_ltr_303als_t; ims_ret_t ims_ltr_303als_init(ims_ltr_303als_t *als); void ims_ltr_303als_preset_config(ims_ltr_303als_config_t *cfg); ims_ret_t ims_ltr_303als_config(ims_ltr_303als_t *als, ims_ltr_303als_config_t *config); ims_ret_t ims_ltr_303als_set_mode(ims_ltr_303als_t *als, ims_ltr_303als_mode_t mode); ims_ret_t ims_ltr_303als_get_mode(ims_ltr_303als_t *als, ims_ltr_303als_mode_t *mode); ims_ret_t ims_ltr_303als_read(ims_ltr_303als_t *als, ims_ltr_303als_result_t *result); #endif // IMS_ALS_LTR303ALS_H