123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- #ifndef CCS811_INTERNAL_H
- #define CCS811_INTERNAL_H
- #ifdef __cplusplus
- extern "C" {
- #endif
- #define CCS811_REG_STATUS 0x00
- #define CCS811_REG_MEAS_MODE 0x01
- #define CCS811_REG_ALG_RESULT_DATA 0x02
- #define CCS811_REG_RAW_DATA 0x03
- #define CCS811_REG_ENV_DATA 0x05
- #define CCS811_REG_NTC 0x06
- #define CCS811_REG_THRESHOLDS 0x10
- #define CCS811_REG_BASELINE 0x11
- #define CCS811_REG_HW_ID 0x20
- #define CCS811_REG_HW_VER 0x21
- #define CCS811_REG_FW_BOOT_VER 0x23
- #define CCS811_REG_FW_APP_VER 0x24
- #define CCS811_REG_ERROR_ID 0xE0
- #define CCS811_REG_SW_RESET 0xFF
- #define CCS811_REG_APP_START 0xF4
- #define CCS811_DEFAULT_HUMIDITY 50
- #define CCS811_DEFAULT_TEMPERATURE 25
- #define CCS811_DEFAULT_LOW_THR 1500
- #define CCS811_DEFAULT_HIGH_THR 2500
- #define CCS811_DEFAULT_HYSTERESIS 50
- #define CCS811_TEMPERATURE_OFFSET 25
- #define CCS811_FW_MODE_POS 7
- #define CCS811_FW_MODE_MASK (1 << CCS811_FW_MODE_POS)
- #define CCS811_APP_VALID_POS 4
- #define CCS811_APP_VALID_MASK (1 << CCS811_APP_VALID_POS)
- #define CCS811_DATA_READY_POS 3
- #define CCS811_DATA_READY_MASK (1 << CCS811_DATA_READY_POS)
- #define CCS811_ERROR_POS 0
- #define CCS811_ERROR_MASK (1 << CCS811_ERROR_POS)
- #define CCS811_MEAS_MODE_VALID_MASK 0x83U
- #define CCS811_DRIVE_MODE_POS 4
- #define CCS811_DRIVE_MODE_MASK (7 << CCS811_DRIVE_MODE_POS)
- #define CCS811_INTERRUPT_POS 3
- #define CCS811_INTERRUPT_MASK (1 << CCS811_INTERRUPT_MASK)
- #define CCS811_THRESH_POS 2
- #define CCS811_THRESH_MASK (1 << CCS811_THRESH_POS)
- #define CCS811_ALG_RESULT_BYTE_NUM 8
- #define CCS811_ALG_ECO2_H_BYTE 0
- #define CCS811_ALG_ECO2_L_BYTE 1
- #define CCS811_ALG_TVOC_H_BYTE 2
- #define CCS811_ALG_TVOC_L_BYTE 3
- #define CCS811_ALG_STATUS_BYTE 4
- #define CCS811_ALG_ERROR_BYTE 5
- #define CCS811_ALG_RAW_DATA1_BYTE 6
- #define CCS811_ALG_RAW_DATA2_BYTE 7
- #define CCS811_ENV_HUMIDITY_H_BYTE 0
- #define CCS811_ENV_HUM_PERCENT_POS 9
- #define CCS811_ENV_HUM_FRACTION_MASK (0x01FF)
- #define CCS811_ENV_TEMP_VALUE_POS 9
- #define CCS811_ENV_TEMP_FRACTION_MASK (0x01FF)
- #define CCS811_ERROR_HEATER_SUPPLY_POS 5
- #define CCS811_ERROR_HEATER_SUPPLY_MASK (1 << CCS811_ERROR_HEATER_SUPPLY_POS)
- #define CCS811_ERROR_HEATER_FAULT_POS 4
- #define CCS811_ERROR_HEATER_FAULT_MASK (1 << CCS811_ERROR_HEATER_FAULT_POS)
- #define CCS811_ERROR_MAX_RESISTANCE_POS 3
- #define CCS811_ERROR_MAX_RESISTANCE_MASK (1 << CCS811_ERROR_MAX_RESISTANCE_POS)
- #define CCS811_ERROR_MEAS_MODE_POS 2
- #define CCS811_ERROR_MEAS_MODE_MASK (1 CCS811_ERROR_MEAS_MODE_POS)
- #define CCS811_ERROR_READ_REG_POS 1
- #define CCS811_ERROR_READ_REG_MASK (1 << CCS811_ERROR_READ_REG_POS)
- #define CCS811_ERROR_WRITE_REG_POS 0
- #define CCS811_ERROR_WRITE_REG_MASK (1 << CCS811_ERROR_WRITE_REG_POS)
- #define CCS811_SW_RESET_BYTE0 0x11
- #define CCS811_SW_RESET_BYTE1 0xE5
- #define CCS811_SW_RESET_BYTE2 0x72
- #define CCS811_SW_RESET_BYTE3 0x8A
- typedef struct
- {
- nrf_twi_sensor_t * const p_sensor_data;
- uint8_t const sensor_addr;
- } ccs811_instance_t;
- #define CCS811_INTERNAL_INSTANCE_DEF(_ccs811_inst_name, _p_twi_sensor, _sensor_address) \
- static ccs811_instance_t _ccs811_inst_name = \
- { \
- .p_sensor_data = _p_twi_sensor, \
- .sensor_addr = _sensor_address, \
- }
- #ifndef SUPPRESS_INLINE_IMPLEMENTATION
- __STATIC_INLINE ret_code_t ccs811_status_read(ccs811_instance_t const * p_instance,
- nrf_twi_sensor_reg_cb_t user_cb,
- uint8_t * p_reg_val)
- {
- ASSERT(p_instance != NULL);
- ASSERT(p_reg_val != NULL);
- return nrf_twi_sensor_reg_read(p_instance->p_sensor_data,
- p_instance->sensor_addr,
- CCS811_REG_STATUS,
- user_cb,
- p_reg_val,
- 1);
- }
- __STATIC_INLINE ret_code_t ccs811_hw_id_read(ccs811_instance_t const * p_instance,
- nrf_twi_sensor_reg_cb_t user_cb,
- uint8_t * p_reg_val)
- {
- ASSERT(p_instance != NULL);
- ASSERT(p_reg_val != NULL);
- return nrf_twi_sensor_reg_read(p_instance->p_sensor_data,
- p_instance->sensor_addr,
- CCS811_REG_HW_ID,
- user_cb,
- p_reg_val,
- 1);
- }
- __STATIC_INLINE ret_code_t ccs811_error_read(ccs811_instance_t const * p_instance,
- nrf_twi_sensor_reg_cb_t user_cb,
- uint8_t * p_reg_val)
- {
- ASSERT(p_instance != NULL);
- ASSERT(p_reg_val != NULL);
- return nrf_twi_sensor_reg_read(p_instance->p_sensor_data,
- p_instance->sensor_addr,
- CCS811_REG_ERROR_ID,
- user_cb,
- p_reg_val,
- 1);
- }
- #endif
- #ifdef __cplusplus
- }
- #endif
- #endif
|