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