1094332d3Sopenharmony_ci/*
2094332d3Sopenharmony_ci * Copyright (c) 2021-2022 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 ALS_BH1745_H
10094332d3Sopenharmony_ci#define ALS_BH1745_H
11094332d3Sopenharmony_ci
12094332d3Sopenharmony_ci#include "sensor_als_driver.h"
13094332d3Sopenharmony_ci#include "sensor_config_parser.h"
14094332d3Sopenharmony_ci
15094332d3Sopenharmony_ci/* ALS DATA REGISTERS ADDR */
16094332d3Sopenharmony_ci#define BH1745_ALS_R_LSB_ADDR                     0X50
17094332d3Sopenharmony_ci#define BH1745_ALS_R_MSB_ADDR                     0X51
18094332d3Sopenharmony_ci#define BH1745_ALS_G_LSB_ADDR                     0X52
19094332d3Sopenharmony_ci#define BH1745_ALS_G_MSB_ADDR                     0X53
20094332d3Sopenharmony_ci#define BH1745_ALS_B_LSB_ADDR                     0X54
21094332d3Sopenharmony_ci#define BH1745_ALS_B_MSB_ADDR                     0X55
22094332d3Sopenharmony_ci#define BH1745_ALS_C_LSB_ADDR                     0X56
23094332d3Sopenharmony_ci#define BH1745_ALS_C_MSB_ADDR                     0X57
24094332d3Sopenharmony_ci#define BH1745_MODECONTROL3_ADDR                  0X44
25094332d3Sopenharmony_ci
26094332d3Sopenharmony_ci/* ALS DATA READY */
27094332d3Sopenharmony_ci#define BH1745_ALS_DATA_READY_MASK                0X02
28094332d3Sopenharmony_ci
29094332d3Sopenharmony_ci/* ALS MULTIPLE */
30094332d3Sopenharmony_ci#define BH1745_MULTIPLE_100                       100
31094332d3Sopenharmony_ci
32094332d3Sopenharmony_ci/* ALS COEFFICIENT  */
33094332d3Sopenharmony_ci#define BH1745_COEFFICIENT_RED                    2
34094332d3Sopenharmony_ci#define BH1745_COEFFICIENT_GREEN                  2
35094332d3Sopenharmony_ci#define BH1745_COEFFICIENT_RED_LEVEL_0            7730          // 7.73 * 1000
36094332d3Sopenharmony_ci#define BH1745_COEFFICIENT_RED_LEVEL_1            9271          // 9.2715 * 1000
37094332d3Sopenharmony_ci#define BH1745_COEFFICIENT_GREEN_LEVEL_0          13192         // 1.3192 * 1000
38094332d3Sopenharmony_ci#define BH1745_COEFFICIENT_GREEN_LEVEL_1          21477         // 2.1477 * 1000
39094332d3Sopenharmony_ci#define BH1745_COEFFICIENT_JUDGE                  78             // 0.78*100
40094332d3Sopenharmony_ci
41094332d3Sopenharmony_ci/* ALS TIME */
42094332d3Sopenharmony_ci#define BH1745_TIME_160MSEC                      160
43094332d3Sopenharmony_ci#define BH1745_TIME_320MSEC                      320
44094332d3Sopenharmony_ci#define BH1745_TIME_640MSEC                      640
45094332d3Sopenharmony_ci#define BH1745_TIME_1280MSEC                     1280
46094332d3Sopenharmony_ci#define BH1745_TIME_2560MSEC                     2560
47094332d3Sopenharmony_ci#define BH1745_TIME_5120MSEC                     5120
48094332d3Sopenharmony_ci#define BH1745_TIME_MAX                          5570475         // 65535*0.85*100
49094332d3Sopenharmony_ci#define BH1745_TIME_MIN                          1638375         // 65535*0.25*100
50094332d3Sopenharmony_ci
51094332d3Sopenharmony_ci/* ALS GAIN */
52094332d3Sopenharmony_ci#define BH1745_GAIN_1X                           1
53094332d3Sopenharmony_ci#define BH1745_GAIN_2X                           2
54094332d3Sopenharmony_ci#define BH1745_GAIN_16X                          16
55094332d3Sopenharmony_ci
56094332d3Sopenharmony_ci/* ALS TIME REG VALUE */
57094332d3Sopenharmony_ci#define EXTENDED_ALS_TIME_GROUP_ATTR_VALUE_0                 0x00
58094332d3Sopenharmony_ci#define EXTENDED_ALS_TIME_GROUP_ATTR_VALUE_1                 0x01
59094332d3Sopenharmony_ci#define EXTENDED_ALS_TIME_GROUP_ATTR_VALUE_2                 0x02
60094332d3Sopenharmony_ci#define EXTENDED_ALS_TIME_GROUP_ATTR_VALUE_3                 0x03
61094332d3Sopenharmony_ci#define EXTENDED_ALS_TIME_GROUP_ATTR_VALUE_4                 0x04
62094332d3Sopenharmony_ci#define EXTENDED_ALS_TIME_GROUP_ATTR_VALUE_5                 0x05
63094332d3Sopenharmony_ci
64094332d3Sopenharmony_ci/* ALS GAIN REG VALUE */
65094332d3Sopenharmony_ci#define EXTENDED_ALS_GAIN_GROUP_ATTR_VALUE_0                 0x00
66094332d3Sopenharmony_ci#define EXTENDED_ALS_GAIN_GROUP_ATTR_VALUE_1                 0x01
67094332d3Sopenharmony_ci#define EXTENDED_ALS_GAIN_GROUP_ATTR_VALUE_2                 0x02
68094332d3Sopenharmony_ci
69094332d3Sopenharmony_ci#define CHECK_SENSOR_REGIARRAY_RETURN_VALUE(ret, str) do { \
70094332d3Sopenharmony_ci    if ((ret) != HDF_SUCCESS) { \
71094332d3Sopenharmony_ci            HDF_LOGE("%s: Failed to %s sensor register array", __func__, str); \
72094332d3Sopenharmony_ci            return HDF_FAILURE; \
73094332d3Sopenharmony_ci    } \
74094332d3Sopenharmony_ci} while (0)
75094332d3Sopenharmony_ci
76094332d3Sopenharmony_cienum ExtendedAlsTimeRegGroupIndex {
77094332d3Sopenharmony_ci    EXTENDED_ALS_TIME_GROUP_INDEX_0 = 0,
78094332d3Sopenharmony_ci    EXTENDED_ALS_TIME_GROUP_INDEX_1,
79094332d3Sopenharmony_ci    EXTENDED_ALS_TIME_GROUP_INDEX_2,
80094332d3Sopenharmony_ci    EXTENDED_ALS_TIME_GROUP_INDEX_3,
81094332d3Sopenharmony_ci    EXTENDED_ALS_TIME_GROUP_INDEX_4,
82094332d3Sopenharmony_ci    EXTENDED_ALS_TIME_GROUP_INDEX_5,
83094332d3Sopenharmony_ci    EXTENDED_ALS_TIME_GROUP_INDEX_MAX,
84094332d3Sopenharmony_ci};
85094332d3Sopenharmony_ci
86094332d3Sopenharmony_cienum ExtendedAlsGainRegGroupIndex {
87094332d3Sopenharmony_ci    EXTENDED_ALS_GAIN_GROUP_INDEX_0 = 0,
88094332d3Sopenharmony_ci    EXTENDED_ALS_GAIN_GROUP_INDEX_1,
89094332d3Sopenharmony_ci    EXTENDED_ALS_GAIN_GROUP_INDEX_2,
90094332d3Sopenharmony_ci    EXTENDED_ALS_GAIN_GROUP_INDEX_MAX,
91094332d3Sopenharmony_ci};
92094332d3Sopenharmony_ci
93094332d3Sopenharmony_ciint32_t DetectAlsBim160Chip(struct SensorCfgData *data);
94094332d3Sopenharmony_ci
95094332d3Sopenharmony_cistruct Bh1745DrvData {
96094332d3Sopenharmony_ci    struct IDeviceIoService ioService;
97094332d3Sopenharmony_ci    struct HdfDeviceObject *device;
98094332d3Sopenharmony_ci    struct SensorCfgData *sensorCfg;
99094332d3Sopenharmony_ci};
100094332d3Sopenharmony_ci
101094332d3Sopenharmony_ci#endif /* ALS_BH1745_H */
102