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