mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 11:36:00 +00:00
Merge "Moved implementation of ConvertUtils to cpp file."
This commit is contained in:
committed by
Android (Google) Code Review
commit
d248c6d6fd
@@ -43,6 +43,7 @@ cc_library_static {
|
||||
export_include_dirs: ["include"],
|
||||
srcs: [
|
||||
"HalProxyAidl.cpp",
|
||||
"ConvertUtils.cpp",
|
||||
],
|
||||
visibility: [
|
||||
":__subpackages__",
|
||||
|
||||
321
sensors/aidl/default/multihal/ConvertUtils.cpp
Normal file
321
sensors/aidl/default/multihal/ConvertUtils.cpp
Normal file
@@ -0,0 +1,321 @@
|
||||
/*
|
||||
* Copyright (C) 2021 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.
|
||||
*/
|
||||
|
||||
#include "ConvertUtils.h"
|
||||
#include <android-base/logging.h>
|
||||
#include <log/log.h>
|
||||
|
||||
using AidlSensorInfo = ::aidl::android::hardware::sensors::SensorInfo;
|
||||
using AidlSensorType = ::aidl::android::hardware::sensors::SensorType;
|
||||
using AidlEvent = ::aidl::android::hardware::sensors::Event;
|
||||
using AidlSensorStatus = ::aidl::android::hardware::sensors::SensorStatus;
|
||||
using ::aidl::android::hardware::sensors::AdditionalInfo;
|
||||
using ::aidl::android::hardware::sensors::DynamicSensorInfo;
|
||||
using ::android::hardware::sensors::V1_0::MetaDataEventType;
|
||||
using V1_0SensorStatus = ::android::hardware::sensors::V1_0::SensorStatus;
|
||||
using ::android::hardware::sensors::V1_0::AdditionalInfoType;
|
||||
using V2_1SensorInfo = ::android::hardware::sensors::V2_1::SensorInfo;
|
||||
using V2_1Event = ::android::hardware::sensors::V2_1::Event;
|
||||
using V2_1SensorType = ::android::hardware::sensors::V2_1::SensorType;
|
||||
|
||||
namespace aidl {
|
||||
namespace android {
|
||||
namespace hardware {
|
||||
namespace sensors {
|
||||
namespace implementation {
|
||||
|
||||
AidlSensorInfo convertSensorInfo(const V2_1SensorInfo& sensorInfo) {
|
||||
AidlSensorInfo aidlSensorInfo;
|
||||
aidlSensorInfo.sensorHandle = sensorInfo.sensorHandle;
|
||||
aidlSensorInfo.name = sensorInfo.name;
|
||||
aidlSensorInfo.vendor = sensorInfo.vendor;
|
||||
aidlSensorInfo.version = sensorInfo.version;
|
||||
aidlSensorInfo.type = (AidlSensorType)sensorInfo.type;
|
||||
aidlSensorInfo.typeAsString = sensorInfo.typeAsString;
|
||||
aidlSensorInfo.maxRange = sensorInfo.maxRange;
|
||||
aidlSensorInfo.resolution = sensorInfo.resolution;
|
||||
aidlSensorInfo.power = sensorInfo.power;
|
||||
aidlSensorInfo.minDelayUs = sensorInfo.minDelay;
|
||||
aidlSensorInfo.fifoReservedEventCount = sensorInfo.fifoReservedEventCount;
|
||||
aidlSensorInfo.fifoMaxEventCount = sensorInfo.fifoMaxEventCount;
|
||||
aidlSensorInfo.requiredPermission = sensorInfo.requiredPermission;
|
||||
aidlSensorInfo.maxDelayUs = sensorInfo.maxDelay;
|
||||
aidlSensorInfo.flags = sensorInfo.flags;
|
||||
return aidlSensorInfo;
|
||||
}
|
||||
|
||||
void convertToHidlEvent(const AidlEvent& aidlEvent, V2_1Event* hidlEvent) {
|
||||
hidlEvent->timestamp = aidlEvent.timestamp;
|
||||
hidlEvent->sensorHandle = aidlEvent.sensorHandle;
|
||||
hidlEvent->sensorType = (V2_1SensorType)aidlEvent.sensorType;
|
||||
|
||||
switch (aidlEvent.sensorType) {
|
||||
case AidlSensorType::META_DATA:
|
||||
hidlEvent->u.meta.what =
|
||||
(MetaDataEventType)aidlEvent.payload.get<Event::EventPayload::meta>().what;
|
||||
break;
|
||||
case AidlSensorType::ACCELEROMETER:
|
||||
case AidlSensorType::MAGNETIC_FIELD:
|
||||
case AidlSensorType::ORIENTATION:
|
||||
case AidlSensorType::GYROSCOPE:
|
||||
case AidlSensorType::GRAVITY:
|
||||
case AidlSensorType::LINEAR_ACCELERATION:
|
||||
hidlEvent->u.vec3.x = aidlEvent.payload.get<Event::EventPayload::vec3>().x;
|
||||
hidlEvent->u.vec3.y = aidlEvent.payload.get<Event::EventPayload::vec3>().y;
|
||||
hidlEvent->u.vec3.z = aidlEvent.payload.get<Event::EventPayload::vec3>().z;
|
||||
break;
|
||||
case AidlSensorType::GAME_ROTATION_VECTOR:
|
||||
hidlEvent->u.vec4.x = aidlEvent.payload.get<Event::EventPayload::vec4>().x;
|
||||
hidlEvent->u.vec4.y = aidlEvent.payload.get<Event::EventPayload::vec4>().y;
|
||||
hidlEvent->u.vec4.z = aidlEvent.payload.get<Event::EventPayload::vec4>().z;
|
||||
hidlEvent->u.vec4.w = aidlEvent.payload.get<Event::EventPayload::vec4>().w;
|
||||
break;
|
||||
case AidlSensorType::ROTATION_VECTOR:
|
||||
case AidlSensorType::GEOMAGNETIC_ROTATION_VECTOR:
|
||||
std::copy(aidlEvent.payload.get<Event::EventPayload::data>().values.data(),
|
||||
aidlEvent.payload.get<Event::EventPayload::data>().values.data() + 5,
|
||||
hidlEvent->u.data.data());
|
||||
break;
|
||||
case AidlSensorType::ACCELEROMETER_UNCALIBRATED:
|
||||
case AidlSensorType::MAGNETIC_FIELD_UNCALIBRATED:
|
||||
case AidlSensorType::GYROSCOPE_UNCALIBRATED:
|
||||
hidlEvent->u.uncal.x = aidlEvent.payload.get<Event::EventPayload::uncal>().x;
|
||||
hidlEvent->u.uncal.y = aidlEvent.payload.get<Event::EventPayload::uncal>().y;
|
||||
hidlEvent->u.uncal.z = aidlEvent.payload.get<Event::EventPayload::uncal>().z;
|
||||
hidlEvent->u.uncal.x_bias = aidlEvent.payload.get<Event::EventPayload::uncal>().xBias;
|
||||
hidlEvent->u.uncal.y_bias = aidlEvent.payload.get<Event::EventPayload::uncal>().yBias;
|
||||
hidlEvent->u.uncal.z_bias = aidlEvent.payload.get<Event::EventPayload::uncal>().zBias;
|
||||
break;
|
||||
case AidlSensorType::DEVICE_ORIENTATION:
|
||||
case AidlSensorType::LIGHT:
|
||||
case AidlSensorType::PRESSURE:
|
||||
case AidlSensorType::PROXIMITY:
|
||||
case AidlSensorType::RELATIVE_HUMIDITY:
|
||||
case AidlSensorType::AMBIENT_TEMPERATURE:
|
||||
case AidlSensorType::SIGNIFICANT_MOTION:
|
||||
case AidlSensorType::STEP_DETECTOR:
|
||||
case AidlSensorType::TILT_DETECTOR:
|
||||
case AidlSensorType::WAKE_GESTURE:
|
||||
case AidlSensorType::GLANCE_GESTURE:
|
||||
case AidlSensorType::PICK_UP_GESTURE:
|
||||
case AidlSensorType::WRIST_TILT_GESTURE:
|
||||
case AidlSensorType::STATIONARY_DETECT:
|
||||
case AidlSensorType::MOTION_DETECT:
|
||||
case AidlSensorType::HEART_BEAT:
|
||||
case AidlSensorType::LOW_LATENCY_OFFBODY_DETECT:
|
||||
case AidlSensorType::HINGE_ANGLE:
|
||||
hidlEvent->u.scalar = aidlEvent.payload.get<Event::EventPayload::scalar>();
|
||||
break;
|
||||
case AidlSensorType::STEP_COUNTER:
|
||||
hidlEvent->u.stepCount = aidlEvent.payload.get<AidlEvent::EventPayload::stepCount>();
|
||||
break;
|
||||
case AidlSensorType::HEART_RATE:
|
||||
hidlEvent->u.heartRate.bpm =
|
||||
aidlEvent.payload.get<AidlEvent::EventPayload::heartRate>().bpm;
|
||||
hidlEvent->u.heartRate.status =
|
||||
(V1_0SensorStatus)aidlEvent.payload.get<Event::EventPayload::heartRate>()
|
||||
.status;
|
||||
break;
|
||||
case AidlSensorType::POSE_6DOF:
|
||||
std::copy(std::begin(aidlEvent.payload.get<AidlEvent::EventPayload::pose6DOF>().values),
|
||||
std::end(aidlEvent.payload.get<AidlEvent::EventPayload::data>().values),
|
||||
hidlEvent->u.pose6DOF.data());
|
||||
break;
|
||||
case AidlSensorType::DYNAMIC_SENSOR_META:
|
||||
hidlEvent->u.dynamic.connected =
|
||||
aidlEvent.payload.get<Event::EventPayload::dynamic>().connected;
|
||||
hidlEvent->u.dynamic.sensorHandle =
|
||||
aidlEvent.payload.get<Event::EventPayload::dynamic>().sensorHandle;
|
||||
std::copy(
|
||||
std::begin(
|
||||
aidlEvent.payload.get<AidlEvent::EventPayload::dynamic>().uuid.values),
|
||||
std::end(aidlEvent.payload.get<AidlEvent::EventPayload::dynamic>().uuid.values),
|
||||
hidlEvent->u.dynamic.uuid.data());
|
||||
break;
|
||||
case AidlSensorType::ADDITIONAL_INFO: {
|
||||
const AdditionalInfo& additionalInfo =
|
||||
aidlEvent.payload.get<AidlEvent::EventPayload::additional>();
|
||||
hidlEvent->u.additional.type = (AdditionalInfoType)additionalInfo.type;
|
||||
hidlEvent->u.additional.serial = additionalInfo.serial;
|
||||
|
||||
switch (additionalInfo.payload.getTag()) {
|
||||
case AdditionalInfo::AdditionalInfoPayload::Tag::dataInt32: {
|
||||
const auto& aidlData =
|
||||
additionalInfo.payload
|
||||
.get<AdditionalInfo::AdditionalInfoPayload::dataInt32>()
|
||||
.values;
|
||||
std::copy(std::begin(aidlData), std::end(aidlData),
|
||||
hidlEvent->u.additional.u.data_int32.data());
|
||||
break;
|
||||
}
|
||||
case AdditionalInfo::AdditionalInfoPayload::Tag::dataFloat: {
|
||||
const auto& aidlData =
|
||||
additionalInfo.payload
|
||||
.get<AdditionalInfo::AdditionalInfoPayload::dataFloat>()
|
||||
.values;
|
||||
std::copy(std::begin(aidlData), std::end(aidlData),
|
||||
hidlEvent->u.additional.u.data_float.data());
|
||||
break;
|
||||
}
|
||||
default:
|
||||
ALOGE("Invalid sensor additioanl info tag: %d",
|
||||
additionalInfo.payload.getTag());
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
CHECK_GE((int32_t)aidlEvent.sensorType, (int32_t)SensorType::DEVICE_PRIVATE_BASE);
|
||||
std::copy(std::begin(aidlEvent.payload.get<AidlEvent::EventPayload::data>().values),
|
||||
std::end(aidlEvent.payload.get<AidlEvent::EventPayload::data>().values),
|
||||
hidlEvent->u.data.data());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void convertToAidlEvent(const V2_1Event& hidlEvent, AidlEvent* aidlEvent) {
|
||||
aidlEvent->timestamp = hidlEvent.timestamp;
|
||||
aidlEvent->sensorHandle = hidlEvent.sensorHandle;
|
||||
aidlEvent->sensorType = (AidlSensorType)hidlEvent.sensorType;
|
||||
switch (hidlEvent.sensorType) {
|
||||
case V2_1SensorType::META_DATA: {
|
||||
AidlEvent::EventPayload::MetaData meta;
|
||||
meta.what = (Event::EventPayload::MetaData::MetaDataEventType)hidlEvent.u.meta.what;
|
||||
aidlEvent->payload.set<Event::EventPayload::meta>(meta);
|
||||
break;
|
||||
}
|
||||
case V2_1SensorType::ACCELEROMETER:
|
||||
case V2_1SensorType::MAGNETIC_FIELD:
|
||||
case V2_1SensorType::ORIENTATION:
|
||||
case V2_1SensorType::GYROSCOPE:
|
||||
case V2_1SensorType::GRAVITY:
|
||||
case V2_1SensorType::LINEAR_ACCELERATION: {
|
||||
AidlEvent::EventPayload::Vec3 vec3;
|
||||
vec3.x = hidlEvent.u.vec3.x;
|
||||
vec3.y = hidlEvent.u.vec3.y;
|
||||
vec3.z = hidlEvent.u.vec3.z;
|
||||
aidlEvent->payload.set<Event::EventPayload::vec3>(vec3);
|
||||
break;
|
||||
}
|
||||
case V2_1SensorType::GAME_ROTATION_VECTOR: {
|
||||
AidlEvent::EventPayload::Vec4 vec4;
|
||||
vec4.x = hidlEvent.u.vec4.x;
|
||||
vec4.y = hidlEvent.u.vec4.y;
|
||||
vec4.z = hidlEvent.u.vec4.z;
|
||||
vec4.w = hidlEvent.u.vec4.w;
|
||||
aidlEvent->payload.set<Event::EventPayload::vec4>(vec4);
|
||||
break;
|
||||
}
|
||||
case V2_1SensorType::ROTATION_VECTOR:
|
||||
case V2_1SensorType::GEOMAGNETIC_ROTATION_VECTOR: {
|
||||
AidlEvent::EventPayload::Data data;
|
||||
std::copy(hidlEvent.u.data.data(), hidlEvent.u.data.data() + 5,
|
||||
std::begin(data.values));
|
||||
aidlEvent->payload.set<Event::EventPayload::data>(data);
|
||||
break;
|
||||
}
|
||||
case V2_1SensorType::MAGNETIC_FIELD_UNCALIBRATED:
|
||||
case V2_1SensorType::GYROSCOPE_UNCALIBRATED:
|
||||
case V2_1SensorType::ACCELEROMETER_UNCALIBRATED: {
|
||||
AidlEvent::EventPayload::Uncal uncal;
|
||||
uncal.x = hidlEvent.u.uncal.x;
|
||||
uncal.y = hidlEvent.u.uncal.y;
|
||||
uncal.z = hidlEvent.u.uncal.z;
|
||||
uncal.xBias = hidlEvent.u.uncal.x_bias;
|
||||
uncal.yBias = hidlEvent.u.uncal.y_bias;
|
||||
uncal.zBias = hidlEvent.u.uncal.z_bias;
|
||||
aidlEvent->payload.set<Event::EventPayload::uncal>(uncal);
|
||||
break;
|
||||
}
|
||||
case V2_1SensorType::DEVICE_ORIENTATION:
|
||||
case V2_1SensorType::LIGHT:
|
||||
case V2_1SensorType::PRESSURE:
|
||||
case V2_1SensorType::PROXIMITY:
|
||||
case V2_1SensorType::RELATIVE_HUMIDITY:
|
||||
case V2_1SensorType::AMBIENT_TEMPERATURE:
|
||||
case V2_1SensorType::SIGNIFICANT_MOTION:
|
||||
case V2_1SensorType::STEP_DETECTOR:
|
||||
case V2_1SensorType::TILT_DETECTOR:
|
||||
case V2_1SensorType::WAKE_GESTURE:
|
||||
case V2_1SensorType::GLANCE_GESTURE:
|
||||
case V2_1SensorType::PICK_UP_GESTURE:
|
||||
case V2_1SensorType::WRIST_TILT_GESTURE:
|
||||
case V2_1SensorType::STATIONARY_DETECT:
|
||||
case V2_1SensorType::MOTION_DETECT:
|
||||
case V2_1SensorType::HEART_BEAT:
|
||||
case V2_1SensorType::LOW_LATENCY_OFFBODY_DETECT:
|
||||
case V2_1SensorType::HINGE_ANGLE:
|
||||
aidlEvent->payload.set<Event::EventPayload::scalar>(hidlEvent.u.scalar);
|
||||
break;
|
||||
case V2_1SensorType::STEP_COUNTER:
|
||||
aidlEvent->payload.set<Event::EventPayload::stepCount>(hidlEvent.u.stepCount);
|
||||
break;
|
||||
case V2_1SensorType::HEART_RATE: {
|
||||
AidlEvent::EventPayload::HeartRate heartRate;
|
||||
heartRate.bpm = hidlEvent.u.heartRate.bpm;
|
||||
heartRate.status = (SensorStatus)hidlEvent.u.heartRate.status;
|
||||
aidlEvent->payload.set<Event::EventPayload::heartRate>(heartRate);
|
||||
break;
|
||||
}
|
||||
case V2_1SensorType::POSE_6DOF: {
|
||||
AidlEvent::EventPayload::Pose6Dof pose6Dof;
|
||||
std::copy(hidlEvent.u.pose6DOF.data(),
|
||||
hidlEvent.u.pose6DOF.data() + hidlEvent.u.pose6DOF.size(),
|
||||
std::begin(pose6Dof.values));
|
||||
aidlEvent->payload.set<Event::EventPayload::pose6DOF>(pose6Dof);
|
||||
break;
|
||||
}
|
||||
case V2_1SensorType::DYNAMIC_SENSOR_META: {
|
||||
DynamicSensorInfo dynamicSensorInfo;
|
||||
dynamicSensorInfo.connected = hidlEvent.u.dynamic.connected;
|
||||
dynamicSensorInfo.sensorHandle = hidlEvent.u.dynamic.sensorHandle;
|
||||
std::copy(hidlEvent.u.dynamic.uuid.data(),
|
||||
hidlEvent.u.dynamic.uuid.data() + hidlEvent.u.dynamic.uuid.size(),
|
||||
std::begin(dynamicSensorInfo.uuid.values));
|
||||
aidlEvent->payload.set<Event::EventPayload::dynamic>(dynamicSensorInfo);
|
||||
break;
|
||||
}
|
||||
case V2_1SensorType::ADDITIONAL_INFO: {
|
||||
AdditionalInfo additionalInfo;
|
||||
additionalInfo.type = (AdditionalInfo::AdditionalInfoType)hidlEvent.u.additional.type;
|
||||
additionalInfo.serial = hidlEvent.u.additional.serial;
|
||||
|
||||
AdditionalInfo::AdditionalInfoPayload::Int32Values int32Values;
|
||||
std::copy(hidlEvent.u.additional.u.data_int32.data(),
|
||||
hidlEvent.u.additional.u.data_int32.data() +
|
||||
hidlEvent.u.additional.u.data_int32.size(),
|
||||
std::begin(int32Values.values));
|
||||
additionalInfo.payload.set<AdditionalInfo::AdditionalInfoPayload::dataInt32>(
|
||||
int32Values);
|
||||
aidlEvent->payload.set<Event::EventPayload::additional>(additionalInfo);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
CHECK_GE((int32_t)hidlEvent.sensorType, (int32_t)V2_1SensorType::DEVICE_PRIVATE_BASE);
|
||||
AidlEvent::EventPayload::Data data;
|
||||
std::copy(hidlEvent.u.data.data(), hidlEvent.u.data.data() + hidlEvent.u.data.size(),
|
||||
std::begin(data.values));
|
||||
aidlEvent->payload.set<Event::EventPayload::data>(data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace implementation
|
||||
} // namespace sensors
|
||||
} // namespace hardware
|
||||
} // namespace android
|
||||
} // namespace aidl
|
||||
@@ -16,7 +16,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <android-base/logging.h>
|
||||
#include <aidl/android/hardware/sensors/BnSensors.h>
|
||||
#include <android/hardware/sensors/2.1/types.h>
|
||||
|
||||
namespace aidl {
|
||||
namespace android {
|
||||
@@ -24,396 +25,23 @@ namespace hardware {
|
||||
namespace sensors {
|
||||
namespace implementation {
|
||||
|
||||
static ::aidl::android::hardware::sensors::SensorInfo convertSensorInfo(
|
||||
const ::android::hardware::sensors::V2_1::SensorInfo& sensorInfo) {
|
||||
::aidl::android::hardware::sensors::SensorInfo aidlSensorInfo;
|
||||
aidlSensorInfo.sensorHandle = sensorInfo.sensorHandle;
|
||||
aidlSensorInfo.name = sensorInfo.name;
|
||||
aidlSensorInfo.vendor = sensorInfo.vendor;
|
||||
aidlSensorInfo.version = sensorInfo.version;
|
||||
aidlSensorInfo.type = (::aidl::android::hardware::sensors::SensorType)sensorInfo.type;
|
||||
aidlSensorInfo.typeAsString = sensorInfo.typeAsString;
|
||||
aidlSensorInfo.maxRange = sensorInfo.maxRange;
|
||||
aidlSensorInfo.resolution = sensorInfo.resolution;
|
||||
aidlSensorInfo.power = sensorInfo.power;
|
||||
aidlSensorInfo.minDelayUs = sensorInfo.minDelay;
|
||||
aidlSensorInfo.fifoReservedEventCount = sensorInfo.fifoReservedEventCount;
|
||||
aidlSensorInfo.fifoMaxEventCount = sensorInfo.fifoMaxEventCount;
|
||||
aidlSensorInfo.requiredPermission = sensorInfo.requiredPermission;
|
||||
aidlSensorInfo.maxDelayUs = sensorInfo.maxDelay;
|
||||
aidlSensorInfo.flags = sensorInfo.flags;
|
||||
return aidlSensorInfo;
|
||||
}
|
||||
/**
|
||||
* Generates an AIDL SensorInfo instance from the passed HIDL V2.1 SensorInfo instance.
|
||||
*/
|
||||
::aidl::android::hardware::sensors::SensorInfo convertSensorInfo(
|
||||
const ::android::hardware::sensors::V2_1::SensorInfo& sensorInfo);
|
||||
|
||||
static void convertToHidlEvent(const ::aidl::android::hardware::sensors::Event& aidlEvent,
|
||||
::android::hardware::sensors::V2_1::Event* hidlEvent) {
|
||||
hidlEvent->timestamp = aidlEvent.timestamp;
|
||||
hidlEvent->sensorHandle = aidlEvent.sensorHandle;
|
||||
hidlEvent->sensorType = (::android::hardware::sensors::V2_1::SensorType)aidlEvent.sensorType;
|
||||
/**
|
||||
* Populates a HIDL V2.1 Event instance based on an AIDL Event instance.
|
||||
*/
|
||||
void convertToHidlEvent(const ::aidl::android::hardware::sensors::Event& aidlEvent,
|
||||
::android::hardware::sensors::V2_1::Event* hidlEvent);
|
||||
|
||||
switch (aidlEvent.sensorType) {
|
||||
case ::aidl::android::hardware::sensors::SensorType::META_DATA:
|
||||
hidlEvent->u.meta.what =
|
||||
(::android::hardware::sensors::V1_0::MetaDataEventType)aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::EventPayload::meta>()
|
||||
.what;
|
||||
break;
|
||||
case ::aidl::android::hardware::sensors::SensorType::ACCELEROMETER:
|
||||
case ::aidl::android::hardware::sensors::SensorType::MAGNETIC_FIELD:
|
||||
case ::aidl::android::hardware::sensors::SensorType::ORIENTATION:
|
||||
case ::aidl::android::hardware::sensors::SensorType::GYROSCOPE:
|
||||
case ::aidl::android::hardware::sensors::SensorType::GRAVITY:
|
||||
case ::aidl::android::hardware::sensors::SensorType::LINEAR_ACCELERATION:
|
||||
hidlEvent->u.vec3.x =
|
||||
aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::EventPayload::vec3>()
|
||||
.x;
|
||||
hidlEvent->u.vec3.y =
|
||||
aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::EventPayload::vec3>()
|
||||
.y;
|
||||
hidlEvent->u.vec3.z =
|
||||
aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::EventPayload::vec3>()
|
||||
.z;
|
||||
break;
|
||||
case ::aidl::android::hardware::sensors::SensorType::GAME_ROTATION_VECTOR:
|
||||
hidlEvent->u.vec4.x =
|
||||
aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::EventPayload::vec4>()
|
||||
.x;
|
||||
hidlEvent->u.vec4.y =
|
||||
aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::EventPayload::vec4>()
|
||||
.y;
|
||||
hidlEvent->u.vec4.z =
|
||||
aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::EventPayload::vec4>()
|
||||
.z;
|
||||
hidlEvent->u.vec4.w =
|
||||
aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::EventPayload::vec4>()
|
||||
.w;
|
||||
break;
|
||||
case ::aidl::android::hardware::sensors::SensorType::ROTATION_VECTOR:
|
||||
case ::aidl::android::hardware::sensors::SensorType::GEOMAGNETIC_ROTATION_VECTOR:
|
||||
std::copy(aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::EventPayload::data>()
|
||||
.values.data(),
|
||||
aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::EventPayload::
|
||||
data>()
|
||||
.values.data() +
|
||||
5,
|
||||
hidlEvent->u.data.data());
|
||||
break;
|
||||
case ::aidl::android::hardware::sensors::SensorType::ACCELEROMETER_UNCALIBRATED:
|
||||
case ::aidl::android::hardware::sensors::SensorType::MAGNETIC_FIELD_UNCALIBRATED:
|
||||
case ::aidl::android::hardware::sensors::SensorType::GYROSCOPE_UNCALIBRATED:
|
||||
hidlEvent->u.uncal.x =
|
||||
aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::EventPayload::uncal>()
|
||||
.x;
|
||||
hidlEvent->u.uncal.y =
|
||||
aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::EventPayload::uncal>()
|
||||
.y;
|
||||
hidlEvent->u.uncal.z =
|
||||
aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::EventPayload::uncal>()
|
||||
.z;
|
||||
hidlEvent->u.uncal.x_bias =
|
||||
aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::EventPayload::uncal>()
|
||||
.xBias;
|
||||
hidlEvent->u.uncal.y_bias =
|
||||
aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::EventPayload::uncal>()
|
||||
.yBias;
|
||||
hidlEvent->u.uncal.z_bias =
|
||||
aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::EventPayload::uncal>()
|
||||
.zBias;
|
||||
break;
|
||||
case ::aidl::android::hardware::sensors::SensorType::DEVICE_ORIENTATION:
|
||||
case ::aidl::android::hardware::sensors::SensorType::LIGHT:
|
||||
case ::aidl::android::hardware::sensors::SensorType::PRESSURE:
|
||||
case ::aidl::android::hardware::sensors::SensorType::PROXIMITY:
|
||||
case ::aidl::android::hardware::sensors::SensorType::RELATIVE_HUMIDITY:
|
||||
case ::aidl::android::hardware::sensors::SensorType::AMBIENT_TEMPERATURE:
|
||||
case ::aidl::android::hardware::sensors::SensorType::SIGNIFICANT_MOTION:
|
||||
case ::aidl::android::hardware::sensors::SensorType::STEP_DETECTOR:
|
||||
case ::aidl::android::hardware::sensors::SensorType::TILT_DETECTOR:
|
||||
case ::aidl::android::hardware::sensors::SensorType::WAKE_GESTURE:
|
||||
case ::aidl::android::hardware::sensors::SensorType::GLANCE_GESTURE:
|
||||
case ::aidl::android::hardware::sensors::SensorType::PICK_UP_GESTURE:
|
||||
case ::aidl::android::hardware::sensors::SensorType::WRIST_TILT_GESTURE:
|
||||
case ::aidl::android::hardware::sensors::SensorType::STATIONARY_DETECT:
|
||||
case ::aidl::android::hardware::sensors::SensorType::MOTION_DETECT:
|
||||
case ::aidl::android::hardware::sensors::SensorType::HEART_BEAT:
|
||||
case ::aidl::android::hardware::sensors::SensorType::LOW_LATENCY_OFFBODY_DETECT:
|
||||
case ::aidl::android::hardware::sensors::SensorType::HINGE_ANGLE:
|
||||
hidlEvent->u.scalar =
|
||||
aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::EventPayload::scalar>();
|
||||
break;
|
||||
case ::aidl::android::hardware::sensors::SensorType::STEP_COUNTER:
|
||||
hidlEvent->u.stepCount = aidlEvent.payload.get<
|
||||
::aidl::android::hardware::sensors::Event::EventPayload::stepCount>();
|
||||
break;
|
||||
case ::aidl::android::hardware::sensors::SensorType::HEART_RATE:
|
||||
hidlEvent->u.heartRate.bpm = aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::
|
||||
EventPayload::heartRate>()
|
||||
.bpm;
|
||||
hidlEvent->u.heartRate.status =
|
||||
(::android::hardware::sensors::V1_0::SensorStatus)aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::EventPayload::
|
||||
heartRate>()
|
||||
.status;
|
||||
break;
|
||||
case ::aidl::android::hardware::sensors::SensorType::POSE_6DOF:
|
||||
std::copy(std::begin(aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::
|
||||
EventPayload::pose6DOF>()
|
||||
.values),
|
||||
std::end(aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::
|
||||
EventPayload::data>()
|
||||
.values),
|
||||
hidlEvent->u.pose6DOF.data());
|
||||
break;
|
||||
case ::aidl::android::hardware::sensors::SensorType::DYNAMIC_SENSOR_META:
|
||||
hidlEvent->u.dynamic.connected =
|
||||
aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::EventPayload::dynamic>()
|
||||
.connected;
|
||||
hidlEvent->u.dynamic.sensorHandle =
|
||||
aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::EventPayload::dynamic>()
|
||||
.sensorHandle;
|
||||
std::copy(std::begin(aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::
|
||||
EventPayload::dynamic>()
|
||||
.uuid.values),
|
||||
std::end(aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::
|
||||
EventPayload::dynamic>()
|
||||
.uuid.values),
|
||||
hidlEvent->u.dynamic.uuid.data());
|
||||
break;
|
||||
case ::aidl::android::hardware::sensors::SensorType::ADDITIONAL_INFO: {
|
||||
const AdditionalInfo& additionalInfo = aidlEvent.payload.get<
|
||||
::aidl::android::hardware::sensors::Event::EventPayload::additional>();
|
||||
hidlEvent->u.additional.type =
|
||||
(::android::hardware::sensors::V1_0::AdditionalInfoType)additionalInfo.type;
|
||||
hidlEvent->u.additional.serial = additionalInfo.serial;
|
||||
|
||||
switch (additionalInfo.payload.getTag()) {
|
||||
case ::aidl::android::hardware::sensors::AdditionalInfo::AdditionalInfoPayload::
|
||||
Tag::dataInt32:
|
||||
std::copy(
|
||||
std::begin(additionalInfo.payload
|
||||
.get<::aidl::android::hardware::sensors::
|
||||
AdditionalInfo::AdditionalInfoPayload::
|
||||
dataInt32>()
|
||||
.values),
|
||||
std::end(additionalInfo.payload
|
||||
.get<::aidl::android::hardware::sensors::
|
||||
AdditionalInfo::AdditionalInfoPayload::
|
||||
dataInt32>()
|
||||
.values),
|
||||
hidlEvent->u.additional.u.data_int32.data());
|
||||
break;
|
||||
case ::aidl::android::hardware::sensors::AdditionalInfo::AdditionalInfoPayload::
|
||||
Tag::dataFloat:
|
||||
std::copy(
|
||||
std::begin(additionalInfo.payload
|
||||
.get<::aidl::android::hardware::sensors::
|
||||
AdditionalInfo::AdditionalInfoPayload::
|
||||
dataFloat>()
|
||||
.values),
|
||||
std::end(additionalInfo.payload
|
||||
.get<::aidl::android::hardware::sensors::
|
||||
AdditionalInfo::AdditionalInfoPayload::
|
||||
dataFloat>()
|
||||
.values),
|
||||
hidlEvent->u.additional.u.data_float.data());
|
||||
break;
|
||||
default:
|
||||
ALOGE("Invalid sensor additioanl info tag: %d",
|
||||
additionalInfo.payload.getTag());
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
CHECK_GE((int32_t)aidlEvent.sensorType,
|
||||
(int32_t)::aidl::android::hardware::sensors::SensorType::DEVICE_PRIVATE_BASE);
|
||||
std::copy(std::begin(aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::
|
||||
EventPayload::data>()
|
||||
.values),
|
||||
std::end(aidlEvent.payload
|
||||
.get<::aidl::android::hardware::sensors::Event::
|
||||
EventPayload::data>()
|
||||
.values),
|
||||
hidlEvent->u.data.data());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void convertToAidlEvent(const ::android::hardware::sensors::V2_1::Event& hidlEvent,
|
||||
::aidl::android::hardware::sensors::Event* aidlEvent) {
|
||||
aidlEvent->timestamp = hidlEvent.timestamp;
|
||||
aidlEvent->sensorHandle = hidlEvent.sensorHandle;
|
||||
aidlEvent->sensorType = (::aidl::android::hardware::sensors::SensorType)hidlEvent.sensorType;
|
||||
switch (hidlEvent.sensorType) {
|
||||
case ::android::hardware::sensors::V2_1::SensorType::META_DATA: {
|
||||
::aidl::android::hardware::sensors::Event::EventPayload::MetaData meta;
|
||||
meta.what = (::aidl::android::hardware::sensors::Event::EventPayload::MetaData::
|
||||
MetaDataEventType)hidlEvent.u.meta.what;
|
||||
aidlEvent->payload.set<::aidl::android::hardware::sensors::Event::EventPayload::meta>(
|
||||
meta);
|
||||
break;
|
||||
}
|
||||
case ::android::hardware::sensors::V2_1::SensorType::ACCELEROMETER:
|
||||
case ::android::hardware::sensors::V2_1::SensorType::MAGNETIC_FIELD:
|
||||
case ::android::hardware::sensors::V2_1::SensorType::ORIENTATION:
|
||||
case ::android::hardware::sensors::V2_1::SensorType::GYROSCOPE:
|
||||
case ::android::hardware::sensors::V2_1::SensorType::GRAVITY:
|
||||
case ::android::hardware::sensors::V2_1::SensorType::LINEAR_ACCELERATION: {
|
||||
::aidl::android::hardware::sensors::Event::EventPayload::Vec3 vec3;
|
||||
vec3.x = hidlEvent.u.vec3.x;
|
||||
vec3.y = hidlEvent.u.vec3.y;
|
||||
vec3.z = hidlEvent.u.vec3.z;
|
||||
aidlEvent->payload.set<::aidl::android::hardware::sensors::Event::EventPayload::vec3>(
|
||||
vec3);
|
||||
break;
|
||||
}
|
||||
case ::android::hardware::sensors::V2_1::SensorType::GAME_ROTATION_VECTOR: {
|
||||
::aidl::android::hardware::sensors::Event::EventPayload::Vec4 vec4;
|
||||
vec4.x = hidlEvent.u.vec4.x;
|
||||
vec4.y = hidlEvent.u.vec4.y;
|
||||
vec4.z = hidlEvent.u.vec4.z;
|
||||
vec4.w = hidlEvent.u.vec4.w;
|
||||
aidlEvent->payload.set<::aidl::android::hardware::sensors::Event::EventPayload::vec4>(
|
||||
vec4);
|
||||
break;
|
||||
}
|
||||
case ::android::hardware::sensors::V2_1::SensorType::ROTATION_VECTOR:
|
||||
case ::android::hardware::sensors::V2_1::SensorType::GEOMAGNETIC_ROTATION_VECTOR: {
|
||||
::aidl::android::hardware::sensors::Event::EventPayload::Data data;
|
||||
std::copy(hidlEvent.u.data.data(), hidlEvent.u.data.data() + 5,
|
||||
std::begin(data.values));
|
||||
aidlEvent->payload.set<::aidl::android::hardware::sensors::Event::EventPayload::data>(
|
||||
data);
|
||||
break;
|
||||
}
|
||||
case ::android::hardware::sensors::V2_1::SensorType::MAGNETIC_FIELD_UNCALIBRATED:
|
||||
case ::android::hardware::sensors::V2_1::SensorType::GYROSCOPE_UNCALIBRATED:
|
||||
case ::android::hardware::sensors::V2_1::SensorType::ACCELEROMETER_UNCALIBRATED: {
|
||||
::aidl::android::hardware::sensors::Event::EventPayload::Uncal uncal;
|
||||
uncal.x = hidlEvent.u.uncal.x;
|
||||
uncal.y = hidlEvent.u.uncal.y;
|
||||
uncal.z = hidlEvent.u.uncal.z;
|
||||
uncal.xBias = hidlEvent.u.uncal.x_bias;
|
||||
uncal.yBias = hidlEvent.u.uncal.y_bias;
|
||||
uncal.zBias = hidlEvent.u.uncal.z_bias;
|
||||
aidlEvent->payload.set<::aidl::android::hardware::sensors::Event::EventPayload::uncal>(
|
||||
uncal);
|
||||
break;
|
||||
}
|
||||
case ::android::hardware::sensors::V2_1::SensorType::DEVICE_ORIENTATION:
|
||||
case ::android::hardware::sensors::V2_1::SensorType::LIGHT:
|
||||
case ::android::hardware::sensors::V2_1::SensorType::PRESSURE:
|
||||
case ::android::hardware::sensors::V2_1::SensorType::PROXIMITY:
|
||||
case ::android::hardware::sensors::V2_1::SensorType::RELATIVE_HUMIDITY:
|
||||
case ::android::hardware::sensors::V2_1::SensorType::AMBIENT_TEMPERATURE:
|
||||
case ::android::hardware::sensors::V2_1::SensorType::SIGNIFICANT_MOTION:
|
||||
case ::android::hardware::sensors::V2_1::SensorType::STEP_DETECTOR:
|
||||
case ::android::hardware::sensors::V2_1::SensorType::TILT_DETECTOR:
|
||||
case ::android::hardware::sensors::V2_1::SensorType::WAKE_GESTURE:
|
||||
case ::android::hardware::sensors::V2_1::SensorType::GLANCE_GESTURE:
|
||||
case ::android::hardware::sensors::V2_1::SensorType::PICK_UP_GESTURE:
|
||||
case ::android::hardware::sensors::V2_1::SensorType::WRIST_TILT_GESTURE:
|
||||
case ::android::hardware::sensors::V2_1::SensorType::STATIONARY_DETECT:
|
||||
case ::android::hardware::sensors::V2_1::SensorType::MOTION_DETECT:
|
||||
case ::android::hardware::sensors::V2_1::SensorType::HEART_BEAT:
|
||||
case ::android::hardware::sensors::V2_1::SensorType::LOW_LATENCY_OFFBODY_DETECT:
|
||||
case ::android::hardware::sensors::V2_1::SensorType::HINGE_ANGLE:
|
||||
aidlEvent->payload.set<::aidl::android::hardware::sensors::Event::EventPayload::scalar>(
|
||||
hidlEvent.u.scalar);
|
||||
break;
|
||||
case ::android::hardware::sensors::V2_1::SensorType::STEP_COUNTER:
|
||||
aidlEvent->payload
|
||||
.set<::aidl::android::hardware::sensors::Event::EventPayload::stepCount>(
|
||||
hidlEvent.u.stepCount);
|
||||
break;
|
||||
case ::android::hardware::sensors::V2_1::SensorType::HEART_RATE: {
|
||||
::aidl::android::hardware::sensors::Event::EventPayload::HeartRate heartRate;
|
||||
heartRate.bpm = hidlEvent.u.heartRate.bpm;
|
||||
heartRate.status =
|
||||
(::aidl::android::hardware::sensors::SensorStatus)hidlEvent.u.heartRate.status;
|
||||
aidlEvent->payload
|
||||
.set<::aidl::android::hardware::sensors::Event::EventPayload::heartRate>(
|
||||
heartRate);
|
||||
break;
|
||||
}
|
||||
case ::android::hardware::sensors::V2_1::SensorType::POSE_6DOF: {
|
||||
::aidl::android::hardware::sensors::Event::EventPayload::Pose6Dof pose6Dof;
|
||||
std::copy(hidlEvent.u.pose6DOF.data(),
|
||||
hidlEvent.u.pose6DOF.data() + hidlEvent.u.pose6DOF.size(),
|
||||
std::begin(pose6Dof.values));
|
||||
aidlEvent->payload
|
||||
.set<::aidl::android::hardware::sensors::Event::EventPayload::pose6DOF>(
|
||||
pose6Dof);
|
||||
break;
|
||||
}
|
||||
case ::android::hardware::sensors::V2_1::SensorType::DYNAMIC_SENSOR_META: {
|
||||
::aidl::android::hardware::sensors::DynamicSensorInfo dynamicSensorInfo;
|
||||
dynamicSensorInfo.connected = hidlEvent.u.dynamic.connected;
|
||||
dynamicSensorInfo.sensorHandle = hidlEvent.u.dynamic.sensorHandle;
|
||||
std::copy(hidlEvent.u.dynamic.uuid.data(),
|
||||
hidlEvent.u.dynamic.uuid.data() + hidlEvent.u.dynamic.uuid.size(),
|
||||
std::begin(dynamicSensorInfo.uuid.values));
|
||||
aidlEvent->payload
|
||||
.set<::aidl::android::hardware::sensors::Event::EventPayload::dynamic>(
|
||||
dynamicSensorInfo);
|
||||
break;
|
||||
}
|
||||
case ::android::hardware::sensors::V2_1::SensorType::ADDITIONAL_INFO: {
|
||||
::aidl::android::hardware::sensors::AdditionalInfo additionalInfo;
|
||||
additionalInfo.type =
|
||||
(::aidl::android::hardware::sensors::AdditionalInfo::AdditionalInfoType)
|
||||
hidlEvent.u.additional.type;
|
||||
additionalInfo.serial = hidlEvent.u.additional.serial;
|
||||
|
||||
::aidl::android::hardware::sensors::AdditionalInfo::AdditionalInfoPayload::Int32Values
|
||||
int32Values;
|
||||
std::copy(hidlEvent.u.additional.u.data_int32.data(),
|
||||
hidlEvent.u.additional.u.data_int32.data() +
|
||||
hidlEvent.u.additional.u.data_int32.size(),
|
||||
std::begin(int32Values.values));
|
||||
additionalInfo.payload.set<::aidl::android::hardware::sensors::AdditionalInfo::
|
||||
AdditionalInfoPayload::dataInt32>(int32Values);
|
||||
aidlEvent->payload
|
||||
.set<::aidl::android::hardware::sensors::Event::EventPayload::additional>(
|
||||
additionalInfo);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
CHECK_GE((int32_t)hidlEvent.sensorType,
|
||||
(int32_t)::android::hardware::sensors::V2_1::SensorType::DEVICE_PRIVATE_BASE);
|
||||
::aidl::android::hardware::sensors::Event::EventPayload::Data data;
|
||||
std::copy(hidlEvent.u.data.data(), hidlEvent.u.data.data() + hidlEvent.u.data.size(),
|
||||
std::begin(data.values));
|
||||
aidlEvent->payload.set<::aidl::android::hardware::sensors::Event::EventPayload::data>(
|
||||
data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Populates an AIDL Event instance based on a HIDL V2.1 Event instance.
|
||||
*/
|
||||
void convertToAidlEvent(const ::android::hardware::sensors::V2_1::Event& hidlEvent,
|
||||
::aidl::android::hardware::sensors::Event* aidlEvent);
|
||||
|
||||
} // namespace implementation
|
||||
} // namespace sensors
|
||||
|
||||
Reference in New Issue
Block a user