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