| /* |
| * Copyright (C) 2017 The Android Open Source Project |
| * |
| * 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 __HALINTF_H |
| #define __HALINTF_H |
| #include <stdint.h> |
| #include "toolchain.h" |
| #include "sensType.h" |
| |
| /* |
| * This files contains data structure for HAL and driver / algo to exchange information. |
| */ |
| |
| #define APP_TO_SENSOR_HAL_SIZE_MAX HOSTINTF_SENSOR_DATA_MAX |
| #define APP_TO_SENSOR_HAL_PAYLOAD_MAX \ |
| (APP_TO_SENSOR_HAL_DATA_MAX - sizeof(struct AppToSensorHalDataBuffer)) |
| #define APP_TO_SENSOR_HAL_TYPE(sensor, subtype) (((sensor) && 0xFF) | (((subtype) & 0x7F) << 8)) |
| #define APP_TO_SENSOR_HAL_TYPE_MASK 0x7FFF |
| |
| enum { |
| // gyro sensor calibration: GyroCalBias |
| HALINTF_TYPE_GYRO_CAL_BIAS = APP_TO_SENSOR_HAL_TYPE(SENS_TYPE_GYRO, 1), |
| |
| // gyro sensor over temperature calibration: GyroOtcData |
| HALINTF_TYPE_GYRO_OTC_DATA = APP_TO_SENSOR_HAL_TYPE(SENS_TYPE_GYRO, 2), |
| |
| // mag sensor calibration: MagCalBias |
| HALINTF_TYPE_MAG_CAL_BIAS = APP_TO_SENSOR_HAL_TYPE(SENS_TYPE_MAG, 1), |
| |
| // mag local field information: MagLocalField |
| HALINTF_TYPE_MAG_LOCAL_FIELD = APP_TO_SENSOR_HAL_TYPE(SENS_TYPE_MAG, 2), |
| |
| // mag sensor spherical calibration: MagSphericalData |
| HALINTF_TYPE_MAG_SPERICAL_DATA = APP_TO_SENSOR_HAL_TYPE(SENS_TYPE_MAG, 3), |
| }; |
| |
| SET_PACKED_STRUCT_MODE_ON |
| struct GyroCalBias { |
| int32_t hardwareBias[3]; // unit depending on hardware implementation |
| float softwareBias[3]; // rad/s |
| } ATTRIBUTE_PACKED; |
| SET_PACKED_STRUCT_MODE_OFF |
| |
| SET_PACKED_STRUCT_MODE_ON |
| struct GyroOtcData { |
| float lastOffset[3]; // rad/s |
| float lastTemperature; // Celsius |
| float sensitivity[3]; // rad/s/K |
| float intercept[3]; // rad/s |
| } ATTRIBUTE_PACKED; |
| SET_PACKED_STRUCT_MODE_OFF |
| |
| SET_PACKED_STRUCT_MODE_ON |
| struct MagCalBias { |
| float bias[3]; // in uT |
| } ATTRIBUTE_PACKED; |
| SET_PACKED_STRUCT_MODE_OFF |
| |
| SET_PACKED_STRUCT_MODE_ON |
| struct MagLocalField { |
| float strength; // in uT |
| float declination; // in rad |
| float inclination; // in rad |
| } ATTRIBUTE_PACKED; |
| SET_PACKED_STRUCT_MODE_OFF |
| |
| SET_PACKED_STRUCT_MODE_ON |
| struct MagSphericalData { |
| float bias[3]; |
| float scale[3]; |
| float skew[3]; |
| } ATTRIBUTE_PACKED; |
| SET_PACKED_STRUCT_MODE_OFF |
| |
| // data structure for upload bulk data to sensor hal |
| SET_PACKED_STRUCT_MODE_ON |
| struct AppToSensorHalDataPayload { |
| uint8_t size; // number of bytes in payload data |
| uint8_t reserved; |
| uint16_t type; // use EVENT_TYPE_BIT_DISCARDABLE to mark discardable update |
| union |
| { |
| uint32_t u[0]; |
| int32_t i[0]; |
| float f[0]; |
| struct GyroCalBias gyroCalBias[0]; |
| struct GyroOtcData gyroOtcData[0]; |
| struct MagCalBias magCalBias[0]; |
| struct MagLocalField magLocalField[0]; |
| struct MagSphericalData magSphericalData[0]; |
| }; |
| } ATTRIBUTE_PACKED; |
| SET_PACKED_STRUCT_MODE_OFF |
| |
| // buffer data structure with header, header compatible with HostIntfDataBuffer |
| SET_PACKED_STRUCT_MODE_ON |
| struct AppToSensorHalDataBuffer { |
| uint32_t eventType; // placeholder for HostIntfDataBuffer event type field |
| struct AppToSensorHalDataPayload payload; |
| }; |
| SET_PACKED_STRUCT_MODE_OFF |
| |
| #endif //__HALINTF_H |
| |