/* * Copyright (c) 2021 Rockchip Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ #ifndef COMMON_RK_AIQ_SENSOR_H #define COMMON_RK_AIQ_SENSOR_H #include #include #ifdef __cplusplus extern "C" { #endif typedef enum mems_sensor_type_e { SENSOR_INVALID_TYPE = 0, SENSOR_GRYO_TYPE, SENSOR_ACCEL_TYPE, SENSOR_TEMP_TYPE, SENSOR_ALL_TYPE, SENSOR_MAX_TYPE, } mems_sensor_type_t; typedef enum mems_sensor_return_e { SENSOR_NO_ERR = 0, SENSOR_ERR_DEV_BUSY, SENSOR_ERR_INVALID_PARAM, SENSOR_ERR_MISMATCH_SENSOR, SENSOR_ERR_REACH_MAX, SENSOR_ERR_FAIL, SENSOR_ERR_TIMEOUT, SENSOR_ERR_NULL_PTR, } mems_sensor_return_t; typedef struct mems_sensor_capabilities_s { mems_sensor_type_t type; double* resolutions; uint8_t num_resolutions; double* scale; uint8_t num_scale; double* sample_rates; uint8_t num_sample_rates; bool is_data_valid; } mems_sensor_capabilities_t; typedef struct mems_sensor_config_s { double resolution; double scale; double sample_rate; uint32_t max_data_count; uint32_t buf_count; } mems_sensor_config_t; typedef struct sensor_vec_s { union { double v[3]; struct { double x; double y; double z; }; }; }sensor_vec_t; typedef struct uncalib_event_s { union { double uncalib[3]; struct { double x_uncalib; double y_uncalib; double z_uncalib; }; }; union { double bias[3]; struct { double x_bias; double y_bias; double z_bias; }; }; }uncalib_event_t; typedef sensor_vec_t gyro_data_t; typedef sensor_vec_t accel_data_t; typedef int temperature_data_t; typedef struct sensor_vec_all_s { gyro_data_t gyro; accel_data_t accel; temperature_data_t temperature; }sensor_vec_all_t; typedef struct mems_sensor_event_s { uint64_t id; uint64_t timestamp_us; union { double data[16]; accel_data_t accel; gyro_data_t gyro; temperature_data_t temperature; sensor_vec_all_t all; uncalib_event_t uncalib_gyro; uncalib_event_t uncalib_accel; }; } mems_sensor_event_t; typedef struct mems_sensor_list_s { int count; char** key_list; } mems_sensor_list_t; typedef void* mems_sensor_ctx_t; typedef void* mems_sensor_handle_t; typedef void* mems_sensor_data_t; typedef mems_sensor_ctx_t (*rk_aiq_mems_sensor_createContext)(); typedef mems_sensor_return_t (*rk_aiq_mems_sensor_destroyContext)(mems_sensor_ctx_t ctx); typedef mems_sensor_return_t (*rk_aiq_mems_sensor_getSensorList)(mems_sensor_ctx_t ctx, mems_sensor_type_t type, mems_sensor_list_t* list); typedef mems_sensor_return_t (*rk_aiq_mems_sensor_releaseSensorList)( mems_sensor_list_t* sensors_list); typedef mems_sensor_return_t (*rk_aiq_mems_sensor_getSensorCapabilities)( const mems_sensor_ctx_t ctx,const mems_sensor_type_t type, const char* sensor_key, mems_sensor_capabilities_t* caps); typedef mems_sensor_return_t (*rk_aiq_mems_sensor_releaseSensorCapabilities)( mems_sensor_capabilities_t* caps); typedef mems_sensor_return_t (*rk_aiq_mems_sensor_getConfig)(const mems_sensor_ctx_t ctx, const mems_sensor_type_t type, const char* sensor_key, mems_sensor_config_t* cfg); typedef mems_sensor_return_t (*rk_aiq_mems_sensor_setConfig)(const mems_sensor_ctx_t ctx, const mems_sensor_type_t type, const char* sensor_key, mems_sensor_config_t cfg); typedef mems_sensor_handle_t (*rk_aiq_mems_sensor_createHandle)(const mems_sensor_ctx_t ctx, const mems_sensor_type_t type, const char* sensor_key, const uint32_t max_data_num, const uint32_t buf_cnt); typedef mems_sensor_return_t (*rk_aiq_mems_sensor_destroyHandle)(mems_sensor_handle_t handle); typedef mems_sensor_data_t (*rk_aiq_mems_sensor_getData)(mems_sensor_handle_t handle, size_t* num_samples); typedef mems_sensor_data_t (*rk_aiq_mems_sensor_getLastNSamples)(mems_sensor_handle_t handle, size_t num_samples); typedef mems_sensor_return_t (*rk_aiq_mems_sensor_releaseSamplesData)(mems_sensor_handle_t handle, mems_sensor_data_t data); typedef struct rk_aiq_mems_sensor_intf_s { rk_aiq_mems_sensor_createContext createContext; rk_aiq_mems_sensor_destroyContext destroyContext; rk_aiq_mems_sensor_getSensorList getSensorList; rk_aiq_mems_sensor_releaseSensorList releaseSensorList; rk_aiq_mems_sensor_getSensorCapabilities getSensorCapabilities; rk_aiq_mems_sensor_releaseSensorCapabilities releaseSensorCapabilities; rk_aiq_mems_sensor_getConfig getConfig; rk_aiq_mems_sensor_setConfig setConfig; rk_aiq_mems_sensor_createHandle createHandle; rk_aiq_mems_sensor_destroyHandle destroyHandle; rk_aiq_mems_sensor_getData getData; rk_aiq_mems_sensor_getLastNSamples getLastNSamples; rk_aiq_mems_sensor_releaseSamplesData releaseSamplesData; } rk_aiq_mems_sensor_intf_t; #ifdef __cplusplus } // extern "C" #endif #endif // COMMON_RK_AIQ_SENSOR_H