1094332d3Sopenharmony_ci/*
2094332d3Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
3094332d3Sopenharmony_ci *
4094332d3Sopenharmony_ci * HDF is dual licensed: you can use it either under the terms of
5094332d3Sopenharmony_ci * the GPL, or the BSD license, at your option.
6094332d3Sopenharmony_ci * See the LICENSE file in the root of this repository for complete details.
7094332d3Sopenharmony_ci */
8094332d3Sopenharmony_ci
9094332d3Sopenharmony_ci#ifndef HUMIDITY_AHT20_H
10094332d3Sopenharmony_ci#define HUMIDITY_AHT20_H
11094332d3Sopenharmony_ci
12094332d3Sopenharmony_ci#include "sensor_config_parser.h"
13094332d3Sopenharmony_ci#include "sensor_humidity_driver.h"
14094332d3Sopenharmony_ci
15094332d3Sopenharmony_ci/* Humidity registers addr */
16094332d3Sopenharmony_ci#define AHT20_HUM_STATUS_ADDR              0x71 // Status
17094332d3Sopenharmony_ci#define AHT20_HUM_RESET_ADDR               0xBA
18094332d3Sopenharmony_ci
19094332d3Sopenharmony_ci#define AHT20_HUM_MEASURE_ADDR             0xAC // Measure
20094332d3Sopenharmony_ci#define AHT20_HUM_MEASURE_ARG0             0x33
21094332d3Sopenharmony_ci#define AHT20_HUM_MEASURE_ARG1             0x00
22094332d3Sopenharmony_ci
23094332d3Sopenharmony_ci#define AHT20_HUM_CALIBRATION_ADDR         0xBE // Calibration
24094332d3Sopenharmony_ci#define AHT20_HUM_CALIBRATION_ARG0         0x08
25094332d3Sopenharmony_ci#define AHT20_HUM_CALIBRATION_ARG1         0x00
26094332d3Sopenharmony_ci
27094332d3Sopenharmony_ci/* Humidity data */
28094332d3Sopenharmony_ci#define AHT20_HUM_DATA_BUF_LEN          6
29094332d3Sopenharmony_ci#define AHT20_HUM_VALUE_IDX_ZERO        0
30094332d3Sopenharmony_ci#define AHT20_HUM_VALUE_IDX_ONE         1
31094332d3Sopenharmony_ci#define AHT20_HUM_VALUE_IDX_TWO         2
32094332d3Sopenharmony_ci#define AHT20_HUM_VALUE_IDX_THREE       3
33094332d3Sopenharmony_ci#define AHT20_HUM_VALUE_IDX_FOUR        4
34094332d3Sopenharmony_ci#define AHT20_HUM_VALUE_IDX_FIVE        5
35094332d3Sopenharmony_ci
36094332d3Sopenharmony_ci#define AHT20_HUM_BUSY_SHIFT            7
37094332d3Sopenharmony_ci#define AHT20_HUM_BUSY_MASK             (0x1 << AHT20_HUM_BUSY_SHIFT)
38094332d3Sopenharmony_ci#define AHT20_HUM_IS_BUSY(status)       (((status) & AHT20_HUM_BUSY_MASK) >> AHT20_HUM_BUSY_SHIFT)
39094332d3Sopenharmony_ci
40094332d3Sopenharmony_ci#define AHT20_HUM_CALI_SHIFT            3
41094332d3Sopenharmony_ci#define AHT20_HUM_CALI_MASK             (0x1 << AHT20_HUM_CALI_SHIFT)
42094332d3Sopenharmony_ci#define AHT20_HUM_IS_CALI(status)       (((status) & AHT20_HUM_CALI_MASK) >> AHT20_HUM_CALI_SHIFT)
43094332d3Sopenharmony_ci
44094332d3Sopenharmony_ci#define AHT20_HUM_DELAY_MS              80
45094332d3Sopenharmony_ci#define AHT20_HUM_STARTUP_MS            20
46094332d3Sopenharmony_ci#define AHT20_HUM_CALIBRATION_MS        40
47094332d3Sopenharmony_ci
48094332d3Sopenharmony_ci#define AHT20_HUM_SHFIT_FOUR_BITS       4
49094332d3Sopenharmony_ci#define AHT20_HUM_SHFIT_EIGHT_BITS      8
50094332d3Sopenharmony_ci#define AHT20_HUM_MASK                  0xF0
51094332d3Sopenharmony_ci
52094332d3Sopenharmony_ci#define AHT20_HUM_SLOPE                 10000 // 100 * 100.0
53094332d3Sopenharmony_ci#define AHT20_HUM_RESOLUTION            (0x1 << 20)
54094332d3Sopenharmony_ci#define AHT20_HUM_RETRY_TIMES           5
55094332d3Sopenharmony_ci
56094332d3Sopenharmony_cistruct Aht20DrvData {
57094332d3Sopenharmony_ci    struct IDeviceIoService ioService;
58094332d3Sopenharmony_ci    struct HdfDeviceObject *device;
59094332d3Sopenharmony_ci    struct SensorCfgData *sensorCfg;
60094332d3Sopenharmony_ci};
61094332d3Sopenharmony_ci
62094332d3Sopenharmony_ci#endif /* HUMIDITY_AHT20_H */
63