You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
3.6 KiB
118 lines
3.6 KiB
/*
|
|
* 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
|
|
|