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 MAGNETIC_LSM303_H
10094332d3Sopenharmony_ci#define MAGNETIC_LSM303_H
11094332d3Sopenharmony_ci
12094332d3Sopenharmony_ci#include "sensor_config_parser.h"
13094332d3Sopenharmony_ci#include "sensor_magnetic_driver.h"
14094332d3Sopenharmony_ci
15094332d3Sopenharmony_ci#define LSM303_MAGNETIC_GIN                     1000
16094332d3Sopenharmony_ci
17094332d3Sopenharmony_ci/* MAGNETIC SET RATE AND MODE ADDR */
18094332d3Sopenharmony_ci#define LSM303_CRA_REG_ADDR                     0X00
19094332d3Sopenharmony_ci#define LSM303_CRB_REG_ADDR                     0X01
20094332d3Sopenharmony_ci#define LSM303_MR_REG_ADDR                      0X02
21094332d3Sopenharmony_ci
22094332d3Sopenharmony_ci/* MAGNETIC DATA REGISTERS ADDR */
23094332d3Sopenharmony_ci#define LSM303_MAGNETIC_X_MSB_ADDR              0X03
24094332d3Sopenharmony_ci#define LSM303_MAGNETIC_X_LSB_ADDR              0X04
25094332d3Sopenharmony_ci#define LSM303_MAGNETIC_Y_MSB_ADDR              0X05
26094332d3Sopenharmony_ci#define LSM303_MAGNETIC_Y_LSB_ADDR              0X06
27094332d3Sopenharmony_ci#define LSM303_MAGNETIC_Z_MSB_ADDR              0X07
28094332d3Sopenharmony_ci#define LSM303_MAGNETIC_Z_LSB_ADDR              0X08
29094332d3Sopenharmony_ci#define LSM303_STATUS_ADDR                      0X09
30094332d3Sopenharmony_ci
31094332d3Sopenharmony_ci/* MAGNETIC DATA RATE CONFIG HZ */
32094332d3Sopenharmony_ci#define LSM303_DATA_RATE_0                      0X00
33094332d3Sopenharmony_ci#define LSM303_DATA_RATE_1                      0X04
34094332d3Sopenharmony_ci#define LSM303_DATA_RATE_2                      0X08
35094332d3Sopenharmony_ci#define LSM303_DATA_RATE_3                      0X0C
36094332d3Sopenharmony_ci#define LSM303_DATA_RATE_4                      0X10
37094332d3Sopenharmony_ci#define LSM303_DATA_RATE_5                      0X14
38094332d3Sopenharmony_ci#define LSM303_DATA_RATE_6                      0X18
39094332d3Sopenharmony_ci#define LSM303_DATA_RATE_7                      0X1C
40094332d3Sopenharmony_ci
41094332d3Sopenharmony_ci/* MAGNETIC GAIN CONFIG GAUSS */
42094332d3Sopenharmony_ci#define LSM303_GAIN_RATE_0                      0X20
43094332d3Sopenharmony_ci#define LSM303_GAIN_RATE_1                      0X40
44094332d3Sopenharmony_ci#define LSM303_GAIN_RATE_2                      0X60
45094332d3Sopenharmony_ci#define LSM303_GAIN_RATE_3                      0X80
46094332d3Sopenharmony_ci#define LSM303_GAIN_RATE_4                      0XA0
47094332d3Sopenharmony_ci#define LSM303_GAIN_RATE_5                      0XC0
48094332d3Sopenharmony_ci#define LSM303_GAIN_RATE_6                      0XE0
49094332d3Sopenharmony_ci
50094332d3Sopenharmony_ci/* MAGNETIC GAIN SENSITIVITY RANGE */
51094332d3Sopenharmony_ci#define LSM303DLHC_SENSITIVITY_XY13GA           1100
52094332d3Sopenharmony_ci#define LSM303DLHC_SENSITIVITY_XY19GA           855
53094332d3Sopenharmony_ci#define LSM303DLHC_SENSITIVITY_XY25GA           670
54094332d3Sopenharmony_ci#define LSM303DLHC_SENSITIVITY_XY40GA           450
55094332d3Sopenharmony_ci#define LSM303DLHC_SENSITIVITY_XY47GA           400
56094332d3Sopenharmony_ci#define LSM303DLHC_SENSITIVITY_XY56GA           330
57094332d3Sopenharmony_ci#define LSM303DLHC_SENSITIVITY_XY81GA           230
58094332d3Sopenharmony_ci#define LSM303DLHC_SENSITIVITY_Z13GA            980
59094332d3Sopenharmony_ci#define LSM303DLHC_SENSITIVITY_Z19GA            760
60094332d3Sopenharmony_ci#define LSM303DLHC_SENSITIVITY_Z25GA            600
61094332d3Sopenharmony_ci#define LSM303DLHC_SENSITIVITY_Z40GA            400
62094332d3Sopenharmony_ci#define LSM303DLHC_SENSITIVITY_Z47GA            355
63094332d3Sopenharmony_ci#define LSM303DLHC_SENSITIVITY_Z56GA            295
64094332d3Sopenharmony_ci#define LSM303DLHC_SENSITIVITY_Z81GA            205
65094332d3Sopenharmony_ci
66094332d3Sopenharmony_ci/* MAGNETIC MODE CONFIG */
67094332d3Sopenharmony_ci#define LSM303_OPERATING_MODE_1                 0X00
68094332d3Sopenharmony_ci#define LSM303_OPERATING_MODE_2                 0X01
69094332d3Sopenharmony_ci#define LSM303_OPERATING_MODE_3                 0X02
70094332d3Sopenharmony_ci#define LSM303_OPERATING_MODE_4                 0X03
71094332d3Sopenharmony_ci
72094332d3Sopenharmony_ci/* MAGNETIC DATA READY */
73094332d3Sopenharmony_ci#define LSM303_DATA_READY_MASK                  0x01
74094332d3Sopenharmony_ci
75094332d3Sopenharmony_ciint32_t DetectMagneticLsm303Chip(struct SensorCfgData *data);
76094332d3Sopenharmony_ci
77094332d3Sopenharmony_cistruct Lsm303DrvData {
78094332d3Sopenharmony_ci    struct IDeviceIoService ioService;
79094332d3Sopenharmony_ci    struct HdfDeviceObject *device;
80094332d3Sopenharmony_ci    struct SensorCfgData *sensorCfg;
81094332d3Sopenharmony_ci};
82094332d3Sopenharmony_ci
83094332d3Sopenharmony_ci#endif /* MAGNETIC_LSM303_H */