Merge "CSD: Adjust code to new MelCallback interface" into main
diff --git a/TEST_MAPPING b/TEST_MAPPING
index 25246d8..92cafbd 100644
--- a/TEST_MAPPING
+++ b/TEST_MAPPING
@@ -11,6 +11,9 @@
},
{
"name": "VtsHalTvInputV1_0TargetTest"
+ },
+ {
+ "name": "CtsStrictJavaPackagesTestCases"
}
],
"auto-presubmit": [
diff --git a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/IEffect.aidl b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/IEffect.aidl
index 8c196e7..a1b00be 100644
--- a/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/IEffect.aidl
+++ b/audio/aidl/aidl_api/android.hardware.audio.effect/current/android/hardware/audio/effect/IEffect.aidl
@@ -41,6 +41,7 @@
android.hardware.audio.effect.State getState();
void setParameter(in android.hardware.audio.effect.Parameter param);
android.hardware.audio.effect.Parameter getParameter(in android.hardware.audio.effect.Parameter.Id paramId);
+ android.hardware.audio.effect.IEffect.OpenEffectReturn reopen();
@FixedSize @VintfStability
parcelable Status {
int status;
diff --git a/audio/aidl/android/hardware/audio/effect/IEffect.aidl b/audio/aidl/android/hardware/audio/effect/IEffect.aidl
index 6097f34..266adec 100644
--- a/audio/aidl/android/hardware/audio/effect/IEffect.aidl
+++ b/audio/aidl/android/hardware/audio/effect/IEffect.aidl
@@ -54,7 +54,16 @@
}
/**
- * Return data structure of IEffect.open() interface.
+ * Return data structure of the IEffect.open() and IEffect.reopen() method.
+ *
+ * Contains Fast Message Queues (FMQs) for effect processing status and input/output data.
+ * The status FMQ remains valid and unchanged after opening, while input/output data FMQs can be
+ * modified with changes in input/output AudioConfig. If reallocation of data FMQ is necessary,
+ * the effect instance must release the existing data FMQs to signal the need to the audio
+ * framework.
+ * When the audio framework encounters a valid status FMQ and invalid input/output data FMQs,
+ * it must invoke the IEffect.reopen() method to request the effect instance to reallocate
+ * the FMQ and return to the audio framework.
*/
@VintfStability
parcelable OpenEffectReturn {
@@ -97,7 +106,7 @@
* client responsibility to make sure all parameter/buffer is correct if client wants to reopen
* a closed instance.
*
- * Effect instance close interface should always succeed unless:
+ * Effect instance close method should always succeed unless:
* 1. The effect instance is not in a proper state to be closed, for example it's still in
* State::PROCESSING state.
* 2. There is system/hardware related failure when close.
@@ -154,8 +163,8 @@
/**
* Get a parameter from the effect instance with parameter ID.
*
- * This interface must return the current parameter of the effect instance, if no parameter
- * has been set by client yet, the default value must be returned.
+ * This method must return the current parameter of the effect instance, if no parameter has
+ * been set by client yet, the default value must be returned.
*
* Must be available for the effect instance after open().
*
@@ -165,4 +174,24 @@
* @throws EX_ILLEGAL_ARGUMENT if the effect instance receive unsupported parameter tag.
*/
Parameter getParameter(in Parameter.Id paramId);
+
+ /**
+ * Reopen the effect instance, keeping all previous parameters unchanged, and reallocate only
+ * the Fast Message Queues (FMQs) allocated during the open time as needed.
+ *
+ * When the audio framework encounters a valid status FMQ and invalid data FMQ(s), it calls
+ * this method to reopen the effect and request the latest data FMQ.
+ * Upon receiving this call, if the effect instance's data FMQ(s) is invalid, it must reallocate
+ * the necessary data FMQ(s) and return them to the audio framework. All previous parameters and
+ * states keep unchanged.
+ * Once the audio framework successfully completes the call, it must validate the returned FMQs,
+ * deprecate all old FMQs, and exclusively use the FMQs returned from this method.
+ *
+ * @return The reallocated data FMQ and the original status FMQ.
+ *
+ * @throws EX_ILLEGAL_STATE if the effect instance is not in a proper state to reallocate FMQ.
+ * This may occur if the effect instance has already been closed or if there is no need to
+ * update any data FMQ.
+ */
+ OpenEffectReturn reopen();
}
diff --git a/audio/aidl/android/hardware/audio/effect/Spatializer.aidl b/audio/aidl/android/hardware/audio/effect/Spatializer.aidl
index 6ebe0d5..71e3ffe 100644
--- a/audio/aidl/android/hardware/audio/effect/Spatializer.aidl
+++ b/audio/aidl/android/hardware/audio/effect/Spatializer.aidl
@@ -67,7 +67,8 @@
Spatialization.Mode spatializationMode;
/**
- * Head tracking sensor ID.
+ * Identifies the head tracking sensor using its unique sensor ID.
+ * The value corresponds to android.hardware.sensors.SensorInfo.sensorHandle.
*/
int headTrackingSensorId;
diff --git a/audio/aidl/android/hardware/audio/effect/state.gv b/audio/aidl/android/hardware/audio/effect/state.gv
index ce369ba..22c70c8 100644
--- a/audio/aidl/android/hardware/audio/effect/state.gv
+++ b/audio/aidl/android/hardware/audio/effect/state.gv
@@ -31,6 +31,8 @@
IDLE -> INIT[label = "IEffect.close()"];
INIT -> INIT[label = "IEffect.getState\nIEffect.getDescriptor"];
- IDLE -> IDLE[label = "IEffect.getParameter\nIEffect.setParameter\nIEffect.getDescriptor\nIEffect.command(RESET)"];
- PROCESSING -> PROCESSING[label = "IEffect.getParameter\nIEffect.setParameter\nIEffect.getDescriptor"];
+ IDLE -> IDLE[label = "IEffect.getParameter\nIEffect.setParameter\nIEffect.getDescriptor\nIEffect.command(RESET)\nIEffect.reopen"];
+ PROCESSING
+ -> PROCESSING
+ [label = "IEffect.getParameter\nIEffect.setParameter\nIEffect.getDescriptor\nIEffect.reopen"];
}
diff --git a/audio/aidl/default/EffectImpl.cpp b/audio/aidl/default/EffectImpl.cpp
index c81c731..3c12f83 100644
--- a/audio/aidl/default/EffectImpl.cpp
+++ b/audio/aidl/default/EffectImpl.cpp
@@ -60,6 +60,16 @@
return ndk::ScopedAStatus::ok();
}
+ndk::ScopedAStatus EffectImpl::reopen(OpenEffectReturn* ret) {
+ RETURN_IF(mState == State::INIT, EX_ILLEGAL_STATE, "alreadyClosed");
+
+ // TODO: b/302036943 add reopen implementation
+ auto context = getContext();
+ RETURN_IF(!context, EX_NULL_POINTER, "nullContext");
+ context->dupeFmq(ret);
+ return ndk::ScopedAStatus::ok();
+}
+
ndk::ScopedAStatus EffectImpl::close() {
RETURN_OK_IF(mState == State::INIT);
RETURN_IF(mState == State::PROCESSING, EX_ILLEGAL_STATE, "closeAtProcessing");
diff --git a/audio/aidl/default/include/core-impl/StreamPrimary.h b/audio/aidl/default/include/core-impl/StreamPrimary.h
index 145c3c4..8d5c57d 100644
--- a/audio/aidl/default/include/core-impl/StreamPrimary.h
+++ b/audio/aidl/default/include/core-impl/StreamPrimary.h
@@ -36,7 +36,7 @@
std::vector<alsa::DeviceProfile> getDeviceProfiles() override;
const bool mIsAsynchronous;
- long mStartTimeNs = 0;
+ int64_t mStartTimeNs = 0;
long mFramesSinceStart = 0;
bool mSkipNextTransfer = false;
};
diff --git a/audio/aidl/default/include/core-impl/StreamRemoteSubmix.h b/audio/aidl/default/include/core-impl/StreamRemoteSubmix.h
index cc06881..477c30e 100644
--- a/audio/aidl/default/include/core-impl/StreamRemoteSubmix.h
+++ b/audio/aidl/default/include/core-impl/StreamRemoteSubmix.h
@@ -64,7 +64,7 @@
// 5ms between two read attempts when pipe is empty
static constexpr int kReadAttemptSleepUs = 5000;
- long mStartTimeNs = 0;
+ int64_t mStartTimeNs = 0;
long mFramesSinceStart = 0;
int mReadErrorCount = 0;
};
diff --git a/audio/aidl/default/include/effect-impl/EffectImpl.h b/audio/aidl/default/include/effect-impl/EffectImpl.h
index e7d081f..242a268 100644
--- a/audio/aidl/default/include/effect-impl/EffectImpl.h
+++ b/audio/aidl/default/include/effect-impl/EffectImpl.h
@@ -43,6 +43,7 @@
OpenEffectReturn* ret) override;
virtual ndk::ScopedAStatus close() override;
virtual ndk::ScopedAStatus command(CommandId id) override;
+ virtual ndk::ScopedAStatus reopen(OpenEffectReturn* ret) override;
virtual ndk::ScopedAStatus getState(State* state) override;
virtual ndk::ScopedAStatus setParameter(const Parameter& param) override;
diff --git a/audio/aidl/default/r_submix/StreamRemoteSubmix.cpp b/audio/aidl/default/r_submix/StreamRemoteSubmix.cpp
index df706ac..3ee354b 100644
--- a/audio/aidl/default/r_submix/StreamRemoteSubmix.cpp
+++ b/audio/aidl/default/r_submix/StreamRemoteSubmix.cpp
@@ -138,7 +138,7 @@
: outWrite(buffer, frameCount, actualFrameCount));
const long bufferDurationUs =
(*actualFrameCount) * MICROS_PER_SECOND / mContext.getSampleRate();
- const long totalDurationUs = (::android::uptimeNanos() - mStartTimeNs) / NANOS_PER_MICROSECOND;
+ const auto totalDurationUs = (::android::uptimeNanos() - mStartTimeNs) / NANOS_PER_MICROSECOND;
mFramesSinceStart += *actualFrameCount;
const long totalOffsetUs =
mFramesSinceStart * MICROS_PER_SECOND / mContext.getSampleRate() - totalDurationUs;
@@ -274,8 +274,8 @@
char* buff = (char*)buffer;
size_t actuallyRead = 0;
long remainingFrames = frameCount;
- const long deadlineTimeNs = ::android::uptimeNanos() +
- getDelayInUsForFrameCount(frameCount) * NANOS_PER_MICROSECOND;
+ const int64_t deadlineTimeNs = ::android::uptimeNanos() +
+ getDelayInUsForFrameCount(frameCount) * NANOS_PER_MICROSECOND;
while (remainingFrames > 0) {
ssize_t framesRead = source->read(buff, remainingFrames);
LOG(VERBOSE) << __func__ << ": frames read " << framesRead;
diff --git a/audio/aidl/vts/VtsHalDownmixTargetTest.cpp b/audio/aidl/vts/VtsHalDownmixTargetTest.cpp
index 2272e92..b82bde1 100644
--- a/audio/aidl/vts/VtsHalDownmixTargetTest.cpp
+++ b/audio/aidl/vts/VtsHalDownmixTargetTest.cpp
@@ -32,6 +32,9 @@
using android::audio_utils::channels::ChannelMix;
using android::hardware::audio::common::testing::detail::TestExecutionTracer;
+// minimal HAL interface version to run downmix data path test
+constexpr int32_t kMinDataTestHalVersion = 2;
+
// Testing for enum values
static const std::vector<Downmix::Type> kTypeValues = {ndk::enum_range<Downmix::Type>().begin(),
ndk::enum_range<Downmix::Type>().end()};
@@ -228,6 +231,10 @@
void SetUp() override {
SetUpDownmix(mInputChannelLayout);
+ if (int32_t version;
+ mEffect->getInterfaceVersion(&version).isOk() && version < kMinDataTestHalVersion) {
+ GTEST_SKIP() << "Skipping the data test for version: " << version << "\n";
+ }
if (!isLayoutValid(mInputChannelLayout)) {
GTEST_SKIP() << "Layout not supported \n";
}
@@ -375,6 +382,10 @@
void SetUp() override {
SetUpDownmix(mInputChannelLayout);
+ if (int32_t version;
+ mEffect->getInterfaceVersion(&version).isOk() && version < kMinDataTestHalVersion) {
+ GTEST_SKIP() << "Skipping the data test for version: " << version << "\n";
+ }
if (!isLayoutValid(mInputChannelLayout)) {
GTEST_SKIP() << "Layout not supported \n";
}
@@ -418,7 +429,7 @@
[](const testing::TestParamInfo<DownmixParamTest::ParamType>& info) {
auto descriptor = std::get<PARAM_INSTANCE_NAME>(info.param).second;
std::string type = std::to_string(static_cast<int>(std::get<PARAM_TYPE>(info.param)));
- std::string name = getPrefix(descriptor) + "_type" + type;
+ std::string name = getPrefix(descriptor) + "_type_" + type;
std::replace_if(
name.begin(), name.end(), [](const char c) { return !std::isalnum(c); }, '_');
return name;
@@ -434,7 +445,7 @@
[](const testing::TestParamInfo<DownmixFoldDataTest::ParamType>& info) {
auto descriptor = std::get<FOLD_INSTANCE_NAME>(info.param).second;
std::string layout = std::to_string(std::get<FOLD_INPUT_LAYOUT>(info.param));
- std::string name = getPrefix(descriptor) + "_fold" + "_layout" + layout;
+ std::string name = getPrefix(descriptor) + "_fold_layout_" + layout;
std::replace_if(
name.begin(), name.end(), [](const char c) { return !std::isalnum(c); }, '_');
return name;
@@ -451,7 +462,7 @@
auto descriptor = std::get<STRIP_INSTANCE_NAME>(info.param).second;
std::string layout =
std::to_string(static_cast<int>(std::get<STRIP_INPUT_LAYOUT>(info.param)));
- std::string name = getPrefix(descriptor) + "_strip" + "_layout" + layout;
+ std::string name = getPrefix(descriptor) + "_strip_layout_" + layout;
std::replace_if(
name.begin(), name.end(), [](const char c) { return !std::isalnum(c); }, '_');
return name;
diff --git a/automotive/audiocontrol/aidl/default/Android.bp b/automotive/audiocontrol/aidl/default/Android.bp
index 435c2d6..a48d228 100644
--- a/automotive/audiocontrol/aidl/default/Android.bp
+++ b/automotive/audiocontrol/aidl/default/Android.bp
@@ -27,11 +27,13 @@
init_rc: ["audiocontrol-default.rc"],
vintf_fragments: ["audiocontrol-default.xml"],
vendor: true,
+ defaults: [
+ "latest_android_hardware_audio_common_ndk_shared",
+ "latest_android_hardware_automotive_audiocontrol_ndk_shared",
+ ],
shared_libs: [
"android.hardware.audio.common@7.0-enums",
- "android.hardware.audio.common-V1-ndk",
"android.frameworks.automotive.powerpolicy-V2-ndk",
- "android.hardware.automotive.audiocontrol-V3-ndk",
"libbase",
"libbinder_ndk",
"libcutils",
diff --git a/automotive/remoteaccess/aidl_api/android.hardware.automotive.remoteaccess/current/android/hardware/automotive/remoteaccess/ScheduleInfo.aidl b/automotive/remoteaccess/aidl_api/android.hardware.automotive.remoteaccess/current/android/hardware/automotive/remoteaccess/ScheduleInfo.aidl
index a5d81cf..ec8733a 100644
--- a/automotive/remoteaccess/aidl_api/android.hardware.automotive.remoteaccess/current/android/hardware/automotive/remoteaccess/ScheduleInfo.aidl
+++ b/automotive/remoteaccess/aidl_api/android.hardware.automotive.remoteaccess/current/android/hardware/automotive/remoteaccess/ScheduleInfo.aidl
@@ -41,4 +41,5 @@
int count;
long startTimeInEpochSeconds;
long periodicInSeconds;
+ const int MAX_TASK_DATA_SIZE_IN_BYTES = 10240;
}
diff --git a/automotive/remoteaccess/android/hardware/automotive/remoteaccess/IRemoteAccess.aidl b/automotive/remoteaccess/android/hardware/automotive/remoteaccess/IRemoteAccess.aidl
index 705cdbd..f0468c4 100644
--- a/automotive/remoteaccess/android/hardware/automotive/remoteaccess/IRemoteAccess.aidl
+++ b/automotive/remoteaccess/android/hardware/automotive/remoteaccess/IRemoteAccess.aidl
@@ -167,6 +167,9 @@
* {@code scheduleId} for this client exists.
*
* <p>Must return {@code EX_ILLEGAL_ARGUMENT} if the task type is not supported.
+ *
+ * <p>Must return {@code EX_ILLEGLA_ARGUMENT} if the scheduleInfo is not valid (e.g. count is
+ * a negative number).
*/
void scheduleTask(in ScheduleInfo scheduleInfo);
diff --git a/automotive/remoteaccess/android/hardware/automotive/remoteaccess/ScheduleInfo.aidl b/automotive/remoteaccess/android/hardware/automotive/remoteaccess/ScheduleInfo.aidl
index 40fba6f..4f2537c 100644
--- a/automotive/remoteaccess/android/hardware/automotive/remoteaccess/ScheduleInfo.aidl
+++ b/automotive/remoteaccess/android/hardware/automotive/remoteaccess/ScheduleInfo.aidl
@@ -21,6 +21,7 @@
@VintfStability
@JavaDerive(equals=true, toString=true)
parcelable ScheduleInfo {
+ const int MAX_TASK_DATA_SIZE_IN_BYTES = 10240;
/**
* The ID used to identify the client this schedule is for. This must be one of the
* preconfigured remote access serverless client ID defined in car service resource
@@ -41,6 +42,8 @@
* executed. It is not interpreted/parsed by the Android system.
*
* <p>This is only used for {@code TaskType.CUSTOM}.
+ *
+ * <p>The data size must be less than {@link MAX_TASK_DATA_SIZE_IN_BYTES}.
*/
byte[] taskData;
/**
diff --git a/automotive/remoteaccess/hal/default/src/RemoteAccessService.cpp b/automotive/remoteaccess/hal/default/src/RemoteAccessService.cpp
index 2a7f209..1b42a1f 100644
--- a/automotive/remoteaccess/hal/default/src/RemoteAccessService.cpp
+++ b/automotive/remoteaccess/hal/default/src/RemoteAccessService.cpp
@@ -331,6 +331,24 @@
ClientContext context;
ScheduleTaskRequest request = {};
ScheduleTaskResponse response = {};
+
+ if (scheduleInfo.count < 0) {
+ return ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT,
+ "count must be >= 0");
+ }
+ if (scheduleInfo.startTimeInEpochSeconds < 0) {
+ return ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT,
+ "startTimeInEpochSeconds must be >= 0");
+ }
+ if (scheduleInfo.periodicInSeconds < 0) {
+ return ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT,
+ "periodicInSeconds must be >= 0");
+ }
+ if (scheduleInfo.taskData.size() > scheduleInfo.MAX_TASK_DATA_SIZE_IN_BYTES) {
+ return ScopedAStatus::fromExceptionCodeWithMessage(EX_ILLEGAL_ARGUMENT,
+ "task data too big");
+ }
+
request.mutable_scheduleinfo()->set_clientid(scheduleInfo.clientId);
request.mutable_scheduleinfo()->set_scheduleid(scheduleInfo.scheduleId);
request.mutable_scheduleinfo()->set_data(scheduleInfo.taskData.data(),
@@ -348,7 +366,8 @@
case ErrorCode::OK:
return ScopedAStatus::ok();
case ErrorCode::INVALID_ARG:
- return ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
+ return ScopedAStatus::fromExceptionCodeWithMessage(
+ EX_ILLEGAL_ARGUMENT, "received invalid_arg from grpc server");
default:
// Should not happen.
return ScopedAStatus::fromServiceSpecificErrorWithMessage(
diff --git a/automotive/remoteaccess/hal/default/test/RemoteAccessServiceUnitTest.cpp b/automotive/remoteaccess/hal/default/test/RemoteAccessServiceUnitTest.cpp
index a46a983..7992a50 100644
--- a/automotive/remoteaccess/hal/default/test/RemoteAccessServiceUnitTest.cpp
+++ b/automotive/remoteaccess/hal/default/test/RemoteAccessServiceUnitTest.cpp
@@ -473,7 +473,71 @@
EXPECT_EQ(grpcRequest.scheduleinfo().periodicinseconds(), kTestPeriodicInSeconds);
}
-TEST_F(RemoteAccessServiceUnitTest, TestScheduleTask_InvalidArg) {
+TEST_F(RemoteAccessServiceUnitTest, TestScheduleTask_InvalidCount) {
+ ScheduleInfo scheduleInfo = {
+ .clientId = kTestClientId,
+ .scheduleId = kTestScheduleId,
+ .taskData = kTestData,
+ .count = -1,
+ .startTimeInEpochSeconds = kTestStartTimeInEpochSeconds,
+ .periodicInSeconds = kTestPeriodicInSeconds,
+ };
+
+ ScopedAStatus status = getService()->scheduleTask(scheduleInfo);
+
+ ASSERT_FALSE(status.isOk());
+ ASSERT_EQ(status.getExceptionCode(), EX_ILLEGAL_ARGUMENT);
+}
+
+TEST_F(RemoteAccessServiceUnitTest, TestScheduleTask_InvalidStartTimeInEpochSeconds) {
+ ScheduleInfo scheduleInfo = {
+ .clientId = kTestClientId,
+ .scheduleId = kTestScheduleId,
+ .taskData = kTestData,
+ .count = kTestCount,
+ .startTimeInEpochSeconds = -1,
+ .periodicInSeconds = kTestPeriodicInSeconds,
+ };
+
+ ScopedAStatus status = getService()->scheduleTask(scheduleInfo);
+
+ ASSERT_FALSE(status.isOk());
+ ASSERT_EQ(status.getExceptionCode(), EX_ILLEGAL_ARGUMENT);
+}
+
+TEST_F(RemoteAccessServiceUnitTest, TestScheduleTask_InvalidPeriodicInSeconds) {
+ ScheduleInfo scheduleInfo = {
+ .clientId = kTestClientId,
+ .scheduleId = kTestScheduleId,
+ .taskData = kTestData,
+ .count = kTestCount,
+ .startTimeInEpochSeconds = kTestStartTimeInEpochSeconds,
+ .periodicInSeconds = -1,
+ };
+
+ ScopedAStatus status = getService()->scheduleTask(scheduleInfo);
+
+ ASSERT_FALSE(status.isOk());
+ ASSERT_EQ(status.getExceptionCode(), EX_ILLEGAL_ARGUMENT);
+}
+
+TEST_F(RemoteAccessServiceUnitTest, TestScheduleTask_TaskDataTooLarge) {
+ ScheduleInfo scheduleInfo = {
+ .clientId = kTestClientId,
+ .scheduleId = kTestScheduleId,
+ .taskData = std::vector<uint8_t>(ScheduleInfo::MAX_TASK_DATA_SIZE_IN_BYTES + 1),
+ .count = kTestCount,
+ .startTimeInEpochSeconds = kTestStartTimeInEpochSeconds,
+ .periodicInSeconds = kTestPeriodicInSeconds,
+ };
+
+ ScopedAStatus status = getService()->scheduleTask(scheduleInfo);
+
+ ASSERT_FALSE(status.isOk());
+ ASSERT_EQ(status.getExceptionCode(), EX_ILLEGAL_ARGUMENT);
+}
+
+TEST_F(RemoteAccessServiceUnitTest, TestScheduleTask_InvalidArgFromGrpcServer) {
EXPECT_CALL(*getGrpcWakeupClientStub(), ScheduleTask)
.WillOnce([]([[maybe_unused]] ClientContext* context,
[[maybe_unused]] const ScheduleTaskRequest& request,
diff --git a/automotive/remoteaccess/test_grpc_server/impl/include/TestWakeupClientServiceImpl.h b/automotive/remoteaccess/test_grpc_server/impl/include/TestWakeupClientServiceImpl.h
index a7f47c2..41cc5d0 100644
--- a/automotive/remoteaccess/test_grpc_server/impl/include/TestWakeupClientServiceImpl.h
+++ b/automotive/remoteaccess/test_grpc_server/impl/include/TestWakeupClientServiceImpl.h
@@ -78,6 +78,7 @@
void waitForTask();
void stopWait();
bool isEmpty();
+ bool isStopped();
private:
friend class TaskTimeoutMessageHandler;
@@ -87,7 +88,7 @@
GUARDED_BY(mLock);
// A variable to notify mTasks is not empty.
std::condition_variable mTasksNotEmptyCv;
- std::atomic<bool> mStopped;
+ std::atomic<bool> mStopped = false;
android::sp<Looper> mLooper;
android::sp<TaskTimeoutMessageHandler> mTaskTimeoutMessageHandler;
std::atomic<int> mTaskIdCounter = 0;
@@ -214,7 +215,7 @@
std::atomic<bool> mRemoteTaskConnectionAlive = false;
std::mutex mLock;
bool mGeneratingFakeTask GUARDED_BY(mLock);
- std::atomic<bool> mServerStopped;
+ std::atomic<bool> mServerStopped = false;
std::unordered_map<std::string, std::unordered_map<std::string, ScheduleInfo>>
mInfoByScheduleIdByClientId GUARDED_BY(mLock);
diff --git a/automotive/remoteaccess/test_grpc_server/impl/src/TestWakeupClientServiceImpl.cpp b/automotive/remoteaccess/test_grpc_server/impl/src/TestWakeupClientServiceImpl.cpp
index d223353..eed3495 100644
--- a/automotive/remoteaccess/test_grpc_server/impl/src/TestWakeupClientServiceImpl.cpp
+++ b/automotive/remoteaccess/test_grpc_server/impl/src/TestWakeupClientServiceImpl.cpp
@@ -105,6 +105,10 @@
});
}
+bool TaskQueue::isStopped() {
+ return mStopped;
+}
+
void TaskQueue::stopWait() {
mStopped = true;
{
@@ -241,7 +245,7 @@
while (true) {
mTaskQueue->waitForTask();
- if (mServerStopped) {
+ if (mTaskQueue->isStopped()) {
// Server stopped, exit the loop.
printf("Server stopped exit loop\n");
break;
@@ -250,11 +254,13 @@
while (true) {
auto maybeTask = mTaskQueue->maybePopOne();
if (!maybeTask.has_value()) {
+ printf("no task left\n");
// No task left, loop again and wait for another task(s).
break;
}
// Loop through all the task in the queue but obtain lock for each element so we don't
// hold lock while writing the response.
+ printf("Sending one remote task\n");
const GetRemoteTasksResponse& response = maybeTask.value();
if (!writer->Write(response)) {
// Broken stream, maybe the client is shutting down.
diff --git a/automotive/vehicle/aidl/emu_metadata/android.hardware.automotive.vehicle-types-meta.json b/automotive/vehicle/aidl/emu_metadata/android.hardware.automotive.vehicle-types-meta.json
index e312a3a..6d856a8 100644
--- a/automotive/vehicle/aidl/emu_metadata/android.hardware.automotive.vehicle-types-meta.json
+++ b/automotive/vehicle/aidl/emu_metadata/android.hardware.automotive.vehicle-types-meta.json
@@ -1,34 +1,22 @@
[
{
- "name": "VehicleApPowerStateReqIndex",
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VehicleOilLevel",
"values": [
{
- "name": "STATE",
+ "name": "CRITICALLY_LOW",
"value": 0
},
{
- "name": "ADDITIONAL",
- "value": 1
- }
- ]
- },
- {
- "name": "EvChargeState",
- "values": [
- {
- "name": "UNKNOWN",
- "value": 0
- },
- {
- "name": "CHARGING",
+ "name": "LOW",
"value": 1
},
{
- "name": "FULLY_CHARGED",
+ "name": "NORMAL",
"value": 2
},
{
- "name": "NOT_CHARGING",
+ "name": "HIGH",
"value": 3
},
{
@@ -38,220 +26,123 @@
]
},
{
- "name": "TrailerState",
+ "package": "android.hardware.automotive.vehicle",
+ "name": "LocationCharacterization",
"values": [
{
- "name": "UNKNOWN",
- "value": 0
- },
- {
- "name": "NOT_PRESENT",
+ "name": "PRIOR_LOCATIONS",
"value": 1
},
{
- "name": "PRESENT",
+ "name": "GYROSCOPE_FUSION",
"value": 2
},
{
- "name": "ERROR",
- "value": 3
- }
- ]
- },
- {
- "name": "ProcessTerminationReason",
- "values": [
- {
- "name": "NOT_RESPONDING",
- "value": 1
- },
- {
- "name": "IO_OVERUSE",
- "value": 2
- },
- {
- "name": "MEMORY_OVERUSE",
- "value": 3
- }
- ]
- },
- {
- "name": "VehicleApPowerStateConfigFlag",
- "values": [
- {
- "name": "ENABLE_DEEP_SLEEP_FLAG",
- "value": 1
- },
- {
- "name": "CONFIG_SUPPORT_TIMER_POWER_ON_FLAG",
- "value": 2
- },
- {
- "name": "ENABLE_HIBERNATION_FLAG",
- "value": 3
- }
- ]
- },
- {
- "name": "Obd2FuelType",
- "values": [
- {
- "name": "NOT_AVAILABLE",
- "value": 0
- },
- {
- "name": "GASOLINE",
- "value": 1
- },
- {
- "name": "METHANOL",
- "value": 2
- },
- {
- "name": "ETHANOL",
- "value": 3
- },
- {
- "name": "DIESEL",
+ "name": "ACCELEROMETER_FUSION",
"value": 4
},
{
- "name": "LPG",
- "value": 5
- },
- {
- "name": "CNG",
- "value": 6
- },
- {
- "name": "PROPANE",
- "value": 7
- },
- {
- "name": "ELECTRIC",
+ "name": "COMPASS_FUSION",
"value": 8
},
{
- "name": "BIFUEL_RUNNING_GASOLINE",
- "value": 9
- },
- {
- "name": "BIFUEL_RUNNING_METHANOL",
- "value": 10
- },
- {
- "name": "BIFUEL_RUNNING_ETHANOL",
- "value": 11
- },
- {
- "name": "BIFUEL_RUNNING_LPG",
- "value": 12
- },
- {
- "name": "BIFUEL_RUNNING_CNG",
- "value": 13
- },
- {
- "name": "BIFUEL_RUNNING_PROPANE",
- "value": 14
- },
- {
- "name": "BIFUEL_RUNNING_ELECTRIC",
- "value": 15
- },
- {
- "name": "BIFUEL_RUNNING_ELECTRIC_AND_COMBUSTION",
+ "name": "WHEEL_SPEED_FUSION",
"value": 16
},
{
- "name": "HYBRID_GASOLINE",
- "value": 17
+ "name": "STEERING_ANGLE_FUSION",
+ "value": 32
},
{
- "name": "HYBRID_ETHANOL",
- "value": 18
+ "name": "CAR_SPEED_FUSION",
+ "value": 64
},
{
- "name": "HYBRID_DIESEL",
- "value": 19
+ "name": "DEAD_RECKONED",
+ "value": 128
},
{
- "name": "HYBRID_ELECTRIC",
- "value": 20
- },
- {
- "name": "HYBRID_RUNNING_ELECTRIC_AND_COMBUSTION",
- "value": 21
- },
- {
- "name": "HYBRID_REGENERATIVE",
- "value": 22
- },
- {
- "name": "BIFUEL_RUNNING_DIESEL",
- "value": 23
+ "name": "RAW_GNSS_ONLY",
+ "value": 256
}
]
},
{
- "name": "VmsSubscriptionsStateIntegerValuesIndex",
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VehicleDisplay",
"values": [
{
- "name": "MESSAGE_TYPE",
+ "name": "MAIN",
"value": 0
},
{
- "name": "SEQUENCE_NUMBER",
+ "name": "INSTRUMENT_CLUSTER",
"value": 1
},
{
- "name": "NUMBER_OF_LAYERS",
+ "name": "HUD",
"value": 2
},
{
- "name": "NUMBER_OF_ASSOCIATED_LAYERS",
+ "name": "INPUT",
"value": 3
},
{
- "name": "SUBSCRIPTIONS_START",
+ "name": "AUXILIARY",
"value": 4
}
]
},
{
- "name": "VehicleArea",
+ "package": "android.hardware.automotive.vehicle",
+ "name": "CruiseControlState",
"values": [
{
- "name": "GLOBAL",
- "value": 16777216
+ "name": "OTHER",
+ "value": 0
},
{
- "name": "WINDOW",
- "value": 50331648
+ "name": "ENABLED",
+ "value": 1
},
{
- "name": "MIRROR",
- "value": 67108864
+ "name": "ACTIVATED",
+ "value": 2
},
{
- "name": "SEAT",
- "value": 83886080
+ "name": "USER_OVERRIDE",
+ "value": 3
},
{
- "name": "DOOR",
- "value": 100663296
+ "name": "SUSPENDED",
+ "value": 4
},
{
- "name": "WHEEL",
- "value": 117440512
- },
- {
- "name": "MASK",
- "value": 251658240
+ "name": "FORCED_DEACTIVATION_WARNING",
+ "value": 5
}
]
},
{
+ "package": "android.hardware.automotive.vehicle",
+ "name": "HandsOnDetectionWarning",
+ "values": [
+ {
+ "name": "OTHER",
+ "value": 0
+ },
+ {
+ "name": "NO_WARNING",
+ "value": 1
+ },
+ {
+ "name": "WARNING",
+ "value": 2
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
"name": "VehicleAreaWindow",
"values": [
{
@@ -297,27 +188,99 @@
]
},
{
- "name": "ElectronicTollCollectionCardStatus",
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VmsAvailabilityStateIntegerValuesIndex",
"values": [
{
- "name": "UNKNOWN",
+ "name": "MESSAGE_TYPE",
"value": 0
},
{
- "name": "ELECTRONIC_TOLL_COLLECTION_CARD_VALID",
+ "name": "SEQUENCE_NUMBER",
"value": 1
},
{
- "name": "ELECTRONIC_TOLL_COLLECTION_CARD_INVALID",
+ "name": "NUMBER_OF_ASSOCIATED_LAYERS",
"value": 2
},
{
- "name": "ELECTRONIC_TOLL_COLLECTION_CARD_NOT_INSERTED",
+ "name": "LAYERS_START",
"value": 3
}
]
},
{
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VehicleLightSwitch",
+ "values": [
+ {
+ "name": "OFF",
+ "value": 0
+ },
+ {
+ "name": "ON",
+ "value": 1
+ },
+ {
+ "name": "DAYTIME_RUNNING",
+ "value": 2
+ },
+ {
+ "name": "AUTOMATIC",
+ "value": 256
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "Obd2IgnitionMonitorKind",
+ "values": [
+ {
+ "name": "SPARK",
+ "value": 0
+ },
+ {
+ "name": "COMPRESSION",
+ "value": 1
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VehicleHwMotionButtonStateFlag",
+ "values": [
+ {
+ "name": "BUTTON_PRIMARY",
+ "value": 1
+ },
+ {
+ "name": "BUTTON_SECONDARY",
+ "value": 2
+ },
+ {
+ "name": "BUTTON_TERTIARY",
+ "value": 4
+ },
+ {
+ "name": "BUTTON_BACK",
+ "value": 8
+ },
+ {
+ "name": "BUTTON_FORWARD",
+ "value": 16
+ },
+ {
+ "name": "BUTTON_STYLUS_PRIMARY",
+ "value": 32
+ },
+ {
+ "name": "BUTTON_STYLUS_SECONDARY",
+ "value": 64
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
"name": "VehiclePropertyType",
"values": [
{
@@ -367,1694 +330,7 @@
]
},
{
- "name": "StatusCode",
- "values": [
- {
- "name": "OK",
- "value": 0
- },
- {
- "name": "TRY_AGAIN",
- "value": 1
- },
- {
- "name": "INVALID_ARG",
- "value": 2
- },
- {
- "name": "NOT_AVAILABLE",
- "value": 3
- },
- {
- "name": "ACCESS_DENIED",
- "value": 4
- },
- {
- "name": "INTERNAL_ERROR",
- "value": 5
- }
- ]
- },
- {
- "name": "CreateUserStatus",
- "values": [
- {
- "name": "SUCCESS",
- "value": 1
- },
- {
- "name": "FAILURE",
- "value": 2
- }
- ]
- },
- {
- "name": "ElectronicTollCollectionCardType",
- "values": [
- {
- "name": "UNKNOWN",
- "value": 0
- },
- {
- "name": "JP_ELECTRONIC_TOLL_COLLECTION_CARD",
- "value": 1
- },
- {
- "name": "JP_ELECTRONIC_TOLL_COLLECTION_CARD_V2",
- "value": 2
- }
- ]
- },
- {
- "name": "VehicleAreaMirror",
- "values": [
- {
- "name": "DRIVER_LEFT",
- "value": 1
- },
- {
- "name": "DRIVER_RIGHT",
- "value": 2
- },
- {
- "name": "DRIVER_CENTER",
- "value": 4
- }
- ]
- },
- {
- "name": "InitialUserInfoResponseAction",
- "values": [
- {
- "name": "DEFAULT",
- "value": 0
- },
- {
- "name": "SWITCH",
- "value": 1
- },
- {
- "name": "CREATE",
- "value": 2
- }
- ]
- },
- {
- "name": "VehicleHvacFanDirection",
- "values": [
- {
- "name": "UNKNOWN",
- "value": 0
- },
- {
- "name": "FACE",
- "value": 1
- },
- {
- "name": "FLOOR",
- "value": 2
- },
- {
- "name": "FACE_AND_FLOOR",
- "value": 3
- },
- {
- "name": "DEFROST",
- "value": 4
- },
- {
- "name": "DEFROST_AND_FLOOR",
- "value": 6
- }
- ]
- },
- {
- "name": "Obd2SecondaryAirStatus",
- "values": [
- {
- "name": "UPSTREAM",
- "value": 1
- },
- {
- "name": "DOWNSTREAM_OF_CATALYCIC_CONVERTER",
- "value": 2
- },
- {
- "name": "FROM_OUTSIDE_OR_OFF",
- "value": 4
- },
- {
- "name": "PUMP_ON_FOR_DIAGNOSTICS",
- "value": 8
- }
- ]
- },
- {
- "name": "VmsStartSessionMessageIntegerValuesIndex",
- "values": [
- {
- "name": "MESSAGE_TYPE",
- "value": 0
- },
- {
- "name": "SERVICE_ID",
- "value": 1
- },
- {
- "name": "CLIENT_ID",
- "value": 2
- }
- ]
- },
- {
- "name": "VehicleOilLevel",
- "values": [
- {
- "name": "CRITICALLY_LOW",
- "value": 0
- },
- {
- "name": "LOW",
- "value": 1
- },
- {
- "name": "NORMAL",
- "value": 2
- },
- {
- "name": "HIGH",
- "value": 3
- },
- {
- "name": "ERROR",
- "value": 4
- }
- ]
- },
- {
- "name": "VehicleUnit",
- "values": [
- {
- "name": "SHOULD_NOT_USE",
- "value": 0
- },
- {
- "name": "METER_PER_SEC",
- "value": 1
- },
- {
- "name": "RPM",
- "value": 2
- },
- {
- "name": "HERTZ",
- "value": 3
- },
- {
- "name": "PERCENTILE",
- "value": 16
- },
- {
- "name": "MILLIMETER",
- "value": 32
- },
- {
- "name": "METER",
- "value": 33
- },
- {
- "name": "KILOMETER",
- "value": 35
- },
- {
- "name": "MILE",
- "value": 36
- },
- {
- "name": "CELSIUS",
- "value": 48
- },
- {
- "name": "FAHRENHEIT",
- "value": 49
- },
- {
- "name": "KELVIN",
- "value": 50
- },
- {
- "name": "MILLILITER",
- "value": 64
- },
- {
- "name": "LITER",
- "value": 65
- },
- {
- "name": "GALLON",
- "value": 66
- },
- {
- "name": "US_GALLON",
- "value": 66
- },
- {
- "name": "IMPERIAL_GALLON",
- "value": 67
- },
- {
- "name": "NANO_SECS",
- "value": 80
- },
- {
- "name": "SECS",
- "value": 83
- },
- {
- "name": "YEAR",
- "value": 89
- },
- {
- "name": "WATT_HOUR",
- "value": 96
- },
- {
- "name": "MILLIAMPERE",
- "value": 97
- },
- {
- "name": "MILLIVOLT",
- "value": 98
- },
- {
- "name": "MILLIWATTS",
- "value": 99
- },
- {
- "name": "AMPERE_HOURS",
- "value": 100
- },
- {
- "name": "KILOWATT_HOUR",
- "value": 101
- },
- {
- "name": "AMPERE",
- "value": 102
- },
- {
- "name": "KILOPASCAL",
- "value": 112
- },
- {
- "name": "PSI",
- "value": 113
- },
- {
- "name": "BAR",
- "value": 114
- },
- {
- "name": "DEGREES",
- "value": 128
- },
- {
- "name": "MILES_PER_HOUR",
- "value": 144
- },
- {
- "name": "KILOMETERS_PER_HOUR",
- "value": 145
- }
- ]
- },
- {
- "name": "VehicleAreaWheel",
- "values": [
- {
- "name": "UNKNOWN",
- "value": 0
- },
- {
- "name": "LEFT_FRONT",
- "value": 1
- },
- {
- "name": "RIGHT_FRONT",
- "value": 2
- },
- {
- "name": "LEFT_REAR",
- "value": 4
- },
- {
- "name": "RIGHT_REAR",
- "value": 8
- }
- ]
- },
- {
- "name": "EvsServiceState",
- "values": [
- {
- "name": "OFF",
- "value": 0
- },
- {
- "name": "ON",
- "value": 1
- }
- ]
- },
- {
- "name": "EvsServiceRequestIndex",
- "values": [
- {
- "name": "TYPE",
- "value": 0
- },
- {
- "name": "STATE",
- "value": 1
- }
- ]
- },
- {
- "name": "VehicleSeatOccupancyState",
- "values": [
- {
- "name": "UNKNOWN",
- "value": 0
- },
- {
- "name": "VACANT",
- "value": 1
- },
- {
- "name": "OCCUPIED",
- "value": 2
- }
- ]
- },
- {
- "name": "VehicleProperty",
- "values": [
- {
- "name": "Undefined property.",
- "value": 0
- },
- {
- "name": "VIN of vehicle",
- "value": 286261504,
- "change_mode": "VehiclePropertyChangeMode:STATIC",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "Manufacturer of vehicle",
- "value": 286261505,
- "change_mode": "VehiclePropertyChangeMode:STATIC",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "Model of vehicle",
- "value": 286261506,
- "change_mode": "VehiclePropertyChangeMode:STATIC",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "Model year of vehicle.",
- "value": 289407235,
- "change_mode": "VehiclePropertyChangeMode:STATIC",
- "access": "VehiclePropertyAccess:READ",
- "unit": "VehicleUnit:YEAR"
- },
- {
- "name": "Fuel capacity of the vehicle in milliliters",
- "value": 291504388,
- "change_mode": "VehiclePropertyChangeMode:STATIC",
- "access": "VehiclePropertyAccess:READ",
- "unit": "VehicleUnit:MILLILITER"
- },
- {
- "name": "List of fuels the vehicle may use",
- "value": 289472773,
- "change_mode": "VehiclePropertyChangeMode:STATIC",
- "access": "VehiclePropertyAccess:READ",
- "data_enum": "FuelType"
- },
- {
- "name": "INFO_EV_BATTERY_CAPACITY",
- "value": 291504390,
- "change_mode": "VehiclePropertyChangeMode:STATIC",
- "access": "VehiclePropertyAccess:READ",
- "unit": "VehicleUnit:WH"
- },
- {
- "name": "List of connectors this EV may use",
- "value": 289472775,
- "change_mode": "VehiclePropertyChangeMode:STATIC",
- "data_enum": "EvConnectorType",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "Fuel door location",
- "value": 289407240,
- "change_mode": "VehiclePropertyChangeMode:STATIC",
- "data_enum": "PortLocationType",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "EV port location",
- "value": 289407241,
- "change_mode": "VehiclePropertyChangeMode:STATIC",
- "access": "VehiclePropertyAccess:READ",
- "data_enum": "PortLocationType"
- },
- {
- "name": "INFO_DRIVER_SEAT",
- "value": 356516106,
- "change_mode": "VehiclePropertyChangeMode:STATIC",
- "data_enum": "VehicleAreaSeat",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "Exterior dimensions of vehicle.",
- "value": 289472779,
- "change_mode": "VehiclePropertyChangeMode:STATIC",
- "access": "VehiclePropertyAccess:READ",
- "unit": "VehicleUnit:MILLIMETER"
- },
- {
- "name": "Multiple EV port locations",
- "value": 289472780,
- "change_mode": "VehiclePropertyChangeMode:STATIC",
- "access": "VehiclePropertyAccess:READ",
- "data_enum": "PortLocationType"
- },
- {
- "name": "Current odometer value of the vehicle",
- "value": 291504644,
- "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
- "access": "VehiclePropertyAccess:READ",
- "unit": "VehicleUnit:KILOMETER"
- },
- {
- "name": "Speed of the vehicle",
- "value": 291504647,
- "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
- "access": "VehiclePropertyAccess:READ",
- "unit": "VehicleUnit:METER_PER_SEC"
- },
- {
- "name": "Speed of the vehicle for displays",
- "value": 291504648,
- "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
- "access": "VehiclePropertyAccess:READ",
- "unit": "VehicleUnit:METER_PER_SEC"
- },
- {
- "name": "Front bicycle model steering angle for vehicle",
- "value": 291504649,
- "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
- "access": "VehiclePropertyAccess:READ",
- "unit": "VehicleUnit:DEGREES"
- },
- {
- "name": "Rear bicycle model steering angle for vehicle",
- "value": 291504656,
- "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
- "access": "VehiclePropertyAccess:READ",
- "unit": "VehicleUnit:DEGREES"
- },
- {
- "name": "Temperature of engine coolant",
- "value": 291504897,
- "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
- "access": "VehiclePropertyAccess:READ",
- "unit": "VehicleUnit:CELSIUS"
- },
- {
- "name": "Engine oil level",
- "value": 289407747,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ",
- "data_enum": "VehicleOilLevel"
- },
- {
- "name": "Temperature of engine oil",
- "value": 291504900,
- "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
- "access": "VehiclePropertyAccess:READ",
- "unit": "VehicleUnit:CELSIUS"
- },
- {
- "name": "Engine rpm",
- "value": 291504901,
- "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
- "access": "VehiclePropertyAccess:READ",
- "unit": "VehicleUnit:RPM"
- },
- {
- "name": "Reports wheel ticks",
- "value": 290521862,
- "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "FUEL_LEVEL",
- "value": 291504903,
- "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
- "access": "VehiclePropertyAccess:READ",
- "unit": "VehicleUnit:MILLILITER"
- },
- {
- "name": "Fuel door open",
- "value": 287310600,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "EV_BATTERY_LEVEL",
- "value": 291504905,
- "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
- "access": "VehiclePropertyAccess:READ",
- "unit": "VehicleUnit:WH"
- },
- {
- "name": "EV charge port open",
- "value": 287310602,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "EV charge port connected",
- "value": 287310603,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "EV instantaneous charge rate in milliwatts",
- "value": 291504908,
- "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
- "access": "VehiclePropertyAccess:READ",
- "unit": "VehicleUnit:MW"
- },
- {
- "name": "Range remaining",
- "value": 291504904,
- "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
- "access": "VehiclePropertyAccess:READ_WRITE",
- "unit": "VehicleUnit:METER"
- },
- {
- "name": "Tire pressure",
- "value": 392168201,
- "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
- "access": "VehiclePropertyAccess:READ",
- "unit": "VehicleUnit:KILOPASCAL"
- },
- {
- "name": "Critically low tire pressure",
- "value": 392168202,
- "change_mode": "VehiclePropertyChangeMode:STATIC",
- "access": "VehiclePropertyAccess:READ",
- "unit": "VehicleUnit:KILOPASCAL"
- },
- {
- "name": "Currently selected gear",
- "value": 289408000,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ",
- "data_enum": "VehicleGear"
- },
- {
- "name": "CURRENT_GEAR",
- "value": 289408001,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ",
- "data_enum": "VehicleGear"
- },
- {
- "name": "Parking brake state.",
- "value": 287310850,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "PARKING_BRAKE_AUTO_APPLY",
- "value": 287310851,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "Warning for fuel low level.",
- "value": 287310853,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "Night mode",
- "value": 287310855,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "State of the vehicles turn signals",
- "value": 289408008,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ",
- "data_enum": "VehicleTurnSignal"
- },
- {
- "name": "Represents ignition state",
- "value": 289408009,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ",
- "data_enum": "VehicleIgnitionState"
- },
- {
- "name": "ABS is active",
- "value": 287310858,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "Traction Control is active",
- "value": 287310859,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "HVAC_FAN_SPEED",
- "value": 356517120
- },
- {
- "name": "Fan direction setting",
- "value": 356517121,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE",
- "data_enum": "VehicleHvacFanDirection"
- },
- {
- "name": "HVAC current temperature.",
- "value": 358614274,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ",
- "unit": "VehicleUnit:CELSIUS"
- },
- {
- "name": "HVAC_TEMPERATURE_SET",
- "value": 358614275,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE",
- "unit": "VehicleUnit:CELSIUS"
- },
- {
- "name": "HVAC_DEFROSTER",
- "value": 320865540,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "HVAC_AC_ON",
- "value": 354419973,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE",
- "config_flags": "Supported"
- },
- {
- "name": "HVAC_MAX_AC_ON",
- "value": 354419974,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "HVAC_MAX_DEFROST_ON",
- "value": 354419975,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "HVAC_RECIRC_ON",
- "value": 354419976,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Enable temperature coupling between areas.",
- "value": 354419977,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "HVAC_AUTO_ON",
- "value": 354419978,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "HVAC_SEAT_TEMPERATURE",
- "value": 356517131,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Side Mirror Heat",
- "value": 339739916,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "HVAC_STEERING_WHEEL_HEAT",
- "value": 289408269,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Temperature units for display",
- "value": 289408270,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE",
- "data_enum": "VehicleUnit"
- },
- {
- "name": "Actual fan speed",
- "value": 356517135,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "HVAC_POWER_ON",
- "value": 354419984,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Fan Positions Available",
- "value": 356582673,
- "change_mode": "VehiclePropertyChangeMode:STATIC",
- "access": "VehiclePropertyAccess:READ",
- "data_enum": "VehicleHvacFanDirection"
- },
- {
- "name": "HVAC_AUTO_RECIRC_ON",
- "value": 354419986,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Seat ventilation",
- "value": 356517139,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "HVAC_ELECTRIC_DEFROSTER_ON",
- "value": 320865556,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Suggested values for setting HVAC temperature.",
- "value": 291570965,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Distance units for display",
- "value": 289408512,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE",
- "data_enum": "VehicleUnit"
- },
- {
- "name": "Fuel volume units for display",
- "value": 289408513,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE",
- "data_enum": "VehicleUnit"
- },
- {
- "name": "Tire pressure units for display",
- "value": 289408514,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE",
- "data_enum": "VehicleUnit"
- },
- {
- "name": "EV battery units for display",
- "value": 289408515,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE",
- "data_enum": "VehicleUnit"
- },
- {
- "name": "Fuel consumption units for display",
- "value": 287311364,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Speed units for display",
- "value": 289408517,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "ANDROID_EPOCH_TIME",
- "value": 290457094,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:WRITE_ONLY",
- "unit": "VehicleUnit:MILLI_SECS"
- },
- {
- "name": "External encryption binding seed.",
- "value": 292554247,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Outside temperature",
- "value": 291505923,
- "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
- "access": "VehiclePropertyAccess:READ",
- "unit": "VehicleUnit:CELSIUS"
- },
- {
- "name": "Property to control power state of application processor",
- "value": 289475072,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "Property to report power state of application processor",
- "value": 289475073,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "AP_POWER_BOOTUP_REASON",
- "value": 289409538,
- "change_mode": "VehiclePropertyChangeMode:STATIC",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "DISPLAY_BRIGHTNESS",
- "value": 289409539,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "HW_KEY_INPUT",
- "value": 289475088,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ",
- "config_flags": ""
- },
- {
- "name": "HW_ROTARY_INPUT",
- "value": 289475104,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "data_enum": "RotaryInputType",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "Defines a custom OEM partner input event.",
- "value": 289475120,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "data_enum": "CustomInputType",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "DOOR_POS",
- "value": 373295872,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Door move",
- "value": 373295873,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Door lock",
- "value": 371198722,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Mirror Z Position",
- "value": 339741504,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Mirror Z Move",
- "value": 339741505,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Mirror Y Position",
- "value": 339741506,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Mirror Y Move",
- "value": 339741507,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Mirror Lock",
- "value": 287312708,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Mirror Fold",
- "value": 287312709,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Seat memory select",
- "value": 356518784,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:WRITE"
- },
- {
- "name": "Seat memory set",
- "value": 356518785,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:WRITE"
- },
- {
- "name": "Seatbelt buckled",
- "value": 354421634,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Seatbelt height position",
- "value": 356518787,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Seatbelt height move",
- "value": 356518788,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "SEAT_FORE_AFT_POS",
- "value": 356518789,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "SEAT_FORE_AFT_MOVE",
- "value": 356518790,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Seat backrest angle 1 position",
- "value": 356518791,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Seat backrest angle 1 move",
- "value": 356518792,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Seat backrest angle 2 position",
- "value": 356518793,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Seat backrest angle 2 move",
- "value": 356518794,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Seat height position",
- "value": 356518795,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Seat height move",
- "value": 356518796,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Seat depth position",
- "value": 356518797,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Seat depth move",
- "value": 356518798,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Seat tilt position",
- "value": 356518799,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Seat tilt move",
- "value": 356518800,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "SEAT_LUMBAR_FORE_AFT_POS",
- "value": 356518801,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "SEAT_LUMBAR_FORE_AFT_MOVE",
- "value": 356518802,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Lumbar side support position",
- "value": 356518803,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Lumbar side support move",
- "value": 356518804,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Headrest height position",
- "value": 289409941,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Headrest height move",
- "value": 356518806,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Headrest angle position",
- "value": 356518807,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Headrest angle move",
- "value": 356518808,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "SEAT_HEADREST_FORE_AFT_POS",
- "value": 356518809,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "SEAT_HEADREST_FORE_AFT_MOVE",
- "value": 356518810,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Seat Occupancy",
- "value": 356518832,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ",
- "data_enum": "VehicleSeatOccupancyState"
- },
- {
- "name": "Window Position",
- "value": 322964416,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Window Move",
- "value": 322964417,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Window Lock",
- "value": 320867268,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "VEHICLE_MAP_SERVICE",
- "value": 299895808,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "OBD2 Live Sensor Data",
- "value": 299896064,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "OBD2 Freeze Frame Sensor Data",
- "value": 299896065,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "OBD2 Freeze Frame Information",
- "value": 299896066,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "OBD2 Freeze Frame Clear",
- "value": 299896067,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:WRITE"
- },
- {
- "name": "Headlights State",
- "value": 289410560,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ",
- "data_enum": "VehicleLightState"
- },
- {
- "name": "High beam lights state",
- "value": 289410561,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ",
- "data_enum": "VehicleLightState"
- },
- {
- "name": "Fog light state",
- "value": 289410562,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ",
- "data_enum": "VehicleLightState"
- },
- {
- "name": "Hazard light status",
- "value": 289410563,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ",
- "data_enum": "VehicleLightState"
- },
- {
- "name": "Headlight switch",
- "value": 289410576,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE",
- "data_enum": "VehicleLightSwitch"
- },
- {
- "name": "High beam light switch",
- "value": 289410577,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE",
- "data_enum": "VehicleLightSwitch"
- },
- {
- "name": "Fog light switch",
- "value": 289410578,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE",
- "data_enum": "VehicleLightSwitch"
- },
- {
- "name": "Hazard light switch",
- "value": 289410579,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE",
- "data_enum": "VehicleLightSwitch"
- },
- {
- "name": "Cabin lights",
- "value": 289410817,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ",
- "data_enum": "VehicleLightState"
- },
- {
- "name": "Cabin lights switch",
- "value": 289410818,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE",
- "data_enum": "VehicleLightSwitch"
- },
- {
- "name": "Reading lights",
- "value": 356519683,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ",
- "data_enum": "VehicleLightState"
- },
- {
- "name": "Reading lights switch",
- "value": 356519684,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE",
- "data_enum": "VehicleLightSwitch"
- },
- {
- "name": "Support customize permissions for vendor properties",
- "value": 287313669,
- "change_mode": "VehiclePropertyChangeMode:STATIC",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "Allow disabling optional featurs from vhal.",
- "value": 286265094,
- "change_mode": "VehiclePropertyChangeMode:STATIC",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "Defines the initial Android user to be used during initialization.",
- "value": 299896583,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Defines a request to switch the foreground Android user.",
- "value": 299896584,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Called by the Android System after an Android user was created.",
- "value": 299896585,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Called by the Android System after an Android user was removed.",
- "value": 299896586,
- "change_mode": "VehiclePropertyChangeMode:STATIC",
- "access": "VehiclePropertyAccess:WRITE"
- },
- {
- "name": "USER_IDENTIFICATION_ASSOCIATION",
- "value": 299896587,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "EVS_SERVICE_REQUEST",
- "value": 289476368,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "Defines a request to apply power policy.",
- "value": 286265121,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "POWER_POLICY_GROUP_REQ",
- "value": 286265122,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "Notifies the current power policy to VHAL layer.",
- "value": 286265123,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "WATCHDOG_ALIVE",
- "value": 290459441,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:WRITE"
- },
- {
- "name": "Defines a process terminated by car watchdog and the reason of termination.",
- "value": 299896626,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:WRITE"
- },
- {
- "name": "Defines an event that VHAL signals to car watchdog as a heartbeat.",
- "value": 290459443,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "Starts the ClusterUI in cluster display.",
- "value": 289410868,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "Changes the state of the cluster display.",
- "value": 289476405,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ"
- },
- {
- "name": "Reports the current display state and ClusterUI state.",
- "value": 299896630,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:WRITE"
- },
- {
- "name": "Requests to change the cluster display state to show some ClusterUI.",
- "value": 289410871,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:WRITE"
- },
- {
- "name": "Informs the current navigation state.",
- "value": 292556600,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:WRITE"
- },
- {
- "name": "Electronic Toll Collection card type.",
- "value": 289410873,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ",
- "data_enum": "ElectronicTollCollectionCardType"
- },
- {
- "name": "Electronic Toll Collection card status.",
- "value": 289410874,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ",
- "data_enum": "ElectronicTollCollectionCardStatus"
- },
- {
- "name": "Front fog lights state",
- "value": 289410875,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ",
- "data_enum": "VehicleLightState"
- },
- {
- "name": "Front fog lights switch",
- "value": 289410876,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE",
- "data_enum": "VehicleLightSwitch"
- },
- {
- "name": "Rear fog lights state",
- "value": 289410877,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ",
- "data_enum": "VehicleLightState"
- },
- {
- "name": "Rear fog lights switch",
- "value": 289410878,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE",
- "data_enum": "VehicleLightSwitch"
- },
- {
- "name": "Indicates the maximum current draw threshold for charging set by the user",
- "value": 291508031,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE",
- "unit": "VehicleUnit:AMPERE"
- },
- {
- "name": "Indicates the maximum charge percent threshold set by the user",
- "value": 291508032,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Charging state of the car",
- "value": 289410881,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ",
- "data_enum": "EvChargeState"
- },
- {
- "name": "Start or stop charging the EV battery",
- "value": 287313730,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ_WRITE"
- },
- {
- "name": "Estimated charge time remaining in seconds",
- "value": 289410883,
- "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
- "access": "VehiclePropertyAccess:READ",
- "unit": "VehicleUnit:SECS"
- },
- {
- "name": "EV_REGENERATIVE_BRAKING_STATE",
- "value": 289410884,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ",
- "data_enum": "EvRegenerativeBrakingState"
- },
- {
- "name": "Indicates if there is a trailer present or not.",
- "value": 289410885,
- "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
- "access": "VehiclePropertyAccess:READ",
- "data_enum": "TrailerState"
- },
- {
- "name": "VEHICLE_CURB_WEIGHT",
- "value": 289410886,
- "change_mode": "VehiclePropertyChangeMode:STATIC",
- "access": "VehiclePropertyAccess:READ",
- "unit": "VehicleUnit:KILOGRAM"
- }
- ]
- },
- {
- "name": "EvsServiceType",
- "values": [
- {
- "name": "REARVIEW",
- "value": 0
- },
- {
- "name": "SURROUNDVIEW",
- "value": 1
- }
- ]
- },
- {
- "name": "VehiclePropertyChangeMode",
- "values": [
- {
- "name": "STATIC",
- "value": 0
- },
- {
- "name": "ON_CHANGE",
- "value": 1
- },
- {
- "name": "CONTINUOUS",
- "value": 2
- }
- ]
- },
- {
- "name": "Obd2CompressionIgnitionMonitors",
- "values": []
- },
- {
- "name": "VehicleLightState",
- "values": [
- {
- "name": "OFF",
- "value": 0
- },
- {
- "name": "ON",
- "value": 1
- },
- {
- "name": "DAYTIME_RUNNING",
- "value": 2
- }
- ]
- },
- {
- "name": "SwitchUserMessageType",
- "values": [
- {
- "name": "UNKNOWN",
- "value": 0
- },
- {
- "name": "LEGACY_ANDROID_SWITCH",
- "value": 1
- },
- {
- "name": "ANDROID_SWITCH",
- "value": 2
- },
- {
- "name": "VEHICLE_RESPONSE",
- "value": 3
- },
- {
- "name": "VEHICLE_REQUEST",
- "value": 4
- },
- {
- "name": "ANDROID_POST_SWITCH",
- "value": 5
- }
- ]
- },
- {
- "name": "PortLocationType",
- "values": [
- {
- "name": "UNKNOWN",
- "value": 0
- },
- {
- "name": "FRONT_LEFT",
- "value": 1
- },
- {
- "name": "FRONT_RIGHT",
- "value": 2
- },
- {
- "name": "REAR_RIGHT",
- "value": 3
- },
- {
- "name": "REAR_LEFT",
- "value": 4
- },
- {
- "name": "FRONT",
- "value": 5
- },
- {
- "name": "REAR",
- "value": 6
- }
- ]
- },
- {
- "name": "VehiclePropertyStatus",
- "values": [
- {
- "name": "AVAILABLE",
- "value": 0
- },
- {
- "name": "UNAVAILABLE",
- "value": 1
- },
- {
- "name": "ERROR",
- "value": 2
- }
- ]
- },
- {
- "name": "VehicleDisplay",
- "values": [
- {
- "name": "MAIN",
- "value": 0
- },
- {
- "name": "INSTRUMENT_CLUSTER",
- "value": 1
- }
- ]
- },
- {
- "name": "SwitchUserStatus",
- "values": [
- {
- "name": "SUCCESS",
- "value": 1
- },
- {
- "name": "FAILURE",
- "value": 2
- }
- ]
- },
- {
- "name": "InitialUserInfoRequestType",
- "values": [
- {
- "name": "UNKNOWN",
- "value": 0
- },
- {
- "name": "FIRST_BOOT",
- "value": 1
- },
- {
- "name": "FIRST_BOOT_AFTER_OTA",
- "value": 2
- },
- {
- "name": "COLD_BOOT",
- "value": 3
- },
- {
- "name": "RESUME",
- "value": 4
- }
- ]
- },
- {
- "name": "UserIdentificationAssociationSetValue",
- "values": [
- {
- "name": "INVALID",
- "value": 0
- },
- {
- "name": "ASSOCIATE_CURRENT_USER",
- "value": 1
- },
- {
- "name": "DISASSOCIATE_CURRENT_USER",
- "value": 2
- },
- {
- "name": "DISASSOCIATE_ALL_USERS",
- "value": 3
- }
- ]
- },
- {
+ "package": "android.hardware.automotive.vehicle",
"name": "VehicleAreaDoor",
"values": [
{
@@ -2092,250 +368,477 @@
]
},
{
- "name": "VehicleLightSwitch",
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VehicleApPowerBootupReason",
"values": [
{
- "name": "OFF",
+ "name": "USER_POWER_ON",
"value": 0
},
{
- "name": "ON",
+ "name": "SYSTEM_USER_DETECTION",
"value": 1
},
{
- "name": "DAYTIME_RUNNING",
+ "name": "SYSTEM_REMOTE_ACCESS",
"value": 2
- },
- {
- "name": "AUTOMATIC",
- "value": 256
}
]
},
{
- "name": "VehicleGear",
+ "package": "android.hardware.automotive.vehicle",
+ "name": "EmergencyLaneKeepAssistState",
"values": [
{
- "name": "GEAR_UNKNOWN",
+ "name": "OTHER",
"value": 0
},
{
- "name": "GEAR_NEUTRAL",
+ "name": "ENABLED",
"value": 1
},
{
- "name": "GEAR_REVERSE",
+ "name": "WARNING_LEFT",
"value": 2
},
{
- "name": "GEAR_PARK",
- "value": 4
- },
- {
- "name": "GEAR_DRIVE",
- "value": 8
- },
- {
- "name": "GEAR_1",
- "value": 16
- },
- {
- "name": "GEAR_2",
- "value": 32
- },
- {
- "name": "GEAR_3",
- "value": 64
- },
- {
- "name": "GEAR_4",
- "value": 128
- },
- {
- "name": "GEAR_5",
- "value": 256
- },
- {
- "name": "GEAR_6",
- "value": 512
- },
- {
- "name": "GEAR_7",
- "value": 1024
- },
- {
- "name": "GEAR_8",
- "value": 2048
- },
- {
- "name": "GEAR_9",
- "value": 4096
- }
- ]
- },
- {
- "name": "Obd2IgnitionMonitorKind",
- "values": [
- {
- "name": "SPARK",
- "value": 0
- },
- {
- "name": "COMPRESSION",
- "value": 1
- }
- ]
- },
- {
- "name": "CustomInputType",
- "values": [
- {
- "name": "CUSTOM_EVENT_F1",
- "value": 1001
- },
- {
- "name": "CUSTOM_EVENT_F2",
- "value": 1002
- },
- {
- "name": "CUSTOM_EVENT_F3",
- "value": 1003
- },
- {
- "name": "CUSTOM_EVENT_F4",
- "value": 1004
- },
- {
- "name": "CUSTOM_EVENT_F5",
- "value": 1005
- },
- {
- "name": "CUSTOM_EVENT_F6",
- "value": 1006
- },
- {
- "name": "CUSTOM_EVENT_F7",
- "value": 1007
- },
- {
- "name": "CUSTOM_EVENT_F8",
- "value": 1008
- },
- {
- "name": "CUSTOM_EVENT_F9",
- "value": 1009
- },
- {
- "name": "CUSTOM_EVENT_F10",
- "value": 1010
- }
- ]
- },
- {
- "name": "VehicleApPowerStateReport",
- "values": [
- {
- "name": "WAIT_FOR_VHAL",
- "value": 1
- },
- {
- "name": "DEEP_SLEEP_ENTRY",
- "value": 2
- },
- {
- "name": "DEEP_SLEEP_EXIT",
+ "name": "WARNING_RIGHT",
"value": 3
},
{
- "name": "SHUTDOWN_POSTPONE",
+ "name": "ACTIVATED_STEER_LEFT",
"value": 4
},
{
- "name": "SHUTDOWN_START",
+ "name": "ACTIVATED_STEER_RIGHT",
"value": 5
},
{
- "name": "ON",
+ "name": "USER_OVERRIDE",
"value": 6
- },
- {
- "name": "SHUTDOWN_PREPARE",
- "value": 7
- },
- {
- "name": "SHUTDOWN_CANCELLED",
- "value": 8
- },
- {
- "name": "HIBERNATION_ENTRY",
- "value": 9
- },
- {
- "name": "HIBERNATION_EXIT",
- "value": 10
}
]
},
{
- "name": "VmsMessageWithLayerIntegerValuesIndex",
- "values": [
- {
- "name": "MESSAGE_TYPE",
- "value": 0
- },
- {
- "name": "LAYER_TYPE",
- "value": 1
- },
- {
- "name": "LAYER_SUBTYPE",
- "value": 2
- },
- {
- "name": "LAYER_VERSION",
- "value": 3
- }
- ]
- },
- {
- "name": "EvRegenerativeBrakingState",
+ "package": "android.hardware.automotive.vehicle",
+ "name": "EvConnectorType",
"values": [
{
"name": "UNKNOWN",
"value": 0
},
{
- "name": "DISABLED",
+ "name": "IEC_TYPE_1_AC",
"value": 1
},
{
- "name": "PARTIALLY_ENABLED",
+ "name": "IEC_TYPE_2_AC",
"value": 2
},
{
- "name": "FULLY_ENABLED",
+ "name": "IEC_TYPE_3_AC",
"value": 3
+ },
+ {
+ "name": "IEC_TYPE_4_DC",
+ "value": 4
+ },
+ {
+ "name": "IEC_TYPE_1_CCS_DC",
+ "value": 5
+ },
+ {
+ "name": "IEC_TYPE_2_CCS_DC",
+ "value": 6
+ },
+ {
+ "name": "TESLA_ROADSTER",
+ "value": 7
+ },
+ {
+ "name": "TESLA_HPWC",
+ "value": 8
+ },
+ {
+ "name": "TESLA_SUPERCHARGER",
+ "value": 9
+ },
+ {
+ "name": "GBT_AC",
+ "value": 10
+ },
+ {
+ "name": "GBT_DC",
+ "value": 11
+ },
+ {
+ "name": "OTHER",
+ "value": 101
}
]
},
{
- "name": "VehiclePropertyGroup",
+ "package": "android.hardware.automotive.vehicle",
+ "name": "UserIdentificationAssociationType",
"values": [
{
- "name": "SYSTEM",
- "value": 268435456
+ "name": "INVALID",
+ "value": 0
},
{
- "name": "VENDOR",
- "value": 536870912
+ "name": "KEY_FOB",
+ "value": 1
},
{
- "name": "MASK",
- "value": 4026531840
+ "name": "CUSTOM_1",
+ "value": 101
+ },
+ {
+ "name": "CUSTOM_2",
+ "value": 102
+ },
+ {
+ "name": "CUSTOM_3",
+ "value": 103
+ },
+ {
+ "name": "CUSTOM_4",
+ "value": 104
}
]
},
{
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VehicleHvacFanDirection",
+ "values": [
+ {
+ "name": "UNKNOWN",
+ "value": 0
+ },
+ {
+ "name": "FACE",
+ "value": 1
+ },
+ {
+ "name": "FLOOR",
+ "value": 2
+ },
+ {
+ "name": "FACE_AND_FLOOR",
+ "value": 3
+ },
+ {
+ "name": "DEFROST",
+ "value": 4
+ },
+ {
+ "name": "DEFROST_AND_FLOOR",
+ "value": 6
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VehicleAreaWheel",
+ "values": [
+ {
+ "name": "UNKNOWN",
+ "value": 0
+ },
+ {
+ "name": "LEFT_FRONT",
+ "value": 1
+ },
+ {
+ "name": "RIGHT_FRONT",
+ "value": 2
+ },
+ {
+ "name": "LEFT_REAR",
+ "value": 4
+ },
+ {
+ "name": "RIGHT_REAR",
+ "value": 8
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "InitialUserInfoRequestType",
+ "values": [
+ {
+ "name": "UNKNOWN",
+ "value": 0
+ },
+ {
+ "name": "FIRST_BOOT",
+ "value": 1
+ },
+ {
+ "name": "FIRST_BOOT_AFTER_OTA",
+ "value": 2
+ },
+ {
+ "name": "COLD_BOOT",
+ "value": 3
+ },
+ {
+ "name": "RESUME",
+ "value": 4
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "HandsOnDetectionDriverState",
+ "values": [
+ {
+ "name": "OTHER",
+ "value": 0
+ },
+ {
+ "name": "HANDS_ON",
+ "value": 1
+ },
+ {
+ "name": "HANDS_OFF",
+ "value": 2
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "CruiseControlCommand",
+ "values": [
+ {
+ "name": "ACTIVATE",
+ "value": 1
+ },
+ {
+ "name": "SUSPEND",
+ "value": 2
+ },
+ {
+ "name": "INCREASE_TARGET_SPEED",
+ "value": 3
+ },
+ {
+ "name": "DECREASE_TARGET_SPEED",
+ "value": 4
+ },
+ {
+ "name": "INCREASE_TARGET_TIME_GAP",
+ "value": 5
+ },
+ {
+ "name": "DECREASE_TARGET_TIME_GAP",
+ "value": 6
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "WindshieldWipersSwitch",
+ "values": [
+ {
+ "name": "OTHER",
+ "value": 0
+ },
+ {
+ "name": "OFF",
+ "value": 1
+ },
+ {
+ "name": "MIST",
+ "value": 2
+ },
+ {
+ "name": "INTERMITTENT_LEVEL_1",
+ "value": 3
+ },
+ {
+ "name": "INTERMITTENT_LEVEL_2",
+ "value": 4
+ },
+ {
+ "name": "INTERMITTENT_LEVEL_3",
+ "value": 5
+ },
+ {
+ "name": "INTERMITTENT_LEVEL_4",
+ "value": 6
+ },
+ {
+ "name": "INTERMITTENT_LEVEL_5",
+ "value": 7
+ },
+ {
+ "name": "CONTINUOUS_LEVEL_1",
+ "value": 8
+ },
+ {
+ "name": "CONTINUOUS_LEVEL_2",
+ "value": 9
+ },
+ {
+ "name": "CONTINUOUS_LEVEL_3",
+ "value": 10
+ },
+ {
+ "name": "CONTINUOUS_LEVEL_4",
+ "value": 11
+ },
+ {
+ "name": "CONTINUOUS_LEVEL_5",
+ "value": 12
+ },
+ {
+ "name": "AUTO",
+ "value": 13
+ },
+ {
+ "name": "SERVICE",
+ "value": 14
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VehicleHwMotionToolType",
+ "values": [
+ {
+ "name": "TOOL_TYPE_UNKNOWN",
+ "value": 0
+ },
+ {
+ "name": "TOOL_TYPE_FINGER",
+ "value": 1
+ },
+ {
+ "name": "TOOL_TYPE_STYLUS",
+ "value": 2
+ },
+ {
+ "name": "TOOL_TYPE_MOUSE",
+ "value": 3
+ },
+ {
+ "name": "TOOL_TYPE_ERASER",
+ "value": 4
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "SwitchUserStatus",
+ "values": [
+ {
+ "name": "SUCCESS",
+ "value": 1
+ },
+ {
+ "name": "FAILURE",
+ "value": 2
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "EvsServiceType",
+ "values": [
+ {
+ "name": "REARVIEW",
+ "value": 0
+ },
+ {
+ "name": "SURROUNDVIEW",
+ "value": 1
+ },
+ {
+ "name": "FRONTVIEW",
+ "value": 2
+ },
+ {
+ "name": "LEFTVIEW",
+ "value": 3
+ },
+ {
+ "name": "RIGHTVIEW",
+ "value": 4
+ },
+ {
+ "name": "DRIVERVIEW",
+ "value": 5
+ },
+ {
+ "name": "FRONTPASSENGERSVIEW",
+ "value": 6
+ },
+ {
+ "name": "REARPASSENGERSVIEW",
+ "value": 7
+ },
+ {
+ "name": "USER_DEFINED",
+ "value": 1000
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "UserIdentificationAssociationValue",
+ "values": [
+ {
+ "name": "UNKNOWN",
+ "value": 1
+ },
+ {
+ "name": "ASSOCIATED_CURRENT_USER",
+ "value": 2
+ },
+ {
+ "name": "ASSOCIATED_ANOTHER_USER",
+ "value": 3
+ },
+ {
+ "name": "NOT_ASSOCIATED_ANY_USER",
+ "value": 4
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "ErrorState",
+ "values": [
+ {
+ "name": "OTHER_ERROR_STATE",
+ "value": -1
+ },
+ {
+ "name": "NOT_AVAILABLE_DISABLED",
+ "value": -2
+ },
+ {
+ "name": "NOT_AVAILABLE_SPEED_LOW",
+ "value": -3
+ },
+ {
+ "name": "NOT_AVAILABLE_SPEED_HIGH",
+ "value": -4
+ },
+ {
+ "name": "NOT_AVAILABLE_POOR_VISIBILITY",
+ "value": -5
+ },
+ {
+ "name": "NOT_AVAILABLE_SAFETY",
+ "value": -6
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
"name": "VehicleIgnitionState",
"values": [
{
@@ -2365,173 +868,302 @@
]
},
{
- "name": "VehicleHwKeyInputAction",
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VehicleAreaSeat",
"values": [
{
- "name": "ACTION_DOWN",
- "value": 0
- },
- {
- "name": "ACTION_UP",
- "value": 1
- }
- ]
- },
- {
- "name": "DiagnosticIntegerSensorIndex",
- "values": [
- {
- "name": "FUEL_SYSTEM_STATUS",
- "value": 0
- },
- {
- "name": "MALFUNCTION_INDICATOR_LIGHT_ON",
+ "name": "ROW_1_LEFT",
"value": 1
},
{
- "name": "IGNITION_MONITORS_SUPPORTED",
+ "name": "ROW_1_CENTER",
"value": 2
},
{
- "name": "IGNITION_SPECIFIC_MONITORS",
- "value": 3
- },
- {
- "name": "INTAKE_AIR_TEMPERATURE",
+ "name": "ROW_1_RIGHT",
"value": 4
},
{
- "name": "COMMANDED_SECONDARY_AIR_STATUS",
- "value": 5
- },
- {
- "name": "NUM_OXYGEN_SENSORS_PRESENT",
- "value": 6
- },
- {
- "name": "RUNTIME_SINCE_ENGINE_START",
- "value": 7
- },
- {
- "name": "DISTANCE_TRAVELED_WITH_MALFUNCTION_INDICATOR_LIGHT_ON",
- "value": 8
- },
- {
- "name": "WARMUPS_SINCE_CODES_CLEARED",
- "value": 9
- },
- {
- "name": "DISTANCE_TRAVELED_SINCE_CODES_CLEARED",
- "value": 10
- },
- {
- "name": "ABSOLUTE_BAROMETRIC_PRESSURE",
- "value": 11
- },
- {
- "name": "CONTROL_MODULE_VOLTAGE",
- "value": 12
- },
- {
- "name": "AMBIENT_AIR_TEMPERATURE",
- "value": 13
- },
- {
- "name": "TIME_WITH_MALFUNCTION_LIGHT_ON",
- "value": 14
- },
- {
- "name": "TIME_SINCE_TROUBLE_CODES_CLEARED",
- "value": 15
- },
- {
- "name": "MAX_FUEL_AIR_EQUIVALENCE_RATIO",
+ "name": "ROW_2_LEFT",
"value": 16
},
{
- "name": "MAX_OXYGEN_SENSOR_VOLTAGE",
- "value": 17
+ "name": "ROW_2_CENTER",
+ "value": 32
},
{
- "name": "MAX_OXYGEN_SENSOR_CURRENT",
- "value": 18
+ "name": "ROW_2_RIGHT",
+ "value": 64
},
{
- "name": "MAX_INTAKE_MANIFOLD_ABSOLUTE_PRESSURE",
- "value": 19
+ "name": "ROW_3_LEFT",
+ "value": 256
},
{
- "name": "MAX_AIR_FLOW_RATE_FROM_MASS_AIR_FLOW_SENSOR",
- "value": 20
+ "name": "ROW_3_CENTER",
+ "value": 512
},
{
- "name": "FUEL_TYPE",
- "value": 21
- },
- {
- "name": "FUEL_RAIL_ABSOLUTE_PRESSURE",
- "value": 22
- },
- {
- "name": "ENGINE_OIL_TEMPERATURE",
- "value": 23
- },
- {
- "name": "DRIVER_DEMAND_PERCENT_TORQUE",
- "value": 24
- },
- {
- "name": "ENGINE_ACTUAL_PERCENT_TORQUE",
- "value": 25
- },
- {
- "name": "ENGINE_REFERENCE_PERCENT_TORQUE",
- "value": 26
- },
- {
- "name": "ENGINE_PERCENT_TORQUE_DATA_IDLE",
- "value": 27
- },
- {
- "name": "ENGINE_PERCENT_TORQUE_DATA_POINT1",
- "value": 28
- },
- {
- "name": "ENGINE_PERCENT_TORQUE_DATA_POINT2",
- "value": 29
- },
- {
- "name": "ENGINE_PERCENT_TORQUE_DATA_POINT3",
- "value": 30
- },
- {
- "name": "ENGINE_PERCENT_TORQUE_DATA_POINT4",
- "value": 31
+ "name": "ROW_3_RIGHT",
+ "value": 1024
}
]
},
{
- "name": "UserIdentificationAssociationValue",
+ "package": "android.hardware.automotive.vehicle",
+ "name": "EvsServiceRequestIndex",
"values": [
{
- "name": "UNKNOWN",
+ "name": "TYPE",
+ "value": 0
+ },
+ {
+ "name": "STATE",
+ "value": 1
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "LaneDepartureWarningState",
+ "values": [
+ {
+ "name": "OTHER",
+ "value": 0
+ },
+ {
+ "name": "NO_WARNING",
"value": 1
},
{
- "name": "ASSOCIATED_CURRENT_USER",
+ "name": "WARNING_LEFT",
"value": 2
},
{
- "name": "ASSOCIATED_ANOTHER_USER",
+ "name": "WARNING_RIGHT",
"value": 3
- },
- {
- "name": "NOT_ASSOCIATED_ANY_USER",
- "value": 4
}
]
},
{
+ "package": "android.hardware.automotive.vehicle",
+ "name": "Obd2SparkIgnitionMonitors",
+ "values": []
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "CreateUserStatus",
+ "values": [
+ {
+ "name": "SUCCESS",
+ "value": 1
+ },
+ {
+ "name": "FAILURE",
+ "value": 2
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VehiclePropertyGroup",
+ "values": [
+ {
+ "name": "SYSTEM",
+ "value": 268435456
+ },
+ {
+ "name": "VENDOR",
+ "value": 536870912
+ },
+ {
+ "name": "MASK",
+ "value": 4026531840
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VehicleVendorPermission",
+ "values": [
+ {
+ "name": "PERMISSION_DEFAULT",
+ "value": 0
+ },
+ {
+ "name": "PERMISSION_SET_VENDOR_CATEGORY_WINDOW",
+ "value": 1
+ },
+ {
+ "name": "PERMISSION_GET_VENDOR_CATEGORY_WINDOW",
+ "value": 2
+ },
+ {
+ "name": "PERMISSION_SET_VENDOR_CATEGORY_DOOR",
+ "value": 3
+ },
+ {
+ "name": "PERMISSION_GET_VENDOR_CATEGORY_DOOR",
+ "value": 4
+ },
+ {
+ "name": "PERMISSION_SET_VENDOR_CATEGORY_SEAT",
+ "value": 5
+ },
+ {
+ "name": "PERMISSION_GET_VENDOR_CATEGORY_SEAT",
+ "value": 6
+ },
+ {
+ "name": "PERMISSION_SET_VENDOR_CATEGORY_MIRROR",
+ "value": 7
+ },
+ {
+ "name": "PERMISSION_GET_VENDOR_CATEGORY_MIRROR",
+ "value": 8
+ },
+ {
+ "name": "PERMISSION_SET_VENDOR_CATEGORY_INFO",
+ "value": 9
+ },
+ {
+ "name": "PERMISSION_GET_VENDOR_CATEGORY_INFO",
+ "value": 10
+ },
+ {
+ "name": "PERMISSION_SET_VENDOR_CATEGORY_ENGINE",
+ "value": 11
+ },
+ {
+ "name": "PERMISSION_GET_VENDOR_CATEGORY_ENGINE",
+ "value": 12
+ },
+ {
+ "name": "PERMISSION_SET_VENDOR_CATEGORY_HVAC",
+ "value": 13
+ },
+ {
+ "name": "PERMISSION_GET_VENDOR_CATEGORY_HVAC",
+ "value": 14
+ },
+ {
+ "name": "PERMISSION_SET_VENDOR_CATEGORY_LIGHT",
+ "value": 15
+ },
+ {
+ "name": "PERMISSION_GET_VENDOR_CATEGORY_LIGHT",
+ "value": 16
+ },
+ {
+ "name": "PERMISSION_SET_VENDOR_CATEGORY_1",
+ "value": 65536
+ },
+ {
+ "name": "PERMISSION_GET_VENDOR_CATEGORY_1",
+ "value": 69632
+ },
+ {
+ "name": "PERMISSION_SET_VENDOR_CATEGORY_2",
+ "value": 131072
+ },
+ {
+ "name": "PERMISSION_GET_VENDOR_CATEGORY_2",
+ "value": 135168
+ },
+ {
+ "name": "PERMISSION_SET_VENDOR_CATEGORY_3",
+ "value": 196608
+ },
+ {
+ "name": "PERMISSION_GET_VENDOR_CATEGORY_3",
+ "value": 200704
+ },
+ {
+ "name": "PERMISSION_SET_VENDOR_CATEGORY_4",
+ "value": 262144
+ },
+ {
+ "name": "PERMISSION_GET_VENDOR_CATEGORY_4",
+ "value": 266240
+ },
+ {
+ "name": "PERMISSION_SET_VENDOR_CATEGORY_5",
+ "value": 327680
+ },
+ {
+ "name": "PERMISSION_GET_VENDOR_CATEGORY_5",
+ "value": 331776
+ },
+ {
+ "name": "PERMISSION_SET_VENDOR_CATEGORY_6",
+ "value": 393216
+ },
+ {
+ "name": "PERMISSION_GET_VENDOR_CATEGORY_6",
+ "value": 397312
+ },
+ {
+ "name": "PERMISSION_SET_VENDOR_CATEGORY_7",
+ "value": 458752
+ },
+ {
+ "name": "PERMISSION_GET_VENDOR_CATEGORY_7",
+ "value": 462848
+ },
+ {
+ "name": "PERMISSION_SET_VENDOR_CATEGORY_8",
+ "value": 524288
+ },
+ {
+ "name": "PERMISSION_GET_VENDOR_CATEGORY_8",
+ "value": 528384
+ },
+ {
+ "name": "PERMISSION_SET_VENDOR_CATEGORY_9",
+ "value": 589824
+ },
+ {
+ "name": "PERMISSION_GET_VENDOR_CATEGORY_9",
+ "value": 593920
+ },
+ {
+ "name": "PERMISSION_SET_VENDOR_CATEGORY_10",
+ "value": 655360
+ },
+ {
+ "name": "PERMISSION_GET_VENDOR_CATEGORY_10",
+ "value": 659456
+ },
+ {
+ "name": "PERMISSION_NOT_ACCESSIBLE",
+ "value": 4026531840
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VmsOfferingMessageIntegerValuesIndex",
+ "values": [
+ {
+ "name": "MESSAGE_TYPE",
+ "value": 0
+ },
+ {
+ "name": "PUBLISHER_ID",
+ "value": 1
+ },
+ {
+ "name": "NUMBER_OF_OFFERS",
+ "value": 2
+ },
+ {
+ "name": "OFFERING_START",
+ "value": 3
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
"name": "VmsBaseMessageIntegerValuesIndex",
"values": [
{
@@ -2541,6 +1173,473 @@
]
},
{
+ "package": "android.hardware.automotive.vehicle",
+ "name": "Obd2CompressionIgnitionMonitors",
+ "values": []
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "LaneKeepAssistState",
+ "values": [
+ {
+ "name": "OTHER",
+ "value": 0
+ },
+ {
+ "name": "ENABLED",
+ "value": 1
+ },
+ {
+ "name": "ACTIVATED_STEER_LEFT",
+ "value": 2
+ },
+ {
+ "name": "ACTIVATED_STEER_RIGHT",
+ "value": 3
+ },
+ {
+ "name": "USER_OVERRIDE",
+ "value": 4
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VehicleHwMotionInputAction",
+ "values": [
+ {
+ "name": "ACTION_DOWN",
+ "value": 0
+ },
+ {
+ "name": "ACTION_UP",
+ "value": 1
+ },
+ {
+ "name": "ACTION_MOVE",
+ "value": 2
+ },
+ {
+ "name": "ACTION_CANCEL",
+ "value": 3
+ },
+ {
+ "name": "ACTION_OUTSIDE",
+ "value": 4
+ },
+ {
+ "name": "ACTION_POINTER_DOWN",
+ "value": 5
+ },
+ {
+ "name": "ACTION_POINTER_UP",
+ "value": 6
+ },
+ {
+ "name": "ACTION_HOVER_MOVE",
+ "value": 7
+ },
+ {
+ "name": "ACTION_SCROLL",
+ "value": 8
+ },
+ {
+ "name": "ACTION_HOVER_ENTER",
+ "value": 9
+ },
+ {
+ "name": "ACTION_HOVER_EXIT",
+ "value": 10
+ },
+ {
+ "name": "ACTION_BUTTON_PRESS",
+ "value": 11
+ },
+ {
+ "name": "ACTION_BUTTON_RELEASE",
+ "value": 12
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VehicleApPowerStateConfigFlag",
+ "values": [
+ {
+ "name": "ENABLE_DEEP_SLEEP_FLAG",
+ "value": 1
+ },
+ {
+ "name": "CONFIG_SUPPORT_TIMER_POWER_ON_FLAG",
+ "value": 2
+ },
+ {
+ "name": "ENABLE_HIBERNATION_FLAG",
+ "value": 4
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "Obd2SecondaryAirStatus",
+ "values": [
+ {
+ "name": "UPSTREAM",
+ "value": 1
+ },
+ {
+ "name": "DOWNSTREAM_OF_CATALYCIC_CONVERTER",
+ "value": 2
+ },
+ {
+ "name": "FROM_OUTSIDE_OR_OFF",
+ "value": 4
+ },
+ {
+ "name": "PUMP_ON_FOR_DIAGNOSTICS",
+ "value": 8
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VmsPublisherInformationIntegerValuesIndex",
+ "values": [
+ {
+ "name": "MESSAGE_TYPE",
+ "value": 0
+ },
+ {
+ "name": "PUBLISHER_ID",
+ "value": 1
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VehicleApPowerStateReq",
+ "values": [
+ {
+ "name": "ON",
+ "value": 0
+ },
+ {
+ "name": "SHUTDOWN_PREPARE",
+ "value": 1
+ },
+ {
+ "name": "CANCEL_SHUTDOWN",
+ "value": 2
+ },
+ {
+ "name": "FINISHED",
+ "value": 3
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "WindshieldWipersState",
+ "values": [
+ {
+ "name": "OTHER",
+ "value": 0
+ },
+ {
+ "name": "OFF",
+ "value": 1
+ },
+ {
+ "name": "ON",
+ "value": 2
+ },
+ {
+ "name": "SERVICE",
+ "value": 3
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "LaneCenteringAssistState",
+ "values": [
+ {
+ "name": "OTHER",
+ "value": 0
+ },
+ {
+ "name": "ENABLED",
+ "value": 1
+ },
+ {
+ "name": "ACTIVATION_REQUESTED",
+ "value": 2
+ },
+ {
+ "name": "ACTIVATED",
+ "value": 3
+ },
+ {
+ "name": "USER_OVERRIDE",
+ "value": 4
+ },
+ {
+ "name": "FORCED_DEACTIVATION_WARNING",
+ "value": 5
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "UserIdentificationAssociationSetValue",
+ "values": [
+ {
+ "name": "INVALID",
+ "value": 0
+ },
+ {
+ "name": "ASSOCIATE_CURRENT_USER",
+ "value": 1
+ },
+ {
+ "name": "DISASSOCIATE_CURRENT_USER",
+ "value": 2
+ },
+ {
+ "name": "DISASSOCIATE_ALL_USERS",
+ "value": 3
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "Obd2CommonIgnitionMonitors",
+ "values": []
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VehicleHwMotionInputSource",
+ "values": [
+ {
+ "name": "SOURCE_UNKNOWN",
+ "value": 0
+ },
+ {
+ "name": "SOURCE_KEYBOARD",
+ "value": 1
+ },
+ {
+ "name": "SOURCE_DPAD",
+ "value": 2
+ },
+ {
+ "name": "SOURCE_GAMEPAD",
+ "value": 3
+ },
+ {
+ "name": "SOURCE_TOUCHSCREEN",
+ "value": 4
+ },
+ {
+ "name": "SOURCE_MOUSE",
+ "value": 5
+ },
+ {
+ "name": "SOURCE_STYLUS",
+ "value": 6
+ },
+ {
+ "name": "SOURCE_BLUETOOTH_STYLUS",
+ "value": 7
+ },
+ {
+ "name": "SOURCE_TRACKBALL",
+ "value": 8
+ },
+ {
+ "name": "SOURCE_MOUSE_RELATIVE",
+ "value": 9
+ },
+ {
+ "name": "SOURCE_TOUCHPAD",
+ "value": 10
+ },
+ {
+ "name": "SOURCE_TOUCH_NAVIGATION",
+ "value": 11
+ },
+ {
+ "name": "SOURCE_ROTARY_ENCODER",
+ "value": 12
+ },
+ {
+ "name": "SOURCE_JOYSTICK",
+ "value": 13
+ },
+ {
+ "name": "SOURCE_HDMI",
+ "value": 14
+ },
+ {
+ "name": "SOURCE_SENSOR",
+ "value": 15
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "ForwardCollisionWarningState",
+ "values": [
+ {
+ "name": "OTHER",
+ "value": 0
+ },
+ {
+ "name": "NO_WARNING",
+ "value": 1
+ },
+ {
+ "name": "WARNING",
+ "value": 2
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VehicleArea",
+ "values": [
+ {
+ "name": "GLOBAL",
+ "value": 16777216
+ },
+ {
+ "name": "WINDOW",
+ "value": 50331648
+ },
+ {
+ "name": "MIRROR",
+ "value": 67108864
+ },
+ {
+ "name": "SEAT",
+ "value": 83886080
+ },
+ {
+ "name": "DOOR",
+ "value": 100663296
+ },
+ {
+ "name": "WHEEL",
+ "value": 117440512
+ },
+ {
+ "name": "MASK",
+ "value": 251658240
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "PortLocationType",
+ "values": [
+ {
+ "name": "UNKNOWN",
+ "value": 0
+ },
+ {
+ "name": "FRONT_LEFT",
+ "value": 1
+ },
+ {
+ "name": "FRONT_RIGHT",
+ "value": 2
+ },
+ {
+ "name": "REAR_RIGHT",
+ "value": 3
+ },
+ {
+ "name": "REAR_LEFT",
+ "value": 4
+ },
+ {
+ "name": "FRONT",
+ "value": 5
+ },
+ {
+ "name": "REAR",
+ "value": 6
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "InitialUserInfoResponseAction",
+ "values": [
+ {
+ "name": "DEFAULT",
+ "value": 0
+ },
+ {
+ "name": "SWITCH",
+ "value": 1
+ },
+ {
+ "name": "CREATE",
+ "value": 2
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VmsSubscriptionsStateIntegerValuesIndex",
+ "values": [
+ {
+ "name": "MESSAGE_TYPE",
+ "value": 0
+ },
+ {
+ "name": "SEQUENCE_NUMBER",
+ "value": 1
+ },
+ {
+ "name": "NUMBER_OF_LAYERS",
+ "value": 2
+ },
+ {
+ "name": "NUMBER_OF_ASSOCIATED_LAYERS",
+ "value": 3
+ },
+ {
+ "name": "SUBSCRIPTIONS_START",
+ "value": 4
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "CruiseControlType",
+ "values": [
+ {
+ "name": "OTHER",
+ "value": 0
+ },
+ {
+ "name": "STANDARD",
+ "value": 1
+ },
+ {
+ "name": "ADAPTIVE",
+ "value": 2
+ },
+ {
+ "name": "PREDICTIVE",
+ "value": 3
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
"name": "DiagnosticFloatSensorIndex",
"values": [
{
@@ -2830,7 +1929,40 @@
]
},
{
- "name": "VmsMessageWithLayerAndPublisherIdIntegerValuesIndex",
+ "package": "android.hardware.automotive.vehicle",
+ "name": "GsrComplianceRequirementType",
+ "values": [
+ {
+ "name": "GSR_COMPLIANCE_NOT_REQUIRED",
+ "value": 0
+ },
+ {
+ "name": "GSR_COMPLIANCE_REQUIRED_V1",
+ "value": 1
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VehicleLightState",
+ "values": [
+ {
+ "name": "OFF",
+ "value": 0
+ },
+ {
+ "name": "ON",
+ "value": 1
+ },
+ {
+ "name": "DAYTIME_RUNNING",
+ "value": 2
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VmsMessageWithLayerIntegerValuesIndex",
"values": [
{
"name": "MESSAGE_TYPE",
@@ -2847,92 +1979,61 @@
{
"name": "LAYER_VERSION",
"value": 3
- },
- {
- "name": "PUBLISHER_ID",
- "value": 4
}
]
},
{
- "name": "FuelType",
+ "package": "android.hardware.automotive.vehicle",
+ "name": "EvRegenerativeBrakingState",
"values": [
{
- "name": "FUEL_TYPE_UNKNOWN",
+ "name": "UNKNOWN",
"value": 0
},
{
- "name": "FUEL_TYPE_UNLEADED",
+ "name": "DISABLED",
"value": 1
},
{
- "name": "FUEL_TYPE_LEADED",
+ "name": "PARTIALLY_ENABLED",
"value": 2
},
{
- "name": "FUEL_TYPE_DIESEL_1",
- "value": 3
- },
- {
- "name": "FUEL_TYPE_DIESEL_2",
- "value": 4
- },
- {
- "name": "FUEL_TYPE_BIODIESEL",
- "value": 5
- },
- {
- "name": "FUEL_TYPE_E85",
- "value": 6
- },
- {
- "name": "FUEL_TYPE_LPG",
- "value": 7
- },
- {
- "name": "FUEL_TYPE_CNG",
- "value": 8
- },
- {
- "name": "FUEL_TYPE_LNG",
- "value": 9
- },
- {
- "name": "FUEL_TYPE_ELECTRIC",
- "value": 10
- },
- {
- "name": "FUEL_TYPE_HYDROGEN",
- "value": 11
- },
- {
- "name": "FUEL_TYPE_OTHER",
- "value": 12
- }
- ]
- },
- {
- "name": "VehicleApPowerStateReq",
- "values": [
- {
- "name": "ON",
- "value": 0
- },
- {
- "name": "SHUTDOWN_PREPARE",
- "value": 1
- },
- {
- "name": "CANCEL_SHUTDOWN",
- "value": 2
- },
- {
- "name": "FINISHED",
+ "name": "FULLY_ENABLED",
"value": 3
}
]
},
{
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VehicleApPowerStateReqIndex",
+ "values": [
+ {
+ "name": "STATE",
+ "value": 0
+ },
+ {
+ "name": "ADDITIONAL",
+ "value": 1
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "RotaryInputType",
+ "values": [
+ {
+ "name": "ROTARY_INPUT_TYPE_SYSTEM_NAVIGATION",
+ "value": 0
+ },
+ {
+ "name": "ROTARY_INPUT_TYPE_AUDIO_VOLUME",
+ "value": 1
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
"name": "VmsMessageType",
"values": [
{
@@ -3006,96 +2107,417 @@
]
},
{
- "name": "Obd2CommonIgnitionMonitors",
- "values": []
- },
- {
- "name": "UserIdentificationAssociationType",
+ "package": "android.hardware.automotive.vehicle",
+ "name": "FuelType",
"values": [
{
- "name": "INVALID",
+ "name": "FUEL_TYPE_UNKNOWN",
"value": 0
},
{
- "name": "KEY_FOB",
+ "name": "FUEL_TYPE_UNLEADED",
"value": 1
},
{
- "name": "CUSTOM_1",
- "value": 101
+ "name": "FUEL_TYPE_LEADED",
+ "value": 2
},
{
- "name": "CUSTOM_2",
- "value": 102
+ "name": "FUEL_TYPE_DIESEL_1",
+ "value": 3
},
{
- "name": "CUSTOM_3",
- "value": 103
+ "name": "FUEL_TYPE_DIESEL_2",
+ "value": 4
},
{
- "name": "CUSTOM_4",
- "value": 104
+ "name": "FUEL_TYPE_BIODIESEL",
+ "value": 5
+ },
+ {
+ "name": "FUEL_TYPE_E85",
+ "value": 6
+ },
+ {
+ "name": "FUEL_TYPE_LPG",
+ "value": 7
+ },
+ {
+ "name": "FUEL_TYPE_CNG",
+ "value": 8
+ },
+ {
+ "name": "FUEL_TYPE_LNG",
+ "value": 9
+ },
+ {
+ "name": "FUEL_TYPE_ELECTRIC",
+ "value": 10
+ },
+ {
+ "name": "FUEL_TYPE_HYDROGEN",
+ "value": 11
+ },
+ {
+ "name": "FUEL_TYPE_OTHER",
+ "value": 12
}
]
},
{
- "name": "EvConnectorType",
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VehicleSeatOccupancyState",
"values": [
{
"name": "UNKNOWN",
"value": 0
},
{
- "name": "IEC_TYPE_1_AC",
+ "name": "VACANT",
"value": 1
},
{
- "name": "IEC_TYPE_2_AC",
+ "name": "OCCUPIED",
"value": 2
- },
- {
- "name": "IEC_TYPE_3_AC",
- "value": 3
- },
- {
- "name": "IEC_TYPE_4_DC",
- "value": 4
- },
- {
- "name": "IEC_TYPE_1_CCS_DC",
- "value": 5
- },
- {
- "name": "IEC_TYPE_2_CCS_DC",
- "value": 6
- },
- {
- "name": "TESLA_ROADSTER",
- "value": 7
- },
- {
- "name": "TESLA_HPWC",
- "value": 8
- },
- {
- "name": "TESLA_SUPERCHARGER",
- "value": 9
- },
- {
- "name": "GBT_AC",
- "value": 10
- },
- {
- "name": "GBT_DC",
- "value": 11
- },
- {
- "name": "OTHER",
- "value": 101
}
]
},
{
+ "package": "android.hardware.automotive.vehicle",
+ "name": "EvStoppingMode",
+ "values": [
+ {
+ "name": "OTHER",
+ "value": 0
+ },
+ {
+ "name": "CREEP",
+ "value": 1
+ },
+ {
+ "name": "ROLL",
+ "value": 2
+ },
+ {
+ "name": "HOLD",
+ "value": 3
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "AutomaticEmergencyBrakingState",
+ "values": [
+ {
+ "name": "OTHER",
+ "value": 0
+ },
+ {
+ "name": "ENABLED",
+ "value": 1
+ },
+ {
+ "name": "ACTIVATED",
+ "value": 2
+ },
+ {
+ "name": "USER_OVERRIDE",
+ "value": 3
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VehicleApPowerStateReport",
+ "values": [
+ {
+ "name": "WAIT_FOR_VHAL",
+ "value": 1
+ },
+ {
+ "name": "DEEP_SLEEP_ENTRY",
+ "value": 2
+ },
+ {
+ "name": "DEEP_SLEEP_EXIT",
+ "value": 3
+ },
+ {
+ "name": "SHUTDOWN_POSTPONE",
+ "value": 4
+ },
+ {
+ "name": "SHUTDOWN_START",
+ "value": 5
+ },
+ {
+ "name": "ON",
+ "value": 6
+ },
+ {
+ "name": "SHUTDOWN_PREPARE",
+ "value": 7
+ },
+ {
+ "name": "SHUTDOWN_CANCELLED",
+ "value": 8
+ },
+ {
+ "name": "HIBERNATION_ENTRY",
+ "value": 9
+ },
+ {
+ "name": "HIBERNATION_EXIT",
+ "value": 10
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "SwitchUserMessageType",
+ "values": [
+ {
+ "name": "UNKNOWN",
+ "value": 0
+ },
+ {
+ "name": "LEGACY_ANDROID_SWITCH",
+ "value": 1
+ },
+ {
+ "name": "ANDROID_SWITCH",
+ "value": 2
+ },
+ {
+ "name": "VEHICLE_RESPONSE",
+ "value": 3
+ },
+ {
+ "name": "VEHICLE_REQUEST",
+ "value": 4
+ },
+ {
+ "name": "ANDROID_POST_SWITCH",
+ "value": 5
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VehicleAreaMirror",
+ "values": [
+ {
+ "name": "DRIVER_LEFT",
+ "value": 1
+ },
+ {
+ "name": "DRIVER_RIGHT",
+ "value": 2
+ },
+ {
+ "name": "DRIVER_CENTER",
+ "value": 4
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "TrailerState",
+ "values": [
+ {
+ "name": "UNKNOWN",
+ "value": 0
+ },
+ {
+ "name": "NOT_PRESENT",
+ "value": 1
+ },
+ {
+ "name": "PRESENT",
+ "value": 2
+ },
+ {
+ "name": "ERROR",
+ "value": 3
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "EvsServiceState",
+ "values": [
+ {
+ "name": "OFF",
+ "value": 0
+ },
+ {
+ "name": "ON",
+ "value": 1
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VehicleHwKeyInputAction",
+ "values": [
+ {
+ "name": "ACTION_DOWN",
+ "value": 0
+ },
+ {
+ "name": "ACTION_UP",
+ "value": 1
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "BlindSpotWarningState",
+ "values": [
+ {
+ "name": "OTHER",
+ "value": 0
+ },
+ {
+ "name": "NO_WARNING",
+ "value": 1
+ },
+ {
+ "name": "WARNING",
+ "value": 2
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VehicleGear",
+ "values": [
+ {
+ "name": "GEAR_UNKNOWN",
+ "value": 0
+ },
+ {
+ "name": "GEAR_NEUTRAL",
+ "value": 1
+ },
+ {
+ "name": "GEAR_REVERSE",
+ "value": 2
+ },
+ {
+ "name": "GEAR_PARK",
+ "value": 4
+ },
+ {
+ "name": "GEAR_DRIVE",
+ "value": 8
+ },
+ {
+ "name": "GEAR_1",
+ "value": 16
+ },
+ {
+ "name": "GEAR_2",
+ "value": 32
+ },
+ {
+ "name": "GEAR_3",
+ "value": 64
+ },
+ {
+ "name": "GEAR_4",
+ "value": 128
+ },
+ {
+ "name": "GEAR_5",
+ "value": 256
+ },
+ {
+ "name": "GEAR_6",
+ "value": 512
+ },
+ {
+ "name": "GEAR_7",
+ "value": 1024
+ },
+ {
+ "name": "GEAR_8",
+ "value": 2048
+ },
+ {
+ "name": "GEAR_9",
+ "value": 4096
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VmsStartSessionMessageIntegerValuesIndex",
+ "values": [
+ {
+ "name": "MESSAGE_TYPE",
+ "value": 0
+ },
+ {
+ "name": "SERVICE_ID",
+ "value": 1
+ },
+ {
+ "name": "CLIENT_ID",
+ "value": 2
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "Obd2FuelSystemStatus",
+ "values": [
+ {
+ "name": "OPEN_INSUFFICIENT_ENGINE_TEMPERATURE",
+ "value": 1
+ },
+ {
+ "name": "CLOSED_LOOP",
+ "value": 2
+ },
+ {
+ "name": "OPEN_ENGINE_LOAD_OR_DECELERATION",
+ "value": 4
+ },
+ {
+ "name": "OPEN_SYSTEM_FAILURE",
+ "value": 8
+ },
+ {
+ "name": "CLOSED_LOOP_BUT_FEEDBACK_FAULT",
+ "value": 16
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "ElectronicTollCollectionCardStatus",
+ "values": [
+ {
+ "name": "UNKNOWN",
+ "value": 0
+ },
+ {
+ "name": "ELECTRONIC_TOLL_COLLECTION_CARD_VALID",
+ "value": 1
+ },
+ {
+ "name": "ELECTRONIC_TOLL_COLLECTION_CARD_INVALID",
+ "value": 2
+ },
+ {
+ "name": "ELECTRONIC_TOLL_COLLECTION_CARD_NOT_INSERTED",
+ "value": 3
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
"name": "VehicleApPowerStateShutdownParam",
"values": [
{
@@ -3125,271 +2547,53 @@
]
},
{
- "name": "VmsOfferingMessageIntegerValuesIndex",
+ "package": "android.hardware.automotive.vehicle",
+ "name": "CustomInputType",
"values": [
{
- "name": "MESSAGE_TYPE",
- "value": 0
+ "name": "CUSTOM_EVENT_F1",
+ "value": 1001
},
{
- "name": "PUBLISHER_ID",
- "value": 1
+ "name": "CUSTOM_EVENT_F2",
+ "value": 1002
},
{
- "name": "NUMBER_OF_OFFERS",
- "value": 2
+ "name": "CUSTOM_EVENT_F3",
+ "value": 1003
},
{
- "name": "OFFERING_START",
- "value": 3
+ "name": "CUSTOM_EVENT_F4",
+ "value": 1004
+ },
+ {
+ "name": "CUSTOM_EVENT_F5",
+ "value": 1005
+ },
+ {
+ "name": "CUSTOM_EVENT_F6",
+ "value": 1006
+ },
+ {
+ "name": "CUSTOM_EVENT_F7",
+ "value": 1007
+ },
+ {
+ "name": "CUSTOM_EVENT_F8",
+ "value": 1008
+ },
+ {
+ "name": "CUSTOM_EVENT_F9",
+ "value": 1009
+ },
+ {
+ "name": "CUSTOM_EVENT_F10",
+ "value": 1010
}
]
},
{
- "name": "VehicleAreaSeat",
- "values": [
- {
- "name": "ROW_1_LEFT",
- "value": 1
- },
- {
- "name": "ROW_1_CENTER",
- "value": 2
- },
- {
- "name": "ROW_1_RIGHT",
- "value": 4
- },
- {
- "name": "ROW_2_LEFT",
- "value": 16
- },
- {
- "name": "ROW_2_CENTER",
- "value": 32
- },
- {
- "name": "ROW_2_RIGHT",
- "value": 64
- },
- {
- "name": "ROW_3_LEFT",
- "value": 256
- },
- {
- "name": "ROW_3_CENTER",
- "value": 512
- },
- {
- "name": "ROW_3_RIGHT",
- "value": 1024
- }
- ]
- },
- {
- "name": "VehicleVendorPermission",
- "values": [
- {
- "name": "PERMISSION_DEFAULT",
- "value": 0
- },
- {
- "name": "PERMISSION_SET_VENDOR_CATEGORY_WINDOW",
- "value": 1
- },
- {
- "name": "PERMISSION_GET_VENDOR_CATEGORY_WINDOW",
- "value": 2
- },
- {
- "name": "PERMISSION_SET_VENDOR_CATEGORY_DOOR",
- "value": 3
- },
- {
- "name": "PERMISSION_GET_VENDOR_CATEGORY_DOOR",
- "value": 4
- },
- {
- "name": "PERMISSION_SET_VENDOR_CATEGORY_SEAT",
- "value": 5
- },
- {
- "name": "PERMISSION_GET_VENDOR_CATEGORY_SEAT",
- "value": 6
- },
- {
- "name": "PERMISSION_SET_VENDOR_CATEGORY_MIRROR",
- "value": 7
- },
- {
- "name": "PERMISSION_GET_VENDOR_CATEGORY_MIRROR",
- "value": 8
- },
- {
- "name": "PERMISSION_SET_VENDOR_CATEGORY_INFO",
- "value": 9
- },
- {
- "name": "PERMISSION_GET_VENDOR_CATEGORY_INFO",
- "value": 10
- },
- {
- "name": "PERMISSION_SET_VENDOR_CATEGORY_ENGINE",
- "value": 11
- },
- {
- "name": "PERMISSION_GET_VENDOR_CATEGORY_ENGINE",
- "value": 12
- },
- {
- "name": "PERMISSION_SET_VENDOR_CATEGORY_HVAC",
- "value": 13
- },
- {
- "name": "PERMISSION_GET_VENDOR_CATEGORY_HVAC",
- "value": 14
- },
- {
- "name": "PERMISSION_SET_VENDOR_CATEGORY_LIGHT",
- "value": 15
- },
- {
- "name": "PERMISSION_GET_VENDOR_CATEGORY_LIGHT",
- "value": 16
- },
- {
- "name": "PERMISSION_SET_VENDOR_CATEGORY_1",
- "value": 65536
- },
- {
- "name": "PERMISSION_GET_VENDOR_CATEGORY_1",
- "value": 69632
- },
- {
- "name": "PERMISSION_SET_VENDOR_CATEGORY_2",
- "value": 131072
- },
- {
- "name": "PERMISSION_GET_VENDOR_CATEGORY_2",
- "value": 135168
- },
- {
- "name": "PERMISSION_SET_VENDOR_CATEGORY_3",
- "value": 196608
- },
- {
- "name": "PERMISSION_GET_VENDOR_CATEGORY_3",
- "value": 200704
- },
- {
- "name": "PERMISSION_SET_VENDOR_CATEGORY_4",
- "value": 262144
- },
- {
- "name": "PERMISSION_GET_VENDOR_CATEGORY_4",
- "value": 266240
- },
- {
- "name": "PERMISSION_SET_VENDOR_CATEGORY_5",
- "value": 327680
- },
- {
- "name": "PERMISSION_GET_VENDOR_CATEGORY_5",
- "value": 331776
- },
- {
- "name": "PERMISSION_SET_VENDOR_CATEGORY_6",
- "value": 393216
- },
- {
- "name": "PERMISSION_GET_VENDOR_CATEGORY_6",
- "value": 397312
- },
- {
- "name": "PERMISSION_SET_VENDOR_CATEGORY_7",
- "value": 458752
- },
- {
- "name": "PERMISSION_GET_VENDOR_CATEGORY_7",
- "value": 462848
- },
- {
- "name": "PERMISSION_SET_VENDOR_CATEGORY_8",
- "value": 524288
- },
- {
- "name": "PERMISSION_GET_VENDOR_CATEGORY_8",
- "value": 528384
- },
- {
- "name": "PERMISSION_SET_VENDOR_CATEGORY_9",
- "value": 589824
- },
- {
- "name": "PERMISSION_GET_VENDOR_CATEGORY_9",
- "value": 593920
- },
- {
- "name": "PERMISSION_SET_VENDOR_CATEGORY_10",
- "value": 655360
- },
- {
- "name": "PERMISSION_GET_VENDOR_CATEGORY_10",
- "value": 659456
- },
- {
- "name": "PERMISSION_NOT_ACCESSIBLE",
- "value": 4026531840
- }
- ]
- },
- {
- "name": "VehiclePropertyAccess",
- "values": [
- {
- "name": "NONE",
- "value": 0
- },
- {
- "name": "READ",
- "value": 1
- },
- {
- "name": "WRITE",
- "value": 2
- },
- {
- "name": "READ_WRITE",
- "value": 3
- }
- ]
- },
- {
- "name": "VmsAvailabilityStateIntegerValuesIndex",
- "values": [
- {
- "name": "MESSAGE_TYPE",
- "value": 0
- },
- {
- "name": "SEQUENCE_NUMBER",
- "value": 1
- },
- {
- "name": "NUMBER_OF_ASSOCIATED_LAYERS",
- "value": 2
- },
- {
- "name": "LAYERS_START",
- "value": 3
- }
- ]
- },
- {
- "name": "Obd2SparkIgnitionMonitors",
- "values": []
- },
- {
+ "package": "android.hardware.automotive.vehicle",
"name": "VehicleTurnSignal",
"values": [
{
@@ -3407,53 +2611,1992 @@
]
},
{
- "name": "VmsPublisherInformationIntegerValuesIndex",
+ "package": "android.hardware.automotive.vehicle",
+ "name": "ElectronicTollCollectionCardType",
+ "values": [
+ {
+ "name": "UNKNOWN",
+ "value": 0
+ },
+ {
+ "name": "JP_ELECTRONIC_TOLL_COLLECTION_CARD",
+ "value": 1
+ },
+ {
+ "name": "JP_ELECTRONIC_TOLL_COLLECTION_CARD_V2",
+ "value": 2
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VehicleProperty",
+ "values": [
+ {
+ "name": "Undefined property.",
+ "value": 0
+ },
+ {
+ "name": "VIN of vehicle",
+ "value": 286261504,
+ "change_mode": "VehiclePropertyChangeMode:STATIC",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "Manufacturer of vehicle",
+ "value": 286261505,
+ "change_mode": "VehiclePropertyChangeMode:STATIC",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "Model of vehicle",
+ "value": 286261506,
+ "change_mode": "VehiclePropertyChangeMode:STATIC",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "Model year of vehicle.",
+ "value": 289407235,
+ "change_mode": "VehiclePropertyChangeMode:STATIC",
+ "access": "VehiclePropertyAccess:READ",
+ "unit": "VehicleUnit:YEAR"
+ },
+ {
+ "name": "Fuel capacity of the vehicle in milliliters",
+ "value": 291504388,
+ "change_mode": "VehiclePropertyChangeMode:STATIC",
+ "access": "VehiclePropertyAccess:READ",
+ "unit": "VehicleUnit:MILLILITER"
+ },
+ {
+ "name": "List of fuels the vehicle may use.",
+ "value": 289472773,
+ "change_mode": "VehiclePropertyChangeMode:STATIC",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "FuelType"
+ },
+ {
+ "name": "Nominal battery capacity for EV or hybrid vehicle",
+ "value": 291504390,
+ "change_mode": "VehiclePropertyChangeMode:STATIC",
+ "access": "VehiclePropertyAccess:READ",
+ "unit": "VehicleUnit:WH"
+ },
+ {
+ "name": "List of connectors this EV may use",
+ "value": 289472775,
+ "change_mode": "VehiclePropertyChangeMode:STATIC",
+ "data_enum": "EvConnectorType",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "Fuel door location",
+ "value": 289407240,
+ "change_mode": "VehiclePropertyChangeMode:STATIC",
+ "data_enum": "PortLocationType",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "EV port location",
+ "value": 289407241,
+ "change_mode": "VehiclePropertyChangeMode:STATIC",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "PortLocationType"
+ },
+ {
+ "name": "INFO_DRIVER_SEAT",
+ "value": 356516106,
+ "change_mode": "VehiclePropertyChangeMode:STATIC",
+ "data_enum": "VehicleAreaSeat",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "Exterior dimensions of vehicle.",
+ "value": 289472779,
+ "change_mode": "VehiclePropertyChangeMode:STATIC",
+ "access": "VehiclePropertyAccess:READ",
+ "unit": "VehicleUnit:MILLIMETER"
+ },
+ {
+ "name": "Multiple EV port locations",
+ "value": 289472780,
+ "change_mode": "VehiclePropertyChangeMode:STATIC",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "PortLocationType"
+ },
+ {
+ "name": "Current odometer value of the vehicle",
+ "value": 291504644,
+ "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
+ "access": "VehiclePropertyAccess:READ",
+ "unit": "VehicleUnit:KILOMETER"
+ },
+ {
+ "name": "Speed of the vehicle",
+ "value": 291504647,
+ "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
+ "access": "VehiclePropertyAccess:READ",
+ "unit": "VehicleUnit:METER_PER_SEC"
+ },
+ {
+ "name": "Speed of the vehicle for displays",
+ "value": 291504648,
+ "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
+ "access": "VehiclePropertyAccess:READ",
+ "unit": "VehicleUnit:METER_PER_SEC"
+ },
+ {
+ "name": "Front bicycle model steering angle for vehicle",
+ "value": 291504649,
+ "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
+ "access": "VehiclePropertyAccess:READ",
+ "unit": "VehicleUnit:DEGREES"
+ },
+ {
+ "name": "Rear bicycle model steering angle for vehicle",
+ "value": 291504656,
+ "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
+ "access": "VehiclePropertyAccess:READ",
+ "unit": "VehicleUnit:DEGREES"
+ },
+ {
+ "name": "Temperature of engine coolant",
+ "value": 291504897,
+ "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
+ "access": "VehiclePropertyAccess:READ",
+ "unit": "VehicleUnit:CELSIUS"
+ },
+ {
+ "name": "Engine oil level",
+ "value": 289407747,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "VehicleOilLevel"
+ },
+ {
+ "name": "Temperature of engine oil",
+ "value": 291504900,
+ "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
+ "access": "VehiclePropertyAccess:READ",
+ "unit": "VehicleUnit:CELSIUS"
+ },
+ {
+ "name": "Engine rpm",
+ "value": 291504901,
+ "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
+ "access": "VehiclePropertyAccess:READ",
+ "unit": "VehicleUnit:RPM"
+ },
+ {
+ "name": "Reports wheel ticks",
+ "value": 290521862,
+ "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "FUEL_LEVEL",
+ "value": 291504903,
+ "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
+ "access": "VehiclePropertyAccess:READ",
+ "unit": "VehicleUnit:MILLILITER"
+ },
+ {
+ "name": "Fuel door open",
+ "value": 287310600,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Battery level for EV or hybrid vehicle",
+ "value": 291504905,
+ "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
+ "access": "VehiclePropertyAccess:READ",
+ "unit": "VehicleUnit:WH"
+ },
+ {
+ "name": "Current battery capacity for EV or hybrid vehicle",
+ "value": 291504909,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "unit": "VehicleUnit:WH"
+ },
+ {
+ "name": "EV charge port open",
+ "value": 287310602,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "EV charge port connected",
+ "value": 287310603,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "EV instantaneous charge rate in milliwatts",
+ "value": 291504908,
+ "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
+ "access": "VehiclePropertyAccess:READ",
+ "unit": "VehicleUnit:MW"
+ },
+ {
+ "name": "Range remaining",
+ "value": 291504904,
+ "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
+ "access": "VehiclePropertyAccess:READ_WRITE",
+ "unit": "VehicleUnit:METER"
+ },
+ {
+ "name": "Tire pressure",
+ "value": 392168201,
+ "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
+ "access": "VehiclePropertyAccess:READ",
+ "unit": "VehicleUnit:KILOPASCAL"
+ },
+ {
+ "name": "Critically low tire pressure",
+ "value": 392168202,
+ "change_mode": "VehiclePropertyChangeMode:STATIC",
+ "access": "VehiclePropertyAccess:READ",
+ "unit": "VehicleUnit:KILOPASCAL"
+ },
+ {
+ "name": "Represents feature for engine idle automatic stop.",
+ "value": 287310624,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Currently selected gear",
+ "value": 289408000,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "VehicleGear"
+ },
+ {
+ "name": "CURRENT_GEAR",
+ "value": 289408001,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "VehicleGear"
+ },
+ {
+ "name": "Parking brake state.",
+ "value": 287310850,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "PARKING_BRAKE_AUTO_APPLY",
+ "value": 287310851,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "Regenerative braking level of a electronic vehicle",
+ "value": 289408012,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Warning for fuel low level.",
+ "value": 287310853,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "Night mode",
+ "value": 287310855,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "State of the vehicles turn signals",
+ "value": 289408008,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "VehicleTurnSignal"
+ },
+ {
+ "name": "Represents ignition state",
+ "value": 289408009,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "VehicleIgnitionState"
+ },
+ {
+ "name": "ABS is active",
+ "value": 287310858,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "Traction Control is active",
+ "value": 287310859,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "Represents property for the current stopping mode of the vehicle.",
+ "value": 289408013,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE",
+ "data_enum": "EvStoppingMode"
+ },
+ {
+ "name": "HVAC Properties",
+ "value": 356517120,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Fan direction setting",
+ "value": 356517121,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE",
+ "data_enum": "VehicleHvacFanDirection"
+ },
+ {
+ "name": "HVAC current temperature.",
+ "value": 358614274,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "unit": "VehicleUnit:CELSIUS"
+ },
+ {
+ "name": "HVAC_TEMPERATURE_SET",
+ "value": 358614275,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE",
+ "unit": "VehicleUnit:CELSIUS"
+ },
+ {
+ "name": "HVAC_DEFROSTER",
+ "value": 320865540,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "HVAC_AC_ON",
+ "value": 354419973,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE",
+ "config_flags": "Supported"
+ },
+ {
+ "name": "HVAC_MAX_AC_ON",
+ "value": 354419974,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "HVAC_MAX_DEFROST_ON",
+ "value": 354419975,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "HVAC_RECIRC_ON",
+ "value": 354419976,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Enable temperature coupling between areas.",
+ "value": 354419977,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "HVAC_AUTO_ON",
+ "value": 354419978,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "HVAC_SEAT_TEMPERATURE",
+ "value": 356517131,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Side Mirror Heat",
+ "value": 339739916,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "HVAC_STEERING_WHEEL_HEAT",
+ "value": 289408269,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Temperature units for display",
+ "value": 289408270,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE",
+ "data_enum": "VehicleUnit"
+ },
+ {
+ "name": "Actual fan speed",
+ "value": 356517135,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "HVAC_POWER_ON",
+ "value": 354419984,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Fan Positions Available",
+ "value": 356582673,
+ "change_mode": "VehiclePropertyChangeMode:STATIC",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "VehicleHvacFanDirection"
+ },
+ {
+ "name": "HVAC_AUTO_RECIRC_ON",
+ "value": 354419986,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Seat ventilation",
+ "value": 356517139,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "HVAC_ELECTRIC_DEFROSTER_ON",
+ "value": 320865556,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Suggested values for setting HVAC temperature.",
+ "value": 291570965,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Distance units for display",
+ "value": 289408512,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE",
+ "data_enum": "VehicleUnit"
+ },
+ {
+ "name": "Fuel volume units for display",
+ "value": 289408513,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE",
+ "data_enum": "VehicleUnit"
+ },
+ {
+ "name": "Tire pressure units for display",
+ "value": 289408514,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE",
+ "data_enum": "VehicleUnit"
+ },
+ {
+ "name": "EV battery units for display",
+ "value": 289408515,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE",
+ "data_enum": "VehicleUnit"
+ },
+ {
+ "name": "Fuel consumption units for display",
+ "value": 287311364,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Speed units for display",
+ "value": 289408517,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "ANDROID_EPOCH_TIME",
+ "value": 290457094,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:WRITE",
+ "unit": "VehicleUnit:MILLI_SECS"
+ },
+ {
+ "name": "External encryption binding seed.",
+ "value": 292554247,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Outside temperature",
+ "value": 291505923,
+ "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
+ "access": "VehiclePropertyAccess:READ",
+ "unit": "VehicleUnit:CELSIUS"
+ },
+ {
+ "name": "Property to control power state of application processor",
+ "value": 289475072,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "Property to report power state of application processor",
+ "value": 289475073,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "AP_POWER_BOOTUP_REASON",
+ "value": 289409538,
+ "change_mode": "VehiclePropertyChangeMode:STATIC",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "Property to represent brightness of the display.",
+ "value": 289409539,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Property to represent brightness of the displays which are controlled separately.",
+ "value": 289475076,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "HW_KEY_INPUT",
+ "value": 289475088,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "config_flags": ""
+ },
+ {
+ "name": "HW_KEY_INPUT_V2",
+ "value": 367004177,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "config_flags": ""
+ },
+ {
+ "name": "HW_MOTION_INPUT",
+ "value": 367004178,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "config_flags": ""
+ },
+ {
+ "name": "HW_ROTARY_INPUT",
+ "value": 289475104,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "data_enum": "RotaryInputType",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "Defines a custom OEM partner input event.",
+ "value": 289475120,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "data_enum": "CustomInputType",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "DOOR_POS",
+ "value": 373295872,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Door move",
+ "value": 373295873,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Door lock",
+ "value": 371198722,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Door child lock feature enabled",
+ "value": 371198723,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Mirror Z Position",
+ "value": 339741504,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Mirror Z Move",
+ "value": 339741505,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Mirror Y Position",
+ "value": 339741506,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Mirror Y Move",
+ "value": 339741507,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Mirror Lock",
+ "value": 287312708,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Mirror Fold",
+ "value": 287312709,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Represents property for Mirror Auto Fold feature.",
+ "value": 337644358,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Represents property for Mirror Auto Tilt feature.",
+ "value": 337644359,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Seat memory select",
+ "value": 356518784,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:WRITE"
+ },
+ {
+ "name": "Seat memory set",
+ "value": 356518785,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:WRITE"
+ },
+ {
+ "name": "Seatbelt buckled",
+ "value": 354421634,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Seatbelt height position",
+ "value": 356518787,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Seatbelt height move",
+ "value": 356518788,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "SEAT_FORE_AFT_POS",
+ "value": 356518789,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "SEAT_FORE_AFT_MOVE",
+ "value": 356518790,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Seat backrest angle 1 position",
+ "value": 356518791,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Seat backrest angle 1 move",
+ "value": 356518792,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Seat backrest angle 2 position",
+ "value": 356518793,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Seat backrest angle 2 move",
+ "value": 356518794,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Seat height position",
+ "value": 356518795,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Seat height move",
+ "value": 356518796,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Seat depth position",
+ "value": 356518797,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Seat depth move",
+ "value": 356518798,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Seat tilt position",
+ "value": 356518799,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Seat tilt move",
+ "value": 356518800,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "SEAT_LUMBAR_FORE_AFT_POS",
+ "value": 356518801,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "SEAT_LUMBAR_FORE_AFT_MOVE",
+ "value": 356518802,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Lumbar side support position",
+ "value": 356518803,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Lumbar side support move",
+ "value": 356518804,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "SEAT_HEADREST_HEIGHT_POS",
+ "value": 289409941,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Headrest height position",
+ "value": 356518820,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Headrest height move",
+ "value": 356518806,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Headrest angle position",
+ "value": 356518807,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Headrest angle move",
+ "value": 356518808,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "SEAT_HEADREST_FORE_AFT_POS",
+ "value": 356518809,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "SEAT_HEADREST_FORE_AFT_MOVE",
+ "value": 356518810,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Represents property for the seat footwell lights state.",
+ "value": 356518811,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "VehicleLightState"
+ },
+ {
+ "name": "Represents property for the seat footwell lights switch.",
+ "value": 356518812,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE",
+ "data_enum": "VehicleLightSwitch"
+ },
+ {
+ "name": "Represents property for Seat easy access feature.",
+ "value": 354421661,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "SEAT_AIRBAG_ENABLED",
+ "value": 354421662,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "SEAT_CUSHION_SIDE_SUPPORT_POS",
+ "value": 356518815,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Represents property for movement direction and speed of seat cushion side support.",
+ "value": 356518816,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "SEAT_LUMBAR_VERTICAL_POS",
+ "value": 356518817,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Represents property for vertical movement direction and speed of seat lumbar support.",
+ "value": 356518818,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "SEAT_WALK_IN_POS",
+ "value": 356518819,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Seat Occupancy",
+ "value": 356518832,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "VehicleSeatOccupancyState"
+ },
+ {
+ "name": "Window Position",
+ "value": 322964416,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Window Move",
+ "value": 322964417,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Window Lock",
+ "value": 320867268,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "WINDSHIELD_WIPERS_PERIOD",
+ "value": 322964421,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "unit": "VehicleUnit:MILLI_SECS"
+ },
+ {
+ "name": "Windshield wipers state.",
+ "value": 322964422,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "WindshieldWipersState"
+ },
+ {
+ "name": "Windshield wipers switch.",
+ "value": 322964423,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE",
+ "data_enum": "WindshieldWipersSwitch"
+ },
+ {
+ "name": "Steering wheel depth position",
+ "value": 289410016,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Steering wheel depth movement",
+ "value": 289410017,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Steering wheel height position",
+ "value": 289410018,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Steering wheel height movement",
+ "value": 289410019,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Steering wheel theft lock feature enabled",
+ "value": 287312868,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Steering wheel locked",
+ "value": 287312869,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Steering wheel easy access feature enabled",
+ "value": 287312870,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Property that represents the current position of the glove box door.",
+ "value": 356518896,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Lock or unlock the glove box.",
+ "value": 354421745,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "VEHICLE_MAP_SERVICE",
+ "value": 299895808,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Characterization of inputs used for computing location.",
+ "value": 289410064,
+ "change_mode": "VehiclePropertyChangeMode:STATIC",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "OBD2 Live Sensor Data",
+ "value": 299896064,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "OBD2 Freeze Frame Sensor Data",
+ "value": 299896065,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "OBD2 Freeze Frame Information",
+ "value": 299896066,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "OBD2 Freeze Frame Clear",
+ "value": 299896067,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:WRITE"
+ },
+ {
+ "name": "Headlights State",
+ "value": 289410560,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "VehicleLightState"
+ },
+ {
+ "name": "High beam lights state",
+ "value": 289410561,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "VehicleLightState"
+ },
+ {
+ "name": "Fog light state",
+ "value": 289410562,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "VehicleLightState"
+ },
+ {
+ "name": "Hazard light status",
+ "value": 289410563,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "VehicleLightState"
+ },
+ {
+ "name": "Headlight switch",
+ "value": 289410576,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE",
+ "data_enum": "VehicleLightSwitch"
+ },
+ {
+ "name": "High beam light switch",
+ "value": 289410577,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE",
+ "data_enum": "VehicleLightSwitch"
+ },
+ {
+ "name": "Fog light switch",
+ "value": 289410578,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE",
+ "data_enum": "VehicleLightSwitch"
+ },
+ {
+ "name": "Hazard light switch",
+ "value": 289410579,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE",
+ "data_enum": "VehicleLightSwitch"
+ },
+ {
+ "name": "Cabin lights",
+ "value": 289410817,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "VehicleLightState"
+ },
+ {
+ "name": "Cabin lights switch",
+ "value": 289410818,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE",
+ "data_enum": "VehicleLightSwitch"
+ },
+ {
+ "name": "Reading lights",
+ "value": 356519683,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "VehicleLightState"
+ },
+ {
+ "name": "Reading lights switch",
+ "value": 356519684,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE",
+ "data_enum": "VehicleLightSwitch"
+ },
+ {
+ "name": "Steering wheel lights state",
+ "value": 289410828,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "VehicleLightState"
+ },
+ {
+ "name": "Steering wheel lights switch",
+ "value": 289410829,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE",
+ "data_enum": "VehicleLightSwitch"
+ },
+ {
+ "name": "Support customize permissions for vendor properties",
+ "value": 287313669,
+ "change_mode": "VehiclePropertyChangeMode:STATIC",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "Allow disabling optional featurs from vhal.",
+ "value": 286265094,
+ "change_mode": "VehiclePropertyChangeMode:STATIC",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "Defines the initial Android user to be used during initialization.",
+ "value": 299896583,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Defines a request to switch the foreground Android user.",
+ "value": 299896584,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Called by the Android System after an Android user was created.",
+ "value": 299896585,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Called by the Android System after an Android user was removed.",
+ "value": 299896586,
+ "change_mode": "VehiclePropertyChangeMode:STATIC",
+ "access": "VehiclePropertyAccess:WRITE"
+ },
+ {
+ "name": "USER_IDENTIFICATION_ASSOCIATION",
+ "value": 299896587,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "EVS_SERVICE_REQUEST",
+ "value": 289476368,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "Defines a request to apply power policy.",
+ "value": 286265121,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "POWER_POLICY_GROUP_REQ",
+ "value": 286265122,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "Notifies the current power policy to VHAL layer.",
+ "value": 286265123,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "WATCHDOG_ALIVE",
+ "value": 290459441,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:WRITE"
+ },
+ {
+ "name": "Defines a process terminated by car watchdog and the reason of termination.",
+ "value": 299896626,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:WRITE"
+ },
+ {
+ "name": "Defines an event that VHAL signals to car watchdog as a heartbeat.",
+ "value": 290459443,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "Starts the ClusterUI in cluster display.",
+ "value": 289410868,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "Changes the state of the cluster display.",
+ "value": 289476405,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "Reports the current display state and ClusterUI state.",
+ "value": 299896630,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:WRITE"
+ },
+ {
+ "name": "Requests to change the cluster display state to show some ClusterUI.",
+ "value": 289410871,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:WRITE"
+ },
+ {
+ "name": "Informs the current navigation state.",
+ "value": 292556600,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:WRITE"
+ },
+ {
+ "name": "Electronic Toll Collection card type.",
+ "value": 289410873,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "ElectronicTollCollectionCardType"
+ },
+ {
+ "name": "Electronic Toll Collection card status.",
+ "value": 289410874,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "ElectronicTollCollectionCardStatus"
+ },
+ {
+ "name": "Front fog lights state",
+ "value": 289410875,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "VehicleLightState"
+ },
+ {
+ "name": "Front fog lights switch",
+ "value": 289410876,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE",
+ "data_enum": "VehicleLightSwitch"
+ },
+ {
+ "name": "Rear fog lights state",
+ "value": 289410877,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "VehicleLightState"
+ },
+ {
+ "name": "Rear fog lights switch",
+ "value": 289410878,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE",
+ "data_enum": "VehicleLightSwitch"
+ },
+ {
+ "name": "Indicates the maximum current draw threshold for charging set by the user",
+ "value": 291508031,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE",
+ "unit": "VehicleUnit:AMPERE"
+ },
+ {
+ "name": "Indicates the maximum charge percent threshold set by the user",
+ "value": 291508032,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Charging state of the car",
+ "value": 289410881,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "EvChargeState"
+ },
+ {
+ "name": "Start or stop charging the EV battery",
+ "value": 287313730,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Estimated charge time remaining in seconds",
+ "value": 289410883,
+ "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
+ "access": "VehiclePropertyAccess:READ",
+ "unit": "VehicleUnit:SECS"
+ },
+ {
+ "name": "EV_REGENERATIVE_BRAKING_STATE",
+ "value": 289410884,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "EvRegenerativeBrakingState"
+ },
+ {
+ "name": "Indicates if there is a trailer present or not.",
+ "value": 289410885,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "TrailerState"
+ },
+ {
+ "name": "VEHICLE_CURB_WEIGHT",
+ "value": 289410886,
+ "change_mode": "VehiclePropertyChangeMode:STATIC",
+ "access": "VehiclePropertyAccess:READ",
+ "unit": "VehicleUnit:KILOGRAM"
+ },
+ {
+ "name": "GENERAL_SAFETY_REGULATION_COMPLIANCE_REQUIREMENT",
+ "value": 289410887,
+ "change_mode": "VehiclePropertyChangeMode:STATIC",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "GsrComplianceRequirementType"
+ },
+ {
+ "name": "SUPPORTED_PROPERTY_IDS",
+ "value": 289476424,
+ "change_mode": "VehiclePropertyChangeMode:STATIC",
+ "access": "VehiclePropertyAccess:READ"
+ },
+ {
+ "name": "Request the head unit to be shutdown.",
+ "value": 289410889,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:WRITE",
+ "data_enum": "VehicleApPowerStateShutdownParam"
+ },
+ {
+ "name": "Whether the vehicle is currently in use.",
+ "value": 287313738,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "Start of ADAS Properties",
+ "value": 287313920,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "AUTOMATIC_EMERGENCY_BRAKING_STATE",
+ "value": 289411073,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "ErrorState"
+ },
+ {
+ "name": "FORWARD_COLLISION_WARNING_ENABLED",
+ "value": 287313922,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "FORWARD_COLLISION_WARNING_STATE",
+ "value": 289411075,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "ErrorState"
+ },
+ {
+ "name": "BLIND_SPOT_WARNING_ENABLED",
+ "value": 287313924,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "BLIND_SPOT_WARNING_STATE",
+ "value": 339742725,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "ErrorState"
+ },
+ {
+ "name": "LANE_DEPARTURE_WARNING_ENABLED",
+ "value": 287313926,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "LANE_DEPARTURE_WARNING_STATE",
+ "value": 289411079,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "ErrorState"
+ },
+ {
+ "name": "LANE_KEEP_ASSIST_ENABLED",
+ "value": 287313928,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "LANE_KEEP_ASSIST_STATE",
+ "value": 289411081,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "ErrorState"
+ },
+ {
+ "name": "LANE_CENTERING_ASSIST_ENABLED",
+ "value": 287313930,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "LANE_CENTERING_ASSIST_COMMAND",
+ "value": 289411083,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:WRITE",
+ "data_enum": "LaneCenteringAssistCommand"
+ },
+ {
+ "name": "LANE_CENTERING_ASSIST_STATE",
+ "value": 289411084,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "ErrorState"
+ },
+ {
+ "name": "EMERGENCY_LANE_KEEP_ASSIST_ENABLED",
+ "value": 287313933
+ },
+ {
+ "name": "EMERGENCY_LANE_KEEP_ASSIST_STATE",
+ "value": 289411086,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "ErrorState"
+ },
+ {
+ "name": "CRUISE_CONTROL_ENABLED",
+ "value": 287313935,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "CRUISE_CONTROL_TYPE",
+ "value": 289411088,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE",
+ "data_enum": "ErrorState"
+ },
+ {
+ "name": "CRUISE_CONTROL_STATE",
+ "value": 289411089,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "ErrorState"
+ },
+ {
+ "name": "CRUISE_CONTROL_COMMAND",
+ "value": 289411090,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:WRITE",
+ "data_enum": "CruiseControlCommand"
+ },
+ {
+ "name": "CRUISE_CONTROL_TARGET_SPEED",
+ "value": 291508243,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "unit": "VehicleUnit:METER_PER_SEC"
+ },
+ {
+ "name": "ADAPTIVE_CRUISE_CONTROL_TARGET_TIME_GAP",
+ "value": 289411092,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE",
+ "unit": "VehicleUnit:MILLI_SECS"
+ },
+ {
+ "name": "ADAPTIVE_CRUISE_CONTROL_LEAD_VEHICLE_MEASURED_DISTANCE",
+ "value": 289411093,
+ "change_mode": "VehiclePropertyChangeMode:CONTINUOUS",
+ "access": "VehiclePropertyAccess:READ",
+ "unit": "VehicleUnit:MILLIMETER"
+ },
+ {
+ "name": "HANDS_ON_DETECTION_ENABLED",
+ "value": 287313942,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ_WRITE"
+ },
+ {
+ "name": "HANDS_ON_DETECTION_DRIVER_STATE",
+ "value": 289411095,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "ErrorState"
+ },
+ {
+ "name": "HANDS_ON_DETECTION_WARNING",
+ "value": 289411096,
+ "change_mode": "VehiclePropertyChangeMode:ON_CHANGE",
+ "access": "VehiclePropertyAccess:READ",
+ "data_enum": "ErrorState"
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "DiagnosticIntegerSensorIndex",
+ "values": [
+ {
+ "name": "FUEL_SYSTEM_STATUS",
+ "value": 0
+ },
+ {
+ "name": "MALFUNCTION_INDICATOR_LIGHT_ON",
+ "value": 1
+ },
+ {
+ "name": "IGNITION_MONITORS_SUPPORTED",
+ "value": 2
+ },
+ {
+ "name": "IGNITION_SPECIFIC_MONITORS",
+ "value": 3
+ },
+ {
+ "name": "INTAKE_AIR_TEMPERATURE",
+ "value": 4
+ },
+ {
+ "name": "COMMANDED_SECONDARY_AIR_STATUS",
+ "value": 5
+ },
+ {
+ "name": "NUM_OXYGEN_SENSORS_PRESENT",
+ "value": 6
+ },
+ {
+ "name": "RUNTIME_SINCE_ENGINE_START",
+ "value": 7
+ },
+ {
+ "name": "DISTANCE_TRAVELED_WITH_MALFUNCTION_INDICATOR_LIGHT_ON",
+ "value": 8
+ },
+ {
+ "name": "WARMUPS_SINCE_CODES_CLEARED",
+ "value": 9
+ },
+ {
+ "name": "DISTANCE_TRAVELED_SINCE_CODES_CLEARED",
+ "value": 10
+ },
+ {
+ "name": "ABSOLUTE_BAROMETRIC_PRESSURE",
+ "value": 11
+ },
+ {
+ "name": "CONTROL_MODULE_VOLTAGE",
+ "value": 12
+ },
+ {
+ "name": "AMBIENT_AIR_TEMPERATURE",
+ "value": 13
+ },
+ {
+ "name": "TIME_WITH_MALFUNCTION_LIGHT_ON",
+ "value": 14
+ },
+ {
+ "name": "TIME_SINCE_TROUBLE_CODES_CLEARED",
+ "value": 15
+ },
+ {
+ "name": "MAX_FUEL_AIR_EQUIVALENCE_RATIO",
+ "value": 16
+ },
+ {
+ "name": "MAX_OXYGEN_SENSOR_VOLTAGE",
+ "value": 17
+ },
+ {
+ "name": "MAX_OXYGEN_SENSOR_CURRENT",
+ "value": 18
+ },
+ {
+ "name": "MAX_INTAKE_MANIFOLD_ABSOLUTE_PRESSURE",
+ "value": 19
+ },
+ {
+ "name": "MAX_AIR_FLOW_RATE_FROM_MASS_AIR_FLOW_SENSOR",
+ "value": 20
+ },
+ {
+ "name": "FUEL_TYPE",
+ "value": 21
+ },
+ {
+ "name": "FUEL_RAIL_ABSOLUTE_PRESSURE",
+ "value": 22
+ },
+ {
+ "name": "ENGINE_OIL_TEMPERATURE",
+ "value": 23
+ },
+ {
+ "name": "DRIVER_DEMAND_PERCENT_TORQUE",
+ "value": 24
+ },
+ {
+ "name": "ENGINE_ACTUAL_PERCENT_TORQUE",
+ "value": 25
+ },
+ {
+ "name": "ENGINE_REFERENCE_PERCENT_TORQUE",
+ "value": 26
+ },
+ {
+ "name": "ENGINE_PERCENT_TORQUE_DATA_IDLE",
+ "value": 27
+ },
+ {
+ "name": "ENGINE_PERCENT_TORQUE_DATA_POINT1",
+ "value": 28
+ },
+ {
+ "name": "ENGINE_PERCENT_TORQUE_DATA_POINT2",
+ "value": 29
+ },
+ {
+ "name": "ENGINE_PERCENT_TORQUE_DATA_POINT3",
+ "value": 30
+ },
+ {
+ "name": "ENGINE_PERCENT_TORQUE_DATA_POINT4",
+ "value": 31
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VehicleUnit",
+ "values": [
+ {
+ "name": "SHOULD_NOT_USE",
+ "value": 0
+ },
+ {
+ "name": "METER_PER_SEC",
+ "value": 1
+ },
+ {
+ "name": "RPM",
+ "value": 2
+ },
+ {
+ "name": "HERTZ",
+ "value": 3
+ },
+ {
+ "name": "PERCENTILE",
+ "value": 16
+ },
+ {
+ "name": "MILLIMETER",
+ "value": 32
+ },
+ {
+ "name": "METER",
+ "value": 33
+ },
+ {
+ "name": "KILOMETER",
+ "value": 35
+ },
+ {
+ "name": "MILE",
+ "value": 36
+ },
+ {
+ "name": "CELSIUS",
+ "value": 48
+ },
+ {
+ "name": "FAHRENHEIT",
+ "value": 49
+ },
+ {
+ "name": "KELVIN",
+ "value": 50
+ },
+ {
+ "name": "MILLILITER",
+ "value": 64
+ },
+ {
+ "name": "LITER",
+ "value": 65
+ },
+ {
+ "name": "GALLON",
+ "value": 66
+ },
+ {
+ "name": "US_GALLON",
+ "value": 66
+ },
+ {
+ "name": "IMPERIAL_GALLON",
+ "value": 67
+ },
+ {
+ "name": "NANO_SECS",
+ "value": 80
+ },
+ {
+ "name": "MILLI_SECS",
+ "value": 81
+ },
+ {
+ "name": "SECS",
+ "value": 83
+ },
+ {
+ "name": "YEAR",
+ "value": 89
+ },
+ {
+ "name": "WATT_HOUR",
+ "value": 96
+ },
+ {
+ "name": "MILLIAMPERE",
+ "value": 97
+ },
+ {
+ "name": "MILLIVOLT",
+ "value": 98
+ },
+ {
+ "name": "MILLIWATTS",
+ "value": 99
+ },
+ {
+ "name": "AMPERE_HOURS",
+ "value": 100
+ },
+ {
+ "name": "KILOWATT_HOUR",
+ "value": 101
+ },
+ {
+ "name": "AMPERE",
+ "value": 102
+ },
+ {
+ "name": "KILOPASCAL",
+ "value": 112
+ },
+ {
+ "name": "PSI",
+ "value": 113
+ },
+ {
+ "name": "BAR",
+ "value": 114
+ },
+ {
+ "name": "DEGREES",
+ "value": 128
+ },
+ {
+ "name": "MILES_PER_HOUR",
+ "value": 144
+ },
+ {
+ "name": "KILOMETERS_PER_HOUR",
+ "value": 145
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "LaneCenteringAssistCommand",
+ "values": [
+ {
+ "name": "ACTIVATE",
+ "value": 1
+ },
+ {
+ "name": "DEACTIVATE",
+ "value": 2
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "Obd2FuelType",
+ "values": [
+ {
+ "name": "NOT_AVAILABLE",
+ "value": 0
+ },
+ {
+ "name": "GASOLINE",
+ "value": 1
+ },
+ {
+ "name": "METHANOL",
+ "value": 2
+ },
+ {
+ "name": "ETHANOL",
+ "value": 3
+ },
+ {
+ "name": "DIESEL",
+ "value": 4
+ },
+ {
+ "name": "LPG",
+ "value": 5
+ },
+ {
+ "name": "CNG",
+ "value": 6
+ },
+ {
+ "name": "PROPANE",
+ "value": 7
+ },
+ {
+ "name": "ELECTRIC",
+ "value": 8
+ },
+ {
+ "name": "BIFUEL_RUNNING_GASOLINE",
+ "value": 9
+ },
+ {
+ "name": "BIFUEL_RUNNING_METHANOL",
+ "value": 10
+ },
+ {
+ "name": "BIFUEL_RUNNING_ETHANOL",
+ "value": 11
+ },
+ {
+ "name": "BIFUEL_RUNNING_LPG",
+ "value": 12
+ },
+ {
+ "name": "BIFUEL_RUNNING_CNG",
+ "value": 13
+ },
+ {
+ "name": "BIFUEL_RUNNING_PROPANE",
+ "value": 14
+ },
+ {
+ "name": "BIFUEL_RUNNING_ELECTRIC",
+ "value": 15
+ },
+ {
+ "name": "BIFUEL_RUNNING_ELECTRIC_AND_COMBUSTION",
+ "value": 16
+ },
+ {
+ "name": "HYBRID_GASOLINE",
+ "value": 17
+ },
+ {
+ "name": "HYBRID_ETHANOL",
+ "value": 18
+ },
+ {
+ "name": "HYBRID_DIESEL",
+ "value": 19
+ },
+ {
+ "name": "HYBRID_ELECTRIC",
+ "value": 20
+ },
+ {
+ "name": "HYBRID_RUNNING_ELECTRIC_AND_COMBUSTION",
+ "value": 21
+ },
+ {
+ "name": "HYBRID_REGENERATIVE",
+ "value": 22
+ },
+ {
+ "name": "BIFUEL_RUNNING_DIESEL",
+ "value": 23
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "ProcessTerminationReason",
+ "values": [
+ {
+ "name": "NOT_RESPONDING",
+ "value": 1
+ },
+ {
+ "name": "IO_OVERUSE",
+ "value": 2
+ },
+ {
+ "name": "MEMORY_OVERUSE",
+ "value": 3
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "VmsMessageWithLayerAndPublisherIdIntegerValuesIndex",
"values": [
{
"name": "MESSAGE_TYPE",
"value": 0
},
{
- "name": "PUBLISHER_ID",
- "value": 1
- }
- ]
- },
- {
- "name": "RotaryInputType",
- "values": [
- {
- "name": "ROTARY_INPUT_TYPE_SYSTEM_NAVIGATION",
- "value": 0
- },
- {
- "name": "ROTARY_INPUT_TYPE_AUDIO_VOLUME",
- "value": 1
- }
- ]
- },
- {
- "name": "Obd2FuelSystemStatus",
- "values": [
- {
- "name": "OPEN_INSUFFICIENT_ENGINE_TEMPERATURE",
+ "name": "LAYER_TYPE",
"value": 1
},
{
- "name": "CLOSED_LOOP",
+ "name": "LAYER_SUBTYPE",
"value": 2
},
{
- "name": "OPEN_ENGINE_LOAD_OR_DECELERATION",
+ "name": "LAYER_VERSION",
+ "value": 3
+ },
+ {
+ "name": "PUBLISHER_ID",
"value": 4
+ }
+ ]
+ },
+ {
+ "package": "android.hardware.automotive.vehicle",
+ "name": "EvChargeState",
+ "values": [
+ {
+ "name": "UNKNOWN",
+ "value": 0
},
{
- "name": "OPEN_SYSTEM_FAILURE",
- "value": 8
+ "name": "CHARGING",
+ "value": 1
},
{
- "name": "CLOSED_LOOP_BUT_FEEDBACK_FAULT",
- "value": 16
+ "name": "FULLY_CHARGED",
+ "value": 2
+ },
+ {
+ "name": "NOT_CHARGING",
+ "value": 3
+ },
+ {
+ "name": "ERROR",
+ "value": 4
}
]
}
diff --git a/automotive/vehicle/aidl/emu_metadata/generate_emulator_metadata.py b/automotive/vehicle/aidl/emu_metadata/generate_emulator_metadata.py
index b2eb172..5706571 100755
--- a/automotive/vehicle/aidl/emu_metadata/generate_emulator_metadata.py
+++ b/automotive/vehicle/aidl/emu_metadata/generate_emulator_metadata.py
@@ -19,23 +19,56 @@
from pathlib import Path
+RE_PACKAGE = re.compile(r"\npackage\s([\.a-z0-9]*);")
+RE_IMPORT = re.compile(r"\nimport\s([\.a-zA-Z0-9]*);")
RE_ENUM = re.compile(r"\s*enum\s+(\w*) {\n(.*)}", re.MULTILINE | re.DOTALL)
-RE_COMMENT = re.compile(r"(?:(?:\/\*\*)((?:.|\n)*?)(?:\*\/))?(?:\n|^)\s*(\w*)(?:\s+=\s*)?((?:[a-zA-Z0-9]|\s|\+|)*),", re.DOTALL)
+RE_COMMENT = re.compile(r"(?:(?:\/\*\*)((?:.|\n)*?)(?:\*\/))?(?:\n|^)\s*(\w*)(?:\s+=\s*)?((?:[\.\-a-zA-Z0-9]|\s|\+|)*),",
+ re.DOTALL)
RE_BLOCK_COMMENT_TITLE = re.compile("^(?:\s|\*)*((?:\w|\s|\.)*)\n(?:\s|\*)*(?:\n|$)")
-RE_BLOCK_COMMENT_ANNOTATION = re.compile("^(?:\s|\*)*@(\w*)\s+((?:\w|:)*)", re.MULTILINE)
-RE_HEX_NUMBER = re.compile("([0-9A-Fa-fxX]+)")
+RE_BLOCK_COMMENT_ANNOTATION = re.compile("^(?:\s|\*)*@(\w*)\s+((?:[\w:\.])*)", re.MULTILINE)
+RE_HEX_NUMBER = re.compile("([\.\-0-9A-Za-z]+)")
class JEnum:
- def __init__(self, name):
+ def __init__(self, package, name):
+ self.package = package
self.name = name
self.values = []
+class Enum:
+ def __init__(self, package, name, text, imports):
+ self.text = text
+ self.parsed = False
+ self.imports = imports
+ self.jenum = JEnum(package, name)
-class Converter:
- # Only addition is supported for now, but that covers all existing properties except
- # OBD diagnostics, which use bitwise shifts
- def calculateValue(self, expression, default_value):
+ def parse(self, enums):
+ if self.parsed:
+ return
+ for dep in self.imports:
+ enums[dep].parse(enums)
+ print("Parsing " + self.jenum.name)
+ matches = RE_COMMENT.findall(self.text)
+ defaultValue = 0
+ for match in matches:
+ value = dict()
+ value['name'] = match[1]
+ value['value'] = self.calculateValue(match[2], defaultValue, enums)
+ defaultValue = value['value'] + 1
+ if self.jenum.name == "VehicleProperty":
+ block_comment = match[0]
+ self.parseBlockComment(value, block_comment)
+ self.jenum.values.append(value)
+ self.parsed = True
+ self.text = None
+
+ def get_value(self, value_name):
+ for value in self.jenum.values:
+ if value['name'] == value_name:
+ return value['value']
+ raise Exception("Cannot decode value: " + self.jenum.package + " : " + value_name)
+
+ def calculateValue(self, expression, default_value, enums):
numbers = RE_HEX_NUMBER.findall(expression)
if len(numbers) == 0:
return default_value
@@ -44,7 +77,13 @@
if numbers[0].lower().startswith("0x"):
base = 16
for number in numbers:
- result += int(number, base)
+ if '.' in number:
+ package, val_name = number.split('.')
+ for dep in self.imports:
+ if package in dep:
+ result += enums[dep].get_value(val_name)
+ else:
+ result += int(number, base)
return result
def parseBlockComment(self, value, blockComment):
@@ -54,30 +93,22 @@
break
annots_res = RE_BLOCK_COMMENT_ANNOTATION.findall(blockComment)
for annot in annots_res:
- value[annot[0]] = annot[1]
+ value[annot[0]] = annot[1].replace(".", ":")
- def parseEnumContents(self, enum: JEnum, enumValue):
- matches = RE_COMMENT.findall(enumValue)
- defaultValue = 0
- for match in matches:
- value = dict()
- value['name'] = match[1]
- value['value'] = self.calculateValue(match[2], defaultValue)
- defaultValue = value['value'] + 1
- if enum.name == "VehicleProperty":
- block_comment = match[0]
- self.parseBlockComment(value, block_comment)
- enum.values.append(value)
-
+class Converter:
+ # Only addition is supported for now, but that covers all existing properties except
+ # OBD diagnostics, which use bitwise shifts
def convert(self, input):
text = Path(input).read_text()
matches = RE_ENUM.findall(text)
- jenums = []
+ package = RE_PACKAGE.findall(text)[0]
+ imports = RE_IMPORT.findall(text)
+ enums = []
for match in matches:
- enum = JEnum(match[0])
- self.parseEnumContents(enum, match[1])
- jenums.append(enum)
- return jenums
+ enum = Enum(package, match[0], match[1], imports)
+ enums.append(enum)
+ return enums
+
def main():
if (len(sys.argv) != 3):
@@ -85,10 +116,18 @@
sys.exit(1)
aidl_path = sys.argv[1]
out_path = sys.argv[2]
- result = []
+ enums_dict = dict()
for file in os.listdir(aidl_path):
- result.extend(Converter().convert(os.path.join(aidl_path, file)))
- json_result = json.dumps(result, default=vars, indent=2)
+ enums = Converter().convert(os.path.join(aidl_path, file))
+ for enum in enums:
+ enums_dict[enum.jenum.package + "." + enum.jenum.name] = enum
+
+ result = []
+ for enum_name, enum in enums_dict.items():
+ enum.parse(enums_dict)
+ result.append(enum.jenum.__dict__)
+
+ json_result = json.dumps(result, default=None, indent=2)
with open(out_path, 'w') as f:
f.write(json_result)
diff --git a/automotive/vehicle/aidl/impl/fake_impl/hardware/include/FakeVehicleHardware.h b/automotive/vehicle/aidl/impl/fake_impl/hardware/include/FakeVehicleHardware.h
index 8cd92b3..96eff0e 100644
--- a/automotive/vehicle/aidl/impl/fake_impl/hardware/include/FakeVehicleHardware.h
+++ b/automotive/vehicle/aidl/impl/fake_impl/hardware/include/FakeVehicleHardware.h
@@ -294,7 +294,7 @@
void registerRefreshLocked(PropIdAreaId propIdAreaId, VehiclePropertyStore::EventMode eventMode,
float sampleRateHz) REQUIRES(mLock);
void unregisterRefreshLocked(PropIdAreaId propIdAreaId) REQUIRES(mLock);
- void refreshTimeStampForInterval(int64_t intervalInNanos) EXCLUDES(mLock);
+ void refreshTimestampForInterval(int64_t intervalInNanos) EXCLUDES(mLock);
static aidl::android::hardware::automotive::vehicle::VehiclePropValue createHwInputKeyProp(
aidl::android::hardware::automotive::vehicle::VehicleHwKeyInputAction action,
diff --git a/automotive/vehicle/aidl/impl/fake_impl/hardware/src/FakeVehicleHardware.cpp b/automotive/vehicle/aidl/impl/fake_impl/hardware/src/FakeVehicleHardware.cpp
index 385f616..d95ffd6 100644
--- a/automotive/vehicle/aidl/impl/fake_impl/hardware/src/FakeVehicleHardware.cpp
+++ b/automotive/vehicle/aidl/impl/fake_impl/hardware/src/FakeVehicleHardware.cpp
@@ -2109,7 +2109,7 @@
return false;
}
-void FakeVehicleHardware::refreshTimeStampForInterval(int64_t intervalInNanos) {
+void FakeVehicleHardware::refreshTimestampForInterval(int64_t intervalInNanos) {
std::unordered_map<PropIdAreaId, VehiclePropertyStore::EventMode, PropIdAreaIdHash>
eventModeByPropIdAreaId;
@@ -2159,7 +2159,7 @@
// This is the first action for the interval, register a timer callback for that interval.
auto action = std::make_shared<RecurrentTimer::Callback>(
- [this, intervalInNanos] { refreshTimeStampForInterval(intervalInNanos); });
+ [this, intervalInNanos] { refreshTimestampForInterval(intervalInNanos); });
mActionByIntervalInNanos[intervalInNanos] = ActionForInterval{
.propIdAreaIdsToRefresh = {propIdAreaId},
.recurrentAction = action,
@@ -2201,7 +2201,7 @@
case VehiclePropertyChangeMode::CONTINUOUS:
if (sampleRateHz == 0.f) {
ALOGE("Must not use sample rate 0 for a continuous property");
- return StatusCode::INTERNAL_ERROR;
+ return StatusCode::INVALID_ARG;
}
// For continuous properties, we must generate a new onPropertyChange event
// periodically according to the sample rate.
diff --git a/automotive/vehicle/aidl/impl/fake_impl/hardware/test/FakeVehicleHardwareTest.cpp b/automotive/vehicle/aidl/impl/fake_impl/hardware/test/FakeVehicleHardwareTest.cpp
index 6d2efd5..909c89d 100644
--- a/automotive/vehicle/aidl/impl/fake_impl/hardware/test/FakeVehicleHardwareTest.cpp
+++ b/automotive/vehicle/aidl/impl/fake_impl/hardware/test/FakeVehicleHardwareTest.cpp
@@ -3444,6 +3444,14 @@
<< "must not receive on change events if the propId, areaId is unsubscribed";
}
+TEST_F(FakeVehicleHardwareTest, testSubscribeContinuous_rate0_mustReturnInvalidArg) {
+ int32_t propSpeed = toInt(VehicleProperty::PERF_VEHICLE_SPEED);
+ int32_t areaId = 0;
+ auto status = getHardware()->subscribe(newSubscribeOptions(propSpeed, areaId, 0));
+
+ ASSERT_EQ(status, StatusCode::INVALID_ARG);
+}
+
TEST_F(FakeVehicleHardwareTest, testSetHvacTemperatureValueSuggestion) {
float CELSIUS = static_cast<float>(toInt(VehicleUnit::CELSIUS));
float FAHRENHEIT = static_cast<float>(toInt(VehicleUnit::FAHRENHEIT));
diff --git a/automotive/vehicle/vts/Android.bp b/automotive/vehicle/vts/Android.bp
index 736787b..67d0d34 100644
--- a/automotive/vehicle/vts/Android.bp
+++ b/automotive/vehicle/vts/Android.bp
@@ -30,6 +30,7 @@
],
static_libs: [
"libgtest",
+ "libgmock",
"libvhalclient",
],
shared_libs: [
@@ -41,6 +42,9 @@
"use_libaidlvintf_gtest_helper_static",
"vhalclient_defaults",
],
+ header_libs: [
+ "IVehicleGeneratedHeaders",
+ ],
test_suites: [
"general-tests",
"vts",
diff --git a/automotive/vehicle/vts/src/VtsHalAutomotiveVehicle_TargetTest.cpp b/automotive/vehicle/vts/src/VtsHalAutomotiveVehicle_TargetTest.cpp
index b5ee335..f8ddfaa 100644
--- a/automotive/vehicle/vts/src/VtsHalAutomotiveVehicle_TargetTest.cpp
+++ b/automotive/vehicle/vts/src/VtsHalAutomotiveVehicle_TargetTest.cpp
@@ -19,12 +19,14 @@
#include <IVhalClient.h>
#include <VehicleHalTypes.h>
#include <VehicleUtils.h>
+#include <VersionForVehicleProperty.h>
#include <aidl/Gtest.h>
#include <aidl/Vintf.h>
#include <aidl/android/hardware/automotive/vehicle/IVehicle.h>
#include <android-base/stringprintf.h>
#include <android-base/thread_annotations.h>
#include <android/binder_process.h>
+#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <hidl/GtestPrinter.h>
#include <hidl/ServiceManagement.h>
@@ -47,6 +49,7 @@
using ::aidl::android::hardware::automotive::vehicle::VehiclePropertyChangeMode;
using ::aidl::android::hardware::automotive::vehicle::VehiclePropertyGroup;
using ::aidl::android::hardware::automotive::vehicle::VehiclePropertyType;
+using ::aidl::android::hardware::automotive::vehicle::VersionForVehicleProperty;
using ::android::getAidlHalInstanceNames;
using ::android::base::ScopedLockAssertion;
using ::android::base::StringPrintf;
@@ -58,7 +61,10 @@
using ::android::frameworks::automotive::vhal::IVhalClient;
using ::android::hardware::getAllHalInstanceNames;
using ::android::hardware::Sanitize;
+using ::android::hardware::automotive::vehicle::isSystemProp;
+using ::android::hardware::automotive::vehicle::propIdToString;
using ::android::hardware::automotive::vehicle::toInt;
+using ::testing::Ge;
constexpr int32_t kInvalidProp = 0x31600207;
@@ -202,6 +208,41 @@
ASSERT_NE(result.error().message(), "") << "Expect error message not to be empty";
}
+// Test system property IDs returned by getPropConfigs() are defined in the VHAL property interface.
+TEST_P(VtsHalAutomotiveVehicleTargetTest, testPropConfigs_onlyDefinedSystemPropertyIdsReturned) {
+ if (!mVhalClient->isAidlVhal()) {
+ GTEST_SKIP() << "Skip for HIDL VHAL because HAL interface run-time version is only"
+ << "introduced for AIDL";
+ }
+
+ auto result = mVhalClient->getAllPropConfigs();
+ ASSERT_TRUE(result.ok()) << "Failed to get all property configs, error: "
+ << result.error().message();
+
+ int32_t vhalVersion = mVhalClient->getRemoteInterfaceVersion();
+ const auto& configs = result.value();
+ for (size_t i = 0; i < configs.size(); i++) {
+ int32_t propId = configs[i]->getPropId();
+ if (!isSystemProp(propId)) {
+ continue;
+ }
+
+ std::string propName = propIdToString(propId);
+ auto it = VersionForVehicleProperty.find(static_cast<VehicleProperty>(propId));
+ bool found = (it != VersionForVehicleProperty.end());
+ EXPECT_TRUE(found) << "System Property: " << propName
+ << " is not defined in VHAL property interface";
+ if (!found) {
+ continue;
+ }
+ int32_t requiredVersion = it->second;
+ EXPECT_THAT(vhalVersion, Ge(requiredVersion))
+ << "System Property: " << propName << " requires VHAL version: " << requiredVersion
+ << ", but the current VHAL version"
+ << " is " << vhalVersion << ", must not be supported";
+ }
+}
+
// Test get() return current value for properties.
TEST_P(VtsHalAutomotiveVehicleTargetTest, get) {
ALOGD("VtsHalAutomotiveVehicleTargetTest::get");
diff --git a/biometrics/common/aidl/aidl_api/android.hardware.biometrics.common/current/android/hardware/biometrics/common/OperationContext.aidl b/biometrics/common/aidl/aidl_api/android.hardware.biometrics.common/current/android/hardware/biometrics/common/OperationContext.aidl
index 42c305a..8d913c8 100644
--- a/biometrics/common/aidl/aidl_api/android.hardware.biometrics.common/current/android/hardware/biometrics/common/OperationContext.aidl
+++ b/biometrics/common/aidl/aidl_api/android.hardware.biometrics.common/current/android/hardware/biometrics/common/OperationContext.aidl
@@ -46,4 +46,5 @@
android.hardware.biometrics.common.DisplayState displayState = android.hardware.biometrics.common.DisplayState.UNKNOWN;
@nullable android.hardware.biometrics.common.AuthenticateReason authenticateReason;
android.hardware.biometrics.common.FoldState foldState = android.hardware.biometrics.common.FoldState.UNKNOWN;
+ @nullable android.hardware.biometrics.common.OperationState operationState;
}
diff --git a/biometrics/common/aidl/aidl_api/android.hardware.biometrics.common/current/android/hardware/biometrics/common/OperationState.aidl b/biometrics/common/aidl/aidl_api/android.hardware.biometrics.common/current/android/hardware/biometrics/common/OperationState.aidl
new file mode 100644
index 0000000..fca9525
--- /dev/null
+++ b/biometrics/common/aidl/aidl_api/android.hardware.biometrics.common/current/android/hardware/biometrics/common/OperationState.aidl
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2024 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.
+ */
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL file. Do not edit it manually. There are
+// two cases:
+// 1). this is a frozen version file - do not edit this in any case.
+// 2). this is a 'current' file. If you make a backwards compatible change to
+// the interface (from the latest frozen version), the build system will
+// prompt you to update this file with `m <name>-update-api`.
+//
+// You must not make a backward incompatible change to any AIDL file built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package android.hardware.biometrics.common;
+/* @hide */
+@VintfStability
+union OperationState {
+ android.hardware.biometrics.common.OperationState.FingerprintOperationState fingerprintOperationState;
+ android.hardware.biometrics.common.OperationState.FaceOperationState faceOperationState;
+ @VintfStability
+ parcelable FingerprintOperationState {
+ ParcelableHolder extension;
+ boolean isHardwareIgnoringTouches = false;
+ }
+ @VintfStability
+ parcelable FaceOperationState {
+ ParcelableHolder extension;
+ }
+}
diff --git a/biometrics/common/aidl/android/hardware/biometrics/common/OperationContext.aidl b/biometrics/common/aidl/android/hardware/biometrics/common/OperationContext.aidl
index 584057d..5f9844f 100644
--- a/biometrics/common/aidl/android/hardware/biometrics/common/OperationContext.aidl
+++ b/biometrics/common/aidl/android/hardware/biometrics/common/OperationContext.aidl
@@ -20,6 +20,7 @@
import android.hardware.biometrics.common.DisplayState;
import android.hardware.biometrics.common.FoldState;
import android.hardware.biometrics.common.OperationReason;
+import android.hardware.biometrics.common.OperationState;
import android.hardware.biometrics.common.WakeReason;
/**
@@ -75,4 +76,7 @@
/** The current fold/unfold state. */
FoldState foldState = FoldState.UNKNOWN;
+
+ /** An associated operation state for this operation. */
+ @nullable OperationState operationState;
}
diff --git a/biometrics/common/aidl/android/hardware/biometrics/common/OperationState.aidl b/biometrics/common/aidl/android/hardware/biometrics/common/OperationState.aidl
new file mode 100644
index 0000000..40cf589
--- /dev/null
+++ b/biometrics/common/aidl/android/hardware/biometrics/common/OperationState.aidl
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2024 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.
+ */
+
+package android.hardware.biometrics.common;
+
+/**
+ * Additional state associated with an operation
+ *
+ * @hide
+ */
+@VintfStability
+union OperationState {
+ /** Operation state related to fingerprint*/
+ @VintfStability
+ parcelable FingerprintOperationState {
+ ParcelableHolder extension;
+
+ /** Flag indicating if the HAL should ignore touches on the fingerprint sensor */
+ boolean isHardwareIgnoringTouches = false;
+ }
+
+ /** Operation state related to face*/
+ @VintfStability
+ parcelable FaceOperationState {
+ ParcelableHolder extension;
+ }
+
+ OperationState.FingerprintOperationState fingerprintOperationState;
+ OperationState.FaceOperationState faceOperationState;
+}
diff --git a/biometrics/face/aidl/default/FakeFaceEngine.cpp b/biometrics/face/aidl/default/FakeFaceEngine.cpp
index 7380611..bdc13fd 100644
--- a/biometrics/face/aidl/default/FakeFaceEngine.cpp
+++ b/biometrics/face/aidl/default/FakeFaceEngine.cpp
@@ -70,7 +70,7 @@
EnrollmentType /*enrollmentType*/,
const std::vector<Feature>& /*features*/,
const std::future<void>& cancel) {
- BEGIN_OP(FaceHalProperties::operation_start_enroll_latency().value_or(0));
+ BEGIN_OP(getLatency(FaceHalProperties::operation_enroll_latency()));
// Do proper HAT verification in the real implementation.
if (hat.mac.empty()) {
@@ -158,7 +158,7 @@
void FakeFaceEngine::authenticateImpl(ISessionCallback* cb, int64_t /*operationId*/,
const std::future<void>& cancel) {
- BEGIN_OP(FaceHalProperties::operation_authenticate_latency().value_or(0));
+ BEGIN_OP(getLatency(FaceHalProperties::operation_authenticate_latency()));
auto id = FaceHalProperties::enrollment_hit().value_or(0);
auto enrolls = FaceHalProperties::enrollments();
@@ -291,7 +291,7 @@
}
void FakeFaceEngine::detectInteractionImpl(ISessionCallback* cb, const std::future<void>& cancel) {
- BEGIN_OP(FaceHalProperties::operation_detect_interaction_latency().value_or(0));
+ BEGIN_OP(getLatency(FaceHalProperties::operation_detect_interaction_latency()));
if (FaceHalProperties::operation_detect_interaction_fails().value_or(false)) {
LOG(ERROR) << "Fail: operation_detect_interaction_fails";
@@ -418,4 +418,33 @@
cb->onLockoutCleared();
}
+int32_t FakeFaceEngine::getRandomInRange(int32_t bound1, int32_t bound2) {
+ std::uniform_int_distribution<int32_t> dist(std::min(bound1, bound2), std::max(bound1, bound2));
+ return dist(mRandom);
+}
+
+int32_t FakeFaceEngine::getLatency(const std::vector<std::optional<std::int32_t>>& latencyIn) {
+ int32_t res = DEFAULT_LATENCY;
+
+ std::vector<int32_t> latency;
+ for (auto x : latencyIn)
+ if (x.has_value()) latency.push_back(*x);
+
+ switch (latency.size()) {
+ case 0:
+ break;
+ case 1:
+ res = latency[0];
+ break;
+ case 2:
+ res = getRandomInRange(latency[0], latency[1]);
+ break;
+ default:
+ LOG(ERROR) << "ERROR: unexpected input of size " << latency.size();
+ break;
+ }
+
+ return res;
+}
+
} // namespace aidl::android::hardware::biometrics::face
diff --git a/biometrics/face/aidl/default/FakeFaceEngine.h b/biometrics/face/aidl/default/FakeFaceEngine.h
index 8d9303c..b1e1388 100644
--- a/biometrics/face/aidl/default/FakeFaceEngine.h
+++ b/biometrics/face/aidl/default/FakeFaceEngine.h
@@ -60,6 +60,7 @@
void getAuthenticatorIdImpl(ISessionCallback* cb);
void invalidateAuthenticatorIdImpl(ISessionCallback* cb);
void resetLockoutImpl(ISessionCallback* cb, const keymaster::HardwareAuthToken& /*hat*/);
+ int32_t getLatency(const std::vector<std::optional<std::int32_t>>& latencyVec);
virtual std::string toString() const {
std::ostringstream os;
@@ -71,6 +72,7 @@
std::mt19937 mRandom;
private:
+ int32_t getRandomInRange(int32_t bound1, int32_t bound2);
static constexpr int32_t FACE_ACQUIRED_VENDOR_BASE = 1000;
static constexpr int32_t FACE_ERROR_VENDOR_BASE = 1000;
std::pair<AcquiredInfo, int32_t> convertAcquiredInfo(int32_t code);
diff --git a/biometrics/face/aidl/default/FakeLockoutTracker.h b/biometrics/face/aidl/default/FakeLockoutTracker.h
index f2d38f3..82cc313 100644
--- a/biometrics/face/aidl/default/FakeLockoutTracker.h
+++ b/biometrics/face/aidl/default/FakeLockoutTracker.h
@@ -28,7 +28,9 @@
public:
FakeLockoutTracker()
: mFailedCount(0),
+ mTimedFailedCount(0),
mLastFailedTime(0),
+ mCurrentMode(LockoutMode::kNone),
mIsLockoutTimerStarted(false),
mIsLockoutTimerAborted(false) {}
~FakeLockoutTracker() {}
diff --git a/biometrics/face/aidl/default/api/android.hardware.biometrics.face.VirtualProps-current.txt b/biometrics/face/aidl/default/api/android.hardware.biometrics.face.VirtualProps-current.txt
index 9548920..e69de29 100644
--- a/biometrics/face/aidl/default/api/android.hardware.biometrics.face.VirtualProps-current.txt
+++ b/biometrics/face/aidl/default/api/android.hardware.biometrics.face.VirtualProps-current.txt
@@ -1,98 +0,0 @@
-props {
- owner: Vendor
- module: "android.face.virt.FaceHalProperties"
- prop {
- api_name: "authenticator_id"
- type: Long
- access: ReadWrite
- prop_name: "vendor.face.virtual.authenticator_id"
- }
- prop {
- api_name: "challenge"
- type: Long
- access: ReadWrite
- prop_name: "vendor.face.virtual.challenge"
- }
- prop {
- api_name: "enrollment_hit"
- type: Integer
- access: ReadWrite
- prop_name: "vendor.face.virtual.enrollment_hit"
- }
- prop {
- api_name: "enrollments"
- type: IntegerList
- access: ReadWrite
- prop_name: "persist.vendor.face.virtual.enrollments"
- }
- prop {
- api_name: "features"
- type: IntegerList
- access: ReadWrite
- prop_name: "persist.vendor.face.virtual.features"
- }
- prop {
- api_name: "lockout"
- access: ReadWrite
- prop_name: "vendor.face.virtual.lockout"
- }
- prop {
- api_name: "next_enrollment"
- type: String
- access: ReadWrite
- prop_name: "vendor.face.virtual.next_enrollment"
- }
- prop {
- api_name: "operation_authenticate_duration"
- type: Integer
- access: ReadWrite
- prop_name: "vendor.face.virtual.operation_authenticate_duration"
- }
- prop {
- api_name: "operation_authenticate_fails"
- access: ReadWrite
- prop_name: "vendor.face.virtual.operation_authenticate_fails"
- }
- prop {
- api_name: "operation_authenticate_latency"
- type: Integer
- access: ReadWrite
- prop_name: "vendor.face.virtual.operation_authenticate_latency"
- }
- prop {
- api_name: "operation_detect_interaction_fails"
- access: ReadWrite
- prop_name: "vendor.face.virtual.operation_detect_interaction_fails"
- }
- prop {
- api_name: "operation_detect_interaction_latency"
- type: Integer
- access: ReadWrite
- prop_name: "vendor.face.virtual.operation_detect_interaction_latency"
- }
- prop {
- api_name: "operation_enroll_fails"
- access: ReadWrite
- prop_name: "vendor.face.virtual.operation_enroll_fails"
- }
- prop {
- api_name: "operation_start_enroll_latency"
- type: Integer
- access: ReadWrite
- prop_name: "vendor.face.virtual.operation_start_enroll_latency"
- }
- prop {
- api_name: "strength"
- type: String
- access: ReadWrite
- prop_name: "persist.vendor.face.virtual.strength"
- enum_values: "convenience|weak|strong"
- }
- prop {
- api_name: "type"
- type: String
- access: ReadWrite
- prop_name: "persist.vendor.face.virtual.type"
- enum_values: "IR|RGB"
- }
-}
diff --git a/biometrics/face/aidl/default/face.sysprop b/biometrics/face/aidl/default/face.sysprop
index 95b0b43..997fd67 100644
--- a/biometrics/face/aidl/default/face.sysprop
+++ b/biometrics/face/aidl/default/face.sysprop
@@ -7,7 +7,7 @@
prop {
prop_name: "persist.vendor.face.virtual.type"
type: String
- scope: Public
+ scope: Internal
access: ReadWrite
enum_values: "IR|RGB"
api_name: "type"
@@ -17,7 +17,7 @@
prop {
prop_name: "persist.vendor.face.virtual.strength"
type: String
- scope: Public
+ scope: Internal
access: ReadWrite
enum_values: "convenience|weak|strong"
api_name: "strength"
@@ -27,7 +27,7 @@
prop {
prop_name: "persist.vendor.face.virtual.enrollments"
type: IntegerList
- scope: Public
+ scope: Internal
access: ReadWrite
api_name: "enrollments"
}
@@ -36,7 +36,7 @@
prop {
prop_name: "persist.vendor.face.virtual.features"
type: IntegerList
- scope: Public
+ scope: Internal
access: ReadWrite
api_name: "features"
}
@@ -46,20 +46,11 @@
prop {
prop_name: "vendor.face.virtual.enrollment_hit"
type: Integer
- scope: Public
+ scope: Internal
access: ReadWrite
api_name: "enrollment_hit"
}
-# The initial latency for enrollment
-prop {
- prop_name: "vendor.face.virtual.operation_start_enroll_latency"
- type: Integer
- scope: Public
- access: ReadWrite
- api_name: "operation_start_enroll_latency"
-}
-
# the next enrollment in the format:
# "<id>,<bucket_id>:<delay>:<succeeds>,<bucket_id>..."
# for example: "0:1,0:100:1,1:200:1" indicating that bucket 0 took
@@ -69,7 +60,7 @@
prop {
prop_name: "vendor.face.virtual.next_enrollment"
type: String
- scope: Public
+ scope: Internal
access: ReadWrite
api_name: "next_enrollment"
}
@@ -78,7 +69,7 @@
prop {
prop_name: "vendor.face.virtual.authenticator_id"
type: Long
- scope: Public
+ scope: Internal
access: ReadWrite
api_name: "authenticator_id"
}
@@ -87,7 +78,7 @@
prop {
prop_name: "vendor.face.virtual.challenge"
type: Long
- scope: Public
+ scope: Internal
access: ReadWrite
api_name: "challenge"
}
@@ -96,7 +87,7 @@
prop {
prop_name: "vendor.face.virtual.lockout"
type: Boolean
- scope: Public
+ scope: Internal
access: ReadWrite
api_name: "lockout"
}
@@ -105,7 +96,7 @@
prop {
prop_name: "vendor.face.virtual.operation_authenticate_fails"
type: Boolean
- scope: Public
+ scope: Internal
access: ReadWrite
api_name: "operation_authenticate_fails"
}
@@ -114,7 +105,7 @@
prop {
prop_name: "vendor.face.virtual.operation_detect_interaction_fails"
type: Boolean
- scope: Public
+ scope: Internal
access: ReadWrite
api_name: "operation_detect_interaction_fails"
}
@@ -123,7 +114,7 @@
prop {
prop_name: "vendor.face.virtual.operation_enroll_fails"
type: Boolean
- scope: Public
+ scope: Internal
access: ReadWrite
api_name: "operation_enroll_fails"
}
@@ -133,8 +124,8 @@
# the HAL will send AcquiredInfo::START and AcquiredInfo::FIRST_FRAME_RECEIVED
prop {
prop_name: "vendor.face.virtual.operation_authenticate_latency"
- type: Integer
- scope: Public
+ type: IntegerList
+ scope: Internal
access: ReadWrite
api_name: "operation_authenticate_latency"
}
@@ -142,18 +133,27 @@
# add a latency to detectInteraction operations
prop {
prop_name: "vendor.face.virtual.operation_detect_interaction_latency"
- type: Integer
- scope: Public
+ type: IntegerList
+ scope: Internal
access: ReadWrite
api_name: "operation_detect_interaction_latency"
}
+# add a latency to enroll operations
+prop {
+ prop_name: "vendor.face.virtual.operation_enroll_latency"
+ type: IntegerList
+ scope: Internal
+ access: ReadWrite
+ api_name: "operation_enroll_latency"
+}
+
# millisecond duration for authenticate operations
# (waits for changes to enrollment_hit)
prop {
prop_name: "vendor.face.virtual.operation_authenticate_duration"
type: Integer
- scope: Public
+ scope: Internal
access: ReadWrite
api_name: "operation_authenticate_duration"
}
diff --git a/biometrics/face/aidl/default/tests/FakeFaceEngineTest.cpp b/biometrics/face/aidl/default/tests/FakeFaceEngineTest.cpp
index 69c9bf4..8c39b58 100644
--- a/biometrics/face/aidl/default/tests/FakeFaceEngineTest.cpp
+++ b/biometrics/face/aidl/default/tests/FakeFaceEngineTest.cpp
@@ -22,6 +22,7 @@
#include <android-base/logging.h>
#include "FakeFaceEngine.h"
+#include "util/Util.h"
using namespace ::android::face::virt;
using namespace ::aidl::android::hardware::biometrics::face;
@@ -137,11 +138,15 @@
void SetUp() override {
LOG(ERROR) << "JRM SETUP";
mCallback = ndk::SharedRefBase::make<TestSessionCallback>();
+ }
+
+ void TearDown() override {
FaceHalProperties::enrollments({});
FaceHalProperties::challenge({});
FaceHalProperties::features({});
FaceHalProperties::authenticator_id({});
FaceHalProperties::strength("");
+ FaceHalProperties::operation_detect_interaction_latency({});
}
FakeFaceEngine mEngine;
@@ -383,4 +388,26 @@
ASSERT_FALSE(mCallback->mAuthenticateFailed);
}
+TEST_F(FakeFaceEngineTest, LatencyDefault) {
+ FaceHalProperties::operation_detect_interaction_latency({});
+ ASSERT_EQ(DEFAULT_LATENCY,
+ mEngine.getLatency(FaceHalProperties::operation_detect_interaction_latency()));
+}
+
+TEST_F(FakeFaceEngineTest, LatencyFixed) {
+ FaceHalProperties::operation_detect_interaction_latency({10});
+ ASSERT_EQ(10, mEngine.getLatency(FaceHalProperties::operation_detect_interaction_latency()));
+}
+
+TEST_F(FakeFaceEngineTest, LatencyRandom) {
+ FaceHalProperties::operation_detect_interaction_latency({1, 1000});
+ std::set<int32_t> latencySet;
+ for (int i = 0; i < 100; i++) {
+ auto x = mEngine.getLatency(FaceHalProperties::operation_detect_interaction_latency());
+ ASSERT_TRUE(x >= 1 && x <= 1000);
+ latencySet.insert(x);
+ }
+ ASSERT_TRUE(latencySet.size() > 95); // unique values
+}
+
} // namespace aidl::android::hardware::biometrics::face
diff --git a/biometrics/fingerprint/aidl/aidl_api/android.hardware.biometrics.fingerprint/current/android/hardware/biometrics/fingerprint/ISession.aidl b/biometrics/fingerprint/aidl/aidl_api/android.hardware.biometrics.fingerprint/current/android/hardware/biometrics/fingerprint/ISession.aidl
index 4fdcefc..feb6ba3 100644
--- a/biometrics/fingerprint/aidl/aidl_api/android.hardware.biometrics.fingerprint/current/android/hardware/biometrics/fingerprint/ISession.aidl
+++ b/biometrics/fingerprint/aidl/aidl_api/android.hardware.biometrics.fingerprint/current/android/hardware/biometrics/fingerprint/ISession.aidl
@@ -62,5 +62,8 @@
void onPointerUpWithContext(in android.hardware.biometrics.fingerprint.PointerContext context);
void onContextChanged(in android.hardware.biometrics.common.OperationContext context);
void onPointerCancelWithContext(in android.hardware.biometrics.fingerprint.PointerContext context);
+ /**
+ * @deprecated use isHardwareIgnoringTouches in OperationContext from onContextChanged instead
+ */
void setIgnoreDisplayTouches(in boolean shouldIgnore);
}
diff --git a/biometrics/fingerprint/aidl/android/hardware/biometrics/fingerprint/ISession.aidl b/biometrics/fingerprint/aidl/android/hardware/biometrics/fingerprint/ISession.aidl
index 83e7bbc..07e22c2 100644
--- a/biometrics/fingerprint/aidl/android/hardware/biometrics/fingerprint/ISession.aidl
+++ b/biometrics/fingerprint/aidl/android/hardware/biometrics/fingerprint/ISession.aidl
@@ -544,6 +544,8 @@
* whenever it's appropriate.
*
* @param shouldIgnore whether the display touches should be ignored.
+
+ * @deprecated use isHardwareIgnoringTouches in OperationContext from onContextChanged instead
*/
void setIgnoreDisplayTouches(in boolean shouldIgnore);
}
diff --git a/bluetooth/audio/aidl/aidl_api/android.hardware.bluetooth.audio/current/android/hardware/bluetooth/audio/IBluetoothAudioProvider.aidl b/bluetooth/audio/aidl/aidl_api/android.hardware.bluetooth.audio/current/android/hardware/bluetooth/audio/IBluetoothAudioProvider.aidl
index f155634..87401ff 100644
--- a/bluetooth/audio/aidl/aidl_api/android.hardware.bluetooth.audio/current/android/hardware/bluetooth/audio/IBluetoothAudioProvider.aidl
+++ b/bluetooth/audio/aidl/aidl_api/android.hardware.bluetooth.audio/current/android/hardware/bluetooth/audio/IBluetoothAudioProvider.aidl
@@ -45,7 +45,7 @@
void setCodecPriority(in android.hardware.bluetooth.audio.CodecId codecId, int priority);
List<android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioAseConfigurationSetting> getLeAudioAseConfiguration(in @nullable List<android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioDeviceCapabilities> remoteSinkAudioCapabilities, in @nullable List<android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioDeviceCapabilities> remoteSourceAudioCapabilities, in List<android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioConfigurationRequirement> requirements);
android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioAseQosConfigurationPair getLeAudioAseQosConfiguration(in android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioAseQosConfigurationRequirement qosRequirement);
- android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioDataPathConfigurationPair getLeAudioAseDatapathConfiguration(in android.hardware.bluetooth.audio.AudioContext context, in android.hardware.bluetooth.audio.LeAudioConfiguration.StreamMap[] streamMap);
+ android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioDataPathConfigurationPair getLeAudioAseDatapathConfiguration(in @nullable android.hardware.bluetooth.audio.IBluetoothAudioProvider.StreamConfig sinkConfig, in @nullable android.hardware.bluetooth.audio.IBluetoothAudioProvider.StreamConfig sourceConfig);
void onSinkAseMetadataChanged(in android.hardware.bluetooth.audio.IBluetoothAudioProvider.AseState state, int cigId, int cisId, in @nullable android.hardware.bluetooth.audio.MetadataLtv[] metadata);
void onSourceAseMetadataChanged(in android.hardware.bluetooth.audio.IBluetoothAudioProvider.AseState state, int cigId, int cisId, in @nullable android.hardware.bluetooth.audio.MetadataLtv[] metadata);
android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioBroadcastConfigurationSetting getLeAudioBroadcastConfiguration(in @nullable List<android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioDeviceCapabilities> remoteSinkAudioCapabilities, in android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioBroadcastConfigurationRequirement requirement);
@@ -146,6 +146,10 @@
@nullable android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioDataPathConfiguration inputConfig;
@nullable android.hardware.bluetooth.audio.IBluetoothAudioProvider.LeAudioDataPathConfiguration outputConfig;
}
+ parcelable StreamConfig {
+ android.hardware.bluetooth.audio.AudioContext context;
+ android.hardware.bluetooth.audio.LeAudioConfiguration.StreamMap[] streamMap;
+ }
@Backing(type="byte") @VintfStability
enum AseState {
ENABLING = 0x00,
diff --git a/bluetooth/audio/aidl/android/hardware/bluetooth/audio/IBluetoothAudioProvider.aidl b/bluetooth/audio/aidl/android/hardware/bluetooth/audio/IBluetoothAudioProvider.aidl
index 2e16f4e..8c6fe69 100644
--- a/bluetooth/audio/aidl/android/hardware/bluetooth/audio/IBluetoothAudioProvider.aidl
+++ b/bluetooth/audio/aidl/android/hardware/bluetooth/audio/IBluetoothAudioProvider.aidl
@@ -519,14 +519,37 @@
}
/**
+ * Stream Configuration
+ */
+ parcelable StreamConfig {
+ /**
+ * Streaming Audio Context.
+ * This can serve as a hint for selecting the proper configuration by
+ * the offloader.
+ */
+ AudioContext context;
+ /**
+ * Stream configuration, including connection handles and audio channel
+ * allocations.
+ */
+ StreamMap[] streamMap;
+ }
+
+ /**
* Used to get a data path configuration which dynamically depends on CIS
* connection handles in StreamMap. This is used if non-dynamic data path
* was not provided in LeAudioAseConfigurationSetting. Calling this during
* the unicast audio stream establishment might slightly delay the stream
* start.
+ *
+ * @param sinkConfig - remote sink device stream configuration
+ * @param sourceConfig - remote source device stream configuration
+ *
+ * @return LeAudioDataPathConfigurationPair
*/
LeAudioDataPathConfigurationPair getLeAudioAseDatapathConfiguration(
- in AudioContext context, in StreamMap[] streamMap);
+ in @nullable StreamConfig sinkConfig,
+ in @nullable StreamConfig sourceConfig);
/*
* Audio Stream Endpoint state used to report Metadata changes on the remote
diff --git a/bluetooth/audio/aidl/default/BluetoothAudioProvider.cpp b/bluetooth/audio/aidl/default/BluetoothAudioProvider.cpp
index bdba898..8d03fae 100644
--- a/bluetooth/audio/aidl/default/BluetoothAudioProvider.cpp
+++ b/bluetooth/audio/aidl/default/BluetoothAudioProvider.cpp
@@ -229,14 +229,17 @@
};
ndk::ScopedAStatus BluetoothAudioProvider::getLeAudioAseDatapathConfiguration(
- const ::aidl::android::hardware::bluetooth::audio::AudioContext& in_context,
- const std::vector<::aidl::android::hardware::bluetooth::audio::
- LeAudioConfiguration::StreamMap>& in_streamMap,
+ const std::optional<::aidl::android::hardware::bluetooth::audio::
+ IBluetoothAudioProvider::StreamConfig>&
+ in_sinkConfig,
+ const std::optional<::aidl::android::hardware::bluetooth::audio::
+ IBluetoothAudioProvider::StreamConfig>&
+ in_sourceConfig,
::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::
LeAudioDataPathConfigurationPair* _aidl_return) {
/* TODO: Implement */
- (void)in_context;
- (void)in_streamMap;
+ (void)in_sinkConfig;
+ (void)in_sourceConfig;
(void)_aidl_return;
return ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
}
diff --git a/bluetooth/audio/aidl/default/BluetoothAudioProvider.h b/bluetooth/audio/aidl/default/BluetoothAudioProvider.h
index 5064869..2c21440 100644
--- a/bluetooth/audio/aidl/default/BluetoothAudioProvider.h
+++ b/bluetooth/audio/aidl/default/BluetoothAudioProvider.h
@@ -71,10 +71,12 @@
::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::
LeAudioAseQosConfigurationPair* _aidl_return) override;
ndk::ScopedAStatus getLeAudioAseDatapathConfiguration(
- const ::aidl::android::hardware::bluetooth::audio::AudioContext&
- in_context,
- const std::vector<::aidl::android::hardware::bluetooth::audio::
- LeAudioConfiguration::StreamMap>& in_streamMap,
+ const std::optional<::aidl::android::hardware::bluetooth::audio::
+ IBluetoothAudioProvider::StreamConfig>&
+ in_sinkConfig,
+ const std::optional<::aidl::android::hardware::bluetooth::audio::
+ IBluetoothAudioProvider::StreamConfig>&
+ in_sourceConfig,
::aidl::android::hardware::bluetooth::audio::IBluetoothAudioProvider::
LeAudioDataPathConfigurationPair* _aidl_return) override;
ndk::ScopedAStatus onSinkAseMetadataChanged(
diff --git a/bluetooth/audio/aidl/vts/VtsHalBluetoothAudioTargetTest.cpp b/bluetooth/audio/aidl/vts/VtsHalBluetoothAudioTargetTest.cpp
index 88f2f97..be49a74 100644
--- a/bluetooth/audio/aidl/vts/VtsHalBluetoothAudioTargetTest.cpp
+++ b/bluetooth/audio/aidl/vts/VtsHalBluetoothAudioTargetTest.cpp
@@ -2506,6 +2506,40 @@
// QoS Configurations should not be empty, as we searched for all contexts
ASSERT_FALSE(QoSConfigurations.empty());
}
+
+TEST_P(BluetoothAudioProviderLeAudioOutputHardwareAidl,
+ GetDataPathConfiguration) {
+ IBluetoothAudioProvider::StreamConfig sink_requirement;
+ IBluetoothAudioProvider::StreamConfig source_requirement;
+ std::vector<IBluetoothAudioProvider::LeAudioDataPathConfiguration>
+ DataPathConfigurations;
+ bool is_supported = false;
+
+ for (auto bitmask : all_context_bitmasks) {
+ sink_requirement.context = GetAudioContext(bitmask);
+ source_requirement.context = GetAudioContext(bitmask);
+ IBluetoothAudioProvider::LeAudioDataPathConfigurationPair result;
+ auto aidl_retval = audio_provider_->getLeAudioAseDatapathConfiguration(
+ sink_requirement, source_requirement, &result);
+ if (!aidl_retval.isOk()) {
+ // If not OK, then it could be not supported, as it is an optional feature
+ ASSERT_EQ(aidl_retval.getExceptionCode(), EX_UNSUPPORTED_OPERATION);
+ } else {
+ is_supported = true;
+ if (result.inputConfig.has_value())
+ DataPathConfigurations.push_back(result.inputConfig.value());
+ if (result.inputConfig.has_value())
+ DataPathConfigurations.push_back(result.inputConfig.value());
+ }
+ }
+
+ if (is_supported) {
+ // Datapath Configurations should not be empty, as we searched for all
+ // contexts
+ ASSERT_FALSE(DataPathConfigurations.empty());
+ }
+}
+
/**
* Test whether each provider of type
* SessionType::LE_AUDIO_HARDWARE_OFFLOAD_ENCODING_DATAPATH can be started and
diff --git a/bluetooth/finder/aidl/Android.bp b/bluetooth/finder/aidl/Android.bp
index e606d2d..24f5ca5 100644
--- a/bluetooth/finder/aidl/Android.bp
+++ b/bluetooth/finder/aidl/Android.bp
@@ -28,7 +28,11 @@
},
java: {
enabled: true,
- platform_apis: true,
+ sdk_version: "module_current",
+ min_sdk_version: "30",
+ apex_available: [
+ "com.android.tethering",
+ ],
},
},
}
diff --git a/bluetooth/finder/aidl/android/hardware/bluetooth/finder/Eid.aidl b/bluetooth/finder/aidl/android/hardware/bluetooth/finder/Eid.aidl
index ae9b159..0de306f 100644
--- a/bluetooth/finder/aidl/android/hardware/bluetooth/finder/Eid.aidl
+++ b/bluetooth/finder/aidl/android/hardware/bluetooth/finder/Eid.aidl
@@ -17,7 +17,7 @@
package android.hardware.bluetooth.finder;
/**
- * Ephemeral Identifier
+ * Find My Device network ephemeral identifier
*/
@VintfStability
parcelable Eid {
diff --git a/bluetooth/finder/aidl/android/hardware/bluetooth/finder/IBluetoothFinder.aidl b/bluetooth/finder/aidl/android/hardware/bluetooth/finder/IBluetoothFinder.aidl
index 615739b..a374c2a 100644
--- a/bluetooth/finder/aidl/android/hardware/bluetooth/finder/IBluetoothFinder.aidl
+++ b/bluetooth/finder/aidl/android/hardware/bluetooth/finder/IBluetoothFinder.aidl
@@ -21,7 +21,7 @@
@VintfStability
interface IBluetoothFinder {
/**
- * API to set the EIDs to the Bluetooth Controller
+ * API to set Find My Device network EIDs to the Bluetooth Controller
*
* @param eids array of 20 bytes EID to the Bluetooth
* controller
diff --git a/broadcastradio/aidl/android/hardware/broadcastradio/Metadata.aidl b/broadcastradio/aidl/android/hardware/broadcastradio/Metadata.aidl
index 0ce967f..f1800dc 100644
--- a/broadcastradio/aidl/android/hardware/broadcastradio/Metadata.aidl
+++ b/broadcastradio/aidl/android/hardware/broadcastradio/Metadata.aidl
@@ -86,7 +86,7 @@
/**
* DAB ensemble name abbreviated (string).
*
- * <p>Note: The string must be up to 8 characters long.
+ * <p>Note: The string should be <= 8 characters.
*
* <p>Note: If the short variant is present, the long ({@link Metadata#dabEnsembleName})
* one must be present as well.
@@ -101,7 +101,7 @@
/**
* DAB service name abbreviated (string)
*
- * <p>Note: The string must be up to 8 characters long.
+ * <p>Note: The string should be <= 8 characters.
*/
String dabServiceNameShort;
@@ -113,7 +113,7 @@
/**
* DAB component name abbreviated (string)
*
- * <p>Note: The string must be up to 8 characters long.
+ * <p>Note: The string should be <= 8 characters.
*/
String dabComponentNameShort;
@@ -161,7 +161,7 @@
/**
* HD short station name or HD universal short station name
*
- * <p>It can be up to 12 characters (see SY_IDD_1020s for more info).
+ * <p>It can be <= 12 characters (see SY_IDD_1020s for more info).
*/
String hdStationNameShort;
diff --git a/broadcastradio/aidl/vts/src/VtsHalBroadcastradioAidlTargetTest.cpp b/broadcastradio/aidl/vts/src/VtsHalBroadcastradioAidlTargetTest.cpp
index 2668a97..754b05b 100644
--- a/broadcastradio/aidl/vts/src/VtsHalBroadcastradioAidlTargetTest.cpp
+++ b/broadcastradio/aidl/vts/src/VtsHalBroadcastradioAidlTargetTest.cpp
@@ -35,6 +35,7 @@
#include <broadcastradio-utils-aidl/UtilsV2.h>
#include <cutils/bitops.h>
#include <gmock/gmock.h>
+#include <gtest/gtest.h>
#include <chrono>
#include <condition_variable>
@@ -76,12 +77,6 @@
constexpr int32_t kAidlVersion1 = 1;
constexpr int32_t kAidlVersion2 = 2;
-void printSkipped(const std::string& msg) {
- const auto testInfo = testing::UnitTest::GetInstance()->current_test_info();
- LOG(INFO) << "[ SKIPPED ] " << testInfo->test_case_name() << "." << testInfo->name()
- << " with message: " << msg;
-}
-
bool isValidAmFmFreq(int64_t freq, int aidlVersion) {
ProgramIdentifier id = bcutils::makeIdentifier(IdentifierType::AMFM_FREQUENCY_KHZ, freq);
if (aidlVersion == kAidlVersion1) {
@@ -385,7 +380,7 @@
auto startResult = mModule->startProgramListUpdates(filter);
if (startResult.getServiceSpecificError() == resultToInt(Result::NOT_SUPPORTED)) {
- printSkipped("Program list not supported");
+ LOG(WARNING) << "Program list not supported";
return std::nullopt;
}
EXPECT_TRUE(startResult.isOk());
@@ -430,8 +425,7 @@
bool supported = getAmFmRegionConfig(/* full= */ false, &config);
if (!supported) {
- printSkipped("AM/FM not supported");
- return;
+ GTEST_SKIP() << "AM/FM not supported";
}
EXPECT_LE(popcountll(static_cast<unsigned long long>(config.fmDeemphasis)), 1);
@@ -459,8 +453,7 @@
bool supported = getAmFmRegionConfig(/* full= */ false, &config);
if (!supported) {
- printSkipped("AM/FM not supported");
- return;
+ GTEST_SKIP() << "AM/FM not supported";
}
EXPECT_GT(config.ranges.size(), 0u);
@@ -488,7 +481,7 @@
if (supported && supportsFM(config)) {
EXPECT_GE(popcountll(static_cast<unsigned long long>(config.fmDeemphasis)), 1);
} else {
- printSkipped("FM not supported");
+ GTEST_SKIP() << "FM not supported";
}
}
@@ -509,8 +502,7 @@
bool supported = getAmFmRegionConfig(/* full= */ true, &config);
if (!supported) {
- printSkipped("AM/FM not supported");
- return;
+ GTEST_SKIP() << "AM/FM not supported";
}
EXPECT_GT(config.ranges.size(), 0u);
@@ -536,8 +528,7 @@
auto halResult = mModule->getDabRegionConfig(&config);
if (halResult.getServiceSpecificError() == resultToInt(Result::NOT_SUPPORTED)) {
- printSkipped("DAB not supported");
- return;
+ GTEST_SKIP() << "DAB not supported";
}
ASSERT_TRUE(halResult.isOk());
@@ -671,7 +662,7 @@
* - if it is supported, the method succeeds;
* - after a successful tune call, onCurrentProgramInfoChanged callback is
* invoked carrying a proper selector;
- * - program changes exactly to what was requested.
+ * - program changes to a program info with the program selector requested.
*/
TEST_P(BroadcastRadioHalTest, FmTune) {
LOG(DEBUG) << "FmTune Test";
@@ -715,8 +706,7 @@
LOG(DEBUG) << "HdTune Test";
auto programList = getProgramList();
if (!programList) {
- printSkipped("Empty station list, tune cannot be performed");
- return;
+ GTEST_SKIP() << "Empty station list, tune cannot be performed";
}
ProgramSelector hdSel = {};
ProgramIdentifier physicallyTunedToExpected = {};
@@ -732,8 +722,7 @@
break;
}
if (!hdStationPresent) {
- printSkipped("No HD stations in the list, tune cannot be performed");
- return;
+ GTEST_SKIP() << "No HD stations in the list, tune cannot be performed";
}
// try tuning
@@ -762,7 +751,7 @@
* - if it is supported, the method succeeds;
* - after a successful tune call, onCurrentProgramInfoChanged callback is
* invoked carrying a proper selector;
- * - program changes exactly to what was requested.
+ * - program changes to a program info with the program selector requested.
*/
TEST_P(BroadcastRadioHalTest, DabTune) {
LOG(DEBUG) << "DabTune Test";
@@ -771,8 +760,7 @@
auto halResult = mModule->getDabRegionConfig(&config);
if (halResult.getServiceSpecificError() == resultToInt(Result::NOT_SUPPORTED)) {
- printSkipped("DAB not supported");
- return;
+ GTEST_SKIP() << "DAB not supported";
}
ASSERT_TRUE(halResult.isOk());
ASSERT_NE(config.size(), 0U);
@@ -780,8 +768,7 @@
auto programList = getProgramList();
if (!programList) {
- printSkipped("Empty DAB station list, tune cannot be performed");
- return;
+ GTEST_SKIP() << "Empty DAB station list, tune cannot be performed";
}
ProgramSelector sel = {};
@@ -811,8 +798,7 @@
}
if (!dabStationPresent) {
- printSkipped("No DAB stations in the list, tune cannot be performed");
- return;
+ GTEST_SKIP() << "No DAB stations in the list, tune cannot be performed";
}
// try tuning
@@ -844,7 +830,7 @@
* Verifies that:
* - the method succeeds;
* - the program info is changed within kTuneTimeoutMs;
- * - works both directions and with or without skipping sub-channel.
+ * - works both directions and with or without ing sub-channel.
*/
TEST_P(BroadcastRadioHalTest, Seek) {
LOG(DEBUG) << "Seek Test";
@@ -854,8 +840,7 @@
auto result = mModule->seek(/* in_directionUp= */ true, /* in_skipSubChannel= */ true);
if (result.getServiceSpecificError() == resultToInt(Result::NOT_SUPPORTED)) {
- printSkipped("Seek not supported");
- return;
+ GTEST_SKIP() << "Seek not supported";
}
EXPECT_TRUE(result.isOk());
@@ -905,8 +890,7 @@
auto result = mModule->step(/* in_directionUp= */ true);
if (result.getServiceSpecificError() == resultToInt(Result::NOT_SUPPORTED)) {
- printSkipped("Step not supported");
- return;
+ GTEST_SKIP() << "Step not supported";
}
EXPECT_TRUE(result.isOk());
EXPECT_TRUE(mCallback->waitOnCurrentProgramInfoChangedCallback());
@@ -957,8 +941,7 @@
auto result = mModule->seek(/* in_directionUp= */ true, /* in_skipSubChannel= */ true);
if (result.getServiceSpecificError() == notSupportedError) {
- printSkipped("Cancel is skipped because of seek not supported");
- return;
+ GTEST_SKIP() << "Cancel is skipped because of seek not supported";
}
EXPECT_TRUE(result.isOk());
@@ -1152,8 +1135,7 @@
std::optional<bcutils::ProgramInfoSet> completeList = getProgramList();
if (!completeList) {
- printSkipped("No program list available");
- return;
+ GTEST_SKIP() << "No program list available";
}
ProgramFilter amfmFilter = {};
@@ -1178,8 +1160,7 @@
}
if (expectedResultSize == 0) {
- printSkipped("No Am/FM programs available");
- return;
+ GTEST_SKIP() << "No Am/FM programs available";
}
std::optional<bcutils::ProgramInfoSet> amfmList = getProgramList(amfmFilter);
ASSERT_EQ(amfmList->size(), expectedResultSize) << "amfm filter result size is wrong";
@@ -1200,8 +1181,7 @@
std::optional<bcutils::ProgramInfoSet> completeList = getProgramList();
if (!completeList) {
- printSkipped("No program list available");
- return;
+ GTEST_SKIP() << "No program list available";
}
ProgramFilter dabFilter = {};
@@ -1225,8 +1205,7 @@
}
if (expectedResultSize == 0) {
- printSkipped("No DAB programs available");
- return;
+ GTEST_SKIP() << "No DAB programs available";
}
std::optional<bcutils::ProgramInfoSet> dabList = getProgramList(dabFilter);
ASSERT_EQ(dabList->size(), expectedResultSize) << "dab filter result size is wrong";
@@ -1245,8 +1224,7 @@
std::optional<bcutils::ProgramInfoSet> list = getProgramList();
if (!list) {
- printSkipped("No program list");
- return;
+ GTEST_SKIP() << "No program list";
}
for (const auto& program : *list) {
@@ -1297,8 +1275,7 @@
if (halResult.getServiceSpecificError() == resultToInt(Result::NOT_SUPPORTED)) {
ASSERT_EQ(closeHandle.get(), nullptr);
- printSkipped("Announcements not supported");
- return;
+ GTEST_SKIP() << "Announcements not supported";
}
ASSERT_TRUE(halResult.isOk());
diff --git a/broadcastradio/common/tests/Android.bp b/broadcastradio/common/tests/Android.bp
index 0a6a3a2..1ea4e85 100644
--- a/broadcastradio/common/tests/Android.bp
+++ b/broadcastradio/common/tests/Android.bp
@@ -86,4 +86,7 @@
],
static_libs: ["android.hardware.broadcastradio@common-utils-lib"],
test_suites: ["general-tests"],
+ shared_libs: [
+ "libbase",
+ ],
}
diff --git a/broadcastradio/common/utils/WorkerThread.cpp b/broadcastradio/common/utils/WorkerThread.cpp
index 43fd04a..5c8e59c 100644
--- a/broadcastradio/common/utils/WorkerThread.cpp
+++ b/broadcastradio/common/utils/WorkerThread.cpp
@@ -69,8 +69,11 @@
}
void WorkerThread::threadLoop() {
- while (!mIsTerminating) {
+ while (true) {
unique_lock<mutex> lk(mMut);
+ if (mIsTerminating) {
+ return;
+ }
if (mTasks.empty()) {
mCond.wait(lk);
continue;
diff --git a/broadcastradio/common/utils/include/broadcastradio-utils/WorkerThread.h b/broadcastradio/common/utils/include/broadcastradio-utils/WorkerThread.h
index 457b57e..e381f5a 100644
--- a/broadcastradio/common/utils/include/broadcastradio-utils/WorkerThread.h
+++ b/broadcastradio/common/utils/include/broadcastradio-utils/WorkerThread.h
@@ -20,6 +20,8 @@
#include <queue>
#include <thread>
+#include <android-base/thread_annotations.h>
+
namespace android {
class WorkerThread {
@@ -40,11 +42,11 @@
};
friend bool operator<(const Task& lhs, const Task& rhs);
- std::atomic<bool> mIsTerminating;
std::mutex mMut;
- std::condition_variable mCond;
+ bool mIsTerminating GUARDED_BY(mMut);
+ std::condition_variable mCond GUARDED_BY(mMut);
std::thread mThread;
- std::priority_queue<Task> mTasks;
+ std::priority_queue<Task> mTasks GUARDED_BY(mMut);
void threadLoop();
};
diff --git a/broadcastradio/common/utilsaidl/Android.bp b/broadcastradio/common/utilsaidl/Android.bp
index 4ec635b..4814778 100644
--- a/broadcastradio/common/utilsaidl/Android.bp
+++ b/broadcastradio/common/utilsaidl/Android.bp
@@ -26,7 +26,7 @@
cc_library_static {
name: "android.hardware.broadcastradio@common-utils-aidl-lib",
defaults: [
- "VtsBroadcastRadioDefaults",
+ "BroadcastRadioUtilsDefaults",
],
shared_libs: [
"android.hardware.broadcastradio-V1-ndk",
@@ -36,7 +36,7 @@
cc_library_static {
name: "android.hardware.broadcastradio@common-utils-aidl-lib-V2",
defaults: [
- "VtsBroadcastRadioDefaults",
+ "BroadcastRadioUtilsDefaults",
],
srcs: [
"src/UtilsV2.cpp",
@@ -46,8 +46,23 @@
],
}
+cc_test {
+ name: "broadcastradio_utils_aidl_test",
+ defaults: [
+ "BroadcastRadioUtilsDefaults",
+ ],
+ srcs: [
+ "test/*.cpp",
+ ],
+ static_libs: [
+ "android.hardware.broadcastradio@common-utils-aidl-lib-V2",
+ "android.hardware.broadcastradio-V2-ndk",
+ ],
+ test_suites: ["general-tests"],
+}
+
cc_defaults {
- name: "VtsBroadcastRadioDefaults",
+ name: "BroadcastRadioUtilsDefaults",
vendor_available: true,
relative_install_path: "hw",
cflags: [
diff --git a/broadcastradio/common/utilsaidl/test/BroadcastRadioUtilsTest.cpp b/broadcastradio/common/utilsaidl/test/BroadcastRadioUtilsTest.cpp
new file mode 100644
index 0000000..0750949
--- /dev/null
+++ b/broadcastradio/common/utilsaidl/test/BroadcastRadioUtilsTest.cpp
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2024 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 <broadcastradio-utils-aidl/Utils.h>
+#include <gtest/gtest.h>
+
+namespace aidl::android::hardware::broadcastradio {
+
+namespace {
+constexpr int64_t kFmFrequencyKHz = 97900;
+constexpr uint64_t kDabSidExt = 0x0E10000C221u;
+constexpr uint32_t kDabEnsemble = 0xCE15u;
+constexpr uint64_t kDabFrequencyKhz = 225648u;
+constexpr uint64_t kHdStationId = 0xA0000001u;
+constexpr uint64_t kHdSubChannel = 1u;
+constexpr uint64_t kHdFrequency = 97700u;
+} // namespace
+
+TEST(BroadcastRadioUtilsTest, hasIdWithPrimaryIdType) {
+ ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
+
+ ASSERT_TRUE(utils::hasId(sel, IdentifierType::AMFM_FREQUENCY_KHZ));
+}
+
+TEST(BroadcastRadioUtilsTest, makeIdentifier) {
+ ProgramIdentifier id =
+ utils::makeIdentifier(IdentifierType::AMFM_FREQUENCY_KHZ, kFmFrequencyKHz);
+
+ ASSERT_EQ(id.type, IdentifierType::AMFM_FREQUENCY_KHZ);
+ ASSERT_EQ(id.value, kFmFrequencyKHz);
+}
+
+TEST(BroadcastRadioUtilsTest, makeSelectorAmfm) {
+ ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
+
+ ASSERT_EQ(sel.primaryId.type, IdentifierType::AMFM_FREQUENCY_KHZ);
+ ASSERT_EQ(sel.primaryId.value, kFmFrequencyKHz);
+ ASSERT_TRUE(sel.secondaryIds.empty());
+}
+
+TEST(BroadcastRadioUtilsTest, makeSelectorHd) {
+ ProgramSelector sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
+
+ ASSERT_EQ(sel.primaryId.type, IdentifierType::HD_STATION_ID_EXT);
+ ASSERT_TRUE(sel.secondaryIds.empty());
+ ASSERT_EQ(utils::getHdSubchannel(sel), static_cast<int>(kHdSubChannel));
+ ASSERT_EQ(utils::getHdFrequency(sel), static_cast<uint32_t>(kHdFrequency));
+}
+
+TEST(BroadcastRadioUtilsTest, makeHdRadioStationName) {
+ std::string stationName = "aB1-FM";
+ int64_t expectedIdValue = 0x4D46314241;
+
+ ProgramIdentifier stationNameId = utils::makeHdRadioStationName(stationName);
+
+ ASSERT_EQ(stationNameId.type, IdentifierType::HD_STATION_NAME);
+ ASSERT_EQ(stationNameId.value, expectedIdValue);
+}
+
+TEST(BroadcastRadioUtilsTest, getHdFrequencyWithoutHdId) {
+ ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
+
+ ASSERT_EQ(utils::getHdFrequency(sel), 0u);
+}
+
+TEST(BroadcastRadioUtilsTest, hasAmFmFrequencyWithAmFmSelector) {
+ ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
+
+ ASSERT_TRUE(utils::hasAmFmFrequency(sel));
+}
+
+TEST(BroadcastRadioUtilsTest, hasAmFmFrequencyWithHdSelector) {
+ ProgramSelector sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
+
+ ASSERT_TRUE(utils::hasAmFmFrequency(sel));
+}
+
+TEST(BroadcastRadioUtilsTest, hasAmFmFrequencyWithNonAmFmHdSelector) {
+ ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
+
+ ASSERT_FALSE(utils::hasAmFmFrequency(sel));
+}
+
+TEST(BroadcastRadioUtilsTest, getAmFmFrequencyWithAmFmSelector) {
+ ProgramSelector sel = utils::makeSelectorAmfm(kFmFrequencyKHz);
+
+ ASSERT_EQ(utils::getAmFmFrequency(sel), static_cast<uint32_t>(kFmFrequencyKHz));
+}
+
+TEST(BroadcastRadioUtilsTest, getAmFmFrequencyWithHdSelector) {
+ ProgramSelector sel = utils::makeSelectorHd(kHdStationId, kHdSubChannel, kHdFrequency);
+
+ ASSERT_EQ(utils::getAmFmFrequency(sel), static_cast<uint32_t>(kHdFrequency));
+}
+
+TEST(BroadcastRadioUtilsTest, getAmFmFrequencyWithNonAmFmHdSelector) {
+ ProgramSelector sel = utils::makeSelectorDab(kDabSidExt, kDabEnsemble, kDabFrequencyKhz);
+
+ ASSERT_EQ(utils::getAmFmFrequency(sel), 0u);
+}
+
+} // namespace aidl::android::hardware::broadcastradio
diff --git a/camera/device/aidl/aidl_api/android.hardware.camera.device/current/android/hardware/camera/device/ConfigureStreamsRet.aidl b/camera/device/aidl/aidl_api/android.hardware.camera.device/current/android/hardware/camera/device/ConfigureStreamsRet.aidl
index 5535a30..670f7d2 100644
--- a/camera/device/aidl/aidl_api/android.hardware.camera.device/current/android/hardware/camera/device/ConfigureStreamsRet.aidl
+++ b/camera/device/aidl/aidl_api/android.hardware.camera.device/current/android/hardware/camera/device/ConfigureStreamsRet.aidl
@@ -35,5 +35,4 @@
@VintfStability
parcelable ConfigureStreamsRet {
android.hardware.camera.device.HalStream[] halStreams;
- boolean enableHalBufferManager = false;
}
diff --git a/camera/device/aidl/aidl_api/android.hardware.camera.device/current/android/hardware/camera/device/HalStream.aidl b/camera/device/aidl/aidl_api/android.hardware.camera.device/current/android/hardware/camera/device/HalStream.aidl
index a5784bc..3ae261d 100644
--- a/camera/device/aidl/aidl_api/android.hardware.camera.device/current/android/hardware/camera/device/HalStream.aidl
+++ b/camera/device/aidl/aidl_api/android.hardware.camera.device/current/android/hardware/camera/device/HalStream.aidl
@@ -42,4 +42,5 @@
android.hardware.graphics.common.Dataspace overrideDataSpace;
String physicalCameraId;
boolean supportOffline;
+ boolean enableHalBufferManager;
}
diff --git a/camera/device/aidl/android/hardware/camera/device/ConfigureStreamsRet.aidl b/camera/device/aidl/android/hardware/camera/device/ConfigureStreamsRet.aidl
index 8f462ec..702901f 100644
--- a/camera/device/aidl/android/hardware/camera/device/ConfigureStreamsRet.aidl
+++ b/camera/device/aidl/android/hardware/camera/device/ConfigureStreamsRet.aidl
@@ -34,9 +34,4 @@
* overridden format, maximum buffers etc.
*/
HalStream[] halStreams;
- /**
- * A boolean informing the camera framework whether the HAL buffer manager
- * must be used for the session configured.
- */
- boolean enableHalBufferManager = false;
}
diff --git a/camera/device/aidl/android/hardware/camera/device/HalStream.aidl b/camera/device/aidl/android/hardware/camera/device/HalStream.aidl
index 25a80bc..fac89e6 100644
--- a/camera/device/aidl/android/hardware/camera/device/HalStream.aidl
+++ b/camera/device/aidl/android/hardware/camera/device/HalStream.aidl
@@ -127,4 +127,24 @@
*
*/
boolean supportOffline;
+
+ /**
+ * Whether the buffers for this stream are HAL buffer managed.
+ *
+ * If ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION is
+ * ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_SESSION_CONFIGURABLE, this field
+ * must be set by the HAL to inform the camera framework, whether output buffers for this
+ * stream will be HAL buffer managed - i.e. requested through the
+ * ICameraDeviceCallback.requestStreamsBuffers() API. Only the output buffers for the streams
+ * that have this field set to 'true' will be HAL buffer managed. The output buffers for other
+ * streams will be managed by the camera framework.
+ *
+ * If the value of ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION is
+ * ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_AIDL_DEVICE, the camera framework
+ * will ignore this field and assume that all output streams are hal buffer managed.
+ *
+ * If ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION is not set at all, the camera framework
+ * will ignore this field and assume output buffers are managed by the camera framework.
+ */
+ boolean enableHalBufferManager;
}
diff --git a/camera/device/default/ExternalCameraDevice.cpp b/camera/device/default/ExternalCameraDevice.cpp
index 677fb42..649bf43 100644
--- a/camera/device/default/ExternalCameraDevice.cpp
+++ b/camera/device/default/ExternalCameraDevice.cpp
@@ -399,6 +399,10 @@
const uint8_t hotPixelMode = ANDROID_HOT_PIXEL_MODE_OFF;
UPDATE(ANDROID_HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES, &hotPixelMode, 1);
+ // android.info
+ const uint8_t bufMgrVer = ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_HIDL_DEVICE_3_5;
+ UPDATE(ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION, &bufMgrVer, 1);
+
// android.jpeg
const int32_t jpegAvailableThumbnailSizes[] = {0, 0, 176, 144, 240, 144, 256,
144, 240, 160, 256, 154, 240, 180};
diff --git a/camera/provider/aidl/vts/VtsAidlHalCameraProvider_TargetTest.cpp b/camera/provider/aidl/vts/VtsAidlHalCameraProvider_TargetTest.cpp
index 489bdc9..9a5f248 100644
--- a/camera/provider/aidl/vts/VtsAidlHalCameraProvider_TargetTest.cpp
+++ b/camera/provider/aidl/vts/VtsAidlHalCameraProvider_TargetTest.cpp
@@ -698,7 +698,6 @@
for (const auto& cameraDeviceIds : concurrentDeviceCombinations) {
std::vector<CameraIdAndStreamCombination> cameraIdsAndStreamCombinations;
std::vector<CameraTestInfo> cameraTestInfos;
- size_t i = 0;
for (const auto& id : cameraDeviceIds.combination) {
CameraTestInfo cti;
auto it = idToNameMap.find(id);
@@ -749,7 +748,6 @@
cameraIdAndStreamCombination.cameraId = id;
cameraIdAndStreamCombination.streamConfiguration = cti.config;
cameraIdsAndStreamCombinations.push_back(cameraIdAndStreamCombination);
- i++;
cameraTestInfos.push_back(cti);
}
// Now verify that concurrent streams are supported
@@ -1614,7 +1612,7 @@
std::vector<HalStream> halStreams;
bool supportsPartialResults = false;
- bool useHalBufManager = false;
+ std::set<int32_t> halBufManagedStreamIds;
int32_t partialResultCount = 0;
Stream previewStream;
std::shared_ptr<DeviceCb> cb;
@@ -1622,7 +1620,7 @@
configurePreviewStreams(
name, mProvider, &previewThreshold, physicalIds, &mSession, &previewStream,
&halStreams /*out*/, &supportsPartialResults /*out*/, &partialResultCount /*out*/,
- &useHalBufManager /*out*/, &cb /*out*/, 0 /*streamConfigCounter*/, true);
+ &halBufManagedStreamIds /*out*/, &cb /*out*/, 0 /*streamConfigCounter*/, true);
if (mSession == nullptr) {
// stream combination not supported by HAL, skip test for device
continue;
@@ -1659,7 +1657,9 @@
size_t k = 0;
for (const auto& halStream : halStreams) {
buffer_handle_t buffer_handle;
- if (useHalBufManager) {
+ bool useHalBufManagerForStream =
+ halBufManagedStreamIds.find(halStream.id) != halBufManagedStreamIds.end();
+ if (useHalBufManagerForStream) {
outputBuffers[k] = {halStream.id, /*bufferId*/ 0, NativeHandle(),
BufferStatus::OK, NativeHandle(), NativeHandle()};
} else {
@@ -1763,10 +1763,13 @@
defaultPreviewSettings.unlock(settingsBuffer);
filteredSettings.unlock(filteredSettingsBuffer);
- if (useHalBufManager) {
- std::vector<int32_t> streamIds(halStreams.size());
- for (size_t i = 0; i < streamIds.size(); i++) {
- streamIds[i] = halStreams[i].id;
+ if (halBufManagedStreamIds.size() != 0) {
+ std::vector<int32_t> streamIds;
+ for (size_t i = 0; i < halStreams.size(); i++) {
+ int32_t streamId = halStreams[i].id;
+ if (halBufManagedStreamIds.find(streamId) != halBufManagedStreamIds.end()) {
+ streamIds.emplace_back(streamId);
+ }
}
verifyBuffersReturned(mSession, streamIds, cb);
}
@@ -1830,7 +1833,7 @@
std::vector<HalStream> halStreams;
bool supportsPartialResults = false;
- bool useHalBufManager = false;
+ std::set<int32_t> halBufManagedStreamIds;
int32_t partialResultCount = 0;
Stream previewStream;
std::shared_ptr<DeviceCb> cb;
@@ -1842,8 +1845,8 @@
GRALLOC1_CONSUMER_USAGE_CPU_READ);
previewStream.dataSpace = Dataspace::UNKNOWN;
configureStreams(name, mProvider, format, &mSession, &previewStream, &halStreams,
- &supportsPartialResults, &partialResultCount, &useHalBufManager, &cb,
- 0, /*maxResolution*/ true);
+ &supportsPartialResults, &partialResultCount, &halBufManagedStreamIds,
+ &cb, 0, /*maxResolution*/ true);
ASSERT_NE(mSession, nullptr);
::aidl::android::hardware::common::fmq::MQDescriptor<
@@ -1874,7 +1877,9 @@
size_t k = 0;
for (const auto& halStream : halStreams) {
buffer_handle_t buffer_handle;
- if (useHalBufManager) {
+ bool halBufManagerUsed =
+ halBufManagedStreamIds.find(halStream.id) != halBufManagedStreamIds.end();
+ if (halBufManagerUsed) {
outputBuffers[k] = {halStream.id, 0,
NativeHandle(), BufferStatus::OK,
NativeHandle(), NativeHandle()};
@@ -1926,10 +1931,12 @@
ASSERT_FALSE(inflightReq->errorCodeValid);
ASSERT_NE(inflightReq->resultOutputBuffers.size(), 0u);
}
- if (useHalBufManager) {
- std::vector<int32_t> streamIds(halStreams.size());
- for (size_t i = 0; i < streamIds.size(); i++) {
- streamIds[i] = halStreams[i].id;
+ if (halBufManagedStreamIds.size()) {
+ std::vector<int32_t> streamIds;
+ for (size_t i = 0; i < halStreams.size(); i++) {
+ if (contains(halBufManagedStreamIds, halStreams[i].id)) {
+ streamIds.emplace_back(halStreams[i].id);
+ }
}
verifyBuffersReturned(mSession, streamIds, cb);
}
@@ -1991,7 +1998,7 @@
std::vector<HalStream> halStreams;
bool supportsPartialResults = false;
- bool useHalBufManager = false;
+ std::set<int32_t> halBufManagedStreamIds;
int32_t partialResultCount = 0;
Stream previewStream;
std::shared_ptr<DeviceCb> cb;
@@ -2002,7 +2009,7 @@
previewStream.dataSpace = getDataspace(PixelFormat::IMPLEMENTATION_DEFINED);
configureStreams(name, mProvider, PixelFormat::IMPLEMENTATION_DEFINED, &mSession,
&previewStream, &halStreams, &supportsPartialResults,
- &partialResultCount, &useHalBufManager, &cb, 0,
+ &partialResultCount, &halBufManagedStreamIds, &cb, 0,
/*maxResolution*/ false, profile);
ASSERT_NE(mSession, nullptr);
@@ -2041,7 +2048,7 @@
auto bufferId = requestId + 1; // Buffer id value 0 is not valid
for (const auto& halStream : halStreams) {
buffer_handle_t buffer_handle;
- if (useHalBufManager) {
+ if (contains(halBufManagedStreamIds, halStream.id)) {
outputBuffers[k] = {halStream.id, 0,
NativeHandle(), BufferStatus::OK,
NativeHandle(), NativeHandle()};
@@ -2107,10 +2114,12 @@
verify10BitMetadata(mHandleImporter, *inflightReq, profile);
}
- if (useHalBufManager) {
- std::vector<int32_t> streamIds(halStreams.size());
- for (size_t i = 0; i < streamIds.size(); i++) {
- streamIds[i] = halStreams[i].id;
+ if (halBufManagedStreamIds.size() != 0) {
+ std::vector<int32_t> streamIds;
+ for (size_t i = 0; i < halStreams.size(); i++) {
+ if (contains(halBufManagedStreamIds, halStreams[i].id)) {
+ streamIds.emplace_back(halStreams[i].id);
+ }
}
mSession->signalStreamFlush(streamIds, /*streamConfigCounter*/ 0);
cb->waitForBuffersReturned();
@@ -2442,11 +2451,11 @@
std::vector<HalStream> halStreams;
std::shared_ptr<DeviceCb> cb;
int32_t jpegBufferSize;
- bool useHalBufManager;
+ std::set<int32_t> halBufManagedStreamIds;
configureOfflineStillStream(name, mProvider, &threshold, &mSession /*out*/, &stream /*out*/,
&halStreams /*out*/, &supportsPartialResults /*out*/,
&partialResultCount /*out*/, &cb /*out*/,
- &jpegBufferSize /*out*/, &useHalBufManager /*out*/);
+ &jpegBufferSize /*out*/, &halBufManagedStreamIds /*out*/);
auto ret = mSession->constructDefaultRequestSettings(RequestTemplate::STILL_CAPTURE,
&settings);
@@ -2482,7 +2491,7 @@
StreamBuffer& outputBuffer = outputBuffers[0];
std::unique_lock<std::mutex> l(mLock);
- if (useHalBufManager) {
+ if (contains(halBufManagedStreamIds, halStream.id)) {
outputBuffer = {halStream.id, 0, NativeHandle(), BufferStatus::OK, NativeHandle(),
NativeHandle()};
} else {
diff --git a/camera/provider/aidl/vts/camera_aidl_test.cpp b/camera/provider/aidl/vts/camera_aidl_test.cpp
index 6a08f58..d2a409e 100644
--- a/camera/provider/aidl/vts/camera_aidl_test.cpp
+++ b/camera/provider/aidl/vts/camera_aidl_test.cpp
@@ -2258,7 +2258,6 @@
int64_t bufferId = 1;
int32_t frameNumber = 1;
CameraMetadata settings;
-
for (const auto& name : cameraDeviceNames) {
Stream testStream;
std::vector<HalStream> halStreams;
@@ -2548,12 +2547,19 @@
ndk::ScopedAStatus CameraAidlTest::configureStreams(std::shared_ptr<ICameraDeviceSession>& session,
const StreamConfiguration& config,
- bool sessionHalBufferManager,
- bool* useHalBufManager,
+ BufferManagerType bufferManagerType,
+ std::set<int32_t>* halBufManagedStreamIds,
std::vector<HalStream>* halStreams) {
auto ret = ndk::ScopedAStatus::ok();
ConfigureStreamsRet aidl_return;
- if (sessionHalBufferManager) {
+ int32_t interfaceVersion = -1;
+ ret = session->getInterfaceVersion(&interfaceVersion);
+ if (!ret.isOk()) {
+ return ret;
+ }
+
+ if (flags::session_hal_buf_manager() &&
+ (bufferManagerType == BufferManagerType::SESSION && interfaceVersion >= 3)) {
ret = session->configureStreamsV2(config, &aidl_return);
} else {
ret = session->configureStreams(config, halStreams);
@@ -2561,10 +2567,16 @@
if (!ret.isOk()) {
return ret;
}
- if (sessionHalBufferManager) {
- *useHalBufManager = aidl_return.enableHalBufferManager;
+ if (flags::session_hal_buf_manager() && bufferManagerType == BufferManagerType::SESSION) {
*halStreams = std::move(aidl_return.halStreams);
}
+ for (const auto& halStream : *halStreams) {
+ if ((flags::session_hal_buf_manager() && bufferManagerType == BufferManagerType::SESSION &&
+ halStream.enableHalBufferManager) ||
+ bufferManagerType == BufferManagerType::HAL) {
+ halBufManagedStreamIds->insert(halStream.id);
+ }
+ }
return ndk::ScopedAStatus::ok();
}
@@ -2621,16 +2633,16 @@
ASSERT_TRUE(ret.isOk());
ASSERT_NE(*session, nullptr);
- *useHalBufManager = false;
- bool sessionHalBufferManager = false;
+ BufferManagerType bufferManagerType = BufferManagerType::FRAMEWORK;
status = find_camera_metadata_ro_entry(
staticMeta, ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION, &entry);
if ((0 == status) && (entry.count == 1)) {
- *useHalBufManager = (entry.data.u8[0] ==
- ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_HIDL_DEVICE_3_5);
- sessionHalBufferManager =
- (entry.data.u8[0] ==
- ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_SESSION_CONFIGURABLE);
+ if (entry.data.u8[0] == ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_HIDL_DEVICE_3_5) {
+ bufferManagerType = BufferManagerType::HAL;
+ } else if (entry.data.u8[0] ==
+ ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_SESSION_CONFIGURABLE) {
+ bufferManagerType = BufferManagerType::SESSION;
+ }
}
outputPreviewStreams.clear();
@@ -2689,7 +2701,8 @@
ASSERT_EQ(supported, true);
std::vector<HalStream> halConfigs;
- ret = configureStreams(*session, config, sessionHalBufferManager, useHalBufManager,
+ std::set<int32_t> halBufManagedStreamIds;
+ ret = configureStreams(*session, config, bufferManagerType, &halBufManagedStreamIds,
&halConfigs);
ALOGI("configureStreams returns status: %d:%d", ret.getExceptionCode(),
ret.getServiceSpecificError());
@@ -2697,6 +2710,7 @@
ASSERT_EQ(1u, halConfigs.size());
halStreams->clear();
halStreams->push_back(halConfigs[0]);
+ *useHalBufManager = halBufManagedStreamIds.size() != 0;
if (*useHalBufManager) {
std::vector<Stream> ss(1);
std::vector<HalStream> hs(1);
@@ -2823,6 +2837,7 @@
overrideRotateAndCrop(&request.settings);
request.outputBuffers = std::vector<StreamBuffer>(1);
StreamBuffer& outputBuffer = request.outputBuffers[0];
+
if (useHalBufManager) {
outputBuffer = {halStreams[0].id,
/*bufferId*/ 0, NativeHandle(), BufferStatus::OK,
@@ -2941,14 +2956,14 @@
const AvailableStream* previewThreshold, const std::unordered_set<std::string>& physicalIds,
std::shared_ptr<ICameraDeviceSession>* session, Stream* previewStream,
std::vector<HalStream>* halStreams, bool* supportsPartialResults,
- int32_t* partialResultCount, bool* useHalBufManager, std::shared_ptr<DeviceCb>* cb,
- int32_t streamConfigCounter, bool allowUnsupport) {
+ int32_t* partialResultCount, std::set<int32_t>* halBufManagedStreamIds,
+ std::shared_ptr<DeviceCb>* cb, int32_t streamConfigCounter, bool allowUnsupport) {
ASSERT_NE(nullptr, session);
ASSERT_NE(nullptr, halStreams);
ASSERT_NE(nullptr, previewStream);
ASSERT_NE(nullptr, supportsPartialResults);
ASSERT_NE(nullptr, partialResultCount);
- ASSERT_NE(nullptr, useHalBufManager);
+ ASSERT_NE(nullptr, halBufManagedStreamIds);
ASSERT_NE(nullptr, cb);
ASSERT_FALSE(physicalIds.empty());
@@ -2985,16 +3000,16 @@
ASSERT_TRUE(ret.isOk());
ASSERT_NE(*session, nullptr);
- *useHalBufManager = false;
- bool sessionHalBufferManager = false;
+ BufferManagerType bufferManagerType = BufferManagerType::FRAMEWORK;
status = find_camera_metadata_ro_entry(
staticMeta, ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION, &entry);
if ((0 == status) && (entry.count == 1)) {
- *useHalBufManager = (entry.data.u8[0] ==
- ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_HIDL_DEVICE_3_5);
- sessionHalBufferManager =
- (entry.data.u8[0] ==
- ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_SESSION_CONFIGURABLE);
+ if (entry.data.u8[0] == ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_HIDL_DEVICE_3_5) {
+ bufferManagerType = BufferManagerType::HAL;
+ } else if (entry.data.u8[0] ==
+ ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_SESSION_CONFIGURABLE) {
+ bufferManagerType = BufferManagerType::SESSION;
+ }
}
outputPreviewStreams.clear();
@@ -3049,18 +3064,21 @@
config.streamConfigCounter = streamConfigCounter;
std::vector<HalStream> halConfigs;
- ret = configureStreams(*session, config, sessionHalBufferManager, useHalBufManager,
+ ret = configureStreams(*session, config, bufferManagerType, halBufManagedStreamIds,
&halConfigs);
ASSERT_TRUE(ret.isOk());
ASSERT_EQ(physicalIds.size(), halConfigs.size());
*halStreams = halConfigs;
- if (*useHalBufManager) {
- std::vector<Stream> ss(physicalIds.size());
- std::vector<HalStream> hs(physicalIds.size());
+ if (halBufManagedStreamIds->size() != 0) {
+ // Only include the streams that are HAL buffer managed
+ std::vector<Stream> ss;
+ std::vector<HalStream> hs;
for (size_t i = 0; i < physicalIds.size(); i++) {
- ss[i] = streams[i];
- hs[i] = halConfigs[i];
+ if (contains(*halBufManagedStreamIds, halConfigs[i].id)) {
+ ss.emplace_back(streams[i]);
+ hs.emplace_back(halConfigs[i]);
+ }
}
(*cb)->setCurrentStreamConfig(ss, hs);
}
@@ -3078,22 +3096,20 @@
cb->waitForBuffersReturned();
}
-void CameraAidlTest::configureStreams(const std::string& name,
- const std::shared_ptr<ICameraProvider>& provider,
- PixelFormat format,
- std::shared_ptr<ICameraDeviceSession>* session,
- Stream* previewStream, std::vector<HalStream>* halStreams,
- bool* supportsPartialResults, int32_t* partialResultCount,
- bool* useHalBufManager, std::shared_ptr<DeviceCb>* outCb,
- uint32_t streamConfigCounter, bool maxResolution,
- RequestAvailableDynamicRangeProfilesMap dynamicRangeProf,
- RequestAvailableColorSpaceProfilesMap colorSpaceProf) {
+void CameraAidlTest::configureStreams(
+ const std::string& name, const std::shared_ptr<ICameraProvider>& provider,
+ PixelFormat format, std::shared_ptr<ICameraDeviceSession>* session, Stream* previewStream,
+ std::vector<HalStream>* halStreams, bool* supportsPartialResults,
+ int32_t* partialResultCount, std::set<int32_t>* halBufManagedStreamIds,
+ std::shared_ptr<DeviceCb>* outCb, uint32_t streamConfigCounter, bool maxResolution,
+ RequestAvailableDynamicRangeProfilesMap dynamicRangeProf,
+ RequestAvailableColorSpaceProfilesMap colorSpaceProf) {
ASSERT_NE(nullptr, session);
ASSERT_NE(nullptr, halStreams);
ASSERT_NE(nullptr, previewStream);
ASSERT_NE(nullptr, supportsPartialResults);
ASSERT_NE(nullptr, partialResultCount);
- ASSERT_NE(nullptr, useHalBufManager);
+ ASSERT_NE(nullptr, halBufManagedStreamIds);
ASSERT_NE(nullptr, outCb);
ALOGI("configureStreams: Testing camera device %s", name.c_str());
@@ -3130,16 +3146,16 @@
ASSERT_TRUE(ret.isOk());
ASSERT_NE(*session, nullptr);
- *useHalBufManager = false;
- bool sessionHalBufferManager = false;
+ BufferManagerType bufferManagerType = BufferManagerType::FRAMEWORK;
status = find_camera_metadata_ro_entry(
staticMeta, ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION, &entry);
if ((0 == status) && (entry.count == 1)) {
- *useHalBufManager = (entry.data.u8[0] ==
- ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_HIDL_DEVICE_3_5);
- sessionHalBufferManager =
- (entry.data.u8[0] ==
- ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_SESSION_CONFIGURABLE);
+ if (entry.data.u8[0] == ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_HIDL_DEVICE_3_5) {
+ bufferManagerType = BufferManagerType::HAL;
+ } else if (entry.data.u8[0] ==
+ ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_SESSION_CONFIGURABLE) {
+ bufferManagerType = BufferManagerType::SESSION;
+ }
}
outputStreams.clear();
@@ -3193,11 +3209,11 @@
ASSERT_TRUE(ret.isOk());
ASSERT_EQ(supported, true);
- ret = configureStreams(*session, config, sessionHalBufferManager, useHalBufManager, halStreams);
+ ret = configureStreams(*session, config, bufferManagerType, halBufManagedStreamIds, halStreams);
ASSERT_TRUE(ret.isOk());
- if (*useHalBufManager) {
+ if (halBufManagedStreamIds->size() != 0) {
std::vector<Stream> ss(1);
std::vector<HalStream> hs(1);
ss[0] = streams[0];
@@ -3542,7 +3558,7 @@
const AvailableStream* threshold, std::shared_ptr<ICameraDeviceSession>* session,
Stream* stream, std::vector<HalStream>* halStreams, bool* supportsPartialResults,
int32_t* partialResultCount, std::shared_ptr<DeviceCb>* outCb, int32_t* jpegBufferSize,
- bool* useHalBufManager) {
+ std::set<int32_t>* halBufManagedStreamIds) {
ASSERT_NE(nullptr, session);
ASSERT_NE(nullptr, halStreams);
ASSERT_NE(nullptr, stream);
@@ -3550,7 +3566,7 @@
ASSERT_NE(nullptr, partialResultCount);
ASSERT_NE(nullptr, outCb);
ASSERT_NE(nullptr, jpegBufferSize);
- ASSERT_NE(nullptr, useHalBufManager);
+ ASSERT_NE(nullptr, halBufManagedStreamIds);
std::vector<AvailableStream> outputStreams;
std::shared_ptr<ICameraDevice> cameraDevice;
@@ -3577,16 +3593,16 @@
*supportsPartialResults = (*partialResultCount > 1);
}
- *useHalBufManager = false;
- bool sessionHalBufferManager = false;
+ BufferManagerType bufferManagerType = BufferManagerType::FRAMEWORK;
status = find_camera_metadata_ro_entry(
staticMeta, ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION, &entry);
if ((0 == status) && (entry.count == 1)) {
- *useHalBufManager = (entry.data.u8[0] ==
- ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_HIDL_DEVICE_3_5);
- sessionHalBufferManager =
- (entry.data.u8[0] ==
- ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_SESSION_CONFIGURABLE);
+ if (entry.data.u8[0] == ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_HIDL_DEVICE_3_5) {
+ bufferManagerType = BufferManagerType::HAL;
+ } else if (entry.data.u8[0] ==
+ ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION_SESSION_CONFIGURABLE) {
+ bufferManagerType = BufferManagerType::SESSION;
+ }
}
auto st = getJpegBufferSize(staticMeta, jpegBufferSize);
@@ -3639,11 +3655,11 @@
StreamConfiguration config = {streams, StreamConfigurationMode::NORMAL_MODE, CameraMetadata()};
- ret = configureStreams(*session, config, sessionHalBufferManager, useHalBufManager, halStreams);
+ ret = configureStreams(*session, config, bufferManagerType, halBufManagedStreamIds, halStreams);
ASSERT_TRUE(ret.isOk());
- if (*useHalBufManager) {
+ if (halBufManagedStreamIds->size() != 0) {
(*outCb)->setCurrentStreamConfig(streams, *halStreams);
}
@@ -3746,7 +3762,7 @@
std::vector<HalStream> halStreams;
bool supportsPartialResults = false;
- bool useHalBufManager = false;
+ std::set<int32_t> halBufManagedStreamIds;
int32_t partialResultCount = 0;
Stream previewStream;
std::shared_ptr<DeviceCb> cb;
@@ -3755,7 +3771,7 @@
GRALLOC1_CONSUMER_USAGE_HWCOMPOSER);
configureStreams(name, mProvider, PixelFormat::IMPLEMENTATION_DEFINED, &mSession,
&previewStream, &halStreams, &supportsPartialResults, &partialResultCount,
- &useHalBufManager, &cb, 0,
+ &halBufManagedStreamIds, &cb, 0,
/*maxResolution*/ false, dynamicRangeProfile, colorSpace);
ASSERT_NE(mSession, nullptr);
@@ -3794,7 +3810,7 @@
auto bufferId = requestId + 1; // Buffer id value 0 is not valid
for (const auto& halStream : halStreams) {
buffer_handle_t buffer_handle;
- if (useHalBufManager) {
+ if (contains(halBufManagedStreamIds, halStream.id)) {
outputBuffers[k] = {halStream.id, 0,
NativeHandle(), BufferStatus::OK,
NativeHandle(), NativeHandle()};
@@ -3861,10 +3877,12 @@
}
}
- if (useHalBufManager) {
- std::vector<int32_t> streamIds(halStreams.size());
+ if (halBufManagedStreamIds.size() != 0) {
+ std::vector<int32_t> streamIds;
for (size_t i = 0; i < streamIds.size(); i++) {
- streamIds[i] = halStreams[i].id;
+ if (contains(halBufManagedStreamIds, halStreams[i].id)) {
+ streamIds.emplace_back(halStreams[i].id);
+ }
}
mSession->signalStreamFlush(streamIds, /*streamConfigCounter*/ 0);
cb->waitForBuffersReturned();
diff --git a/camera/provider/aidl/vts/camera_aidl_test.h b/camera/provider/aidl/vts/camera_aidl_test.h
index e3b0820..507a637 100644
--- a/camera/provider/aidl/vts/camera_aidl_test.h
+++ b/camera/provider/aidl/vts/camera_aidl_test.h
@@ -99,6 +99,11 @@
class DeviceCb; // Forward declare to break circular header dependency
+template <typename T>
+bool contains(const std::set<T>& container, T value) {
+ return container.find(value) != container.end();
+}
+
class CameraAidlTest : public ::testing::TestWithParam<std::string> {
public:
enum SystemCameraKind {
@@ -121,6 +126,8 @@
HIDDEN_SECURE_CAMERA
};
+ enum BufferManagerType { FRAMEWORK = 0, HAL, SESSION };
+
struct AvailableStream {
int32_t width;
int32_t height;
@@ -200,11 +207,12 @@
std::shared_ptr<ICameraDeviceSession>* session /*out*/, Stream* stream /*out*/,
std::vector<HalStream>* halStreams, bool* supportsPartialResults /*out*/,
int32_t* partialResultCount /*out*/, std::shared_ptr<DeviceCb>* outCb /*out*/,
- int32_t* jpegBufferSize /*out*/, bool* useHalBufManager /*out*/);
+ int32_t* jpegBufferSize /*out*/, std::set<int32_t>* halBufManagedStreamIds /*out*/);
ndk::ScopedAStatus configureStreams(std::shared_ptr<ICameraDeviceSession>& session,
const StreamConfiguration& config,
- bool sessionHalBufferManager, bool* useHalBufManager,
+ BufferManagerType bufferManagerType,
+ std::set<int32_t>* halBufManagedStreamIds,
std::vector<HalStream>* halStreams);
void configureStreams(
@@ -212,8 +220,9 @@
PixelFormat format, std::shared_ptr<ICameraDeviceSession>* session /*out*/,
Stream* previewStream /*out*/, std::vector<HalStream>* halStreams /*out*/,
bool* supportsPartialResults /*out*/, int32_t* partialResultCount /*out*/,
- bool* useHalBufManager /*out*/, std::shared_ptr<DeviceCb>* outCb /*out*/,
- uint32_t streamConfigCounter, bool maxResolution,
+ std::set<int32_t>* halBufManagedStreamIds /*out*/,
+ std::shared_ptr<DeviceCb>* outCb /*out*/, uint32_t streamConfigCounter,
+ bool maxResolution,
RequestAvailableDynamicRangeProfilesMap dynamicRangeProf =
RequestAvailableDynamicRangeProfilesMap::
ANDROID_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_STANDARD,
@@ -227,7 +236,7 @@
const std::unordered_set<std::string>& physicalIds,
std::shared_ptr<ICameraDeviceSession>* session /*out*/, Stream* previewStream /*out*/,
std::vector<HalStream>* halStreams /*out*/, bool* supportsPartialResults /*out*/,
- int32_t* partialResultCount /*out*/, bool* useHalBufManager /*out*/,
+ int32_t* partialResultCount /*out*/, std::set<int32_t>* halBufManagedStreamIds /*out*/,
std::shared_ptr<DeviceCb>* cb /*out*/, int32_t streamConfigCounter = 0,
bool allowUnsupport = false);
diff --git a/compatibility_matrices/compatibility_matrix.9.xml b/compatibility_matrices/compatibility_matrix.9.xml
index cbeb18e..90dd414 100644
--- a/compatibility_matrices/compatibility_matrix.9.xml
+++ b/compatibility_matrices/compatibility_matrix.9.xml
@@ -1,22 +1,4 @@
<compatibility-matrix version="1.0" type="framework" level="9">
- <hal format="hidl" optional="true">
- <name>android.hardware.audio</name>
- <version>6.0</version>
- <version>7.0-1</version>
- <interface>
- <name>IDevicesFactory</name>
- <instance>default</instance>
- </interface>
- </hal>
- <hal format="hidl" optional="true">
- <name>android.hardware.audio.effect</name>
- <version>6.0</version>
- <version>7.0</version>
- <interface>
- <name>IEffectsFactory</name>
- <instance>default</instance>
- </interface>
- </hal>
<hal format="aidl" optional="true">
<name>android.hardware.audio.core</name>
<version>1-2</version>
diff --git a/graphics/composer/2.1/vts/functional/VtsHalGraphicsComposerV2_1TargetTest.cpp b/graphics/composer/2.1/vts/functional/VtsHalGraphicsComposerV2_1TargetTest.cpp
index b67cfc2..a1992b9 100644
--- a/graphics/composer/2.1/vts/functional/VtsHalGraphicsComposerV2_1TargetTest.cpp
+++ b/graphics/composer/2.1/vts/functional/VtsHalGraphicsComposerV2_1TargetTest.cpp
@@ -315,6 +315,8 @@
* required client targets.
*/
TEST_P(GraphicsComposerHidlTest, GetClientTargetSupport) {
+ ASSERT_NO_FATAL_FAILURE(
+ mComposerClient->setPowerMode(mPrimaryDisplay, IComposerClient::PowerMode::ON));
std::vector<Config> configs = mComposerClient->getDisplayConfigs(mPrimaryDisplay);
for (auto config : configs) {
int32_t width = mComposerClient->getDisplayAttribute(mPrimaryDisplay, config,
diff --git a/graphics/composer/2.2/vts/functional/VtsHalGraphicsComposerV2_2TargetTest.cpp b/graphics/composer/2.2/vts/functional/VtsHalGraphicsComposerV2_2TargetTest.cpp
index 2bd287b..cd4cb58 100644
--- a/graphics/composer/2.2/vts/functional/VtsHalGraphicsComposerV2_2TargetTest.cpp
+++ b/graphics/composer/2.2/vts/functional/VtsHalGraphicsComposerV2_2TargetTest.cpp
@@ -256,6 +256,8 @@
* required client targets.
*/
TEST_P(GraphicsComposerHidlTest, GetClientTargetSupport_2_2) {
+ ASSERT_NO_FATAL_FAILURE(
+ mComposerClient->setPowerMode_2_2(mPrimaryDisplay, IComposerClient::PowerMode::ON));
std::vector<Config> configs = mComposerClient->getDisplayConfigs(mPrimaryDisplay);
for (auto config : configs) {
int32_t width = mComposerClient->getDisplayAttribute(mPrimaryDisplay, config,
diff --git a/graphics/composer/2.3/vts/functional/VtsHalGraphicsComposerV2_3TargetTest.cpp b/graphics/composer/2.3/vts/functional/VtsHalGraphicsComposerV2_3TargetTest.cpp
index c072ef0..f99c72d 100644
--- a/graphics/composer/2.3/vts/functional/VtsHalGraphicsComposerV2_3TargetTest.cpp
+++ b/graphics/composer/2.3/vts/functional/VtsHalGraphicsComposerV2_3TargetTest.cpp
@@ -274,6 +274,8 @@
* Test IComposerClient::getClientTargetSupport_2_3
*/
TEST_P(GraphicsComposerHidlTest, GetClientTargetSupport_2_3) {
+ ASSERT_NO_FATAL_FAILURE(
+ mComposerClient->setPowerMode_2_2(mPrimaryDisplay, IComposerClient::PowerMode::ON));
std::vector<V2_1::Config> configs = mComposerClient->getDisplayConfigs(mPrimaryDisplay);
for (auto config : configs) {
int32_t width = mComposerClient->getDisplayAttribute(mPrimaryDisplay, config,
diff --git a/health/2.0/README.md b/health/2.0/README.md
index 8a7c922..1c636c7 100644
--- a/health/2.0/README.md
+++ b/health/2.0/README.md
@@ -1,181 +1,7 @@
-# Implement the 2.1 HAL instead!
+# Deprecated.
-It is strongly recommended that you implement the 2.1 HAL directly. See
-`hardware/interfaces/health/2.1/README.md` for more details.
+Health HIDL HAL 2.0 is deprecated and subject to removal. Please
+implement the Health AIDL HAL instead.
-# Upgrading from Health 1.0 HAL
-
-1. Remove `android.hardware.health@1.0*` from `PRODUCT_PACKAGES`
- in `device/<manufacturer>/<device>/device.mk`
-
-1. If the device does not have a vendor-specific `libhealthd` AND does not
- implement storage-related APIs, just do the following:
-
- ```mk
- PRODUCT_PACKAGES += android.hardware.health@2.0-service
- ```
-
- Otherwise, continue to the next step.
-
-1. Create directory
- `device/<manufacturer>/<device>/health`
-
-1. Create `device/<manufacturer>/<device>/health/Android.bp`
- (or equivalent `device/<manufacturer>/<device>/health/Android.mk`)
-
- ```bp
- cc_binary {
- name: "android.hardware.health@2.0-service.<device>",
- init_rc: ["android.hardware.health@2.0-service.<device>.rc"],
- proprietary: true,
- relative_install_path: "hw",
- srcs: [
- "HealthService.cpp",
- ],
-
- cflags: [
- "-Wall",
- "-Werror",
- ],
-
- static_libs: [
- "android.hardware.health@2.0-impl",
- "android.hardware.health@1.0-convert",
- "libhealthservice",
- "libbatterymonitor",
- ],
-
- shared_libs: [
- "libbase",
- "libcutils",
- "libhidlbase",
- "libutils",
- "android.hardware.health@2.0",
- ],
-
- header_libs: ["libhealthd_headers"],
-
- overrides: [
- "healthd",
- ],
- }
- ```
-
- 1. (recommended) To remove `healthd` from the build, keep "overrides" section.
- 1. To keep `healthd` in the build, remove "overrides" section.
-
-1. Create `device/<manufacturer>/<device>/health/android.hardware.health@2.0-service.<device>.rc`
-
- ```rc
- service vendor.health-hal-2-0 /vendor/bin/hw/android.hardware.health@2.0-service.<device>
- class hal
- user system
- group system
- capabilities WAKE_ALARM
- file /dev/kmsg w
- ```
-
-1. Create `device/<manufacturer>/<device>/health/HealthService.cpp`:
-
- ```c++
- #include <health2/service.h>
- int main() { return health_service_main(); }
- ```
-
-1. `libhealthd` dependency:
-
- 1. If the device has a vendor-specific `libhealthd.<soc>`, add it to static_libs.
-
- 1. If the device does not have a vendor-specific `libhealthd`, add the following
- lines to `HealthService.cpp`:
-
- ```c++
- #include <healthd/healthd.h>
- void healthd_board_init(struct healthd_config*) {}
-
- int healthd_board_battery_update(struct android::BatteryProperties*) {
- // return 0 to log periodic polled battery status to kernel log
- return 0;
- }
- ```
-
-1. Storage related APIs:
-
- 1. If the device does not implement `IHealth.getDiskStats` and
- `IHealth.getStorageInfo`, add `libhealthstoragedefault` to `static_libs`.
-
- 1. If the device implements one of these two APIs, add and implement the
- following functions in `HealthService.cpp`:
-
- ```c++
- void get_storage_info(std::vector<struct StorageInfo>& info) {
- // ...
- }
- void get_disk_stats(std::vector<struct DiskStats>& stats) {
- // ...
- }
- ```
-
-1. Update necessary SELinux permissions. For example,
-
- ```
- # device/<manufacturer>/<device>/sepolicy/vendor/file_contexts
- /vendor/bin/hw/android\.hardware\.health@2\.0-service\.<device> u:object_r:hal_health_default_exec:s0
-
- # device/<manufacturer>/<device>/sepolicy/vendor/hal_health_default.te
- # Add device specific permissions to hal_health_default domain, especially
- # if a device-specific libhealthd is used and/or device-specific storage related
- # APIs are implemented.
- ```
-
-1. Implementing health HAL in recovery. The health HAL is used for battery
-status checks during OTA for non-A/B devices. If the health HAL is not
-implemented in recovery, `is_battery_ok()` will always return `true`.
-
- 1. If the device does not have a vendor-specific `libhealthd`, nothing needs to
- be done. A "backup" implementation is provided in
- `android.hardware.health@2.0-impl-default`, which is always installed to recovery
- image by default.
-
- 1. If the device does have a vendor-specific `libhealthd`, implement the following
- module and include it in `PRODUCT_PACKAGES` (replace `<device>` with appropriate
- strings):
-
- ```bp
- // Android.bp
- cc_library_shared {
- name: "android.hardware.health@2.0-impl-<device>",
- recovery_available: true,
- relative_install_path: "hw",
- static_libs: [
- "android.hardware.health@2.0-impl",
- "libhealthd.<device>"
- // Include the following or implement device-specific storage APIs
- "libhealthstoragedefault",
- ],
- srcs: [
- "HealthImpl.cpp",
- ],
- overrides: [
- "android.hardware.health@2.0-impl-default",
- ],
- }
- ```
-
- ```c++
- // HealthImpl.cpp
- #include <health2/Health.h>
- #include <healthd/healthd.h>
- using android::hardware::health::V2_0::IHealth;
- using android::hardware::health::V2_0::implementation::Health;
- extern "C" IHealth* HIDL_FETCH_IHealth(const char* name) {
- const static std::string providedInstance{"default"};
- if (providedInstance != name) return nullptr;
- return Health::initInstance(&gHealthdConfig).get();
- }
- ```
-
- ```mk
- # device.mk
- PRODUCT_PACKAGES += android.hardware.health@2.0-impl-<device>
- ```
+See [`hardware/interfaces/health/aidl/README.md`](../aidl/README.md) for
+details.
diff --git a/health/2.0/default/Android.bp b/health/2.0/default/Android.bp
deleted file mode 100644
index 73cd553..0000000
--- a/health/2.0/default/Android.bp
+++ /dev/null
@@ -1,72 +0,0 @@
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "hardware_interfaces_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["hardware_interfaces_license"],
-}
-
-cc_defaults {
- name: "android.hardware.health@2.0-impl_defaults",
-
- recovery_available: true,
- cflags: [
- "-Wall",
- "-Werror",
- ],
-
- shared_libs: [
- "libbase",
- "libhidlbase",
- "liblog",
- "libutils",
- "libcutils",
- "android.hardware.health@2.0",
- ],
-
- static_libs: [
- "libbatterymonitor",
- "android.hardware.health@1.0-convert",
- ],
-}
-
-// Helper library for implementing health HAL. It is recommended that a health
-// service or passthrough HAL link to this library.
-cc_library_static {
- name: "android.hardware.health@2.0-impl",
- defaults: ["android.hardware.health@2.0-impl_defaults"],
-
- vendor_available: true,
- srcs: [
- "Health.cpp",
- "healthd_common_adapter.cpp",
- ],
-
- whole_static_libs: [
- "libhealthloop",
- ],
-
- export_include_dirs: ["include"],
-}
-
-// Default passthrough implementation for recovery. Vendors can implement
-// android.hardware.health@2.0-impl-recovery-<device> to customize the behavior
-// of the HAL in recovery.
-// The implementation does NOT start the uevent loop for polling.
-cc_library_shared {
- name: "android.hardware.health@2.0-impl-default",
- defaults: ["android.hardware.health@2.0-impl_defaults"],
-
- recovery_available: true,
- relative_install_path: "hw",
-
- static_libs: [
- "android.hardware.health@2.0-impl",
- "libhealthstoragedefault",
- ],
-
- srcs: [
- "HealthImplDefault.cpp",
- ],
-}
diff --git a/health/2.0/default/Health.cpp b/health/2.0/default/Health.cpp
deleted file mode 100644
index 65eada8..0000000
--- a/health/2.0/default/Health.cpp
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- * Copyright (C) 2018 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.
- */
-#define LOG_TAG "android.hardware.health@2.0-impl"
-#include <android-base/logging.h>
-
-#include <android-base/file.h>
-#include <android/hardware/health/2.0/types.h>
-#include <health2/Health.h>
-
-#include <hal_conversion.h>
-#include <hidl/HidlTransportSupport.h>
-
-using HealthInfo_1_0 = android::hardware::health::V1_0::HealthInfo;
-using android::hardware::health::V1_0::hal_conversion::convertFromHealthInfo;
-
-extern void healthd_battery_update_internal(bool);
-
-namespace android {
-namespace hardware {
-namespace health {
-namespace V2_0 {
-namespace implementation {
-
-sp<Health> Health::instance_;
-
-Health::Health(struct healthd_config* c) {
- // TODO(b/69268160): remove when libhealthd is removed.
- healthd_board_init(c);
- battery_monitor_ = std::make_unique<BatteryMonitor>();
- battery_monitor_->init(c);
-}
-
-// Methods from IHealth follow.
-Return<Result> Health::registerCallback(const sp<IHealthInfoCallback>& callback) {
- if (callback == nullptr) {
- return Result::SUCCESS;
- }
-
- {
- std::lock_guard<decltype(callbacks_lock_)> lock(callbacks_lock_);
- callbacks_.push_back(callback);
- // unlock
- }
-
- auto linkRet = callback->linkToDeath(this, 0u /* cookie */);
- if (!linkRet.withDefault(false)) {
- LOG(WARNING) << __func__ << "Cannot link to death: "
- << (linkRet.isOk() ? "linkToDeath returns false" : linkRet.description());
- // ignore the error
- }
-
- return updateAndNotify(callback);
-}
-
-bool Health::unregisterCallbackInternal(const sp<IBase>& callback) {
- if (callback == nullptr) return false;
-
- bool removed = false;
- std::lock_guard<decltype(callbacks_lock_)> lock(callbacks_lock_);
- for (auto it = callbacks_.begin(); it != callbacks_.end();) {
- if (interfacesEqual(*it, callback)) {
- it = callbacks_.erase(it);
- removed = true;
- } else {
- ++it;
- }
- }
- (void)callback->unlinkToDeath(this).isOk(); // ignore errors
- return removed;
-}
-
-Return<Result> Health::unregisterCallback(const sp<IHealthInfoCallback>& callback) {
- return unregisterCallbackInternal(callback) ? Result::SUCCESS : Result::NOT_FOUND;
-}
-
-template <typename T>
-void getProperty(const std::unique_ptr<BatteryMonitor>& monitor, int id, T defaultValue,
- const std::function<void(Result, T)>& callback) {
- struct BatteryProperty prop;
- T ret = defaultValue;
- Result result = Result::SUCCESS;
- status_t err = monitor->getProperty(static_cast<int>(id), &prop);
- if (err != OK) {
- LOG(DEBUG) << "getProperty(" << id << ")"
- << " fails: (" << err << ") " << strerror(-err);
- } else {
- ret = static_cast<T>(prop.valueInt64);
- }
- switch (err) {
- case OK:
- result = Result::SUCCESS;
- break;
- case NAME_NOT_FOUND:
- result = Result::NOT_SUPPORTED;
- break;
- default:
- result = Result::UNKNOWN;
- break;
- }
- callback(result, static_cast<T>(ret));
-}
-
-Return<void> Health::getChargeCounter(getChargeCounter_cb _hidl_cb) {
- getProperty<int32_t>(battery_monitor_, BATTERY_PROP_CHARGE_COUNTER, 0, _hidl_cb);
- return Void();
-}
-
-Return<void> Health::getCurrentNow(getCurrentNow_cb _hidl_cb) {
- getProperty<int32_t>(battery_monitor_, BATTERY_PROP_CURRENT_NOW, 0, _hidl_cb);
- return Void();
-}
-
-Return<void> Health::getCurrentAverage(getCurrentAverage_cb _hidl_cb) {
- getProperty<int32_t>(battery_monitor_, BATTERY_PROP_CURRENT_AVG, 0, _hidl_cb);
- return Void();
-}
-
-Return<void> Health::getCapacity(getCapacity_cb _hidl_cb) {
- getProperty<int32_t>(battery_monitor_, BATTERY_PROP_CAPACITY, 0, _hidl_cb);
- return Void();
-}
-
-Return<void> Health::getEnergyCounter(getEnergyCounter_cb _hidl_cb) {
- getProperty<int64_t>(battery_monitor_, BATTERY_PROP_ENERGY_COUNTER, 0, _hidl_cb);
- return Void();
-}
-
-Return<void> Health::getChargeStatus(getChargeStatus_cb _hidl_cb) {
- getProperty(battery_monitor_, BATTERY_PROP_BATTERY_STATUS, BatteryStatus::UNKNOWN, _hidl_cb);
- return Void();
-}
-
-Return<Result> Health::update() {
- if (!healthd_mode_ops || !healthd_mode_ops->battery_update) {
- LOG(WARNING) << "health@2.0: update: not initialized. "
- << "update() should not be called in charger";
- return Result::UNKNOWN;
- }
-
- // Retrieve all information and call healthd_mode_ops->battery_update, which calls
- // notifyListeners.
- battery_monitor_->updateValues();
- const HealthInfo_1_0& health_info = battery_monitor_->getHealthInfo_1_0();
- struct BatteryProperties props;
- convertFromHealthInfo(health_info, &props);
- bool log = (healthd_board_battery_update(&props) == 0);
- if (log) {
- battery_monitor_->logValues();
- }
- healthd_mode_ops->battery_update(&props);
- bool chargerOnline = battery_monitor_->isChargerOnline();
-
- // adjust uevent / wakealarm periods
- healthd_battery_update_internal(chargerOnline);
-
- return Result::SUCCESS;
-}
-
-Return<Result> Health::updateAndNotify(const sp<IHealthInfoCallback>& callback) {
- std::lock_guard<decltype(callbacks_lock_)> lock(callbacks_lock_);
- std::vector<sp<IHealthInfoCallback>> storedCallbacks{std::move(callbacks_)};
- callbacks_.clear();
- if (callback != nullptr) {
- callbacks_.push_back(callback);
- }
- Return<Result> result = update();
- callbacks_ = std::move(storedCallbacks);
- return result;
-}
-
-void Health::notifyListeners(HealthInfo* healthInfo) {
- std::vector<StorageInfo> info;
- get_storage_info(info);
-
- std::vector<DiskStats> stats;
- get_disk_stats(stats);
-
- int32_t currentAvg = 0;
-
- struct BatteryProperty prop;
- status_t ret = battery_monitor_->getProperty(BATTERY_PROP_CURRENT_AVG, &prop);
- if (ret == OK) {
- currentAvg = static_cast<int32_t>(prop.valueInt64);
- }
-
- healthInfo->batteryCurrentAverage = currentAvg;
- healthInfo->diskStats = stats;
- healthInfo->storageInfos = info;
-
- std::lock_guard<decltype(callbacks_lock_)> lock(callbacks_lock_);
- for (auto it = callbacks_.begin(); it != callbacks_.end();) {
- auto ret = (*it)->healthInfoChanged(*healthInfo);
- if (!ret.isOk() && ret.isDeadObject()) {
- it = callbacks_.erase(it);
- } else {
- ++it;
- }
- }
-}
-
-Return<void> Health::debug(const hidl_handle& handle, const hidl_vec<hidl_string>&) {
- if (handle != nullptr && handle->numFds >= 1) {
- int fd = handle->data[0];
- battery_monitor_->dumpState(fd);
-
- getHealthInfo([fd](auto res, const auto& info) {
- android::base::WriteStringToFd("\ngetHealthInfo -> ", fd);
- if (res == Result::SUCCESS) {
- android::base::WriteStringToFd(toString(info), fd);
- } else {
- android::base::WriteStringToFd(toString(res), fd);
- }
- android::base::WriteStringToFd("\n", fd);
- });
-
- fsync(fd);
- }
- return Void();
-}
-
-Return<void> Health::getStorageInfo(getStorageInfo_cb _hidl_cb) {
- std::vector<struct StorageInfo> info;
- get_storage_info(info);
- hidl_vec<struct StorageInfo> info_vec(info);
- if (!info.size()) {
- _hidl_cb(Result::NOT_SUPPORTED, info_vec);
- } else {
- _hidl_cb(Result::SUCCESS, info_vec);
- }
- return Void();
-}
-
-Return<void> Health::getDiskStats(getDiskStats_cb _hidl_cb) {
- std::vector<struct DiskStats> stats;
- get_disk_stats(stats);
- hidl_vec<struct DiskStats> stats_vec(stats);
- if (!stats.size()) {
- _hidl_cb(Result::NOT_SUPPORTED, stats_vec);
- } else {
- _hidl_cb(Result::SUCCESS, stats_vec);
- }
- return Void();
-}
-
-Return<void> Health::getHealthInfo(getHealthInfo_cb _hidl_cb) {
- using android::hardware::health::V1_0::hal_conversion::convertToHealthInfo;
-
- updateAndNotify(nullptr);
- HealthInfo healthInfo = battery_monitor_->getHealthInfo_2_0();
-
- std::vector<StorageInfo> info;
- get_storage_info(info);
-
- std::vector<DiskStats> stats;
- get_disk_stats(stats);
-
- int32_t currentAvg = 0;
-
- struct BatteryProperty prop;
- status_t ret = battery_monitor_->getProperty(BATTERY_PROP_CURRENT_AVG, &prop);
- if (ret == OK) {
- currentAvg = static_cast<int32_t>(prop.valueInt64);
- }
-
- healthInfo.batteryCurrentAverage = currentAvg;
- healthInfo.diskStats = stats;
- healthInfo.storageInfos = info;
-
- _hidl_cb(Result::SUCCESS, healthInfo);
- return Void();
-}
-
-void Health::serviceDied(uint64_t /* cookie */, const wp<IBase>& who) {
- (void)unregisterCallbackInternal(who.promote());
-}
-
-sp<IHealth> Health::initInstance(struct healthd_config* c) {
- if (instance_ == nullptr) {
- instance_ = new Health(c);
- }
- return instance_;
-}
-
-sp<Health> Health::getImplementation() {
- CHECK(instance_ != nullptr);
- return instance_;
-}
-
-} // namespace implementation
-} // namespace V2_0
-} // namespace health
-} // namespace hardware
-} // namespace android
diff --git a/health/2.0/default/HealthImplDefault.cpp b/health/2.0/default/HealthImplDefault.cpp
deleted file mode 100644
index 08fee9e..0000000
--- a/health/2.0/default/HealthImplDefault.cpp
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2018 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 <health2/Health.h>
-#include <healthd/healthd.h>
-
-using android::hardware::health::V2_0::IHealth;
-using android::hardware::health::V2_0::implementation::Health;
-
-static struct healthd_config gHealthdConfig = {
- .energyCounter = nullptr,
- .boot_min_cap = 0,
- .screen_on = nullptr};
-
-void healthd_board_init(struct healthd_config*) {
- // use defaults
-}
-
-int healthd_board_battery_update(struct android::BatteryProperties*) {
- // return 0 to log periodic polled battery status to kernel log
- return 0;
-}
-
-void healthd_mode_default_impl_init(struct healthd_config*) {
- // noop
-}
-
-int healthd_mode_default_impl_preparetowait(void) {
- return -1;
-}
-
-void healthd_mode_default_impl_heartbeat(void) {
- // noop
-}
-
-void healthd_mode_default_impl_battery_update(struct android::BatteryProperties*) {
- // noop
-}
-
-static struct healthd_mode_ops healthd_mode_default_impl_ops = {
- .init = healthd_mode_default_impl_init,
- .preparetowait = healthd_mode_default_impl_preparetowait,
- .heartbeat = healthd_mode_default_impl_heartbeat,
- .battery_update = healthd_mode_default_impl_battery_update,
-};
-
-extern "C" IHealth* HIDL_FETCH_IHealth(const char* name) {
- const static std::string providedInstance{"backup"};
- healthd_mode_ops = &healthd_mode_default_impl_ops;
- if (providedInstance == name) {
- // use defaults
- // Health class stores static instance
- return Health::initInstance(&gHealthdConfig).get();
- }
- return nullptr;
-}
diff --git a/health/2.0/default/healthd_common_adapter.cpp b/health/2.0/default/healthd_common_adapter.cpp
deleted file mode 100644
index 0b5d869..0000000
--- a/health/2.0/default/healthd_common_adapter.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2019 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.
- */
-
-// Support legacy functions in healthd/healthd.h using healthd_mode_ops.
-// New code should use HealthLoop directly instead.
-
-#include <memory>
-
-#include <cutils/klog.h>
-#include <health/HealthLoop.h>
-#include <health2/Health.h>
-#include <healthd/healthd.h>
-
-using android::hardware::health::HealthLoop;
-using android::hardware::health::V2_0::implementation::Health;
-
-struct healthd_mode_ops* healthd_mode_ops = nullptr;
-
-// Adapter of HealthLoop to use legacy healthd_mode_ops.
-class HealthLoopAdapter : public HealthLoop {
- public:
- // Expose internal functions, assuming clients calls them in the same thread
- // where StartLoop is called.
- int RegisterEvent(int fd, BoundFunction func, EventWakeup wakeup) {
- return HealthLoop::RegisterEvent(fd, func, wakeup);
- }
- void AdjustWakealarmPeriods(bool charger_online) {
- return HealthLoop::AdjustWakealarmPeriods(charger_online);
- }
- protected:
- void Init(healthd_config* config) override { healthd_mode_ops->init(config); }
- void Heartbeat() override { healthd_mode_ops->heartbeat(); }
- int PrepareToWait() override { return healthd_mode_ops->preparetowait(); }
- void ScheduleBatteryUpdate() override { Health::getImplementation()->update(); }
-};
-static std::unique_ptr<HealthLoopAdapter> health_loop;
-
-int healthd_register_event(int fd, void (*handler)(uint32_t), EventWakeup wakeup) {
- if (!health_loop) return -1;
-
- auto wrapped_handler = [handler](auto*, uint32_t epevents) { handler(epevents); };
- return health_loop->RegisterEvent(fd, wrapped_handler, wakeup);
-}
-
-void healthd_battery_update_internal(bool charger_online) {
- if (!health_loop) return;
- health_loop->AdjustWakealarmPeriods(charger_online);
-}
-
-int healthd_main() {
- if (!healthd_mode_ops) {
- KLOG_ERROR("healthd ops not set, exiting\n");
- exit(1);
- }
-
- health_loop = std::make_unique<HealthLoopAdapter>();
-
- int ret = health_loop->StartLoop();
-
- // Should not reach here. The following will exit().
- health_loop.reset();
-
- return ret;
-}
diff --git a/health/2.0/default/include/health2/Health.h b/health/2.0/default/include/health2/Health.h
deleted file mode 100644
index 6410474..0000000
--- a/health/2.0/default/include/health2/Health.h
+++ /dev/null
@@ -1,79 +0,0 @@
-#ifndef ANDROID_HARDWARE_HEALTH_V2_0_HEALTH_H
-#define ANDROID_HARDWARE_HEALTH_V2_0_HEALTH_H
-
-#include <memory>
-#include <vector>
-
-#include <android/hardware/health/1.0/types.h>
-#include <android/hardware/health/2.0/IHealth.h>
-#include <healthd/BatteryMonitor.h>
-#include <hidl/Status.h>
-
-using android::hardware::health::V2_0::StorageInfo;
-using android::hardware::health::V2_0::DiskStats;
-
-void get_storage_info(std::vector<struct StorageInfo>& info);
-void get_disk_stats(std::vector<struct DiskStats>& stats);
-
-namespace android {
-namespace hardware {
-namespace health {
-namespace V2_0 {
-namespace implementation {
-
-using V1_0::BatteryStatus;
-
-using ::android::hidl::base::V1_0::IBase;
-
-struct Health : public IHealth, hidl_death_recipient {
- public:
- static sp<IHealth> initInstance(struct healthd_config* c);
- // Should only be called by implementation itself (-impl, -service).
- // Clients should not call this function. Instead, initInstance() initializes and returns the
- // global instance that has fewer functions.
- static sp<Health> getImplementation();
-
- Health(struct healthd_config* c);
-
- void notifyListeners(HealthInfo* info);
-
- // Methods from IHealth follow.
- Return<Result> registerCallback(const sp<IHealthInfoCallback>& callback) override;
- Return<Result> unregisterCallback(const sp<IHealthInfoCallback>& callback) override;
- Return<Result> update() override;
- Return<void> getChargeCounter(getChargeCounter_cb _hidl_cb) override;
- Return<void> getCurrentNow(getCurrentNow_cb _hidl_cb) override;
- Return<void> getCurrentAverage(getCurrentAverage_cb _hidl_cb) override;
- Return<void> getCapacity(getCapacity_cb _hidl_cb) override;
- Return<void> getEnergyCounter(getEnergyCounter_cb _hidl_cb) override;
- Return<void> getChargeStatus(getChargeStatus_cb _hidl_cb) override;
- Return<void> getStorageInfo(getStorageInfo_cb _hidl_cb) override;
- Return<void> getDiskStats(getDiskStats_cb _hidl_cb) override;
- Return<void> getHealthInfo(getHealthInfo_cb _hidl_cb) override;
-
- // Methods from ::android::hidl::base::V1_0::IBase follow.
- Return<void> debug(const hidl_handle& fd, const hidl_vec<hidl_string>& args) override;
-
- void serviceDied(uint64_t cookie, const wp<IBase>& /* who */) override;
-
- private:
- static sp<Health> instance_;
-
- std::recursive_mutex callbacks_lock_;
- std::vector<sp<IHealthInfoCallback>> callbacks_;
- std::unique_ptr<BatteryMonitor> battery_monitor_;
-
- bool unregisterCallbackInternal(const sp<IBase>& cb);
-
- // update() and only notify the given callback, but none of the other callbacks.
- // If cb is null, do not notify any callback at all.
- Return<Result> updateAndNotify(const sp<IHealthInfoCallback>& cb);
-};
-
-} // namespace implementation
-} // namespace V2_0
-} // namespace health
-} // namespace hardware
-} // namespace android
-
-#endif // ANDROID_HARDWARE_HEALTH_V2_0_HEALTH_H
diff --git a/health/2.0/utils/README.md b/health/2.0/utils/README.md
index c59b3f3..3fc8dab 100644
--- a/health/2.0/utils/README.md
+++ b/health/2.0/utils/README.md
@@ -6,25 +6,3 @@
calling `IHealth::getService()` directly.
Its Java equivalent can be found in `BatteryService.HealthServiceWrapper`.
-
-# libhealthservice
-
-Common code for all (hwbinder) services of the health HAL, including healthd and
-vendor health service `android.hardware.health@2.0-service(.<vendor>)`. `main()` in
-those binaries calls `health_service_main()` directly.
-
-# libhealthstoragedefault
-
-Default implementation for storage related APIs for (hwbinder) services of the
-health HAL. If an implementation of the health HAL do not wish to provide any
-storage info, include this library. Otherwise, it should implement the following
-two functions:
-
-```c++
-void get_storage_info(std::vector<struct StorageInfo>& info) {
- // ...
-}
-void get_disk_stats(std::vector<struct DiskStats>& stats) {
- // ...
-}
-```
diff --git a/health/2.0/utils/libhealthhalutils/HealthHalUtils.cpp b/health/2.0/utils/libhealthhalutils/HealthHalUtils.cpp
index 3c353e6..67f0ecc 100644
--- a/health/2.0/utils/libhealthhalutils/HealthHalUtils.cpp
+++ b/health/2.0/utils/libhealthhalutils/HealthHalUtils.cpp
@@ -24,34 +24,14 @@
namespace health {
namespace V2_0 {
+// Deprecated. Kept to minimize migration cost.
+// The function can be removed once Health 2.1 is removed
+// (i.e. compatibility_matrix.7.xml is the lowest supported level).
sp<IHealth> get_health_service() {
- // For the core and vendor variant, the "backup" instance points to healthd,
- // which is removed.
- // For the recovery variant, the "backup" instance has a different
- // meaning. It points to android.hardware.health@2.0-impl-default.recovery
- // which was assumed by OEMs to be always installed when a
- // vendor-specific libhealthd is not necessary. Hence, its behavior
- // is kept. See health/2.0/README.md.
- // android.hardware.health@2.0-impl-default.recovery, and subsequently the
- // special handling of recovery mode below, can be removed once health@2.1
- // is the minimum required version (i.e. compatibility matrix level 5 is the
- // minimum supported level). Health 2.1 requires OEMs to install the
+ // Health 2.1 requires OEMs to install the
// implementation to the recovery partition when it is necessary (i.e. on
// non-A/B devices, where IsBatteryOk() is needed in recovery).
- for (auto&& instanceName :
-#ifdef __ANDROID_RECOVERY__
- { "default", "backup" }
-#else
- {"default"}
-#endif
- ) {
- auto ret = IHealth::getService(instanceName);
- if (ret != nullptr) {
- return ret;
- }
- LOG(INFO) << "health: cannot get " << instanceName << " service";
- }
- return nullptr;
+ return IHealth::getService();
}
} // namespace V2_0
diff --git a/health/2.0/utils/libhealthservice/Android.bp b/health/2.0/utils/libhealthservice/Android.bp
deleted file mode 100644
index 8023692..0000000
--- a/health/2.0/utils/libhealthservice/Android.bp
+++ /dev/null
@@ -1,38 +0,0 @@
-// Reasonable defaults for android.hardware.health@2.0-service.<device>.
-// Vendor service can customize by implementing functions defined in
-// libhealthd and libhealthstoragedefault.
-
-
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "hardware_interfaces_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["hardware_interfaces_license"],
-}
-
-cc_library_static {
- name: "libhealthservice",
- vendor_available: true,
- srcs: ["HealthServiceCommon.cpp"],
-
- export_include_dirs: ["include"],
-
- cflags: [
- "-Wall",
- "-Werror",
- ],
- shared_libs: [
- "android.hardware.health@2.0",
- ],
- static_libs: [
- "android.hardware.health@2.0-impl",
- "android.hardware.health@1.0-convert",
- ],
- export_static_lib_headers: [
- "android.hardware.health@1.0-convert",
- ],
- header_libs: ["libhealthd_headers"],
- export_header_lib_headers: ["libhealthd_headers"],
-}
diff --git a/health/2.0/utils/libhealthservice/HealthServiceCommon.cpp b/health/2.0/utils/libhealthservice/HealthServiceCommon.cpp
deleted file mode 100644
index 039570a..0000000
--- a/health/2.0/utils/libhealthservice/HealthServiceCommon.cpp
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright 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.
- */
-
-#define LOG_TAG "health@2.0/"
-#include <android-base/logging.h>
-
-#include <android/hardware/health/1.0/types.h>
-#include <hal_conversion.h>
-#include <health2/Health.h>
-#include <health2/service.h>
-#include <healthd/healthd.h>
-#include <hidl/HidlTransportSupport.h>
-#include <hwbinder/IPCThreadState.h>
-
-using android::hardware::IPCThreadState;
-using android::hardware::configureRpcThreadpool;
-using android::hardware::handleTransportPoll;
-using android::hardware::setupTransportPolling;
-using android::hardware::health::V2_0::HealthInfo;
-using android::hardware::health::V1_0::hal_conversion::convertToHealthInfo;
-using android::hardware::health::V2_0::IHealth;
-using android::hardware::health::V2_0::implementation::Health;
-
-extern int healthd_main(void);
-
-static int gBinderFd = -1;
-static std::string gInstanceName;
-
-static void binder_event(uint32_t /*epevents*/) {
- if (gBinderFd >= 0) handleTransportPoll(gBinderFd);
-}
-
-void healthd_mode_service_2_0_init(struct healthd_config* config) {
- LOG(INFO) << LOG_TAG << gInstanceName << " Hal is starting up...";
-
- gBinderFd = setupTransportPolling();
-
- if (gBinderFd >= 0) {
- if (healthd_register_event(gBinderFd, binder_event))
- LOG(ERROR) << LOG_TAG << gInstanceName << ": Register for binder events failed";
- }
-
- android::sp<IHealth> service = Health::initInstance(config);
- CHECK_EQ(service->registerAsService(gInstanceName), android::OK)
- << LOG_TAG << gInstanceName << ": Failed to register HAL";
-
- LOG(INFO) << LOG_TAG << gInstanceName << ": Hal init done";
-}
-
-int healthd_mode_service_2_0_preparetowait(void) {
- IPCThreadState::self()->flushCommands();
- return -1;
-}
-
-void healthd_mode_service_2_0_heartbeat(void) {
- // noop
-}
-
-void healthd_mode_service_2_0_battery_update(struct android::BatteryProperties* prop) {
- HealthInfo info;
- convertToHealthInfo(prop, info.legacy);
- Health::getImplementation()->notifyListeners(&info);
-}
-
-static struct healthd_mode_ops healthd_mode_service_2_0_ops = {
- .init = healthd_mode_service_2_0_init,
- .preparetowait = healthd_mode_service_2_0_preparetowait,
- .heartbeat = healthd_mode_service_2_0_heartbeat,
- .battery_update = healthd_mode_service_2_0_battery_update,
-};
-
-int health_service_main(const char* instance) {
- gInstanceName = instance;
- if (gInstanceName.empty()) {
- gInstanceName = "default";
- }
- healthd_mode_ops = &healthd_mode_service_2_0_ops;
- LOG(INFO) << LOG_TAG << gInstanceName << ": Hal starting main loop...";
- return healthd_main();
-}
diff --git a/health/2.0/utils/libhealthservice/include/health2/service.h b/health/2.0/utils/libhealthservice/include/health2/service.h
deleted file mode 100644
index d260568..0000000
--- a/health/2.0/utils/libhealthservice/include/health2/service.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright 2018 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 ANDROID_HARDWARE_HEALTH_V2_0_SERVICE_COMMON
-#define ANDROID_HARDWARE_HEALTH_V2_0_SERVICE_COMMON
-
-int health_service_main(const char* instance = "");
-
-#endif // ANDROID_HARDWARE_HEALTH_V2_0_SERVICE_COMMON
diff --git a/health/2.0/utils/libhealthstoragedefault/Android.bp b/health/2.0/utils/libhealthstoragedefault/Android.bp
deleted file mode 100644
index 3de8789..0000000
--- a/health/2.0/utils/libhealthstoragedefault/Android.bp
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2018 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.
- */
-
-// Default implementation for (passthrough) clients that statically links to
-// android.hardware.health@2.0-impl but do no query for storage related
-// information.
-package {
- // See: http://go/android-license-faq
- // A large-scale-change added 'default_applicable_licenses' to import
- // all of the 'license_kinds' from "hardware_interfaces_license"
- // to get the below license kinds:
- // SPDX-license-identifier-Apache-2.0
- default_applicable_licenses: ["hardware_interfaces_license"],
-}
-
-cc_library_static {
- srcs: ["StorageHealthDefault.cpp"],
- name: "libhealthstoragedefault",
- vendor_available: true,
- recovery_available: true,
- cflags: ["-Werror"],
- shared_libs: [
- "android.hardware.health@2.0",
- ],
-}
diff --git a/health/2.0/utils/libhealthstoragedefault/StorageHealthDefault.cpp b/health/2.0/utils/libhealthstoragedefault/StorageHealthDefault.cpp
deleted file mode 100644
index aba6cc3..0000000
--- a/health/2.0/utils/libhealthstoragedefault/StorageHealthDefault.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2018 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 "include/StorageHealthDefault.h"
-
-void get_storage_info(std::vector<struct StorageInfo>&) {
- // Use defaults.
-}
-
-void get_disk_stats(std::vector<struct DiskStats>&) {
- // Use defaults
-}
diff --git a/health/2.0/utils/libhealthstoragedefault/include/StorageHealthDefault.h b/health/2.0/utils/libhealthstoragedefault/include/StorageHealthDefault.h
deleted file mode 100644
index 85eb210..0000000
--- a/health/2.0/utils/libhealthstoragedefault/include/StorageHealthDefault.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2018 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 ANDROID_HARDWARE_HEALTH_V2_0_STORAGE_HEALTH_H
-#define ANDROID_HARDWARE_HEALTH_V2_0_STORAGE_HEALTH_H
-
-#include <android/hardware/health/2.0/types.h>
-
-using android::hardware::health::V2_0::StorageInfo;
-using android::hardware::health::V2_0::DiskStats;
-
-/*
- * Get storage information.
- */
-void get_storage_info(std::vector<struct StorageInfo>& info);
-
-/*
- * Get disk statistics.
- */
-void get_disk_stats(std::vector<struct DiskStats>& stats);
-
-#endif // ANDROID_HARDWARE_HEALTH_V2_0_STORAGE_HEALTH_H
diff --git a/media/c2/aidl/aidl_api/android.hardware.media.c2/current/android/hardware/media/c2/IConfigurable.aidl b/media/c2/aidl/aidl_api/android.hardware.media.c2/current/android/hardware/media/c2/IConfigurable.aidl
index 32f5abd..04e776e 100644
--- a/media/c2/aidl/aidl_api/android.hardware.media.c2/current/android/hardware/media/c2/IConfigurable.aidl
+++ b/media/c2/aidl/aidl_api/android.hardware.media.c2/current/android/hardware/media/c2/IConfigurable.aidl
@@ -37,12 +37,23 @@
android.hardware.media.c2.IConfigurable.ConfigResult config(in android.hardware.media.c2.Params inParams, in boolean mayBlock);
int getId();
String getName();
- android.hardware.media.c2.Params query(in int[] indices, in boolean mayBlock);
+ android.hardware.media.c2.IConfigurable.QueryResult query(in int[] indices, in boolean mayBlock);
android.hardware.media.c2.ParamDescriptor[] querySupportedParams(in int start, in int count);
- android.hardware.media.c2.FieldSupportedValuesQueryResult[] querySupportedValues(in android.hardware.media.c2.FieldSupportedValuesQuery[] inFields, in boolean mayBlock);
+ android.hardware.media.c2.IConfigurable.QuerySupportedValuesResult querySupportedValues(in android.hardware.media.c2.FieldSupportedValuesQuery[] inFields, in boolean mayBlock);
@VintfStability
parcelable ConfigResult {
android.hardware.media.c2.Params params;
android.hardware.media.c2.SettingResult[] failures;
+ android.hardware.media.c2.Status status;
+ }
+ @VintfStability
+ parcelable QueryResult {
+ android.hardware.media.c2.Params params;
+ android.hardware.media.c2.Status status;
+ }
+ @VintfStability
+ parcelable QuerySupportedValuesResult {
+ android.hardware.media.c2.FieldSupportedValuesQueryResult[] values;
+ android.hardware.media.c2.Status status;
}
}
diff --git a/media/c2/aidl/android/hardware/media/c2/IConfigurable.aidl b/media/c2/aidl/android/hardware/media/c2/IConfigurable.aidl
index 7fdb825..1481c15 100644
--- a/media/c2/aidl/android/hardware/media/c2/IConfigurable.aidl
+++ b/media/c2/aidl/android/hardware/media/c2/IConfigurable.aidl
@@ -21,6 +21,7 @@
import android.hardware.media.c2.ParamDescriptor;
import android.hardware.media.c2.Params;
import android.hardware.media.c2.SettingResult;
+import android.hardware.media.c2.Status;
/**
* Generic configuration interface presented by all configurable Codec2 objects.
@@ -34,12 +35,42 @@
* Return parcelable for config() interface.
*
* This includes the successful config settings along with the failure reasons of
- * the specified setting.
+ * the specified setting. @p status is for the compatibility with HIDL interface.
+ * (The value is defined in Status.aidl, and possible values are enumerated
+ * in config() interface definition)
*/
@VintfStability
parcelable ConfigResult {
Params params;
SettingResult[] failures;
+ Status status;
+ }
+
+ /**
+ * Return parcelable for query() interface.
+ *
+ * @p params is the parameter descripion for queried configuration indices.
+ * @p status is for the compatibility with HIDL interface. (The value is defined in
+ * Status.aidl, and possible values are enumerated in query() interface definition)
+ */
+ @VintfStability
+ parcelable QueryResult {
+ Params params;
+ Status status;
+ }
+
+ /**
+ * Return parcelable for querySupportedValues() interface.
+ *
+ * @p values is the value descripion for queried configuration fields.
+ * @p status is for the compatibility with HIDL interface. (The value is defined in
+ * Status.aidl, and possible values are enumerated in querySupportedValues()
+ * interface definition)
+ */
+ @VintfStability
+ parcelable QuerySupportedValuesResult {
+ FieldSupportedValuesQueryResult[] values;
+ Status status;
}
/**
@@ -82,7 +113,8 @@
* @param mayBlock Whether this call may block or not.
* @return result of config. Params in the result should be in same order
* with @p inParams.
- * @throws ServiceSpecificException with one of the following values:
+ *
+ * Returned @p status will be one of the following.
* - `Status::NO_MEMORY` - Some supported parameters could not be updated
* successfully because they contained unsupported values.
* These are returned in @p failures.
@@ -146,17 +178,22 @@
*
* @param indices List of C2Param structure indices to query.
* @param mayBlock Whether this call may block or not.
- * @return Flattened representation of std::vector<C2Param> object.
- * Unsupported settings are skipped in the results. The order in @p indices
- * still be preserved except skipped settings.
- * @throws ServiceSpecificException with one of the following values:
+ * @return @p params is the flattened representation of std::vector<C2Param> object.
+ * Technically unsupported settings can be either skipped or invalidated.
+ * (Invalidated params will be skipped during unflattening to make these identical.)
+ * In the future we will want these to be invalidated to make it easier
+ * for the framework code.
+ *
+ * The order in @p indices still be preserved except skipped settings.
+ *
+ * Returned @p status will be one of the following.
* - `Status::NO_MEMORY` - Could not allocate memory for a supported parameter.
* - `Status::BLOCKING` - Querying some parameters requires blocking, but
* @p mayBlock is false.
* - `Status::TIMED_OUT` - The operation cannot be finished in a timely manner.
* - `Status::CORRUPTED` - Some unknown error occurred.
*/
- Params query(in int[] indices, in boolean mayBlock);
+ QueryResult query(in int[] indices, in boolean mayBlock);
/**
* Returns a list of supported parameters within a selected range of C2Param
@@ -197,9 +234,10 @@
*
* @param inFields List of field queries.
* @param mayBlock Whether this call may block or not.
- * @return List of supported values and results for the
+ * @return @p values is the list of supported values and results for the
* supplied queries.
- * @throws ServiceSpecificException with one of the following values:
+ *
+ * Returned @p status will be one of the following.
* - `Status::BLOCKING` - Querying some parameters requires blocking, but
* @p mayBlock is false.
* - `Status::NO_MEMORY` - Not enough memory to complete this method.
@@ -208,6 +246,6 @@
* - `Status::TIMED_OUT` - The operation cannot be finished in a timely manner.
* - `Status::CORRUPTED` - Some unknown error occurred.
*/
- FieldSupportedValuesQueryResult[] querySupportedValues(
+ QuerySupportedValuesResult querySupportedValues(
in FieldSupportedValuesQuery[] inFields, in boolean mayBlock);
}
diff --git a/power/aidl/aidl_api/android.hardware.power/current/android/hardware/power/SessionHint.aidl b/power/aidl/aidl_api/android.hardware.power/current/android/hardware/power/SessionHint.aidl
index cb37719..df31618 100644
--- a/power/aidl/aidl_api/android.hardware.power/current/android/hardware/power/SessionHint.aidl
+++ b/power/aidl/aidl_api/android.hardware.power/current/android/hardware/power/SessionHint.aidl
@@ -41,4 +41,5 @@
POWER_EFFICIENCY = 4,
GPU_LOAD_UP = 5,
GPU_LOAD_DOWN = 6,
+ GPU_LOAD_RESET = 7,
}
diff --git a/power/aidl/aidl_api/android.hardware.power/current/android/hardware/power/SessionTag.aidl b/power/aidl/aidl_api/android.hardware.power/current/android/hardware/power/SessionTag.aidl
index 80848a4..862fbc5 100644
--- a/power/aidl/aidl_api/android.hardware.power/current/android/hardware/power/SessionTag.aidl
+++ b/power/aidl/aidl_api/android.hardware.power/current/android/hardware/power/SessionTag.aidl
@@ -38,4 +38,5 @@
SURFACEFLINGER,
HWUI,
GAME,
+ APP,
}
diff --git a/power/aidl/android/hardware/power/SessionHint.aidl b/power/aidl/android/hardware/power/SessionHint.aidl
index ae91061..1a8c505 100644
--- a/power/aidl/android/hardware/power/SessionHint.aidl
+++ b/power/aidl/android/hardware/power/SessionHint.aidl
@@ -65,4 +65,11 @@
* this hint session can reduce GPU resources and still meet the target duration.
*/
GPU_LOAD_DOWN = 6,
+
+ /**
+ * This hint indicates an upcoming GPU workload that is completely changed and
+ * unknown. It means that the hint session should reset GPU resources to a known
+ * baseline to prepare for an arbitrary load, and must wake up if inactive.
+ */
+ GPU_LOAD_RESET = 7,
}
diff --git a/power/aidl/android/hardware/power/SessionTag.aidl b/power/aidl/android/hardware/power/SessionTag.aidl
index c1d48e4..27bf3e3 100644
--- a/power/aidl/android/hardware/power/SessionTag.aidl
+++ b/power/aidl/android/hardware/power/SessionTag.aidl
@@ -30,12 +30,20 @@
SURFACEFLINGER,
/**
- * This tag is used to mark HWUI hint sessions.
+ * This tag is used to mark hint sessions created by HWUI.
*/
HWUI,
/**
- * This tag is used to mark Game hint sessions.
+ * This tag is used to mark hint sessions created by applications that are
+ * categorized as games.
*/
GAME,
+
+ /**
+ * This tag is used to mark the hint session is created by the application.
+ * If an applications is categorized as game, then GAME should be used
+ * instead.
+ */
+ APP,
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/SecurityAlgorithm.aidl b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/SecurityAlgorithm.aidl
index 3eb51e7..c590d2b 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/SecurityAlgorithm.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/SecurityAlgorithm.aidl
@@ -57,6 +57,7 @@
NEA1 = 56,
NEA2 = 57,
NEA3 = 58,
+ IMS_NULL = 67,
SIP_NULL = 68,
AES_GCM = 69,
AES_GMAC = 70,
@@ -64,9 +65,8 @@
DES_EDE3_CBC = 72,
AES_EDE3_CBC = 73,
HMAC_SHA1_96 = 74,
- HMAC_SHA1_96_NULL = 75,
- HMAC_MD5_96 = 76,
- HMAC_MD5_96_NULL = 77,
+ HMAC_MD5_96 = 75,
+ SRTP_NULL = 86,
SRTP_AES_COUNTER = 87,
SRTP_AES_F8 = 88,
SRTP_HMAC_SHA1 = 89,
diff --git a/radio/aidl/android/hardware/radio/network/IRadioNetworkIndication.aidl b/radio/aidl/android/hardware/radio/network/IRadioNetworkIndication.aidl
index dde4128..da82b78 100644
--- a/radio/aidl/android/hardware/radio/network/IRadioNetworkIndication.aidl
+++ b/radio/aidl/android/hardware/radio/network/IRadioNetworkIndication.aidl
@@ -231,16 +231,24 @@
/*
* Indicates that a new ciphering or integrity algorithm was used for a particular voice,
- * signaling, or data connection attempt for a given PLMN and/or access network. Due to
- * power concerns, once a connection type has been reported on, follow-up reports about that
- * connection type are only generated if there is any change to the previously reported
+ * signaling, or data connection for a given PLMN and/or access network. Due to power
+ * concerns, once a connection type has been reported on, follow-up reports about that
+ * connection type are only generated if there is any change to the most-recently reported
* encryption or integrity, or if the value of SecurityAlgorithmUpdate#isUnprotectedEmergency
- * changes. Thus the AP is only to be notified when there is new information. List is reset upon
- * rebooting thus info about initial connections is always passed to the AP after a reboot.
- * List is also reset if the SIM is changed or if there has been a change in the access network.
+ * changes. A change only in cell ID should not trigger an update, as the design is intended
+ * to be agnostic to dual connectivity ("secondary serving cells").
*
- * Note: a change only in cell ID should not trigger an update, as the design is intended to
- * be agnostic to dual connectivity ("secondary serving cells").
+ * Sample scenario to further clarify "most-recently reported":
+ *
+ * 1. Modem reports user is connected to a null-ciphered 3G network.
+ * 2. User then moves and connects to a well-ciphered 5G network, and modem reports this.
+ * 3. User returns to original location and reconnects to the null-ciphered 3G network. Modem
+ * should report this as it's different than the most-recently reported data from step (2).
+ *
+ * State is reset when (1) RadioState is transitioned to ON from any other state (e.g. radio
+ * is turned on during device boot, or modem boot), and (2) when CardState is transitioned
+ * to PRESENT from any other state (e.g. when SIM is inserted), or (3) if there is a change in
+ * access network (PLMN).
*
* @param type Type of radio indication
* @param securityAlgorithmUpdate SecurityAlgorithmUpdate encapsulates details of security
diff --git a/radio/aidl/android/hardware/radio/network/SecurityAlgorithm.aidl b/radio/aidl/android/hardware/radio/network/SecurityAlgorithm.aidl
index fefa26e..19feeef 100644
--- a/radio/aidl/android/hardware/radio/network/SecurityAlgorithm.aidl
+++ b/radio/aidl/android/hardware/radio/network/SecurityAlgorithm.aidl
@@ -59,7 +59,8 @@
NEA2 = 57,
NEA3 = 58,
- // SIP layer security (See 3GPP TS 33.203)
+ // IMS and SIP layer security (See 3GPP TS 33.203)
+ IMS_NULL = 67,
SIP_NULL = 68,
AES_GCM = 69,
AES_GMAC = 70,
@@ -67,16 +68,15 @@
DES_EDE3_CBC = 72,
AES_EDE3_CBC = 73,
HMAC_SHA1_96 = 74,
- HMAC_SHA1_96_NULL = 75,
- HMAC_MD5_96 = 76,
- HMAC_MD5_96_NULL = 77,
+ HMAC_MD5_96 = 75,
// RTP (see 3GPP TS 33.328)
+ SRTP_NULL = 86,
SRTP_AES_COUNTER = 87,
SRTP_AES_F8 = 88,
SRTP_HMAC_SHA1 = 89,
- // ePDG (3GPP TS 33.402)
+ // ePDG (3GPP TS 33.402) (reserved for future use)
ENCR_AES_GCM_16 = 99,
ENCR_AES_CBC = 100,
AUTH_HMAC_SHA2_256_128 = 101,
diff --git a/radio/aidl/vts/radio_config_response.cpp b/radio/aidl/vts/radio_config_response.cpp
index dccbd0e..c532440 100644
--- a/radio/aidl/vts/radio_config_response.cpp
+++ b/radio/aidl/vts/radio_config_response.cpp
@@ -41,8 +41,9 @@
}
ndk::ScopedAStatus RadioConfigResponse::getSimultaneousCallingSupportResponse(
- const RadioResponseInfo& info, const std::vector<int32_t>& /* enabledLogicalSlots */) {
+ const RadioResponseInfo& info, const std::vector<int32_t>& enabledLogicalSlots) {
rspInfo = info;
+ currentEnabledLogicalSlots = enabledLogicalSlots;
parent_config.notify(info.serial);
return ndk::ScopedAStatus::ok();
}
diff --git a/radio/aidl/vts/radio_config_test.cpp b/radio/aidl/vts/radio_config_test.cpp
index f725136..6f18d18 100644
--- a/radio/aidl/vts/radio_config_test.cpp
+++ b/radio/aidl/vts/radio_config_test.cpp
@@ -150,10 +150,17 @@
ALOGI("getSimultaneousCallingSupport, rspInfo.error = %s\n",
toString(radioRsp_config->rspInfo.error).c_str());
+ // REQUEST_NOT_SUPPORTED is omitted here because users of the V3 HAL should implement this
+ // method and return at least an empty array
ASSERT_TRUE(CheckAnyOfErrors(
radioRsp_config->rspInfo.error,
{RadioError::NONE, RadioError::RADIO_NOT_AVAILABLE, RadioError::INTERNAL_ERR,
- RadioError::MODEM_ERR, RadioError::REQUEST_NOT_SUPPORTED}));
+ RadioError::MODEM_ERR}));
+
+ if (radioRsp_config->rspInfo.error == RadioError ::NONE) {
+ // The size of enabledLogicalSLots should be 0 or a positive number:
+ EXPECT_GE(radioRsp_config->currentEnabledLogicalSlots.size(), 0);
+ }
}
/*
diff --git a/radio/aidl/vts/radio_config_utils.h b/radio/aidl/vts/radio_config_utils.h
index 9e809ff..84c74fc 100644
--- a/radio/aidl/vts/radio_config_utils.h
+++ b/radio/aidl/vts/radio_config_utils.h
@@ -39,6 +39,7 @@
PhoneCapability phoneCap;
bool modemReducedFeatureSet1;
std::vector<SimSlotStatus> simSlotStatus;
+ std::vector<int32_t> currentEnabledLogicalSlots;
virtual ndk::ScopedAStatus getSimSlotsStatusResponse(
const RadioResponseInfo& info, const std::vector<SimSlotStatus>& slotStatus) override;
diff --git a/secure_element/1.0/vts/functional/VtsHalSecureElementV1_0TargetTest.cpp b/secure_element/1.0/vts/functional/VtsHalSecureElementV1_0TargetTest.cpp
index 63c2eca..1623960 100644
--- a/secure_element/1.0/vts/functional/VtsHalSecureElementV1_0TargetTest.cpp
+++ b/secure_element/1.0/vts/functional/VtsHalSecureElementV1_0TargetTest.cpp
@@ -75,6 +75,7 @@
se_->init(se_cb_);
auto res = se_cb_->WaitForCallback(kCallbackNameOnStateChange);
EXPECT_TRUE(res.no_timeout);
+ ASSERT_TRUE(res.args);
EXPECT_TRUE(res.args->state_);
}
diff --git a/secure_element/1.1/vts/functional/VtsHalSecureElementV1_1TargetTest.cpp b/secure_element/1.1/vts/functional/VtsHalSecureElementV1_1TargetTest.cpp
index 234c33c..d7e4546 100644
--- a/secure_element/1.1/vts/functional/VtsHalSecureElementV1_1TargetTest.cpp
+++ b/secure_element/1.1/vts/functional/VtsHalSecureElementV1_1TargetTest.cpp
@@ -72,6 +72,7 @@
se_->init_1_1(se_cb_);
auto res = se_cb_->WaitForCallback(kCallbackNameOnStateChange);
EXPECT_TRUE(res.no_timeout);
+ ASSERT_TRUE(res.args);
EXPECT_TRUE(res.args->state_);
EXPECT_NE(res.args->reason_, "");
}
diff --git a/secure_element/1.2/vts/functional/VtsHalSecureElementV1_2TargetTest.cpp b/secure_element/1.2/vts/functional/VtsHalSecureElementV1_2TargetTest.cpp
index 66d581e..26b2ded 100644
--- a/secure_element/1.2/vts/functional/VtsHalSecureElementV1_2TargetTest.cpp
+++ b/secure_element/1.2/vts/functional/VtsHalSecureElementV1_2TargetTest.cpp
@@ -73,6 +73,7 @@
se_->init_1_1(se_cb_);
auto res = se_cb_->WaitForCallback(kCallbackNameOnStateChange);
EXPECT_TRUE(res.no_timeout);
+ ASSERT_TRUE(res.args);
EXPECT_TRUE(res.args->state_);
EXPECT_NE(res.args->reason_, "");
}
@@ -93,10 +94,12 @@
auto res = se_cb_->WaitForCallback(kCallbackNameOnStateChange);
EXPECT_TRUE(res.no_timeout);
+ ASSERT_TRUE(res.args);
EXPECT_FALSE(res.args->state_);
res = se_cb_->WaitForCallback(kCallbackNameOnStateChange);
EXPECT_TRUE(res.no_timeout);
+ ASSERT_TRUE(res.args);
EXPECT_TRUE(res.args->state_);
}
diff --git a/secure_element/aidl/vts/AndroidTest.xml b/secure_element/aidl/vts/AndroidTest.xml
new file mode 100644
index 0000000..94dfa82
--- /dev/null
+++ b/secure_element/aidl/vts/AndroidTest.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2024 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.
+-->
+<configuration description="Runs VtsHalSecureElementTargetTest.">
+ <option name="test-suite-tag" value="apct" />
+ <option name="test-suite-tag" value="apct-native" />
+ <option name="config-descriptor:metadata" key="token" value="SECURE_ELEMENT_SIM_CARD" />
+
+ <target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer">
+ </target_preparer>
+
+ <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
+ <option name="cleanup" value="true" />
+ <option name="push" value="VtsHalSecureElementTargetTest->/data/local/tmp/VtsHalSecureElementTargetTest" />
+ </target_preparer>
+
+ <test class="com.android.tradefed.testtype.GTest" >
+ <option name="native-test-device-path" value="/data/local/tmp" />
+ <option name="module-name" value="VtsHalSecureElementTargetTest" />
+ </test>
+</configuration>
diff --git a/security/keymint/aidl/vts/functional/KeyBlobUpgradeTest.cpp b/security/keymint/aidl/vts/functional/KeyBlobUpgradeTest.cpp
index 7ccd246..c2509b8 100644
--- a/security/keymint/aidl/vts/functional/KeyBlobUpgradeTest.cpp
+++ b/security/keymint/aidl/vts/functional/KeyBlobUpgradeTest.cpp
@@ -258,7 +258,8 @@
if (upgraded_keyblob.empty()) {
std::cerr << "Keyblob '" << name << "' did not require upgrade\n";
- EXPECT_TRUE(!expectUpgrade) << "Keyblob '" << name << "' unexpectedly upgraded";
+ EXPECT_FALSE(expectUpgrade)
+ << "Keyblob '" << name << "' unexpectedly left as-is";
} else {
// Ensure the old format keyblob is deleted (so any secure deletion data is
// cleaned up).
@@ -275,8 +276,7 @@
save_keyblob(subdir, name, upgraded_keyblob, key_characteristics);
// Cert file is left unchanged.
std::cerr << "Keyblob '" << name << "' upgraded\n";
- EXPECT_TRUE(expectUpgrade)
- << "Keyblob '" << name << "' unexpectedly left as-is";
+ EXPECT_TRUE(expectUpgrade) << "Keyblob '" << name << "' unexpectedly upgraded";
}
}
}
diff --git a/security/keymint/aidl/vts/functional/KeyMintTest.cpp b/security/keymint/aidl/vts/functional/KeyMintTest.cpp
index d4adab5..a2e20dc 100644
--- a/security/keymint/aidl/vts/functional/KeyMintTest.cpp
+++ b/security/keymint/aidl/vts/functional/KeyMintTest.cpp
@@ -8796,10 +8796,11 @@
} // namespace aidl::android::hardware::security::keymint::test
+using aidl::android::hardware::security::keymint::test::KeyMintAidlTestBase;
+
int main(int argc, char** argv) {
std::cout << "Testing ";
- auto halInstances =
- aidl::android::hardware::security::keymint::test::KeyMintAidlTestBase::build_params();
+ auto halInstances = KeyMintAidlTestBase::build_params();
std::cout << "HAL instances:\n";
for (auto& entry : halInstances) {
std::cout << " " << entry << '\n';
@@ -8809,12 +8810,10 @@
for (int i = 1; i < argc; ++i) {
if (argv[i][0] == '-') {
if (std::string(argv[i]) == "--arm_deleteAllKeys") {
- aidl::android::hardware::security::keymint::test::KeyMintAidlTestBase::
- arm_deleteAllKeys = true;
+ KeyMintAidlTestBase::arm_deleteAllKeys = true;
}
if (std::string(argv[i]) == "--dump_attestations") {
- aidl::android::hardware::security::keymint::test::KeyMintAidlTestBase::
- dump_Attestations = true;
+ KeyMintAidlTestBase::dump_Attestations = true;
} else {
std::cout << "NOT dumping attestations" << std::endl;
}
@@ -8829,8 +8828,7 @@
std::cerr << "Missing argument for --keyblob_dir\n";
return 1;
}
- aidl::android::hardware::security::keymint::test::KeyMintAidlTestBase::keyblob_dir =
- std::string(argv[i + 1]);
+ KeyMintAidlTestBase::keyblob_dir = std::string(argv[i + 1]);
++i;
}
if (std::string(argv[i]) == "--expect_upgrade") {
@@ -8839,11 +8837,17 @@
return 1;
}
std::string arg = argv[i + 1];
- aidl::android::hardware::security::keymint::test::KeyMintAidlTestBase::
- expect_upgrade =
- arg == "yes"
- ? true
- : (arg == "no" ? false : std::optional<bool>(std::nullopt));
+ KeyMintAidlTestBase::expect_upgrade =
+ arg == "yes" ? true
+ : (arg == "no" ? false : std::optional<bool>(std::nullopt));
+ if (KeyMintAidlTestBase::expect_upgrade.has_value()) {
+ std::cout << "expect_upgrade = "
+ << (KeyMintAidlTestBase::expect_upgrade.value() ? "true" : "false")
+ << std::endl;
+ } else {
+ std::cerr << "Error! Option --expect_upgrade " << arg << " unrecognized"
+ << std::endl;
+ }
++i;
}
}
diff --git a/security/secretkeeper/aidl/vts/Android.bp b/security/secretkeeper/aidl/vts/Android.bp
index 7de9d6a..1e01149 100644
--- a/security/secretkeeper/aidl/vts/Android.bp
+++ b/security/secretkeeper/aidl/vts/Android.bp
@@ -21,6 +21,9 @@
rust_test {
name: "VtsSecretkeeperTargetTest",
srcs: ["secretkeeper_test_client.rs"],
+ defaults: [
+ "rdroidtest.defaults",
+ ],
test_suites: [
"general-tests",
"vts",
@@ -38,7 +41,6 @@
"libbinder_rs",
"libcoset",
"liblog_rust",
- "liblogger",
],
require_root: true,
}
diff --git a/security/secretkeeper/aidl/vts/secretkeeper_test_client.rs b/security/secretkeeper/aidl/vts/secretkeeper_test_client.rs
index c457d24..eeef6fc 100644
--- a/security/secretkeeper/aidl/vts/secretkeeper_test_client.rs
+++ b/security/secretkeeper/aidl/vts/secretkeeper_test_client.rs
@@ -16,14 +16,13 @@
#![cfg(test)]
+use rdroidtest_macro::{ignore_if, rdroidtest};
use android_hardware_security_secretkeeper::aidl::android::hardware::security::secretkeeper::ISecretkeeper::ISecretkeeper;
use android_hardware_security_secretkeeper::aidl::android::hardware::security::secretkeeper::SecretId::SecretId;
use authgraph_vts_test as ag_vts;
use authgraph_boringssl as boring;
use authgraph_core::key;
-use binder::StatusCode;
use coset::{CborSerializable, CoseEncrypt0};
-use log::{info, warn};
use secretkeeper_client::SkSession;
use secretkeeper_core::cipher;
use secretkeeper_comm::data_types::error::SecretkeeperError;
@@ -36,7 +35,6 @@
use secretkeeper_comm::data_types::packet::{ResponsePacket, ResponseType};
const SECRETKEEPER_SERVICE: &str = "android.hardware.security.secretkeeper.ISecretkeeper";
-const SECRETKEEPER_INSTANCES: [&'static str; 2] = ["default", "nonsecure"];
const CURRENT_VERSION: u64 = 1;
// TODO(b/291238565): This will change once libdice_policy switches to Explicit-key DiceCertChain
@@ -72,58 +70,23 @@
0x06, 0xAC, 0x36, 0x8B, 0x3C, 0x95, 0x50, 0x16, 0x67, 0x71, 0x65, 0x26, 0xEB, 0xD0, 0xC3, 0x98,
]);
-fn get_connection() -> Option<(binder::Strong<dyn ISecretkeeper>, String)> {
- // Initialize logging (which is OK to call multiple times).
- logger::init(logger::Config::default().with_min_level(log::Level::Debug));
-
+fn get_instances() -> Vec<(String, String)> {
// Determine which instances are available.
- let available = binder::get_declared_instances(SECRETKEEPER_SERVICE).unwrap_or_default();
-
- // TODO: replace this with a parameterized set of tests that run for each available instance of
- // ISecretkeeper (rather than having a fixed set of instance names to look for).
- for instance in &SECRETKEEPER_INSTANCES {
- if available.iter().find(|s| s == instance).is_none() {
- // Skip undeclared instances.
- continue;
- }
- let name = format!("{SECRETKEEPER_SERVICE}/{instance}");
- match binder::get_interface(&name) {
- Ok(sk) => {
- info!("Running test against /{instance}");
- return Some((sk, name));
- }
- Err(StatusCode::NAME_NOT_FOUND) => {
- info!("No /{instance} instance of ISecretkeeper present");
- }
- Err(e) => {
- panic!(
- "unexpected error while fetching connection to Secretkeeper {:?}",
- e
- );
- }
- }
- }
- info!("no Secretkeeper instances in {SECRETKEEPER_INSTANCES:?} are declared and present");
- None
+ binder::get_declared_instances(SECRETKEEPER_SERVICE)
+ .unwrap_or_default()
+ .into_iter()
+ .map(|v| (v.clone(), v))
+ .collect()
}
-/// Macro to perform test setup. Invokes `return` if no Secretkeeper instance available.
-macro_rules! setup_client {
- {} => {
- match SkClient::new() {
- Some(sk) => sk,
- None => {
- warn!("Secretkeeper HAL is unavailable, skipping test");
- return;
- }
- }
- }
+fn get_connection(instance: &str) -> binder::Strong<dyn ISecretkeeper> {
+ let name = format!("{SECRETKEEPER_SERVICE}/{instance}");
+ binder::get_interface(&name).unwrap()
}
/// Secretkeeper client information.
struct SkClient {
sk: binder::Strong<dyn ISecretkeeper>,
- name: String,
session: SkSession,
}
@@ -135,13 +98,9 @@
}
impl SkClient {
- fn new() -> Option<Self> {
- let (sk, name) = get_connection()?;
- Some(Self {
- sk: sk.clone(),
- name,
- session: SkSession::new(sk).unwrap(),
- })
+ fn new(instance: &str) -> Self {
+ let sk = get_connection(instance);
+ Self { sk: sk.clone(), session: SkSession::new(sk).unwrap() }
}
/// This method is wrapper that use `SkSession::secret_management_request` which handles
@@ -172,10 +131,7 @@
.unwrap();
// Binder call!
- let response_bytes = self
- .sk
- .processSecretManagementRequest(&request_bytes)
- .unwrap();
+ let response_bytes = self.sk.processSecretManagementRequest(&request_bytes).unwrap();
let response_encrypt0 = CoseEncrypt0::from_slice(&response_bytes).unwrap();
cipher::decrypt_message(
@@ -199,20 +155,14 @@
let store_response = self.secret_management_request(&store_request);
let store_response = ResponsePacket::from_slice(&store_response).unwrap();
- assert_eq!(
- store_response.response_type().unwrap(),
- ResponseType::Success
- );
+ assert_eq!(store_response.response_type().unwrap(), ResponseType::Success);
// Really just checking that the response is indeed StoreSecretResponse
let _ = StoreSecretResponse::deserialize_from_packet(store_response).unwrap();
}
/// Helper method to get a secret.
fn get(&mut self, id: &Id) -> Option<Secret> {
- let get_request = GetSecretRequest {
- id: id.clone(),
- updated_sealing_policy: None,
- };
+ let get_request = GetSecretRequest { id: id.clone(), updated_sealing_policy: None };
let get_request = get_request.serialize_to_packet().to_vec().unwrap();
let get_response = self.secret_management_request(&get_request);
@@ -231,10 +181,7 @@
/// Helper method to delete secrets.
fn delete(&self, ids: &[&Id]) {
- let ids: Vec<SecretId> = ids
- .iter()
- .map(|id| SecretId { id: id.0 })
- .collect();
+ let ids: Vec<SecretId> = ids.iter().map(|id| SecretId { id: id.0 }).collect();
self.sk.deleteIds(&ids).unwrap();
}
@@ -251,47 +198,29 @@
ag_vts::sink::test_mainline(&mut source, sink)
}
-/// Test that the AuthGraph instance returned by SecretKeeper correctly performs
-/// mainline key exchange against a local source implementation.
-#[test]
-fn authgraph_mainline() {
- let (sk, _) = match get_connection() {
- Some(sk) => sk,
- None => {
- warn!("Secretkeeper HAL is unavailable, skipping test");
- return;
- }
- };
+// Test that the AuthGraph instance returned by SecretKeeper correctly performs
+// mainline key exchange against a local source implementation.
+#[rdroidtest(get_instances())]
+fn authgraph_mainline(instance: String) {
+ let sk = get_connection(&instance);
let (_aes_keys, _session_id) = authgraph_key_exchange(sk);
}
-/// Test that the AuthGraph instance returned by SecretKeeper correctly rejects
-/// a corrupted session ID signature.
-#[test]
-fn authgraph_corrupt_sig() {
- let (sk, _) = match get_connection() {
- Some(sk) => sk,
- None => {
- warn!("Secretkeeper HAL is unavailable, skipping test");
- return;
- }
- };
+// Test that the AuthGraph instance returned by SecretKeeper correctly rejects
+// a corrupted session ID signature.
+#[rdroidtest(get_instances())]
+fn authgraph_corrupt_sig(instance: String) {
+ let sk = get_connection(&instance);
let sink = sk.getAuthGraphKe().expect("failed to get AuthGraph");
let mut source = ag_vts::test_ag_participant().expect("failed to create a local source");
ag_vts::sink::test_corrupt_sig(&mut source, sink);
}
-/// Test that the AuthGraph instance returned by SecretKeeper correctly detects
-/// when corrupted keys are returned to it.
-#[test]
-fn authgraph_corrupt_keys() {
- let (sk, _) = match get_connection() {
- Some(sk) => sk,
- None => {
- warn!("Secretkeeper HAL is unavailable, skipping test");
- return;
- }
- };
+// Test that the AuthGraph instance returned by SecretKeeper correctly detects
+// when corrupted keys are returned to it.
+#[rdroidtest(get_instances())]
+fn authgraph_corrupt_keys(instance: String) {
+ let sk = get_connection(&instance);
let sink = sk.getAuthGraphKe().expect("failed to get AuthGraph");
let mut source = ag_vts::test_ag_participant().expect("failed to create a local source");
ag_vts::sink::test_corrupt_keys(&mut source, sink);
@@ -300,9 +229,9 @@
// TODO(b/2797757): Add tests that match different HAL defined objects (like request/response)
// with expected bytes.
-#[test]
-fn secret_management_get_version() {
- let mut sk_client = setup_client!();
+#[rdroidtest(get_instances())]
+fn secret_management_get_version(instance: String) {
+ let mut sk_client = SkClient::new(&instance);
let request = GetVersionRequest {};
let request_packet = request.serialize_to_packet();
@@ -311,18 +240,15 @@
let response_bytes = sk_client.secret_management_request(&request_bytes);
let response_packet = ResponsePacket::from_slice(&response_bytes).unwrap();
- assert_eq!(
- response_packet.response_type().unwrap(),
- ResponseType::Success
- );
+ assert_eq!(response_packet.response_type().unwrap(), ResponseType::Success);
let get_version_response =
*GetVersionResponse::deserialize_from_packet(response_packet).unwrap();
assert_eq!(get_version_response.version, CURRENT_VERSION);
}
-#[test]
-fn secret_management_malformed_request() {
- let mut sk_client = setup_client!();
+#[rdroidtest(get_instances())]
+fn secret_management_malformed_request(instance: String) {
+ let mut sk_client = SkClient::new(&instance);
let request = GetVersionRequest {};
let request_packet = request.serialize_to_packet();
@@ -334,17 +260,14 @@
let response_bytes = sk_client.secret_management_request(&request_bytes);
let response_packet = ResponsePacket::from_slice(&response_bytes).unwrap();
- assert_eq!(
- response_packet.response_type().unwrap(),
- ResponseType::Error
- );
+ assert_eq!(response_packet.response_type().unwrap(), ResponseType::Error);
let err = *SecretkeeperError::deserialize_from_packet(response_packet).unwrap();
assert_eq!(err, SecretkeeperError::RequestMalformed);
}
-#[test]
-fn secret_management_store_get_secret_found() {
- let mut sk_client = setup_client!();
+#[rdroidtest(get_instances())]
+fn secret_management_store_get_secret_found(instance: String) {
+ let mut sk_client = SkClient::new(&instance);
sk_client.store(&ID_EXAMPLE, &SECRET_EXAMPLE);
@@ -352,9 +275,9 @@
assert_eq!(sk_client.get(&ID_EXAMPLE), Some(SECRET_EXAMPLE));
}
-#[test]
-fn secret_management_store_get_secret_not_found() {
- let mut sk_client = setup_client!();
+#[rdroidtest(get_instances())]
+fn secret_management_store_get_secret_not_found(instance: String) {
+ let mut sk_client = SkClient::new(&instance);
// Store a secret (corresponding to an id).
sk_client.store(&ID_EXAMPLE, &SECRET_EXAMPLE);
@@ -363,9 +286,9 @@
assert_eq!(sk_client.get(&ID_NOT_STORED), None);
}
-#[test]
-fn secretkeeper_store_delete_ids() {
- let mut sk_client = setup_client!();
+#[rdroidtest(get_instances())]
+fn secretkeeper_store_delete_ids(instance: String) {
+ let mut sk_client = SkClient::new(&instance);
sk_client.store(&ID_EXAMPLE, &SECRET_EXAMPLE);
sk_client.store(&ID_EXAMPLE_2, &SECRET_EXAMPLE);
@@ -380,9 +303,9 @@
assert_eq!(sk_client.get(&ID_EXAMPLE_2), None);
}
-#[test]
-fn secretkeeper_store_delete_multiple_ids() {
- let mut sk_client = setup_client!();
+#[rdroidtest(get_instances())]
+fn secretkeeper_store_delete_multiple_ids(instance: String) {
+ let mut sk_client = SkClient::new(&instance);
sk_client.store(&ID_EXAMPLE, &SECRET_EXAMPLE);
sk_client.store(&ID_EXAMPLE_2, &SECRET_EXAMPLE);
@@ -391,10 +314,9 @@
assert_eq!(sk_client.get(&ID_EXAMPLE), None);
assert_eq!(sk_client.get(&ID_EXAMPLE_2), None);
}
-
-#[test]
-fn secretkeeper_store_delete_duplicate_ids() {
- let mut sk_client = setup_client!();
+#[rdroidtest(get_instances())]
+fn secretkeeper_store_delete_duplicate_ids(instance: String) {
+ let mut sk_client = SkClient::new(&instance);
sk_client.store(&ID_EXAMPLE, &SECRET_EXAMPLE);
sk_client.store(&ID_EXAMPLE_2, &SECRET_EXAMPLE);
@@ -405,9 +327,9 @@
assert_eq!(sk_client.get(&ID_EXAMPLE_2), Some(SECRET_EXAMPLE));
}
-#[test]
-fn secretkeeper_store_delete_nonexistent() {
- let mut sk_client = setup_client!();
+#[rdroidtest(get_instances())]
+fn secretkeeper_store_delete_nonexistent(instance: String) {
+ let mut sk_client = SkClient::new(&instance);
sk_client.store(&ID_EXAMPLE, &SECRET_EXAMPLE);
sk_client.store(&ID_EXAMPLE_2, &SECRET_EXAMPLE);
@@ -418,16 +340,11 @@
assert_eq!(sk_client.get(&ID_NOT_STORED), None);
}
-#[test]
-fn secretkeeper_store_delete_all() {
- let mut sk_client = setup_client!();
-
- if sk_client.name != "nonsecure" {
- // Don't run deleteAll() on a secure device, as it might affect
- // real secrets.
- warn!("skipping deleteAll test due to real impl");
- return;
- }
+// Don't run deleteAll() on a secure device, as it might affect real secrets.
+#[rdroidtest(get_instances())]
+#[ignore_if(|p| p != "nonsecure")]
+fn secretkeeper_store_delete_all(instance: String) {
+ let mut sk_client = SkClient::new(&instance);
sk_client.store(&ID_EXAMPLE, &SECRET_EXAMPLE);
sk_client.store(&ID_EXAMPLE_2, &SECRET_EXAMPLE);
@@ -450,9 +367,9 @@
// This test checks that Secretkeeper uses the expected [`RequestSeqNum`] as aad while
// decrypting requests and the responses are encrypted with correct [`ResponseSeqNum`] for the
// first few messages.
-#[test]
-fn secret_management_replay_protection_seq_num() {
- let sk_client = setup_client!();
+#[rdroidtest(get_instances())]
+fn secret_management_replay_protection_seq_num(instance: String) {
+ let sk_client = SkClient::new(&instance);
// Construct encoded request packets for the test
let (req_1, req_2, req_3) = construct_secret_management_requests();
@@ -484,9 +401,9 @@
// This test checks that Secretkeeper uses fresh [`RequestSeqNum`] & [`ResponseSeqNum`]
// for new sessions.
-#[test]
-fn secret_management_replay_protection_seq_num_per_session() {
- let sk_client = setup_client!();
+#[rdroidtest(get_instances())]
+fn secret_management_replay_protection_seq_num_per_session(instance: String) {
+ let sk_client = SkClient::new(&instance);
// Construct encoded request packets for the test
let (req_1, _, _) = construct_secret_management_requests();
@@ -502,7 +419,7 @@
assert_eq!(res.response_type().unwrap(), ResponseType::Success);
// Start another session
- let sk_client_diff = setup_client!();
+ let sk_client_diff = SkClient::new(&instance);
// Check first request/response is with seq_0 is successful
let res = ResponsePacket::from_slice(
&sk_client_diff.secret_management_request_custom_aad(&req_1, &seq_0, &seq_0),
@@ -512,12 +429,11 @@
}
// This test checks that Secretkeeper rejects requests with out of order [`RequestSeqNum`]
-#[test]
// TODO(b/317416663): This test fails, when HAL is not present in the device. Refactor to fix this.
+#[rdroidtest(get_instances())]
#[ignore]
-#[should_panic]
-fn secret_management_replay_protection_out_of_seq_req_not_accepted() {
- let sk_client = setup_client!();
+fn secret_management_replay_protection_out_of_seq_req_not_accepted(instance: String) {
+ let sk_client = SkClient::new(&instance);
// Construct encoded request packets for the test
let (req_1, req_2, _) = construct_secret_management_requests();
@@ -543,10 +459,9 @@
sealing_policy: HYPOTHETICAL_DICE_POLICY.to_vec(),
};
let store_request = store_request.serialize_to_packet().to_vec().unwrap();
- let get_request = GetSecretRequest {
- id: ID_EXAMPLE,
- updated_sealing_policy: None,
- };
+ let get_request = GetSecretRequest { id: ID_EXAMPLE, updated_sealing_policy: None };
let get_request = get_request.serialize_to_packet().to_vec().unwrap();
(version_request, store_request, get_request)
}
+
+rdroidtest::test_main!();
diff --git a/tetheroffload/config/1.0/Android.bp b/tetheroffload/config/1.0/Android.bp
index 116c9b6..b5c4185 100644
--- a/tetheroffload/config/1.0/Android.bp
+++ b/tetheroffload/config/1.0/Android.bp
@@ -19,4 +19,8 @@
"android.hidl.base@1.0",
],
gen_java: true,
+ apex_available: [
+ "//apex_available:platform",
+ "com.android.tethering",
+ ],
}
diff --git a/tetheroffload/control/1.0/Android.bp b/tetheroffload/control/1.0/Android.bp
index acb5ee8..6589ee2 100644
--- a/tetheroffload/control/1.0/Android.bp
+++ b/tetheroffload/control/1.0/Android.bp
@@ -21,4 +21,8 @@
"android.hidl.base@1.0",
],
gen_java: true,
+ apex_available: [
+ "//apex_available:platform",
+ "com.android.tethering",
+ ],
}
diff --git a/tv/tuner/aidl/vts/functional/utils/IpStreamer.h b/tv/tuner/aidl/vts/functional/utils/IpStreamer.h
index d073003..8ac2ddb 100644
--- a/tv/tuner/aidl/vts/functional/utils/IpStreamer.h
+++ b/tv/tuner/aidl/vts/functional/utils/IpStreamer.h
@@ -37,7 +37,7 @@
private:
int mSockfd = -1;
- FILE* mFp;
+ FILE* mFp = nullptr;
bool mIsIpV4 = true; // By default, set to IPV4
int mPort = 12345; // default port
int mBufferSize = 188; // bytes
diff --git a/uwb/aidl/aidl_api/android.hardware.uwb.fira_android/current/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl b/uwb/aidl/aidl_api/android.hardware.uwb.fira_android/current/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl
index 21951b6..58919d1 100644
--- a/uwb/aidl/aidl_api/android.hardware.uwb.fira_android/current/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl
+++ b/uwb/aidl/aidl_api/android.hardware.uwb.fira_android/current/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl
@@ -46,6 +46,7 @@
CCC_SUPPORTED_MAX_RANGING_SESSION_NUMBER = 0xA8,
CCC_SUPPORTED_MIN_UWB_INITIATION_TIME_MS = 0xA9,
CCC_PRIORITIZED_CHANNEL_LIST = 0xAA,
+ CCC_SUPPORTED_UWBS_MAX_PPM = 0xAB,
RADAR_SUPPORT = 0xB0,
SUPPORTED_AOA_RESULT_REQ_ANTENNA_INTERLEAVING = 0xE3,
SUPPORTED_MIN_RANGING_INTERVAL_MS = 0xE4,
diff --git a/uwb/aidl/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl b/uwb/aidl/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl
index 2141b5a..4df45b6 100644
--- a/uwb/aidl/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl
+++ b/uwb/aidl/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl
@@ -154,6 +154,11 @@
*/
CCC_PRIORITIZED_CHANNEL_LIST = 0xAA,
+ /**
+ * Short (2-octet) value to indicate the UWBS Max Clock Skew PPM value.
+ */
+ CCC_SUPPORTED_UWBS_MAX_PPM = 0xAB,
+
/*********************************************
* RADAR specific
********************************************/
diff --git a/wifi/aidl/aidl_api/android.hardware.wifi/current/android/hardware/wifi/RttCapabilities.aidl b/wifi/aidl/aidl_api/android.hardware.wifi/current/android/hardware/wifi/RttCapabilities.aidl
index af1647d..6c64084 100644
--- a/wifi/aidl/aidl_api/android.hardware.wifi/current/android/hardware/wifi/RttCapabilities.aidl
+++ b/wifi/aidl/aidl_api/android.hardware.wifi/current/android/hardware/wifi/RttCapabilities.aidl
@@ -46,4 +46,5 @@
int azBwSupport;
boolean ntbInitiatorSupported;
boolean ntbResponderSupported;
+ @nullable android.hardware.wifi.common.OuiKeyedData[] vendorData;
}
diff --git a/wifi/aidl/aidl_api/android.hardware.wifi/current/android/hardware/wifi/RttConfig.aidl b/wifi/aidl/aidl_api/android.hardware.wifi/current/android/hardware/wifi/RttConfig.aidl
index b53ff9b..3613616 100644
--- a/wifi/aidl/aidl_api/android.hardware.wifi/current/android/hardware/wifi/RttConfig.aidl
+++ b/wifi/aidl/aidl_api/android.hardware.wifi/current/android/hardware/wifi/RttConfig.aidl
@@ -50,4 +50,5 @@
android.hardware.wifi.RttBw bw;
long ntbMinMeasurementTime;
long ntbMaxMeasurementTime;
+ @nullable android.hardware.wifi.common.OuiKeyedData[] vendorData;
}
diff --git a/wifi/aidl/aidl_api/android.hardware.wifi/current/android/hardware/wifi/RttResult.aidl b/wifi/aidl/aidl_api/android.hardware.wifi/current/android/hardware/wifi/RttResult.aidl
index 9c6ad26..13202ba 100644
--- a/wifi/aidl/aidl_api/android.hardware.wifi/current/android/hardware/wifi/RttResult.aidl
+++ b/wifi/aidl/aidl_api/android.hardware.wifi/current/android/hardware/wifi/RttResult.aidl
@@ -63,4 +63,7 @@
byte r2iTxLtfRepetitionCount;
long ntbMinMeasurementTime;
long ntbMaxMeasurementTime;
+ byte numTxSpatialStreams;
+ byte numRxSpatialStreams;
+ @nullable android.hardware.wifi.common.OuiKeyedData[] vendorData;
}
diff --git a/wifi/aidl/android/hardware/wifi/RttCapabilities.aidl b/wifi/aidl/android/hardware/wifi/RttCapabilities.aidl
index 89b70c9..c193924 100644
--- a/wifi/aidl/android/hardware/wifi/RttCapabilities.aidl
+++ b/wifi/aidl/android/hardware/wifi/RttCapabilities.aidl
@@ -18,6 +18,7 @@
import android.hardware.wifi.RttBw;
import android.hardware.wifi.RttPreamble;
+import android.hardware.wifi.common.OuiKeyedData;
/**
* RTT Capabilities.
@@ -78,4 +79,9 @@
* Whether IEEE 802.11az Non-Trigger-based (non-TB) responder mode is supported.
*/
boolean ntbResponderSupported;
+ /**
+ * Optional vendor-specific parameters. Null value indicates
+ * that no vendor data is provided.
+ */
+ @nullable OuiKeyedData[] vendorData;
}
diff --git a/wifi/aidl/android/hardware/wifi/RttConfig.aidl b/wifi/aidl/android/hardware/wifi/RttConfig.aidl
index 7b18708..496ffd2 100644
--- a/wifi/aidl/android/hardware/wifi/RttConfig.aidl
+++ b/wifi/aidl/android/hardware/wifi/RttConfig.aidl
@@ -21,6 +21,7 @@
import android.hardware.wifi.RttPreamble;
import android.hardware.wifi.RttType;
import android.hardware.wifi.WifiChannelInfo;
+import android.hardware.wifi.common.OuiKeyedData;
/**
* RTT configuration.
@@ -134,4 +135,9 @@
* Reference: IEEE Std 802.11az-2022 spec, section 9.4.2.298 Ranging Parameters element.
*/
long ntbMaxMeasurementTime;
+ /**
+ * Optional vendor-specific parameters. Null value indicates
+ * that no vendor data is provided.
+ */
+ @nullable OuiKeyedData[] vendorData;
}
diff --git a/wifi/aidl/android/hardware/wifi/RttResult.aidl b/wifi/aidl/android/hardware/wifi/RttResult.aidl
index ab9abb5..2f9aefe 100644
--- a/wifi/aidl/android/hardware/wifi/RttResult.aidl
+++ b/wifi/aidl/android/hardware/wifi/RttResult.aidl
@@ -21,6 +21,7 @@
import android.hardware.wifi.RttType;
import android.hardware.wifi.WifiInformationElement;
import android.hardware.wifi.WifiRateInfo;
+import android.hardware.wifi.common.OuiKeyedData;
/**
* RTT results.
@@ -148,11 +149,15 @@
/**
* Multiple transmissions of HE-LTF symbols in an HE (I2R) Ranging NDP. An HE-LTF repetition
* value of 1 indicates no repetitions.
+ *
+ * Note: A required field for IEEE 802.11az result.
*/
byte i2rTxLtfRepetitionCount;
/**
* Multiple transmissions of HE-LTF symbols in an HE (R2I) Ranging NDP. An HE-LTF repetition
* value of 1 indicates no repetitions.
+ *
+ * Note: A required field for IEEE 802.11az result.
*/
byte r2iTxLtfRepetitionCount;
/**
@@ -168,6 +173,8 @@
* |RttResult.timestamp|.
*
* Reference: IEEE Std 802.11az-2022 spec, section 9.4.2.298 Ranging Parameters element.
+ *
+ * Note: A required field for IEEE 802.11az result.
*/
long ntbMinMeasurementTime;
/**
@@ -183,6 +190,27 @@
* non-TB ranging negotiation.
*
* Reference: IEEE Std 802.11az-2022 spec, section 9.4.2.298 Ranging Parameters element.
+ *
+ * Note: A required field for IEEE 802.11az result.
*/
long ntbMaxMeasurementTime;
+ /**
+ * Number of transmit space-time streams used. Value is in the range 1 to 8.
+ *
+ * Note: Maximum limit is ultimately defined by the number of antennas that can be supported.
+ * A required field for IEEE 802.11az result.
+ */
+ byte numTxSpatialStreams;
+ /**
+ * Number of receive space-time streams used. Value is in the range 1 to 8.
+ *
+ * Note: Maximum limit is ultimately defined by the number of antennas that can be supported.
+ * A required field for IEEE 802.11az result.
+ */
+ byte numRxSpatialStreams;
+ /**
+ * Optional vendor-specific parameters. Null value indicates
+ * that no vendor data is provided.
+ */
+ @nullable OuiKeyedData[] vendorData;
}
diff --git a/wifi/aidl/default/aidl_struct_util.cpp b/wifi/aidl/default/aidl_struct_util.cpp
index 836ce1a..0f0c77e 100644
--- a/wifi/aidl/default/aidl_struct_util.cpp
+++ b/wifi/aidl/default/aidl_struct_util.cpp
@@ -2995,6 +2995,8 @@
aidl_result.r2iTxLtfRepetitionCount = 0;
aidl_result.ntbMinMeasurementTime = 0;
aidl_result.ntbMaxMeasurementTime = 0;
+ aidl_result.numTxSpatialStreams = 0;
+ aidl_result.numRxSpatialStreams = 0;
aidl_results->push_back(aidl_result);
}
return true;
@@ -3019,6 +3021,8 @@
aidl_result.r2iTxLtfRepetitionCount = 0;
aidl_result.ntbMinMeasurementTime = 0;
aidl_result.ntbMaxMeasurementTime = 0;
+ aidl_result.numTxSpatialStreams = 0;
+ aidl_result.numRxSpatialStreams = 0;
aidl_results->push_back(aidl_result);
}
return true;
@@ -3044,6 +3048,8 @@
aidl_result.r2iTxLtfRepetitionCount = legacy_result->r2i_tx_ltf_repetition_count;
aidl_result.ntbMinMeasurementTime = legacy_result->ntb_min_measurement_time;
aidl_result.ntbMaxMeasurementTime = legacy_result->ntb_max_measurement_time;
+ aidl_result.numTxSpatialStreams = legacy_result->num_tx_sts;
+ aidl_result.numRxSpatialStreams = legacy_result->num_rx_sts;
aidl_results->push_back(aidl_result);
}
return true;