xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/include/common/rk_aiq_mems_sensor.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  *  Copyright (c) 2021 Rockchip Corporation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17 
18 #ifndef COMMON_RK_AIQ_SENSOR_H
19 #define COMMON_RK_AIQ_SENSOR_H
20 
21 #include <stdint.h>
22 #include <sys/types.h>
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
28 typedef enum mems_sensor_type_e {
29     SENSOR_INVALID_TYPE = 0,
30     SENSOR_GRYO_TYPE,
31     SENSOR_ACCEL_TYPE,
32     SENSOR_TEMP_TYPE,
33     SENSOR_ALL_TYPE,
34     SENSOR_MAX_TYPE,
35 } mems_sensor_type_t;
36 
37 typedef enum mems_sensor_return_e {
38     SENSOR_NO_ERR = 0,
39     SENSOR_ERR_DEV_BUSY,
40     SENSOR_ERR_INVALID_PARAM,
41     SENSOR_ERR_MISMATCH_SENSOR,
42     SENSOR_ERR_REACH_MAX,
43     SENSOR_ERR_FAIL,
44     SENSOR_ERR_TIMEOUT,
45     SENSOR_ERR_NULL_PTR,
46 } mems_sensor_return_t;
47 
48 typedef struct mems_sensor_capabilities_s {
49     mems_sensor_type_t type;
50     double* resolutions;
51     uint8_t num_resolutions;
52     double* scale;
53     uint8_t num_scale;
54     double* sample_rates;
55     uint8_t num_sample_rates;
56     bool is_data_valid;
57 } mems_sensor_capabilities_t;
58 
59 typedef struct mems_sensor_config_s {
60     double resolution;
61     double scale;
62     double sample_rate;
63     uint32_t max_data_count;
64     uint32_t buf_count;
65 } mems_sensor_config_t;
66 
67 typedef struct sensor_vec_s {
68     union {
69         double v[3];
70         struct {
71             double x;
72             double y;
73             double z;
74         };
75     };
76 }sensor_vec_t;
77 
78 typedef struct uncalib_event_s {
79     union {
80         double uncalib[3];
81         struct {
82             double x_uncalib;
83             double y_uncalib;
84             double z_uncalib;
85         };
86     };
87     union {
88         double bias[3];
89         struct {
90             double x_bias;
91             double y_bias;
92             double z_bias;
93         };
94     };
95 }uncalib_event_t;
96 
97 typedef sensor_vec_t gyro_data_t;
98 typedef sensor_vec_t accel_data_t;
99 typedef int temperature_data_t;
100 
101 typedef struct sensor_vec_all_s {
102     gyro_data_t gyro;
103     accel_data_t accel;
104     temperature_data_t temperature;
105 }sensor_vec_all_t;
106 
107 
108 typedef struct mems_sensor_event_s {
109     uint64_t id;
110     uint64_t timestamp_us;
111     union {
112         double data[16];
113         accel_data_t accel;
114         gyro_data_t gyro;
115         temperature_data_t temperature;
116         sensor_vec_all_t all;
117 
118         uncalib_event_t uncalib_gyro;
119         uncalib_event_t uncalib_accel;
120     };
121 } mems_sensor_event_t;
122 
123 typedef struct mems_sensor_list_s {
124     int count;
125     char** key_list;
126 } mems_sensor_list_t;
127 
128 typedef void* mems_sensor_ctx_t;
129 typedef void* mems_sensor_handle_t;
130 typedef void* mems_sensor_data_t;
131 
132 typedef mems_sensor_ctx_t (*rk_aiq_mems_sensor_createContext)();
133 typedef mems_sensor_return_t (*rk_aiq_mems_sensor_destroyContext)(mems_sensor_ctx_t ctx);
134 typedef mems_sensor_return_t (*rk_aiq_mems_sensor_getSensorList)(mems_sensor_ctx_t ctx,
135                                                                  mems_sensor_type_t type,
136                                                                  mems_sensor_list_t* list);
137 typedef mems_sensor_return_t (*rk_aiq_mems_sensor_releaseSensorList)(
138     mems_sensor_list_t* sensors_list);
139 typedef mems_sensor_return_t (*rk_aiq_mems_sensor_getSensorCapabilities)(
140     const mems_sensor_ctx_t ctx,const mems_sensor_type_t type, const char* sensor_key,
141     mems_sensor_capabilities_t* caps);
142 typedef mems_sensor_return_t (*rk_aiq_mems_sensor_releaseSensorCapabilities)(
143     mems_sensor_capabilities_t* caps);
144 typedef mems_sensor_return_t (*rk_aiq_mems_sensor_getConfig)(const mems_sensor_ctx_t ctx,
145                                                              const mems_sensor_type_t type,
146                                                              const char* sensor_key,
147                                                              mems_sensor_config_t* cfg);
148 typedef mems_sensor_return_t (*rk_aiq_mems_sensor_setConfig)(const mems_sensor_ctx_t ctx,
149                                                              const mems_sensor_type_t type,
150                                                              const char* sensor_key,
151                                                              mems_sensor_config_t cfg);
152 typedef mems_sensor_handle_t (*rk_aiq_mems_sensor_createHandle)(const mems_sensor_ctx_t ctx,
153                                                                 const mems_sensor_type_t type,
154                                                                 const char* sensor_key,
155                                                                 const uint32_t max_data_num,
156                                                                 const uint32_t buf_cnt);
157 typedef mems_sensor_return_t (*rk_aiq_mems_sensor_destroyHandle)(mems_sensor_handle_t handle);
158 typedef mems_sensor_data_t (*rk_aiq_mems_sensor_getData)(mems_sensor_handle_t handle,
159                                                          size_t* num_samples);
160 typedef mems_sensor_data_t (*rk_aiq_mems_sensor_getLastNSamples)(mems_sensor_handle_t handle,
161                                                                  size_t num_samples);
162 typedef mems_sensor_return_t (*rk_aiq_mems_sensor_releaseSamplesData)(mems_sensor_handle_t handle,
163                                                                       mems_sensor_data_t data);
164 
165 typedef struct rk_aiq_mems_sensor_intf_s {
166     rk_aiq_mems_sensor_createContext createContext;
167     rk_aiq_mems_sensor_destroyContext destroyContext;
168     rk_aiq_mems_sensor_getSensorList getSensorList;
169     rk_aiq_mems_sensor_releaseSensorList releaseSensorList;
170     rk_aiq_mems_sensor_getSensorCapabilities getSensorCapabilities;
171     rk_aiq_mems_sensor_releaseSensorCapabilities releaseSensorCapabilities;
172     rk_aiq_mems_sensor_getConfig getConfig;
173     rk_aiq_mems_sensor_setConfig setConfig;
174     rk_aiq_mems_sensor_createHandle createHandle;
175     rk_aiq_mems_sensor_destroyHandle destroyHandle;
176     rk_aiq_mems_sensor_getData getData;
177     rk_aiq_mems_sensor_getLastNSamples getLastNSamples;
178     rk_aiq_mems_sensor_releaseSamplesData releaseSamplesData;
179 } rk_aiq_mems_sensor_intf_t;
180 
181 #ifdef __cplusplus
182 }  // extern "C"
183 #endif
184 
185 #endif  // COMMON_RK_AIQ_SENSOR_H
186