1/*
2 * Copyright (c) 2023 Huawei Device Co., Ltd.
3 *
4 * HDF is dual licensed: you can use it either under the terms of
5 * the GPL, or the BSD license, at your option.
6 * See the LICENSE file in the root of this repository for complete details.
7 */
8
9#ifndef HUMIDITY_AHT20_H
10#define HUMIDITY_AHT20_H
11
12#include "sensor_config_parser.h"
13#include "sensor_humidity_driver.h"
14
15/* Humidity registers addr */
16#define AHT20_HUM_STATUS_ADDR              0x71 // Status
17#define AHT20_HUM_RESET_ADDR               0xBA
18
19#define AHT20_HUM_MEASURE_ADDR             0xAC // Measure
20#define AHT20_HUM_MEASURE_ARG0             0x33
21#define AHT20_HUM_MEASURE_ARG1             0x00
22
23#define AHT20_HUM_CALIBRATION_ADDR         0xBE // Calibration
24#define AHT20_HUM_CALIBRATION_ARG0         0x08
25#define AHT20_HUM_CALIBRATION_ARG1         0x00
26
27/* Humidity data */
28#define AHT20_HUM_DATA_BUF_LEN          6
29#define AHT20_HUM_VALUE_IDX_ZERO        0
30#define AHT20_HUM_VALUE_IDX_ONE         1
31#define AHT20_HUM_VALUE_IDX_TWO         2
32#define AHT20_HUM_VALUE_IDX_THREE       3
33#define AHT20_HUM_VALUE_IDX_FOUR        4
34#define AHT20_HUM_VALUE_IDX_FIVE        5
35
36#define AHT20_HUM_BUSY_SHIFT            7
37#define AHT20_HUM_BUSY_MASK             (0x1 << AHT20_HUM_BUSY_SHIFT)
38#define AHT20_HUM_IS_BUSY(status)       (((status) & AHT20_HUM_BUSY_MASK) >> AHT20_HUM_BUSY_SHIFT)
39
40#define AHT20_HUM_CALI_SHIFT            3
41#define AHT20_HUM_CALI_MASK             (0x1 << AHT20_HUM_CALI_SHIFT)
42#define AHT20_HUM_IS_CALI(status)       (((status) & AHT20_HUM_CALI_MASK) >> AHT20_HUM_CALI_SHIFT)
43
44#define AHT20_HUM_DELAY_MS              80
45#define AHT20_HUM_STARTUP_MS            20
46#define AHT20_HUM_CALIBRATION_MS        40
47
48#define AHT20_HUM_SHFIT_FOUR_BITS       4
49#define AHT20_HUM_SHFIT_EIGHT_BITS      8
50#define AHT20_HUM_MASK                  0xF0
51
52#define AHT20_HUM_SLOPE                 10000 // 100 * 100.0
53#define AHT20_HUM_RESOLUTION            (0x1 << 20)
54#define AHT20_HUM_RETRY_TIMES           5
55
56struct Aht20DrvData {
57    struct IDeviceIoService ioService;
58    struct HdfDeviceObject *device;
59    struct SensorCfgData *sensorCfg;
60};
61
62#endif /* HUMIDITY_AHT20_H */
63