1 /* 2 * Copyright (c) 2018 Alexander Wachter. 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef ZEPHYR_DRIVERS_SENSOR_ENS210_ENS210_H_ 8 #define ZEPHYR_DRIVERS_SENSOR_ENS210_ENS210_H_ 9 10 #include <zephyr/device.h> 11 #include <zephyr/drivers/i2c.h> 12 #include <zephyr/drivers/gpio.h> 13 #include <zephyr/sys/util.h> 14 15 /* Registers */ 16 #define ENS210_REG_PART_ID 0x00 17 #define ENS210_REG_UID 0x04 18 #define ENS210_REG_SYS_CTRL 0x10 19 #define ENS210_REG_SYS_STAT 0x11 20 #define ENS210_REG_SENS_RUN 0x21 21 #define ENS210_REG_SENS_START 0x22 22 #define ENS210_REG_SENS_STOP 0x23 23 #define ENS210_REG_SENS_STAT 0x24 24 #define ENS210_REG_T_VAL 0x30 25 #define ENS210_REG_H_VAL 0x33 26 27 #define ENS210_PART_ID 0x0210 28 29 #if defined CONFIG_ENS210_TEMPERATURE_OFF 30 #define ENS210_T_RUN 0 31 #define ENS210_T_START 0 32 #elif defined CONFIG_ENS210_TEMPERATURE_SINGLE 33 #define ENS210_T_RUN 0 34 #define ENS210_T_START 1 35 #elif defined CONFIG_ENS210_TEMPERATURE_CONTINUOUS 36 #define ENS210_T_RUN 1 37 #define ENS210_T_START 1 38 #endif 39 40 #if defined CONFIG_ENS210_HUMIDITY_OFF 41 #define ENS210_H_RUN 0 42 #define ENS210_H_START 0 43 #elif defined CONFIG_ENS210_HUMIDITY_SINGLE 44 #define ENS210_H_RUN 0 45 #define ENS210_H_START 1 46 #elif defined CONFIG_ENS210_HUMIDITY_CONTINUOUS 47 #define ENS210_H_RUN 1 48 #define ENS210_H_START 1 49 #endif 50 51 /* 52 * Polynomial 53 * 0b 1000 1001 ~ x^7+x^3+x^0 54 * 0x 8 9 55 */ 56 #define ENS210_CRC7_WIDTH 7 57 #define ENS210_CRC7_POLY 0x89 58 #define ENS210_CRC7_IVEC ((1UL << ENS210_CRC7_WIDTH) - 1) 59 #define ENS210_CRC7_DATA_WIDTH 17 60 #define ENS210_CRC7_DATA_MASK ((1UL << ENS210_CRC7_DATA_WIDTH) - 1) 61 #define ENS210_CRC7_DATA_MSB (1UL << (ENS210_CRC7_DATA_WIDTH - 1)) 62 63 struct ens210_value_data { 64 uint16_t val; 65 uint8_t valid : 1; 66 uint8_t crc7 : 7; 67 } __packed; 68 69 struct ens210_sys_ctrl { 70 uint8_t low_power : 1; 71 uint8_t reserved : 6; 72 uint8_t reset : 1; 73 } __packed; 74 75 struct ens210_sys_stat { 76 uint8_t sys_active : 1; 77 uint8_t reserved : 7; 78 } __packed; 79 80 struct ens210_sens_run { 81 uint8_t t_run : 1; 82 uint8_t h_run : 1; 83 uint8_t reserved : 6; 84 } __packed; 85 86 struct ens210_sens_start { 87 uint8_t t_start : 1; 88 uint8_t h_start : 1; 89 uint8_t reserved : 6; 90 } __packed; 91 92 struct ens210_sens_stop { 93 uint8_t t_stop : 1; 94 uint8_t h_stop : 1; 95 uint8_t reserved : 6; 96 } __packed; 97 98 struct ens210_sens_stat { 99 uint8_t t_stat : 1; 100 uint8_t h_stat : 1; 101 uint8_t reserved : 6; 102 } __packed; 103 104 struct ens210_data { 105 struct ens210_value_data temp; 106 struct ens210_value_data humidity; 107 }; 108 109 struct ens210_config { 110 struct i2c_dt_spec i2c; 111 }; 112 113 #endif /* ZEPHYR_DRIVERS_SENSOR_ENS210_ENS210_H_ */ 114