Merge "wifi: Adds MLD address in ApInfo for MLO SAP" into main
diff --git a/audio/aidl/android/hardware/audio/core/stream-out-async-sm.gv b/audio/aidl/android/hardware/audio/core/stream-out-async-sm.gv
index 56b7926..e2da90d 100644
--- a/audio/aidl/android/hardware/audio/core/stream-out-async-sm.gv
+++ b/audio/aidl/android/hardware/audio/core/stream-out-async-sm.gv
@@ -45,6 +45,8 @@
PAUSED -> ACTIVE [label="start"]; // consumer -> active
PAUSED -> IDLE [label="flush"]; // producer -> passive, buffer is cleared
DRAINING -> IDLE [label="←IStreamCallback.onDrainReady"];
+ DRAINING -> DRAINING [label="←IStreamCallback.onDrainReady"]; // allowed for `DRAIN_EARLY_NOTIFY`
+ DRAINING -> IDLE [label="<empty buffer>"]; // allowed for `DRAIN_EARLY_NOTIFY`
DRAINING -> TRANSFERRING [label="burst"]; // producer -> active
DRAINING -> ACTIVE [label="burst"]; // full write
DRAINING -> DRAIN_PAUSED [label="pause"]; // consumer -> passive (not consuming)
diff --git a/audio/aidl/default/CapEngineConfigXmlConverter.cpp b/audio/aidl/default/CapEngineConfigXmlConverter.cpp
index 8210664..a6e78b9 100644
--- a/audio/aidl/default/CapEngineConfigXmlConverter.cpp
+++ b/audio/aidl/default/CapEngineConfigXmlConverter.cpp
@@ -69,29 +69,36 @@
std::string criterionName = xsdcRule.getSelectionCriterion();
std::string criterionValue = xsdcRule.getValue();
if (iequals(criterionName, toString(Tag::availableInputDevices))) {
- rule.criterion = AudioHalCapCriterionV2::make<Tag::availableInputDevices>();
- rule.criterionTypeValue =
- VALUE_OR_RETURN(convertDeviceTypeToAidl(gLegacyInputDevicePrefix + criterionValue));
+ AudioHalCapCriterionV2::AvailableDevices value;
+ value.values.emplace_back(VALUE_OR_RETURN(
+ convertDeviceTypeToAidl(gLegacyInputDevicePrefix + criterionValue)));
+ rule.criterionAndValue = AudioHalCapCriterionV2::make<Tag::availableInputDevices>(value);
+
} else if (iequals(criterionName, toString(Tag::availableOutputDevices))) {
- rule.criterion = AudioHalCapCriterionV2::make<Tag::availableOutputDevices>();
- rule.criterionTypeValue = VALUE_OR_RETURN(
- convertDeviceTypeToAidl(gLegacyOutputDevicePrefix + criterionValue));
+ AudioHalCapCriterionV2::AvailableDevices value;
+ value.values.emplace_back(VALUE_OR_RETURN(
+ convertDeviceTypeToAidl(gLegacyOutputDevicePrefix + criterionValue)));
+ rule.criterionAndValue = AudioHalCapCriterionV2::make<Tag::availableOutputDevices>(value);
} else if (iequals(criterionName, toString(Tag::availableInputDevicesAddresses))) {
- rule.criterion = AudioHalCapCriterionV2::make<Tag::availableInputDevicesAddresses>();
- rule.criterionTypeValue =
- AudioDeviceAddress::make<AudioDeviceAddress::Tag::id>(criterionValue);
+ AudioHalCapCriterionV2::AvailableDevicesAddresses value;
+ value.values.emplace_back(criterionValue);
+ rule.criterionAndValue =
+ AudioHalCapCriterionV2::make<Tag::availableInputDevicesAddresses>(value);
} else if (iequals(criterionName, toString(Tag::availableOutputDevicesAddresses))) {
- rule.criterion = AudioHalCapCriterionV2::make<Tag::availableOutputDevicesAddresses>();
- rule.criterionTypeValue =
- AudioDeviceAddress::make<AudioDeviceAddress::Tag::id>(criterionValue);
+ AudioHalCapCriterionV2::AvailableDevicesAddresses value;
+ value.values.emplace_back(criterionValue);
+ rule.criterionAndValue =
+ AudioHalCapCriterionV2::make<Tag::availableOutputDevicesAddresses>(value);
} else if (iequals(criterionName, toString(Tag::telephonyMode))) {
- rule.criterion = AudioHalCapCriterionV2::make<Tag::telephonyMode>();
- rule.criterionTypeValue = VALUE_OR_RETURN(convertTelephonyModeToAidl(criterionValue));
+ AudioHalCapCriterionV2::TelephonyMode value;
+ value.values.emplace_back(VALUE_OR_RETURN(convertTelephonyModeToAidl(criterionValue)));
+ rule.criterionAndValue = AudioHalCapCriterionV2::make<Tag::telephonyMode>(value);
} else if (!fastcmp<strncmp>(criterionName.c_str(), kXsdcForceConfigForUse,
strlen(kXsdcForceConfigForUse))) {
- rule.criterion = AudioHalCapCriterionV2::make<Tag::forceConfigForUse>(
- VALUE_OR_RETURN(convertForceUseCriterionToAidl(criterionName)));
- rule.criterionTypeValue = VALUE_OR_RETURN(convertForcedConfigToAidl(criterionValue));
+ AudioHalCapCriterionV2::ForceConfigForUse value;
+ value.forceUse = VALUE_OR_RETURN(convertForceUseCriterionToAidl(criterionName));
+ value.values.emplace_back(VALUE_OR_RETURN(convertForcedConfigToAidl(criterionValue)));
+ rule.criterionAndValue = AudioHalCapCriterionV2::make<Tag::forceConfigForUse>(value);
} else {
LOG(ERROR) << __func__ << " unrecognized criterion " << criterionName;
return unexpected(BAD_VALUE);
diff --git a/audio/aidl/default/Module.cpp b/audio/aidl/default/Module.cpp
index a2a357c..e96cf81 100644
--- a/audio/aidl/default/Module.cpp
+++ b/audio/aidl/default/Module.cpp
@@ -207,9 +207,9 @@
return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
}
const auto& flags = portConfigIt->flags.value();
- StreamContext::DebugParameters params{mDebug.streamTransientStateDelayMs,
- mVendorDebug.forceTransientBurst,
- mVendorDebug.forceSynchronousDrain};
+ StreamContext::DebugParameters params{
+ mDebug.streamTransientStateDelayMs, mVendorDebug.forceTransientBurst,
+ mVendorDebug.forceSynchronousDrain, mVendorDebug.forceDrainToDraining};
std::unique_ptr<StreamContext::DataMQ> dataMQ = nullptr;
std::shared_ptr<IStreamCallback> streamAsyncCallback = nullptr;
std::shared_ptr<ISoundDose> soundDose;
@@ -467,58 +467,132 @@
fillConnectionsHelper(connections, patch.sinkPortConfigIds, patch.sourcePortConfigIds);
} // Otherwise, there are no streams to notify.
};
- fillConnections(oldConnections, oldPatch);
- fillConnections(newConnections, newPatch);
-
- std::for_each(oldConnections.begin(), oldConnections.end(), [&](const auto& connectionPair) {
- const int32_t mixPortConfigId = connectionPair.first;
- if (auto it = newConnections.find(mixPortConfigId);
- it == newConnections.end() || it->second != connectionPair.second) {
- if (auto status = mStreams.setStreamConnectedDevices(mixPortConfigId, {});
- status.isOk()) {
- LOG(DEBUG) << "updateStreamsConnectedState: The stream on port config id "
- << mixPortConfigId << " has been disconnected";
- } else {
- // Disconnection is tricky to roll back, just register a failure.
- maybeFailure = std::move(status);
+ auto restoreOldConnections = [&](const std::set<int32_t>& mixPortIds,
+ const bool continueWithEmptyDevices) {
+ for (const auto mixPort : mixPortIds) {
+ if (auto it = oldConnections.find(mixPort);
+ continueWithEmptyDevices || it != oldConnections.end()) {
+ const std::vector<AudioDevice> d =
+ it != oldConnections.end() ? getDevicesFromDevicePortConfigIds(it->second)
+ : std::vector<AudioDevice>();
+ if (auto status = mStreams.setStreamConnectedDevices(mixPort, d); status.isOk()) {
+ LOG(WARNING) << ":updateStreamsConnectedState: rollback: mix port config:"
+ << mixPort
+ << (d.empty() ? "; not connected"
+ : std::string("; connected to ") +
+ ::android::internal::ToString(d));
+ } else {
+ // can't do much about rollback failures
+ LOG(ERROR)
+ << ":updateStreamsConnectedState: rollback: failed for mix port config:"
+ << mixPort;
+ }
}
}
- });
- if (!maybeFailure.isOk()) return maybeFailure;
- std::set<int32_t> idsToDisconnectOnFailure;
- std::for_each(newConnections.begin(), newConnections.end(), [&](const auto& connectionPair) {
- const int32_t mixPortConfigId = connectionPair.first;
- if (auto it = oldConnections.find(mixPortConfigId);
- it == oldConnections.end() || it->second != connectionPair.second) {
- const auto connectedDevices = getDevicesFromDevicePortConfigIds(connectionPair.second);
+ };
+ fillConnections(oldConnections, oldPatch);
+ fillConnections(newConnections, newPatch);
+ /**
+ * Illustration of oldConnections and newConnections
+ *
+ * oldConnections {
+ * a : {A,B,C},
+ * b : {D},
+ * d : {H,I,J},
+ * e : {N,O,P},
+ * f : {Q,R},
+ * g : {T,U,V},
+ * }
+ *
+ * newConnections {
+ * a : {A,B,C},
+ * c : {E,F,G},
+ * d : {K,L,M},
+ * e : {N,P},
+ * f : {Q,R,S},
+ * g : {U,V,W},
+ * }
+ *
+ * Expected routings:
+ * 'a': is ignored both in disconnect step and connect step,
+ * due to same devices both in oldConnections and newConnections.
+ * 'b': handled only in disconnect step with empty devices because 'b' is only present
+ * in oldConnections.
+ * 'c': handled only in connect step with {E,F,G} devices because 'c' is only present
+ * in newConnections.
+ * 'd': handled only in connect step with {K,L,M} devices because 'd' is also present
+ * in newConnections and it is ignored in disconnected step.
+ * 'e': handled only in connect step with {N,P} devices because 'e' is also present
+ * in newConnections and it is ignored in disconnect step. please note that there
+ * is no exclusive disconnection for device {O}.
+ * 'f': handled only in connect step with {Q,R,S} devices because 'f' is also present
+ * in newConnections and it is ignored in disconnect step. Even though stream is
+ * already connected with {Q,R} devices and connection happens with {Q,R,S}.
+ * 'g': handled only in connect step with {U,V,W} devices because 'g' is also present
+ * in newConnections and it is ignored in disconnect step. There is no exclusive
+ * disconnection with devices {T,U,V}.
+ *
+ * If, any failure, will lead to restoreOldConnections (rollback).
+ * The aim of the restoreOldConnections is to make connections back to oldConnections.
+ * Failures in restoreOldConnections aren't handled.
+ */
+
+ std::set<int32_t> idsToConnectBackOnFailure;
+ // disconnection step
+ for (const auto& [oldMixPortConfigId, oldDevicePortConfigIds] : oldConnections) {
+ if (auto it = newConnections.find(oldMixPortConfigId); it == newConnections.end()) {
+ idsToConnectBackOnFailure.insert(oldMixPortConfigId);
+ if (auto status = mStreams.setStreamConnectedDevices(oldMixPortConfigId, {});
+ status.isOk()) {
+ LOG(DEBUG) << __func__ << ": The stream on port config id " << oldMixPortConfigId
+ << " has been disconnected";
+ } else {
+ maybeFailure = std::move(status);
+ // proceed to rollback even on one failure
+ break;
+ }
+ }
+ }
+
+ if (!maybeFailure.isOk()) {
+ restoreOldConnections(idsToConnectBackOnFailure, false /*continueWithEmptyDevices*/);
+ LOG(WARNING) << __func__ << ": failed to disconnect from old patch. attempted rollback";
+ return maybeFailure;
+ }
+
+ std::set<int32_t> idsToRollbackOnFailure;
+ // connection step
+ for (const auto& [newMixPortConfigId, newDevicePortConfigIds] : newConnections) {
+ if (auto it = oldConnections.find(newMixPortConfigId);
+ it == oldConnections.end() || it->second != newDevicePortConfigIds) {
+ const auto connectedDevices = getDevicesFromDevicePortConfigIds(newDevicePortConfigIds);
+ idsToRollbackOnFailure.insert(newMixPortConfigId);
if (connectedDevices.empty()) {
// This is important as workers use the vector size to derive the connection status.
- LOG(FATAL) << "updateStreamsConnectedState: No connected devices found for port "
- "config id "
- << mixPortConfigId;
+ LOG(FATAL) << __func__ << ": No connected devices found for port config id "
+ << newMixPortConfigId;
}
- if (auto status = mStreams.setStreamConnectedDevices(mixPortConfigId, connectedDevices);
+ if (auto status =
+ mStreams.setStreamConnectedDevices(newMixPortConfigId, connectedDevices);
status.isOk()) {
- LOG(DEBUG) << "updateStreamsConnectedState: The stream on port config id "
- << mixPortConfigId << " has been connected to: "
+ LOG(DEBUG) << __func__ << ": The stream on port config id " << newMixPortConfigId
+ << " has been connected to: "
<< ::android::internal::ToString(connectedDevices);
} else {
maybeFailure = std::move(status);
- idsToDisconnectOnFailure.insert(mixPortConfigId);
+ // proceed to rollback even on one failure
+ break;
}
}
- });
+ }
+
if (!maybeFailure.isOk()) {
- LOG(WARNING) << __func__ << ": " << mType
- << ": Due to a failure, disconnecting streams on port config ids "
- << ::android::internal::ToString(idsToDisconnectOnFailure);
- std::for_each(idsToDisconnectOnFailure.begin(), idsToDisconnectOnFailure.end(),
- [&](const auto& portConfigId) {
- auto status = mStreams.setStreamConnectedDevices(portConfigId, {});
- (void)status.isOk(); // Can't do much about a failure here.
- });
+ restoreOldConnections(idsToConnectBackOnFailure, false /*continueWithEmptyDevices*/);
+ restoreOldConnections(idsToRollbackOnFailure, true /*continueWithEmptyDevices*/);
+ LOG(WARNING) << __func__ << ": failed to connect for new patch. attempted rollback";
return maybeFailure;
}
+
return ndk::ScopedAStatus::ok();
}
@@ -1450,6 +1524,7 @@
const std::string Module::VendorDebug::kForceTransientBurstName = "aosp.forceTransientBurst";
const std::string Module::VendorDebug::kForceSynchronousDrainName = "aosp.forceSynchronousDrain";
+const std::string Module::VendorDebug::kForceDrainToDrainingName = "aosp.forceDrainToDraining";
ndk::ScopedAStatus Module::getVendorParameters(const std::vector<std::string>& in_ids,
std::vector<VendorParameter>* _aidl_return) {
@@ -1464,6 +1539,10 @@
VendorParameter forceSynchronousDrain{.id = id};
forceSynchronousDrain.ext.setParcelable(Boolean{mVendorDebug.forceSynchronousDrain});
_aidl_return->push_back(std::move(forceSynchronousDrain));
+ } else if (id == VendorDebug::kForceDrainToDrainingName) {
+ VendorParameter forceDrainToDraining{.id = id};
+ forceDrainToDraining.ext.setParcelable(Boolean{mVendorDebug.forceDrainToDraining});
+ _aidl_return->push_back(std::move(forceDrainToDraining));
} else {
allParametersKnown = false;
LOG(VERBOSE) << __func__ << ": " << mType << ": unrecognized parameter \"" << id << "\"";
@@ -1504,6 +1583,10 @@
if (!extractParameter<Boolean>(p, &mVendorDebug.forceSynchronousDrain)) {
return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
}
+ } else if (p.id == VendorDebug::kForceDrainToDrainingName) {
+ if (!extractParameter<Boolean>(p, &mVendorDebug.forceDrainToDraining)) {
+ return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
+ }
} else {
allParametersKnown = false;
LOG(VERBOSE) << __func__ << ": " << mType << ": unrecognized parameter \"" << p.id
diff --git a/audio/aidl/default/Stream.cpp b/audio/aidl/default/Stream.cpp
index 3d7f30c..4525f6a 100644
--- a/audio/aidl/default/Stream.cpp
+++ b/audio/aidl/default/Stream.cpp
@@ -382,8 +382,20 @@
const std::string StreamOutWorkerLogic::kThreadName = "writer";
StreamOutWorkerLogic::Status StreamOutWorkerLogic::cycle() {
- if (mState == StreamDescriptor::State::DRAINING ||
- mState == StreamDescriptor::State::TRANSFERRING) {
+ if (mState == StreamDescriptor::State::DRAINING && mContext->getForceDrainToDraining() &&
+ mOnDrainReadyStatus == OnDrainReadyStatus::UNSENT) {
+ std::shared_ptr<IStreamCallback> asyncCallback = mContext->getAsyncCallback();
+ if (asyncCallback != nullptr) {
+ ndk::ScopedAStatus status = asyncCallback->onDrainReady();
+ if (!status.isOk()) {
+ LOG(ERROR) << __func__ << ": error from onDrainReady: " << status;
+ }
+ // This sets the timeout for moving into IDLE on next iterations.
+ switchToTransientState(StreamDescriptor::State::DRAINING);
+ mOnDrainReadyStatus = OnDrainReadyStatus::SENT;
+ }
+ } else if (mState == StreamDescriptor::State::DRAINING ||
+ mState == StreamDescriptor::State::TRANSFERRING) {
if (auto stateDurationMs = std::chrono::duration_cast<std::chrono::milliseconds>(
std::chrono::steady_clock::now() - mTransientStateStart);
stateDurationMs >= mTransientStateDelayMs) {
@@ -396,9 +408,12 @@
// drain or transfer completion. In the stub, we switch unconditionally.
if (mState == StreamDescriptor::State::DRAINING) {
mState = StreamDescriptor::State::IDLE;
- ndk::ScopedAStatus status = asyncCallback->onDrainReady();
- if (!status.isOk()) {
- LOG(ERROR) << __func__ << ": error from onDrainReady: " << status;
+ if (mOnDrainReadyStatus != OnDrainReadyStatus::SENT) {
+ ndk::ScopedAStatus status = asyncCallback->onDrainReady();
+ if (!status.isOk()) {
+ LOG(ERROR) << __func__ << ": error from onDrainReady: " << status;
+ }
+ mOnDrainReadyStatus = OnDrainReadyStatus::SENT;
}
} else {
mState = StreamDescriptor::State::ACTIVE;
@@ -537,6 +552,10 @@
mState = StreamDescriptor::State::IDLE;
} else {
switchToTransientState(StreamDescriptor::State::DRAINING);
+ mOnDrainReadyStatus =
+ mode == StreamDescriptor::DrainMode::DRAIN_EARLY_NOTIFY
+ ? OnDrainReadyStatus::UNSENT
+ : OnDrainReadyStatus::IGNORE;
}
} else {
LOG(ERROR) << __func__ << ": drain failed: " << status;
diff --git a/audio/aidl/default/apex/com.android.hardware.audio/Android.bp b/audio/aidl/default/apex/com.android.hardware.audio/Android.bp
index ee92512..8fa429a 100644
--- a/audio/aidl/default/apex/com.android.hardware.audio/Android.bp
+++ b/audio/aidl/default/apex/com.android.hardware.audio/Android.bp
@@ -48,4 +48,11 @@
"android.hardware.audio.service-aidl.xml",
"android.hardware.bluetooth.audio.xml",
],
+ required: [
+ "aidl_audio_set_configurations_bfbs",
+ "aidl_default_audio_set_configurations_json",
+ "aidl_audio_set_scenarios_bfbs",
+ "aidl_default_audio_set_scenarios_json",
+ "hfp_codec_capabilities_xml",
+ ],
}
diff --git a/audio/aidl/default/include/core-impl/Module.h b/audio/aidl/default/include/core-impl/Module.h
index 7e32cf2..d03598a 100644
--- a/audio/aidl/default/include/core-impl/Module.h
+++ b/audio/aidl/default/include/core-impl/Module.h
@@ -148,8 +148,10 @@
struct VendorDebug {
static const std::string kForceTransientBurstName;
static const std::string kForceSynchronousDrainName;
+ static const std::string kForceDrainToDrainingName;
bool forceTransientBurst = false;
bool forceSynchronousDrain = false;
+ bool forceDrainToDraining = false;
};
// ids of device ports created at runtime via 'connectExternalDevice'.
// Also stores a list of ids of mix ports with dynamic profiles that were populated from
diff --git a/audio/aidl/default/include/core-impl/Stream.h b/audio/aidl/default/include/core-impl/Stream.h
index f7b9269..8297fc5 100644
--- a/audio/aidl/default/include/core-impl/Stream.h
+++ b/audio/aidl/default/include/core-impl/Stream.h
@@ -78,6 +78,10 @@
bool forceTransientBurst = false;
// Force the "drain" command to be synchronous, going directly to the IDLE state.
bool forceSynchronousDrain = false;
+ // Force the "drain early notify" command to keep the SM in the DRAINING state
+ // after sending 'onDrainReady' callback. The SM moves to IDLE after
+ // 'transientStateDelayMs'.
+ bool forceDrainToDraining = false;
};
StreamContext() = default;
@@ -119,6 +123,7 @@
::aidl::android::media::audio::common::AudioIoFlags getFlags() const { return mFlags; }
bool getForceTransientBurst() const { return mDebugParameters.forceTransientBurst; }
bool getForceSynchronousDrain() const { return mDebugParameters.forceSynchronousDrain; }
+ bool getForceDrainToDraining() const { return mDebugParameters.forceDrainToDraining; }
size_t getFrameSize() const;
int getInternalCommandCookie() const { return mInternalCommandCookie; }
int32_t getMixPortHandle() const { return mMixPortHandle; }
@@ -301,6 +306,9 @@
bool write(size_t clientSize, StreamDescriptor::Reply* reply);
std::shared_ptr<IStreamOutEventCallback> mEventCallback;
+
+ enum OnDrainReadyStatus : int32_t { IGNORE /*used for DRAIN_ALL*/, UNSENT, SENT };
+ OnDrainReadyStatus mOnDrainReadyStatus = OnDrainReadyStatus::IGNORE;
};
using StreamOutWorker = StreamWorkerImpl<StreamOutWorkerLogic>;
diff --git a/audio/aidl/vts/Android.bp b/audio/aidl/vts/Android.bp
index 9ebe518..b025637 100644
--- a/audio/aidl/vts/Android.bp
+++ b/audio/aidl/vts/Android.bp
@@ -31,6 +31,7 @@
],
header_libs: [
"libaudioaidl_headers",
+ "libaudioutils_headers",
"libexpectedutils_headers",
],
cflags: [
diff --git a/audio/aidl/vts/EffectHelper.h b/audio/aidl/vts/EffectHelper.h
index 01f73fc..e073ece 100644
--- a/audio/aidl/vts/EffectHelper.h
+++ b/audio/aidl/vts/EffectHelper.h
@@ -84,6 +84,7 @@
}
static constexpr float kMaxAudioSampleValue = 1;
+static constexpr int kSamplingFrequency = 44100;
class EffectHelper {
public:
@@ -428,19 +429,28 @@
}
}
- // Generate multitone input between -1 to +1 using testFrequencies
- void generateMultiTone(const std::vector<int>& testFrequencies, std::vector<float>& input,
- const int samplingFrequency) {
+ // Generate multitone input between -amplitude to +amplitude using testFrequencies
+ // All test frequencies are considered having the same amplitude
+ void generateSineWave(const std::vector<int>& testFrequencies, std::vector<float>& input,
+ const float amplitude = 1.0,
+ const int samplingFrequency = kSamplingFrequency) {
for (size_t i = 0; i < input.size(); i++) {
input[i] = 0;
for (size_t j = 0; j < testFrequencies.size(); j++) {
input[i] += sin(2 * M_PI * testFrequencies[j] * i / samplingFrequency);
}
- input[i] /= testFrequencies.size();
+ input[i] *= amplitude / testFrequencies.size();
}
}
+ // Generate single tone input between -amplitude to +amplitude using testFrequency
+ void generateSineWave(const int testFrequency, std::vector<float>& input,
+ const float amplitude = 1.0,
+ const int samplingFrequency = kSamplingFrequency) {
+ generateSineWave(std::vector<int>{testFrequency}, input, amplitude, samplingFrequency);
+ }
+
// Use FFT transform to convert the buffer to frequency domain
// Compute its magnitude at binOffsets
std::vector<float> calculateMagnitude(const std::vector<float>& buffer,
diff --git a/audio/aidl/vts/VtsHalAudioCoreConfigTargetTest.cpp b/audio/aidl/vts/VtsHalAudioCoreConfigTargetTest.cpp
index 25fcd46..583143c 100644
--- a/audio/aidl/vts/VtsHalAudioCoreConfigTargetTest.cpp
+++ b/audio/aidl/vts/VtsHalAudioCoreConfigTargetTest.cpp
@@ -355,7 +355,6 @@
const AudioHalCapRule& rule,
const std::vector<std::optional<AudioHalCapCriterionV2>>& criteria) {
const auto& compoundRule = rule.compoundRule;
- using TypeTag = AudioHalCapCriterionV2::Type::Tag;
if (rule.nestedRules.empty() && rule.criterionRules.empty()) {
EXPECT_EQ(compoundRule, AudioHalCapRule::CompoundRule::ALL);
}
@@ -365,8 +364,8 @@
ValidateAudioHalConfigurationRule(nestedRule, criteria);
}
for (const auto& criterionRule : rule.criterionRules) {
- auto selectionCriterion = criterionRule.criterion;
- auto criterionValue = criterionRule.criterionTypeValue;
+ auto selectionCriterion = criterionRule.criterionAndValue;
+ auto criterionValue = criterionRule.criterionAndValue;
auto matchesWhen = criterionRule.matchingRule;
auto criteriaIt = find_if(criteria.begin(), criteria.end(), [&](const auto& criterion) {
return criterion.has_value() &&
@@ -377,50 +376,65 @@
AudioHalCapCriterionV2 matchingCriterion = (*criteriaIt).value();
switch (selectionCriterion.getTag()) {
case AudioHalCapCriterionV2::availableInputDevices: {
- EXPECT_EQ(criterionValue.getTag(), TypeTag::availableDevicesType);
+ const auto& values =
+ criterionValue.get<AudioHalCapCriterionV2::availableInputDevices>()
+ .values;
+ ASSERT_FALSE(values.empty());
validateAudioHalCapRule(
matchingCriterion.get<AudioHalCapCriterionV2::availableInputDevices>(),
- criterionValue.get<TypeTag::availableDevicesType>(), matchesWhen);
+ values[0], matchesWhen);
break;
}
case AudioHalCapCriterionV2::availableOutputDevices: {
- EXPECT_EQ(criterionValue.getTag(), TypeTag::availableDevicesType);
+ const auto& values =
+ criterionValue.get<AudioHalCapCriterionV2::availableOutputDevices>()
+ .values;
+ ASSERT_FALSE(values.empty());
validateAudioHalCapRule(
matchingCriterion.get<AudioHalCapCriterionV2::availableOutputDevices>(),
- criterionValue.get<TypeTag::availableDevicesType>(), matchesWhen);
+ values[0], matchesWhen);
break;
}
case AudioHalCapCriterionV2::availableInputDevicesAddresses: {
- EXPECT_EQ(criterionValue.getTag(), TypeTag::availableDevicesAddressesType);
+ const auto& values =
+ criterionValue
+ .get<AudioHalCapCriterionV2::availableInputDevicesAddresses>()
+ .values;
+ ASSERT_FALSE(values.empty());
validateAudioHalCapRule(
matchingCriterion
.get<AudioHalCapCriterionV2::availableInputDevicesAddresses>(),
- criterionValue.get<TypeTag::availableDevicesAddressesType>(),
- matchesWhen);
+ values[0], matchesWhen);
break;
}
case AudioHalCapCriterionV2::availableOutputDevicesAddresses: {
- EXPECT_EQ(criterionValue.getTag(), TypeTag::availableDevicesAddressesType);
+ const auto& values =
+ criterionValue
+ .get<AudioHalCapCriterionV2::availableOutputDevicesAddresses>()
+ .values;
+ ASSERT_FALSE(values.empty());
validateAudioHalCapRule(
matchingCriterion
.get<AudioHalCapCriterionV2::availableOutputDevicesAddresses>(),
- criterionValue.get<TypeTag::availableDevicesAddressesType>(),
- matchesWhen);
+ values[0], matchesWhen);
break;
}
case AudioHalCapCriterionV2::telephonyMode: {
- EXPECT_EQ(criterionValue.getTag(), TypeTag::telephonyModeType);
+ const auto& values =
+ criterionValue.get<AudioHalCapCriterionV2::telephonyMode>().values;
+ ASSERT_FALSE(values.empty());
validateAudioHalCapRule(
matchingCriterion.get<AudioHalCapCriterionV2::telephonyMode>(),
- criterionValue.get<TypeTag::telephonyModeType>(), matchesWhen);
+ values[0], matchesWhen);
break;
}
case AudioHalCapCriterionV2::forceConfigForUse: {
- EXPECT_EQ(criterionValue.getTag(), TypeTag::forcedConfigType);
+ const auto& values =
+ criterionValue.get<AudioHalCapCriterionV2::forceConfigForUse>().values;
+ ASSERT_FALSE(values.empty());
validateAudioHalCapRule(
- matchingCriterion
- .get<AudioHalCapCriterionV2::forceConfigForUse>(),
- criterionValue.get<TypeTag::forcedConfigType>(), matchesWhen);
+ matchingCriterion.get<AudioHalCapCriterionV2::forceConfigForUse>(),
+ values[0], matchesWhen);
break;
}
default:
diff --git a/audio/aidl/vts/VtsHalAudioCoreModuleTargetTest.cpp b/audio/aidl/vts/VtsHalAudioCoreModuleTargetTest.cpp
index 9fe5801..6bce107 100644
--- a/audio/aidl/vts/VtsHalAudioCoreModuleTargetTest.cpp
+++ b/audio/aidl/vts/VtsHalAudioCoreModuleTargetTest.cpp
@@ -80,6 +80,7 @@
using aidl::android::hardware::audio::core::VendorParameter;
using aidl::android::hardware::audio::core::sounddose::ISoundDose;
using aidl::android::hardware::common::fmq::SynchronizedReadWrite;
+using aidl::android::media::audio::common::AudioChannelLayout;
using aidl::android::media::audio::common::AudioContentType;
using aidl::android::media::audio::common::AudioDevice;
using aidl::android::media::audio::common::AudioDeviceAddress;
@@ -116,6 +117,10 @@
using ndk::enum_range;
using ndk::ScopedAStatus;
+static constexpr int32_t kAidlVersion1 = 1;
+static constexpr int32_t kAidlVersion2 = 2;
+static constexpr int32_t kAidlVersion3 = 3;
+
template <typename T>
std::set<int32_t> extractIds(const std::vector<T>& v) {
std::set<int32_t> ids;
@@ -451,7 +456,6 @@
// This is implemented by the 'StreamFixture' utility class.
static constexpr int kNegativeTestBufferSizeFrames = 256;
static constexpr int kDefaultLargeBufferSizeFrames = 48000;
- static constexpr int32_t kAidlVersion3 = 3;
void SetUpImpl(const std::string& moduleName, bool setUpDebug = true) {
ASSERT_NO_FATAL_FAILURE(ConnectToService(moduleName, setUpDebug));
@@ -581,7 +585,7 @@
std::unique_ptr<WithDebugFlags> debug;
std::vector<AudioPort> initialPorts;
std::vector<AudioRoute> initialRoutes;
- int32_t aidlVersion;
+ int32_t aidlVersion = -1;
};
class WithDevicePortConnectedState {
@@ -1514,7 +1518,7 @@
const int defaultDeviceFlag = 1 << AudioPortDeviceExt::FLAG_INDEX_DEFAULT_DEVICE;
for (const auto& port : ports) {
if (port.ext.getTag() != AudioPortExt::Tag::device) continue;
- const auto& devicePort = port.ext.get<AudioPortExt::Tag::device>();
+ const AudioPortDeviceExt& devicePort = port.ext.get<AudioPortExt::Tag::device>();
EXPECT_NE(AudioDeviceType::NONE, devicePort.device.type.type);
EXPECT_NE(AudioDeviceType::IN_DEFAULT, devicePort.device.type.type);
EXPECT_NE(AudioDeviceType::OUT_DEFAULT, devicePort.device.type.type);
@@ -1549,6 +1553,15 @@
FAIL() << "Invalid AudioIoFlags Tag: " << toString(port.flags.getTag());
}
}
+ // Speaker layout can be null or layoutMask variant.
+ if (devicePort.speakerLayout.has_value()) {
+ // Should only be set for output ports.
+ EXPECT_EQ(AudioIoFlags::Tag::output, port.flags.getTag());
+ const auto speakerLayoutTag = devicePort.speakerLayout.value().getTag();
+ EXPECT_EQ(AudioChannelLayout::Tag::layoutMask, speakerLayoutTag)
+ << "If set, speaker layout must be layoutMask. Received: "
+ << toString(speakerLayoutTag);
+ }
}
}
@@ -1827,6 +1840,7 @@
}
TEST_P(AudioCoreModule, SetAudioPortConfigInvalidPortAudioGain) {
+ ASSERT_GE(aidlVersion, kAidlVersion1);
if (aidlVersion < kAidlVersion3) {
GTEST_SKIP() << "Skip for audio HAL version lower than " << kAidlVersion3;
}
@@ -4011,6 +4025,7 @@
enum {
NAMED_CMD_NAME,
+ NAMED_CMD_MIN_INTERFACE_VERSION,
NAMED_CMD_DELAY_MS,
NAMED_CMD_STREAM_TYPE,
NAMED_CMD_CMDS,
@@ -4018,7 +4033,7 @@
};
enum class StreamTypeFilter { ANY, SYNC, ASYNC };
using NamedCommandSequence =
- std::tuple<std::string, int /*cmdDelayMs*/, StreamTypeFilter,
+ std::tuple<std::string, int /*minInterfaceVersion*/, int /*cmdDelayMs*/, StreamTypeFilter,
std::shared_ptr<StateSequence>, bool /*validatePositionIncrease*/>;
enum { PARAM_MODULE_NAME, PARAM_CMD_SEQ, PARAM_SETUP_SEQ };
using StreamIoTestParameters =
@@ -4029,6 +4044,12 @@
public:
void SetUp() override {
ASSERT_NO_FATAL_FAILURE(SetUpImpl(std::get<PARAM_MODULE_NAME>(GetParam())));
+ ASSERT_GE(aidlVersion, kAidlVersion1);
+ if (const int minVersion =
+ std::get<NAMED_CMD_MIN_INTERFACE_VERSION>(std::get<PARAM_CMD_SEQ>(GetParam()));
+ aidlVersion < minVersion) {
+ GTEST_SKIP() << "Skip for audio HAL version lower than " << minVersion;
+ }
ASSERT_NO_FATAL_FAILURE(SetUpModuleConfig());
}
@@ -4038,6 +4059,20 @@
if (allPortConfigs.empty()) {
GTEST_SKIP() << "No mix ports have attached devices";
}
+ const auto& commandsAndStates =
+ std::get<NAMED_CMD_CMDS>(std::get<PARAM_CMD_SEQ>(GetParam()));
+ const bool validatePositionIncrease =
+ std::get<NAMED_CMD_VALIDATE_POS_INCREASE>(std::get<PARAM_CMD_SEQ>(GetParam()));
+ auto runStreamIoCommands = [&](const AudioPortConfig& portConfig) {
+ if (!std::get<PARAM_SETUP_SEQ>(GetParam())) {
+ ASSERT_NO_FATAL_FAILURE(RunStreamIoCommandsImplSeq1(portConfig, commandsAndStates,
+ validatePositionIncrease));
+ } else {
+ ASSERT_NO_FATAL_FAILURE(RunStreamIoCommandsImplSeq2(portConfig, commandsAndStates,
+ validatePositionIncrease));
+ }
+ };
+
for (const auto& portConfig : allPortConfigs) {
auto port = moduleConfig->getPort(portConfig.portId);
ASSERT_TRUE(port.has_value());
@@ -4065,16 +4100,18 @@
delayTransientStates.flags().streamTransientStateDelayMs =
std::get<NAMED_CMD_DELAY_MS>(std::get<PARAM_CMD_SEQ>(GetParam()));
ASSERT_NO_FATAL_FAILURE(delayTransientStates.SetUp(module.get()));
- const auto& commandsAndStates =
- std::get<NAMED_CMD_CMDS>(std::get<PARAM_CMD_SEQ>(GetParam()));
- const bool validatePositionIncrease =
- std::get<NAMED_CMD_VALIDATE_POS_INCREASE>(std::get<PARAM_CMD_SEQ>(GetParam()));
- if (!std::get<PARAM_SETUP_SEQ>(GetParam())) {
- ASSERT_NO_FATAL_FAILURE(RunStreamIoCommandsImplSeq1(portConfig, commandsAndStates,
- validatePositionIncrease));
- } else {
- ASSERT_NO_FATAL_FAILURE(RunStreamIoCommandsImplSeq2(portConfig, commandsAndStates,
- validatePositionIncrease));
+ ASSERT_NO_FATAL_FAILURE(runStreamIoCommands(portConfig));
+ if (aidlVersion >= kAidlVersion3 && isNonBlocking && !IOTraits<Stream>::is_input) {
+ // Also try running the same sequence with "aosp.forceDrainToDraining" set.
+ // This will only work with the default implementation. When it works, the stream
+ // tries always to move to the 'DRAINING' state after an "early notify" drain.
+ // This helps to check more paths for our test scenarios.
+ WithModuleParameter forceDrainToDraining("aosp.forceDrainToDraining",
+ Boolean{true});
+ if (forceDrainToDraining.SetUpNoChecks(module.get(), true /*failureExpected*/)
+ .isOk()) {
+ ASSERT_NO_FATAL_FAILURE(runStreamIoCommands(portConfig));
+ }
}
if (isNonBlocking) {
// Also try running the same sequence with "aosp.forceTransientBurst" set.
@@ -4084,13 +4121,7 @@
WithModuleParameter forceTransientBurst("aosp.forceTransientBurst", Boolean{true});
if (forceTransientBurst.SetUpNoChecks(module.get(), true /*failureExpected*/)
.isOk()) {
- if (!std::get<PARAM_SETUP_SEQ>(GetParam())) {
- ASSERT_NO_FATAL_FAILURE(RunStreamIoCommandsImplSeq1(
- portConfig, commandsAndStates, validatePositionIncrease));
- } else {
- ASSERT_NO_FATAL_FAILURE(RunStreamIoCommandsImplSeq2(
- portConfig, commandsAndStates, validatePositionIncrease));
- }
+ ASSERT_NO_FATAL_FAILURE(runStreamIoCommands(portConfig));
}
} else if (!IOTraits<Stream>::is_input) {
// Also try running the same sequence with "aosp.forceSynchronousDrain" set.
@@ -4101,13 +4132,7 @@
Boolean{true});
if (forceSynchronousDrain.SetUpNoChecks(module.get(), true /*failureExpected*/)
.isOk()) {
- if (!std::get<PARAM_SETUP_SEQ>(GetParam())) {
- ASSERT_NO_FATAL_FAILURE(RunStreamIoCommandsImplSeq1(
- portConfig, commandsAndStates, validatePositionIncrease));
- } else {
- ASSERT_NO_FATAL_FAILURE(RunStreamIoCommandsImplSeq2(
- portConfig, commandsAndStates, validatePositionIncrease));
- }
+ ASSERT_NO_FATAL_FAILURE(runStreamIoCommands(portConfig));
}
}
}
@@ -4560,14 +4585,14 @@
return std::make_shared<StateSequenceFollower>(std::move(d));
}
static const NamedCommandSequence kReadSeq =
- std::make_tuple(std::string("Read"), 0, StreamTypeFilter::ANY, makeBurstCommands(true),
- true /*validatePositionIncrease*/);
+ std::make_tuple(std::string("Read"), kAidlVersion1, 0, StreamTypeFilter::ANY,
+ makeBurstCommands(true), true /*validatePositionIncrease*/);
static const NamedCommandSequence kWriteSyncSeq =
- std::make_tuple(std::string("Write"), 0, StreamTypeFilter::SYNC, makeBurstCommands(true),
- true /*validatePositionIncrease*/);
+ std::make_tuple(std::string("Write"), kAidlVersion1, 0, StreamTypeFilter::SYNC,
+ makeBurstCommands(true), true /*validatePositionIncrease*/);
static const NamedCommandSequence kWriteAsyncSeq =
- std::make_tuple(std::string("Write"), 0, StreamTypeFilter::ASYNC, makeBurstCommands(false),
- true /*validatePositionIncrease*/);
+ std::make_tuple(std::string("Write"), kAidlVersion1, 0, StreamTypeFilter::ASYNC,
+ makeBurstCommands(false), true /*validatePositionIncrease*/);
std::shared_ptr<StateSequence> makeAsyncDrainCommands(bool isInput) {
using State = StreamDescriptor::State;
@@ -4596,10 +4621,10 @@
return std::make_shared<StateSequenceFollower>(std::move(d));
}
static const NamedCommandSequence kWriteDrainAsyncSeq = std::make_tuple(
- std::string("WriteDrain"), kStreamTransientStateTransitionDelayMs, StreamTypeFilter::ASYNC,
- makeAsyncDrainCommands(false), false /*validatePositionIncrease*/);
+ std::string("WriteDrain"), kAidlVersion1, kStreamTransientStateTransitionDelayMs,
+ StreamTypeFilter::ASYNC, makeAsyncDrainCommands(false), false /*validatePositionIncrease*/);
static const NamedCommandSequence kDrainInSeq =
- std::make_tuple(std::string("Drain"), 0, StreamTypeFilter::ANY,
+ std::make_tuple(std::string("Drain"), kAidlVersion1, 0, StreamTypeFilter::ANY,
makeAsyncDrainCommands(true), false /*validatePositionIncrease*/);
std::shared_ptr<StateSequence> makeDrainOutCommands(bool isSync) {
@@ -4621,12 +4646,28 @@
return std::make_shared<StateSequenceFollower>(std::move(d));
}
static const NamedCommandSequence kDrainOutSyncSeq =
- std::make_tuple(std::string("Drain"), 0, StreamTypeFilter::SYNC, makeDrainOutCommands(true),
- false /*validatePositionIncrease*/);
+ std::make_tuple(std::string("Drain"), kAidlVersion1, 0, StreamTypeFilter::SYNC,
+ makeDrainOutCommands(true), false /*validatePositionIncrease*/);
static const NamedCommandSequence kDrainOutAsyncSeq =
- std::make_tuple(std::string("Drain"), 0, StreamTypeFilter::ASYNC,
+ std::make_tuple(std::string("Drain"), kAidlVersion3, 0, StreamTypeFilter::ASYNC,
makeDrainOutCommands(false), false /*validatePositionIncrease*/);
+std::shared_ptr<StateSequence> makeDrainEarlyOutCommands() {
+ using State = StreamDescriptor::State;
+ auto d = std::make_unique<StateDag>();
+ StateDag::Node last = d->makeFinalNode(State::IDLE);
+ StateDag::Node draining = d->makeNode(State::DRAINING, kDrainReadyEvent, last);
+ draining.children().push_back(d->makeNode(State::DRAINING, kGetStatusCommand, last));
+ StateDag::Node active = d->makeNode(State::ACTIVE, kDrainOutEarlyCommand, draining);
+ StateDag::Node idle = d->makeNode(State::IDLE, kBurstCommand, active);
+ idle.children().push_back(d->makeNode(State::TRANSFERRING, kTransferReadyEvent, active));
+ d->makeNode(State::STANDBY, kStartCommand, idle);
+ return std::make_shared<StateSequenceFollower>(std::move(d));
+}
+static const NamedCommandSequence kDrainEarlyOutAsyncSeq =
+ std::make_tuple(std::string("DrainEarly"), kAidlVersion3, 0, StreamTypeFilter::ASYNC,
+ makeDrainEarlyOutCommands(), false /*validatePositionIncrease*/);
+
std::shared_ptr<StateSequence> makeDrainPauseOutCommands(bool isSync) {
using State = StreamDescriptor::State;
auto d = std::make_unique<StateDag>();
@@ -4646,12 +4687,33 @@
d->makeNode(State::STANDBY, kStartCommand, idle);
return std::make_shared<StateSequenceFollower>(std::move(d));
}
-static const NamedCommandSequence kDrainPauseOutSyncSeq = std::make_tuple(
- std::string("DrainPause"), kStreamTransientStateTransitionDelayMs, StreamTypeFilter::SYNC,
- makeDrainPauseOutCommands(true), false /*validatePositionIncrease*/);
-static const NamedCommandSequence kDrainPauseOutAsyncSeq = std::make_tuple(
- std::string("DrainPause"), kStreamTransientStateTransitionDelayMs, StreamTypeFilter::ASYNC,
- makeDrainPauseOutCommands(false), false /*validatePositionIncrease*/);
+static const NamedCommandSequence kDrainPauseOutSyncSeq =
+ std::make_tuple(std::string("DrainPause"), kAidlVersion1,
+ kStreamTransientStateTransitionDelayMs, StreamTypeFilter::SYNC,
+ makeDrainPauseOutCommands(true), false /*validatePositionIncrease*/);
+static const NamedCommandSequence kDrainPauseOutAsyncSeq =
+ std::make_tuple(std::string("DrainPause"), kAidlVersion1,
+ kStreamTransientStateTransitionDelayMs, StreamTypeFilter::ASYNC,
+ makeDrainPauseOutCommands(false), false /*validatePositionIncrease*/);
+
+std::shared_ptr<StateSequence> makeDrainEarlyPauseOutCommands() {
+ using State = StreamDescriptor::State;
+ auto d = std::make_unique<StateDag>();
+ StateDag::Node draining = d->makeNodes({std::make_pair(State::DRAINING, kPauseCommand),
+ std::make_pair(State::DRAIN_PAUSED, kStartCommand),
+ std::make_pair(State::DRAINING, kPauseCommand),
+ std::make_pair(State::DRAIN_PAUSED, kBurstCommand)},
+ State::TRANSFER_PAUSED);
+ StateDag::Node active = d->makeNode(State::ACTIVE, kDrainOutEarlyCommand, draining);
+ StateDag::Node idle = d->makeNode(State::IDLE, kBurstCommand, active);
+ idle.children().push_back(d->makeNode(State::TRANSFERRING, kDrainOutEarlyCommand, draining));
+ d->makeNode(State::STANDBY, kStartCommand, idle);
+ return std::make_shared<StateSequenceFollower>(std::move(d));
+}
+static const NamedCommandSequence kDrainEarlyPauseOutAsyncSeq =
+ std::make_tuple(std::string("DrainEarlyPause"), kAidlVersion3,
+ kStreamTransientStateTransitionDelayMs, StreamTypeFilter::ASYNC,
+ makeDrainEarlyPauseOutCommands(), false /*validatePositionIncrease*/);
// This sequence also verifies that the capture / presentation position is not reset on standby.
std::shared_ptr<StateSequence> makeStandbyCommands(bool isInput, bool isSync) {
@@ -4693,14 +4755,15 @@
return std::make_shared<StateSequenceFollower>(std::move(d));
}
static const NamedCommandSequence kStandbyInSeq =
- std::make_tuple(std::string("Standby"), 0, StreamTypeFilter::ANY,
+ std::make_tuple(std::string("Standby"), kAidlVersion1, 0, StreamTypeFilter::ANY,
makeStandbyCommands(true, false), false /*validatePositionIncrease*/);
static const NamedCommandSequence kStandbyOutSyncSeq =
- std::make_tuple(std::string("Standby"), 0, StreamTypeFilter::SYNC,
+ std::make_tuple(std::string("Standby"), kAidlVersion1, 0, StreamTypeFilter::SYNC,
makeStandbyCommands(false, true), false /*validatePositionIncrease*/);
-static const NamedCommandSequence kStandbyOutAsyncSeq = std::make_tuple(
- std::string("Standby"), kStreamTransientStateTransitionDelayMs, StreamTypeFilter::ASYNC,
- makeStandbyCommands(false, false), false /*validatePositionIncrease*/);
+static const NamedCommandSequence kStandbyOutAsyncSeq =
+ std::make_tuple(std::string("Standby"), kAidlVersion1,
+ kStreamTransientStateTransitionDelayMs, StreamTypeFilter::ASYNC,
+ makeStandbyCommands(false, false), false /*validatePositionIncrease*/);
std::shared_ptr<StateSequence> makePauseCommands(bool isInput, bool isSync) {
using State = StreamDescriptor::State;
@@ -4735,14 +4798,15 @@
return std::make_shared<StateSequenceFollower>(std::move(d));
}
static const NamedCommandSequence kPauseInSeq =
- std::make_tuple(std::string("Pause"), 0, StreamTypeFilter::ANY,
+ std::make_tuple(std::string("Pause"), kAidlVersion1, 0, StreamTypeFilter::ANY,
makePauseCommands(true, false), false /*validatePositionIncrease*/);
static const NamedCommandSequence kPauseOutSyncSeq =
- std::make_tuple(std::string("Pause"), 0, StreamTypeFilter::SYNC,
+ std::make_tuple(std::string("Pause"), kAidlVersion1, 0, StreamTypeFilter::SYNC,
makePauseCommands(false, true), false /*validatePositionIncrease*/);
-static const NamedCommandSequence kPauseOutAsyncSeq = std::make_tuple(
- std::string("Pause"), kStreamTransientStateTransitionDelayMs, StreamTypeFilter::ASYNC,
- makePauseCommands(false, false), false /*validatePositionIncrease*/);
+static const NamedCommandSequence kPauseOutAsyncSeq =
+ std::make_tuple(std::string("Pause"), kAidlVersion1, kStreamTransientStateTransitionDelayMs,
+ StreamTypeFilter::ASYNC, makePauseCommands(false, false),
+ false /*validatePositionIncrease*/);
std::shared_ptr<StateSequence> makeFlushCommands(bool isInput, bool isSync) {
using State = StreamDescriptor::State;
@@ -4770,14 +4834,15 @@
return std::make_shared<StateSequenceFollower>(std::move(d));
}
static const NamedCommandSequence kFlushInSeq =
- std::make_tuple(std::string("Flush"), 0, StreamTypeFilter::ANY,
+ std::make_tuple(std::string("Flush"), kAidlVersion1, 0, StreamTypeFilter::ANY,
makeFlushCommands(true, false), false /*validatePositionIncrease*/);
static const NamedCommandSequence kFlushOutSyncSeq =
- std::make_tuple(std::string("Flush"), 0, StreamTypeFilter::SYNC,
+ std::make_tuple(std::string("Flush"), kAidlVersion1, 0, StreamTypeFilter::SYNC,
makeFlushCommands(false, true), false /*validatePositionIncrease*/);
-static const NamedCommandSequence kFlushOutAsyncSeq = std::make_tuple(
- std::string("Flush"), kStreamTransientStateTransitionDelayMs, StreamTypeFilter::ASYNC,
- makeFlushCommands(false, false), false /*validatePositionIncrease*/);
+static const NamedCommandSequence kFlushOutAsyncSeq =
+ std::make_tuple(std::string("Flush"), kAidlVersion1, kStreamTransientStateTransitionDelayMs,
+ StreamTypeFilter::ASYNC, makeFlushCommands(false, false),
+ false /*validatePositionIncrease*/);
std::shared_ptr<StateSequence> makeDrainPauseFlushOutCommands(bool isSync) {
using State = StreamDescriptor::State;
@@ -4797,13 +4862,13 @@
return std::make_shared<StateSequenceFollower>(std::move(d));
}
static const NamedCommandSequence kDrainPauseFlushOutSyncSeq =
- std::make_tuple(std::string("DrainPauseFlush"), kStreamTransientStateTransitionDelayMs,
- StreamTypeFilter::SYNC, makeDrainPauseFlushOutCommands(true),
- false /*validatePositionIncrease*/);
+ std::make_tuple(std::string("DrainPauseFlush"), kAidlVersion1,
+ kStreamTransientStateTransitionDelayMs, StreamTypeFilter::SYNC,
+ makeDrainPauseFlushOutCommands(true), false /*validatePositionIncrease*/);
static const NamedCommandSequence kDrainPauseFlushOutAsyncSeq =
- std::make_tuple(std::string("DrainPauseFlush"), kStreamTransientStateTransitionDelayMs,
- StreamTypeFilter::ASYNC, makeDrainPauseFlushOutCommands(false),
- false /*validatePositionIncrease*/);
+ std::make_tuple(std::string("DrainPauseFlush"), kAidlVersion1,
+ kStreamTransientStateTransitionDelayMs, StreamTypeFilter::ASYNC,
+ makeDrainPauseFlushOutCommands(false), false /*validatePositionIncrease*/);
// Note, this isn't the "official" enum printer, it is only used to make the test name suffix.
std::string PrintStreamFilterToString(StreamTypeFilter filter) {
@@ -4841,9 +4906,10 @@
AudioStreamIoOutTest, AudioStreamIoOut,
testing::Combine(testing::ValuesIn(android::getAidlHalInstanceNames(IModule::descriptor)),
testing::Values(kWriteSyncSeq, kWriteAsyncSeq, kWriteDrainAsyncSeq,
- kDrainOutSyncSeq, kDrainPauseOutSyncSeq,
- kDrainPauseOutAsyncSeq, kStandbyOutSyncSeq,
- kStandbyOutAsyncSeq,
+ kDrainOutSyncSeq, kDrainOutAsyncSeq,
+ kDrainEarlyOutAsyncSeq, kDrainPauseOutSyncSeq,
+ kDrainPauseOutAsyncSeq, kDrainEarlyPauseOutAsyncSeq,
+ kStandbyOutSyncSeq, kStandbyOutAsyncSeq,
kPauseOutSyncSeq, // kPauseOutAsyncSeq,
kFlushOutSyncSeq, kFlushOutAsyncSeq,
kDrainPauseFlushOutSyncSeq, kDrainPauseFlushOutAsyncSeq),
diff --git a/audio/aidl/vts/VtsHalBassBoostTargetTest.cpp b/audio/aidl/vts/VtsHalBassBoostTargetTest.cpp
index 5ce2a20..5a24be7 100644
--- a/audio/aidl/vts/VtsHalBassBoostTargetTest.cpp
+++ b/audio/aidl/vts/VtsHalBassBoostTargetTest.cpp
@@ -113,7 +113,6 @@
}
}
- static constexpr int kSamplingFrequency = 44100;
static constexpr int kDurationMilliSec = 720;
static constexpr int kInputSize = kSamplingFrequency * kDurationMilliSec / 1000;
long mInputFrameCount, mOutputFrameCount;
@@ -188,18 +187,6 @@
}
}
- // Generate multitone input between -1 to +1 using testFrequencies
- void generateMultiTone(const std::vector<int>& testFrequencies, std::vector<float>& input) {
- for (auto i = 0; i < kInputSize; i++) {
- input[i] = 0;
-
- for (size_t j = 0; j < testFrequencies.size(); j++) {
- input[i] += sin(2 * M_PI * testFrequencies[j] * i / kSamplingFrequency);
- }
- input[i] /= testFrequencies.size();
- }
- }
-
// Use FFT transform to convert the buffer to frequency domain
// Compute its magnitude at binOffsets
std::vector<float> calculateMagnitude(const std::vector<float>& buffer,
@@ -252,7 +239,8 @@
roundToFreqCenteredToFftBin(testFrequencies, binOffsets);
- generateMultiTone(testFrequencies, input);
+ // Generate multitone input
+ generateSineWave(testFrequencies, input);
inputMag = calculateMagnitude(input, binOffsets);
diff --git a/audio/aidl/vts/VtsHalEnvironmentalReverbTargetTest.cpp b/audio/aidl/vts/VtsHalEnvironmentalReverbTargetTest.cpp
index e31aae6..a29920e 100644
--- a/audio/aidl/vts/VtsHalEnvironmentalReverbTargetTest.cpp
+++ b/audio/aidl/vts/VtsHalEnvironmentalReverbTargetTest.cpp
@@ -224,13 +224,6 @@
output.size());
}
- void generateSineWaveInput(std::vector<float>& input) {
- int frequency = 1000;
- size_t kSamplingFrequency = 44100;
- for (size_t i = 0; i < input.size(); i++) {
- input[i] = sin(2 * M_PI * frequency * i / kSamplingFrequency);
- }
- }
using Maker = EnvironmentalReverb (*)(int);
static constexpr std::array<Maker, static_cast<int>(EnvironmentalReverb::bypass) + 1>
@@ -286,9 +279,9 @@
}
}
- static constexpr int kSamplingFrequency = 44100;
static constexpr int kDurationMilliSec = 500;
static constexpr int kBufferSize = kSamplingFrequency * kDurationMilliSec / 1000;
+ static constexpr int kInputFrequency = 1000;
int mStereoChannelCount =
getChannelCount(AudioChannelLayout::make<AudioChannelLayout::layoutMask>(
@@ -351,7 +344,7 @@
: EnvironmentalReverbHelper(std::get<DESCRIPTOR_INDEX>(GetParam())) {
std::tie(mTag, mParamValues) = std::get<TAG_VALUE_PAIR>(GetParam());
mInput.resize(kBufferSize);
- generateSineWaveInput(mInput);
+ generateSineWave(kInputFrequency, mInput);
}
void SetUp() override {
SKIP_TEST_IF_DATA_UNSUPPORTED(mDescriptor.common.flags);
@@ -441,7 +434,7 @@
TEST_P(EnvironmentalReverbMinimumParamTest, MinimumValueTest) {
std::vector<float> input(kBufferSize);
- generateSineWaveInput(input);
+ generateSineWave(kInputFrequency, input);
std::vector<float> output(kBufferSize);
setParameterAndProcess(input, output, mValue, mTag);
float energy = computeOutputEnergy(input, output);
@@ -477,7 +470,7 @@
: EnvironmentalReverbHelper(std::get<DESCRIPTOR_INDEX>(GetParam())) {
std::tie(mTag, mParamValues) = std::get<TAG_VALUE_PAIR>(GetParam());
mInput.resize(kBufferSize);
- generateSineWaveInput(mInput);
+ generateSineWave(kInputFrequency, mInput);
}
void SetUp() override {
SKIP_TEST_IF_DATA_UNSUPPORTED(mDescriptor.common.flags);
@@ -556,7 +549,7 @@
if (mIsInputMute) {
std::fill(mInput.begin(), mInput.end(), 0);
} else {
- generateSineWaveInput(mInput);
+ generateSineWave(kInputFrequency, mInput);
}
}
void SetUp() override {
diff --git a/audio/aidl/vts/VtsHalPresetReverbTargetTest.cpp b/audio/aidl/vts/VtsHalPresetReverbTargetTest.cpp
index 542f0d8..3ce9e53 100644
--- a/audio/aidl/vts/VtsHalPresetReverbTargetTest.cpp
+++ b/audio/aidl/vts/VtsHalPresetReverbTargetTest.cpp
@@ -81,7 +81,6 @@
<< "\ngetParam:" << getParam.toString();
}
- static constexpr int kSamplingFrequency = 44100;
static constexpr int kDurationMilliSec = 500;
static constexpr int kBufferSize = kSamplingFrequency * kDurationMilliSec / 1000;
int mStereoChannelCount =
@@ -133,7 +132,8 @@
public:
PresetReverbProcessTest() {
std::tie(mFactory, mDescriptor) = GetParam();
- generateSineWaveInput();
+ mInput.resize(kBufferSize);
+ generateSineWave(1000 /*Input Frequency*/, mInput);
}
void SetUp() override {
@@ -145,13 +145,6 @@
ASSERT_NO_FATAL_FAILURE(TearDownPresetReverb());
}
- void generateSineWaveInput() {
- int frequency = 1000;
- for (size_t i = 0; i < kBufferSize; i++) {
- mInput.push_back(sin(2 * M_PI * frequency * i / kSamplingFrequency));
- }
- }
-
bool isAuxiliary() {
return mDescriptor.common.flags.type ==
aidl::android::hardware::audio::effect::Flags::Type::AUXILIARY;
diff --git a/audio/aidl/vts/VtsHalVirtualizerTargetTest.cpp b/audio/aidl/vts/VtsHalVirtualizerTargetTest.cpp
index b449f3c..3021370 100644
--- a/audio/aidl/vts/VtsHalVirtualizerTargetTest.cpp
+++ b/audio/aidl/vts/VtsHalVirtualizerTargetTest.cpp
@@ -94,7 +94,6 @@
}
}
- static constexpr int kSamplingFrequency = 44100;
static constexpr int kDefaultChannelLayout = AudioChannelLayout::LAYOUT_STEREO;
static constexpr int kDurationMilliSec = 720;
static constexpr int kBufferSize = kSamplingFrequency * kDurationMilliSec / 1000;
@@ -164,10 +163,7 @@
if (mZeroInput) {
std::fill(buffer.begin(), buffer.end(), 0);
} else {
- int frequency = 100;
- for (size_t i = 0; i < buffer.size(); i++) {
- buffer[i] = sin(2 * M_PI * frequency * i / kSamplingFrequency);
- }
+ generateSineWave(1000 /*Input Frequency*/, buffer);
}
}
diff --git a/audio/aidl/vts/VtsHalVolumeTargetTest.cpp b/audio/aidl/vts/VtsHalVolumeTargetTest.cpp
index 4300801..b58c1c6 100644
--- a/audio/aidl/vts/VtsHalVolumeTargetTest.cpp
+++ b/audio/aidl/vts/VtsHalVolumeTargetTest.cpp
@@ -93,7 +93,6 @@
}
}
- static constexpr int kSamplingFrequency = 44100;
static constexpr int kDurationMilliSec = 720;
static constexpr int kBufferSize = kSamplingFrequency * kDurationMilliSec / 1000;
static constexpr int kMinLevel = -96;
@@ -163,7 +162,7 @@
mInputMag.resize(mTestFrequencies.size());
mBinOffsets.resize(mTestFrequencies.size());
roundToFreqCenteredToFftBin(mTestFrequencies, mBinOffsets, kBinWidth);
- generateMultiTone(mTestFrequencies, mInput, kSamplingFrequency);
+ generateSineWave(mTestFrequencies, mInput);
mInputMag = calculateMagnitude(mInput, mBinOffsets, kNPointFFT);
}
diff --git a/automotive/TEST_MAPPING b/automotive/TEST_MAPPING
index 483a85f..2b2f6b0 100644
--- a/automotive/TEST_MAPPING
+++ b/automotive/TEST_MAPPING
@@ -64,7 +64,82 @@
"name": "CarServiceTelemetryTest"
},
{
- "name": "CarServiceUnitTest"
+ "name": "CarServiceCarUnitTest"
+ },
+ {
+ "name": "CarServiceWifiUnitTest"
+ },
+ {
+ "name": "CarServiceWatchdogUnitTest"
+ },
+ {
+ "name": "CarServiceVmsUnitTest"
+ },
+ {
+ "name": "CarServiceUtilUnitTest"
+ },
+ {
+ "name": "CarServiceUserUnitTest"
+ },
+ {
+ "name": "CarServiceTelemetryUnitTest"
+ },
+ {
+ "name": "CarServiceSystemUiUnitTest"
+ },
+ {
+ "name": "CarServiceSystemInterfaceUnitTest"
+ },
+ {
+ "name": "CarServiceStorageMonitoringUnitTest"
+ },
+ {
+ "name": "CarServiceStatsUnitTest"
+ },
+ {
+ "name": "CarServiceRemoteAccessUnitTest"
+ },
+ {
+ "name": "CarServicePropertyUnitTest"
+ },
+ {
+ "name": "CarServicePowerUnitTest"
+ },
+ {
+ "name": "CarServicePmUnitTest"
+ },
+ {
+ "name": "CarServiceOsUnitTest"
+ },
+ {
+ "name": "CarServiceOemUnitTest"
+ },
+ {
+ "name": "CarServiceOccupantConnectionUnitTest"
+ },
+ {
+ "name": "CarServiceHalUnitTest"
+ },
+ {
+ "name": "CarServiceGarageModeUnitTest"
+ },
+ {
+ "name": "CarServiceEvsUnitTest"
+ },
+ {
+ "name": "CarServiceClusterUnitTest"
+ },
+ {
+ "name": "CarServiceBluetoothUnitTest"
+ },
+ {
+ "name": "CarServiceAudioUnitTest"
+ },
+ {
+ "name": "CarServiceAmUnitTest"
+ },
+ {
+ "name": "CarServiceAdminUnitTest"
},
{
"name": "CarServiceVmsTest"
diff --git a/automotive/audiocontrol/aidl/vts/VtsHalAudioControlTargetTest.cpp b/automotive/audiocontrol/aidl/vts/VtsHalAudioControlTargetTest.cpp
index 6e646a6..c01c0d6 100644
--- a/automotive/audiocontrol/aidl/vts/VtsHalAudioControlTargetTest.cpp
+++ b/automotive/audiocontrol/aidl/vts/VtsHalAudioControlTargetTest.cpp
@@ -125,11 +125,12 @@
}
std::set<std::string> contextInRoute;
for (const auto& context : entry.contextNames) {
- if (!contextInRoute.contains(ToString(context))) {
- continue;
+ std::string contextString = ToString(context);
+ if (contextInRoute.contains(contextString)) {
+ message = " Context " + contextString + " repeats for DeviceToContextEntry";
+ return false;
}
- message = " Context can not repeat for the same DeviceToContextEntry";
- return false;
+ groupDevices.insert(contextString);
}
audiomediacommon::AudioDeviceDescription description;
if (!testutils::getAudioPortDeviceDescriptor(entry.device, description)) {
diff --git a/automotive/can/1.0/default/libnetdevice/Android.bp b/automotive/can/1.0/default/libnetdevice/Android.bp
index affbeee..4131a65 100644
--- a/automotive/can/1.0/default/libnetdevice/Android.bp
+++ b/automotive/can/1.0/default/libnetdevice/Android.bp
@@ -23,11 +23,20 @@
default_applicable_licenses: ["hardware_interfaces_license"],
}
-cc_library_static {
- name: "android.hardware.automotive.can@libnetdevice",
- defaults: ["android.hardware.automotive.can@defaults"],
+cc_defaults {
+ name: "libnetdevice-common",
host_supported: true,
vendor_available: true,
+ cflags: [
+ "-Wall",
+ "-Wextra",
+ "-Werror",
+ "-DANDROID_BASE_UNIQUE_FD_DISABLE_IMPLICIT_CONVERSION",
+ ],
+ shared_libs: [
+ "libbase",
+ "libutils",
+ ],
srcs: [
"can.cpp",
"common.cpp",
@@ -41,3 +50,14 @@
"libnl++",
],
}
+
+// TODO: migrate to "libnetdevice" and remove
+cc_library_static {
+ name: "android.hardware.automotive.can@libnetdevice",
+ defaults: ["libnetdevice-common"],
+}
+
+cc_library_static {
+ name: "libnetdevice",
+ defaults: ["libnetdevice-common"],
+}
diff --git a/automotive/can/1.0/default/libnetdevice/include/libnetdevice/libnetdevice.h b/automotive/can/1.0/default/libnetdevice/include/libnetdevice/libnetdevice.h
index 75655d5..15ff491 100644
--- a/automotive/can/1.0/default/libnetdevice/include/libnetdevice/libnetdevice.h
+++ b/automotive/can/1.0/default/libnetdevice/include/libnetdevice/libnetdevice.h
@@ -128,7 +128,8 @@
* \param addr IPv4 address to set
* \return true in case of success, false otherwise
*/
-bool setAddr4(std::string_view ifname, std::string_view addr);
+bool setAddr4(std::string_view ifname, std::string_view addr,
+ std::optional<uint8_t> prefixlen = std::nullopt);
/**
* Add new IPv4 address to a given interface.
diff --git a/automotive/can/1.0/default/libnetdevice/libnetdevice.cpp b/automotive/can/1.0/default/libnetdevice/libnetdevice.cpp
index 1830633..9bb1a57 100644
--- a/automotive/can/1.0/default/libnetdevice/libnetdevice.cpp
+++ b/automotive/can/1.0/default/libnetdevice/libnetdevice.cpp
@@ -93,14 +93,31 @@
return addrn;
}
-bool setAddr4(std::string_view ifname, std::string_view addr) {
- auto ifr = ifreqs::fromName(ifname);
+static in_addr_t prefixLengthToIpv4Netmask(uint8_t prefixlen) {
+ in_addr_t zero = 0;
+ return htonl(~zero << (32 - prefixlen));
+}
- struct sockaddr_in* ifrAddr = reinterpret_cast<sockaddr_in*>(&ifr.ifr_addr);
+bool setAddr4(std::string_view ifname, std::string_view addr, std::optional<uint8_t> prefixlen) {
+ auto ifr = ifreqs::fromName(ifname);
+ auto ifrAddr = reinterpret_cast<sockaddr_in*>(&ifr.ifr_addr);
ifrAddr->sin_family = AF_INET;
ifrAddr->sin_addr.s_addr = inetAddr(addr);
+ if (!ifreqs::send(SIOCSIFADDR, ifr)) return false;
- return ifreqs::send(SIOCSIFADDR, ifr);
+ if (prefixlen.has_value()) {
+ if (*prefixlen < 0 || *prefixlen > 32) {
+ LOG(ERROR) << "Invalid prefix length: " << *prefixlen;
+ return false;
+ }
+ ifr = ifreqs::fromName(ifname);
+ auto ifrNetmask = reinterpret_cast<sockaddr_in*>(&ifr.ifr_netmask);
+ ifrNetmask->sin_family = AF_INET;
+ ifrNetmask->sin_addr.s_addr = prefixLengthToIpv4Netmask(*prefixlen);
+ if (!ifreqs::send(SIOCSIFNETMASK, ifr)) return false;
+ }
+
+ return true;
}
bool addAddr4(std::string_view ifname, std::string_view addr, uint8_t prefixlen) {
diff --git a/automotive/can/1.0/default/libnl++/Android.bp b/automotive/can/1.0/default/libnl++/Android.bp
index 5e3168a..ade4ae0 100644
--- a/automotive/can/1.0/default/libnl++/Android.bp
+++ b/automotive/can/1.0/default/libnl++/Android.bp
@@ -25,9 +25,18 @@
cc_library_static {
name: "libnl++",
- defaults: ["android.hardware.automotive.can@defaults"],
host_supported: true,
vendor_available: true,
+ cflags: [
+ "-Wall",
+ "-Wextra",
+ "-Werror",
+ "-DANDROID_BASE_UNIQUE_FD_DISABLE_IMPLICIT_CONVERSION",
+ ],
+ shared_libs: [
+ "libbase",
+ "libutils",
+ ],
srcs: [
"protocols/common/Empty.cpp",
"protocols/common/Error.cpp",
diff --git a/automotive/evs/aidl/Android.bp b/automotive/evs/aidl/Android.bp
index 75eb924..8983ae4 100644
--- a/automotive/evs/aidl/Android.bp
+++ b/automotive/evs/aidl/Android.bp
@@ -55,14 +55,14 @@
version: "1",
imports: [
"android.hardware.common-V2",
- "android.hardware.graphics.common-V5",
+ "android.hardware.graphics.common-V6",
],
},
{
version: "2",
imports: [
"android.hardware.common-V2",
- "android.hardware.graphics.common-V5",
+ "android.hardware.graphics.common-V6",
],
},
diff --git a/automotive/evs/aidl/impl/default/include/ConfigManager.h b/automotive/evs/aidl/impl/default/include/ConfigManager.h
index 37a17dc..f6ba2f2 100644
--- a/automotive/evs/aidl/impl/default/include/ConfigManager.h
+++ b/automotive/evs/aidl/impl/default/include/ConfigManager.h
@@ -50,6 +50,7 @@
class ConfigManager final {
public:
static std::unique_ptr<ConfigManager> Create();
+ static std::unique_ptr<ConfigManager> Create(const std::string path);
ConfigManager(const ConfigManager&) = delete;
ConfigManager& operator=(const ConfigManager&) = delete;
@@ -65,6 +66,15 @@
UNKNOWN = std::numeric_limits<std::underlying_type_t<DeviceType>>::max(),
};
+ enum class PixelFormat : std::int32_t {
+ NV12 = 0,
+ NV21 = 1,
+ YV12 = 2,
+ I420 = 3,
+
+ UNKNOWN = std::numeric_limits<std::underlying_type_t<DeviceType>>::max(),
+ };
+
CameraInfo() : characteristics(nullptr) {}
virtual ~CameraInfo();
@@ -82,6 +92,8 @@
static DeviceType deviceTypeFromSV(const std::string_view sv);
+ static PixelFormat pixelFormatFromSV(const std::string_view sv);
+
DeviceType deviceType{DeviceType::NONE};
/*
@@ -105,6 +117,11 @@
/* Camera module characteristics */
camera_metadata_t* characteristics;
+
+ /* Format of media in a given media container. This field is effective
+ * only for DeviceType::VIDEO.
+ */
+ PixelFormat format;
};
class CameraGroupInfo : public CameraInfo {
@@ -272,7 +289,7 @@
* @return bool
* True if it completes parsing a file successfully.
*/
- bool readConfigDataFromXML() noexcept;
+ bool readConfigDataFromXML(const std::string path) noexcept;
/*
* read the information of the vehicle
diff --git a/automotive/evs/aidl/impl/default/include/EvsCameraBase.h b/automotive/evs/aidl/impl/default/include/EvsCameraBase.h
index c3e9dfc..d9180e8 100644
--- a/automotive/evs/aidl/impl/default/include/EvsCameraBase.h
+++ b/automotive/evs/aidl/impl/default/include/EvsCameraBase.h
@@ -30,6 +30,7 @@
~EvsCameraBase() override = default;
+ virtual std::string getId() = 0;
virtual void shutdown() = 0;
protected:
diff --git a/automotive/evs/aidl/impl/default/include/EvsMockCamera.h b/automotive/evs/aidl/impl/default/include/EvsMockCamera.h
index cd68532..67de8dc 100644
--- a/automotive/evs/aidl/impl/default/include/EvsMockCamera.h
+++ b/automotive/evs/aidl/impl/default/include/EvsMockCamera.h
@@ -65,7 +65,9 @@
ndk::ScopedAStatus setPrimaryClient() override;
ndk::ScopedAStatus unsetPrimaryClient() override;
- const evs::CameraDesc& getDesc() { return mDescription; }
+ std::string getId() override { return mDescription.id; }
+
+ const CameraDesc& getDesc() { return mDescription; }
static std::shared_ptr<EvsMockCamera> Create(const char* deviceName);
static std::shared_ptr<EvsMockCamera> Create(
diff --git a/automotive/evs/aidl/impl/default/include/EvsVideoEmulatedCamera.h b/automotive/evs/aidl/impl/default/include/EvsVideoEmulatedCamera.h
index 9d1610a..dc70a43 100644
--- a/automotive/evs/aidl/impl/default/include/EvsVideoEmulatedCamera.h
+++ b/automotive/evs/aidl/impl/default/include/EvsVideoEmulatedCamera.h
@@ -27,7 +27,6 @@
#include <aidl/android/hardware/automotive/evs/ParameterRange.h>
#include <aidl/android/hardware/automotive/evs/Stream.h>
#include <media/NdkMediaExtractor.h>
-
#include <ui/GraphicBuffer.h>
#include <cstdint>
@@ -70,6 +69,8 @@
// Methods from EvsCameraBase follow.
void shutdown() override;
+ std::string getId() override { return mDescription.id; }
+
const evs::CameraDesc& getDesc() { return mDescription; }
static std::shared_ptr<EvsVideoEmulatedCamera> Create(const char* deviceName);
@@ -117,6 +118,10 @@
bool postVideoStreamStop_locked(ndk::ScopedAStatus& status,
std::unique_lock<std::mutex>& lck) override;
+ int (*mFillBuffer)(const uint8_t* src_y, int src_stride_y, const uint8_t* src_u,
+ int src_stride_u, const uint8_t* src_v, int src_stride_v, uint8_t* dst_argb,
+ int dst_stride_argb, int width, int height);
+
// The properties of this camera.
CameraDesc mDescription = {};
@@ -149,6 +154,10 @@
uint64_t mUsage = 0;
// Bytes per line in the buffers
uint32_t mStride = 0;
+ // Bytes per line in the output buffer
+ uint32_t mDstStride = 0;
+ // Bytes per line of U/V plane
+ uint32_t mUvStride = 0;
// Camera parameters.
std::unordered_map<CameraParam, std::shared_ptr<CameraParameterDesc>> mParams;
diff --git a/automotive/evs/aidl/impl/default/src/ConfigManager.cpp b/automotive/evs/aidl/impl/default/src/ConfigManager.cpp
index d8961d0..eea80f4 100644
--- a/automotive/evs/aidl/impl/default/src/ConfigManager.cpp
+++ b/automotive/evs/aidl/impl/default/src/ConfigManager.cpp
@@ -52,6 +52,25 @@
return search == nameToType.end() ? DeviceType::UNKNOWN : search->second;
}
+ConfigManager::CameraInfo::PixelFormat ConfigManager::CameraInfo::pixelFormatFromSV(
+ const std::string_view sv) {
+ using namespace std::string_view_literals;
+ static const std::unordered_map<std::string_view, PixelFormat> nameToFormat = {
+ // Full resolution Y plane followed by 2x2 subsampled U/V
+ // interleaved plane.
+ {"NV12"sv, PixelFormat::NV12},
+ // Full resolution Y plane followed by 2x2 subsampled V/U
+ // interleaved plane.
+ {"NV21"sv, PixelFormat::NV21},
+ // Full resolution Y plane followed by 2x2 subsampled V plane and then U plane.
+ {"YV12"sv, PixelFormat::YV12},
+ // Full resolution Y plane followed by 2x2 subsampled U plane and then V plane.
+ {"I420"sv, PixelFormat::I420},
+ };
+ const auto search = nameToFormat.find(sv);
+ return search == nameToFormat.end() ? PixelFormat::UNKNOWN : search->second;
+}
+
void ConfigManager::printElementNames(const XMLElement* rootElem, const std::string& prefix) const {
const XMLElement* curElem = rootElem;
@@ -144,6 +163,10 @@
aCamera->deviceType = CameraInfo::deviceTypeFromSV(typeAttr->Value());
}
+ if (const auto formatAttr = aDeviceElem->FindAttribute("format")) {
+ aCamera->format = CameraInfo::pixelFormatFromSV(formatAttr->Value());
+ }
+
/* size information to allocate camera_metadata_t */
size_t totalEntries = 0;
size_t totalDataSize = 0;
@@ -474,19 +497,16 @@
return;
}
-bool ConfigManager::readConfigDataFromXML() noexcept {
+bool ConfigManager::readConfigDataFromXML(const std::string path) noexcept {
XMLDocument xmlDoc;
const int64_t parsingStart = android::elapsedRealtimeNano();
/* load and parse a configuration file */
- xmlDoc.LoadFile(sConfigOverridePath.data());
+ xmlDoc.LoadFile(path.c_str());
if (xmlDoc.ErrorID() != tinyxml2::XML_SUCCESS) {
- xmlDoc.LoadFile(sConfigDefaultPath.data());
- if (xmlDoc.ErrorID() != tinyxml2::XML_SUCCESS) {
- LOG(ERROR) << "Failed to load and/or parse a configuration file, " << xmlDoc.ErrorStr();
- return false;
- }
+ LOG(ERROR) << "Failed to load and/or parse a configuration file, " << xmlDoc.ErrorStr();
+ return false;
}
/* retrieve the root element */
@@ -644,8 +664,7 @@
p += count * sizeof(camera_metadata_rational_t);
break;
default:
- LOG(WARNING) << "Type " << type << " is unknown; "
- << "data may be corrupted.";
+ LOG(WARNING) << "Type " << type << " is unknown; " << "data may be corrupted.";
break;
}
}
@@ -746,8 +765,7 @@
p += count * sizeof(camera_metadata_rational_t);
break;
default:
- LOG(WARNING) << "Type " << type << " is unknown; "
- << "data may be corrupted.";
+ LOG(WARNING) << "Type " << type << " is unknown; " << "data may be corrupted.";
break;
}
}
@@ -958,6 +976,16 @@
}
std::unique_ptr<ConfigManager> ConfigManager::Create() {
+ std::unique_ptr<ConfigManager> mgr = Create(std::string(sConfigOverridePath));
+ if (!mgr) {
+ LOG(DEBUG) << "A configuration override file does not exist. Use a default file instead.";
+ mgr = Create(std::string((sConfigDefaultPath)));
+ }
+
+ return mgr;
+}
+
+std::unique_ptr<ConfigManager> ConfigManager::Create(const std::string path) {
std::unique_ptr<ConfigManager> cfgMgr(new ConfigManager());
/*
@@ -968,7 +996,7 @@
* to the filesystem and construct CameraInfo instead; this was
* evaluated as 10x faster.
*/
- if (!cfgMgr->readConfigDataFromXML()) {
+ if (!cfgMgr->readConfigDataFromXML(path)) {
return nullptr;
} else {
return cfgMgr;
diff --git a/automotive/evs/aidl/impl/default/src/EvsCamera.cpp b/automotive/evs/aidl/impl/default/src/EvsCamera.cpp
index 005c71f..c28f86f 100644
--- a/automotive/evs/aidl/impl/default/src/EvsCamera.cpp
+++ b/automotive/evs/aidl/impl/default/src/EvsCamera.cpp
@@ -205,7 +205,8 @@
}
if ((!preVideoStreamStop_locked(status, lck) || !stopVideoStreamImpl_locked(status, lck) ||
- !postVideoStreamStop_locked(status, lck)) && !status.isOk()) {
+ !postVideoStreamStop_locked(status, lck)) &&
+ !status.isOk()) {
needShutdown = true;
}
}
diff --git a/automotive/evs/aidl/impl/default/src/EvsVideoEmulatedCamera.cpp b/automotive/evs/aidl/impl/default/src/EvsVideoEmulatedCamera.cpp
index 480c28d..7574a34 100644
--- a/automotive/evs/aidl/impl/default/src/EvsVideoEmulatedCamera.cpp
+++ b/automotive/evs/aidl/impl/default/src/EvsVideoEmulatedCamera.cpp
@@ -26,6 +26,7 @@
#include <utils/SystemClock.h>
#include <fcntl.h>
+#include <libyuv.h>
#include <sys/types.h>
#include <unistd.h>
@@ -35,12 +36,45 @@
#include <tuple>
#include <utility>
+// Uncomment below line to dump decoded frames.
+// #define DUMP_FRAMES (1)
+
namespace aidl::android::hardware::automotive::evs::implementation {
namespace {
+
struct FormatDeleter {
void operator()(AMediaFormat* format) const { AMediaFormat_delete(format); }
};
+
+int fillRGBAFromNv12(const uint8_t* src_y, int src_stride_y, const uint8_t* src_uv,
+ int src_stride_uv, const uint8_t*, int, uint8_t* dst_abgr, int dst_stride_abgr,
+ int width, int height) {
+ return libyuv::NV12ToABGR(src_y, src_stride_y, src_uv, src_stride_uv, dst_abgr, dst_stride_abgr,
+ width, height);
+}
+
+int fillRGBAFromNv21(const uint8_t* src_y, int src_stride_y, const uint8_t* src_vu,
+ int src_stride_vu, const uint8_t*, int, uint8_t* dst_abgr, int dst_stride_abgr,
+ int width, int height) {
+ return libyuv::NV21ToABGR(src_y, src_stride_y, src_vu, src_stride_vu, dst_abgr, dst_stride_abgr,
+ width, height);
+}
+
+int fillRGBAFromYv12(const uint8_t* src_y, int src_stride_y, const uint8_t* src_u, int src_stride_u,
+ const uint8_t* src_v, int src_stride_v, uint8_t* dst_abgr, int dst_stride_abgr,
+ int width, int height) {
+ return libyuv::I420ToABGR(src_y, src_stride_y, src_u, src_stride_u, src_v, src_stride_v,
+ dst_abgr, dst_stride_abgr, width, height);
+}
+
+int fillRGBAFromI420(const uint8_t* src_y, int src_stride_y, const uint8_t* src_u, int src_stride_u,
+ const uint8_t* src_v, int src_stride_v, uint8_t* dst_abgr, int dst_stride_abgr,
+ int width, int height) {
+ return libyuv::I420ToABGR(src_y, src_stride_y, src_u, src_stride_u, src_v, src_stride_v,
+ dst_abgr, dst_stride_abgr, width, height);
+}
+
} // namespace
EvsVideoEmulatedCamera::EvsVideoEmulatedCamera(Sigil, const char* deviceName,
@@ -123,7 +157,7 @@
mDescription.vendorFlags = 0xFFFFFFFF; // Arbitrary test value
mUsage = GRALLOC_USAGE_HW_TEXTURE | GRALLOC_USAGE_HW_CAMERA_WRITE |
GRALLOC_USAGE_SW_READ_RARELY | GRALLOC_USAGE_SW_WRITE_RARELY;
- mFormat = HAL_PIXEL_FORMAT_YCBCR_420_888;
+ mFormat = HAL_PIXEL_FORMAT_RGBA_8888;
AMediaFormat_setInt32(format.get(), AMEDIAFORMAT_KEY_COLOR_FORMAT, COLOR_FormatYUV420Flexible);
{
const media_status_t status =
@@ -137,6 +171,30 @@
format.reset(AMediaCodec_getOutputFormat(mVideoCodec.get()));
AMediaFormat_getInt32(format.get(), AMEDIAFORMAT_KEY_WIDTH, &mWidth);
AMediaFormat_getInt32(format.get(), AMEDIAFORMAT_KEY_HEIGHT, &mHeight);
+
+ switch (mCameraInfo->format) {
+ default:
+ case ConfigManager::CameraInfo::PixelFormat::NV12:
+ mFillBuffer = fillRGBAFromNv12;
+ mUvStride = mWidth;
+ mDstStride = mWidth * 4;
+ break;
+ case ConfigManager::CameraInfo::PixelFormat::NV21:
+ mFillBuffer = fillRGBAFromNv21;
+ mUvStride = mWidth;
+ mDstStride = mWidth * 4;
+ break;
+ case ConfigManager::CameraInfo::PixelFormat::YV12:
+ mFillBuffer = fillRGBAFromYv12;
+ mUvStride = mWidth / 2;
+ mDstStride = mWidth * 4;
+ break;
+ case ConfigManager::CameraInfo::PixelFormat::I420:
+ mFillBuffer = fillRGBAFromI420;
+ mUvStride = mWidth / 2;
+ mDstStride = mWidth * 4;
+ break;
+ }
return true;
}
@@ -190,6 +248,28 @@
uint8_t* const codecOutputBuffer =
AMediaCodec_getOutputBuffer(mVideoCodec.get(), index, &decodedOutSize) + info.offset;
+ int color_format = 0;
+ const auto outFormat = AMediaCodec_getOutputFormat(mVideoCodec.get());
+ if (!AMediaFormat_getInt32(outFormat, AMEDIAFORMAT_KEY_COLOR_FORMAT, &color_format)) {
+ LOG(ERROR) << "Failed to get the color format.";
+ return;
+ }
+
+ int stride = 0;
+ if (!AMediaFormat_getInt32(outFormat, AMEDIAFORMAT_KEY_STRIDE, &stride)) {
+ LOG(WARNING) << "Cannot find stride in format. Set as frame width.";
+ stride = mWidth;
+ }
+
+ int slice_height = 0;
+ if (!AMediaFormat_getInt32(outFormat, AMEDIAFORMAT_KEY_SLICE_HEIGHT, &slice_height)) {
+ LOG(WARNING) << "Cannot find slice-height in format. Set as frame height.";
+ slice_height = mHeight;
+ }
+
+ LOG(DEBUG) << "COLOR FORMAT: " << color_format << " stride: " << stride
+ << " height: " << slice_height;
+
std::size_t renderBufferId = static_cast<std::size_t>(-1);
buffer_handle_t renderBufferHandle = nullptr;
{
@@ -200,7 +280,7 @@
std::tie(renderBufferId, renderBufferHandle) = useBuffer_unsafe();
}
if (!renderBufferHandle) {
- LOG(ERROR) << __func__ << ": Camera failed to get an available render buffer.";
+ LOG(DEBUG) << __func__ << ": Camera failed to get an available render buffer.";
return;
}
std::vector<BufferDesc> renderBufferDescs;
@@ -236,19 +316,51 @@
return;
}
- std::size_t ySize = mHeight * mStride;
+ // Decoded output is in YUV4:2:0.
+ std::size_t ySize = mHeight * mWidth;
std::size_t uvSize = ySize / 4;
- std::memcpy(pixels, codecOutputBuffer, ySize);
- pixels += ySize;
-
uint8_t* u_head = codecOutputBuffer + ySize;
uint8_t* v_head = u_head + uvSize;
- for (size_t i = 0; i < uvSize; ++i) {
- *(pixels++) = *(u_head++);
- *(pixels++) = *(v_head++);
+#if DUMP_FRAMES
+ // TODO: We may want to keep this "dump" option.
+ static int dumpCount = 0;
+ static bool dumpData = ++dumpCount < 10;
+ if (dumpData) {
+ std::string path = "/data/vendor/dump/";
+ path += "dump_" + std::to_string(dumpCount) + ".bin";
+
+ ::android::base::unique_fd fd(
+ open(path.data(), O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP));
+ if (fd < 0) {
+ LOG(ERROR) << "Failed to open " << path;
+ } else {
+ auto len = write(fd.get(), codecOutputBuffer, info.size);
+ LOG(ERROR) << "Write " << len << " to " << path;
+ }
}
+#endif
+ if (auto result = mFillBuffer(codecOutputBuffer, mWidth, u_head, mUvStride, v_head, mUvStride,
+ pixels, mDstStride, mWidth, mHeight);
+ result != 0) {
+ LOG(ERROR) << "Failed to convert I420 to BGRA";
+ }
+#if DUMP_FRAMES
+ else if (dumpData) {
+ std::string path = "/data/vendor/dump/";
+ path += "dump_" + std::to_string(dumpCount) + "_rgba.bin";
+
+ ::android::base::unique_fd fd(
+ open(path.data(), O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP));
+ if (fd < 0) {
+ LOG(ERROR) << "Failed to open " << path;
+ } else {
+ auto len = write(fd.get(), pixels, mStride * mHeight * 4);
+ LOG(ERROR) << "Write " << len << " to " << path;
+ }
+ }
+#endif
// Release our output buffer
mapper.unlock(renderBufferHandle);
@@ -332,8 +444,8 @@
::android::status_t EvsVideoEmulatedCamera::allocateOneFrame(buffer_handle_t* handle) {
static auto& alloc = ::android::GraphicBufferAllocator::get();
unsigned pixelsPerLine = 0;
- const auto result = alloc.allocate(mWidth, mHeight, mFormat, 1, mUsage, handle, &pixelsPerLine,
- 0, "EvsVideoEmulatedCamera");
+ const auto result = alloc.allocate(mWidth, mHeight, HAL_PIXEL_FORMAT_RGBA_8888, 1, mUsage,
+ handle, &pixelsPerLine, 0, "EvsVideoEmulatedCamera");
if (mStride == 0) {
// Gralloc defines stride in terms of pixels per line
mStride = pixelsPerLine;
@@ -350,7 +462,7 @@
if (auto status = AMediaCodec_start(mVideoCodec.get()); status != AMEDIA_OK) {
LOG(INFO) << __func__ << ": Received error in starting decoder. "
- << "Trying again after resetting this emulated device.";
+ << "Trying again after resetting this emulated device.";
if (!initializeMediaCodec()) {
LOG(ERROR) << __func__ << ": Failed to re-configure the media codec.";
@@ -361,7 +473,7 @@
AMEDIAEXTRACTOR_SEEK_CLOSEST_SYNC);
AMediaCodec_flush(mVideoCodec.get());
- if(auto status = AMediaCodec_start(mVideoCodec.get()); status != AMEDIA_OK) {
+ if (auto status = AMediaCodec_start(mVideoCodec.get()); status != AMEDIA_OK) {
LOG(ERROR) << __func__ << ": Received error again in starting decoder. "
<< "Error code: " << status;
return false;
@@ -389,7 +501,9 @@
return false;
}
- EvsEventDesc event = { .aType = EvsEventType::STREAM_STOPPED, };
+ EvsEventDesc event = {
+ .aType = EvsEventType::STREAM_STOPPED,
+ };
if (auto result = mStream->notify(event); !result.isOk()) {
LOG(WARNING) << "Failed to notify the end of the stream.";
}
diff --git a/automotive/evs/aidl/impl/default/tests/EvsCameraBufferTest.cpp b/automotive/evs/aidl/impl/default/tests/EvsCameraBufferTest.cpp
index 8b4676e..ce0e776 100644
--- a/automotive/evs/aidl/impl/default/tests/EvsCameraBufferTest.cpp
+++ b/automotive/evs/aidl/impl/default/tests/EvsCameraBufferTest.cpp
@@ -92,6 +92,7 @@
(override));
MOCK_METHOD(bool, stopVideoStreamImpl_locked,
(ndk::ScopedAStatus & status, std::unique_lock<std::mutex>& lck), (override));
+ MOCK_METHOD(std::string, getId, (), (override));
};
TEST(EvsCameraBufferTest, ChangeBufferPoolSize) {
diff --git a/automotive/evs/aidl/impl/default/tests/EvsCameraStateTest.cpp b/automotive/evs/aidl/impl/default/tests/EvsCameraStateTest.cpp
index 1925c79..c517e34 100644
--- a/automotive/evs/aidl/impl/default/tests/EvsCameraStateTest.cpp
+++ b/automotive/evs/aidl/impl/default/tests/EvsCameraStateTest.cpp
@@ -141,6 +141,7 @@
(override));
MOCK_METHOD(::ndk::ScopedAStatus, setPrimaryClient, (), (override));
MOCK_METHOD(::ndk::ScopedAStatus, unsetPrimaryClient, (), (override));
+ MOCK_METHOD(std::string, getId, (), (override));
bool mStreamStarted = false;
bool mStreamStopped = false;
@@ -160,7 +161,7 @@
MOCK_METHOD(::ndk::ScopedAStatus, notify,
(const ::aidl::android::hardware::automotive::evs::EvsEventDesc& in_event),
(override));
- MOCK_METHOD(::ndk::ScopedAStatus, getInterfaceVersion, (int32_t * _aidl_return), (override));
+ MOCK_METHOD(::ndk::ScopedAStatus, getInterfaceVersion, (int32_t* _aidl_return), (override));
MOCK_METHOD(::ndk::ScopedAStatus, getInterfaceHash, (std::string * _aidl_return), (override));
};
diff --git a/automotive/vehicle/TEST_MAPPING b/automotive/vehicle/TEST_MAPPING
index d848774..56bc047 100644
--- a/automotive/vehicle/TEST_MAPPING
+++ b/automotive/vehicle/TEST_MAPPING
@@ -48,12 +48,7 @@
"name": "GRPCVehicleHardwareUnitTest"
},
{
- "name": "CarServiceUnitTest",
- "options" : [
- {
- "include-filter": "com.android.car.hal.fakevhal.FakeVehicleStubUnitTest"
- }
- ]
+ "name": "CarServiceHalUnitTest"
},
{
"name": "VehicleHalProtoMessageConverterTest"
diff --git a/automotive/vehicle/aidl/Android.bp b/automotive/vehicle/aidl/Android.bp
index ce9e7a1..4b2d2b8 100644
--- a/automotive/vehicle/aidl/Android.bp
+++ b/automotive/vehicle/aidl/Android.bp
@@ -27,7 +27,7 @@
srcs: [
"android/hardware/automotive/vehicle/*.aidl",
],
- frozen: true,
+ frozen: false,
stability: "vintf",
backend: {
cpp: {
diff --git a/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/HasSupportedValueInfo.aidl b/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/HasSupportedValueInfo.aidl
new file mode 100644
index 0000000..e9633cc
--- /dev/null
+++ b/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/HasSupportedValueInfo.aidl
@@ -0,0 +1,40 @@
+/*
+ * 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.automotive.vehicle;
+@JavaDerive(equals=true, toString=true) @RustDerive(Clone=true) @VintfStability
+parcelable HasSupportedValueInfo {
+ boolean hasMinSupportedValue;
+ boolean hasMaxSupportedValue;
+ boolean hasSupportedValuesList;
+}
diff --git a/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/IVehicle.aidl b/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/IVehicle.aidl
index b5f62aa..ee58416 100644
--- a/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/IVehicle.aidl
+++ b/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/IVehicle.aidl
@@ -41,6 +41,10 @@
void subscribe(in android.hardware.automotive.vehicle.IVehicleCallback callback, in android.hardware.automotive.vehicle.SubscribeOptions[] options, int maxSharedMemoryFileCount);
void unsubscribe(in android.hardware.automotive.vehicle.IVehicleCallback callback, in int[] propIds);
void returnSharedMemory(in android.hardware.automotive.vehicle.IVehicleCallback callback, long sharedMemoryId);
+ android.hardware.automotive.vehicle.SupportedValuesListResults getSupportedValuesLists(in List<android.hardware.automotive.vehicle.PropIdAreaId> propIdAreaIds);
+ android.hardware.automotive.vehicle.MinMaxSupportedValueResults getMinMaxSupportedValue(in List<android.hardware.automotive.vehicle.PropIdAreaId> propIdAreaIds);
+ void registerSupportedValueChangeCallback(in android.hardware.automotive.vehicle.IVehicleCallback callback, in List<android.hardware.automotive.vehicle.PropIdAreaId> propIdAreaIds);
+ void unregisterSupportedValueChangeCallback(in android.hardware.automotive.vehicle.IVehicleCallback callback, in List<android.hardware.automotive.vehicle.PropIdAreaId> propIdAreaIds);
const long INVALID_MEMORY_ID = 0;
const int MAX_SHARED_MEMORY_FILES_PER_CLIENT = 3;
}
diff --git a/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/IVehicleCallback.aidl b/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/IVehicleCallback.aidl
index 2c5a333..50a8e76 100644
--- a/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/IVehicleCallback.aidl
+++ b/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/IVehicleCallback.aidl
@@ -38,4 +38,5 @@
oneway void onSetValues(in android.hardware.automotive.vehicle.SetValueResults responses);
oneway void onPropertyEvent(in android.hardware.automotive.vehicle.VehiclePropValues propValues, int sharedMemoryFileCount);
oneway void onPropertySetError(in android.hardware.automotive.vehicle.VehiclePropErrors errors);
+ oneway void onSupportedValueChange(in List<android.hardware.automotive.vehicle.PropIdAreaId> propIdAreaIds);
}
diff --git a/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/MinMaxSupportedValueResult.aidl b/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/MinMaxSupportedValueResult.aidl
new file mode 100644
index 0000000..a004b79
--- /dev/null
+++ b/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/MinMaxSupportedValueResult.aidl
@@ -0,0 +1,40 @@
+/*
+ * 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.automotive.vehicle;
+@JavaDerive(equals=true, toString=true) @RustDerive(Clone=true) @VintfStability
+parcelable MinMaxSupportedValueResult {
+ android.hardware.automotive.vehicle.StatusCode status = android.hardware.automotive.vehicle.StatusCode.OK;
+ @nullable android.hardware.automotive.vehicle.RawPropValues minSupportedValue;
+ @nullable android.hardware.automotive.vehicle.RawPropValues maxSupportedValue;
+}
diff --git a/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/MinMaxSupportedValueResults.aidl b/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/MinMaxSupportedValueResults.aidl
new file mode 100644
index 0000000..914d9c6
--- /dev/null
+++ b/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/MinMaxSupportedValueResults.aidl
@@ -0,0 +1,39 @@
+/*
+ * 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.automotive.vehicle;
+@JavaDerive(equals=true, toString=true) @VintfStability
+parcelable MinMaxSupportedValueResults {
+ android.hardware.automotive.vehicle.MinMaxSupportedValueResult[] payloads;
+ @nullable ParcelFileDescriptor sharedMemoryFd;
+}
diff --git a/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/PropIdAreaId.aidl b/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/PropIdAreaId.aidl
new file mode 100644
index 0000000..83e9c15
--- /dev/null
+++ b/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/PropIdAreaId.aidl
@@ -0,0 +1,39 @@
+/*
+ * 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.automotive.vehicle;
+@JavaDerive(equals=true, toString=true) @RustDerive(Clone=true) @VintfStability
+parcelable PropIdAreaId {
+ int propId;
+ int areaId;
+}
diff --git a/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/SupportedValuesListResult.aidl b/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/SupportedValuesListResult.aidl
new file mode 100644
index 0000000..f348dcb
--- /dev/null
+++ b/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/SupportedValuesListResult.aidl
@@ -0,0 +1,39 @@
+/*
+ * 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.automotive.vehicle;
+@JavaDerive(equals=true, toString=true) @RustDerive(Clone=true) @VintfStability
+parcelable SupportedValuesListResult {
+ android.hardware.automotive.vehicle.StatusCode status = android.hardware.automotive.vehicle.StatusCode.OK;
+ @nullable List<android.hardware.automotive.vehicle.RawPropValues> supportedValuesList;
+}
diff --git a/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/SupportedValuesListResults.aidl b/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/SupportedValuesListResults.aidl
new file mode 100644
index 0000000..08af47c
--- /dev/null
+++ b/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/SupportedValuesListResults.aidl
@@ -0,0 +1,39 @@
+/*
+ * 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.automotive.vehicle;
+@JavaDerive(equals=true, toString=true) @VintfStability
+parcelable SupportedValuesListResults {
+ android.hardware.automotive.vehicle.SupportedValuesListResult[] payloads;
+ @nullable ParcelFileDescriptor sharedMemoryFd;
+}
diff --git a/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/ValueRange.aidl b/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/ValueRange.aidl
new file mode 100644
index 0000000..077652b
--- /dev/null
+++ b/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/ValueRange.aidl
@@ -0,0 +1,40 @@
+/*
+ * 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.automotive.vehicle;
+@JavaDerive(equals=true, toString=true) @RustDerive(Clone=true) @VintfStability
+parcelable ValueRange {
+ @nullable android.hardware.automotive.vehicle.RawPropValues minValue;
+ @nullable android.hardware.automotive.vehicle.RawPropValues maxValue;
+ @nullable List<android.hardware.automotive.vehicle.RawPropValues> supportedValues;
+}
diff --git a/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/VehicleAreaConfig.aidl b/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/VehicleAreaConfig.aidl
index eb3028e..465d9d4 100644
--- a/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/VehicleAreaConfig.aidl
+++ b/automotive/vehicle/aidl/aidl_api/android.hardware.automotive.vehicle/current/android/hardware/automotive/vehicle/VehicleAreaConfig.aidl
@@ -44,4 +44,5 @@
@nullable long[] supportedEnumValues;
android.hardware.automotive.vehicle.VehiclePropertyAccess access = android.hardware.automotive.vehicle.VehiclePropertyAccess.NONE;
boolean supportVariableUpdateRate;
+ @nullable android.hardware.automotive.vehicle.HasSupportedValueInfo hasSupportedValueInfo;
}
diff --git a/automotive/vehicle/aidl/android/hardware/automotive/vehicle/HasSupportedValueInfo.aidl b/automotive/vehicle/aidl/android/hardware/automotive/vehicle/HasSupportedValueInfo.aidl
new file mode 100644
index 0000000..991631b
--- /dev/null
+++ b/automotive/vehicle/aidl/android/hardware/automotive/vehicle/HasSupportedValueInfo.aidl
@@ -0,0 +1,84 @@
+/*
+ * 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.automotive.vehicle;
+
+/**
+ * Whether the [propId, areaId] has min/max supported value or supported values
+ * list specified.
+ */
+@VintfStability
+@JavaDerive(equals=true, toString=true)
+@RustDerive(Clone=true)
+parcelable HasSupportedValueInfo {
+ /**
+ * Whether [propId, areaId] has min supported value specified.
+ *
+ * If this is {@code true}, the hardware specifies a min supported value.
+ * If {@code MinMaxSupportedValueResult}'s {@code status} is
+ * {@code StatusCode.OK}, its {@code minSupportedValue} must not be
+ * {@code null}.
+ *
+ * If this is {@code false}, {@code minSupportedValue} must be {@code null}.
+ *
+ * Unless otherwise specified, this field is set to {@code false} for any
+ * properties whose type is not int32, int64 or float.
+ *
+ * For certain properties, e.g. {@code EV_BRAKE_REGENERATION_LEVEL}, this
+ * must always be {@code true}. Check {@code VehicleProperty}
+ * documentation.
+ */
+ boolean hasMinSupportedValue;
+
+ /**
+ * Whether [propId, areaId] has max supported value specified.
+ *
+ * If this is {@code true}, the hardware specifies a max supported value.
+ * If {@code MinMaxSupportedValueResult}'s {@code status} is
+ * {@code StatusCode.OK}, its {@code maxSupportedValue} must not be
+ * {@code null}.
+ *
+ * If this is {@code false}, {@code maxSupportedValue} must be {@code null}.
+ *
+ * Unless otherwise specified, this field is set to {@code false} for any
+ * properties whose type is not int32, int64 or float.
+ *
+ * For certain properties, e.g. {@code EV_BRAKE_REGENERATION_LEVEL}, this
+ * must always be {@code true}. Check {@code VehicleProperty}
+ * documentation.
+ */
+ boolean hasMaxSupportedValue;
+
+ /**
+ * Whether [propId, areaId] has supported values list specified.
+ *
+ * If this is {@code true}, it means the hardware specifies supported
+ * values for this property.
+ * If {@code SupportedValueListResult}'s {@code status} is
+ * {@code StatusCode.OK}, its {@code supportedValuesList} must not be
+ * {@code null}.
+ *
+ * If this is {@code false}, {@code supportedValuesList} must always be
+ * {@code null}.
+ *
+ * The supported value is the superset for both the input value for writable
+ * property and the output value for readable property.
+ *
+ * For certain properties, e.g. {@code GEAR_SELECTION}, this must always be
+ * {@code true}. Check {@code VehicleProperty} documentation.
+ */
+ boolean hasSupportedValuesList;
+}
diff --git a/automotive/vehicle/aidl/android/hardware/automotive/vehicle/IVehicle.aidl b/automotive/vehicle/aidl/android/hardware/automotive/vehicle/IVehicle.aidl
index c896d14..220b1da 100644
--- a/automotive/vehicle/aidl/android/hardware/automotive/vehicle/IVehicle.aidl
+++ b/automotive/vehicle/aidl/android/hardware/automotive/vehicle/IVehicle.aidl
@@ -18,8 +18,11 @@
import android.hardware.automotive.vehicle.GetValueRequests;
import android.hardware.automotive.vehicle.IVehicleCallback;
+import android.hardware.automotive.vehicle.MinMaxSupportedValueResults;
+import android.hardware.automotive.vehicle.PropIdAreaId;
import android.hardware.automotive.vehicle.SetValueRequests;
import android.hardware.automotive.vehicle.SubscribeOptions;
+import android.hardware.automotive.vehicle.SupportedValuesListResults;
import android.hardware.automotive.vehicle.VehiclePropConfigs;
// Vehicle HAL interface.
@@ -260,4 +263,106 @@
* the used shared memory file to return.
*/
void returnSharedMemory(in IVehicleCallback callback, long sharedMemoryId);
+
+ /**
+ * Gets the supported values lists for [propId, areaId]s.
+ *
+ * For a specific [propId, areaId], if the hardware currently specifies
+ * a list of supported values for it, then it is returned through the
+ * {@code supportedValuesList} field inside
+ * {@code SupportedValuesListResult}. If the hardware does not specify
+ * a list of supported values for it (indicated by
+ * {@code HasSupportedValueInfo.hasSupportedValuesList} being
+ * {@code false}), then {@code supportedValuesList} field will be
+ * {@code null}.
+ *
+ * The supported value list applies for both read/write operations. if
+ * it differs for read/write, this is the super-set.
+ *
+ * Must return a list of results, one for each requested [propId, areaId].
+ *
+ * The returned supported values list represents the currently supported
+ * values and may change dynamically. Caller should use
+ * {@code registerSupportedValueChangeCallback} to register for supported
+ * value range change.
+ *
+ * If unable to determine the supported values for some [propId, areaId] due
+ * to error cases, for example, unable to determine EV_CHARGE_PERCENT_LIMIT
+ * supported values due to battery in an error state,
+ * {@code SupportedValuesListResult.status} for that should be set to
+ * a non-okay {@code StatusCode}.
+ *
+ * If one of the [propId, areaId] is not supported,
+ * {@code SupportedValuesListResult.status} for that should be set to
+ * {@code StatusCode.INVALID_ARG}.
+ *
+ * This function should only return non-okay {@code StatusCode} if the whole
+ * operation failed and unable to get any results.
+ */
+ SupportedValuesListResults getSupportedValuesLists(in List<PropIdAreaId> propIdAreaIds);
+
+ /**
+ * Gets the min/max supported values for [propId, areaId]s.
+ *
+ * For a specific [propId, areaId], if the hardware currently specifies
+ * min/max supported value for it, then it is returned through the
+ * {@code minSupportedValue} or {@code maxSupportedValue} field inside
+ * {@code MinMaxSupportedValueResult}. If the hardware does not specify
+ * min/max supported value for it (indicated by
+ * {@code HasSupportedValueInfo.hasMinSupportedValue} or
+ * {@code HasSupportedValueInfo.hasMaxSupportedValue} being
+ * {@code false}), then {@code minSupportedValue} or
+ * {@code maxSupportedValue} is {@code null}.
+ *
+ * The min/max supported values apply for both read/write operations. if
+ * they differs for read/write, they are from the super-set.
+ *
+ * Must return a list of results, one for each requested [propId, areaId].
+ *
+ * The returned min/max supported values represent the currently supported
+ * values and may change dynamically. Caller should use
+ * {@code registerSupportedValueChangeCallback} to register for supported
+ * value range change.
+ *
+ * If unable to determine the supported values for some [propId, areaId] due
+ * to error cases, for example, unable to determine HVAC_FAN_SPEED
+ * max supported value due to HVAC in an error state,
+ * {@code MinMaxSupportedValueResult.status} for that should be set to
+ * a non-okay {@code StatusCode}.
+ *
+ * If one of the [propId, areaId] is not supported,
+ * {@code MinMaxSupportedValueResult.status} for that should be set to
+ * {@code StatusCode.INVALID_ARG}.
+ *
+ * This function should only return non-okay {@code StatusCode} if the whole
+ * operation failed and unable to get any results.
+ */
+ MinMaxSupportedValueResults getMinMaxSupportedValue(in List<PropIdAreaId> propIdAreaIds);
+
+ /**
+ * Registers the supported value change callback.
+ *
+ * For the specified [propId, areaId]s,
+ * {@code callback.onSupportedValueChange} must be invoked if change
+ * happens.
+ *
+ * This always registers a new callback for the specified [propId, areaId]s
+ * if the same callback was not previously registered for them.
+ *
+ * The list of [propId, areaId]s to register must not be empty.
+ *
+ * @param callback The callback for supported value change.
+ * @param propIdAreaIds A list of [propId, areaId]s to register.
+ */
+ void registerSupportedValueChangeCallback(
+ in IVehicleCallback callback, in List<PropIdAreaId> propIdAreaIds);
+
+ /**
+ * Unregisters the supported value change callback.
+ *
+ * @param callback The callback to unregister.
+ * @param propIdAreaIds A list of [propId, areaId]s to unregister.
+ */
+ void unregisterSupportedValueChangeCallback(
+ in IVehicleCallback callback, in List<PropIdAreaId> propIdAreaIds);
}
diff --git a/automotive/vehicle/aidl/android/hardware/automotive/vehicle/IVehicleCallback.aidl b/automotive/vehicle/aidl/android/hardware/automotive/vehicle/IVehicleCallback.aidl
index 2b50321..7230d09 100644
--- a/automotive/vehicle/aidl/android/hardware/automotive/vehicle/IVehicleCallback.aidl
+++ b/automotive/vehicle/aidl/android/hardware/automotive/vehicle/IVehicleCallback.aidl
@@ -17,6 +17,7 @@
package android.hardware.automotive.vehicle;
import android.hardware.automotive.vehicle.GetValueResults;
+import android.hardware.automotive.vehicle.PropIdAreaId;
import android.hardware.automotive.vehicle.SetValueResults;
import android.hardware.automotive.vehicle.StatusCode;
import android.hardware.automotive.vehicle.VehiclePropErrors;
@@ -96,4 +97,16 @@
* does not batch the errors, this may only contain one error.
*/
oneway void onPropertySetError(in VehiclePropErrors errors);
+
+ /**
+ * Called when the min/max supported value or supported value list for
+ * the registered [propId, areaId]s changes.
+ *
+ * The caller is supposed to call {@code getMinMaxSupportedValue} or
+ * {@code getSupportedValuesLists} to get the new supported value range.
+ *
+ * @param propIdAreaIds The list of [propId, areaId]s whose supported
+ * value range changes.
+ */
+ oneway void onSupportedValueChange(in List<PropIdAreaId> propIdAreaIds);
}
diff --git a/automotive/vehicle/aidl/android/hardware/automotive/vehicle/MinMaxSupportedValueResult.aidl b/automotive/vehicle/aidl/android/hardware/automotive/vehicle/MinMaxSupportedValueResult.aidl
new file mode 100644
index 0000000..f85ad3a
--- /dev/null
+++ b/automotive/vehicle/aidl/android/hardware/automotive/vehicle/MinMaxSupportedValueResult.aidl
@@ -0,0 +1,48 @@
+/*
+ * 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.automotive.vehicle;
+
+import android.hardware.automotive.vehicle.RawPropValues;
+import android.hardware.automotive.vehicle.StatusCode;
+
+/**
+ * One result returned from {@code getMinMaxSupportedValue} for one request.
+ */
+@VintfStability
+@JavaDerive(equals=true, toString=true)
+@RustDerive(Clone=true)
+parcelable MinMaxSupportedValueResult {
+ /**
+ * The status for result. If this is not OK, the operation failed for this
+ * [propId, areaId].
+ */
+ StatusCode status = StatusCode.OK;
+ /**
+ * The min supported value.
+ *
+ * If the [propId, areaId] does not specify a min supported value, this
+ * is {@code null}.
+ */
+ @nullable RawPropValues minSupportedValue;
+ /**
+ * The max supported value.
+ *
+ * If the [propId, areaId] does not specify a max supported value, this
+ * is {@code null}.
+ */
+ @nullable RawPropValues maxSupportedValue;
+}
diff --git a/automotive/vehicle/aidl/android/hardware/automotive/vehicle/MinMaxSupportedValueResults.aidl b/automotive/vehicle/aidl/android/hardware/automotive/vehicle/MinMaxSupportedValueResults.aidl
new file mode 100644
index 0000000..3579979
--- /dev/null
+++ b/automotive/vehicle/aidl/android/hardware/automotive/vehicle/MinMaxSupportedValueResults.aidl
@@ -0,0 +1,55 @@
+/*
+ * 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.automotive.vehicle;
+
+import android.hardware.automotive.vehicle.MinMaxSupportedValueResult;
+import android.os.ParcelFileDescriptor;
+
+/**
+ * The result structure for {@code getMinMaxSupportedValue}.
+ *
+ * Contains a list of results, one for each [propId, areaId] request. The
+ * list must contain the same number of result as the {@code propIdAreaIds}.
+ * The result must be in the same order, e.g. the first result is for the first
+ * [propId, areaId].
+ *
+ * Java Client should use
+ * {@link LargeParcelable.reconstructStableAIDLParcelable} to convert this back
+ * to a regular parcelable and then use the converted parcelable's
+ * {@code payloads} field.
+ *
+ * Native client should use
+ * {@link LargeParcelable::stableLargeParcelableToParcelable}.
+ *
+ * VHAL implementation must store the results into {@link payloads} field and
+ * use {@link LargeParcelable::parcelableToStableLargeParcelable} before
+ * sending the converted large parcelable through binder.
+ */
+@VintfStability
+@JavaDerive(equals=true, toString=true)
+parcelable MinMaxSupportedValueResults {
+ /**
+ * The list of responses if they fit the binder memory limitation.
+ */
+ MinMaxSupportedValueResult[] payloads;
+ /**
+ * Shared memory file to store responses if they exceed binder memory
+ * limitation. Created by VHAL, readable only for the client.
+ * The client must close it after reading.
+ */
+ @nullable ParcelFileDescriptor sharedMemoryFd;
+}
diff --git a/automotive/vehicle/aidl/android/hardware/automotive/vehicle/PropIdAreaId.aidl b/automotive/vehicle/aidl/android/hardware/automotive/vehicle/PropIdAreaId.aidl
new file mode 100644
index 0000000..ea47350
--- /dev/null
+++ b/automotive/vehicle/aidl/android/hardware/automotive/vehicle/PropIdAreaId.aidl
@@ -0,0 +1,32 @@
+/*
+ * 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.automotive.vehicle;
+
+import android.hardware.automotive.vehicle.RawPropValues;
+
+/**
+ * A structure containing one propertyId and one areaId.
+ */
+@VintfStability
+@JavaDerive(equals=true, toString=true)
+@RustDerive(Clone=true)
+parcelable PropIdAreaId {
+ /** The property Id. */
+ int propId;
+ /** The area Id. */
+ int areaId;
+}
diff --git a/automotive/vehicle/aidl/android/hardware/automotive/vehicle/SupportedValuesListResult.aidl b/automotive/vehicle/aidl/android/hardware/automotive/vehicle/SupportedValuesListResult.aidl
new file mode 100644
index 0000000..4524f4f
--- /dev/null
+++ b/automotive/vehicle/aidl/android/hardware/automotive/vehicle/SupportedValuesListResult.aidl
@@ -0,0 +1,41 @@
+/*
+ * 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.automotive.vehicle;
+
+import android.hardware.automotive.vehicle.RawPropValues;
+import android.hardware.automotive.vehicle.StatusCode;
+
+/**
+ * One result returned from {@code getSupportedValuesLists} for one request.
+ */
+@VintfStability
+@JavaDerive(equals=true, toString=true)
+@RustDerive(Clone=true)
+parcelable SupportedValuesListResult {
+ /**
+ * The status for result. If this is not OK, the operation failed for this
+ * [propId, areaId].
+ */
+ StatusCode status = StatusCode.OK;
+ /**
+ * The supported values list.
+ *
+ * If the [propId, areaId] does not specify a supported values list, this
+ * is {@code null}.
+ */
+ @nullable List<RawPropValues> supportedValuesList;
+}
diff --git a/automotive/vehicle/aidl/android/hardware/automotive/vehicle/SupportedValuesListResults.aidl b/automotive/vehicle/aidl/android/hardware/automotive/vehicle/SupportedValuesListResults.aidl
new file mode 100644
index 0000000..da84871
--- /dev/null
+++ b/automotive/vehicle/aidl/android/hardware/automotive/vehicle/SupportedValuesListResults.aidl
@@ -0,0 +1,55 @@
+/*
+ * 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.automotive.vehicle;
+
+import android.hardware.automotive.vehicle.SupportedValuesListResult;
+import android.os.ParcelFileDescriptor;
+
+/**
+ * The result structure for {@code getSupportedValuesLists}.
+ *
+ * Contains a list of results, one for each [propId, areaId] request. The
+ * list must contain the same number of result as the {@code propIdAreaIds}.
+ * The result must be in the same order, e.g. the first result is for the first
+ * [propId, areaId].
+ *
+ * Java Client should use
+ * {@link LargeParcelable.reconstructStableAIDLParcelable} to convert this back
+ * to a regular parcelable and then use the converted parcelable's
+ * {@code payloads} field.
+ *
+ * Native client should use
+ * {@link LargeParcelable::stableLargeParcelableToParcelable}.
+ *
+ * VHAL implementation must store the results into {@link payloads} field and
+ * use {@link LargeParcelable::parcelableToStableLargeParcelable} before
+ * sending the converted large parcelable through binder.
+ */
+@VintfStability
+@JavaDerive(equals=true, toString=true)
+parcelable SupportedValuesListResults {
+ /**
+ * The list of responses if they fit the binder memory limitation.
+ */
+ SupportedValuesListResult[] payloads;
+ /**
+ * Shared memory file to store responses if they exceed binder memory
+ * limitation. Created by VHAL, readable only for the client.
+ * The client must close it after reading.
+ */
+ @nullable ParcelFileDescriptor sharedMemoryFd;
+}
diff --git a/automotive/vehicle/aidl/android/hardware/automotive/vehicle/ValueRange.aidl b/automotive/vehicle/aidl/android/hardware/automotive/vehicle/ValueRange.aidl
new file mode 100644
index 0000000..816a6a8
--- /dev/null
+++ b/automotive/vehicle/aidl/android/hardware/automotive/vehicle/ValueRange.aidl
@@ -0,0 +1,55 @@
+/*
+ * 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.automotive.vehicle;
+
+import android.hardware.automotive.vehicle.RawPropValues;
+
+/**
+ * Represents the value range for a vehicle property.
+ *
+ * This applies for the values read from VHAL and the values sent to VHAL.
+ *
+ * If the value range differs, this is the super set.
+ */
+@VintfStability
+@JavaDerive(equals=true, toString=true)
+@RustDerive(Clone=true)
+parcelable ValueRange {
+ /**
+ * The currently specified minimum value for the property.
+ *
+ * {@code null} if not specified.
+ */
+ @nullable RawPropValues minValue;
+
+ /**
+ * The currently specified maximum value for the property.
+ *
+ * {@code null} if not specified.
+ */
+ @nullable RawPropValues maxValue;
+
+ /**
+ * The currently specified supported values for the property.
+ *
+ * If the value type is int32, int64 or float, the returned list must be
+ * sorted in ascending order.
+ *
+ * {@code null} if not specified.
+ */
+ @nullable List<RawPropValues> supportedValues;
+}
diff --git a/automotive/vehicle/aidl/android/hardware/automotive/vehicle/VehicleAreaConfig.aidl b/automotive/vehicle/aidl/android/hardware/automotive/vehicle/VehicleAreaConfig.aidl
index 9387965..70a5566 100644
--- a/automotive/vehicle/aidl/android/hardware/automotive/vehicle/VehicleAreaConfig.aidl
+++ b/automotive/vehicle/aidl/android/hardware/automotive/vehicle/VehicleAreaConfig.aidl
@@ -16,6 +16,7 @@
package android.hardware.automotive.vehicle;
+import android.hardware.automotive.vehicle.HasSupportedValueInfo;
import android.hardware.automotive.vehicle.VehiclePropertyAccess;
@VintfStability
@@ -83,6 +84,8 @@
/**
* Whether variable update rate is supported.
*
+ * This is always {@code false} for VHAL implementation < V3.
+ *
* This applies for continuous property only.
*
* It is HIGHLY RECOMMENDED to support variable update rate for all non-heartbeat continuous
@@ -109,4 +112,12 @@
* so this should be false if the property is large (e.g. a byte array of 1k in size).
*/
boolean supportVariableUpdateRate;
+
+ /**
+ * For VHAL implementation >= V4, this must not be {@code null}. This specifies whether
+ * this property may have min/max supported value or supported values list.
+ *
+ * For VHAL implementation < V4, this is always {@code null} and is not accessed.
+ */
+ @nullable HasSupportedValueInfo hasSupportedValueInfo;
}
diff --git a/bluetooth/ranging/OWNERS b/bluetooth/ranging/OWNERS
index 3d95624..88a91ea 100644
--- a/bluetooth/ranging/OWNERS
+++ b/bluetooth/ranging/OWNERS
@@ -3,3 +3,4 @@
include platform/packages/modules/Bluetooth:/OWNERS
chienyuanhuang@google.com
+steveliu@google.com
diff --git a/bluetooth/ranging/aidl/Android.bp b/bluetooth/ranging/aidl/Android.bp
index d0d1b90..4096669 100644
--- a/bluetooth/ranging/aidl/Android.bp
+++ b/bluetooth/ranging/aidl/Android.bp
@@ -42,6 +42,6 @@
imports: [],
},
],
- frozen: true,
+ frozen: false,
}
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/BluetoothChannelSoundingParameters.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/BluetoothChannelSoundingParameters.aidl
index e8fefbe..03a7d24 100644
--- a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/BluetoothChannelSoundingParameters.aidl
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/BluetoothChannelSoundingParameters.aidl
@@ -38,6 +38,9 @@
int aclHandle;
int l2capCid;
int realTimeProcedureDataAttHandle;
+ /**
+ * @deprecated use the role in Config.aidl
+ */
android.hardware.bluetooth.ranging.Role role;
boolean localSupportsSoundingPhaseBasedRanging;
boolean remoteSupportsSoundingPhaseBaseRanging;
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/Ch3cShapeType.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/Ch3cShapeType.aidl
new file mode 100644
index 0000000..70bed88
--- /dev/null
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/Ch3cShapeType.aidl
@@ -0,0 +1,39 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+@Backing(type="byte") @VintfStability
+enum Ch3cShapeType {
+ HAT_SHAPE = 0x00,
+ X_SHAPE = 0x01,
+}
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ChannelSelectionType.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ChannelSelectionType.aidl
new file mode 100644
index 0000000..78bbbc1
--- /dev/null
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ChannelSelectionType.aidl
@@ -0,0 +1,39 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+@Backing(type="byte") @VintfStability
+enum ChannelSelectionType {
+ ALOGRITHM_3B = 0x00,
+ ALOGRITHM_3C = 0x01,
+}
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ChannelSoudingRawData.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ChannelSoudingRawData.aidl
index 8fc77ae..64aabec 100644
--- a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ChannelSoudingRawData.aidl
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ChannelSoudingRawData.aidl
@@ -32,6 +32,9 @@
// later when a module using the interface is updated, e.g., Mainline modules.
package android.hardware.bluetooth.ranging;
+/**
+ * @deprecated use ChannelSoundingProcedureData
+ */
@VintfStability
parcelable ChannelSoudingRawData {
int procedureCounter;
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ChannelSoundingProcedureData.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ChannelSoundingProcedureData.aidl
new file mode 100644
index 0000000..ef4facc
--- /dev/null
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ChannelSoundingProcedureData.aidl
@@ -0,0 +1,46 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+@VintfStability
+parcelable ChannelSoundingProcedureData {
+ int procedureCounter;
+ int procedureSequence;
+ byte initiatorSelectedTxPower = SELECTED_TX_POWER_UNAVAILABLE /* 127 */;
+ byte reflectorSelectedTxPower = SELECTED_TX_POWER_UNAVAILABLE /* 127 */;
+ android.hardware.bluetooth.ranging.SubeventResultData[] initiatorSubeventResultData;
+ android.hardware.bluetooth.ranging.ProcedureAbortReason initiatorProcedureAbortReason;
+ android.hardware.bluetooth.ranging.SubeventResultData[] reflectorSubeventResultData;
+ android.hardware.bluetooth.ranging.ProcedureAbortReason reflectorProcedureAbortReason;
+ const byte SELECTED_TX_POWER_UNAVAILABLE = 0x7Fu8;
+}
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ChannelSoundingSingleSideData.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ChannelSoundingSingleSideData.aidl
index 172ac5e..b86994e 100644
--- a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ChannelSoundingSingleSideData.aidl
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ChannelSoundingSingleSideData.aidl
@@ -32,6 +32,9 @@
// later when a module using the interface is updated, e.g., Mainline modules.
package android.hardware.bluetooth.ranging;
+/**
+ * @deprecated use ChannelSoundingProcedureData
+ */
@VintfStability
parcelable ChannelSoundingSingleSideData {
@nullable android.hardware.bluetooth.ranging.StepTonePct[] stepTonePcts;
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ComplexNumber.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ComplexNumber.aidl
index 4d5ac21..c3d5d91 100644
--- a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ComplexNumber.aidl
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ComplexNumber.aidl
@@ -32,6 +32,9 @@
// later when a module using the interface is updated, e.g., Mainline modules.
package android.hardware.bluetooth.ranging;
+/**
+ * @deprecated use PctIQSample instead for V2 and above.
+ */
@VintfStability
parcelable ComplexNumber {
double real;
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/Config.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/Config.aidl
index c9ac991..bd07cd0 100644
--- a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/Config.aidl
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/Config.aidl
@@ -38,4 +38,22 @@
android.hardware.bluetooth.ranging.SubModeType subModeType;
android.hardware.bluetooth.ranging.RttType rttType;
byte[10] channelMap;
+ int minMainModeSteps;
+ int maxMainModeSteps;
+ byte mainModeRepetition;
+ byte mode0Steps;
+ android.hardware.bluetooth.ranging.Role role;
+ android.hardware.bluetooth.ranging.CsSyncPhyType csSyncPhyType;
+ android.hardware.bluetooth.ranging.ChannelSelectionType channelSelectionType;
+ android.hardware.bluetooth.ranging.Ch3cShapeType ch3cShapeType;
+ byte ch3cJump;
+ int channelMapRepetition;
+ int tIp1TimeUs;
+ int tIp2TimeUs;
+ int tFcsTimeUs;
+ byte tPmTimeUs;
+ byte tSwTimeUsSupportedByLocal;
+ byte tSwTimeUsSupportedByRemote;
+ int bleConnInterval = BLE_CONN_INTERVAL_UNAVAILABLE /* 0 */;
+ const int BLE_CONN_INTERVAL_UNAVAILABLE = 0;
}
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/CsSyncPhyType.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/CsSyncPhyType.aidl
new file mode 100644
index 0000000..9611f13
--- /dev/null
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/CsSyncPhyType.aidl
@@ -0,0 +1,41 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+@Backing(type="byte") @VintfStability
+enum CsSyncPhyType {
+ NOT_VALID_PHY = 0x00,
+ LE_1M_PHY = 0x01,
+ LE_2M_PHY = 0x02,
+ LE_2M_2BT_PHY = 0x03,
+}
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/IBluetoothChannelSounding.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/IBluetoothChannelSounding.aidl
index 004a482..19b949f 100644
--- a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/IBluetoothChannelSounding.aidl
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/IBluetoothChannelSounding.aidl
@@ -36,6 +36,10 @@
interface IBluetoothChannelSounding {
@nullable android.hardware.bluetooth.ranging.VendorSpecificData[] getVendorSpecificData();
@nullable android.hardware.bluetooth.ranging.SessionType[] getSupportedSessionTypes();
+ /**
+ * @deprecated use getSupportedCsSecurityLevels() instead
+ */
android.hardware.bluetooth.ranging.CsSecurityLevel getMaxSupportedCsSecurityLevel();
@nullable android.hardware.bluetooth.ranging.IBluetoothChannelSoundingSession openSession(in android.hardware.bluetooth.ranging.BluetoothChannelSoundingParameters params, in android.hardware.bluetooth.ranging.IBluetoothChannelSoundingSessionCallback callback);
+ android.hardware.bluetooth.ranging.CsSecurityLevel[] getSupportedCsSecurityLevels();
}
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/IBluetoothChannelSoundingSession.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/IBluetoothChannelSoundingSession.aidl
index 9f691b4..99418bc 100644
--- a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/IBluetoothChannelSoundingSession.aidl
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/IBluetoothChannelSoundingSession.aidl
@@ -39,4 +39,8 @@
boolean isAbortedProcedureRequired();
void writeRawData(in android.hardware.bluetooth.ranging.ChannelSoudingRawData rawData);
void close(android.hardware.bluetooth.ranging.Reason reason);
+ void writeProcedureData(in android.hardware.bluetooth.ranging.ChannelSoundingProcedureData procedureData);
+ void updateChannelSoundingConfig(in android.hardware.bluetooth.ranging.Config conifg);
+ void updateProcedureEnableConfig(in android.hardware.bluetooth.ranging.ProcedureEnableConfig procedureEnableConfig);
+ void updateBleConnInterval(in int bleConnInterval);
}
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ModeData.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ModeData.aidl
new file mode 100644
index 0000000..6fdfffe
--- /dev/null
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ModeData.aidl
@@ -0,0 +1,41 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+@VintfStability
+union ModeData {
+ android.hardware.bluetooth.ranging.ModeZeroData modeZeroData;
+ android.hardware.bluetooth.ranging.ModeOneData modeOneData;
+ android.hardware.bluetooth.ranging.ModeTwoData modeTwoData;
+ android.hardware.bluetooth.ranging.ModeThreeData modeThreeData;
+}
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ModeOneData.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ModeOneData.aidl
new file mode 100644
index 0000000..698dd63
--- /dev/null
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ModeOneData.aidl
@@ -0,0 +1,50 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+@VintfStability
+parcelable ModeOneData {
+ byte packetQuality;
+ android.hardware.bluetooth.ranging.Nadm packetNadm;
+ byte packetRssiDbm = PACKET_RSSI_UNAVAILABLE /* 127 */;
+ android.hardware.bluetooth.ranging.RttToaTodData rttToaTodData;
+ byte packetAntenna;
+ @nullable android.hardware.bluetooth.ranging.PctIQSample packetPct1;
+ @nullable android.hardware.bluetooth.ranging.PctIQSample packetPct2;
+ const byte FLAG_CS_ACCESS_ADDR_SUCCESS = 0x0;
+ const byte FLAG_CS_ACCESS_ADDR_ERRORS = 0x1;
+ const byte FLAG_CS_ACCESS_ADDR_NOT_FOUND = 0x2;
+ const byte FLAG_CS_ACCESS_ADDR_MASK = 0xF;
+ const byte RANDOM_OR_SOUNDING_SEQUENCE_ERROR_COUNT_SHIFT = 4;
+ const byte PACKET_RSSI_UNAVAILABLE = 0x7Fu8;
+}
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ModeThreeData.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ModeThreeData.aidl
new file mode 100644
index 0000000..1aa928b
--- /dev/null
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ModeThreeData.aidl
@@ -0,0 +1,39 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+@VintfStability
+parcelable ModeThreeData {
+ android.hardware.bluetooth.ranging.ModeOneData modeOneData;
+ android.hardware.bluetooth.ranging.ModeTwoData modeTwoData;
+}
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ModeTwoData.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ModeTwoData.aidl
new file mode 100644
index 0000000..c07b0c0
--- /dev/null
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ModeTwoData.aidl
@@ -0,0 +1,48 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+@VintfStability
+parcelable ModeTwoData {
+ byte antennaPermutationIndex;
+ android.hardware.bluetooth.ranging.PctIQSample[] tonePctIQSamples;
+ byte[] toneQualityIndicators;
+ const int TONE_QUALITY_HIGH = 0x0;
+ const int TONE_QUALITY_MEDIUM = 0x1;
+ const int TONE_QUALITY_LOW = 0x2;
+ const int TONE_QUALITY_UNAVAILABLE = 0x3;
+ const int EXTENSION_SLOT_NONE = 0x0;
+ const int EXTENSION_SLOT_TONE_NOT_EXPECTED_TO_BE_PRESENT = 0x1;
+ const int EXTENSION_SLOT_TONE_EXPECTED_TO_BE_PRESENT = 0x2;
+ const int EXTENSION_SLOT_SHIFT = 4;
+}
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ModeZeroData.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ModeZeroData.aidl
new file mode 100644
index 0000000..f94f3d1
--- /dev/null
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ModeZeroData.aidl
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2023 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.bluetooth.ranging;
+@VintfStability
+parcelable ModeZeroData {
+ byte packetQuality;
+ byte packetRssiDbm = PACKET_RSSI_UNAVAILABLE /* 127 */;
+ byte packetAntenna;
+ int initiatorMeasuredFreqOffset = MEASURED_FREQ_OFFSET_UNAVAILABLE /* -16384 */;
+ const byte FLAG_CS_ACCESS_ADDR_SUCCESS = 0x0;
+ const byte FLAG_CS_ACCESS_ADDR_ERRORS = 0x1;
+ const byte FLAG_CS_ACCESS_ADDR_NOT_FOUND = 0x2;
+ const byte FLAG_CS_ACCESS_ADDR_MASK = 0xF;
+ const byte RANDOM_OR_SOUNDING_SEQUENCE_ERROR_COUNT_SHIFT = 4;
+ const byte PACKET_RSSI_UNAVAILABLE = 0x7Fu8;
+ const int MEASURED_FREQ_OFFSET_UNAVAILABLE = 0xFFFFC000;
+}
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/PctIQSample.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/PctIQSample.aidl
new file mode 100644
index 0000000..a15b579
--- /dev/null
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/PctIQSample.aidl
@@ -0,0 +1,40 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+@VintfStability
+parcelable PctIQSample {
+ int iSample = SAMPLE_UNAVAILABLE /* -1 */;
+ int qSample = SAMPLE_UNAVAILABLE /* -1 */;
+ const int SAMPLE_UNAVAILABLE = 0xFFFFFFFF;
+}
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ProcedureAbortReason.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ProcedureAbortReason.aidl
new file mode 100644
index 0000000..ead7ceb
--- /dev/null
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ProcedureAbortReason.aidl
@@ -0,0 +1,42 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+@Backing(type="byte") @VintfStability
+enum ProcedureAbortReason {
+ SUCCESS = 0x0,
+ LOCAL_OR_REMOTE_REQUEST = 0x01,
+ FILTERED_CHANNEL_MAP_LESS_THAN_15 = 0x02,
+ CHANNEL_MAP_UPDATE_INSTANT_PASSED = 0x03,
+ UNSPECIFIED = 0x0F,
+}
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ProcedureEnableConfig.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ProcedureEnableConfig.aidl
new file mode 100644
index 0000000..11030bb
--- /dev/null
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/ProcedureEnableConfig.aidl
@@ -0,0 +1,45 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+@VintfStability
+parcelable ProcedureEnableConfig {
+ byte toneAntennaConfigSelection;
+ int subeventLenUs;
+ byte subeventsPerEvent;
+ int subeventInterval;
+ int eventInterval;
+ int procedureInterval;
+ int procedureCount;
+ int maxProcedureLen;
+}
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/RangingResult.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/RangingResult.aidl
index d092b80..ccac70b 100644
--- a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/RangingResult.aidl
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/RangingResult.aidl
@@ -45,4 +45,6 @@
android.hardware.bluetooth.ranging.Nadm detectedAttackLevel;
double velocityMetersPerSecond;
@nullable byte[] vendorSpecificCsRangingResultsData;
+ android.hardware.bluetooth.ranging.RangingResultStatus rangingResultStatus;
+ long timestampNanos;
}
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/RangingResultStatus.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/RangingResultStatus.aidl
new file mode 100644
index 0000000..cdf8ed2
--- /dev/null
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/RangingResultStatus.aidl
@@ -0,0 +1,42 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+@Backing(type="byte") @VintfStability
+enum RangingResultStatus {
+ SUCCESS = 0x00,
+ FAIL_INITIATOR_ABORT = 0x01,
+ FAIL_REFLECTOR_ABORT = 0x02,
+ FAIL_BOTH_ABORT = 0x03,
+ FAIL_UNSPECIFIED = 0xFFu8,
+}
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/RttToaTodData.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/RttToaTodData.aidl
new file mode 100644
index 0000000..496ccb2
--- /dev/null
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/RttToaTodData.aidl
@@ -0,0 +1,40 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+@VintfStability
+union RttToaTodData {
+ int toaTodInitiator = TOA_TOD_UNAVAILABLE /* -32768 */;
+ int todToaReflector = TOA_TOD_UNAVAILABLE /* -32768 */;
+ const int TOA_TOD_UNAVAILABLE = 0xFFFF8000;
+}
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/StepData.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/StepData.aidl
new file mode 100644
index 0000000..cdebc8e
--- /dev/null
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/StepData.aidl
@@ -0,0 +1,40 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+@VintfStability
+parcelable StepData {
+ byte stepChannel;
+ android.hardware.bluetooth.ranging.ModeType stepMode;
+ android.hardware.bluetooth.ranging.ModeData stepModeData;
+}
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/StepTonePct.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/StepTonePct.aidl
index 4125748..02d5413 100644
--- a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/StepTonePct.aidl
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/StepTonePct.aidl
@@ -32,6 +32,9 @@
// later when a module using the interface is updated, e.g., Mainline modules.
package android.hardware.bluetooth.ranging;
+/**
+ * @deprecated use ModeTwoData
+ */
@VintfStability
parcelable StepTonePct {
List<android.hardware.bluetooth.ranging.ComplexNumber> tonePcts;
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/SubeventAbortReason.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/SubeventAbortReason.aidl
new file mode 100644
index 0000000..a3bb366
--- /dev/null
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/SubeventAbortReason.aidl
@@ -0,0 +1,42 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+@Backing(type="byte") @VintfStability
+enum SubeventAbortReason {
+ SUCCESS = 0x0,
+ LOCAL_OR_REMOTE_REQUEST = 0x01,
+ NO_CS_SYNC_RECEIVED = 0x02,
+ SCHEDULING_CONFLICTS_OR_LIMITED_RESOURCES = 0x03,
+ UNSPECIFIED = 0x0F,
+}
diff --git a/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/SubeventResultData.aidl b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/SubeventResultData.aidl
new file mode 100644
index 0000000..3a7c393
--- /dev/null
+++ b/bluetooth/ranging/aidl/aidl_api/android.hardware.bluetooth.ranging/current/android/hardware/bluetooth/ranging/SubeventResultData.aidl
@@ -0,0 +1,45 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+@VintfStability
+parcelable SubeventResultData {
+ int startAclConnEventCounter;
+ int frequencyCompensation = FREQ_COMPENSATION_UNAVAILABLE /* -16384 */;
+ byte referencePowerLevelDbm;
+ byte numAntennaPaths;
+ android.hardware.bluetooth.ranging.SubeventAbortReason subeventAbortReason;
+ android.hardware.bluetooth.ranging.StepData[] stepData;
+ long timestampNanos;
+ const int FREQ_COMPENSATION_UNAVAILABLE = 0xFFFFC000;
+}
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/BluetoothChannelSoundingParameters.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/BluetoothChannelSoundingParameters.aidl
index 0cda847..fbc0165 100644
--- a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/BluetoothChannelSoundingParameters.aidl
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/BluetoothChannelSoundingParameters.aidl
@@ -44,6 +44,7 @@
int realTimeProcedureDataAttHandle;
/**
* Role of the local device.
+ * @deprecated use the role in Config.aidl
*/
Role role;
/**
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/Ch3cShapeType.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/Ch3cShapeType.aidl
new file mode 100644
index 0000000..558f68b
--- /dev/null
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/Ch3cShapeType.aidl
@@ -0,0 +1,36 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+
+/**
+ * The selected shape to be rendered when Channel Selection Algorithm #3c is used
+ * See BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 4, Part E 7.7.65.42 for details.
+ *
+ * Specification: https://www.bluetooth.com/specifications/specs/core60-html/
+ */
+@VintfStability
+@Backing(type="byte")
+enum Ch3cShapeType {
+ /**
+ * Use Hat shape for user-specified channel sequence
+ */
+ HAT_SHAPE = 0x00,
+ /**
+ * Use X shape for user-specified channel sequence
+ */
+ X_SHAPE = 0x01,
+}
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ChannelSelectionType.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ChannelSelectionType.aidl
new file mode 100644
index 0000000..6fd71aa
--- /dev/null
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ChannelSelectionType.aidl
@@ -0,0 +1,36 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+
+/**
+ * The channel selection algorithm for non-mode-0 steps
+ * See BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 4, Part E 7.7.65.42 for details.
+ *
+ * Specification: https://www.bluetooth.com/specifications/specs/core60-html/
+ */
+@VintfStability
+@Backing(type="byte")
+enum ChannelSelectionType {
+ /**
+ * Use Channel Selection Algorithm #3b for non-mode-0 CS steps
+ */
+ ALOGRITHM_3B = 0x00,
+ /**
+ * Use Channel Selection Algorithm #3c for non-mode-0 CS steps
+ */
+ ALOGRITHM_3C = 0x01,
+}
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ChannelSoudingRawData.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ChannelSoudingRawData.aidl
index 78ce4f4..f06af0f 100644
--- a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ChannelSoudingRawData.aidl
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ChannelSoudingRawData.aidl
@@ -24,6 +24,7 @@
* See Channel Sounding CR_PR 3.1.10 and Channel Sounding HCI Updates CR_PR 3.1.23 for details.
*
* Specification: https://www.bluetooth.com/specifications/specs/channel-sounding-cr-pr/
+ * @deprecated use ChannelSoundingProcedureData
*/
@VintfStability
parcelable ChannelSoudingRawData {
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ChannelSoundingProcedureData.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ChannelSoundingProcedureData.aidl
new file mode 100644
index 0000000..2c51abe
--- /dev/null
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ChannelSoundingProcedureData.aidl
@@ -0,0 +1,75 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+
+import android.hardware.bluetooth.ranging.ProcedureAbortReason;
+import android.hardware.bluetooth.ranging.SubeventResultData;
+
+/**
+ * The measured data for a whole procedure, it includes all local and remote related data.
+ */
+@VintfStability
+parcelable ChannelSoundingProcedureData {
+ /**
+ * CS procedure count since completion of the Channel Sounding Security Start procedure
+ */
+ int procedureCounter;
+ /**
+ * The procequre sequence since completion of the Channel Sounding Procecedure Enable procedure,
+ * this is not defined by spec, BT
+ */
+ int procedureSequence;
+ const byte SELECTED_TX_POWER_UNAVAILABLE = 0x7Fu8;
+ /**
+ * Transmit power level used for CS procedure of initiator.
+ * See BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 4, Part E 7.7.65.43
+ * ** HCI_LE_CS_Procedure_Enable_Complete#selected_tx_power
+ * See BLUETOOTH Ranging Service Version 1.0 3.2.1.2
+ * ** Ranging Header#Selected TX power
+ * Range: -127 to 20
+ * Unit: dBm
+ * value: 0x7F - Transmit power level is unavailable
+ */
+ byte initiatorSelectedTxPower = SELECTED_TX_POWER_UNAVAILABLE;
+ /**
+ * Transmit power level used for CS procedure of reflector.
+ * See BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 4, Part E 7.7.65.43
+ * ** HCI_LE_CS_Procedure_Enable_Complete#selected_tx_power
+ * See BLUETOOTH Ranging Service Version 1.0 3.2.1.2
+ * ** Ranging Header#Selected TX power
+ * Range: -127 to 20
+ * Unit: dBm
+ * value: 0x7F - Transmit power level is unavailable
+ */
+ byte reflectorSelectedTxPower = SELECTED_TX_POWER_UNAVAILABLE;
+ /**
+ * The subevent result data of initiator
+ */
+ SubeventResultData[] initiatorSubeventResultData;
+ /**
+ * Indicates the procedure abort reason of the initiator
+ */
+ ProcedureAbortReason initiatorProcedureAbortReason;
+ /**
+ * The subevent result data of reflector
+ */
+ SubeventResultData[] reflectorSubeventResultData;
+ /**
+ * Indicates the procedure abort reason of the initiator
+ */
+ ProcedureAbortReason reflectorProcedureAbortReason;
+}
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ChannelSoundingSingleSideData.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ChannelSoundingSingleSideData.aidl
index 9c4b472..75f0b67 100644
--- a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ChannelSoundingSingleSideData.aidl
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ChannelSoundingSingleSideData.aidl
@@ -25,6 +25,7 @@
* See Channel Sounding CR_PR 3.1.10 and Channel Sounding HCI Updates CR_PR 3.1.23 for details.
*
* Specification: https://www.bluetooth.com/specifications/specs/channel-sounding-cr-pr/
+ * @deprecated use ChannelSoundingProcedureData
*/
@VintfStability
parcelable ChannelSoundingSingleSideData {
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ComplexNumber.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ComplexNumber.aidl
index 5253d9f..8d59934 100644
--- a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ComplexNumber.aidl
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ComplexNumber.aidl
@@ -16,6 +16,9 @@
package android.hardware.bluetooth.ranging;
+/**
+ * @deprecated use PctIQSample instead for V2 and above.
+ */
@VintfStability
parcelable ComplexNumber {
double real;
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/Config.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/Config.aidl
index 85ae4c1..95817b5 100644
--- a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/Config.aidl
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/Config.aidl
@@ -16,10 +16,20 @@
package android.hardware.bluetooth.ranging;
+import android.hardware.bluetooth.ranging.Ch3cShapeType;
+import android.hardware.bluetooth.ranging.ChannelSelectionType;
+import android.hardware.bluetooth.ranging.CsSyncPhyType;
import android.hardware.bluetooth.ranging.ModeType;
+import android.hardware.bluetooth.ranging.Role;
import android.hardware.bluetooth.ranging.RttType;
import android.hardware.bluetooth.ranging.SubModeType;
+/**
+ * LE CS Config Complete data of Channel Sounding.
+ * See BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 4, Part E 7.8.137 for details.
+ *
+ * Specification: https://www.bluetooth.com/specifications/specs/core60-html/
+ */
@VintfStability
parcelable Config {
/**
@@ -42,4 +52,96 @@
* Channel n is disabled for CS procedure = 0
*/
byte[10] channelMap;
+ /**
+ * Minimum number of CS main mode steps to be executed before a submode step is executed
+ * Value: 0x02 to 0xFF
+ */
+ int minMainModeSteps;
+ /**
+ * Maximum number of CS main mode steps to be executed before a submode step is executed
+ * Value: 0x02 to 0xFF
+ */
+ int maxMainModeSteps;
+ /**
+ * Number of main mode steps taken from the end of the last CS subevent to be repeated at
+ * the beginning of the current CS subevent directly after the last mode-0 step of that event
+ * Value: 0x00 to 0x03
+ */
+ byte mainModeRepetition;
+ /**
+ * Number of CS mode-0 steps to be included at the beginning of each CS subevent
+ * Value: 0x00 to 0x03
+ */
+ byte mode0Steps;
+ /**
+ * The Channel Sounding role of the local device
+ */
+ Role role;
+ /**
+ * Indicates the PHY to be used for CS_SYNC exchanges during the CS procedure
+ */
+ CsSyncPhyType csSyncPhyType;
+ /**
+ * Indicates the Channel Selection Algorithm to be used during the CS procedure for non-mode-0
+ * steps
+ */
+ ChannelSelectionType channelSelectionType;
+ /**
+ * Indicates the selected shape
+ */
+ Ch3cShapeType ch3cShapeType;
+ /**
+ * Number of channels skipped in each rising and falling sequence
+ * Value: 0x02 to 0x08
+ */
+ byte ch3cJump;
+ /**
+ * The number of times the map represented by the Channel_Map field is to be cycled through
+ * for non-mode-0 steps within a CS procedure
+ * Value: 0x01 to 0xFF
+ */
+ int channelMapRepetition;
+ /**
+ * Interlude time in microseconds between the RTT packets
+ * Value: 0x0A, 0x14, 0x1E, 0x28, 0x32, 0x3C, 0x50, or 0x91
+ * unit: us
+ */
+ int tIp1TimeUs;
+ /**
+ * Interlude time in microseconds between the CS tones
+ * Value: 0x0A, 0x14, 0x1E, 0x28, 0x32, 0x3C, 0x50, or 0x91
+ * unit: us
+ */
+ int tIp2TimeUs;
+ /**
+ * Time in microseconds for frequency changes
+ * Value: 0x0F, 0x14, 0x1E, 0x28, 0x32, 0x3C, 0x50, 0x64, 0x78, or 0x96
+ * unit: us
+ */
+ int tFcsTimeUs;
+ /**
+ * Time in microseconds for the phase measurement period of the CS tones
+ * Value: 0x0A, 0x14, or 0x28
+ * unit: us
+ */
+ byte tPmTimeUs;
+ /**
+ * Time in microseconds for the antenna switch period of the CS tones supported by local device
+ * Value: 0, 1, 2, 4, 10 us
+ * see BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 4, Part E 7.8.130
+ */
+ byte tSwTimeUsSupportedByLocal;
+ /**
+ * Time in microseconds for the antenna switch period of the CS tones supported by remote device
+ * Value: 0, 1, 2, 4, 10 us
+ * see BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 4, Part E 7.7.65.39
+ */
+ byte tSwTimeUsSupportedByRemote;
+ const int BLE_CONN_INTERVAL_UNAVAILABLE = 0;
+ /**
+ * BLE event connection interval, a multiple of 1.25 ms in the range 7.5 ms to 4.0 s
+ * see BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 6, Part B 4.5.1
+ * Unit: 1.25ms
+ */
+ int bleConnInterval = BLE_CONN_INTERVAL_UNAVAILABLE;
}
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/CsSyncPhyType.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/CsSyncPhyType.aidl
new file mode 100644
index 0000000..c7fe8a6
--- /dev/null
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/CsSyncPhyType.aidl
@@ -0,0 +1,32 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+
+/**
+ * The PHY to be used for CS_SYNC exchanges during the CS procedure
+ * See BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 4, Part E 7.7.65.42 for details.
+ *
+ * Specification: https://www.bluetooth.com/specifications/specs/core60-html/
+ */
+@VintfStability
+@Backing(type="byte")
+enum CsSyncPhyType {
+ NOT_VALID_PHY = 0x00,
+ LE_1M_PHY = 0x01,
+ LE_2M_PHY = 0x02,
+ LE_2M_2BT_PHY = 0x03,
+}
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/IBluetoothChannelSounding.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/IBluetoothChannelSounding.aidl
index 45ec79f..283f588 100644
--- a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/IBluetoothChannelSounding.aidl
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/IBluetoothChannelSounding.aidl
@@ -52,6 +52,7 @@
*
* @return CsSecurityLevel that indicates max supported security level of CS for ranging
* algorithms.
+ * @deprecated use getSupportedCsSecurityLevels() instead
*/
CsSecurityLevel getMaxSupportedCsSecurityLevel();
@@ -63,4 +64,13 @@
@nullable IBluetoothChannelSoundingSession openSession(
in BluetoothChannelSoundingParameters params,
in IBluetoothChannelSoundingSessionCallback callback);
+
+ /**
+ * API to get all supported security level (0 to 4) of CS for ranging algorithms.
+ *
+ * See: BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 3, Part C 10.11.1
+ *
+ * @return All supported security level of CS for ranging algorithms.
+ */
+ CsSecurityLevel[] getSupportedCsSecurityLevels();
}
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/IBluetoothChannelSoundingSession.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/IBluetoothChannelSoundingSession.aidl
index 97b147e..b87024e 100644
--- a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/IBluetoothChannelSoundingSession.aidl
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/IBluetoothChannelSoundingSession.aidl
@@ -17,6 +17,9 @@
package android.hardware.bluetooth.ranging;
import android.hardware.bluetooth.ranging.ChannelSoudingRawData;
+import android.hardware.bluetooth.ranging.ChannelSoundingProcedureData;
+import android.hardware.bluetooth.ranging.Config;
+import android.hardware.bluetooth.ranging.ProcedureEnableConfig;
import android.hardware.bluetooth.ranging.Reason;
import android.hardware.bluetooth.ranging.ResultType;
import android.hardware.bluetooth.ranging.VendorSpecificData;
@@ -63,4 +66,28 @@
* Close the current session. Object is no longer useful after this method.
*/
void close(Reason reason);
+
+ /**
+ * API to provide raw ranging procedure data to the HAL. The HAL converts this data into
+ * meaningful ranging results using a proprietary algorithm and then calls back to the
+ * Bluetooth stack via BluetoothChannelSoundingSessionCallback.onResult().
+ */
+ void writeProcedureData(in ChannelSoundingProcedureData procedureData);
+
+ /**
+ * API to provide the latest CS config to the HAL.
+ */
+ void updateChannelSoundingConfig(in Config conifg);
+
+ /**
+ * API to provide the latest CS procedure enable complete information.
+ */
+ void updateProcedureEnableConfig(in ProcedureEnableConfig procedureEnableConfig);
+
+ /**
+ * API to provide the latest BLE event connection interval.
+ * BLE event connection interval, a multiple of 1.25 ms in the range 7.5 ms to 4.0 s
+ * see BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 6, Part B 4.5.1
+ */
+ void updateBleConnInterval(in int bleConnInterval);
}
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ModeData.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ModeData.aidl
new file mode 100644
index 0000000..99199d2
--- /dev/null
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ModeData.aidl
@@ -0,0 +1,36 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+
+import android.hardware.bluetooth.ranging.ModeOneData;
+import android.hardware.bluetooth.ranging.ModeThreeData;
+import android.hardware.bluetooth.ranging.ModeTwoData;
+import android.hardware.bluetooth.ranging.ModeZeroData;
+
+/**
+ * Mode specific data for a CS step of Channel Sounding.
+ * See BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 4, Part E 7.7.65.44 for details.
+ *
+ * Specification: https://www.bluetooth.com/specifications/specs/core60-html/
+ */
+@VintfStability
+union ModeData {
+ ModeZeroData modeZeroData;
+ ModeOneData modeOneData;
+ ModeTwoData modeTwoData;
+ ModeThreeData modeThreeData;
+}
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ModeOneData.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ModeOneData.aidl
new file mode 100644
index 0000000..51e8c70
--- /dev/null
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ModeOneData.aidl
@@ -0,0 +1,75 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+
+import android.hardware.bluetooth.ranging.Nadm;
+import android.hardware.bluetooth.ranging.PctIQSample;
+import android.hardware.bluetooth.ranging.RttToaTodData;
+
+/**
+ * Mode 1 data for a CS step of Channel Sounding.
+ * See BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 4, Part E 7.7.65.44 for details.
+ *
+ * Specification: https://www.bluetooth.com/specifications/specs/core60-html/
+ */
+@VintfStability
+parcelable ModeOneData {
+ const byte FLAG_CS_ACCESS_ADDR_SUCCESS = 0x0;
+ const byte FLAG_CS_ACCESS_ADDR_ERRORS = 0x1;
+ const byte FLAG_CS_ACCESS_ADDR_NOT_FOUND = 0x2;
+ const byte FLAG_CS_ACCESS_ADDR_MASK = 0xF; // bit 3 is reserved
+ const byte RANDOM_OR_SOUNDING_SEQUENCE_ERROR_COUNT_SHIFT = 4;
+ /**
+ * bits 0 to 3:
+ * ** 0x0 = CS Access Address check is successful, and all bits match the expected sequence
+ * ** 0x1 = CS Access Address check contains one or more bit errors
+ * ** 0x2 = CS Access Address not found
+ * bits 4 to 7: Number of bit errors being reported on the payload with a random or sounding
+ * sequence. Value 0 may indicate zero bit errors or no report available.
+ * Value 15 may indicate 15 or more bit errors.
+ */
+ byte packetQuality;
+ /**
+ * Normalized Attack Detector Metric.
+ */
+ Nadm packetNadm;
+ const byte PACKET_RSSI_UNAVAILABLE = 0x7Fu8;
+ /**
+ * Range: -127 to +20
+ * Unit: dBm
+ * Value: 0x7F - RSSI is not available
+ */
+ byte packetRssiDbm = PACKET_RSSI_UNAVAILABLE;
+ /**
+ * Time difference of the time of arrival and the time of depature of the CS packets.
+ * see RttToaTodData for details.
+ */
+ RttToaTodData rttToaTodData;
+ /**
+ * Antenna identifier used for the RTT packet
+ * Value: 0x01 to 0x04
+ */
+ byte packetAntenna;
+ /**
+ * Phase Correction Term 1 of the sounding sequence.
+ */
+ @nullable PctIQSample packetPct1;
+ /**
+ * Phase Correction Term 2 of the sounding sequence.
+ */
+ @nullable PctIQSample packetPct2;
+}
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ModeThreeData.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ModeThreeData.aidl
new file mode 100644
index 0000000..a70d371
--- /dev/null
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ModeThreeData.aidl
@@ -0,0 +1,32 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+
+import android.hardware.bluetooth.ranging.ModeOneData;
+import android.hardware.bluetooth.ranging.ModeTwoData;
+
+/**
+ * Mode 3 data for a CS step of Channel Sounding.
+ * See BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 4, Part E 7.7.65.44 for details.
+ *
+ * Specification: https://www.bluetooth.com/specifications/specs/core60-html/
+ */
+@VintfStability
+parcelable ModeThreeData {
+ ModeOneData modeOneData;
+ ModeTwoData modeTwoData;
+}
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ModeTwoData.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ModeTwoData.aidl
new file mode 100644
index 0000000..b360c90
--- /dev/null
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ModeTwoData.aidl
@@ -0,0 +1,64 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+
+import android.hardware.bluetooth.ranging.PctIQSample;
+
+/**
+ * Mode 2 data for a CS step of Channel Sounding.
+ * See BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 4, Part E 7.7.65.44 for details.
+ *
+ * Specification: https://www.bluetooth.com/specifications/specs/core60-html/
+ */
+@VintfStability
+parcelable ModeTwoData {
+ /**
+ * Antenna Permutation Index for the chosen Num_Antenna_Paths parameter used during the
+ * phase measurement stage of the CS step
+ */
+ byte antennaPermutationIndex;
+ /**
+ * The I and Q sample of Phase Correction Term for (Num_Antenna_Paths + 1) CS tone
+ * The order is the same as the BT core defined
+ */
+ PctIQSample[] tonePctIQSamples;
+
+ const int TONE_QUALITY_HIGH = 0x0;
+ const int TONE_QUALITY_MEDIUM = 0x1;
+ const int TONE_QUALITY_LOW = 0x2;
+ const int TONE_QUALITY_UNAVAILABLE = 0x3;
+ const int EXTENSION_SLOT_NONE = 0x0;
+ const int EXTENSION_SLOT_TONE_NOT_EXPECTED_TO_BE_PRESENT = 0x1;
+ const int EXTENSION_SLOT_TONE_EXPECTED_TO_BE_PRESENT = 0x2;
+ /**
+ * Shift amount for extension slot (bits 4 to 7).
+ */
+ const int EXTENSION_SLOT_SHIFT = 4;
+ /**
+ * Tone quality indicator for (Num_Antenna_Paths + 1) CS tone
+ * bits 0 to 3:
+ * ** 0x0 = Tone quality is high
+ * ** 0x1 = Tone quality is medium
+ * ** 0x2 = Tone quality is low
+ * ** 0x3 = Tone quality is unavailable
+ * bits 4 to 7:
+ * ** 0x0 = Not tone extension slot
+ * ** 0x1 = Tone extension slot; tone not expected to be present
+ * ** 0x2 = Tone extension slot; tone expected to be present
+ */
+ byte[] toneQualityIndicators;
+}
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ModeZeroData.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ModeZeroData.aidl
new file mode 100644
index 0000000..6f326d1
--- /dev/null
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ModeZeroData.aidl
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2023 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.bluetooth.ranging;
+
+/**
+ * Mode 0 data for a CS step of Channel Sounding.
+ * See BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 4, Part E 7.7.65.44 for details.
+ *
+ * Specification: https://www.bluetooth.com/specifications/specs/core60-html/
+ */
+@VintfStability
+parcelable ModeZeroData {
+ const byte FLAG_CS_ACCESS_ADDR_SUCCESS = 0x0;
+ const byte FLAG_CS_ACCESS_ADDR_ERRORS = 0x1;
+ const byte FLAG_CS_ACCESS_ADDR_NOT_FOUND = 0x2;
+ const byte FLAG_CS_ACCESS_ADDR_MASK = 0xF; // bit 3 is reserved
+ const byte RANDOM_OR_SOUNDING_SEQUENCE_ERROR_COUNT_SHIFT = 4;
+ /**
+ * bits 0 to 3:
+ * ** 0x0 = CS Access Address check is successful, and all bits match the expected sequence
+ * ** 0x1 = CS Access Address check contains one or more bit errors
+ * ** 0x2 = CS Access Address not found
+ * bits 4 to 7: Number of bit errors being reported on the payload with a random or sounding
+ * sequence. Value 0 may indicate zero bit errors or no report available.
+ * Value 15 may indicate 15 or more bit errors.
+ */
+ byte packetQuality;
+ const byte PACKET_RSSI_UNAVAILABLE = 0x7Fu8;
+ /**
+ * Range: -127 to +20
+ * Unit: dBm
+ * Value: 0x7F - RSSI is not available
+ */
+ byte packetRssiDbm = PACKET_RSSI_UNAVAILABLE;
+ /**
+ * Antenna identifier used for the RTT packet
+ * Value: 0x01 to 0x04
+ */
+ byte packetAntenna;
+ const int MEASURED_FREQ_OFFSET_UNAVAILABLE = 0xFFFFC000;
+ /**
+ * Measured frequency offset in units of 0.01 ppm (15-bit signed integer, it had been converted
+ * as int here.) for initiator, this should be ignored for relector.
+ * Range: -100 ppm (0x58F0) to +100 ppm (0x2710)
+ * Unit: 0.01 ppm
+ * Value: 0xFFFFC000 - Frequency offset is not available
+ */
+ int initiatorMeasuredFreqOffset = MEASURED_FREQ_OFFSET_UNAVAILABLE;
+}
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/PctIQSample.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/PctIQSample.aidl
new file mode 100644
index 0000000..81da870
--- /dev/null
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/PctIQSample.aidl
@@ -0,0 +1,35 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+
+/**
+ * I and Q sample data of PCT.
+ * See BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 4, Part E 7.7.65.44 for details.
+ *
+ * Specification: https://www.bluetooth.com/specifications/specs/core60-html/
+ *
+ * BT core defines the I and Q sample as following, they were converted to 2 integers here.
+ * ** bits 0 to 11 are the I sample with type sint12
+ * ** bits 12 to 23 are the Q sample with type sint12
+ */
+@VintfStability
+parcelable PctIQSample {
+ const int SAMPLE_UNAVAILABLE = 0xFFFFFFFF;
+
+ int iSample = SAMPLE_UNAVAILABLE;
+ int qSample = SAMPLE_UNAVAILABLE;
+}
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ProcedureAbortReason.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ProcedureAbortReason.aidl
new file mode 100644
index 0000000..e8b520a
--- /dev/null
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ProcedureAbortReason.aidl
@@ -0,0 +1,33 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+
+/**
+ * Procedure abort reason of Channel Sounding.
+ * See BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 4, Part E 7.7.65.42 for details.
+ *
+ * Specification: https://www.bluetooth.com/specifications/specs/core60-html/
+ */
+@VintfStability
+@Backing(type="byte")
+enum ProcedureAbortReason {
+ SUCCESS = 0x0,
+ LOCAL_OR_REMOTE_REQUEST = 0x01,
+ FILTERED_CHANNEL_MAP_LESS_THAN_15 = 0x02,
+ CHANNEL_MAP_UPDATE_INSTANT_PASSED = 0x03,
+ UNSPECIFIED = 0x0F,
+}
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ProcedureEnableConfig.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ProcedureEnableConfig.aidl
new file mode 100644
index 0000000..b97f394
--- /dev/null
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/ProcedureEnableConfig.aidl
@@ -0,0 +1,68 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+
+/**
+ * LE CS Procedure Enable Complete data
+ * See BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 4, Part E 7.7.65.43 for details.
+ *
+ * Specification: https://www.bluetooth.com/specifications/specs/core60-html/
+ */
+@VintfStability
+parcelable ProcedureEnableConfig {
+ /**
+ * Antenna Configuration Index as described in [Vol 6] Part A, Section 5.3
+ * Value: 0x00 to 0x07
+ */
+ byte toneAntennaConfigSelection;
+ /**
+ * Duration for each CS subevent in microseconds
+ * Value: 1250 μs to 4 s
+ */
+ int subeventLenUs;
+ /**
+ * Number of CS subevents anchored off the same ACL connection event
+ * Value: 0x01 to 0x20
+ */
+ byte subeventsPerEvent;
+ /**
+ * Time between consecutive CS subevents anchored off the same ACL connection event.
+ * Unit: 0.625 ms
+ */
+ int subeventInterval;
+ /**
+ * Number of ACL connection events between consecutive CS event anchor points
+ */
+ int eventInterval;
+ /**
+ * Number of ACL connection events between consecutive CS procedure anchor points
+ */
+ int procedureInterval;
+ /**
+ * Number of CS procedures to be scheduled.
+ * Value: 0x0000 to 0xFFFF
+ * Value 0: CS procedures to continue until disabled
+ */
+ int procedureCount;
+ /**
+ * Maximum duration for each CS procedure
+ * Range: 0x0001 to 0xFFFF
+ * unit: 0.625 ms
+ * Time range: 0.625 ms to 40.959375 s
+ */
+ int maxProcedureLen;
+}
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/RangingResult.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/RangingResult.aidl
index 65907dd..0962527 100644
--- a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/RangingResult.aidl
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/RangingResult.aidl
@@ -17,6 +17,7 @@
package android.hardware.bluetooth.ranging;
import android.hardware.bluetooth.ranging.Nadm;
+import android.hardware.bluetooth.ranging.RangingResultStatus;
/**
* Generic structure to return the ranging result
@@ -90,4 +91,13 @@
* Parameter for vendors to place vendor-specific ranging results data.
*/
@nullable byte[] vendorSpecificCsRangingResultsData;
+ /**
+ * If the result is valid, for e.g. the result was gotten from an aborted procedure.
+ */
+ RangingResultStatus rangingResultStatus;
+ /**
+ * The timestamp of the first subevent with the measured procedure.
+ * see SubeventResultData#timestampNanos
+ */
+ long timestampNanos;
}
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/RangingResultStatus.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/RangingResultStatus.aidl
new file mode 100644
index 0000000..b877af8
--- /dev/null
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/RangingResultStatus.aidl
@@ -0,0 +1,36 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+
+@VintfStability
+@Backing(type="byte")
+enum RangingResultStatus {
+ SUCCESS = 0x00,
+ /**
+ * The procedure of the initiator was aborted
+ */
+ FAIL_INITIATOR_ABORT = 0x01,
+ /**
+ * The procedure of the reflector was aborted
+ */
+ FAIL_REFLECTOR_ABORT = 0x02,
+ /**
+ * The procedure of both the initiator and the reflector were aborted
+ */
+ FAIL_BOTH_ABORT = 0x03,
+ FAIL_UNSPECIFIED = 0xFFu8,
+}
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/RttToaTodData.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/RttToaTodData.aidl
new file mode 100644
index 0000000..c2a48e4
--- /dev/null
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/RttToaTodData.aidl
@@ -0,0 +1,44 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+
+/**
+ * The ToA/ToD data for the initator or reflector.
+ * See BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 4, Part E 7.7.65.44 for details.
+ *
+ * Specification: https://www.bluetooth.com/specifications/specs/core60-html/
+ */
+@VintfStability
+union RttToaTodData {
+ const int TOA_TOD_UNAVAILABLE = 0xFFFF8000;
+ /**
+ * Time difference in units of 0.5 nanoseconds between the time of arrival and
+ * the time of departure of the CS packets at the initiator during a CS step
+ * (16-bit signed integer, it had been converted to 'int' here), where the known
+ * nominal offsets are excluded.
+ * value: 0xFFFF8000 (0x8000 as signed 16-bit) - Time difference is not available
+ */
+ int toaTodInitiator = TOA_TOD_UNAVAILABLE;
+ /**
+ * Time difference in units of 0.5 nanoseconds between the time of departure
+ * and the time of arrival of the CS packets at the reflector during a CS step
+ * (16-bit signed integer, it had been converted to 'int' here), where the known
+ * nominal offsets are excluded.
+ * value: 0xFFFF8000 (0x8000 as signed 16-bit) - Time difference is not available
+ */
+ int todToaReflector = TOA_TOD_UNAVAILABLE;
+}
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/StepData.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/StepData.aidl
new file mode 100644
index 0000000..4006415
--- /dev/null
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/StepData.aidl
@@ -0,0 +1,37 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+
+import android.hardware.bluetooth.ranging.ModeData;
+import android.hardware.bluetooth.ranging.ModeType;
+
+/**
+ * The data for a CS step of Channel Sounding.
+ * See BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 4, Part E 7.7.65.44 for details.
+ *
+ * Specification: https://www.bluetooth.com/specifications/specs/core60-html/
+ */
+@VintfStability
+parcelable StepData {
+ /**
+ * CS channel index
+ * Value: 0x00 to 0x4E
+ */
+ byte stepChannel;
+ ModeType stepMode;
+ ModeData stepModeData;
+}
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/StepTonePct.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/StepTonePct.aidl
index 4650861..af25a11 100644
--- a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/StepTonePct.aidl
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/StepTonePct.aidl
@@ -20,6 +20,7 @@
/**
* Tone PCT data with quality indicator from a mode-2 or mode-3 step.
+ * @deprecated use ModeTwoData
*/
@VintfStability
parcelable StepTonePct {
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/SubeventAbortReason.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/SubeventAbortReason.aidl
new file mode 100644
index 0000000..bef87e8
--- /dev/null
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/SubeventAbortReason.aidl
@@ -0,0 +1,33 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+
+/**
+ * The subevent abort reason of Channel Sounding.
+ * See BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 4, Part E 7.7.65.42 for details.
+ *
+ * Specification: https://www.bluetooth.com/specifications/specs/core60-html/
+ */
+@VintfStability
+@Backing(type="byte")
+enum SubeventAbortReason {
+ SUCCESS = 0x0,
+ LOCAL_OR_REMOTE_REQUEST = 0x01,
+ NO_CS_SYNC_RECEIVED = 0x02,
+ SCHEDULING_CONFLICTS_OR_LIMITED_RESOURCES = 0x03,
+ UNSPECIFIED = 0x0F,
+}
diff --git a/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/SubeventResultData.aidl b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/SubeventResultData.aidl
new file mode 100644
index 0000000..102d217
--- /dev/null
+++ b/bluetooth/ranging/aidl/android/hardware/bluetooth/ranging/SubeventResultData.aidl
@@ -0,0 +1,66 @@
+/*
+ * Copyright 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.bluetooth.ranging;
+
+import android.hardware.bluetooth.ranging.StepData;
+import android.hardware.bluetooth.ranging.SubeventAbortReason;
+
+/**
+ * The subevent data within a CS procedure of Channel Sounding.
+ * See BLUETOOTH CORE SPECIFICATION Version 6.0 | Vol 4, Part E 7.7.65.44 for details.
+ *
+ * Specification: https://www.bluetooth.com/specifications/specs/core60-html/
+ */
+@VintfStability
+parcelable SubeventResultData {
+ /**
+ * Starting ACL connection event counter for the results reported in the event
+ */
+ int startAclConnEventCounter;
+ const int FREQ_COMPENSATION_UNAVAILABLE = 0xFFFFC000;
+ /**
+ * Frequency compensation value in units of 0.01 ppm (15-bit signed integer, it had been
+ * converted as int here.)
+ * Unit: 0.01 ppm
+ * 0xFFFFC000 - Frequency compensation value is not available, or the role is not initiator
+ */
+ int frequencyCompensation = FREQ_COMPENSATION_UNAVAILABLE;
+ /**
+ * Reference power level
+ * Range: -127 to 20
+ * Unit: dBm
+ */
+ byte referencePowerLevelDbm;
+ /**
+ * 0x00 Ignored because phase measurement does not occur during the CS step
+ * 0x01 to 0x04 Number of antenna paths used during the phase measurement stage of the CS step
+ */
+ byte numAntennaPaths;
+ /**
+ * Indicates the abort reason
+ */
+ SubeventAbortReason subeventAbortReason;
+ /**
+ * The measured data for all steps
+ */
+ StepData[] stepData;
+ /**
+ * Timestamp when all subevent data are received by the host; Not defined by the spec.
+ * Using epoch time in nano seconds (e.g., 1697673127175).
+ */
+ long timestampNanos;
+}
diff --git a/bluetooth/ranging/aidl/default/Android.bp b/bluetooth/ranging/aidl/default/Android.bp
index 5072a43..0912a4f 100644
--- a/bluetooth/ranging/aidl/default/Android.bp
+++ b/bluetooth/ranging/aidl/default/Android.bp
@@ -14,7 +14,7 @@
"service.cpp",
],
shared_libs: [
- "android.hardware.bluetooth.ranging-V1-ndk",
+ "android.hardware.bluetooth.ranging-V2-ndk",
"libbase",
"libbinder_ndk",
"libhidlbase",
diff --git a/bluetooth/ranging/aidl/default/BluetoothChannelSounding.cpp b/bluetooth/ranging/aidl/default/BluetoothChannelSounding.cpp
index 3807d4f..e2a8693 100644
--- a/bluetooth/ranging/aidl/default/BluetoothChannelSounding.cpp
+++ b/bluetooth/ranging/aidl/default/BluetoothChannelSounding.cpp
@@ -55,4 +55,11 @@
*_aidl_return = session;
return ::ndk::ScopedAStatus::ok();
}
+
+ndk::ScopedAStatus BluetoothChannelSounding::getSupportedCsSecurityLevels(
+ std::vector<CsSecurityLevel>* _aidl_return) {
+ std::vector<CsSecurityLevel> supported_security_levels = {};
+ *_aidl_return = supported_security_levels;
+ return ::ndk::ScopedAStatus::ok();
+}
} // namespace aidl::android::hardware::bluetooth::ranging::impl
diff --git a/bluetooth/ranging/aidl/default/BluetoothChannelSounding.h b/bluetooth/ranging/aidl/default/BluetoothChannelSounding.h
index d6b5c03..43232fa 100644
--- a/bluetooth/ranging/aidl/default/BluetoothChannelSounding.h
+++ b/bluetooth/ranging/aidl/default/BluetoothChannelSounding.h
@@ -47,6 +47,8 @@
const std::shared_ptr<IBluetoothChannelSoundingSessionCallback>&
in_callback,
std::shared_ptr<IBluetoothChannelSoundingSession>* _aidl_return) override;
+ ndk::ScopedAStatus getSupportedCsSecurityLevels(
+ std::vector<CsSecurityLevel>* _aidl_return) override;
};
} // namespace aidl::android::hardware::bluetooth::ranging::impl
diff --git a/bluetooth/ranging/aidl/default/BluetoothChannelSoundingSession.cpp b/bluetooth/ranging/aidl/default/BluetoothChannelSoundingSession.cpp
index 6c58a07..bfdd5b6 100644
--- a/bluetooth/ranging/aidl/default/BluetoothChannelSoundingSession.cpp
+++ b/bluetooth/ranging/aidl/default/BluetoothChannelSoundingSession.cpp
@@ -52,4 +52,20 @@
callback_->onClose(in_reason);
return ::ndk::ScopedAStatus::ok();
}
+ndk::ScopedAStatus BluetoothChannelSoundingSession::writeProcedureData(
+ const ChannelSoundingProcedureData& /*in_procedureData*/) {
+ return ::ndk::ScopedAStatus::ok();
+}
+ndk::ScopedAStatus BluetoothChannelSoundingSession::updateChannelSoundingConfig(
+ const Config& /*in_config*/) {
+ return ::ndk::ScopedAStatus::ok();
+}
+ndk::ScopedAStatus BluetoothChannelSoundingSession::updateProcedureEnableConfig(
+ const ProcedureEnableConfig& /*in_procedureEnableConfig*/) {
+ return ::ndk::ScopedAStatus::ok();
+}
+ndk::ScopedAStatus BluetoothChannelSoundingSession::updateBleConnInterval(
+ int /*in_bleConnInterval*/) {
+ return ::ndk::ScopedAStatus::ok();
+}
} // namespace aidl::android::hardware::bluetooth::ranging::impl
diff --git a/bluetooth/ranging/aidl/default/BluetoothChannelSoundingSession.h b/bluetooth/ranging/aidl/default/BluetoothChannelSoundingSession.h
index 6703f7f..ae66c7c 100644
--- a/bluetooth/ranging/aidl/default/BluetoothChannelSoundingSession.h
+++ b/bluetooth/ranging/aidl/default/BluetoothChannelSoundingSession.h
@@ -22,6 +22,10 @@
namespace aidl::android::hardware::bluetooth::ranging::impl {
using ::aidl::android::hardware::bluetooth::ranging::ChannelSoudingRawData;
+using ::aidl::android::hardware::bluetooth::ranging::
+ ChannelSoundingProcedureData;
+using ::aidl::android::hardware::bluetooth::ranging::Config;
+using ::aidl::android::hardware::bluetooth::ranging::ProcedureEnableConfig;
using ::aidl::android::hardware::bluetooth::ranging::Reason;
using ::aidl::android::hardware::bluetooth::ranging::ResultType;
using ::aidl::android::hardware::bluetooth::ranging::VendorSpecificData;
@@ -42,6 +46,13 @@
ndk::ScopedAStatus writeRawData(
const ChannelSoudingRawData& in_rawData) override;
ndk::ScopedAStatus close(Reason in_reason) override;
+ ndk::ScopedAStatus writeProcedureData(
+ const ChannelSoundingProcedureData& in_procedureData) override;
+ ndk::ScopedAStatus updateChannelSoundingConfig(
+ const Config& in_config) override;
+ ndk::ScopedAStatus updateProcedureEnableConfig(
+ const ProcedureEnableConfig& in_procedureEnableConfig) override;
+ ndk::ScopedAStatus updateBleConnInterval(int in_bleConnInterval) override;
private:
std::shared_ptr<IBluetoothChannelSoundingSessionCallback> callback_;
diff --git a/bluetooth/ranging/aidl/default/bluetooth-ranging-service-default.xml b/bluetooth/ranging/aidl/default/bluetooth-ranging-service-default.xml
index fe3613d..87adf2c 100644
--- a/bluetooth/ranging/aidl/default/bluetooth-ranging-service-default.xml
+++ b/bluetooth/ranging/aidl/default/bluetooth-ranging-service-default.xml
@@ -1,7 +1,7 @@
<manifest version="1.0" type="device">
<hal format="aidl">
<name>android.hardware.bluetooth.ranging</name>
- <version>1</version>
+ <version>2</version>
<fqname>IBluetoothChannelSounding/default</fqname>
</hal>
</manifest>
diff --git a/camera/device/3.4/default/include/ext_device_v3_4_impl/ExternalCameraDeviceSession.h b/camera/device/3.4/default/include/ext_device_v3_4_impl/ExternalCameraDeviceSession.h
index 184c16e..d92a409 100644
--- a/camera/device/3.4/default/include/ext_device_v3_4_impl/ExternalCameraDeviceSession.h
+++ b/camera/device/3.4/default/include/ext_device_v3_4_impl/ExternalCameraDeviceSession.h
@@ -109,7 +109,7 @@
static const int kMaxProcessedStream = 2;
static const int kMaxStallStream = 1;
- static const uint32_t kMaxBytesPerPixel = 2;
+ static const uint32_t kMaxBytesPerPixel = 3;
class OutputThread : public android::Thread {
public:
diff --git a/camera/device/aidl/Android.bp b/camera/device/aidl/Android.bp
index 48ae34e..291ed0d 100644
--- a/camera/device/aidl/Android.bp
+++ b/camera/device/aidl/Android.bp
@@ -44,7 +44,7 @@
"android.hardware.common.fmq-V1",
"android.hardware.camera.common-V1",
"android.hardware.camera.metadata-V1",
- "android.hardware.graphics.common-V5",
+ "android.hardware.graphics.common-V6",
],
},
{
@@ -54,7 +54,7 @@
"android.hardware.common.fmq-V1",
"android.hardware.camera.common-V1",
"android.hardware.camera.metadata-V2",
- "android.hardware.graphics.common-V5",
+ "android.hardware.graphics.common-V6",
],
},
{
@@ -64,7 +64,7 @@
"android.hardware.common.fmq-V1",
"android.hardware.camera.common-V1",
"android.hardware.camera.metadata-V3",
- "android.hardware.graphics.common-V5",
+ "android.hardware.graphics.common-V6",
],
},
diff --git a/camera/device/default/ExternalCameraDeviceSession.h b/camera/device/default/ExternalCameraDeviceSession.h
index 1c6ed06..ed84931 100644
--- a/camera/device/default/ExternalCameraDeviceSession.h
+++ b/camera/device/default/ExternalCameraDeviceSession.h
@@ -122,7 +122,7 @@
static const int kMaxProcessedStream = 2;
static const int kMaxStallStream = 1;
- static const uint32_t kMaxBytesPerPixel = 2;
+ static const uint32_t kMaxBytesPerPixel = 3;
class BufferRequestThread : public SimpleThread {
public:
diff --git a/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/CameraMetadataSection.aidl b/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/CameraMetadataSection.aidl
index 138101b..5a35915 100644
--- a/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/CameraMetadataSection.aidl
+++ b/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/CameraMetadataSection.aidl
@@ -72,5 +72,6 @@
ANDROID_AUTOMOTIVE_LENS,
ANDROID_EXTENSION,
ANDROID_JPEGR,
+ ANDROID_SHARED_SESSION,
VENDOR_SECTION = 0x8000,
}
diff --git a/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/CameraMetadataSectionStart.aidl b/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/CameraMetadataSectionStart.aidl
index 85eee08..4cdca62 100644
--- a/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/CameraMetadataSectionStart.aidl
+++ b/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/CameraMetadataSectionStart.aidl
@@ -72,5 +72,6 @@
ANDROID_AUTOMOTIVE_LENS_START = (android.hardware.camera.metadata.CameraMetadataSection.ANDROID_AUTOMOTIVE_LENS << 16) /* 2031616 */,
ANDROID_EXTENSION_START = (android.hardware.camera.metadata.CameraMetadataSection.ANDROID_EXTENSION << 16) /* 2097152 */,
ANDROID_JPEGR_START = (android.hardware.camera.metadata.CameraMetadataSection.ANDROID_JPEGR << 16) /* 2162688 */,
+ ANDROID_SHARED_SESSION_START = (android.hardware.camera.metadata.CameraMetadataSection.ANDROID_SHARED_SESSION << 16) /* 2228224 */,
VENDOR_SECTION_START = (android.hardware.camera.metadata.CameraMetadataSection.VENDOR_SECTION << 16) /* -2147483648 */,
}
diff --git a/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/CameraMetadataTag.aidl b/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/CameraMetadataTag.aidl
index 8387c81..2615270 100644
--- a/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/CameraMetadataTag.aidl
+++ b/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/CameraMetadataTag.aidl
@@ -104,6 +104,8 @@
ANDROID_CONTROL_AUTOFRAMING_STATE,
ANDROID_CONTROL_LOW_LIGHT_BOOST_INFO_LUMINANCE_RANGE,
ANDROID_CONTROL_LOW_LIGHT_BOOST_STATE,
+ ANDROID_CONTROL_AE_PRIORITY_MODE = 65597,
+ ANDROID_CONTROL_AE_AVAILABLE_PRIORITY_MODES,
ANDROID_DEMOSAIC_MODE = android.hardware.camera.metadata.CameraMetadataSectionStart.ANDROID_DEMOSAIC_START /* 131072 */,
ANDROID_EDGE_MODE = android.hardware.camera.metadata.CameraMetadataSectionStart.ANDROID_EDGE_START /* 196608 */,
ANDROID_EDGE_STRENGTH,
@@ -347,10 +349,17 @@
ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION,
ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION,
ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS_MAXIMUM_RESOLUTION,
+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS,
+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_MIN_FRAME_DURATIONS,
+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STALL_DURATIONS,
+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION,
+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION,
+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STALL_DURATIONS_MAXIMUM_RESOLUTION,
ANDROID_HEIC_INFO_SUPPORTED = android.hardware.camera.metadata.CameraMetadataSectionStart.ANDROID_HEIC_INFO_START /* 1900544 */,
ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT,
ANDROID_AUTOMOTIVE_LOCATION = android.hardware.camera.metadata.CameraMetadataSectionStart.ANDROID_AUTOMOTIVE_START /* 1966080 */,
ANDROID_AUTOMOTIVE_LENS_FACING = android.hardware.camera.metadata.CameraMetadataSectionStart.ANDROID_AUTOMOTIVE_LENS_START /* 2031616 */,
+ ANDROID_EXTENSION_NIGHT_MODE_INDICATOR = 2097154,
ANDROID_JPEGR_AVAILABLE_JPEG_R_STREAM_CONFIGURATIONS = android.hardware.camera.metadata.CameraMetadataSectionStart.ANDROID_JPEGR_START /* 2162688 */,
ANDROID_JPEGR_AVAILABLE_JPEG_R_MIN_FRAME_DURATIONS,
ANDROID_JPEGR_AVAILABLE_JPEG_R_STALL_DURATIONS,
diff --git a/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/ControlAePriorityMode.aidl b/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/ControlAePriorityMode.aidl
new file mode 100644
index 0000000..eac2147
--- /dev/null
+++ b/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/ControlAePriorityMode.aidl
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ *//*
+ * Autogenerated from camera metadata definitions in
+ * /system/media/camera/docs/metadata_definitions.xml
+ * *** DO NOT EDIT BY HAND ***
+ */
+///////////////////////////////////////////////////////////////////////////////
+// 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.camera.metadata;
+@Backing(type="int") @VintfStability
+enum ControlAePriorityMode {
+ ANDROID_CONTROL_AE_PRIORITY_MODE_OFF,
+ ANDROID_CONTROL_AE_PRIORITY_MODE_SENSOR_SENSITIVITY_PRIORITY,
+ ANDROID_CONTROL_AE_PRIORITY_MODE_SENSOR_EXPOSURE_TIME_PRIORITY,
+}
diff --git a/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/ExtensionNightModeIndicator.aidl b/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/ExtensionNightModeIndicator.aidl
new file mode 100644
index 0000000..6cfdc02
--- /dev/null
+++ b/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/ExtensionNightModeIndicator.aidl
@@ -0,0 +1,44 @@
+/*
+ * 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.
+ *//*
+ * Autogenerated from camera metadata definitions in
+ * /system/media/camera/docs/metadata_definitions.xml
+ * *** DO NOT EDIT BY HAND ***
+ */
+///////////////////////////////////////////////////////////////////////////////
+// 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.camera.metadata;
+@Backing(type="int") @VintfStability
+enum ExtensionNightModeIndicator {
+ ANDROID_EXTENSION_NIGHT_MODE_INDICATOR_UNKNOWN,
+ ANDROID_EXTENSION_NIGHT_MODE_INDICATOR_OFF,
+ ANDROID_EXTENSION_NIGHT_MODE_INDICATOR_ON,
+}
diff --git a/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/HeicAvailableHeicUltraHdrStreamConfigurations.aidl b/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/HeicAvailableHeicUltraHdrStreamConfigurations.aidl
new file mode 100644
index 0000000..339d2fa
--- /dev/null
+++ b/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/HeicAvailableHeicUltraHdrStreamConfigurations.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.
+ *//*
+ * Autogenerated from camera metadata definitions in
+ * /system/media/camera/docs/metadata_definitions.xml
+ * *** DO NOT EDIT BY HAND ***
+ */
+///////////////////////////////////////////////////////////////////////////////
+// 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.camera.metadata;
+@Backing(type="int") @VintfStability
+enum HeicAvailableHeicUltraHdrStreamConfigurations {
+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_OUTPUT,
+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_INPUT,
+}
diff --git a/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/HeicAvailableHeicUltraHdrStreamConfigurationsMaximumResolution.aidl b/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/HeicAvailableHeicUltraHdrStreamConfigurationsMaximumResolution.aidl
new file mode 100644
index 0000000..7755069
--- /dev/null
+++ b/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/HeicAvailableHeicUltraHdrStreamConfigurationsMaximumResolution.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.
+ *//*
+ * Autogenerated from camera metadata definitions in
+ * /system/media/camera/docs/metadata_definitions.xml
+ * *** DO NOT EDIT BY HAND ***
+ */
+///////////////////////////////////////////////////////////////////////////////
+// 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.camera.metadata;
+@Backing(type="int") @VintfStability
+enum HeicAvailableHeicUltraHdrStreamConfigurationsMaximumResolution {
+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_OUTPUT,
+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_INPUT,
+}
diff --git a/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/SensorReadoutTimestamp.aidl b/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/SensorReadoutTimestamp.aidl
index 35dc1a9..11be18e 100644
--- a/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/SensorReadoutTimestamp.aidl
+++ b/camera/metadata/aidl/aidl_api/android.hardware.camera.metadata/current/android/hardware/camera/metadata/SensorReadoutTimestamp.aidl
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2024 The Android Open Source Project
+ * Copyright (C) 2022 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.
diff --git a/camera/metadata/aidl/android/hardware/camera/metadata/CameraMetadataSection.aidl b/camera/metadata/aidl/android/hardware/camera/metadata/CameraMetadataSection.aidl
index 73bcc12..2268dfd 100644
--- a/camera/metadata/aidl/android/hardware/camera/metadata/CameraMetadataSection.aidl
+++ b/camera/metadata/aidl/android/hardware/camera/metadata/CameraMetadataSection.aidl
@@ -63,5 +63,6 @@
ANDROID_AUTOMOTIVE_LENS,
ANDROID_EXTENSION,
ANDROID_JPEGR,
+ ANDROID_SHARED_SESSION,
VENDOR_SECTION = 0x8000,
}
diff --git a/camera/metadata/aidl/android/hardware/camera/metadata/CameraMetadataSectionStart.aidl b/camera/metadata/aidl/android/hardware/camera/metadata/CameraMetadataSectionStart.aidl
index 75e7915..3ec54d4 100644
--- a/camera/metadata/aidl/android/hardware/camera/metadata/CameraMetadataSectionStart.aidl
+++ b/camera/metadata/aidl/android/hardware/camera/metadata/CameraMetadataSectionStart.aidl
@@ -65,5 +65,6 @@
ANDROID_AUTOMOTIVE_LENS_START = CameraMetadataSection.ANDROID_AUTOMOTIVE_LENS << 16,
ANDROID_EXTENSION_START = CameraMetadataSection.ANDROID_EXTENSION << 16,
ANDROID_JPEGR_START = CameraMetadataSection.ANDROID_JPEGR << 16,
+ ANDROID_SHARED_SESSION_START = CameraMetadataSection.ANDROID_SHARED_SESSION << 16,
VENDOR_SECTION_START = CameraMetadataSection.VENDOR_SECTION << 16,
}
diff --git a/camera/metadata/aidl/android/hardware/camera/metadata/CameraMetadataTag.aidl b/camera/metadata/aidl/android/hardware/camera/metadata/CameraMetadataTag.aidl
index 98897a2..66ca912 100644
--- a/camera/metadata/aidl/android/hardware/camera/metadata/CameraMetadataTag.aidl
+++ b/camera/metadata/aidl/android/hardware/camera/metadata/CameraMetadataTag.aidl
@@ -534,6 +534,21 @@
*/
ANDROID_CONTROL_LOW_LIGHT_BOOST_STATE,
/**
+ * android.control.aePriorityMode [dynamic, enum, public]
+ *
+ * <p>Turn on AE priority mode.</p>
+ */
+ ANDROID_CONTROL_AE_PRIORITY_MODE = 65597,
+ /**
+ * android.control.aeAvailablePriorityModes [static, byte[], public]
+ *
+ * <p>List of auto-exposure priority modes for ANDROID_CONTROL_AE_PRIORITY_MODE
+ * that are supported by this camera device.</p>
+ *
+ * @see ANDROID_CONTROL_AE_PRIORITY_MODE
+ */
+ ANDROID_CONTROL_AE_AVAILABLE_PRIORITY_MODES,
+ /**
* android.demosaic.mode [controls, enum, system]
*
* <p>Controls the quality of the demosaicing
@@ -2378,6 +2393,62 @@
*/
ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS_MAXIMUM_RESOLUTION,
/**
+ * android.heic.availableHeicUltraHdrStreamConfigurations [static, enum[], ndk_public]
+ *
+ * <p>The available HEIC (ISO/IEC 23008-12/24) UltraHDR stream
+ * configurations that this camera device supports
+ * (i.e. format, width, height, output/input stream).</p>
+ */
+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS,
+ /**
+ * android.heic.availableHeicUltraHdrMinFrameDurations [static, int64[], ndk_public]
+ *
+ * <p>This lists the minimum frame duration for each
+ * format/size combination for HEIC UltraHDR output formats.</p>
+ */
+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_MIN_FRAME_DURATIONS,
+ /**
+ * android.heic.availableHeicUltraHdrStallDurations [static, int64[], ndk_public]
+ *
+ * <p>This lists the maximum stall duration for each
+ * output format/size combination for HEIC UltraHDR streams.</p>
+ */
+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STALL_DURATIONS,
+ /**
+ * android.heic.availableHeicUltraHdrStreamConfigurationsMaximumResolution [static, enum[], ndk_public]
+ *
+ * <p>The available HEIC (ISO/IEC 23008-12/24) UltraHDR stream
+ * configurations that this camera device supports
+ * (i.e. format, width, height, output/input stream) for CaptureRequests where
+ * ANDROID_SENSOR_PIXEL_MODE is set to
+ * <a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata.html#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION">CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION</a>.</p>
+ *
+ * @see ANDROID_SENSOR_PIXEL_MODE
+ */
+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION,
+ /**
+ * android.heic.availableHeicUltraHdrMinFrameDurationsMaximumResolution [static, int64[], ndk_public]
+ *
+ * <p>This lists the minimum frame duration for each
+ * format/size combination for HEIC UltraHDR output formats for CaptureRequests where
+ * ANDROID_SENSOR_PIXEL_MODE is set to
+ * <a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata.html#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION">CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION</a>.</p>
+ *
+ * @see ANDROID_SENSOR_PIXEL_MODE
+ */
+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_MIN_FRAME_DURATIONS_MAXIMUM_RESOLUTION,
+ /**
+ * android.heic.availableHeicUltraHdrStallDurationsMaximumResolution [static, int64[], ndk_public]
+ *
+ * <p>This lists the maximum stall duration for each
+ * output format/size combination for HEIC UltraHDR streams for CaptureRequests where
+ * ANDROID_SENSOR_PIXEL_MODE is set to
+ * <a href="https://developer.android.com/reference/android/hardware/camera2/CameraMetadata.html#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION">CameraMetadata#SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION</a>.</p>
+ *
+ * @see ANDROID_SENSOR_PIXEL_MODE
+ */
+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STALL_DURATIONS_MAXIMUM_RESOLUTION,
+ /**
* android.heic.info.supported [static, enum, system]
*
* <p>Whether this camera device can support identical set of stream combinations
@@ -2407,6 +2478,13 @@
*/
ANDROID_AUTOMOTIVE_LENS_FACING = CameraMetadataSectionStart.ANDROID_AUTOMOTIVE_LENS_START,
/**
+ * android.extension.nightModeIndicator [dynamic, enum, public]
+ *
+ * <p>Indicates when to activate Night Mode Camera Extension for high-quality
+ * still captures in low-light conditions.</p>
+ */
+ ANDROID_EXTENSION_NIGHT_MODE_INDICATOR = 2097154,
+ /**
* android.jpegr.availableJpegRStreamConfigurations [static, enum[], ndk_public]
*
* <p>The available Jpeg/R stream
diff --git a/camera/metadata/aidl/android/hardware/camera/metadata/ControlAePriorityMode.aidl b/camera/metadata/aidl/android/hardware/camera/metadata/ControlAePriorityMode.aidl
new file mode 100644
index 0000000..fd4f531
--- /dev/null
+++ b/camera/metadata/aidl/android/hardware/camera/metadata/ControlAePriorityMode.aidl
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ */
+
+/*
+ * Autogenerated from camera metadata definitions in
+ * /system/media/camera/docs/metadata_definitions.xml
+ * *** DO NOT EDIT BY HAND ***
+ */
+
+package android.hardware.camera.metadata;
+
+/**
+ * android.control.aePriorityMode enumeration values
+ * @see ANDROID_CONTROL_AE_PRIORITY_MODE
+ * See system/media/camera/docs/metadata_definitions.xml for details.
+ */
+@VintfStability
+@Backing(type="int")
+enum ControlAePriorityMode {
+ ANDROID_CONTROL_AE_PRIORITY_MODE_OFF,
+ ANDROID_CONTROL_AE_PRIORITY_MODE_SENSOR_SENSITIVITY_PRIORITY,
+ ANDROID_CONTROL_AE_PRIORITY_MODE_SENSOR_EXPOSURE_TIME_PRIORITY,
+}
diff --git a/camera/metadata/aidl/android/hardware/camera/metadata/ExtensionNightModeIndicator.aidl b/camera/metadata/aidl/android/hardware/camera/metadata/ExtensionNightModeIndicator.aidl
new file mode 100644
index 0000000..3c3bdf5
--- /dev/null
+++ b/camera/metadata/aidl/android/hardware/camera/metadata/ExtensionNightModeIndicator.aidl
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ */
+
+/*
+ * Autogenerated from camera metadata definitions in
+ * /system/media/camera/docs/metadata_definitions.xml
+ * *** DO NOT EDIT BY HAND ***
+ */
+
+package android.hardware.camera.metadata;
+
+/**
+ * android.extension.nightModeIndicator enumeration values
+ * @see ANDROID_EXTENSION_NIGHT_MODE_INDICATOR
+ * See system/media/camera/docs/metadata_definitions.xml for details.
+ */
+@VintfStability
+@Backing(type="int")
+enum ExtensionNightModeIndicator {
+ ANDROID_EXTENSION_NIGHT_MODE_INDICATOR_UNKNOWN,
+ ANDROID_EXTENSION_NIGHT_MODE_INDICATOR_OFF,
+ ANDROID_EXTENSION_NIGHT_MODE_INDICATOR_ON,
+}
diff --git a/camera/metadata/aidl/android/hardware/camera/metadata/HeicAvailableHeicUltraHdrStreamConfigurations.aidl b/camera/metadata/aidl/android/hardware/camera/metadata/HeicAvailableHeicUltraHdrStreamConfigurations.aidl
new file mode 100644
index 0000000..56761b9
--- /dev/null
+++ b/camera/metadata/aidl/android/hardware/camera/metadata/HeicAvailableHeicUltraHdrStreamConfigurations.aidl
@@ -0,0 +1,35 @@
+/*
+ * 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.
+ */
+
+/*
+ * Autogenerated from camera metadata definitions in
+ * /system/media/camera/docs/metadata_definitions.xml
+ * *** DO NOT EDIT BY HAND ***
+ */
+
+package android.hardware.camera.metadata;
+
+/**
+ * android.heic.availableHeicUltraHdrStreamConfigurations enumeration values
+ * @see ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS
+ * See system/media/camera/docs/metadata_definitions.xml for details.
+ */
+@VintfStability
+@Backing(type="int")
+enum HeicAvailableHeicUltraHdrStreamConfigurations {
+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_OUTPUT,
+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_INPUT,
+}
diff --git a/camera/metadata/aidl/android/hardware/camera/metadata/HeicAvailableHeicUltraHdrStreamConfigurationsMaximumResolution.aidl b/camera/metadata/aidl/android/hardware/camera/metadata/HeicAvailableHeicUltraHdrStreamConfigurationsMaximumResolution.aidl
new file mode 100644
index 0000000..7fb19dc
--- /dev/null
+++ b/camera/metadata/aidl/android/hardware/camera/metadata/HeicAvailableHeicUltraHdrStreamConfigurationsMaximumResolution.aidl
@@ -0,0 +1,35 @@
+/*
+ * 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.
+ */
+
+/*
+ * Autogenerated from camera metadata definitions in
+ * /system/media/camera/docs/metadata_definitions.xml
+ * *** DO NOT EDIT BY HAND ***
+ */
+
+package android.hardware.camera.metadata;
+
+/**
+ * android.heic.availableHeicUltraHdrStreamConfigurationsMaximumResolution enumeration values
+ * @see ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION
+ * See system/media/camera/docs/metadata_definitions.xml for details.
+ */
+@VintfStability
+@Backing(type="int")
+enum HeicAvailableHeicUltraHdrStreamConfigurationsMaximumResolution {
+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_OUTPUT,
+ ANDROID_HEIC_AVAILABLE_HEIC_ULTRA_HDR_STREAM_CONFIGURATIONS_MAXIMUM_RESOLUTION_INPUT,
+}
diff --git a/camera/provider/aidl/vts/VtsAidlHalCameraProvider_TargetTest.cpp b/camera/provider/aidl/vts/VtsAidlHalCameraProvider_TargetTest.cpp
index 9fa4df2..ec61eec 100644
--- a/camera/provider/aidl/vts/VtsAidlHalCameraProvider_TargetTest.cpp
+++ b/camera/provider/aidl/vts/VtsAidlHalCameraProvider_TargetTest.cpp
@@ -118,7 +118,8 @@
ScopedAStatus ret = mProvider->setCallback(cb);
ASSERT_TRUE(ret.isOk());
ret = mProvider->setCallback(nullptr);
- ASSERT_EQ(static_cast<int32_t>(Status::ILLEGAL_ARGUMENT), ret.getServiceSpecificError());
+ ASSERT_TRUE(static_cast<int32_t>(Status::ILLEGAL_ARGUMENT) == ret.getServiceSpecificError() ||
+ EX_NULL_POINTER == ret.getExceptionCode());
}
// Test if ICameraProvider::getCameraDeviceInterface returns Status::OK and non-null device
diff --git a/compatibility_matrices/compatibility_matrix.202504.xml b/compatibility_matrices/compatibility_matrix.202504.xml
index 9f6e283..b3a3778 100644
--- a/compatibility_matrices/compatibility_matrix.202504.xml
+++ b/compatibility_matrices/compatibility_matrix.202504.xml
@@ -132,7 +132,7 @@
</hal>
<hal format="aidl">
<name>android.hardware.bluetooth.ranging</name>
- <version>1</version>
+ <version>1-2</version>
<interface>
<name>IBluetoothChannelSounding</name>
<instance>default</instance>
@@ -225,7 +225,7 @@
</hal>
<hal format="aidl">
<name>android.hardware.gnss</name>
- <version>2-4</version>
+ <version>2-5</version>
<interface>
<name>IGnss</name>
<instance>default</instance>
@@ -388,7 +388,7 @@
</hal>
<hal format="aidl">
<name>android.hardware.radio.config</name>
- <version>3</version>
+ <version>3-4</version>
<interface>
<name>IRadioConfig</name>
<instance>default</instance>
@@ -406,7 +406,7 @@
</hal>
<hal format="aidl">
<name>android.hardware.radio.messaging</name>
- <version>3</version>
+ <version>3-4</version>
<interface>
<name>IRadioMessaging</name>
<instance>slot1</instance>
@@ -416,7 +416,7 @@
</hal>
<hal format="aidl">
<name>android.hardware.radio.modem</name>
- <version>3</version>
+ <version>3-4</version>
<interface>
<name>IRadioModem</name>
<instance>slot1</instance>
@@ -426,7 +426,7 @@
</hal>
<hal format="aidl">
<name>android.hardware.radio.network</name>
- <version>3</version>
+ <version>3-4</version>
<interface>
<name>IRadioNetwork</name>
<instance>slot1</instance>
@@ -436,7 +436,7 @@
</hal>
<hal format="aidl">
<name>android.hardware.radio.sim</name>
- <version>3</version>
+ <version>3-4</version>
<interface>
<name>IRadioSim</name>
<instance>slot1</instance>
@@ -456,7 +456,7 @@
</hal>
<hal format="aidl">
<name>android.hardware.radio.voice</name>
- <version>3</version>
+ <version>3-4</version>
<interface>
<name>IRadioVoice</name>
<instance>slot1</instance>
@@ -466,7 +466,7 @@
</hal>
<hal format="aidl">
<name>android.hardware.radio.ims</name>
- <version>2</version>
+ <version>2-3</version>
<interface>
<name>IRadioIms</name>
<instance>slot1</instance>
diff --git a/compatibility_matrices/exclude/fcm_exclude.cpp b/compatibility_matrices/exclude/fcm_exclude.cpp
index e7a31e6..eabb603 100644
--- a/compatibility_matrices/exclude/fcm_exclude.cpp
+++ b/compatibility_matrices/exclude/fcm_exclude.cpp
@@ -140,6 +140,7 @@
"android.hardware.camera.common@",
"android.hardware.common@",
"android.hardware.common.fmq@",
+ "android.hardware.gnss.gnss_assistance@",
"android.hardware.gnss.measurement_corrections@",
"android.hardware.gnss.visibility_control@",
"android.hardware.graphics.common@",
diff --git a/contexthub/OWNERS b/contexthub/OWNERS
index f35961a..ccd385b 100644
--- a/contexthub/OWNERS
+++ b/contexthub/OWNERS
@@ -1,2 +1,3 @@
# Bug component: 156070
bduddie@google.com
+arthuri@google.com
diff --git a/contexthub/aidl/default/Android.bp b/contexthub/aidl/default/Android.bp
index da173f9..c0b147c 100644
--- a/contexthub/aidl/default/Android.bp
+++ b/contexthub/aidl/default/Android.bp
@@ -30,6 +30,7 @@
shared_libs: [
"libbase",
"libbinder_ndk",
+ "liblog",
"android.hardware.contexthub-V4-ndk",
],
export_include_dirs: ["include"],
@@ -51,6 +52,7 @@
shared_libs: [
"libbase",
"libbinder_ndk",
+ "liblog",
"android.hardware.contexthub-V4-ndk",
],
static_libs: [
diff --git a/contexthub/aidl/default/ContextHub.cpp b/contexthub/aidl/default/ContextHub.cpp
index 5713a1b..4ae9c09 100644
--- a/contexthub/aidl/default/ContextHub.cpp
+++ b/contexthub/aidl/default/ContextHub.cpp
@@ -16,10 +16,54 @@
#include "contexthub-impl/ContextHub.h"
-namespace aidl::android::hardware::contexthub {
+#ifndef LOG_TAG
+#define LOG_TAG "CHRE"
+#endif
+
+#include <inttypes.h>
+#include <log/log.h>
using ::ndk::ScopedAStatus;
+namespace aidl::android::hardware::contexthub {
+
+namespace {
+
+constexpr uint64_t kMockVendorHubId = 0x1234567812345678;
+constexpr uint64_t kMockVendorHub2Id = 0x0EADBEEFDEADBEEF;
+
+// Mock endpoints for the default implementation.
+// These endpoints just echo back any messages sent to them.
+constexpr size_t kMockEndpointCount = 4;
+const EndpointInfo kMockEndpointInfos[kMockEndpointCount] = {
+ {
+ .id = {.hubId = kMockVendorHubId, .id = UINT64_C(0x1)},
+ .type = EndpointInfo::EndpointType::GENERIC,
+ .name = "Mock Endpoint 1",
+ .version = 1,
+ },
+ {
+ .id = {.hubId = kMockVendorHubId, .id = UINT64_C(0x2)},
+ .type = EndpointInfo::EndpointType::GENERIC,
+ .name = "Mock Endpoint 2",
+ .version = 2,
+ },
+ {
+ .id = {.hubId = kMockVendorHub2Id, .id = UINT64_C(0x1)},
+ .type = EndpointInfo::EndpointType::GENERIC,
+ .name = "Mock Endpoint 3",
+ .version = 1,
+ },
+ {
+ .id = {.hubId = kMockVendorHub2Id, .id = UINT64_C(0x2)},
+ .type = EndpointInfo::EndpointType::GENERIC,
+ .name = "Mock Endpoint 4",
+ .version = 2,
+ },
+};
+
+} // anonymous namespace
+
ScopedAStatus ContextHub::getContextHubs(std::vector<ContextHubInfo>* out_contextHubInfos) {
ContextHubInfo hub = {};
hub.name = "Mock Context Hub";
@@ -112,7 +156,13 @@
}
}
-ScopedAStatus ContextHub::setTestMode(bool /* enable */) {
+ScopedAStatus ContextHub::setTestMode(bool enable) {
+ if (enable) {
+ std::unique_lock<std::mutex> lock(mEndpointMutex);
+ mEndpoints.clear();
+ mEndpointSessions.clear();
+ mEndpointCallback = nullptr;
+ }
return ScopedAStatus::ok();
}
@@ -137,6 +187,10 @@
}
ScopedAStatus ContextHub::getHubs(std::vector<HubInfo>* _aidl_return) {
+ if (_aidl_return == nullptr) {
+ return ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
+ }
+
ContextHubInfo hub = {};
hub.name = "Mock Context Hub";
hub.vendor = "AOSP";
@@ -158,61 +212,217 @@
vendorHub.version = 42;
HubInfo hubInfo2 = {};
- hubInfo1.hubId = UINT64_C(0x1234567812345678);
- hubInfo1.hubDetails =
+ hubInfo2.hubId = kMockVendorHubId;
+ hubInfo2.hubDetails =
HubInfo::HubDetails::make<HubInfo::HubDetails::Tag::vendorHubInfo>(vendorHub);
+ VendorHubInfo vendorHub2 = {};
+ vendorHub2.name = "Mock Vendor Hub 2";
+ vendorHub2.version = 24;
+
+ HubInfo hubInfo3 = {};
+ hubInfo3.hubId = kMockVendorHub2Id;
+ hubInfo3.hubDetails =
+ HubInfo::HubDetails::make<HubInfo::HubDetails::Tag::vendorHubInfo>(vendorHub2);
+
_aidl_return->push_back(hubInfo1);
_aidl_return->push_back(hubInfo2);
+ _aidl_return->push_back(hubInfo3);
return ScopedAStatus::ok();
};
-ScopedAStatus ContextHub::getEndpoints(std::vector<EndpointInfo>* /* _aidl_return */) {
- return ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
+ScopedAStatus ContextHub::getEndpoints(std::vector<EndpointInfo>* _aidl_return) {
+ if (_aidl_return == nullptr) {
+ return ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
+ }
+
+ Service echoService;
+ echoService.format = Service::RpcFormat::CUSTOM;
+ echoService.serviceDescriptor = "ECHO";
+ echoService.majorVersion = 1;
+ echoService.minorVersion = 0;
+
+ for (const EndpointInfo& endpoint : kMockEndpointInfos) {
+ EndpointInfo endpointWithService(endpoint);
+ endpointWithService.services.push_back(echoService);
+ _aidl_return->push_back(std::move(endpointWithService));
+ }
+
+ return ScopedAStatus::ok();
};
-ScopedAStatus ContextHub::registerEndpoint(const EndpointInfo& /* in_endpoint */) {
- return ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
+ScopedAStatus ContextHub::registerEndpoint(const EndpointInfo& in_endpoint) {
+ std::unique_lock<std::mutex> lock(mEndpointMutex);
+
+ for (const EndpointInfo& endpoint : mEndpoints) {
+ if ((endpoint.id.id == in_endpoint.id.id && endpoint.id.hubId == in_endpoint.id.hubId) ||
+ endpoint.name == in_endpoint.name) {
+ return ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
+ }
+ }
+ mEndpoints.push_back(in_endpoint);
+ return ScopedAStatus::ok();
};
-ScopedAStatus ContextHub::unregisterEndpoint(const EndpointInfo& /* in_endpoint */) {
- return ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
+ScopedAStatus ContextHub::unregisterEndpoint(const EndpointInfo& in_endpoint) {
+ std::unique_lock<std::mutex> lock(mEndpointMutex);
+
+ for (auto it = mEndpoints.begin(); it != mEndpoints.end(); ++it) {
+ if (it->id.id == in_endpoint.id.id && it->id.hubId == in_endpoint.id.hubId) {
+ mEndpoints.erase(it);
+ return ScopedAStatus::ok();
+ }
+ }
+ return ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
};
ScopedAStatus ContextHub::registerEndpointCallback(
- const std::shared_ptr<IEndpointCallback>& /* in_callback */) {
- return ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
+ const std::shared_ptr<IEndpointCallback>& in_callback) {
+ std::unique_lock<std::mutex> lock(mEndpointMutex);
+
+ mEndpointCallback = in_callback;
+ return ScopedAStatus::ok();
};
-ScopedAStatus ContextHub::requestSessionIdRange(int32_t /* in_size */,
- std::vector<int32_t>* /* _aidl_return */) {
- return ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
+ScopedAStatus ContextHub::requestSessionIdRange(int32_t in_size,
+ std::vector<int32_t>* _aidl_return) {
+ constexpr int32_t kMaxSize = 1024;
+ if (in_size > kMaxSize || _aidl_return == nullptr) {
+ return ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
+ }
+
+ {
+ std::lock_guard<std::mutex> lock(mEndpointMutex);
+ mMaxValidSessionId = in_size;
+ }
+
+ _aidl_return->push_back(0);
+ _aidl_return->push_back(in_size);
+ return ScopedAStatus::ok();
};
ScopedAStatus ContextHub::openEndpointSession(
- int32_t /* in_sessionId */, const EndpointId& /* in_destination */,
- const EndpointId& /* in_initiator */,
- const std::optional<std::string>& /* in_serviceDescriptor */) {
- return ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
+ int32_t in_sessionId, const EndpointId& in_destination, const EndpointId& in_initiator,
+ const std::optional<std::string>& in_serviceDescriptor) {
+ // We are not calling onCloseEndpointSession on failure because the remote endpoints (our
+ // mock endpoints) always accept the session.
+
+ std::shared_ptr<IEndpointCallback> callback = nullptr;
+ {
+ std::unique_lock<std::mutex> lock(mEndpointMutex);
+ if (in_sessionId > mMaxValidSessionId) {
+ ALOGE("openEndpointSession: session ID %" PRId32 " is invalid", in_sessionId);
+ return ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
+ }
+
+ for (const EndpointSession& session : mEndpointSessions) {
+ bool sessionAlreadyExists =
+ (session.initiator == in_destination && session.peer == in_initiator) ||
+ (session.peer == in_destination && session.initiator == in_initiator);
+ if (sessionAlreadyExists) {
+ ALOGD("openEndpointSession: session ID %" PRId32 " already exists", in_sessionId);
+ return (session.sessionId == in_sessionId &&
+ session.serviceDescriptor == in_serviceDescriptor)
+ ? ScopedAStatus::ok()
+ : ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
+ } else if (session.sessionId == in_sessionId) {
+ ALOGE("openEndpointSession: session ID %" PRId32 " is invalid: endpoint mismatch",
+ in_sessionId);
+ return ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
+ }
+ }
+
+ // Verify the initiator and destination are valid endpoints
+ bool initiatorIsValid = findEndpoint(in_initiator, mEndpoints.begin(), mEndpoints.end());
+ if (!initiatorIsValid) {
+ ALOGE("openEndpointSession: initiator %" PRIu64 ":%" PRIu64 " is invalid",
+ in_initiator.id, in_initiator.hubId);
+ return ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
+ }
+ bool destinationIsValid = findEndpoint(in_destination, &kMockEndpointInfos[0],
+ &kMockEndpointInfos[kMockEndpointCount]);
+ if (!destinationIsValid) {
+ ALOGE("openEndpointSession: destination %" PRIu64 ":%" PRIu64 " is invalid",
+ in_destination.id, in_destination.hubId);
+ return ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
+ }
+
+ mEndpointSessions.push_back({
+ .sessionId = in_sessionId,
+ .initiator = in_initiator,
+ .peer = in_destination,
+ .serviceDescriptor = in_serviceDescriptor,
+ });
+
+ if (mEndpointCallback != nullptr) {
+ callback = mEndpointCallback;
+ }
+ }
+
+ if (callback != nullptr) {
+ callback->onEndpointSessionOpenComplete(in_sessionId);
+ }
+ return ScopedAStatus::ok();
};
-ScopedAStatus ContextHub::sendMessageToEndpoint(int32_t /* in_sessionId */,
- const Message& /* in_msg */) {
- return ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
+ScopedAStatus ContextHub::sendMessageToEndpoint(int32_t in_sessionId, const Message& in_msg) {
+ bool foundSession = false;
+ std::shared_ptr<IEndpointCallback> callback = nullptr;
+ {
+ std::unique_lock<std::mutex> lock(mEndpointMutex);
+
+ for (const EndpointSession& session : mEndpointSessions) {
+ if (session.sessionId == in_sessionId) {
+ foundSession = true;
+ break;
+ }
+ }
+
+ if (mEndpointCallback != nullptr) {
+ callback = mEndpointCallback;
+ }
+ }
+
+ if (!foundSession) {
+ ALOGE("sendMessageToEndpoint: session ID %" PRId32 " is invalid", in_sessionId);
+ return ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
+ }
+
+ if (callback != nullptr) {
+ if (in_msg.flags & Message::FLAG_REQUIRES_DELIVERY_STATUS) {
+ MessageDeliveryStatus msgStatus = {};
+ msgStatus.messageSequenceNumber = in_msg.sequenceNumber;
+ msgStatus.errorCode = ErrorCode::OK;
+ callback->onMessageDeliveryStatusReceived(in_sessionId, msgStatus);
+ }
+
+ // Echo the message back
+ callback->onMessageReceived(in_sessionId, in_msg);
+ }
+ return ScopedAStatus::ok();
};
ScopedAStatus ContextHub::sendMessageDeliveryStatusToEndpoint(
int32_t /* in_sessionId */, const MessageDeliveryStatus& /* in_msgStatus */) {
- return ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
+ return ScopedAStatus::ok();
};
-ScopedAStatus ContextHub::closeEndpointSession(int32_t /* in_sessionId */, Reason /* in_reason */) {
- return ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
+ScopedAStatus ContextHub::closeEndpointSession(int32_t in_sessionId, Reason /* in_reason */) {
+ std::unique_lock<std::mutex> lock(mEndpointMutex);
+
+ for (auto it = mEndpointSessions.begin(); it != mEndpointSessions.end(); ++it) {
+ if (it->sessionId == in_sessionId) {
+ mEndpointSessions.erase(it);
+ return ScopedAStatus::ok();
+ }
+ }
+ ALOGE("closeEndpointSession: session ID %" PRId32 " is invalid", in_sessionId);
+ return ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
};
ScopedAStatus ContextHub::endpointSessionOpenComplete(int32_t /* in_sessionId */) {
- return ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
+ return ScopedAStatus::ok();
};
} // namespace aidl::android::hardware::contexthub
diff --git a/contexthub/aidl/default/include/contexthub-impl/ContextHub.h b/contexthub/aidl/default/include/contexthub-impl/ContextHub.h
index 5680a77..4968878 100644
--- a/contexthub/aidl/default/include/contexthub-impl/ContextHub.h
+++ b/contexthub/aidl/default/include/contexthub-impl/ContextHub.h
@@ -18,6 +18,7 @@
#include <aidl/android/hardware/contexthub/BnContextHub.h>
+#include <mutex>
#include <unordered_set>
#include <vector>
@@ -72,10 +73,37 @@
::ndk::ScopedAStatus endpointSessionOpenComplete(int32_t in_sessionId) override;
private:
+ struct EndpointSession {
+ int32_t sessionId;
+ EndpointId initiator;
+ EndpointId peer;
+ std::optional<std::string> serviceDescriptor;
+ };
+
static constexpr uint32_t kMockHubId = 0;
+
+ //! Finds an endpoint in the range defined by the endpoints
+ //! @return whether the endpoint was found
+ template <typename Iter>
+ bool findEndpoint(const EndpointId& target, const Iter& begin, const Iter& end) {
+ for (auto iter = begin; iter != end; ++iter) {
+ if (iter->id.id == target.id && iter->id.hubId == target.hubId) {
+ return true;
+ }
+ }
+ return false;
+ }
+
std::shared_ptr<IContextHubCallback> mCallback;
std::unordered_set<char16_t> mConnectedHostEndpoints;
+
+ //! Endpoint storage and information
+ std::mutex mEndpointMutex;
+ std::vector<EndpointInfo> mEndpoints;
+ std::vector<EndpointSession> mEndpointSessions;
+ std::shared_ptr<IEndpointCallback> mEndpointCallback;
+ int32_t mMaxValidSessionId = 0;
};
} // namespace contexthub
diff --git a/contexthub/aidl/vts/Android.bp b/contexthub/aidl/vts/Android.bp
index 62a319e..a19b6fd 100644
--- a/contexthub/aidl/vts/Android.bp
+++ b/contexthub/aidl/vts/Android.bp
@@ -33,7 +33,7 @@
"libbinder",
],
static_libs: [
- "android.hardware.contexthub-V3-cpp",
+ "android.hardware.contexthub-V4-cpp",
"VtsHalContexthubUtils",
],
test_suites: [
diff --git a/contexthub/aidl/vts/VtsAidlHalContextHubTargetTest.cpp b/contexthub/aidl/vts/VtsAidlHalContextHubTargetTest.cpp
index fa427a5..95a96cd 100644
--- a/contexthub/aidl/vts/VtsAidlHalContextHubTargetTest.cpp
+++ b/contexthub/aidl/vts/VtsAidlHalContextHubTargetTest.cpp
@@ -20,8 +20,10 @@
#include <android/hardware/contexthub/BnContextHub.h>
#include <android/hardware/contexthub/BnContextHubCallback.h>
+#include <android/hardware/contexthub/BnEndpointCallback.h>
#include <android/hardware/contexthub/IContextHub.h>
#include <android/hardware/contexthub/IContextHubCallback.h>
+#include <android/hardware/contexthub/IEndpointCallback.h>
#include <binder/IServiceManager.h>
#include <binder/ProcessState.h>
#include <log/log.h>
@@ -34,18 +36,25 @@
using ::android::String16;
using ::android::binder::Status;
using ::android::hardware::contexthub::AsyncEventType;
+using ::android::hardware::contexthub::BnEndpointCallback;
using ::android::hardware::contexthub::ContextHubInfo;
using ::android::hardware::contexthub::ContextHubMessage;
+using ::android::hardware::contexthub::EndpointId;
+using ::android::hardware::contexthub::EndpointInfo;
using ::android::hardware::contexthub::ErrorCode;
using ::android::hardware::contexthub::HostEndpointInfo;
+using ::android::hardware::contexthub::HubInfo;
using ::android::hardware::contexthub::IContextHub;
using ::android::hardware::contexthub::IContextHubCallbackDefault;
+using ::android::hardware::contexthub::Message;
using ::android::hardware::contexthub::MessageDeliveryStatus;
using ::android::hardware::contexthub::NanoappBinary;
using ::android::hardware::contexthub::NanoappInfo;
using ::android::hardware::contexthub::NanoappRpcService;
using ::android::hardware::contexthub::NanSessionRequest;
using ::android::hardware::contexthub::NanSessionStateUpdate;
+using ::android::hardware::contexthub::Reason;
+using ::android::hardware::contexthub::Service;
using ::android::hardware::contexthub::Setting;
using ::android::hardware::contexthub::vts_utils::kNonExistentAppId;
using ::android::hardware::contexthub::vts_utils::waitForCallback;
@@ -61,8 +70,14 @@
contextHub = android::waitForDeclaredService<IContextHub>(
String16(std::get<0>(GetParam()).c_str()));
ASSERT_NE(contextHub, nullptr);
+
+ // Best effort enable test mode - this may not be supported on older HALS, so we
+ // ignore the return value.
+ contextHub->setTestMode(/* enable= */ true);
}
+ virtual void TearDown() override { contextHub->setTestMode(/* enable= */ false); }
+
uint32_t getHubId() { return std::get<1>(GetParam()); }
void testSettingChanged(Setting setting);
@@ -465,6 +480,290 @@
}
}
+class TestEndpointCallback : public BnEndpointCallback {
+ public:
+ Status onEndpointStarted(const std::vector<EndpointInfo>& /* endpointInfos */) override {
+ return Status::ok();
+ }
+
+ Status onEndpointStopped(const std::vector<EndpointId>& /* endpointIds */,
+ Reason /* reason */) override {
+ return Status::ok();
+ }
+
+ Status onMessageReceived(int32_t /* sessionId */, const Message& message) override {
+ mMessages.push_back(message);
+ return Status::ok();
+ }
+
+ Status onMessageDeliveryStatusReceived(int32_t /* sessionId */,
+ const MessageDeliveryStatus& /* msgStatus */) override {
+ return Status::ok();
+ }
+
+ Status onEndpointSessionOpenRequest(
+ int32_t /* sessionId */, const EndpointId& /* destination */,
+ const EndpointId& /* initiator */,
+ const std::optional<String16>& /* serviceDescriptor */) override {
+ return Status::ok();
+ }
+
+ Status onCloseEndpointSession(int32_t /* sessionId */, Reason /* reason */) override {
+ return Status::ok();
+ }
+
+ Status onEndpointSessionOpenComplete(int32_t /* sessionId */) override {
+ mWasOnEndpointSessionOpenCompleteCalled = true;
+ return Status::ok();
+ }
+
+ std::vector<Message> getMessages() { return mMessages; }
+
+ bool wasOnEndpointSessionOpenCompleteCalled() {
+ return mWasOnEndpointSessionOpenCompleteCalled;
+ }
+ void resetWasOnEndpointSessionOpenCompleteCalled() {
+ mWasOnEndpointSessionOpenCompleteCalled = false;
+ }
+
+ private:
+ std::vector<Message> mMessages;
+ bool mWasOnEndpointSessionOpenCompleteCalled = false;
+};
+
+TEST_P(ContextHubAidl, RegisterEndpoint) {
+ EndpointInfo endpointInfo;
+ endpointInfo.id.id = 1;
+ endpointInfo.id.hubId = 0xCAFECAFECAFECAFE;
+ endpointInfo.type = EndpointInfo::EndpointType::NATIVE;
+ endpointInfo.name = String16("Test host endpoint 1");
+ endpointInfo.version = 42;
+
+ Status status = contextHub->registerEndpoint(endpointInfo);
+ if (status.exceptionCode() == Status::EX_UNSUPPORTED_OPERATION ||
+ status.transactionError() == android::UNKNOWN_TRANSACTION) {
+ GTEST_SKIP() << "Not supported -> old API; or not implemented";
+ } else {
+ EXPECT_TRUE(status.isOk());
+ }
+}
+
+TEST_P(ContextHubAidl, RegisterEndpointSameNameFailure) {
+ EndpointInfo endpointInfo;
+ endpointInfo.id.id = 2;
+ endpointInfo.id.hubId = 0xCAFECAFECAFECAFE;
+ endpointInfo.type = EndpointInfo::EndpointType::NATIVE;
+ endpointInfo.name = String16("Test host endpoint 2");
+ endpointInfo.version = 42;
+
+ EndpointInfo endpointInfo2;
+ endpointInfo2.id.id = 3;
+ endpointInfo2.id.hubId = 0xCAFECAFECAFECAFE;
+ endpointInfo2.type = EndpointInfo::EndpointType::NATIVE;
+ endpointInfo2.name = String16("Test host endpoint 2");
+ endpointInfo2.version = 42;
+
+ Status status = contextHub->registerEndpoint(endpointInfo);
+ if (status.exceptionCode() == Status::EX_UNSUPPORTED_OPERATION ||
+ status.transactionError() == android::UNKNOWN_TRANSACTION) {
+ GTEST_SKIP() << "Not supported -> old API; or not implemented";
+ } else {
+ EXPECT_TRUE(status.isOk());
+ }
+
+ EXPECT_FALSE(contextHub->registerEndpoint(endpointInfo2).isOk());
+}
+
+TEST_P(ContextHubAidl, RegisterEndpointSameIdFailure) {
+ EndpointInfo endpointInfo;
+ endpointInfo.id.id = 4;
+ endpointInfo.id.hubId = 0xCAFECAFECAFECAFE;
+ endpointInfo.type = EndpointInfo::EndpointType::NATIVE;
+ endpointInfo.name = String16("Test host endpoint 4");
+ endpointInfo.version = 42;
+
+ EndpointInfo endpointInfo2;
+ endpointInfo2.id.id = 4;
+ endpointInfo2.id.hubId = 0xCAFECAFECAFECAFE;
+ endpointInfo2.type = EndpointInfo::EndpointType::NATIVE;
+ endpointInfo2.name = String16("Test host endpoint - same ID test");
+ endpointInfo2.version = 42;
+
+ Status status = contextHub->registerEndpoint(endpointInfo);
+ if (status.exceptionCode() == Status::EX_UNSUPPORTED_OPERATION ||
+ status.transactionError() == android::UNKNOWN_TRANSACTION) {
+ GTEST_SKIP() << "Not supported -> old API; or not implemented";
+ } else {
+ EXPECT_TRUE(status.isOk());
+ }
+
+ EXPECT_FALSE(contextHub->registerEndpoint(endpointInfo2).isOk());
+}
+
+TEST_P(ContextHubAidl, UnregisterEndpoint) {
+ EndpointInfo endpointInfo;
+ endpointInfo.id.id = 6;
+ endpointInfo.id.hubId = 0xCAFECAFECAFECAFE;
+ endpointInfo.type = EndpointInfo::EndpointType::NATIVE;
+ endpointInfo.name = String16("Test host endpoint 6");
+ endpointInfo.version = 42;
+
+ Status status = contextHub->registerEndpoint(endpointInfo);
+ if (status.exceptionCode() == Status::EX_UNSUPPORTED_OPERATION ||
+ status.transactionError() == android::UNKNOWN_TRANSACTION) {
+ GTEST_SKIP() << "Not supported -> old API; or not implemented";
+ } else {
+ EXPECT_TRUE(status.isOk());
+ }
+
+ EXPECT_TRUE(contextHub->unregisterEndpoint(endpointInfo).isOk());
+}
+
+TEST_P(ContextHubAidl, UnregisterEndpointNonexistent) {
+ EndpointInfo endpointInfo;
+ endpointInfo.id.id = 100;
+ endpointInfo.id.hubId = 0xCAFECAFECAFECAFE;
+ endpointInfo.type = EndpointInfo::EndpointType::NATIVE;
+ endpointInfo.name = String16("Test host endpoint 100");
+ endpointInfo.version = 42;
+
+ Status status = contextHub->unregisterEndpoint(endpointInfo);
+ if (status.exceptionCode() == Status::EX_UNSUPPORTED_OPERATION ||
+ status.transactionError() == android::UNKNOWN_TRANSACTION) {
+ GTEST_SKIP() << "Not supported -> old API; or not implemented";
+ } else {
+ EXPECT_FALSE(status.isOk());
+ }
+}
+
+TEST_P(ContextHubAidl, RegisterCallback) {
+ auto cb = sp<TestEndpointCallback>::make();
+ Status status = contextHub->registerEndpointCallback(cb);
+ if (status.exceptionCode() == Status::EX_UNSUPPORTED_OPERATION ||
+ status.transactionError() == android::UNKNOWN_TRANSACTION) {
+ GTEST_SKIP() << "Not supported -> old API; or not implemented";
+ } else {
+ EXPECT_TRUE(status.isOk());
+ }
+}
+
+TEST_P(ContextHubAidl, OpenEndpointSessionInvalidRange) {
+ auto cb = sp<TestEndpointCallback>::make();
+ Status status = contextHub->registerEndpointCallback(cb);
+ if (status.exceptionCode() == Status::EX_UNSUPPORTED_OPERATION ||
+ status.transactionError() == android::UNKNOWN_TRANSACTION) {
+ GTEST_SKIP() << "Not supported -> old API; or not implemented";
+ } else {
+ EXPECT_TRUE(status.isOk());
+ }
+
+ // Register the endpoint
+ EndpointInfo initiatorEndpoint;
+ initiatorEndpoint.id.id = 7;
+ initiatorEndpoint.id.hubId = 0xCAFECAFECAFECAFE;
+ initiatorEndpoint.type = EndpointInfo::EndpointType::NATIVE;
+ initiatorEndpoint.name = String16("Test host endpoint 7");
+ initiatorEndpoint.version = 42;
+ EXPECT_TRUE(contextHub->registerEndpoint(initiatorEndpoint).isOk());
+
+ // Find the destination, if it exists
+ std::vector<EndpointInfo> endpoints;
+ EXPECT_TRUE(contextHub->getEndpoints(&endpoints).isOk());
+ const EndpointInfo* destinationEndpoint = nullptr;
+ for (const EndpointInfo& endpoint : endpoints) {
+ for (const Service& service : endpoint.services) {
+ if (service.serviceDescriptor == String16("ECHO")) {
+ destinationEndpoint = &endpoint;
+ break;
+ }
+ }
+ }
+ if (destinationEndpoint == nullptr) {
+ return; // no echo service endpoint -> just return
+ }
+
+ // Request the range
+ constexpr int32_t requestedRange = 100;
+ std::vector<int32_t> range;
+ ASSERT_TRUE(contextHub->requestSessionIdRange(requestedRange, &range).isOk());
+ EXPECT_EQ(range.size(), 2);
+ EXPECT_GE(range[1] - range[0] + 1, requestedRange);
+
+ // Open the session
+ cb->resetWasOnEndpointSessionOpenCompleteCalled();
+ int32_t sessionId = range[1] + 10; // invalid
+ EXPECT_FALSE(contextHub
+ ->openEndpointSession(sessionId, destinationEndpoint->id,
+ initiatorEndpoint.id,
+ /* in_serviceDescriptor= */ String16("ECHO"))
+ .isOk());
+ EXPECT_FALSE(cb->wasOnEndpointSessionOpenCompleteCalled());
+}
+
+TEST_P(ContextHubAidl, OpenEndpointSessionAndSendMessageEchoesBack) {
+ auto cb = sp<TestEndpointCallback>::make();
+ Status status = contextHub->registerEndpointCallback(cb);
+ if (status.exceptionCode() == Status::EX_UNSUPPORTED_OPERATION ||
+ status.transactionError() == android::UNKNOWN_TRANSACTION) {
+ GTEST_SKIP() << "Not supported -> old API; or not implemented";
+ } else {
+ EXPECT_TRUE(status.isOk());
+ }
+
+ // Register the endpoint
+ EndpointInfo initiatorEndpoint;
+ initiatorEndpoint.id.id = 8;
+ initiatorEndpoint.id.hubId = 0xCAFECAFECAFECAFE;
+ initiatorEndpoint.type = EndpointInfo::EndpointType::NATIVE;
+ initiatorEndpoint.name = String16("Test host endpoint 7");
+ initiatorEndpoint.version = 42;
+ EXPECT_TRUE(contextHub->registerEndpoint(initiatorEndpoint).isOk());
+
+ // Find the destination, if it exists
+ std::vector<EndpointInfo> endpoints;
+ EXPECT_TRUE(contextHub->getEndpoints(&endpoints).isOk());
+ const EndpointInfo* destinationEndpoint = nullptr;
+ for (const EndpointInfo& endpoint : endpoints) {
+ for (const Service& service : endpoint.services) {
+ if (service.serviceDescriptor == String16("ECHO")) {
+ destinationEndpoint = &endpoint;
+ break;
+ }
+ }
+ }
+ if (destinationEndpoint == nullptr) {
+ return; // no echo service endpoint -> just return
+ }
+
+ // Request the range
+ constexpr int32_t requestedRange = 100;
+ std::vector<int32_t> range;
+ ASSERT_TRUE(contextHub->requestSessionIdRange(requestedRange, &range).isOk());
+ EXPECT_EQ(range.size(), 2);
+ EXPECT_GE(range[1] - range[0] + 1, requestedRange);
+
+ // Open the session
+ cb->resetWasOnEndpointSessionOpenCompleteCalled();
+ int32_t sessionId = range[0];
+ ASSERT_TRUE(contextHub
+ ->openEndpointSession(sessionId, destinationEndpoint->id,
+ initiatorEndpoint.id,
+ /* in_serviceDescriptor= */ String16("ECHO"))
+ .isOk());
+ EXPECT_TRUE(cb->wasOnEndpointSessionOpenCompleteCalled());
+
+ // Send the message
+ Message message;
+ message.flags = 0;
+ message.sequenceNumber = 0;
+ message.content.push_back(42);
+ ASSERT_TRUE(contextHub->sendMessageToEndpoint(sessionId, message).isOk());
+
+ // Check for echo
+ EXPECT_FALSE(cb->getMessages().empty());
+ EXPECT_EQ(cb->getMessages().back().content.back(), 42);
+}
+
std::string PrintGeneratedTest(const testing::TestParamInfo<ContextHubAidl::ParamType>& info) {
return std::string("CONTEXT_HUB_ID_") + std::to_string(std::get<1>(info.param));
}
diff --git a/gnss/1.1/default/Android.bp b/gnss/1.1/default/Android.bp
index 697cb91..6c338bd 100644
--- a/gnss/1.1/default/Android.bp
+++ b/gnss/1.1/default/Android.bp
@@ -27,7 +27,7 @@
"android.hardware.gnss@2.0",
"android.hardware.gnss@1.1",
"android.hardware.gnss@1.0",
- "android.hardware.gnss-V4-ndk",
+ "android.hardware.gnss-V5-ndk",
],
static_libs: [
"android.hardware.gnss@common-default-lib",
diff --git a/gnss/1.1/vts/functional/Android.bp b/gnss/1.1/vts/functional/Android.bp
index 65c752c..13984629 100644
--- a/gnss/1.1/vts/functional/Android.bp
+++ b/gnss/1.1/vts/functional/Android.bp
@@ -37,7 +37,7 @@
"android.hardware.gnss@1.1",
"android.hardware.gnss@2.0",
"android.hardware.gnss@common-vts-lib",
- "android.hardware.gnss-V4-cpp",
+ "android.hardware.gnss-V5-cpp",
],
shared_libs: [
"android.hardware.gnss.measurement_corrections@1.0",
diff --git a/gnss/2.0/default/Android.bp b/gnss/2.0/default/Android.bp
index 35c2e37..6a4965b 100644
--- a/gnss/2.0/default/Android.bp
+++ b/gnss/2.0/default/Android.bp
@@ -50,7 +50,7 @@
"android.hardware.gnss@2.0",
"android.hardware.gnss@1.1",
"android.hardware.gnss@1.0",
- "android.hardware.gnss-V4-ndk",
+ "android.hardware.gnss-V5-ndk",
],
static_libs: [
"android.hardware.gnss@common-default-lib",
diff --git a/gnss/2.0/vts/functional/Android.bp b/gnss/2.0/vts/functional/Android.bp
index 4ca3063..08d4cb3 100644
--- a/gnss/2.0/vts/functional/Android.bp
+++ b/gnss/2.0/vts/functional/Android.bp
@@ -40,7 +40,7 @@
"android.hardware.gnss@2.0",
"android.hardware.gnss@2.1",
"android.hardware.gnss@common-vts-lib",
- "android.hardware.gnss-V4-cpp",
+ "android.hardware.gnss-V5-cpp",
],
test_suites: [
"general-tests",
diff --git a/gnss/2.1/default/Android.bp b/gnss/2.1/default/Android.bp
index 1bb7512..a2e652e 100644
--- a/gnss/2.1/default/Android.bp
+++ b/gnss/2.1/default/Android.bp
@@ -44,7 +44,7 @@
"android.hardware.gnss@1.0",
"android.hardware.gnss@1.1",
"android.hardware.gnss@2.0",
- "android.hardware.gnss-V4-ndk",
+ "android.hardware.gnss-V5-ndk",
],
static_libs: [
"android.hardware.gnss@common-default-lib",
diff --git a/gnss/2.1/vts/functional/Android.bp b/gnss/2.1/vts/functional/Android.bp
index af66037..8a8fa93 100644
--- a/gnss/2.1/vts/functional/Android.bp
+++ b/gnss/2.1/vts/functional/Android.bp
@@ -41,7 +41,7 @@
"android.hardware.gnss@2.0",
"android.hardware.gnss@2.1",
"android.hardware.gnss@common-vts-lib",
- "android.hardware.gnss-V4-cpp",
+ "android.hardware.gnss-V5-cpp",
],
shared_libs: [
"libvintf",
diff --git a/gnss/aidl/Android.bp b/gnss/aidl/Android.bp
index 47fc3af..6e159a1 100644
--- a/gnss/aidl/Android.bp
+++ b/gnss/aidl/Android.bp
@@ -30,6 +30,7 @@
"android/hardware/gnss/*.aidl",
"android/hardware/gnss/measurement_corrections/*.aidl",
"android/hardware/gnss/visibility_control/*.aidl",
+ "android/hardware/gnss/gnss_assistance/*.aidl",
],
stability: "vintf",
backend: {
@@ -56,6 +57,6 @@
},
],
- frozen: true,
+ frozen: false,
}
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IGnss.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IGnss.aidl
index d1aaf2c..fc74612 100644
--- a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IGnss.aidl
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/IGnss.aidl
@@ -61,6 +61,7 @@
void stopSvStatus();
void startNmea();
void stopNmea();
+ android.hardware.gnss.gnss_assistance.IGnssAssistanceInterface getExtensionGnssAssistanceInterface();
const int ERROR_INVALID_ARGUMENT = 1;
const int ERROR_ALREADY_INIT = 2;
const int ERROR_GENERIC = 3;
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/BeidouAlmanac.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/BeidouAlmanac.aidl
new file mode 100644
index 0000000..f42e1d0
--- /dev/null
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/BeidouAlmanac.aidl
@@ -0,0 +1,55 @@
+/*
+ * 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.gnss.gnss_assistance;
+/* @hide */
+@VintfStability
+parcelable BeidouAlmanac {
+ int beidouWeekNumber;
+ android.hardware.gnss.gnss_assistance.BeidouAlmanac.BeidouSatelliteAlmanac[] satelliteAlmanac;
+ @VintfStability
+ parcelable BeidouSatelliteAlmanac {
+ int prn;
+ int svHealth;
+ int toaSeconds;
+ double eccentricity;
+ double deltaI;
+ double omega;
+ double omega0;
+ double omegaDot;
+ double rootA;
+ double m0;
+ double af0;
+ double af1;
+ }
+}
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/BeidouSatelliteEphemeris.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/BeidouSatelliteEphemeris.aidl
new file mode 100644
index 0000000..91735a0
--- /dev/null
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/BeidouSatelliteEphemeris.aidl
@@ -0,0 +1,47 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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.gnss.gnss_assistance;
+/* @hide */
+@VintfStability
+parcelable BeidouSatelliteEphemeris {
+ int prn;
+ android.hardware.gnss.gnss_assistance.BeidouSatelliteEphemeris.BeidouSatelliteClockModel satelliteClockModel;
+ android.hardware.gnss.gnss_assistance.KeplerianOrbitModel satelliteOrbitModel;
+ android.hardware.gnss.gnss_assistance.BeidouSatelliteEphemeris.BeidouSatelliteHealth satelliteHealth;
+ android.hardware.gnss.gnss_assistance.BeidouSatelliteEphemeris.BeidouSatelliteEphemerisTime satelliteEphemerisTime;
+ @VintfStability
+ parcelable BeidouSatelliteClockModel {
+ android.hardware.gnss.gnss_assistance.TimeOfClock timeOfClock;
+ double af0;
+ double af1;
+ double af2;
+ double tgd1;
+ double tgd2;
+ int aodc;
+ }
+ parcelable BeidouSatelliteHealth {
+ int satH1;
+ double svAccur;
+ }
+ parcelable BeidouSatelliteEphemerisTime {
+ int aode;
+ int weekNumber;
+ int toeSeconds;
+ }
+}
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GalileoAlmanac.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GalileoAlmanac.aidl
new file mode 100644
index 0000000..ffe2c3f
--- /dev/null
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GalileoAlmanac.aidl
@@ -0,0 +1,66 @@
+/*
+ * 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.gnss.gnss_assistance;
+/* @hide */
+@VintfStability
+parcelable GalileoAlmanac {
+ long issueDate;
+ int weekNumber;
+ int toa;
+ int iod;
+ android.hardware.gnss.gnss_assistance.GalileoAlmanac.GalileoSatelliteAlmanac[] satelliteAlmanac;
+ @VintfStability
+ parcelable GalileoSatelliteAlmanac {
+ int svId;
+ android.hardware.gnss.gnss_assistance.GalileoAlmanac.GalileoAlmanacSvHealth svHealth;
+ double eccentricity;
+ double deltaI;
+ double omega;
+ double omega0;
+ double omegaDot;
+ double rootA;
+ double m0;
+ double af0;
+ double af1;
+ int weekNumber;
+ int toa;
+ int iod;
+ }
+ @VintfStability
+ parcelable GalileoAlmanacSvHealth {
+ int fNavE5a;
+ int iNavE5b;
+ int iNavE1b;
+ }
+}
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GalileoIonosphericModel.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GalileoIonosphericModel.aidl
new file mode 100644
index 0000000..6d8040b
--- /dev/null
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GalileoIonosphericModel.aidl
@@ -0,0 +1,41 @@
+/*
+ * 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.gnss.gnss_assistance;
+/* @hide */
+@VintfStability
+parcelable GalileoIonosphericModel {
+ double ai0;
+ double ai1;
+ double ai2;
+}
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GalileoSatelliteEphemeris.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GalileoSatelliteEphemeris.aidl
new file mode 100644
index 0000000..17d48b1
--- /dev/null
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GalileoSatelliteEphemeris.aidl
@@ -0,0 +1,68 @@
+/*
+ * 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.gnss.gnss_assistance;
+/* @hide */
+@VintfStability
+parcelable GalileoSatelliteEphemeris {
+ int satelliteCodeNumber;
+ android.hardware.gnss.gnss_assistance.GalileoSatelliteEphemeris.GalileoSatelliteClockModel[] satelliteClockModel;
+ android.hardware.gnss.gnss_assistance.KeplerianOrbitModel satelliteOrbitModel;
+ android.hardware.gnss.gnss_assistance.GalileoSatelliteEphemeris.GalileoSvHealth svHealth;
+ android.hardware.gnss.gnss_assistance.SatelliteEphemerisTime satelliteEphemerisTime;
+ @VintfStability
+ parcelable GalileoSatelliteClockModel {
+ android.hardware.gnss.gnss_assistance.TimeOfClock toc;
+ double af0;
+ double af1;
+ double af2;
+ double bgdSeconds;
+ double sisaMeters;
+ android.hardware.gnss.gnss_assistance.GalileoSatelliteEphemeris.GalileoSatelliteClockModel.SatelliteClockType satelliteClockType;
+ @Backing(type="int") @VintfStability
+ enum SatelliteClockType {
+ UNDEFINED = 0,
+ GALILEO_FNAV_CLOCK = 1,
+ GALILEO_INAV_CLOCK = 2,
+ }
+ }
+ @VintfStability
+ parcelable GalileoSvHealth {
+ int dataValidityStatusE1b;
+ int signalHealthStatusE1b;
+ int dataValidityStatusE5a;
+ int signalHealthStatusE5a;
+ int dataValidityStatusE5b;
+ int signalHealthStatusE5b;
+ }
+}
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GlonassAlmanac.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GlonassAlmanac.aidl
new file mode 100644
index 0000000..a545166
--- /dev/null
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GlonassAlmanac.aidl
@@ -0,0 +1,39 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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.gnss.gnss_assistance;
+/* @hide */
+@VintfStability
+parcelable GlonassAlmanac {
+ long issueDate;
+ android.hardware.gnss.gnss_assistance.GlonassAlmanac.GlonassSatelliteAlmanac[] satelliteAlmanac;
+ @VintfStability
+ parcelable GlonassSatelliteAlmanac {
+ int slotNumber;
+ int svHealth;
+ int frequencyChannel;
+ double tau;
+ double tLambda;
+ double lambda;
+ double deltaI;
+ double deltaT;
+ double deltaTDot;
+ double eccentricity;
+ double omega;
+ }
+}
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GlonassSatelliteEphemeris.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GlonassSatelliteEphemeris.aidl
new file mode 100644
index 0000000..fbab59c
--- /dev/null
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GlonassSatelliteEphemeris.aidl
@@ -0,0 +1,63 @@
+/*
+ * 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.gnss.gnss_assistance;
+/* @hide */
+@VintfStability
+parcelable GlonassSatelliteEphemeris {
+ int slotNumber;
+ int svHealth;
+ double frameTimeSeconds;
+ int ageInDays;
+ android.hardware.gnss.gnss_assistance.GlonassSatelliteEphemeris.GlonassSatelliteClockModel satelliteClockModel;
+ android.hardware.gnss.gnss_assistance.GlonassSatelliteEphemeris.GlonassSatelliteOrbitModel satelliteOrbitModel;
+ @VintfStability
+ parcelable GlonassSatelliteClockModel {
+ android.hardware.gnss.gnss_assistance.TimeOfClock timeOfClock;
+ double clockBias;
+ double freqBias;
+ int freqNumber;
+ }
+ @VintfStability
+ parcelable GlonassSatelliteOrbitModel {
+ double x;
+ double xDot;
+ double xAccel;
+ double y;
+ double yDot;
+ double yAccel;
+ double z;
+ double zDot;
+ double zAccel;
+ }
+}
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GnssAssistance.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GnssAssistance.aidl
new file mode 100644
index 0000000..98383ac
--- /dev/null
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GnssAssistance.aidl
@@ -0,0 +1,100 @@
+/*
+ * 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.gnss.gnss_assistance;
+/* @hide */
+@VintfStability
+parcelable GnssAssistance {
+ android.hardware.gnss.gnss_assistance.GnssAssistance.GpsAssistance gpsAssistance;
+ android.hardware.gnss.gnss_assistance.GnssAssistance.GlonassAssistance gloAssistance;
+ android.hardware.gnss.gnss_assistance.GnssAssistance.GalileoAssistance galAssistance;
+ android.hardware.gnss.gnss_assistance.GnssAssistance.BeidouAssistance bdsAssistance;
+ android.hardware.gnss.gnss_assistance.GnssAssistance.QzssAssistance qzsAssistance;
+ @VintfStability
+ parcelable GnssSatelliteCorrections {
+ int svid;
+ android.hardware.gnss.gnss_assistance.IonosphericCorrection[] inonosphericCorrections;
+ }
+ @VintfStability
+ parcelable GpsAssistance {
+ android.hardware.gnss.gnss_assistance.GpsAlmanac almanac;
+ android.hardware.gnss.gnss_assistance.KlobucharIonosphericModel ionosphericModel;
+ android.hardware.gnss.gnss_assistance.UtcModel utcModel;
+ android.hardware.gnss.gnss_assistance.LeapSecondsModel leapSecondsModel;
+ android.hardware.gnss.gnss_assistance.TimeModel[] timeModels;
+ android.hardware.gnss.gnss_assistance.GpsSatelliteEphemeris[] satelliteEphemeris;
+ android.hardware.gnss.gnss_assistance.RealTimeIntegrityModel[] realTimeIntegrityModels;
+ android.hardware.gnss.gnss_assistance.GnssAssistance.GnssSatelliteCorrections[] satelliteCorrections;
+ }
+ @VintfStability
+ parcelable GalileoAssistance {
+ android.hardware.gnss.gnss_assistance.GalileoAlmanac almanac;
+ android.hardware.gnss.gnss_assistance.GalileoIonosphericModel ionosphericModel;
+ android.hardware.gnss.gnss_assistance.UtcModel utcModel;
+ android.hardware.gnss.gnss_assistance.LeapSecondsModel leapSecondsModel;
+ android.hardware.gnss.gnss_assistance.TimeModel[] timeModels;
+ android.hardware.gnss.gnss_assistance.GalileoSatelliteEphemeris[] satelliteEphemeris;
+ android.hardware.gnss.gnss_assistance.RealTimeIntegrityModel[] realTimeIntegrityModels;
+ android.hardware.gnss.gnss_assistance.GnssAssistance.GnssSatelliteCorrections[] satelliteCorrections;
+ }
+ @VintfStability
+ parcelable GlonassAssistance {
+ android.hardware.gnss.gnss_assistance.GlonassAlmanac almanac;
+ android.hardware.gnss.gnss_assistance.UtcModel utcModel;
+ android.hardware.gnss.gnss_assistance.TimeModel[] timeModels;
+ android.hardware.gnss.gnss_assistance.GlonassSatelliteEphemeris[] satelliteEphemeris;
+ android.hardware.gnss.gnss_assistance.GnssAssistance.GnssSatelliteCorrections[] satelliteCorrections;
+ }
+ @VintfStability
+ parcelable QzssAssistance {
+ android.hardware.gnss.gnss_assistance.QzssAlmanac almanac;
+ android.hardware.gnss.gnss_assistance.KlobucharIonosphericModel ionosphericModel;
+ android.hardware.gnss.gnss_assistance.UtcModel utcModel;
+ android.hardware.gnss.gnss_assistance.LeapSecondsModel leapSecondsModel;
+ android.hardware.gnss.gnss_assistance.TimeModel[] timeModels;
+ android.hardware.gnss.gnss_assistance.QzssSatelliteEphemeris[] satelliteEphemeris;
+ android.hardware.gnss.gnss_assistance.RealTimeIntegrityModel[] realTimeIntegrityModels;
+ android.hardware.gnss.gnss_assistance.GnssAssistance.GnssSatelliteCorrections[] satelliteCorrections;
+ }
+ @VintfStability
+ parcelable BeidouAssistance {
+ android.hardware.gnss.gnss_assistance.BeidouAlmanac almanac;
+ android.hardware.gnss.gnss_assistance.KlobucharIonosphericModel ionosphericModel;
+ android.hardware.gnss.gnss_assistance.UtcModel utcModel;
+ android.hardware.gnss.gnss_assistance.LeapSecondsModel leapSecondsModel;
+ android.hardware.gnss.gnss_assistance.TimeModel[] timeModels;
+ android.hardware.gnss.gnss_assistance.BeidouSatelliteEphemeris[] satelliteEphemeris;
+ android.hardware.gnss.gnss_assistance.RealTimeIntegrityModel[] realTimeIntegrityModels;
+ android.hardware.gnss.gnss_assistance.GnssAssistance.GnssSatelliteCorrections[] satelliteCorrections;
+ }
+}
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GnssCorrectionComponent.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GnssCorrectionComponent.aidl
new file mode 100644
index 0000000..2d43bb3
--- /dev/null
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GnssCorrectionComponent.aidl
@@ -0,0 +1,37 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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.gnss.gnss_assistance;
+/* @hide */
+@VintfStability
+parcelable GnssCorrectionComponent {
+ String sourceKey;
+ android.hardware.gnss.gnss_assistance.GnssCorrectionComponent.GnssInterval validityInterval;
+ android.hardware.gnss.gnss_assistance.GnssCorrectionComponent.PseudorangeCorrection pseudorangeCorrection;
+ @VintfStability
+ parcelable GnssInterval {
+ long startMillisSinceGpsEpoch;
+ long endMillisSinceGpsEpoch;
+ }
+ @VintfStability
+ parcelable PseudorangeCorrection {
+ double correctionMeters;
+ double correctionUncertaintyMeters;
+ double correctionRateMetersPerSecond;
+ }
+}
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GpsAlmanac.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GpsAlmanac.aidl
new file mode 100644
index 0000000..60e0b96
--- /dev/null
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GpsAlmanac.aidl
@@ -0,0 +1,55 @@
+/*
+ * 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.gnss.gnss_assistance;
+/* @hide */
+@VintfStability
+parcelable GpsAlmanac {
+ int gpsWeekNumber;
+ int secondsOfGpsWeek;
+ android.hardware.gnss.gnss_assistance.GpsAlmanac.GpsSatelliteAlmanac[] satelliteAlmanac;
+ @VintfStability
+ parcelable GpsSatelliteAlmanac {
+ int prn;
+ int svHealth;
+ double eccentricity;
+ double inclination;
+ double omega;
+ double omega0;
+ double omegaDot;
+ double rootA;
+ double m0;
+ double af0;
+ double af1;
+ }
+}
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GpsSatelliteEphemeris.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GpsSatelliteEphemeris.aidl
new file mode 100644
index 0000000..1e80516
--- /dev/null
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/GpsSatelliteEphemeris.aidl
@@ -0,0 +1,64 @@
+/*
+ * 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.gnss.gnss_assistance;
+/* @hide */
+@VintfStability
+parcelable GpsSatelliteEphemeris {
+ int prn;
+ android.hardware.gnss.gnss_assistance.GpsSatelliteEphemeris.GpsL2Params gpsL2Params;
+ android.hardware.gnss.gnss_assistance.GpsSatelliteEphemeris.GpsSatelliteClockModel satelliteClockModel;
+ android.hardware.gnss.gnss_assistance.KeplerianOrbitModel satelliteOrbitModel;
+ android.hardware.gnss.gnss_assistance.GpsSatelliteEphemeris.GpsSatelliteHealth satelliteHealth;
+ android.hardware.gnss.gnss_assistance.SatelliteEphemerisTime satelliteEphemerisTime;
+ @VintfStability
+ parcelable GpsL2Params {
+ int l2Code;
+ int l2Flag;
+ }
+ @VintfStability
+ parcelable GpsSatelliteClockModel {
+ android.hardware.gnss.gnss_assistance.TimeOfClock timeOfClock;
+ double af0;
+ double af1;
+ double af2;
+ double tgd;
+ int iodc;
+ }
+ @VintfStability
+ parcelable GpsSatelliteHealth {
+ int svHealth;
+ double svAccur;
+ double fitInt;
+ }
+}
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/IGnssAssistanceCallback.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/IGnssAssistanceCallback.aidl
new file mode 100644
index 0000000..602a249
--- /dev/null
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/IGnssAssistanceCallback.aidl
@@ -0,0 +1,39 @@
+/*
+ * 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.gnss.gnss_assistance;
+/* @hide */
+@VintfStability
+interface IGnssAssistanceCallback {
+ void injectRequestCb();
+}
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/IGnssAssistanceInterface.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/IGnssAssistanceInterface.aidl
new file mode 100644
index 0000000..4dd5cf6
--- /dev/null
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/IGnssAssistanceInterface.aidl
@@ -0,0 +1,40 @@
+/*
+ * 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.gnss.gnss_assistance;
+/* @hide */
+@VintfStability
+interface IGnssAssistanceInterface {
+ void injectGnssAssistance(in android.hardware.gnss.gnss_assistance.GnssAssistance gnssAssistance);
+ void setCallback(in android.hardware.gnss.gnss_assistance.IGnssAssistanceCallback callback);
+}
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/IonosphericCorrection.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/IonosphericCorrection.aidl
new file mode 100644
index 0000000..e02d97f
--- /dev/null
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/IonosphericCorrection.aidl
@@ -0,0 +1,40 @@
+/*
+ * 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.gnss.gnss_assistance;
+/* @hide */
+@VintfStability
+parcelable IonosphericCorrection {
+ long carrierFrequencyHz;
+ android.hardware.gnss.gnss_assistance.GnssCorrectionComponent ionosphericCorrection;
+}
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/KeplerianOrbitModel.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/KeplerianOrbitModel.aidl
new file mode 100644
index 0000000..835c6ec
--- /dev/null
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/KeplerianOrbitModel.aidl
@@ -0,0 +1,57 @@
+/*
+ * 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.gnss.gnss_assistance;
+/* @hide */
+@VintfStability
+parcelable KeplerianOrbitModel {
+ double rootA;
+ double eccentricity;
+ double i0;
+ double iDot;
+ double omega;
+ double omega0;
+ double omegaDot;
+ double m0;
+ double deltaN;
+ android.hardware.gnss.gnss_assistance.KeplerianOrbitModel.SecondOrderHarmonicPerturbation secondOrderHarmonicPerturbation;
+ @VintfStability
+ parcelable SecondOrderHarmonicPerturbation {
+ double cic;
+ double cis;
+ double crc;
+ double crs;
+ double cuc;
+ double cus;
+ }
+}
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/KlobucharIonosphericModel.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/KlobucharIonosphericModel.aidl
new file mode 100644
index 0000000..5a0caa5
--- /dev/null
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/KlobucharIonosphericModel.aidl
@@ -0,0 +1,46 @@
+/*
+ * 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.gnss.gnss_assistance;
+/* @hide */
+@VintfStability
+parcelable KlobucharIonosphericModel {
+ double alpha0;
+ double alpha1;
+ double alpha2;
+ double alpha3;
+ double beta0;
+ double beta1;
+ double beta2;
+ double beta3;
+}
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/LeapSecondsModel.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/LeapSecondsModel.aidl
new file mode 100644
index 0000000..bc38b9b
--- /dev/null
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/LeapSecondsModel.aidl
@@ -0,0 +1,42 @@
+/*
+ * 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.gnss.gnss_assistance;
+/* @hide */
+@VintfStability
+parcelable LeapSecondsModel {
+ int leapSeconds;
+ int leapSecondsFuture;
+ int weekNumberLeapSecondsFuture;
+ int dayNumberLeapSecondsFuture;
+}
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/QzssAlmanac.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/QzssAlmanac.aidl
new file mode 100644
index 0000000..6c645a6
--- /dev/null
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/QzssAlmanac.aidl
@@ -0,0 +1,55 @@
+/*
+ * 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.gnss.gnss_assistance;
+/* @hide */
+@VintfStability
+parcelable QzssAlmanac {
+ int qzssWeekNumber;
+ int secondsOfQzssWeek;
+ android.hardware.gnss.gnss_assistance.QzssAlmanac.QzssSatelliteAlmanac[] satelliteAlmanac;
+ @VintfStability
+ parcelable QzssSatelliteAlmanac {
+ int prn;
+ int svHealth;
+ double eccentricity;
+ double inclination;
+ double omega;
+ double omega0;
+ double omegaDot;
+ double rootA;
+ double m0;
+ double af0;
+ double af1;
+ }
+}
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/QzssSatelliteEphemeris.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/QzssSatelliteEphemeris.aidl
new file mode 100644
index 0000000..5bb1c97
--- /dev/null
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/QzssSatelliteEphemeris.aidl
@@ -0,0 +1,44 @@
+/*
+ * 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.gnss.gnss_assistance;
+/* @hide */
+@VintfStability
+parcelable QzssSatelliteEphemeris {
+ int prn;
+ android.hardware.gnss.gnss_assistance.GpsSatelliteEphemeris.GpsL2Params gpsL2Params;
+ android.hardware.gnss.gnss_assistance.GpsSatelliteEphemeris.GpsSatelliteClockModel satelliteClockModel;
+ android.hardware.gnss.gnss_assistance.KeplerianOrbitModel satelliteOrbitModel;
+ android.hardware.gnss.gnss_assistance.GpsSatelliteEphemeris.GpsSatelliteHealth satelliteHealth;
+ android.hardware.gnss.gnss_assistance.SatelliteEphemerisTime satelliteEphemerisTime;
+}
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/RealTimeIntegrityModel.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/RealTimeIntegrityModel.aidl
new file mode 100644
index 0000000..c7379e1
--- /dev/null
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/RealTimeIntegrityModel.aidl
@@ -0,0 +1,45 @@
+/*
+ * 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.gnss.gnss_assistance;
+/* @hide */
+@VintfStability
+parcelable RealTimeIntegrityModel {
+ int svid;
+ boolean usable;
+ long publishDateSeconds;
+ long startDateSeconds;
+ long endDateSeconds;
+ String advisoryType;
+ String advisoryNumber;
+}
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/SatelliteEphemerisTime.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/SatelliteEphemerisTime.aidl
new file mode 100644
index 0000000..1e5cd02
--- /dev/null
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/SatelliteEphemerisTime.aidl
@@ -0,0 +1,41 @@
+/*
+ * 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.gnss.gnss_assistance;
+/* @hide */
+@VintfStability
+parcelable SatelliteEphemerisTime {
+ int iode;
+ int weekNumber;
+ int toeSeconds;
+}
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/TimeModel.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/TimeModel.aidl
new file mode 100644
index 0000000..e1ce890
--- /dev/null
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/TimeModel.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.
+ */
+///////////////////////////////////////////////////////////////////////////////
+// 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.gnss.gnss_assistance;
+/* @hide */
+@VintfStability
+parcelable TimeModel {
+ android.hardware.gnss.GnssConstellationType toGnss;
+ double a0;
+ double a1;
+ int timeOfWeek;
+ int weekNumber;
+}
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/TimeOfClock.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/TimeOfClock.aidl
new file mode 100644
index 0000000..ae709d4
--- /dev/null
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/TimeOfClock.aidl
@@ -0,0 +1,44 @@
+/*
+ * 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.gnss.gnss_assistance;
+/* @hide */
+@VintfStability
+parcelable TimeOfClock {
+ int year;
+ int month;
+ int day;
+ int hour;
+ int minute;
+ int seconds;
+}
diff --git a/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/UtcModel.aidl b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/UtcModel.aidl
new file mode 100644
index 0000000..df754bc
--- /dev/null
+++ b/gnss/aidl/aidl_api/android.hardware.gnss/current/android/hardware/gnss/gnss_assistance/UtcModel.aidl
@@ -0,0 +1,42 @@
+/*
+ * 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.gnss.gnss_assistance;
+/* @hide */
+@VintfStability
+parcelable UtcModel {
+ double a0;
+ double a1;
+ int timeOfWeek;
+ int weekNumber;
+}
diff --git a/gnss/aidl/android/hardware/gnss/IGnss.aidl b/gnss/aidl/android/hardware/gnss/IGnss.aidl
index aaafe7f..5fc8a48 100644
--- a/gnss/aidl/android/hardware/gnss/IGnss.aidl
+++ b/gnss/aidl/android/hardware/gnss/IGnss.aidl
@@ -29,6 +29,7 @@
import android.hardware.gnss.IGnssNavigationMessageInterface;
import android.hardware.gnss.IGnssPowerIndication;
import android.hardware.gnss.IGnssPsds;
+import android.hardware.gnss.gnss_assistance.IGnssAssistanceInterface;
import android.hardware.gnss.measurement_corrections.IMeasurementCorrectionsInterface;
import android.hardware.gnss.visibility_control.IGnssVisibilityControl;
@@ -343,4 +344,11 @@
* Stops the NMEA output stream.
*/
void stopNmea();
+
+ /**
+ * This method returns the IGnssAssistanceInterface.
+ *
+ * @return Handle to the IGnssAssistanceInterface.
+ */
+ IGnssAssistanceInterface getExtensionGnssAssistanceInterface();
}
diff --git a/gnss/aidl/android/hardware/gnss/gnss_assistance/BeidouAlmanac.aidl b/gnss/aidl/android/hardware/gnss/gnss_assistance/BeidouAlmanac.aidl
new file mode 100644
index 0000000..1df485e
--- /dev/null
+++ b/gnss/aidl/android/hardware/gnss/gnss_assistance/BeidouAlmanac.aidl
@@ -0,0 +1,78 @@
+/*
+ * 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.gnss.gnss_assistance;
+
+/**
+ * Contains Beidou almanac data.
+ * This is defined in BDS-SIS-ICD-B1I-3.0, section 5.2.4.15.
+ *
+ * @hide
+ */
+@VintfStability
+parcelable BeidouAlmanac {
+ /**
+ * Contains Beidou satellite almanac data.
+ * This is defined in BDS-SIS-ICD-B1I-3.0, section 5.2.4.15.
+ */
+ @VintfStability
+ parcelable BeidouSatelliteAlmanac {
+ /** The PRN number of the Beidou satellite. */
+ int prn;
+
+ /** Satellite health (0=healthy, 1=unhealthy). */
+ int svHealth;
+
+ /** Almanac reference time in seconds. */
+ int toaSeconds;
+
+ /** Eccentricity. */
+ double eccentricity;
+
+ /**
+ * Correction of inclination angle relative to reference value at reference time
+ * in semi-circles.
+ */
+ double deltaI;
+
+ /** Argument of perigee in semi-circles. */
+ double omega;
+
+ /** Longitude of ascending node of orbital plane at weekly epoch in semi-circles. */
+ double omega0;
+
+ /** Rate of right ascension in semi-circles per second. */
+ double omegaDot;
+
+ /** Square root of semi-major axis in square root of meters. */
+ double rootA;
+
+ /** Mean anomaly at reference time in semi-circles. */
+ double m0;
+
+ /** Satellite clock time bias correction coefficient in seconds. */
+ double af0;
+
+ /** Satellite clock time drift correction coefficient in seconds per second. */
+ double af1;
+ }
+
+ /** Beidou week number. */
+ int beidouWeekNumber;
+
+ /** Array of BeidouSatelliteAlmanac. */
+ BeidouSatelliteAlmanac[] satelliteAlmanac;
+}
diff --git a/gnss/aidl/android/hardware/gnss/gnss_assistance/BeidouSatelliteEphemeris.aidl b/gnss/aidl/android/hardware/gnss/gnss_assistance/BeidouSatelliteEphemeris.aidl
new file mode 100644
index 0000000..025f402
--- /dev/null
+++ b/gnss/aidl/android/hardware/gnss/gnss_assistance/BeidouSatelliteEphemeris.aidl
@@ -0,0 +1,94 @@
+package android.hardware.gnss.gnss_assistance;
+
+import android.hardware.gnss.gnss_assistance.KeplerianOrbitModel;
+import android.hardware.gnss.gnss_assistance.TimeOfClock;
+
+/**
+ * Contains ephemeris parameters specific to Beidou satellites.
+ *
+ * @hide
+ */
+@VintfStability
+parcelable BeidouSatelliteEphemeris {
+ /*
+ * Contains the set of parameters needed for Beidou satellite clock
+ * correction.
+ * This is defined in BDS-SIS-ICD-B1I-3.0, section 5.2.4.9, 5.2.4.10.
+ */
+ @VintfStability
+ parcelable BeidouSatelliteClockModel {
+ /** Time of the clock. */
+ TimeOfClock timeOfClock;
+
+ /** SV clock bias in seconds. */
+ double af0;
+
+ /** SV clock drift in seconds per second. */
+ double af1;
+
+ /** Clock drift rate in seconds per second squared. */
+ double af2;
+
+ /** Group delay differential 1 B1/B3 in seconds. */
+ double tgd1;
+
+ /** Group delay differential 2 B2/B3 in seconds. */
+ double tgd2;
+
+ /**
+ * Age of Data Clock and field range is: 0-31.
+ * This is defined in BDS-SIS-ICD-B1I-3.0 Section 5.2.4.8 Table 5-6.
+ */
+ int aodc;
+ }
+
+ /** Contains information about Beidou health. */
+ parcelable BeidouSatelliteHealth {
+ /**
+ * The autonomous satellite health flag (SatH1) occupies 1 bit. “0” means
+ * broadcasting satellite is good and “1” means not.
+ * This is defined in BDS-SIS-ICD-B1I-3.0 section 5.2.4.6.
+ */
+ int satH1;
+
+ /**
+ * SV accuracy in meters.
+ * This is defined in the "BROADCAST ORBIT - 6" record of RINEX 3.05
+ * Table A14, pp.78.
+ */
+ double svAccur;
+ }
+
+ /** Contains information about time of ephemeris */
+ parcelable BeidouSatelliteEphemerisTime {
+ /**
+ * AODE Age of Data, Ephemeris.
+ * This is as defined in BDS-SIS-ICD-B1I-3.0 section 5.2.4.11 Table 5-8.
+ */
+ int aode;
+
+ /** Beidou week number. */
+ int weekNumber;
+
+ /**
+ * Time of ephemeris in seconds.
+ * This is defined in BDS-SIS-ICD-B1I-3.0 section 5.2.4.12.
+ */
+ int toeSeconds;
+ }
+
+ /** The PRN number of the Beidou satellite. */
+ int prn;
+
+ /** Satellite clock model. */
+ BeidouSatelliteClockModel satelliteClockModel;
+
+ /** Satellite orbit model. */
+ KeplerianOrbitModel satelliteOrbitModel;
+
+ /** Satellite health. */
+ BeidouSatelliteHealth satelliteHealth;
+
+ /** Satellite ephemeris time. */
+ BeidouSatelliteEphemerisTime satelliteEphemerisTime;
+}
diff --git a/gnss/aidl/android/hardware/gnss/gnss_assistance/GalileoAlmanac.aidl b/gnss/aidl/android/hardware/gnss/gnss_assistance/GalileoAlmanac.aidl
new file mode 100644
index 0000000..db5dd04
--- /dev/null
+++ b/gnss/aidl/android/hardware/gnss/gnss_assistance/GalileoAlmanac.aidl
@@ -0,0 +1,117 @@
+/*
+ * 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.gnss.gnss_assistance;
+
+/**
+ * Contains Galileo almanac data.
+ * This is defined in Galileo-OS-SIS-ICD-v2.1, 5.1.10.
+ *
+ * @hide
+ */
+@VintfStability
+parcelable GalileoAlmanac {
+ /**
+ * Contains Galileo satellite almanac data.
+ * This is defined in Galileo-OS-SIS-ICD-v2.1, 5.1.10.
+ */
+ @VintfStability
+ parcelable GalileoSatelliteAlmanac {
+ /** Satellite ID. */
+ int svId;
+
+ /** Satellite health status. */
+ GalileoAlmanacSvHealth svHealth;
+
+ /** Eccentricity. */
+ double eccentricity;
+
+ /**
+ * Difference between the inclination angle at reference time and the
+ * nominal inclination, in semi-circles.
+ */
+ double deltaI;
+
+ /** Argument of perigee in semi-circles. */
+ double omega;
+
+ /** Longitude of ascending node of orbital plane at weekly epoch in semi-circles. */
+ double omega0;
+
+ /** Rate of right ascension in semi-circles per second. */
+ double omegaDot;
+
+ /**
+ * Difference with respect to the square root of the nominal semi-major axis
+ * in square root of meters.
+ */
+ double rootA;
+
+ /** Satellite mean anomaly at reference time in semi-circles. */
+ double m0;
+
+ /** Satellite clock correction bias in seconds. */
+ double af0;
+
+ /** Satellite clock correction linear in seconds per second. */
+ double af1;
+
+ /**
+ * Almanac reference week number.
+ * Modulo 4 representation of the Galileo system time week number.
+ */
+ int weekNumber;
+
+ /** Almanac reference time in seconds. */
+ int toa;
+
+ /** Almanac issue of data. */
+ int iod;
+ }
+
+ /**
+ * Contains Galileo satellite health status.
+ */
+ @VintfStability
+ parcelable GalileoAlmanacSvHealth {
+ /** Satellite E5a signal health status. */
+ int fNavE5a;
+
+ /** Satellite E5b signal health status. */
+ int iNavE5b;
+
+ /** Satellite E1b signal health status. */
+ int iNavE1b;
+ }
+
+ /** Almanac reference UTC time in milliseconds */
+ long issueDate;
+
+ /**
+ * Almanac reference week number.
+ * Modulo 4 representation of the Galileo system time week number.
+ */
+ int weekNumber;
+
+ /** Almanac reference time in seconds. */
+ int toa;
+
+ /** Almanac issue of data. */
+ int iod;
+
+ /** Array of GalileoSatelliteAlmanac. */
+ GalileoSatelliteAlmanac[] satelliteAlmanac;
+}
diff --git a/gnss/aidl/android/hardware/gnss/gnss_assistance/GalileoIonosphericModel.aidl b/gnss/aidl/android/hardware/gnss/gnss_assistance/GalileoIonosphericModel.aidl
new file mode 100644
index 0000000..ced8917
--- /dev/null
+++ b/gnss/aidl/android/hardware/gnss/gnss_assistance/GalileoIonosphericModel.aidl
@@ -0,0 +1,35 @@
+/*
+ * 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.gnss.gnss_assistance;
+
+/**
+ * Contains Galileo ionospheric model.
+ * This is Defined in Galileo-OS-SIS-ICD-v2.1, 5.1.6.
+ *
+ * @hide
+ */
+@VintfStability
+parcelable GalileoIonosphericModel {
+ /** Effective ionisation level 1st order parameter in sfu. */
+ double ai0;
+
+ /** Effective ionisation level 2nd order parameter in sfu per degree. */
+ double ai1;
+
+ /** Effective ionisation level 3nd order parameter in sfu per degree squared. */
+ double ai2;
+}
diff --git a/gnss/aidl/android/hardware/gnss/gnss_assistance/GalileoSatelliteEphemeris.aidl b/gnss/aidl/android/hardware/gnss/gnss_assistance/GalileoSatelliteEphemeris.aidl
new file mode 100644
index 0000000..1562934
--- /dev/null
+++ b/gnss/aidl/android/hardware/gnss/gnss_assistance/GalileoSatelliteEphemeris.aidl
@@ -0,0 +1,114 @@
+/*
+ * 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.gnss.gnss_assistance;
+
+import android.hardware.gnss.gnss_assistance.KeplerianOrbitModel;
+import android.hardware.gnss.gnss_assistance.SatelliteEphemerisTime;
+import android.hardware.gnss.gnss_assistance.TimeOfClock;
+
+/**
+ * Contains ephemeris parameters specific to Galileo satellites.
+ *
+ * @hide
+ */
+@VintfStability
+parcelable GalileoSatelliteEphemeris {
+ /**
+ * Contains the set of parameters needed for Galileo satellite clock correction.
+ * This is defined in Galileo-OS-SIS-ICD 5.1.3.
+ */
+ @VintfStability
+ parcelable GalileoSatelliteClockModel {
+ /*
+ * States the type of satellite clock.
+ */
+ @VintfStability
+ @Backing(type="int")
+ enum SatelliteClockType {
+ UNDEFINED = 0,
+ GALILEO_FNAV_CLOCK = 1,
+ GALILEO_INAV_CLOCK = 2
+ }
+
+ /** Time of the clock. */
+ TimeOfClock toc;
+
+ /** SV clock bias correction coefficient in seconds. */
+ double af0;
+
+ /** SV clock drift correction coefficient in seconds per second. */
+ double af1;
+
+ /** SV clock drift rate correction coefficient in seconds per second squared. */
+ double af2;
+
+ /**
+ * Broadcast group delay in seconds.
+ * This is defined in Galileo-OS-SIS-ICD 5.1.5.
+ */
+ double bgdSeconds;
+
+ /**
+ * Signal in space accuracy in meters.
+ * This is defined in Galileo-OS-SIS-ICD 5.1.12.
+ */
+ double sisaMeters;
+
+ /** Type of satellite clock .*/
+ SatelliteClockType satelliteClockType;
+ }
+
+ /**
+ * Contains satellite health.
+ * This is defined in Galileo-OS-SIS-ICD 5.1.9.3.
+ */
+ @VintfStability
+ parcelable GalileoSvHealth {
+ /** E1-B data validity status. */
+ int dataValidityStatusE1b;
+
+ /** E1-B/C signal health status. */
+ int signalHealthStatusE1b;
+
+ /** E5a data validity status. */
+ int dataValidityStatusE5a;
+
+ /** E5a signal health status. */
+ int signalHealthStatusE5a;
+
+ /** E5b data validity status. */
+ int dataValidityStatusE5b;
+
+ /** E5b signal health status. */
+ int signalHealthStatusE5b;
+ }
+
+ /** Satellite code number. */
+ int satelliteCodeNumber;
+
+ /** Array of satellite clock model. */
+ GalileoSatelliteClockModel[] satelliteClockModel;
+
+ /** Satellite orbit model. */
+ KeplerianOrbitModel satelliteOrbitModel;
+
+ /** Satellite health. */
+ GalileoSvHealth svHealth;
+
+ /** Satellite ephemeris time. */
+ SatelliteEphemerisTime satelliteEphemerisTime;
+}
diff --git a/gnss/aidl/android/hardware/gnss/gnss_assistance/GlonassAlmanac.aidl b/gnss/aidl/android/hardware/gnss/gnss_assistance/GlonassAlmanac.aidl
new file mode 100644
index 0000000..2662717
--- /dev/null
+++ b/gnss/aidl/android/hardware/gnss/gnss_assistance/GlonassAlmanac.aidl
@@ -0,0 +1,56 @@
+package android.hardware.gnss.gnss_assistance;
+
+/**
+ * Contains Glonass almanac data.
+ * This is defined in Glonass ICD v5.1, Section 4.5.
+ *
+ * @hide
+ */
+@VintfStability
+parcelable GlonassAlmanac {
+ /**
+ * Contains Glonass satellite almanac data.
+ * This is defined in Glonass ICD v5.1, Section 4.5.
+ */
+ @VintfStability
+ parcelable GlonassSatelliteAlmanac {
+ /** Slot number. */
+ int slotNumber;
+
+ /** Satellite health (0=healthy, 1=unhealthy). */
+ int svHealth;
+
+ /** Frequency channel number. */
+ int frequencyChannel;
+
+ /** Coarse value of satellite time correction to GLONASS time in seconds. */
+ double tau;
+
+ /** Time of first ascending node passage of satellite in seconds. */
+ double tLambda;
+
+ /** Longitude of the first ascending node in semi-circles. */
+ double lambda;
+
+ /** Correction to the mean value of inclination in semi-circles. */
+ double deltaI;
+
+ /** Correction to the mean value of the draconian period in seconds per orbital period. */
+ double deltaT;
+
+ /** Rate of change of draconian period in seconds per orbital period squared. */
+ double deltaTDot;
+
+ /** Eccentricity. */
+ double eccentricity;
+
+ /** Argument of perigee in radians. */
+ double omega;
+ }
+
+ /** Almanac reference UTC time in milliseconds. */
+ long issueDate;
+
+ /** Array of GlonassSatelliteAlmanac. */
+ GlonassSatelliteAlmanac[] satelliteAlmanac;
+}
diff --git a/gnss/aidl/android/hardware/gnss/gnss_assistance/GlonassSatelliteEphemeris.aidl b/gnss/aidl/android/hardware/gnss/gnss_assistance/GlonassSatelliteEphemeris.aidl
new file mode 100644
index 0000000..383aed1
--- /dev/null
+++ b/gnss/aidl/android/hardware/gnss/gnss_assistance/GlonassSatelliteEphemeris.aidl
@@ -0,0 +1,97 @@
+/*
+ * 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.gnss.gnss_assistance;
+
+import android.hardware.gnss.gnss_assistance.SatelliteEphemerisTime;
+import android.hardware.gnss.gnss_assistance.TimeOfClock;
+
+/**
+ * Contains ephemeris parameters specific to Glonass satellites.
+ * This is defined in RINEX 3.05 APPENDIX 10 and Glonass ICD v5.1, section 4.4.
+ *
+ * @hide
+ */
+@VintfStability
+parcelable GlonassSatelliteEphemeris {
+ /** Contains the set of parameters needed for Glonass satellite clock correction. */
+ @VintfStability
+ parcelable GlonassSatelliteClockModel {
+ /** Time of Clock. */
+ TimeOfClock timeOfClock;
+
+ /** Clock bias in seconds (-TauN). */
+ double clockBias;
+
+ /** Frequency bias (+GammaN). */
+ double freqBias;
+
+ /** Frequency number. */
+ int freqNumber;
+ }
+
+ /** Contains Glonass orbit model parameters in PZ-90 coordinate system. */
+ @VintfStability
+ parcelable GlonassSatelliteOrbitModel {
+ /** X position in kilometers. */
+ double x;
+
+ /** X velocity in kilometers per second. */
+ double xDot;
+
+ /** X acceleration in kilometers per second squared. */
+ double xAccel;
+
+ /** Y position in kilometers. */
+ double y;
+
+ /** Y velocity in kilometers per second. */
+ double yDot;
+
+ /** Y acceleration in kilometers per second squared. */
+ double yAccel;
+
+ /** Z position in kilometers. */
+ double z;
+
+ /** Z velocity in kilometers per second. */
+ double zDot;
+
+ /** Z acceleration in kilometers per second squared. */
+ double zAccel;
+ }
+
+ /**
+ * L1/Satellite system (R), satellite number (slot number in sat.
+ * constellation).
+ */
+ int slotNumber;
+
+ /** Satellite health (0=healthy, 1=unhealthy). */
+ int svHealth;
+
+ /** Message frame time in seconds of the UTC week (tk+nd*86400). */
+ double frameTimeSeconds;
+
+ /** Age of current information in days (E). */
+ int ageInDays;
+
+ /** Satellite clock model. */
+ GlonassSatelliteClockModel satelliteClockModel;
+
+ /** Satellite orbit model. */
+ GlonassSatelliteOrbitModel satelliteOrbitModel;
+}
diff --git a/gnss/aidl/android/hardware/gnss/gnss_assistance/GnssAssistance.aidl b/gnss/aidl/android/hardware/gnss/gnss_assistance/GnssAssistance.aidl
new file mode 100644
index 0000000..dad0764
--- /dev/null
+++ b/gnss/aidl/android/hardware/gnss/gnss_assistance/GnssAssistance.aidl
@@ -0,0 +1,209 @@
+/*
+ * 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.gnss.gnss_assistance;
+
+import android.hardware.gnss.gnss_assistance.BeidouAlmanac;
+import android.hardware.gnss.gnss_assistance.BeidouSatelliteEphemeris;
+import android.hardware.gnss.gnss_assistance.GalileoAlmanac;
+import android.hardware.gnss.gnss_assistance.GalileoIonosphericModel;
+import android.hardware.gnss.gnss_assistance.GalileoSatelliteEphemeris;
+import android.hardware.gnss.gnss_assistance.GlonassAlmanac;
+import android.hardware.gnss.gnss_assistance.GlonassSatelliteEphemeris;
+import android.hardware.gnss.gnss_assistance.GpsAlmanac;
+import android.hardware.gnss.gnss_assistance.GpsSatelliteEphemeris;
+import android.hardware.gnss.gnss_assistance.IonosphericCorrection;
+import android.hardware.gnss.gnss_assistance.KlobucharIonosphericModel;
+import android.hardware.gnss.gnss_assistance.LeapSecondsModel;
+import android.hardware.gnss.gnss_assistance.QzssAlmanac;
+import android.hardware.gnss.gnss_assistance.QzssSatelliteEphemeris;
+import android.hardware.gnss.gnss_assistance.RealTimeIntegrityModel;
+import android.hardware.gnss.gnss_assistance.TimeModel;
+import android.hardware.gnss.gnss_assistance.UtcModel;
+
+/**
+ * Contains GNSS assistance.
+ *
+ * @hide
+ */
+@VintfStability
+parcelable GnssAssistance {
+ /** GNSS corrections for satellites. */
+ @VintfStability
+ parcelable GnssSatelliteCorrections {
+ /**
+ * Pseudo-random or satellite ID number for the satellite, a.k.a. Space Vehicle (SV), or
+ * OSN number for Glonass. The distinction is made by looking at the constellation field.
+ * Values must be in the range of:
+ *
+ * - GNSS: 1-32
+ * - GLONASS: 1-25
+ * - QZSS: 183-206
+ * - Galileo: 1-36
+ * - Beidou: 1-63
+ */
+ int svid;
+
+ /** Ionospheric corrections */
+ IonosphericCorrection[] inonosphericCorrections;
+ }
+
+ /** Contains GPS assistance. */
+ @VintfStability
+ parcelable GpsAssistance {
+ /** The GPS almanac. */
+ GpsAlmanac almanac;
+
+ /** The Klobuchar ionospheric model. */
+ KlobucharIonosphericModel ionosphericModel;
+
+ /** The UTC model. */
+ UtcModel utcModel;
+
+ /** The leap seconds model. */
+ LeapSecondsModel leapSecondsModel;
+
+ /** The array of time models. */
+ TimeModel[] timeModels;
+
+ /** The array of GPS ephemeris. */
+ GpsSatelliteEphemeris[] satelliteEphemeris;
+
+ /** The array of real time integrity models. */
+ RealTimeIntegrityModel[] realTimeIntegrityModels;
+
+ /** The array of GPS satellite corrections. */
+ GnssSatelliteCorrections[] satelliteCorrections;
+ }
+
+ /** Contains Galileo assistance. */
+ @VintfStability
+ parcelable GalileoAssistance {
+ /** The Galileo almanac. */
+ GalileoAlmanac almanac;
+
+ /** The Galileo ionospheric model. */
+ GalileoIonosphericModel ionosphericModel;
+
+ /** The UTC model. */
+ UtcModel utcModel;
+
+ /** The leap seconds model. */
+ LeapSecondsModel leapSecondsModel;
+
+ /** The array of time models. */
+ TimeModel[] timeModels;
+
+ /** The array of Galileo ephemeris. */
+ GalileoSatelliteEphemeris[] satelliteEphemeris;
+
+ /** The array of real time integrity models. */
+ RealTimeIntegrityModel[] realTimeIntegrityModels;
+
+ /** The array of Galileo satellite corrections. */
+ GnssSatelliteCorrections[] satelliteCorrections;
+ }
+
+ /** Contains Glonass assistance. */
+ @VintfStability
+ parcelable GlonassAssistance {
+ /** The Glonass almanac. */
+ GlonassAlmanac almanac;
+
+ /** The UTC model. */
+ UtcModel utcModel;
+
+ /** The array of time models. */
+ TimeModel[] timeModels;
+
+ /** The array of Glonass ephemeris. */
+ GlonassSatelliteEphemeris[] satelliteEphemeris;
+
+ /** The array of Glonass satellite corrections. */
+ GnssSatelliteCorrections[] satelliteCorrections;
+ }
+
+ /** Contains QZSS assistance. */
+ @VintfStability
+ parcelable QzssAssistance {
+ /** The QZSS almanac. */
+ QzssAlmanac almanac;
+
+ /** The Klobuchar ionospheric model. */
+ KlobucharIonosphericModel ionosphericModel;
+
+ /** The UTC model. */
+ UtcModel utcModel;
+
+ /** The leap seconds model. */
+ LeapSecondsModel leapSecondsModel;
+
+ /** The array of time models. */
+ TimeModel[] timeModels;
+
+ /** The array of QZSS ephemeris. */
+ QzssSatelliteEphemeris[] satelliteEphemeris;
+
+ /** The array of real time integrity models. */
+ RealTimeIntegrityModel[] realTimeIntegrityModels;
+
+ /** The array of QZSS satellite corrections. */
+ GnssSatelliteCorrections[] satelliteCorrections;
+ }
+
+ /** Contains Beidou assistance. */
+ @VintfStability
+ parcelable BeidouAssistance {
+ /** The Beidou almanac. */
+ BeidouAlmanac almanac;
+
+ /** The Klobuchar ionospheric model. */
+ KlobucharIonosphericModel ionosphericModel;
+
+ /** The UTC model. */
+ UtcModel utcModel;
+
+ /** The leap seconds model. */
+ LeapSecondsModel leapSecondsModel;
+
+ /** The array of time models. */
+ TimeModel[] timeModels;
+
+ /** The array of Beidou ephemeris. */
+ BeidouSatelliteEphemeris[] satelliteEphemeris;
+
+ /** The array of real time integrity models. */
+ RealTimeIntegrityModel[] realTimeIntegrityModels;
+
+ /** The array of Beidou satellite corrections. */
+ GnssSatelliteCorrections[] satelliteCorrections;
+ }
+
+ /** GPS assistance. */
+ GpsAssistance gpsAssistance;
+
+ /** Glonass assistance. */
+ GlonassAssistance gloAssistance;
+
+ /** Galileo assistance. */
+ GalileoAssistance galAssistance;
+
+ /** Beidou assistance. */
+ BeidouAssistance bdsAssistance;
+
+ /** QZSS assistance. */
+ QzssAssistance qzsAssistance;
+}
diff --git a/gnss/aidl/android/hardware/gnss/gnss_assistance/GnssCorrectionComponent.aidl b/gnss/aidl/android/hardware/gnss/gnss_assistance/GnssCorrectionComponent.aidl
new file mode 100644
index 0000000..445727f
--- /dev/null
+++ b/gnss/aidl/android/hardware/gnss/gnss_assistance/GnssCorrectionComponent.aidl
@@ -0,0 +1,64 @@
+package android.hardware.gnss.gnss_assistance;
+
+/**
+ * Gnss correction associated with a component (e.g. the Ionospheric error).
+ *
+ * @hide
+ */
+@VintfStability
+parcelable GnssCorrectionComponent {
+ /**
+ * Uniquely identifies the source of correction (e.g. "Klobuchar" for
+ * ionospheric corrections).
+ * Clients should not depend on the value of the source key but, rather,
+ * can compare before/after to detect changes.
+ */
+ String sourceKey;
+
+ /**
+ * Time interval referenced against the GPS epoch. The start must be less than
+ * or equal to the end. When the start equals the end, the interval is empty.
+ */
+ @VintfStability
+ parcelable GnssInterval {
+ /**
+ * Inclusive start of the interval in milliseconds since the GPS epoch.
+ * A timestamp matching this interval will have to be the same or after the
+ * start. Required as a reference time for the initial correction value and
+ * its rate of change over time.
+ */
+ long startMillisSinceGpsEpoch;
+
+ /**
+ * Exclusive end of the interval in milliseconds since the GPS epoch. If
+ * specified, a timestamp matching this interval will have to be before the
+ * end.
+ */
+ long endMillisSinceGpsEpoch;
+ }
+
+ /** The correction is only applicable during this time interval. */
+ GnssInterval validityInterval;
+
+ /** Pseudorange correction. */
+ @VintfStability
+ parcelable PseudorangeCorrection {
+ /* Correction to be added to the measured pseudorange, in meters. */
+ double correctionMeters;
+
+ /* Uncertainty of the correction, in meters. */
+ double correctionUncertaintyMeters;
+
+ /**
+ * Linear approximation of the change in correction over time. Intended
+ * usage is to adjust the correction using the formula:
+ * correctionMeters + correctionRateMetersPerSecond * delta_seconds
+ * Where `delta_seconds` is the number of elapsed seconds since the beginning
+ * of the correction validity interval.
+ */
+ double correctionRateMetersPerSecond;
+ }
+
+ /* Pseudorange correction. */
+ PseudorangeCorrection pseudorangeCorrection;
+}
diff --git a/gnss/aidl/android/hardware/gnss/gnss_assistance/GpsAlmanac.aidl b/gnss/aidl/android/hardware/gnss/gnss_assistance/GpsAlmanac.aidl
new file mode 100644
index 0000000..9cc37f9
--- /dev/null
+++ b/gnss/aidl/android/hardware/gnss/gnss_assistance/GpsAlmanac.aidl
@@ -0,0 +1,82 @@
+/*
+ * 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.gnss.gnss_assistance;
+
+/**
+ * Contains GPS almanac data.
+ * This is defined in IS-GPS-200, section 20.3.3.5.1.2.
+ *
+ * @hide
+ */
+@VintfStability
+parcelable GpsAlmanac {
+ /** GPS week number. */
+ int gpsWeekNumber;
+
+ /** GPS time of week in seconds. */
+ int secondsOfGpsWeek;
+
+ /**
+ * Contains GPS satellite almanac data.
+ * This is defined in IS-GPS-200, section 20.3.3.5.1.2.
+ */
+ @VintfStability
+ parcelable GpsSatelliteAlmanac {
+ /** The PRN number of the GPS satellite. */
+ int prn;
+
+ /**
+ * Satellite health information.
+ * The satellite subframe 4 and 5, page 25 six-bit health code as defined
+ * in IS-GPS-200 Table 20-VIII expressed in integer form.
+ */
+ int svHealth;
+
+ /** Eccentricity. */
+ double eccentricity;
+
+ /**
+ * Correction of inclination angle relative to reference value at
+ * reference time in semi-circles.
+ */
+ double inclination;
+
+ /** Argument of perigee in semi-circles. */
+ double omega;
+
+ /** Longitude of ascending node of orbital plane at weekly epoch in semi-circles. */
+ double omega0;
+
+ /** Rate of right ascension in semi-circles per second. */
+ double omegaDot;
+
+ /** Square root of semi-major axis in square root of meters. */
+ double rootA;
+
+ /** Mean anomaly at reference time in semi-circles. */
+ double m0;
+
+ /** Satellite clock time bias correction coefficient in seconds. */
+ double af0;
+
+ /** Satellite clock time drift correction coefficient in seconds per second. */
+ double af1;
+ }
+
+ /** Array of GpsSatelliteAlmanac. */
+ GpsSatelliteAlmanac[] satelliteAlmanac;
+}
diff --git a/gnss/aidl/android/hardware/gnss/gnss_assistance/GpsSatelliteEphemeris.aidl b/gnss/aidl/android/hardware/gnss/gnss_assistance/GpsSatelliteEphemeris.aidl
new file mode 100644
index 0000000..b24c593
--- /dev/null
+++ b/gnss/aidl/android/hardware/gnss/gnss_assistance/GpsSatelliteEphemeris.aidl
@@ -0,0 +1,105 @@
+/*
+ * 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.gnss.gnss_assistance;
+
+import android.hardware.gnss.gnss_assistance.KeplerianOrbitModel;
+import android.hardware.gnss.gnss_assistance.SatelliteEphemerisTime;
+import android.hardware.gnss.gnss_assistance.TimeOfClock;
+
+/**
+ * Contains ephemeris parameters specific to GPS satellites.
+ * This is defined in IS-GPS-200, section 20.3.3.3.
+ *
+ * @hide
+ */
+@VintfStability
+parcelable GpsSatelliteEphemeris {
+ /** Satellite PRN */
+ int prn;
+
+ /* Contains information about L2 params. */
+ @VintfStability
+ parcelable GpsL2Params {
+ /** Code(s) on L2 Channel. */
+ int l2Code;
+
+ /** Data Flag for L2 P-Code. */
+ int l2Flag;
+ }
+
+ /** L2 parameters. */
+ GpsL2Params gpsL2Params;
+
+ /** Contains the set of parameters needed for GPS satellite clock correction. */
+ @VintfStability
+ parcelable GpsSatelliteClockModel {
+ /** Time of the clock. */
+ TimeOfClock timeOfClock;
+
+ /** SV clock bias in seconds. */
+ double af0;
+
+ /** SV clock drift in seconds per second. */
+ double af1;
+
+ /** Clock drift rate in seconds per second squared. */
+ double af2;
+
+ /** Group delay differential in seconds. */
+ double tgd;
+
+ /** Issue of data, clock. */
+ int iodc;
+ }
+
+ /** Clock model. */
+ GpsSatelliteClockModel satelliteClockModel;
+
+ /** Orbit model. */
+ KeplerianOrbitModel satelliteOrbitModel;
+
+ /**
+ * Contains information about GPS health. The information is tied to
+ * Legacy Navigation (LNAV) data, not Civil Navigation (CNAV) data.
+ */
+ @VintfStability
+ parcelable GpsSatelliteHealth {
+ /**
+ * Represents "SV health" in the "BROADCAST ORBIT - 6"
+ * record of RINEX 3.05. Table A6, pp.68.
+ */
+ int svHealth;
+
+ /**
+ * Represents "SV accuracy" in meters in the "BROADCAST ORBIT - 6"
+ * record of RINEX 3.05. Table A6, pp.68.
+ */
+ double svAccur;
+
+ /**
+ * Represents the "Fit Interval" in hours in the "BROADCAST ORBIT - 7"
+ * record of RINEX 3.05. Table A6, pp.69.
+ */
+ double fitInt;
+ }
+
+ /** Satellite health. */
+ GpsSatelliteHealth satelliteHealth;
+
+ /** Ephemeris time. */
+ SatelliteEphemerisTime satelliteEphemerisTime;
+}
diff --git a/gnss/aidl/android/hardware/gnss/gnss_assistance/IGnssAssistanceCallback.aidl b/gnss/aidl/android/hardware/gnss/gnss_assistance/IGnssAssistanceCallback.aidl
new file mode 100644
index 0000000..883189c
--- /dev/null
+++ b/gnss/aidl/android/hardware/gnss/gnss_assistance/IGnssAssistanceCallback.aidl
@@ -0,0 +1,32 @@
+/*
+ * 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.gnss.gnss_assistance;
+
+/**
+ * The callback interface for GNSS HAL to request GNSS assistance data
+ * (ephemeris and ionospheric corrections) from the framework.
+ *
+ * @hide
+ */
+@VintfStability
+interface IGnssAssistanceCallback {
+ /**
+ * Callback to request the framework to inject GNSS assistance data via
+ * IGnssAssistanceInterface.
+ */
+ void injectRequestCb();
+}
diff --git a/gnss/aidl/android/hardware/gnss/gnss_assistance/IGnssAssistanceInterface.aidl b/gnss/aidl/android/hardware/gnss/gnss_assistance/IGnssAssistanceInterface.aidl
new file mode 100644
index 0000000..2097e1e
--- /dev/null
+++ b/gnss/aidl/android/hardware/gnss/gnss_assistance/IGnssAssistanceInterface.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.
+ */
+
+package android.hardware.gnss.gnss_assistance;
+
+import android.hardware.gnss.gnss_assistance.GnssAssistance;
+import android.hardware.gnss.gnss_assistance.IGnssAssistanceCallback;
+
+/**
+ * Interface used by the GNSS HAL to request the GNSS assistance data
+ * (ephemeris and ionospheric corrections) from the framework.
+ *
+ * The GNSS chipset uses the injected assistance data in the process of computing
+ * the user position for satellite position computation and error corrections.
+ *
+ * The framework ensures the assistance data is valid. GNSS HAL should request the
+ * data when it's engine lacks valid assistance data.
+ *
+ * @hide
+ */
+@VintfStability
+interface IGnssAssistanceInterface {
+ /**
+ * Inject the GNSS assistance into the GNSS receiver.
+ *
+ * @param gnssAssistance GNSS assistance.
+ */
+ void injectGnssAssistance(in GnssAssistance gnssAssistance);
+
+ /**
+ * Provides the callback routines to request the GNSS assistance.
+ *
+ * @param callback Handle to the IGnssAssistanceCallback interface.
+ */
+ void setCallback(in IGnssAssistanceCallback callback);
+}
diff --git a/gnss/aidl/android/hardware/gnss/gnss_assistance/IonosphericCorrection.aidl b/gnss/aidl/android/hardware/gnss/gnss_assistance/IonosphericCorrection.aidl
new file mode 100644
index 0000000..e8e50bd
--- /dev/null
+++ b/gnss/aidl/android/hardware/gnss/gnss_assistance/IonosphericCorrection.aidl
@@ -0,0 +1,36 @@
+/*
+ * 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.gnss.gnss_assistance;
+
+import android.hardware.gnss.gnss_assistance.GnssCorrectionComponent;
+
+/**
+ * Contains Ionospheric correction.
+ *
+ * @hide
+ */
+@VintfStability
+parcelable IonosphericCorrection {
+ /**
+ * Carrier frequency in Hz to differentiate signals from the same satellite.
+ * e.g. GPS L1/L5
+ */
+ long carrierFrequencyHz;
+
+ /** Ionospheric correction. */
+ GnssCorrectionComponent ionosphericCorrection;
+}
diff --git a/gnss/aidl/android/hardware/gnss/gnss_assistance/KeplerianOrbitModel.aidl b/gnss/aidl/android/hardware/gnss/gnss_assistance/KeplerianOrbitModel.aidl
new file mode 100644
index 0000000..15003e7
--- /dev/null
+++ b/gnss/aidl/android/hardware/gnss/gnss_assistance/KeplerianOrbitModel.aidl
@@ -0,0 +1,83 @@
+/*
+ * 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.gnss.gnss_assistance;
+
+/**
+ * Contains Keplerian orbit model parameters for GPS/Galileo/QZSS/Beidou.
+ * For GPS, this is defined in IS-GPS-200 Table 20-II.
+ * For Galileo, this is defined in Galileo-OS-SIS-ICD-v2.1 5.1.1.
+ * For QZSS, this is defined in IS-QZSS-PNT section 4.1.2.
+ * For Baidou, this is defined in BDS-SIS-ICD-B1I-3.0 section 5.2.4.12.
+ *
+ * @hide
+ */
+@VintfStability
+parcelable KeplerianOrbitModel {
+ /** Square root of the semi-major axis in square root of meters. */
+ double rootA;
+
+ /** Eccentricity. */
+ double eccentricity;
+
+ /** Inclination angle at reference time in semi-circles. */
+ double i0;
+
+ /** Rate of change of inclination angle in semi-circles per second. */
+ double iDot;
+
+ /** Argument of perigee in semi-circles. */
+ double omega;
+
+ /** Longitude of ascending node of orbit plane at beginning of week in semi-circles. */
+ double omega0;
+
+ /** Rate of right ascension in semi-circles per second. */
+ double omegaDot;
+
+ /** Mean anomaly at reference time in semi-circles. */
+ double m0;
+
+ /** Mean motion difference from computed value in semi-circles per second. */
+ double deltaN;
+
+ /**
+ * Contains second-order harmonic perturbations.
+ */
+ @VintfStability
+ parcelable SecondOrderHarmonicPerturbation {
+ /** Amplitude of cosine harmonic correction term to angle of inclination in radians. */
+ double cic;
+
+ /** Amplitude of sine harmonic correction term to angle of inclination in radians. */
+ double cis;
+
+ /** Amplitude of cosine harmonic correction term to the orbit in meters. */
+ double crc;
+
+ /** Amplitude of sine harmonic correction term to the orbit in meters. */
+ double crs;
+
+ /** Amplitude of cosine harmonic correction term to the argument of latitude in radians. */
+ double cuc;
+
+ /** Amplitude of sine harmonic correction term to the argument of latitude in radians. */
+ double cus;
+ }
+
+ /** Second-order harmonic perturbations. */
+ SecondOrderHarmonicPerturbation secondOrderHarmonicPerturbation;
+}
diff --git a/gnss/aidl/android/hardware/gnss/gnss_assistance/KlobucharIonosphericModel.aidl b/gnss/aidl/android/hardware/gnss/gnss_assistance/KlobucharIonosphericModel.aidl
new file mode 100644
index 0000000..e261e97
--- /dev/null
+++ b/gnss/aidl/android/hardware/gnss/gnss_assistance/KlobucharIonosphericModel.aidl
@@ -0,0 +1,50 @@
+/*
+ * 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.gnss.gnss_assistance;
+
+/**
+ * Contains Klobuchar ionospheric model coefficients used by GPS, BDS, QZSS.
+ * This is defined in IS-GPS-200 20.3.3.5.1.7.
+ *
+ * @hide
+ */
+@VintfStability
+parcelable KlobucharIonosphericModel {
+ /** Alpha0 coefficient in seconds. */
+ double alpha0;
+
+ /** Alpha1 coefficient in seconds per semi-circle. */
+ double alpha1;
+
+ /** Alpha2 coefficient in seconds per semi-circle squared. */
+ double alpha2;
+
+ /** Alpha3 coefficient in seconds per semi-circle cubed. */
+ double alpha3;
+
+ /** Beta0 coefficient in seconds. */
+ double beta0;
+
+ /** Beta1 coefficient in seconds per semi-circle. */
+ double beta1;
+
+ /** Beta2 coefficient in seconds per semi-circle squared. */
+ double beta2;
+
+ /** Beta3 coefficient in seconds per semi-circle cubed. */
+ double beta3;
+}
diff --git a/gnss/aidl/android/hardware/gnss/gnss_assistance/LeapSecondsModel.aidl b/gnss/aidl/android/hardware/gnss/gnss_assistance/LeapSecondsModel.aidl
new file mode 100644
index 0000000..0ebd46d
--- /dev/null
+++ b/gnss/aidl/android/hardware/gnss/gnss_assistance/LeapSecondsModel.aidl
@@ -0,0 +1,38 @@
+/*
+ * 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.gnss.gnss_assistance;
+
+/**
+ * Contains the leap seconds set of parameters needed for GNSS time.
+ * This is defined in RINEX 3.05 "LEAP SECONDS" in table A2.
+ *
+ * @hide
+ */
+@VintfStability
+parcelable LeapSecondsModel {
+ /** Time difference due to leap seconds before the event in seconds. */
+ int leapSeconds;
+
+ /** Time difference due to leap seconds after the event in seconds. */
+ int leapSecondsFuture;
+
+ /** GNSS week number in which the leap second event will occur. */
+ int weekNumberLeapSecondsFuture;
+
+ /** Day number when the next leap second will occur. */
+ int dayNumberLeapSecondsFuture;
+}
diff --git a/gnss/aidl/android/hardware/gnss/gnss_assistance/QzssAlmanac.aidl b/gnss/aidl/android/hardware/gnss/gnss_assistance/QzssAlmanac.aidl
new file mode 100644
index 0000000..80ace39
--- /dev/null
+++ b/gnss/aidl/android/hardware/gnss/gnss_assistance/QzssAlmanac.aidl
@@ -0,0 +1,82 @@
+/*
+ * 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.gnss.gnss_assistance;
+
+/**
+ * Contains QZSS almanac data.
+ * This is defined in IS-QZSS-PNT, section 4.1.2.6.
+ *
+ * @hide
+ */
+@VintfStability
+parcelable QzssAlmanac {
+ /** QZSS week number. */
+ int qzssWeekNumber;
+
+ /** QZSS time of week in seconds. */
+ int secondsOfQzssWeek;
+
+ /**
+ * Contains QZSS satellite almanac data.
+ * This is defined in IS-QZSS-PNT, section 4.1.2.6.
+ */
+ @VintfStability
+ parcelable QzssSatelliteAlmanac {
+ /** The PRN number of the QZSS satellite. */
+ int prn;
+
+ /**
+ * Satellite health information.
+ * This is the 5-bit health code as defined in IS-QZSS-PNT, Table 4.1.2-5-2
+ * expressed in integer form.
+ */
+ int svHealth;
+
+ /** Eccentricity. */
+ double eccentricity;
+
+ /**
+ * Correction of inclination angle relative to reference value at
+ * reference time in semi-circles.
+ */
+ double inclination;
+
+ /** Argument of perigee in semi-circles. */
+ double omega;
+
+ /** Longitude of ascending node of orbital plane at weekly epoch in semi-circles. */
+ double omega0;
+
+ /** Rate of right ascension in semi-circles per second. */
+ double omegaDot;
+
+ /** Square root of semi-major axis in square root of meters. */
+ double rootA;
+
+ /** Mean anomaly at reference time in semi-circles. */
+ double m0;
+
+ /** Satellite clock time bias correction coefficient in seconds. */
+ double af0;
+
+ /** Satellite clock time drift correction coefficient in seconds per second. */
+ double af1;
+ }
+
+ /** Array of QzssSatelliteAlmanac. */
+ QzssSatelliteAlmanac[] satelliteAlmanac;
+}
diff --git a/gnss/aidl/android/hardware/gnss/gnss_assistance/QzssSatelliteEphemeris.aidl b/gnss/aidl/android/hardware/gnss/gnss_assistance/QzssSatelliteEphemeris.aidl
new file mode 100644
index 0000000..7efa4d9
--- /dev/null
+++ b/gnss/aidl/android/hardware/gnss/gnss_assistance/QzssSatelliteEphemeris.aidl
@@ -0,0 +1,51 @@
+/*
+ * 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.gnss.gnss_assistance;
+
+import android.hardware.gnss.gnss_assistance.GpsSatelliteEphemeris.GpsL2Params;
+import android.hardware.gnss.gnss_assistance.GpsSatelliteEphemeris.GpsSatelliteClockModel;
+import android.hardware.gnss.gnss_assistance.GpsSatelliteEphemeris.GpsSatelliteHealth;
+import android.hardware.gnss.gnss_assistance.KeplerianOrbitModel;
+import android.hardware.gnss.gnss_assistance.SatelliteEphemerisTime;
+import android.hardware.gnss.gnss_assistance.TimeOfClock;
+
+/**
+ * Contains ephemeris parameters specific to QZSS satellites.
+ * This is defined in IS-QZSS-PNT, section 4.1.2.
+ *
+ * @hide
+ */
+@VintfStability
+parcelable QzssSatelliteEphemeris {
+ /** Satellite PRN. */
+ int prn;
+
+ /** L2 parameters. */
+ GpsL2Params gpsL2Params;
+
+ /** Clock model. */
+ GpsSatelliteClockModel satelliteClockModel;
+
+ /** Orbit model. */
+ KeplerianOrbitModel satelliteOrbitModel;
+
+ /** Satellite health. */
+ GpsSatelliteHealth satelliteHealth;
+
+ /** Ephemeris time. */
+ SatelliteEphemerisTime satelliteEphemerisTime;
+}
diff --git a/gnss/aidl/android/hardware/gnss/gnss_assistance/RealTimeIntegrityModel.aidl b/gnss/aidl/android/hardware/gnss/gnss_assistance/RealTimeIntegrityModel.aidl
new file mode 100644
index 0000000..4a4122c
--- /dev/null
+++ b/gnss/aidl/android/hardware/gnss/gnss_assistance/RealTimeIntegrityModel.aidl
@@ -0,0 +1,69 @@
+/*
+ * 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.gnss.gnss_assistance;
+
+/**
+ * Contains the real time integrity status of a GNSS satellite based on
+ * notice advisory.
+ *
+ * @hide
+ */
+@VintfStability
+parcelable RealTimeIntegrityModel {
+ /**
+ * Pseudo-random or satellite ID number for the satellite, a.k.a. Space Vehicle (SV), or
+ * OSN number for Glonass. The distinction is made by looking at the constellation field.
+ * Values must be in the range of:
+ *
+ * - GNSS: 1-32
+ * - GLONASS: 1-25
+ * - QZSS: 183-206
+ * - Galileo: 1-36
+ * - Beidou: 1-63
+ */
+ int svid;
+
+ /** Indicates whether the satellite is currently usable for navigation. */
+ boolean usable;
+
+ /** UTC timestamp (in seconds) when the advisory was published. */
+ long publishDateSeconds;
+
+ /** UTC timestamp (in seconds) for the start of the event. */
+ long startDateSeconds;
+
+ /** UTC timestamp (in seconds) for the end of the event. */
+ long endDateSeconds;
+
+ /**
+ * Abbreviated type of the advisory, providing a concise summary of the event.
+ * This field follows different definitions depending on the GNSS constellation:
+ * - GPS: See NANU type definitions
+ * (https://www.navcen.uscg.gov/nanu-abbreviations-and-descriptions)
+ * - Galileo: See NAGU type definitions
+ * (https://www.gsc-europa.eu/system-service-status/nagu-information)
+ * - QZSS: See NAQU type definitions (https://sys.qzss.go.jp/dod/en/naqu/type.html)
+ * - BeiDou: Not used; set to an empty string.
+ */
+ String advisoryType;
+
+ /**
+ * Unique identifier for the advisory within its constellation's system.
+ * For BeiDou, this is not used and should be an empty string.
+ */
+ String advisoryNumber;
+}
diff --git a/gnss/aidl/android/hardware/gnss/gnss_assistance/SatelliteEphemerisTime.aidl b/gnss/aidl/android/hardware/gnss/gnss_assistance/SatelliteEphemerisTime.aidl
new file mode 100644
index 0000000..2d9b3e6
--- /dev/null
+++ b/gnss/aidl/android/hardware/gnss/gnss_assistance/SatelliteEphemerisTime.aidl
@@ -0,0 +1,36 @@
+/*
+ * 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.gnss.gnss_assistance;
+
+/**
+ * Contains time of ephemeris.
+ *
+ * For GPS, this is defined in IS-GPS-200, section 20.3.3.4.1.
+ * For QZSS, this is defined in IS-QZSS-200, section 4.1.2.4.
+ * @hide
+ */
+@VintfStability
+parcelable SatelliteEphemerisTime {
+ /** The issue of ephemeris data. */
+ int iode;
+
+ /** The satellite week number. */
+ int weekNumber;
+
+ /** The broadcast time of ephemeris in GNSS time of week in seconds. */
+ int toeSeconds;
+}
diff --git a/gnss/aidl/android/hardware/gnss/gnss_assistance/TimeModel.aidl b/gnss/aidl/android/hardware/gnss/gnss_assistance/TimeModel.aidl
new file mode 100644
index 0000000..8804f02
--- /dev/null
+++ b/gnss/aidl/android/hardware/gnss/gnss_assistance/TimeModel.aidl
@@ -0,0 +1,46 @@
+/*
+ * 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.gnss.gnss_assistance;
+
+import android.hardware.gnss.GnssConstellationType;
+
+/*
+ * Contains the GNSS-GNSS system time offset between the GNSS system time.
+ * This is defined in RINEX 3.05 "TIME SYSTEM CORR" in table A5.
+ *
+ * @hide
+ */
+@VintfStability
+parcelable TimeModel {
+ /*
+ * Model represents parameters to convert from current GNSS to GNSS system
+ * time indicated by toGnss.
+ */
+ GnssConstellationType toGnss;
+
+ /** Bias coefficient of GNSS time scale relative to GNSS time scale in seconds. */
+ double a0;
+
+ /** Drift coefficient of GNSS time scale relative to GNSS time scale in seconds per second. */
+ double a1;
+
+ /** Reference GNSS time of week in seconds. */
+ int timeOfWeek;
+
+ /** Reference GNSS week number. */
+ int weekNumber;
+}
diff --git a/gnss/aidl/android/hardware/gnss/gnss_assistance/TimeOfClock.aidl b/gnss/aidl/android/hardware/gnss/gnss_assistance/TimeOfClock.aidl
new file mode 100644
index 0000000..7b9cc9f
--- /dev/null
+++ b/gnss/aidl/android/hardware/gnss/gnss_assistance/TimeOfClock.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.gnss.gnss_assistance;
+
+/*
+ * Contains the reference time of the GNSS clock.
+ *
+ * @hide
+ */
+@VintfStability
+parcelable TimeOfClock {
+ /** Year of the clock. */
+ int year;
+
+ /** Month of the clock. */
+ int month;
+
+ /** Day of the clock. */
+ int day;
+
+ /** Hour of the clock. */
+ int hour;
+
+ /** Minute of the clock. */
+ int minute;
+
+ /** Second of the clock. */
+ int seconds;
+}
diff --git a/gnss/aidl/android/hardware/gnss/gnss_assistance/UtcModel.aidl b/gnss/aidl/android/hardware/gnss/gnss_assistance/UtcModel.aidl
new file mode 100644
index 0000000..c16a711
--- /dev/null
+++ b/gnss/aidl/android/hardware/gnss/gnss_assistance/UtcModel.aidl
@@ -0,0 +1,38 @@
+/*
+ * 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.gnss.gnss_assistance;
+
+/**
+ * Contains parameters to convert from current GNSS time to UTC time.
+ * This is defined in RINEX 3.05 "TIME SYSTEM CORR" in table A5.
+ *
+ * @hide
+ */
+@VintfStability
+parcelable UtcModel {
+ /** Bias coefficient of GNSS time scale relative to UTC time scale in seconds. */
+ double a0;
+
+ /** Drift coefficient of GNSS time scale relative to UTC time scale in seconds per second. */
+ double a1;
+
+ /** Reference GNSS time of week in seconds. */
+ int timeOfWeek;
+
+ /** Reference GNSS week number. */
+ int weekNumber;
+}
diff --git a/gnss/aidl/default/Android.bp b/gnss/aidl/default/Android.bp
index 822e8fc..efe2953 100644
--- a/gnss/aidl/default/Android.bp
+++ b/gnss/aidl/default/Android.bp
@@ -45,13 +45,14 @@
"android.hardware.gnss.measurement_corrections@1.1",
"android.hardware.gnss.measurement_corrections@1.0",
"android.hardware.gnss.visibility_control@1.0",
- "android.hardware.gnss-V4-ndk",
+ "android.hardware.gnss-V5-ndk",
],
srcs: [
"AGnssRil.cpp",
"AGnss.cpp",
"Gnss.cpp",
"GnssAntennaInfo.cpp",
+ "GnssAssistanceInterface.cpp",
"GnssBatching.cpp",
"GnssDebug.cpp",
"GnssGeofence.cpp",
diff --git a/gnss/aidl/default/Gnss.cpp b/gnss/aidl/default/Gnss.cpp
index 94d4d00..4978281 100644
--- a/gnss/aidl/default/Gnss.cpp
+++ b/gnss/aidl/default/Gnss.cpp
@@ -25,6 +25,7 @@
#include "DeviceFileReader.h"
#include "FixLocationParser.h"
#include "GnssAntennaInfo.h"
+#include "GnssAssistanceInterface.h"
#include "GnssBatching.h"
#include "GnssConfiguration.h"
#include "GnssDebug.h"
@@ -390,6 +391,14 @@
return ndk::ScopedAStatus::ok();
}
+ndk::ScopedAStatus Gnss::getExtensionGnssAssistanceInterface(
+ std::shared_ptr<gnss_assistance::IGnssAssistanceInterface>* iGnssAssistanceInterface) {
+ ALOGD("Gnss::getExtensionGnssAssistanceInterface");
+
+ *iGnssAssistanceInterface = SharedRefBase::make<gnss_assistance::GnssAssistanceInterface>();
+ return ndk::ScopedAStatus::ok();
+}
+
void Gnss::setGnssMeasurementEnabled(const bool enabled) {
mGnssMeasurementEnabled = enabled;
}
diff --git a/gnss/aidl/default/Gnss.h b/gnss/aidl/default/Gnss.h
index 73085ef..56fe399 100644
--- a/gnss/aidl/default/Gnss.h
+++ b/gnss/aidl/default/Gnss.h
@@ -26,6 +26,7 @@
#include <aidl/android/hardware/gnss/BnGnssMeasurementInterface.h>
#include <aidl/android/hardware/gnss/BnGnssPowerIndication.h>
#include <aidl/android/hardware/gnss/BnGnssPsds.h>
+#include <aidl/android/hardware/gnss/gnss_assistance/BnGnssAssistanceInterface.h>
#include <aidl/android/hardware/gnss/measurement_corrections/BnMeasurementCorrectionsInterface.h>
#include <aidl/android/hardware/gnss/visibility_control/BnGnssVisibilityControl.h>
#include <atomic>
@@ -83,6 +84,9 @@
std::shared_ptr<android::hardware::gnss::measurement_corrections::
IMeasurementCorrectionsInterface>* iMeasurementCorrections)
override;
+ ndk::ScopedAStatus getExtensionGnssAssistanceInterface(
+ std::shared_ptr<android::hardware::gnss::gnss_assistance::IGnssAssistanceInterface>*
+ iGnssAssistanceInterface) override;
void reportSvStatus() const;
void setGnssMeasurementEnabled(const bool enabled);
diff --git a/gnss/aidl/default/GnssAssistanceInterface.cpp b/gnss/aidl/default/GnssAssistanceInterface.cpp
new file mode 100644
index 0000000..2ef334c
--- /dev/null
+++ b/gnss/aidl/default/GnssAssistanceInterface.cpp
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ */
+
+#define LOG_TAG "GnssAssistanceInterfaceAidl"
+
+#include "GnssAssistanceInterface.h"
+#include <aidl/android/hardware/gnss/BnGnss.h>
+#include <log/log.h>
+
+namespace aidl::android::hardware::gnss::gnss_assistance {
+
+std::shared_ptr<IGnssAssistanceCallback> GnssAssistanceInterface::sCallback = nullptr;
+
+ndk::ScopedAStatus GnssAssistanceInterface::setCallback(
+ const std::shared_ptr<IGnssAssistanceCallback>& callback) {
+ ALOGD("setCallback");
+ std::unique_lock<std::mutex> lock(mMutex);
+ sCallback = callback;
+ return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus GnssAssistanceInterface::injectGnssAssistance(
+ const GnssAssistance& gnssAssistance) {
+ ALOGD("injectGnssAssistance. %s", gnssAssistance.toString().c_str());
+ if (gnssAssistance.gpsAssistance.satelliteEphemeris.size() == 0 &&
+ gnssAssistance.gpsAssistance.satelliteCorrections.size() == 0) {
+ ALOGE("Empty GnssAssistance");
+ return ndk::ScopedAStatus::fromServiceSpecificError(IGnss::ERROR_INVALID_ARGUMENT);
+ }
+ return ndk::ScopedAStatus::ok();
+}
+} // namespace aidl::android::hardware::gnss::gnss_assistance
diff --git a/gnss/aidl/default/GnssAssistanceInterface.h b/gnss/aidl/default/GnssAssistanceInterface.h
new file mode 100644
index 0000000..9d92975
--- /dev/null
+++ b/gnss/aidl/default/GnssAssistanceInterface.h
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ */
+
+#pragma once
+
+#include <aidl/android/hardware/gnss/gnss_assistance/BnGnssAssistanceInterface.h>
+
+namespace aidl::android::hardware::gnss::gnss_assistance {
+
+struct GnssAssistanceInterface : public BnGnssAssistanceInterface {
+ public:
+ ndk::ScopedAStatus setCallback(
+ const std::shared_ptr<IGnssAssistanceCallback>& callback) override;
+ ndk::ScopedAStatus injectGnssAssistance(const GnssAssistance& gnssAssistance) override;
+
+ private:
+ // Guarded by mMutex
+ static std::shared_ptr<IGnssAssistanceCallback> sCallback;
+
+ // Synchronization lock for sCallback
+ mutable std::mutex mMutex;
+};
+
+} // namespace aidl::android::hardware::gnss::gnss_assistance
diff --git a/gnss/aidl/default/gnss-default.xml b/gnss/aidl/default/gnss-default.xml
index c01069e..700e240 100644
--- a/gnss/aidl/default/gnss-default.xml
+++ b/gnss/aidl/default/gnss-default.xml
@@ -1,7 +1,7 @@
<manifest version="1.0" type="device">
<hal format="aidl">
<name>android.hardware.gnss</name>
- <version>4</version>
+ <version>5</version>
<interface>
<name>IGnss</name>
<instance>default</instance>
diff --git a/gnss/aidl/vts/Android.bp b/gnss/aidl/vts/Android.bp
index 2bd6f07..20cf44f 100644
--- a/gnss/aidl/vts/Android.bp
+++ b/gnss/aidl/vts/Android.bp
@@ -52,7 +52,7 @@
"libbinder",
],
static_libs: [
- "android.hardware.gnss-V4-cpp",
+ "android.hardware.gnss-V5-cpp",
"android.hardware.gnss@common-vts-lib",
],
test_suites: [
diff --git a/gnss/aidl/vts/gnss_hal_test_cases.cpp b/gnss/aidl/vts/gnss_hal_test_cases.cpp
index e4890a7..a2e81d1 100644
--- a/gnss/aidl/vts/gnss_hal_test_cases.cpp
+++ b/gnss/aidl/vts/gnss_hal_test_cases.cpp
@@ -25,6 +25,7 @@
#include <android/hardware/gnss/IGnssMeasurementInterface.h>
#include <android/hardware/gnss/IGnssPowerIndication.h>
#include <android/hardware/gnss/IGnssPsds.h>
+#include <android/hardware/gnss/gnss_assistance/IGnssAssistanceInterface.h>
#include <android/hardware/gnss/measurement_corrections/IMeasurementCorrectionsInterface.h>
#include <android/hardware/gnss/visibility_control/IGnssVisibilityControl.h>
#include <cutils/properties.h>
@@ -73,6 +74,8 @@
using android::hardware::gnss::PsdsType;
using android::hardware::gnss::SatellitePvt;
using android::hardware::gnss::common::Utils;
+using android::hardware::gnss::gnss_assistance::GnssAssistance;
+using android::hardware::gnss::gnss_assistance::IGnssAssistanceInterface;
using android::hardware::gnss::measurement_corrections::IMeasurementCorrectionsInterface;
using android::hardware::gnss::visibility_control::IGnssVisibilityControl;
@@ -1877,3 +1880,22 @@
}
}
}
+
+/*
+ * Test GnssAssistanceExtension:
+ * 1. Gets the GnssAssistanceExtension
+ * 2. Injects empty GnssAssistance data and verifies that it returns an error.
+ */
+TEST_P(GnssHalTest, TestGnssAssistanceExtension) {
+ // Only runs on devices launched in Android 16+
+ if (aidl_gnss_hal_->getInterfaceVersion() <= 4) {
+ return;
+ }
+ sp<IGnssAssistanceInterface> iGnssAssistance;
+ auto status = aidl_gnss_hal_->getExtensionGnssAssistanceInterface(&iGnssAssistance);
+ if (status.isOk() && iGnssAssistance != nullptr) {
+ GnssAssistance gnssAssistance = {};
+ status = iGnssAssistance->injectGnssAssistance(gnssAssistance);
+ ASSERT_FALSE(status.isOk());
+ }
+}
diff --git a/gnss/common/utils/default/Android.bp b/gnss/common/utils/default/Android.bp
index 208bc59..e8c370a 100644
--- a/gnss/common/utils/default/Android.bp
+++ b/gnss/common/utils/default/Android.bp
@@ -57,6 +57,6 @@
"android.hardware.gnss@2.1",
"android.hardware.gnss.measurement_corrections@1.1",
"android.hardware.gnss.measurement_corrections@1.0",
- "android.hardware.gnss-V4-ndk",
+ "android.hardware.gnss-V5-ndk",
],
}
diff --git a/gnss/common/utils/vts/Android.bp b/gnss/common/utils/vts/Android.bp
index ed5674c..b8b048a 100644
--- a/gnss/common/utils/vts/Android.bp
+++ b/gnss/common/utils/vts/Android.bp
@@ -44,7 +44,7 @@
"android.hardware.gnss@2.1",
"android.hardware.gnss.measurement_corrections@1.0",
"android.hardware.gnss.measurement_corrections@1.1",
- "android.hardware.gnss-V4-cpp",
+ "android.hardware.gnss-V5-cpp",
],
static_libs: [
"libgtest",
diff --git a/graphics/Android.bp b/graphics/Android.bp
index d768ecf..2213f15 100644
--- a/graphics/Android.bp
+++ b/graphics/Android.bp
@@ -64,14 +64,14 @@
aidl_interface_defaults {
name: "android.hardware.graphics.common-latest",
imports: [
- "android.hardware.graphics.common-V5",
+ "android.hardware.graphics.common-V6",
],
}
rust_defaults {
name: "android.hardware.graphics.common-latest-rust",
rustlibs: [
- "android.hardware.graphics.common-V5-rust",
+ "android.hardware.graphics.common-V6-rust",
],
}
@@ -80,7 +80,7 @@
target: {
linux: {
static_libs: [
- "android.hardware.graphics.common-V5-ndk",
+ "android.hardware.graphics.common-V6-ndk",
],
},
},
@@ -91,7 +91,7 @@
target: {
linux: {
shared_libs: [
- "android.hardware.graphics.common-V5-ndk",
+ "android.hardware.graphics.common-V6-ndk",
],
},
},
diff --git a/graphics/allocator/aidl/Android.bp b/graphics/allocator/aidl/Android.bp
index 30b341c..3f74b23 100644
--- a/graphics/allocator/aidl/Android.bp
+++ b/graphics/allocator/aidl/Android.bp
@@ -45,7 +45,7 @@
version: "2",
imports: [
"android.hardware.common-V2",
- "android.hardware.graphics.common-V5",
+ "android.hardware.graphics.common-V6",
],
},
diff --git a/graphics/composer/aidl/Android.bp b/graphics/composer/aidl/Android.bp
index bba41da..655188d 100644
--- a/graphics/composer/aidl/Android.bp
+++ b/graphics/composer/aidl/Android.bp
@@ -59,25 +59,24 @@
{
version: "1",
imports: [
- "android.hardware.graphics.common-V5",
+ "android.hardware.graphics.common-V6",
"android.hardware.common-V2",
],
},
{
version: "2",
imports: [
- "android.hardware.graphics.common-V5",
+ "android.hardware.graphics.common-V6",
"android.hardware.common-V2",
],
},
{
version: "3",
imports: [
- "android.hardware.graphics.common-V5",
+ "android.hardware.graphics.common-V6",
"android.hardware.common-V2",
],
},
-
],
}
diff --git a/graphics/composer/aidl/aidl_api/android.hardware.graphics.composer3/current/android/hardware/graphics/composer3/DisplayCapability.aidl b/graphics/composer/aidl/aidl_api/android.hardware.graphics.composer3/current/android/hardware/graphics/composer3/DisplayCapability.aidl
index 0e2d72b..955ff89 100644
--- a/graphics/composer/aidl/aidl_api/android.hardware.graphics.composer3/current/android/hardware/graphics/composer3/DisplayCapability.aidl
+++ b/graphics/composer/aidl/aidl_api/android.hardware.graphics.composer3/current/android/hardware/graphics/composer3/DisplayCapability.aidl
@@ -43,4 +43,5 @@
SUSPEND = 6,
DISPLAY_IDLE_TIMER = 7,
MULTI_THREADED_PRESENT = 8,
+ PICTURE_PROCESSING = 9,
}
diff --git a/graphics/composer/aidl/aidl_api/android.hardware.graphics.composer3/current/android/hardware/graphics/composer3/DisplayCommand.aidl b/graphics/composer/aidl/aidl_api/android.hardware.graphics.composer3/current/android/hardware/graphics/composer3/DisplayCommand.aidl
index cce35e7..9e24a26 100644
--- a/graphics/composer/aidl/aidl_api/android.hardware.graphics.composer3/current/android/hardware/graphics/composer3/DisplayCommand.aidl
+++ b/graphics/composer/aidl/aidl_api/android.hardware.graphics.composer3/current/android/hardware/graphics/composer3/DisplayCommand.aidl
@@ -46,4 +46,5 @@
boolean presentDisplay;
boolean presentOrValidateDisplay;
int frameIntervalNs;
+ long pictureProfileId;
}
diff --git a/graphics/composer/aidl/aidl_api/android.hardware.graphics.composer3/current/android/hardware/graphics/composer3/IComposerClient.aidl b/graphics/composer/aidl/aidl_api/android.hardware.graphics.composer3/current/android/hardware/graphics/composer3/IComposerClient.aidl
index c71c010..55604a6 100644
--- a/graphics/composer/aidl/aidl_api/android.hardware.graphics.composer3/current/android/hardware/graphics/composer3/IComposerClient.aidl
+++ b/graphics/composer/aidl/aidl_api/android.hardware.graphics.composer3/current/android/hardware/graphics/composer3/IComposerClient.aidl
@@ -87,6 +87,7 @@
void setRefreshRateChangedCallbackDebugEnabled(long display, boolean enabled);
android.hardware.graphics.composer3.DisplayConfiguration[] getDisplayConfigurations(long display, int maxFrameIntervalNs);
oneway void notifyExpectedPresent(long display, in android.hardware.graphics.composer3.ClockMonotonicTimestamp expectedPresentTime, int frameIntervalNs);
+ int getMaxLayerPictureProfiles(long display);
const int EX_BAD_CONFIG = 1;
const int EX_BAD_DISPLAY = 2;
const int EX_BAD_LAYER = 3;
@@ -98,5 +99,6 @@
const int EX_SEAMLESS_NOT_ALLOWED = 9;
const int EX_SEAMLESS_NOT_POSSIBLE = 10;
const int EX_CONFIG_FAILED = 11;
+ const int EX_PICTURE_PROFILE_MAX_EXCEEDED = 12;
const int INVALID_CONFIGURATION = 0x7fffffff;
}
diff --git a/graphics/composer/aidl/aidl_api/android.hardware.graphics.composer3/current/android/hardware/graphics/composer3/LayerCommand.aidl b/graphics/composer/aidl/aidl_api/android.hardware.graphics.composer3/current/android/hardware/graphics/composer3/LayerCommand.aidl
index 87c0e1e..c26cb15 100644
--- a/graphics/composer/aidl/aidl_api/android.hardware.graphics.composer3/current/android/hardware/graphics/composer3/LayerCommand.aidl
+++ b/graphics/composer/aidl/aidl_api/android.hardware.graphics.composer3/current/android/hardware/graphics/composer3/LayerCommand.aidl
@@ -58,4 +58,5 @@
android.hardware.graphics.composer3.LayerLifecycleBatchCommandType layerLifecycleBatchCommandType;
int newBufferSlotCount;
@nullable android.hardware.graphics.composer3.Luts luts;
+ long pictureProfileId;
}
diff --git a/graphics/composer/aidl/android/hardware/graphics/composer3/DisplayCapability.aidl b/graphics/composer/aidl/android/hardware/graphics/composer3/DisplayCapability.aidl
index 7154d74..fa58fb7 100644
--- a/graphics/composer/aidl/android/hardware/graphics/composer3/DisplayCapability.aidl
+++ b/graphics/composer/aidl/android/hardware/graphics/composer3/DisplayCapability.aidl
@@ -96,4 +96,10 @@
* @see DisplayCommand.validateDisplay
*/
MULTI_THREADED_PRESENT = 8,
+ /**
+ * Specifies that the display supports a global picture-processing pipeline.
+ *
+ * @see DisplayCommand.pictureProfileId
+ */
+ PICTURE_PROCESSING = 9,
}
diff --git a/graphics/composer/aidl/android/hardware/graphics/composer3/DisplayCommand.aidl b/graphics/composer/aidl/android/hardware/graphics/composer3/DisplayCommand.aidl
index 02c1389..c3fd68e 100644
--- a/graphics/composer/aidl/android/hardware/graphics/composer3/DisplayCommand.aidl
+++ b/graphics/composer/aidl/android/hardware/graphics/composer3/DisplayCommand.aidl
@@ -185,4 +185,21 @@
* close as possible to the cadence.
*/
int frameIntervalNs;
+
+ /**
+ * If the display supports DisplayCapability.PICTURE_PROCESSING, then this value is used to look
+ * up a picture profile which defines the parameters used when configuring a picture-processing
+ * pipeline applied to the composition result, enhancing the quality of the entire composed
+ * image. If the server does not recognize the picture profile, it must continue composition
+ * and ignore this value. If the value is zero, then the server's default picture processing,
+ * if possible, must be applied.
+ *
+ * Note that the client will never send a DisplayCommand.pictureProfileId if
+ * IComposerClient.getMaxLayerPictureProfiles is non-zero. Picture profiles will only be
+ * specified on a per-layer basis via LayerCommand.pictureProfileId.
+ *
+ * @see IComposerClient.getMaxLayerPictureProfiles
+ * @see DisplayCommand.pictureProfileId
+ */
+ long pictureProfileId;
}
diff --git a/graphics/composer/aidl/android/hardware/graphics/composer3/IComposerClient.aidl b/graphics/composer/aidl/android/hardware/graphics/composer3/IComposerClient.aidl
index 9650334..edbb988 100644
--- a/graphics/composer/aidl/android/hardware/graphics/composer3/IComposerClient.aidl
+++ b/graphics/composer/aidl/android/hardware/graphics/composer3/IComposerClient.aidl
@@ -99,6 +99,14 @@
const int EX_CONFIG_FAILED = 11;
/**
+ * The number of per-layer picture profiles in use is larger than the number of layer-specific
+ * picture-processing pipelines, as-defined by getMaxLayerPictureProfiles.
+ *
+ * @see LayerCommand.pictureProfileId
+ */
+ const int EX_PICTURE_PROFILE_MAX_EXCEEDED = 12;
+
+ /**
* Integer.MAX_VALUE is reserved for the invalid configuration.
* This should not be returned as a valid configuration.
*/
@@ -919,4 +927,15 @@
*/
oneway void notifyExpectedPresent(
long display, in ClockMonotonicTimestamp expectedPresentTime, int frameIntervalNs);
+
+ /*
+ * Returns the number of layer-specific picture-processing profiles that can be referenced from
+ * multiple LayerCommand.pictureProfileId. If the client passes in more pictureProfileIds whose
+ * values are larger than zero (indicating none) then the implementation can support, it should
+ * return EX_PICTURE_PROFILE_MAX_EXCEEDED.
+ *
+ * If the implementation only supports one display-wide picture-processing
+ * pipeline, a value of zero should be returned here.
+ */
+ int getMaxLayerPictureProfiles(long display);
}
diff --git a/graphics/composer/aidl/android/hardware/graphics/composer3/LayerCommand.aidl b/graphics/composer/aidl/android/hardware/graphics/composer3/LayerCommand.aidl
index c89887d..d7ef4c1 100644
--- a/graphics/composer/aidl/android/hardware/graphics/composer3/LayerCommand.aidl
+++ b/graphics/composer/aidl/android/hardware/graphics/composer3/LayerCommand.aidl
@@ -285,4 +285,20 @@
* Sets the lut(s) for the layer.
*/
@nullable Luts luts;
+
+ /**
+ * If the display has multiple per-layer picture processing pipelines, then this value is used
+ * to look up a picture profile which defines the parameters used when configuring a
+ * picture-processing pipeline for this layer, enhancing the quality of the buffer contents. If
+ * the server doesn't recognize this profile, it must continue with composition and ignore
+ * this value. If the value is zero, then the no picture processing must be applied.
+ *
+ * Note that the client will never send a DisplayCommand.pictureProfileId if
+ * IComposerClient.getMaxLayerPictureProfiles is non-zero. Picture profiles will only be
+ * specified on a per-layer basis.
+ *
+ * @see IComposerClient.getMaxLayerPictureProfiles
+ * @see DisplayCommand.pictureProfileId
+ */
+ long pictureProfileId;
}
diff --git a/graphics/composer/aidl/android/hardware/graphics/composer3/LutProperties.aidl b/graphics/composer/aidl/android/hardware/graphics/composer3/LutProperties.aidl
index 1c6fd18..d3dd30e 100644
--- a/graphics/composer/aidl/android/hardware/graphics/composer3/LutProperties.aidl
+++ b/graphics/composer/aidl/android/hardware/graphics/composer3/LutProperties.aidl
@@ -36,8 +36,8 @@
/**
* SamplingKey is about how a Lut can be sampled.
- * A Lut can be sampled in more than one way,
- * but only one sampling method is used at one time.
+ * A Lut can be sampled in more than one key,
+ * but only one sampling key is used at one time.
*
* The implementations should use a sampling strategy
* at least as good as linear sampling.
diff --git a/graphics/composer/aidl/android/hardware/graphics/composer3/Luts.aidl b/graphics/composer/aidl/android/hardware/graphics/composer3/Luts.aidl
index 5f55f1c..592ac50 100644
--- a/graphics/composer/aidl/android/hardware/graphics/composer3/Luts.aidl
+++ b/graphics/composer/aidl/android/hardware/graphics/composer3/Luts.aidl
@@ -40,13 +40,15 @@
* For data precision, 32-bit float is used to specify a Lut by both the HWC and
* the platform.
*
- *
* For unflattening/flattening 3D Lut(s), the algorithm below should be observed
* by both the HWC and the platform.
* Assuming that we have a 3D array `ORIGINAL[WIDTH, HEIGHT, DEPTH]`, we would turn it into
* `FLAT[WIDTH * HEIGHT * DEPTH]` by
*
* `FLAT[z + DEPTH * (y + HEIGHT * x)] = ORIGINAL[x, y, z]`
+ *
+ * Noted that 1D Lut(s) should be gain curve ones
+ * and 3D Lut(s) should be pure color lookup ones.
*/
@nullable ParcelFileDescriptor pfd;
@@ -60,6 +62,8 @@
/**
* The properties list of the Luts.
+ *
+ * The number of sampling key inside should only be one.
*/
LutProperties[] lutProperties;
}
diff --git a/graphics/composer/aidl/include/android/hardware/graphics/composer3/ComposerClientWriter.h b/graphics/composer/aidl/include/android/hardware/graphics/composer3/ComposerClientWriter.h
index 036460e..71a04f3 100644
--- a/graphics/composer/aidl/include/android/hardware/graphics/composer3/ComposerClientWriter.h
+++ b/graphics/composer/aidl/include/android/hardware/graphics/composer3/ComposerClientWriter.h
@@ -25,22 +25,20 @@
#include <string.h>
#include <aidl/android/hardware/graphics/common/BlendMode.h>
+#include <aidl/android/hardware/graphics/common/ColorTransform.h>
+#include <aidl/android/hardware/graphics/common/FRect.h>
+#include <aidl/android/hardware/graphics/common/Rect.h>
+#include <aidl/android/hardware/graphics/common/Transform.h>
#include <aidl/android/hardware/graphics/composer3/Color.h>
#include <aidl/android/hardware/graphics/composer3/Composition.h>
#include <aidl/android/hardware/graphics/composer3/DisplayBrightness.h>
+#include <aidl/android/hardware/graphics/composer3/DisplayCommand.h>
#include <aidl/android/hardware/graphics/composer3/LayerBrightness.h>
#include <aidl/android/hardware/graphics/composer3/LayerLifecycleBatchCommandType.h>
#include <aidl/android/hardware/graphics/composer3/Luts.h>
#include <aidl/android/hardware/graphics/composer3/PerFrameMetadata.h>
#include <aidl/android/hardware/graphics/composer3/PerFrameMetadataBlob.h>
-#include <aidl/android/hardware/graphics/composer3/DisplayCommand.h>
-
-#include <aidl/android/hardware/graphics/common/ColorTransform.h>
-#include <aidl/android/hardware/graphics/common/FRect.h>
-#include <aidl/android/hardware/graphics/common/Rect.h>
-#include <aidl/android/hardware/graphics/common/Transform.h>
-
#include <log/log.h>
#include <sync/sync.h>
@@ -59,6 +57,8 @@
namespace aidl::android::hardware::graphics::composer3 {
+using PictureProfileId = decltype(LayerCommand().pictureProfileId);
+
class ComposerClientWriter final {
public:
static constexpr std::optional<ClockMonotonicTimestamp> kNoTimestamp = std::nullopt;
@@ -84,6 +84,10 @@
DisplayBrightness{.brightness = brightness, .brightnessNits = brightnessNits});
}
+ void setDisplayPictureProfileId(int64_t display, PictureProfileId pictureProfileId) {
+ getDisplayCommand(display).pictureProfileId = pictureProfileId;
+ }
+
void setClientTarget(int64_t display, uint32_t slot, const native_handle_t* target,
int acquireFence, Dataspace dataspace, const std::vector<Rect>& damage,
float hdrSdrRatio) {
@@ -250,6 +254,11 @@
getLayerCommand(display, layer).luts.emplace(std::move(luts));
}
+ void setLayerPictureProfileId(int64_t display, int64_t layer,
+ PictureProfileId pictureProfileId) {
+ getLayerCommand(display, layer).pictureProfileId = pictureProfileId;
+ }
+
std::vector<DisplayCommand> takePendingCommands() {
flushLayerCommand();
flushDisplayCommand();
diff --git a/graphics/composer/aidl/vts/VtsComposerClient.cpp b/graphics/composer/aidl/vts/VtsComposerClient.cpp
index 89ba2e6..9b6a005 100644
--- a/graphics/composer/aidl/vts/VtsComposerClient.cpp
+++ b/graphics/composer/aidl/vts/VtsComposerClient.cpp
@@ -690,4 +690,10 @@
mDisplayResources.clear();
return true;
}
+
+std::pair<ScopedAStatus, int32_t> VtsComposerClient::getMaxLayerPictureProfiles(int64_t display) {
+ int32_t outMaxProfiles = 0;
+ return {mComposerClient->getMaxLayerPictureProfiles(display, &outMaxProfiles), outMaxProfiles};
+}
+
} // namespace aidl::android::hardware::graphics::composer3::vts
diff --git a/graphics/composer/aidl/vts/VtsComposerClient.h b/graphics/composer/aidl/vts/VtsComposerClient.h
index da6116f..53f5fae 100644
--- a/graphics/composer/aidl/vts/VtsComposerClient.h
+++ b/graphics/composer/aidl/vts/VtsComposerClient.h
@@ -198,6 +198,8 @@
std::vector<RefreshRateChangedDebugData> takeListOfRefreshRateChangedDebugData();
+ std::pair<ScopedAStatus, int32_t> getMaxLayerPictureProfiles(int64_t display);
+
static constexpr int32_t kMaxFrameIntervalNs = 50000000; // 20fps
static constexpr int32_t kNoFrameIntervalNs = 0;
diff --git a/graphics/composer/aidl/vts/VtsHalGraphicsComposer3_TargetTest.cpp b/graphics/composer/aidl/vts/VtsHalGraphicsComposer3_TargetTest.cpp
index eaf23b5..8006523 100644
--- a/graphics/composer/aidl/vts/VtsHalGraphicsComposer3_TargetTest.cpp
+++ b/graphics/composer/aidl/vts/VtsHalGraphicsComposer3_TargetTest.cpp
@@ -28,9 +28,11 @@
#include <android/hardware/graphics/composer3/ComposerClientReader.h>
#include <android/hardware/graphics/composer3/ComposerClientWriter.h>
#include <binder/ProcessState.h>
+#include <cutils/ashmem.h>
#include <gtest/gtest.h>
#include <ui/Fence.h>
#include <ui/GraphicBuffer.h>
+#include <ui/PictureProfileHandle.h>
#include <ui/PixelFormat.h>
#include <algorithm>
#include <iterator>
@@ -118,6 +120,15 @@
[&](const Capability& activeCapability) { return activeCapability == capability; });
}
+ bool hasDisplayCapability(int64_t displayId, DisplayCapability capability) {
+ const auto& [status, capabilities] = mComposerClient->getDisplayCapabilities(displayId);
+ EXPECT_TRUE(status.isOk());
+ return std::any_of(capabilities.begin(), capabilities.end(),
+ [&](const DisplayCapability& activeCapability) {
+ return activeCapability == capability;
+ });
+ }
+
int getInterfaceVersion() {
const auto& [versionStatus, version] = mComposerClient->getInterfaceVersion();
EXPECT_TRUE(versionStatus.isOk());
@@ -1388,6 +1399,14 @@
}
}
+TEST_P(GraphicsComposerAidlV3Test, GetMaxLayerPictureProfiles) {
+ for (const auto& display : mDisplays) {
+ const auto& [status, maxPorfiles] =
+ mComposerClient->getMaxLayerPictureProfiles(display.getDisplayId());
+ EXPECT_TRUE(status.isOk());
+ }
+}
+
// Tests for Command.
class GraphicsComposerAidlCommandTest : public GraphicsComposerAidlTest {
protected:
@@ -2048,6 +2067,7 @@
EXPECT_TRUE(layerStatus.isOk());
writer.setLayerBuffer(getPrimaryDisplayId(), layer, /*slot*/ 0, handle, /*acquireFence*/ -1);
execute();
+ ASSERT_TRUE(mReader.takeErrors().empty());
}
TEST_P(GraphicsComposerAidlCommandTest, SetLayerBufferMultipleTimes) {
@@ -3219,6 +3239,140 @@
});
}
+TEST_P(GraphicsComposerAidlCommandV3Test, getMaxLayerPictureProfiles_success) {
+ for (auto& display : mDisplays) {
+ int64_t displayId = display.getDisplayId();
+ if (!hasDisplayCapability(displayId, DisplayCapability::PICTURE_PROCESSING)) {
+ continue;
+ }
+ const auto& [status, maxProfiles] =
+ mComposerClient->getMaxLayerPictureProfiles(getPrimaryDisplayId());
+ EXPECT_TRUE(status.isOk());
+ }
+}
+
+TEST_P(GraphicsComposerAidlCommandV3Test, setDisplayPictureProfileId_success) {
+ for (auto& display : mDisplays) {
+ int64_t displayId = display.getDisplayId();
+ if (!hasDisplayCapability(displayId, DisplayCapability::PICTURE_PROCESSING)) {
+ continue;
+ }
+
+ auto& writer = getWriter(displayId);
+ const auto layer = createOnScreenLayer(display);
+ const auto buffer = allocate(::android::PIXEL_FORMAT_RGBA_8888);
+ ASSERT_NE(nullptr, buffer->handle);
+ // TODO(b/337330263): Lookup profile IDs from PictureProfileService
+ writer.setDisplayPictureProfileId(displayId, PictureProfileId(1));
+ writer.setLayerBuffer(displayId, layer, /*slot*/ 0, buffer->handle,
+ /*acquireFence*/ -1);
+ execute();
+ ASSERT_TRUE(mReader.takeErrors().empty());
+ }
+}
+
+TEST_P(GraphicsComposerAidlCommandV3Test, setLayerPictureProfileId_success) {
+ for (auto& display : mDisplays) {
+ int64_t displayId = display.getDisplayId();
+ if (!hasDisplayCapability(displayId, DisplayCapability::PICTURE_PROCESSING)) {
+ continue;
+ }
+ const auto& [status, maxProfiles] = mComposerClient->getMaxLayerPictureProfiles(displayId);
+ EXPECT_TRUE(status.isOk());
+ if (maxProfiles == 0) {
+ continue;
+ }
+
+ auto& writer = getWriter(displayId);
+ const auto layer = createOnScreenLayer(display);
+ const auto buffer = allocate(::android::PIXEL_FORMAT_RGBA_8888);
+ ASSERT_NE(nullptr, buffer->handle);
+ writer.setLayerBuffer(displayId, layer, /*slot*/ 0, buffer->handle,
+ /*acquireFence*/ -1);
+ // TODO(b/337330263): Lookup profile IDs from PictureProfileService
+ writer.setLayerPictureProfileId(displayId, layer, PictureProfileId(1));
+ execute();
+ ASSERT_TRUE(mReader.takeErrors().empty());
+ }
+}
+
+TEST_P(GraphicsComposerAidlCommandV3Test, setLayerPictureProfileId_failsWithTooManyProfiles) {
+ for (auto& display : mDisplays) {
+ int64_t displayId = display.getDisplayId();
+ if (!hasDisplayCapability(displayId, DisplayCapability::PICTURE_PROCESSING)) {
+ continue;
+ }
+ const auto& [status, maxProfiles] = mComposerClient->getMaxLayerPictureProfiles(displayId);
+ EXPECT_TRUE(status.isOk());
+ if (maxProfiles == 0) {
+ continue;
+ }
+
+ auto& writer = getWriter(displayId);
+ for (int profileId = 1; profileId <= maxProfiles + 1; ++profileId) {
+ const auto layer = createOnScreenLayer(display);
+ const auto buffer = allocate(::android::PIXEL_FORMAT_RGBA_8888);
+ ASSERT_NE(nullptr, buffer->handle);
+ writer.setLayerBuffer(displayId, layer, /*slot*/ 0, buffer->handle,
+ /*acquireFence*/ -1);
+ // TODO(b/337330263): Lookup profile IDs from PictureProfileService
+ writer.setLayerPictureProfileId(displayId, layer, PictureProfileId(profileId));
+ }
+ execute();
+ const auto errors = mReader.takeErrors();
+ ASSERT_TRUE(errors.size() == 1 &&
+ errors[0].errorCode == IComposerClient::EX_PICTURE_PROFILE_MAX_EXCEEDED);
+ }
+}
+
+class GraphicsComposerAidlCommandV4Test : public GraphicsComposerAidlCommandTest {
+ protected:
+ void SetUp() override {
+ GraphicsComposerAidlTest::SetUp();
+ if (getInterfaceVersion() <= 3) {
+ GTEST_SKIP() << "Device interface version is expected to be >= 4";
+ }
+ }
+};
+
+TEST_P(GraphicsComposerAidlCommandV4Test, SetUnsupportedLayerLuts) {
+ auto& writer = getWriter(getPrimaryDisplayId());
+ const auto& [layerStatus, layer] =
+ mComposerClient->createLayer(getPrimaryDisplayId(), kBufferSlotCount, &writer);
+ EXPECT_TRUE(layerStatus.isOk());
+ const auto& [status, properties] = mComposerClient->getOverlaySupport();
+ if (!status.isOk() && status.getExceptionCode() == EX_SERVICE_SPECIFIC &&
+ status.getServiceSpecificError() == IComposerClient::EX_UNSUPPORTED) {
+ GTEST_SUCCEED() << "getOverlaySupport is not supported";
+ return;
+ }
+ ASSERT_TRUE(status.isOk());
+
+ // TODO (b/362319189): add Lut VTS enforcement
+ if (!properties.lutProperties) {
+ int32_t size = 7;
+ size_t bufferSize = static_cast<size_t>(size) * sizeof(float);
+ int32_t fd = ashmem_create_region("lut_shared_mem", bufferSize);
+ void* ptr = mmap(nullptr, bufferSize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+ std::vector<float> buffers = {0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f};
+ memcpy(ptr, buffers.data(), bufferSize);
+ munmap(ptr, bufferSize);
+ Luts luts;
+ luts.offsets = {0};
+ luts.lutProperties = {
+ {LutProperties::Dimension::ONE_D, size, {LutProperties::SamplingKey::RGB}}};
+ luts.pfd = ndk::ScopedFileDescriptor(fd);
+
+ writer.setLayerLuts(getPrimaryDisplayId(), layer, luts);
+ writer.validateDisplay(getPrimaryDisplayId(), ComposerClientWriter::kNoTimestamp,
+ VtsComposerClient::kNoFrameIntervalNs);
+ execute();
+ // change to client composition
+ ASSERT_FALSE(mReader.takeChangedCompositionTypes(getPrimaryDisplayId()).empty());
+ ASSERT_TRUE(mReader.takeErrors().empty());
+ }
+}
+
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(GraphicsComposerAidlCommandTest);
INSTANTIATE_TEST_SUITE_P(
PerInstance, GraphicsComposerAidlCommandTest,
@@ -3249,6 +3403,11 @@
PerInstance, GraphicsComposerAidlCommandV3Test,
testing::ValuesIn(::android::getAidlHalInstanceNames(IComposer::descriptor)),
::android::PrintInstanceNameToString);
+GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(GraphicsComposerAidlCommandV4Test);
+INSTANTIATE_TEST_SUITE_P(
+ PerInstance, GraphicsComposerAidlCommandV4Test,
+ testing::ValuesIn(::android::getAidlHalInstanceNames(IComposer::descriptor)),
+ ::android::PrintInstanceNameToString);
} // namespace aidl::android::hardware::graphics::composer3::vts
int main(int argc, char** argv) {
diff --git a/graphics/mapper/4.0/utils/vts/Android.bp b/graphics/mapper/4.0/utils/vts/Android.bp
index c5f124c..1be460e 100644
--- a/graphics/mapper/4.0/utils/vts/Android.bp
+++ b/graphics/mapper/4.0/utils/vts/Android.bp
@@ -48,7 +48,7 @@
],
export_static_lib_headers: [
"android.hardware.graphics.allocator@4.0",
- "android.hardware.graphics.common-V5-ndk",
+ "android.hardware.graphics.common-V6-ndk",
"android.hardware.graphics.mapper@4.0",
],
export_include_dirs: ["include"],
diff --git a/health/storage/1.0/vts/functional/Android.bp b/health/storage/1.0/vts/functional/Android.bp
index ccf22ce..e78e044 100644
--- a/health/storage/1.0/vts/functional/Android.bp
+++ b/health/storage/1.0/vts/functional/Android.bp
@@ -15,6 +15,7 @@
//
package {
+ default_team: "trendy_team_android_kernel",
// 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"
diff --git a/health/storage/aidl/vts/functional/Android.bp b/health/storage/aidl/vts/functional/Android.bp
index fe15170..083ec37 100644
--- a/health/storage/aidl/vts/functional/Android.bp
+++ b/health/storage/aidl/vts/functional/Android.bp
@@ -13,6 +13,7 @@
// limitations under the License.
package {
+ default_team: "trendy_team_android_kernel",
// 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"
diff --git a/neuralnetworks/aidl/Android.bp b/neuralnetworks/aidl/Android.bp
index 9589750..45b34e6 100644
--- a/neuralnetworks/aidl/Android.bp
+++ b/neuralnetworks/aidl/Android.bp
@@ -43,28 +43,28 @@
version: "1",
imports: [
"android.hardware.common-V2",
- "android.hardware.graphics.common-V5",
+ "android.hardware.graphics.common-V6",
],
},
{
version: "2",
imports: [
"android.hardware.common-V2",
- "android.hardware.graphics.common-V5",
+ "android.hardware.graphics.common-V6",
],
},
{
version: "3",
imports: [
"android.hardware.common-V2",
- "android.hardware.graphics.common-V5",
+ "android.hardware.graphics.common-V6",
],
},
{
version: "4",
imports: [
"android.hardware.common-V2",
- "android.hardware.graphics.common-V5",
+ "android.hardware.graphics.common-V6",
],
},
diff --git a/nfc/aidl/aidl_api/android.hardware.nfc/current/android/hardware/nfc/ProtocolDiscoveryConfig.aidl b/nfc/aidl/aidl_api/android.hardware.nfc/current/android/hardware/nfc/ProtocolDiscoveryConfig.aidl
index 021dfe2..2df0d35 100644
--- a/nfc/aidl/aidl_api/android.hardware.nfc/current/android/hardware/nfc/ProtocolDiscoveryConfig.aidl
+++ b/nfc/aidl/aidl_api/android.hardware.nfc/current/android/hardware/nfc/ProtocolDiscoveryConfig.aidl
@@ -43,4 +43,5 @@
byte discoveryPollKovio;
byte discoveryPollBPrime;
byte discoveryListenBPrime;
+ byte protocolChineseId;
}
diff --git a/nfc/aidl/android/hardware/nfc/ProtocolDiscoveryConfig.aidl b/nfc/aidl/android/hardware/nfc/ProtocolDiscoveryConfig.aidl
index f8e3228..021e307 100644
--- a/nfc/aidl/android/hardware/nfc/ProtocolDiscoveryConfig.aidl
+++ b/nfc/aidl/android/hardware/nfc/ProtocolDiscoveryConfig.aidl
@@ -33,4 +33,5 @@
byte discoveryPollKovio;
byte discoveryPollBPrime;
byte discoveryListenBPrime;
+ byte protocolChineseId;
}
diff --git a/power/OWNERS b/power/OWNERS
index 7229b22..95778a4 100644
--- a/power/OWNERS
+++ b/power/OWNERS
@@ -3,3 +3,4 @@
# ADPF virtual team
lpy@google.com
wvw@google.com
+file:platform/frameworks/base:/ADPF_OWNERS
diff --git a/power/aidl/aidl_api/android.hardware.power/current/android/hardware/power/CpuHeadroomParams.aidl b/power/aidl/aidl_api/android.hardware.power/current/android/hardware/power/CpuHeadroomParams.aidl
new file mode 100644
index 0000000..09a2ace
--- /dev/null
+++ b/power/aidl/aidl_api/android.hardware.power/current/android/hardware/power/CpuHeadroomParams.aidl
@@ -0,0 +1,48 @@
+/*
+ * 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.power;
+@JavaDerive(equals=true, toString=true) @VintfStability
+parcelable CpuHeadroomParams {
+ android.hardware.power.CpuHeadroomParams.CalculationType calculationType;
+ android.hardware.power.CpuHeadroomParams.SelectionType selectionType;
+ int pid;
+ enum CalculationType {
+ MIN,
+ AVERAGE,
+ }
+ enum SelectionType {
+ ALL,
+ PER_CORE,
+ }
+}
diff --git a/power/aidl/aidl_api/android.hardware.power/current/android/hardware/power/GpuHeadroomParams.aidl b/power/aidl/aidl_api/android.hardware.power/current/android/hardware/power/GpuHeadroomParams.aidl
new file mode 100644
index 0000000..64bb4a4
--- /dev/null
+++ b/power/aidl/aidl_api/android.hardware.power/current/android/hardware/power/GpuHeadroomParams.aidl
@@ -0,0 +1,42 @@
+/*
+ * 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.power;
+@JavaDerive(equals=true, toString=true) @VintfStability
+parcelable GpuHeadroomParams {
+ android.hardware.power.GpuHeadroomParams.CalculationType calculationType;
+ enum CalculationType {
+ MIN,
+ AVERAGE,
+ }
+}
diff --git a/power/aidl/aidl_api/android.hardware.power/current/android/hardware/power/IPower.aidl b/power/aidl/aidl_api/android.hardware.power/current/android/hardware/power/IPower.aidl
index 8d8fb88..10456cb 100644
--- a/power/aidl/aidl_api/android.hardware.power/current/android/hardware/power/IPower.aidl
+++ b/power/aidl/aidl_api/android.hardware.power/current/android/hardware/power/IPower.aidl
@@ -44,4 +44,8 @@
android.hardware.power.ChannelConfig getSessionChannel(in int tgid, in int uid);
oneway void closeSessionChannel(in int tgid, in int uid);
android.hardware.power.SupportInfo getSupportInfo();
+ float[] getCpuHeadroom(in android.hardware.power.CpuHeadroomParams params);
+ float getGpuHeadroom(in android.hardware.power.GpuHeadroomParams params);
+ long getCpuHeadroomMinIntervalMillis();
+ long getGpuHeadroomMinIntervalMillis();
}
diff --git a/power/aidl/android/hardware/power/CpuHeadroomParams.aidl b/power/aidl/android/hardware/power/CpuHeadroomParams.aidl
new file mode 100644
index 0000000..cf71b67
--- /dev/null
+++ b/power/aidl/android/hardware/power/CpuHeadroomParams.aidl
@@ -0,0 +1,62 @@
+/*
+ * 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.power;
+
+@VintfStability
+@JavaDerive(equals=true, toString=true)
+parcelable CpuHeadroomParams {
+ /**
+ * Defines how to calculate the headroom.
+ */
+ enum CalculationType {
+ // Default to return the minimum headroom in a window.
+ MIN,
+ // Returns the average headroom in a window.
+ AVERAGE,
+ }
+
+ /**
+ * The calculation type.
+ */
+ CalculationType calculationType;
+
+ /**
+ * Defines how to select the CPU.
+ */
+ enum SelectionType {
+ // Default to return a single value for all cores.
+ ALL,
+ // Returns per-core headroom in a list.
+ PER_CORE,
+ }
+
+ /**
+ * The CPU selection type.
+ */
+ SelectionType selectionType;
+
+ /**
+ * The caller thread's PID.
+ *
+ * If pid is positive, return the headroom only for cores that are available
+ * to the given pid, otherwise return the headroom(s) for all cores.
+ *
+ * This should handle all the cases including but not limited to thread core
+ * affinity and app cpuset that change the available CPU cores for the caller.
+ */
+ int pid;
+}
diff --git a/power/aidl/android/hardware/power/GpuHeadroomParams.aidl b/power/aidl/android/hardware/power/GpuHeadroomParams.aidl
new file mode 100644
index 0000000..972adbc
--- /dev/null
+++ b/power/aidl/android/hardware/power/GpuHeadroomParams.aidl
@@ -0,0 +1,36 @@
+/*
+ * 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.power;
+
+@VintfStability
+@JavaDerive(equals=true, toString=true)
+parcelable GpuHeadroomParams {
+ /**
+ * Defines how to calculate the headroom.
+ */
+ enum CalculationType {
+ // Default to return the minimum headroom in a window.
+ MIN,
+ // Returns the average headroom in a window.
+ AVERAGE,
+ }
+
+ /**
+ * The calculation type.
+ */
+ CalculationType calculationType;
+}
diff --git a/power/aidl/android/hardware/power/IPower.aidl b/power/aidl/android/hardware/power/IPower.aidl
index 2f15648..e2f121c 100644
--- a/power/aidl/android/hardware/power/IPower.aidl
+++ b/power/aidl/android/hardware/power/IPower.aidl
@@ -18,6 +18,8 @@
import android.hardware.power.Boost;
import android.hardware.power.ChannelConfig;
+import android.hardware.power.CpuHeadroomParams;
+import android.hardware.power.GpuHeadroomParams;
import android.hardware.power.IPowerHintSession;
import android.hardware.power.Mode;
import android.hardware.power.SessionConfig;
@@ -155,4 +157,47 @@
* not supported.
*/
SupportInfo getSupportInfo();
+
+ /**
+ * Provides an estimate of available CPU headroom the device based on past history.
+ * <p>
+ * @param params params to customize the CPU headroom calculation
+ * @return a single value or an array of values depending on selection type of params.
+ * Each value is ranged from [0, 100], and 0 indicates no CPU resources were left
+ * during the calculation interval and the app may expect low resources to be granted.
+ * @throws EX_UNSUPPORTED_OPERATION if the API is unsupported or the request params can't be
+ * served.
+ */
+ float[] getCpuHeadroom(in CpuHeadroomParams params);
+
+ /**
+ * Provides an estimate of available GPU headroom the device based on past history.
+ * <p>
+ * @param params params to customize the GPU headroom calculation
+ * @return Value is ranged from [0, 100], and 0 indicates no GPU resources were left
+ * during the calculation interval and the app may expect low resources to be granted.
+ * @throws EX_UNSUPPORTED_OPERATION if the API is unsupported or the request params can't be
+ * served.
+ */
+ float getGpuHeadroom(in GpuHeadroomParams params);
+
+ /**
+ * Minimum polling interval for calling getCpuHeadroom in milliseconds.
+ *
+ * The getCpuHeadroom API may return cached result if called more frequent
+ * than the interval.
+ *
+ * @throws EX_UNSUPPORTED_OPERATION if the API is unsupported.
+ */
+ long getCpuHeadroomMinIntervalMillis();
+
+ /**
+ * Minimum polling interval for calling getGpuHeadroom in milliseconds.
+ *
+ * The getGpuHeadroom API may return cached result if called more frequent
+ * than the interval.
+ *
+ * @throws EX_UNSUPPORTED_OPERATION if the API is unsupported.
+ */
+ long getGpuHeadroomMinIntervalMillis();
}
diff --git a/power/aidl/default/Power.cpp b/power/aidl/default/Power.cpp
index 36d0055..1fc0a0a 100644
--- a/power/aidl/default/Power.cpp
+++ b/power/aidl/default/Power.cpp
@@ -69,6 +69,27 @@
return ScopedAStatus::ok();
}
+ndk::ScopedAStatus Power::getCpuHeadroom(const CpuHeadroomParams& _,
+ std::vector<float>* _aidl_return) {
+ *_aidl_return = {0.5f};
+ return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus Power::getGpuHeadroom(const GpuHeadroomParams& _, float* _aidl_return) {
+ *_aidl_return = 0.5f;
+ return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus Power::getCpuHeadroomMinIntervalMillis(int64_t* _aidl_return) {
+ *_aidl_return = 1000;
+ return ndk::ScopedAStatus::ok();
+}
+
+ndk::ScopedAStatus Power::getGpuHeadroomMinIntervalMillis(int64_t* _aidl_return) {
+ *_aidl_return = 1000;
+ return ndk::ScopedAStatus::ok();
+}
+
ScopedAStatus Power::createHintSession(int32_t, int32_t, const std::vector<int32_t>& tids, int64_t,
std::shared_ptr<IPowerHintSession>* _aidl_return) {
if (tids.size() == 0) {
diff --git a/power/aidl/default/Power.h b/power/aidl/default/Power.h
index ef524e1..a77a514 100644
--- a/power/aidl/default/Power.h
+++ b/power/aidl/default/Power.h
@@ -45,6 +45,12 @@
ChannelConfig* _aidl_return) override;
ndk::ScopedAStatus closeSessionChannel(int32_t tgid, int32_t uid) override;
ndk::ScopedAStatus getSupportInfo(SupportInfo* _aidl_return) override;
+ ndk::ScopedAStatus getCpuHeadroom(const CpuHeadroomParams& params,
+ std::vector<float>* _aidl_return) override;
+ ndk::ScopedAStatus getGpuHeadroom(const GpuHeadroomParams& params,
+ float* _aidl_return) override;
+ ndk::ScopedAStatus getCpuHeadroomMinIntervalMillis(int64_t* _aidl_return) override;
+ ndk::ScopedAStatus getGpuHeadroomMinIntervalMillis(int64_t* _aidl_return) override;
private:
std::vector<std::shared_ptr<IPowerHintSession>> mPowerHintSessions;
diff --git a/power/aidl/vts/VtsHalPowerTargetTest.cpp b/power/aidl/vts/VtsHalPowerTargetTest.cpp
index 9684c38..5e3ddd5 100644
--- a/power/aidl/vts/VtsHalPowerTargetTest.cpp
+++ b/power/aidl/vts/VtsHalPowerTargetTest.cpp
@@ -30,6 +30,8 @@
#include <unistd.h>
#include <cstdint>
#include "aidl/android/hardware/common/fmq/SynchronizedReadWrite.h"
+#include "aidl/android/hardware/power/CpuHeadroomParams.h"
+#include "aidl/android/hardware/power/GpuHeadroomParams.h"
namespace aidl::android::hardware::power {
namespace {
@@ -40,6 +42,8 @@
using android::hardware::power::Boost;
using android::hardware::power::ChannelConfig;
using android::hardware::power::ChannelMessage;
+using android::hardware::power::CpuHeadroomParams;
+using android::hardware::power::GpuHeadroomParams;
using android::hardware::power::IPower;
using android::hardware::power::IPowerHintSession;
using android::hardware::power::Mode;
@@ -291,6 +295,43 @@
ASSERT_NE(nullptr, session);
}
+TEST_P(PowerAidl, getCpuHeadroom) {
+ if (mServiceVersion < 6) {
+ GTEST_SKIP() << "DEVICE not launching with Power V6 and beyond.";
+ }
+ CpuHeadroomParams params;
+ std::vector<float> headroom;
+ auto ret = power->getCpuHeadroom(params, &headroom);
+ if (ret.getExceptionCode() == EX_UNSUPPORTED_OPERATION) {
+ GTEST_SKIP() << "power->getCpuHeadroom is not supported";
+ }
+ ASSERT_TRUE(ret.isOk());
+ int64_t minIntervalMillis;
+ ASSERT_TRUE(power->getCpuHeadroomMinIntervalMillis(&minIntervalMillis).isOk());
+ ASSERT_GE(minIntervalMillis, 0);
+ ASSERT_GE(headroom.size(), 1);
+ ASSERT_GE(headroom[0], 0.0f);
+ ASSERT_LE(headroom[0], 100.00f);
+}
+
+TEST_P(PowerAidl, getGpuHeadroom) {
+ if (mServiceVersion < 6) {
+ GTEST_SKIP() << "DEVICE not launching with Power V6 and beyond.";
+ }
+ GpuHeadroomParams params;
+ float headroom;
+ auto ret = power->getGpuHeadroom(params, &headroom);
+ if (ret.getExceptionCode() == EX_UNSUPPORTED_OPERATION) {
+ GTEST_SKIP() << "power->getGpuHeadroom is not supported";
+ }
+ ASSERT_TRUE(ret.isOk());
+ int64_t minIntervalMillis;
+ ASSERT_TRUE(power->getGpuHeadroomMinIntervalMillis(&minIntervalMillis).isOk());
+ ASSERT_GE(minIntervalMillis, 0);
+ ASSERT_GE(headroom, 0.0f);
+ ASSERT_LE(headroom, 100.00f);
+}
+
// FIXED_PERFORMANCE mode is required for all devices which ship on Android 11
// or later
TEST_P(PowerAidl, hasFixedPerformance) {
diff --git a/radio/aidl/Android.bp b/radio/aidl/Android.bp
index 517ad86..eca9a27 100644
--- a/radio/aidl/Android.bp
+++ b/radio/aidl/Android.bp
@@ -37,7 +37,7 @@
},
],
- frozen: true,
+ frozen: false,
}
@@ -47,7 +47,7 @@
host_supported: true,
srcs: ["android/hardware/radio/config/*.aidl"],
stability: "vintf",
- imports: ["android.hardware.radio-V3"],
+ imports: ["android.hardware.radio-V4"],
backend: {
cpp: {
enabled: true,
@@ -71,7 +71,7 @@
},
],
- frozen: true,
+ frozen: false,
}
@@ -81,7 +81,7 @@
host_supported: true,
srcs: ["android/hardware/radio/data/*.aidl"],
stability: "vintf",
- imports: ["android.hardware.radio-V3"],
+ imports: ["android.hardware.radio-V4"],
backend: {
cpp: {
enabled: true,
@@ -114,7 +114,7 @@
host_supported: true,
srcs: ["android/hardware/radio/messaging/*.aidl"],
stability: "vintf",
- imports: ["android.hardware.radio-V3"],
+ imports: ["android.hardware.radio-V4"],
backend: {
cpp: {
enabled: true,
@@ -138,7 +138,7 @@
},
],
- frozen: true,
+ frozen: false,
}
aidl_interface {
@@ -147,7 +147,7 @@
host_supported: true,
srcs: ["android/hardware/radio/modem/*.aidl"],
stability: "vintf",
- imports: ["android.hardware.radio-V3"],
+ imports: ["android.hardware.radio-V4"],
backend: {
cpp: {
enabled: true,
@@ -171,7 +171,7 @@
},
],
- frozen: true,
+ frozen: false,
}
aidl_interface {
@@ -180,7 +180,7 @@
host_supported: true,
srcs: ["android/hardware/radio/network/*.aidl"],
stability: "vintf",
- imports: ["android.hardware.radio-V3"],
+ imports: ["android.hardware.radio-V4"],
backend: {
cpp: {
enabled: true,
@@ -204,7 +204,7 @@
},
],
- frozen: true,
+ frozen: false,
}
aidl_interface {
@@ -242,8 +242,8 @@
srcs: ["android/hardware/radio/sim/*.aidl"],
stability: "vintf",
imports: [
- "android.hardware.radio-V3",
- "android.hardware.radio.config-V3",
+ "android.hardware.radio-V4",
+ "android.hardware.radio.config-V4",
],
backend: {
cpp: {
@@ -277,7 +277,7 @@
},
],
- frozen: true,
+ frozen: false,
}
aidl_interface {
@@ -286,7 +286,7 @@
host_supported: true,
srcs: ["android/hardware/radio/voice/*.aidl"],
stability: "vintf",
- imports: ["android.hardware.radio-V3"],
+ imports: ["android.hardware.radio-V4"],
backend: {
cpp: {
enabled: true,
@@ -310,7 +310,7 @@
},
],
- frozen: true,
+ frozen: false,
}
aidl_interface {
@@ -319,7 +319,7 @@
srcs: ["android/hardware/radio/ims/media/*.aidl"],
stability: "vintf",
imports: [
- "android.hardware.radio-V3",
+ "android.hardware.radio-V4",
"android.hardware.radio.data-V4",
],
backend: {
@@ -355,7 +355,7 @@
vendor_available: true,
srcs: ["android/hardware/radio/ims/*.aidl"],
stability: "vintf",
- imports: ["android.hardware.radio-V3"],
+ imports: ["android.hardware.radio-V4"],
backend: {
cpp: {
enabled: false,
@@ -375,5 +375,5 @@
},
],
- frozen: true,
+ frozen: false,
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.data/current/android/hardware/radio/data/DataCallFailCause.aidl b/radio/aidl/aidl_api/android.hardware.radio.data/current/android/hardware/radio/data/DataCallFailCause.aidl
index 009b428..b51205f 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.data/current/android/hardware/radio/data/DataCallFailCause.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.data/current/android/hardware/radio/data/DataCallFailCause.aidl
@@ -192,11 +192,29 @@
NON_IP_NOT_SUPPORTED = 0x815,
PDN_NON_IP_CALL_THROTTLED = 0x816,
PDN_NON_IP_CALL_DISALLOWED = 0x817,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
CDMA_LOCK = 0x818,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
CDMA_INTERCEPT = 0x819,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
CDMA_REORDER = 0x81A,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
CDMA_RELEASE_DUE_TO_SO_REJECTION = 0x81B,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
CDMA_INCOMING_CALL = 0x81C,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
CDMA_ALERT_STOP = 0x81D,
CHANNEL_ACQUISITION_FAILURE = 0x81E,
MAX_ACCESS_PROBE = 0x81F,
@@ -204,8 +222,14 @@
NO_RESPONSE_FROM_BASE_STATION = 0x821,
REJECTED_BY_BASE_STATION = 0x822,
CONCURRENT_SERVICES_INCOMPATIBLE = 0x823,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
NO_CDMA_SERVICE = 0x824,
RUIM_NOT_PRESENT = 0x825,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
CDMA_RETRY_ORDER = 0x826,
ACCESS_BLOCK = 0x827,
ACCESS_BLOCK_ALL = 0x828,
@@ -324,12 +348,33 @@
LOWER_LAYER_REGISTRATION_FAILURE = 0x895,
DATA_PLAN_EXPIRED = 0x896,
UMTS_HANDOVER_TO_IWLAN = 0x897,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
EVDO_CONNECTION_DENY_BY_GENERAL_OR_NETWORK_BUSY = 0x898,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
EVDO_CONNECTION_DENY_BY_BILLING_OR_AUTHENTICATION_FAILURE = 0x899,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
EVDO_HDR_CHANGED = 0x89A,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
EVDO_HDR_EXITED = 0x89B,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
EVDO_HDR_NO_SESSION = 0x89C,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
EVDO_USING_GPS_FIX_INSTEAD_OF_HDR_CALL = 0x89D,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
EVDO_HDR_CONNECTION_SETUP_TIMEOUT = 0x89E,
FAILED_TO_ACQUIRE_COLOCATED_HDR = 0x89F,
OTASP_COMMIT_IN_PROGRESS = 0x8A0,
diff --git a/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/CdmaBroadcastSmsConfigInfo.aidl b/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/CdmaBroadcastSmsConfigInfo.aidl
index abfb308..99ab0ea 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/CdmaBroadcastSmsConfigInfo.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/CdmaBroadcastSmsConfigInfo.aidl
@@ -35,7 +35,16 @@
/* @hide */
@JavaDerive(toString=true) @VintfStability
parcelable CdmaBroadcastSmsConfigInfo {
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int serviceCategory;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int language;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
boolean selected;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/CdmaSmsAck.aidl b/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/CdmaSmsAck.aidl
index ee8371c..00e584b 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/CdmaSmsAck.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/CdmaSmsAck.aidl
@@ -35,6 +35,12 @@
/* @hide */
@JavaDerive(toString=true) @VintfStability
parcelable CdmaSmsAck {
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
boolean errorClass;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int smsCauseCode;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/CdmaSmsAddress.aidl b/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/CdmaSmsAddress.aidl
index 7382b1f..6a64595 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/CdmaSmsAddress.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/CdmaSmsAddress.aidl
@@ -35,35 +35,128 @@
/* @hide */
@JavaDerive(toString=true) @VintfStability
parcelable CdmaSmsAddress {
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int digitMode;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
boolean isNumberModeDataNetwork;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int numberType;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int numberPlan;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
byte[] digits;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int DIGIT_MODE_FOUR_BIT = 0;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int DIGIT_MODE_EIGHT_BIT = 1;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_PLAN_UNKNOWN = 0;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_PLAN_TELEPHONY = 1;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_PLAN_RESERVED_2 = 2;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_PLAN_DATA = 3;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_PLAN_TELEX = 4;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_PLAN_RESERVED_5 = 5;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_PLAN_RESERVED_6 = 6;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_PLAN_RESERVED_7 = 7;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_PLAN_RESERVED_8 = 8;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_PLAN_PRIVATE = 9;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_PLAN_RESERVED_10 = 10;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_PLAN_RESERVED_11 = 11;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_PLAN_RESERVED_12 = 12;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_PLAN_RESERVED_13 = 13;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_PLAN_RESERVED_14 = 14;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_PLAN_RESERVED_15 = 15;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_TYPE_UNKNOWN = 0;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_TYPE_INTERNATIONAL_OR_DATA_IP = 1;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_TYPE_NATIONAL_OR_INTERNET_MAIL = 2;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_TYPE_NETWORK = 3;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_TYPE_SUBSCRIBER = 4;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_TYPE_ALPHANUMERIC = 5;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_TYPE_ABBREVIATED = 6;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_TYPE_RESERVED_7 = 7;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/CdmaSmsMessage.aidl b/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/CdmaSmsMessage.aidl
index 0e98f4b..bbf8983 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/CdmaSmsMessage.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/CdmaSmsMessage.aidl
@@ -35,10 +35,28 @@
/* @hide */
@JavaDerive(toString=true) @VintfStability
parcelable CdmaSmsMessage {
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int teleserviceId;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
boolean isServicePresent;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int serviceCategory;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
android.hardware.radio.messaging.CdmaSmsAddress address;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
android.hardware.radio.messaging.CdmaSmsSubaddress subAddress;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
byte[] bearerData;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/CdmaSmsSubaddress.aidl b/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/CdmaSmsSubaddress.aidl
index a0e3991..50c3af5 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/CdmaSmsSubaddress.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/CdmaSmsSubaddress.aidl
@@ -35,9 +35,24 @@
/* @hide */
@JavaDerive(toString=true) @VintfStability
parcelable CdmaSmsSubaddress {
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int subaddressType;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
boolean odd;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
byte[] digits;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int SUBADDRESS_TYPE_NSAP = 0;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int SUBADDRESS_TYPE_USER_SPECIFIED = 1;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/CdmaSmsWriteArgs.aidl b/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/CdmaSmsWriteArgs.aidl
index d6292e7..759407f 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/CdmaSmsWriteArgs.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/CdmaSmsWriteArgs.aidl
@@ -35,10 +35,28 @@
/* @hide */
@JavaDerive(toString=true) @VintfStability
parcelable CdmaSmsWriteArgs {
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int status;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
android.hardware.radio.messaging.CdmaSmsMessage message;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int STATUS_REC_UNREAD = 0;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int STATUS_REC_READ = 1;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int STATUS_STO_UNSENT = 2;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int STATUS_STO_SENT = 3;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/IRadioMessaging.aidl b/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/IRadioMessaging.aidl
index bf5fde5..c69fcac 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/IRadioMessaging.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/IRadioMessaging.aidl
@@ -36,26 +36,50 @@
@VintfStability
interface IRadioMessaging {
oneway void acknowledgeIncomingGsmSmsWithPdu(in int serial, in boolean success, in String ackPdu);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void acknowledgeLastIncomingCdmaSms(in int serial, in android.hardware.radio.messaging.CdmaSmsAck smsAck);
oneway void acknowledgeLastIncomingGsmSms(in int serial, in boolean success, in android.hardware.radio.messaging.SmsAcknowledgeFailCause cause);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void deleteSmsOnRuim(in int serial, in int index);
oneway void deleteSmsOnSim(in int serial, in int index);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void getCdmaBroadcastConfig(in int serial);
oneway void getGsmBroadcastConfig(in int serial);
oneway void getSmscAddress(in int serial);
oneway void reportSmsMemoryStatus(in int serial, in boolean available);
oneway void responseAcknowledgement();
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void sendCdmaSms(in int serial, in android.hardware.radio.messaging.CdmaSmsMessage sms);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void sendCdmaSmsExpectMore(in int serial, in android.hardware.radio.messaging.CdmaSmsMessage sms);
oneway void sendImsSms(in int serial, in android.hardware.radio.messaging.ImsSmsMessage message);
oneway void sendSms(in int serial, in android.hardware.radio.messaging.GsmSmsMessage message);
oneway void sendSmsExpectMore(in int serial, in android.hardware.radio.messaging.GsmSmsMessage message);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void setCdmaBroadcastActivation(in int serial, in boolean activate);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void setCdmaBroadcastConfig(in int serial, in android.hardware.radio.messaging.CdmaBroadcastSmsConfigInfo[] configInfo);
oneway void setGsmBroadcastActivation(in int serial, in boolean activate);
oneway void setGsmBroadcastConfig(in int serial, in android.hardware.radio.messaging.GsmBroadcastSmsConfigInfo[] configInfo);
oneway void setResponseFunctions(in android.hardware.radio.messaging.IRadioMessagingResponse radioMessagingResponse, in android.hardware.radio.messaging.IRadioMessagingIndication radioMessagingIndication);
oneway void setSmscAddress(in int serial, in String smsc);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void writeSmsToRuim(in int serial, in android.hardware.radio.messaging.CdmaSmsWriteArgs cdmaSms);
oneway void writeSmsToSim(in int serial, in android.hardware.radio.messaging.SmsWriteArgs smsWriteArgs);
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/IRadioMessagingIndication.aidl b/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/IRadioMessagingIndication.aidl
index 389fb26..a5cde9a 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/IRadioMessagingIndication.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/IRadioMessagingIndication.aidl
@@ -35,7 +35,13 @@
/* @hide */
@VintfStability
interface IRadioMessagingIndication {
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void cdmaNewSms(in android.hardware.radio.RadioIndicationType type, in android.hardware.radio.messaging.CdmaSmsMessage msg);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void cdmaRuimSmsStorageFull(in android.hardware.radio.RadioIndicationType type);
oneway void newBroadcastSms(in android.hardware.radio.RadioIndicationType type, in byte[] data);
oneway void newSms(in android.hardware.radio.RadioIndicationType type, in byte[] pdu);
diff --git a/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/IRadioMessagingResponse.aidl b/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/IRadioMessagingResponse.aidl
index 9b10464..c2403e4 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/IRadioMessagingResponse.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/IRadioMessagingResponse.aidl
@@ -36,25 +36,49 @@
@VintfStability
interface IRadioMessagingResponse {
oneway void acknowledgeIncomingGsmSmsWithPduResponse(in android.hardware.radio.RadioResponseInfo info);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void acknowledgeLastIncomingCdmaSmsResponse(in android.hardware.radio.RadioResponseInfo info);
oneway void acknowledgeLastIncomingGsmSmsResponse(in android.hardware.radio.RadioResponseInfo info);
oneway void acknowledgeRequest(in int serial);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void deleteSmsOnRuimResponse(in android.hardware.radio.RadioResponseInfo info);
oneway void deleteSmsOnSimResponse(in android.hardware.radio.RadioResponseInfo info);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void getCdmaBroadcastConfigResponse(in android.hardware.radio.RadioResponseInfo info, in android.hardware.radio.messaging.CdmaBroadcastSmsConfigInfo[] configs);
oneway void getGsmBroadcastConfigResponse(in android.hardware.radio.RadioResponseInfo info, in android.hardware.radio.messaging.GsmBroadcastSmsConfigInfo[] configs);
oneway void getSmscAddressResponse(in android.hardware.radio.RadioResponseInfo info, in String smsc);
oneway void reportSmsMemoryStatusResponse(in android.hardware.radio.RadioResponseInfo info);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void sendCdmaSmsExpectMoreResponse(in android.hardware.radio.RadioResponseInfo info, in android.hardware.radio.messaging.SendSmsResult sms);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void sendCdmaSmsResponse(in android.hardware.radio.RadioResponseInfo info, in android.hardware.radio.messaging.SendSmsResult sms);
oneway void sendImsSmsResponse(in android.hardware.radio.RadioResponseInfo info, in android.hardware.radio.messaging.SendSmsResult sms);
oneway void sendSmsExpectMoreResponse(in android.hardware.radio.RadioResponseInfo info, in android.hardware.radio.messaging.SendSmsResult sms);
oneway void sendSmsResponse(in android.hardware.radio.RadioResponseInfo info, in android.hardware.radio.messaging.SendSmsResult sms);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void setCdmaBroadcastActivationResponse(in android.hardware.radio.RadioResponseInfo info);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void setCdmaBroadcastConfigResponse(in android.hardware.radio.RadioResponseInfo info);
oneway void setGsmBroadcastActivationResponse(in android.hardware.radio.RadioResponseInfo info);
oneway void setGsmBroadcastConfigResponse(in android.hardware.radio.RadioResponseInfo info);
oneway void setSmscAddressResponse(in android.hardware.radio.RadioResponseInfo info);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void writeSmsToRuimResponse(in android.hardware.radio.RadioResponseInfo info, in int index);
oneway void writeSmsToSimResponse(in android.hardware.radio.RadioResponseInfo info, in int index);
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/ImsSmsMessage.aidl b/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/ImsSmsMessage.aidl
index 40b9ddb..e52b57a 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/ImsSmsMessage.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/ImsSmsMessage.aidl
@@ -38,6 +38,9 @@
android.hardware.radio.RadioTechnologyFamily tech;
boolean retry;
int messageRef;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
android.hardware.radio.messaging.CdmaSmsMessage[] cdmaMessage;
android.hardware.radio.messaging.GsmSmsMessage[] gsmMessage;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/SendSmsResult.aidl b/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/SendSmsResult.aidl
index 3f1d120..ae398a9 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/SendSmsResult.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.messaging/current/android/hardware/radio/messaging/SendSmsResult.aidl
@@ -35,7 +35,16 @@
/* @hide */
@JavaDerive(toString=true) @VintfStability
parcelable SendSmsResult {
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int messageRef;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
String ackPDU;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int errorCode;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/ActivityStatsTechSpecificInfo.aidl b/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/ActivityStatsTechSpecificInfo.aidl
index b44ab71..080a877 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/ActivityStatsTechSpecificInfo.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/ActivityStatsTechSpecificInfo.aidl
@@ -35,7 +35,7 @@
/* @hide */
@JavaDerive(toString=true) @VintfStability
parcelable ActivityStatsTechSpecificInfo {
- android.hardware.radio.AccessNetwork rat;
+ android.hardware.radio.AccessNetwork rat = android.hardware.radio.AccessNetwork.UNKNOWN;
int frequencyRange;
int[] txmModetimeMs;
int rxModeTimeMs;
diff --git a/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/DeviceStateType.aidl b/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/DeviceStateType.aidl
index 1159f93..023658c 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/DeviceStateType.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/DeviceStateType.aidl
@@ -33,7 +33,7 @@
package android.hardware.radio.modem;
/* @hide */
-@Backing(type="int") @JavaDerive(toString=true) @VintfStability
+@Backing(type="int") @JavaDerive(toString=true) @SuppressWarnings(value={"redundant-name"}) @VintfStability
enum DeviceStateType {
POWER_SAVE_MODE,
CHARGING_STATE,
diff --git a/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/HardwareConfigModem.aidl b/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/HardwareConfigModem.aidl
index d453cb0..7d5537f 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/HardwareConfigModem.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/HardwareConfigModem.aidl
@@ -36,7 +36,7 @@
@JavaDerive(toString=true) @VintfStability
parcelable HardwareConfigModem {
int rilModel;
- android.hardware.radio.RadioTechnology rat;
+ android.hardware.radio.RadioTechnology rat = android.hardware.radio.RadioTechnology.UNKNOWN;
int maxVoiceCalls;
int maxDataCalls;
int maxStandby;
diff --git a/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/ImeiInfo.aidl b/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/ImeiInfo.aidl
index a2df30d..96fb5a8 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/ImeiInfo.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/ImeiInfo.aidl
@@ -35,11 +35,12 @@
/* @hide */
@JavaDerive(toString=true) @VintfStability
parcelable ImeiInfo {
- android.hardware.radio.modem.ImeiInfo.ImeiType type;
+ android.hardware.radio.modem.ImeiInfo.ImeiType type = android.hardware.radio.modem.ImeiInfo.ImeiType.INVALID;
String imei;
String svn;
@Backing(type="int") @VintfStability
enum ImeiType {
+ INVALID = 0,
PRIMARY = 1,
SECONDARY = 2,
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/NvItem.aidl b/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/NvItem.aidl
index f97b9a2..bafcd19 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/NvItem.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/NvItem.aidl
@@ -32,51 +32,175 @@
// later when a module using the interface is updated, e.g., Mainline modules.
package android.hardware.radio.modem;
-/**
- * @hide
- * @deprecated NV APIs are deprecated starting from Android U.
- */
+/* @hide */
@Backing(type="int") @JavaDerive(toString=true) @VintfStability
enum NvItem {
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
+ INVALID = 0,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
CDMA_MEID = 1,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
CDMA_MIN = 2,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
CDMA_MDN = 3,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
CDMA_ACCOLC = 4,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
DEVICE_MSL = 11,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
RTN_RECONDITIONED_STATUS = 12,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
RTN_ACTIVATION_DATE = 13,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
RTN_LIFE_TIMER = 14,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
RTN_LIFE_CALLS = 15,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
RTN_LIFE_DATA_TX = 16,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
RTN_LIFE_DATA_RX = 17,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
OMADM_HFA_LEVEL = 18,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
MIP_PROFILE_NAI = 31,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
MIP_PROFILE_HOME_ADDRESS = 32,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
MIP_PROFILE_AAA_AUTH = 33,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
MIP_PROFILE_HA_AUTH = 34,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
MIP_PROFILE_PRI_HA_ADDR = 35,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
MIP_PROFILE_SEC_HA_ADDR = 36,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
MIP_PROFILE_REV_TUN_PREF = 37,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
MIP_PROFILE_HA_SPI = 38,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
MIP_PROFILE_AAA_SPI = 39,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
MIP_PROFILE_MN_HA_SS = 40,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
MIP_PROFILE_MN_AAA_SS = 41,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
CDMA_PRL_VERSION = 51,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
CDMA_BC10 = 52,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
CDMA_BC14 = 53,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
CDMA_SO68 = 54,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
CDMA_SO73_COP0 = 55,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
CDMA_SO73_COP1TO7 = 56,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
CDMA_1X_ADVANCED_ENABLED = 57,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
CDMA_EHRPD_ENABLED = 58,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
CDMA_EHRPD_FORCED = 59,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
LTE_BAND_ENABLE_25 = 71,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
LTE_BAND_ENABLE_26 = 72,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
LTE_BAND_ENABLE_41 = 73,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
LTE_SCAN_PRIORITY_25 = 74,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
LTE_SCAN_PRIORITY_26 = 75,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
LTE_SCAN_PRIORITY_41 = 76,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
LTE_HIDDEN_BAND_PRIORITY_25 = 77,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
LTE_HIDDEN_BAND_PRIORITY_26 = 78,
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
LTE_HIDDEN_BAND_PRIORITY_41 = 79,
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/NvWriteItem.aidl b/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/NvWriteItem.aidl
index c38ceb7..c941246 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/NvWriteItem.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/NvWriteItem.aidl
@@ -32,12 +32,15 @@
// later when a module using the interface is updated, e.g., Mainline modules.
package android.hardware.radio.modem;
-/**
- * @hide
- * @deprecated NV APIs are deprecated starting from Android U.
- */
+/* @hide */
@JavaDerive(toString=true) @VintfStability
parcelable NvWriteItem {
- android.hardware.radio.modem.NvItem itemId;
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
+ android.hardware.radio.modem.NvItem itemId = android.hardware.radio.modem.NvItem.INVALID;
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
String value;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/ResetNvType.aidl b/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/ResetNvType.aidl
index b4208b7..e9937f0 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/ResetNvType.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.modem/current/android/hardware/radio/modem/ResetNvType.aidl
@@ -33,7 +33,7 @@
package android.hardware.radio.modem;
/* @hide */
-@Backing(type="int") @JavaDerive(toString=true) @VintfStability
+@Backing(type="int") @JavaDerive(toString=true) @SuppressWarnings(value={"redundant-name"}) @VintfStability
enum ResetNvType {
RELOAD,
ERASE,
diff --git a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/AccessTechnologySpecificInfo.aidl b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/AccessTechnologySpecificInfo.aidl
index 667a8a7..36b9cdd 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/AccessTechnologySpecificInfo.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/AccessTechnologySpecificInfo.aidl
@@ -36,6 +36,9 @@
@JavaDerive(toString=true) @VintfStability
union AccessTechnologySpecificInfo {
boolean noinit;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
android.hardware.radio.network.Cdma2000RegistrationInfo cdmaInfo;
android.hardware.radio.network.EutranRegistrationInfo eutranInfo;
android.hardware.radio.network.NrVopsInfo ngranNrVopsInfo;
diff --git a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/Cdma2000RegistrationInfo.aidl b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/Cdma2000RegistrationInfo.aidl
index bc9c0ba..5fbd6c4 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/Cdma2000RegistrationInfo.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/Cdma2000RegistrationInfo.aidl
@@ -35,11 +35,32 @@
/* @hide */
@JavaDerive(toString=true) @VintfStability
parcelable Cdma2000RegistrationInfo {
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
boolean cssSupported;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int roamingIndicator;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int systemIsInPrl;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int defaultRoamingIndicator;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int PRL_INDICATOR_NOT_REGISTERED = (-1) /* -1 */;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int PRL_INDICATOR_NOT_IN_PRL = 0;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int PRL_INDICATOR_IN_PRL = 1;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/CdmaRoamingType.aidl b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/CdmaRoamingType.aidl
index 84532e3..ed9a9eb 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/CdmaRoamingType.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/CdmaRoamingType.aidl
@@ -35,7 +35,16 @@
/* @hide */
@Backing(type="int") @JavaDerive(toString=true) @VintfStability
enum CdmaRoamingType {
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
HOME_NETWORK,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
AFFILIATED_ROAM,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
ANY_ROAM,
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/CdmaSignalStrength.aidl b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/CdmaSignalStrength.aidl
index 94430a8..6e68665 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/CdmaSignalStrength.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/CdmaSignalStrength.aidl
@@ -35,6 +35,12 @@
/* @hide */
@JavaDerive(toString=true) @VintfStability
parcelable CdmaSignalStrength {
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int dbm;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int ecio;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/CellIdentity.aidl b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/CellIdentity.aidl
index ba27b39..dbd1575 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/CellIdentity.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/CellIdentity.aidl
@@ -39,6 +39,9 @@
android.hardware.radio.network.CellIdentityGsm gsm;
android.hardware.radio.network.CellIdentityWcdma wcdma;
android.hardware.radio.network.CellIdentityTdscdma tdscdma;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
android.hardware.radio.network.CellIdentityCdma cdma;
android.hardware.radio.network.CellIdentityLte lte;
android.hardware.radio.network.CellIdentityNr nr;
diff --git a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/CellIdentityCdma.aidl b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/CellIdentityCdma.aidl
index 63571bb..548afd2 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/CellIdentityCdma.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/CellIdentityCdma.aidl
@@ -35,10 +35,28 @@
/* @hide */
@JavaDerive(toString=true) @VintfStability
parcelable CellIdentityCdma {
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int networkId;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int systemId;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int baseStationId;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int longitude;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int latitude;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
android.hardware.radio.network.OperatorInfo operatorNames;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/CellInfoCdma.aidl b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/CellInfoCdma.aidl
index 6d76a26..18c9496 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/CellInfoCdma.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/CellInfoCdma.aidl
@@ -35,7 +35,16 @@
/* @hide */
@JavaDerive(toString=true) @VintfStability
parcelable CellInfoCdma {
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
android.hardware.radio.network.CellIdentityCdma cellIdentityCdma;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
android.hardware.radio.network.CdmaSignalStrength signalStrengthCdma;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
android.hardware.radio.network.EvdoSignalStrength signalStrengthEvdo;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/CellInfoRatSpecificInfo.aidl b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/CellInfoRatSpecificInfo.aidl
index fd3239d..732e70f 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/CellInfoRatSpecificInfo.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/CellInfoRatSpecificInfo.aidl
@@ -40,5 +40,8 @@
android.hardware.radio.network.CellInfoTdscdma tdscdma;
android.hardware.radio.network.CellInfoLte lte;
android.hardware.radio.network.CellInfoNr nr;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
android.hardware.radio.network.CellInfoCdma cdma;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/EvdoSignalStrength.aidl b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/EvdoSignalStrength.aidl
index e97e17d..2a7eccb 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/EvdoSignalStrength.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/EvdoSignalStrength.aidl
@@ -35,7 +35,16 @@
/* @hide */
@JavaDerive(toString=true) @VintfStability
parcelable EvdoSignalStrength {
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int dbm;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int ecio;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int signalNoiseRatio;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetwork.aidl b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetwork.aidl
index 8af617f..37737a7 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetwork.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetwork.aidl
@@ -39,6 +39,9 @@
oneway void getAvailableBandModes(in int serial);
oneway void getAvailableNetworks(in int serial);
oneway void getBarringInfo(in int serial);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void getCdmaRoamingPreference(in int serial);
oneway void getCellInfoList(in int serial);
oneway void getDataRegistrationState(in int serial);
@@ -57,6 +60,9 @@
oneway void setAllowedNetworkTypesBitmap(in int serial, in int networkTypeBitmap);
oneway void setBandMode(in int serial, in android.hardware.radio.network.RadioBandMode mode);
oneway void setBarringPassword(in int serial, in String facility, in String oldPassword, in String newPassword);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void setCdmaRoamingPreference(in int serial, in android.hardware.radio.network.CdmaRoamingType type);
oneway void setCellInfoListRate(in int serial, in int rate);
oneway void setIndicationFilter(in int serial, in int indicationFilter);
diff --git a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetworkIndication.aidl b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetworkIndication.aidl
index 8eea14f..d4d6118 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetworkIndication.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetworkIndication.aidl
@@ -36,6 +36,9 @@
@VintfStability
interface IRadioNetworkIndication {
oneway void barringInfoChanged(in android.hardware.radio.RadioIndicationType type, in android.hardware.radio.network.CellIdentity cellIdentity, in android.hardware.radio.network.BarringInfo[] barringInfos);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void cdmaPrlChanged(in android.hardware.radio.RadioIndicationType type, in int version);
oneway void cellInfoList(in android.hardware.radio.RadioIndicationType type, in android.hardware.radio.network.CellInfo[] records);
oneway void currentLinkCapacityEstimate(in android.hardware.radio.RadioIndicationType type, in android.hardware.radio.network.LinkCapacityEstimate lce);
diff --git a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetworkResponse.aidl b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetworkResponse.aidl
index e7f2918..4c6d100 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetworkResponse.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/IRadioNetworkResponse.aidl
@@ -40,6 +40,9 @@
oneway void getAvailableBandModesResponse(in android.hardware.radio.RadioResponseInfo info, in android.hardware.radio.network.RadioBandMode[] bandModes);
oneway void getAvailableNetworksResponse(in android.hardware.radio.RadioResponseInfo info, in android.hardware.radio.network.OperatorInfo[] networkInfos);
oneway void getBarringInfoResponse(in android.hardware.radio.RadioResponseInfo info, in android.hardware.radio.network.CellIdentity cellIdentity, in android.hardware.radio.network.BarringInfo[] barringInfos);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void getCdmaRoamingPreferenceResponse(in android.hardware.radio.RadioResponseInfo info, in android.hardware.radio.network.CdmaRoamingType type);
oneway void getCellInfoListResponse(in android.hardware.radio.RadioResponseInfo info, in android.hardware.radio.network.CellInfo[] cellInfo);
oneway void getDataRegistrationStateResponse(in android.hardware.radio.RadioResponseInfo info, in android.hardware.radio.network.RegStateResult dataRegResponse);
@@ -57,6 +60,9 @@
oneway void setAllowedNetworkTypesBitmapResponse(in android.hardware.radio.RadioResponseInfo info);
oneway void setBandModeResponse(in android.hardware.radio.RadioResponseInfo info);
oneway void setBarringPasswordResponse(in android.hardware.radio.RadioResponseInfo info);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void setCdmaRoamingPreferenceResponse(in android.hardware.radio.RadioResponseInfo info);
oneway void setCellInfoListRateResponse(in android.hardware.radio.RadioResponseInfo info);
oneway void setIndicationFilterResponse(in android.hardware.radio.RadioResponseInfo info);
diff --git a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/NrSignalStrength.aidl b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/NrSignalStrength.aidl
index 11e7356..45e6ccf 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/NrSignalStrength.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/NrSignalStrength.aidl
@@ -43,5 +43,5 @@
int csiSinr;
int csiCqiTableIndex;
byte[] csiCqiReport;
- int timingAdvance = 0x7FFFFFFF;
+ int timingAdvance = android.hardware.radio.RadioConst.VALUE_UNAVAILABLE /* 2147483647 */;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/SignalStrength.aidl b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/SignalStrength.aidl
index da7db9a..196ff19 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/SignalStrength.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.network/current/android/hardware/radio/network/SignalStrength.aidl
@@ -36,7 +36,13 @@
@JavaDerive(toString=true) @VintfStability
parcelable SignalStrength {
android.hardware.radio.network.GsmSignalStrength gsm;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
android.hardware.radio.network.CdmaSignalStrength cdma;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
android.hardware.radio.network.EvdoSignalStrength evdo;
android.hardware.radio.network.LteSignalStrength lte;
android.hardware.radio.network.TdscdmaSignalStrength tdscdma;
diff --git a/radio/aidl/aidl_api/android.hardware.radio.sim/current/android/hardware/radio/sim/CardStatus.aidl b/radio/aidl/aidl_api/android.hardware.radio.sim/current/android/hardware/radio/sim/CardStatus.aidl
index 1a9d621..4cdbf81 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.sim/current/android/hardware/radio/sim/CardStatus.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.sim/current/android/hardware/radio/sim/CardStatus.aidl
@@ -38,6 +38,9 @@
int cardState;
android.hardware.radio.sim.PinState universalPinState;
int gsmUmtsSubscriptionAppIndex;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int cdmaSubscriptionAppIndex;
int imsSubscriptionAppIndex;
android.hardware.radio.sim.AppStatus[] applications;
diff --git a/radio/aidl/aidl_api/android.hardware.radio.sim/current/android/hardware/radio/sim/CdmaSubscriptionSource.aidl b/radio/aidl/aidl_api/android.hardware.radio.sim/current/android/hardware/radio/sim/CdmaSubscriptionSource.aidl
index 13b06e7..d3e8295 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.sim/current/android/hardware/radio/sim/CdmaSubscriptionSource.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.sim/current/android/hardware/radio/sim/CdmaSubscriptionSource.aidl
@@ -35,6 +35,12 @@
/* @hide */
@Backing(type="int") @JavaDerive(toString=true) @VintfStability
enum CdmaSubscriptionSource {
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
RUIM_SIM,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
NV,
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.sim/current/android/hardware/radio/sim/IRadioSim.aidl b/radio/aidl/aidl_api/android.hardware.radio.sim/current/android/hardware/radio/sim/IRadioSim.aidl
index 1728e41..5a4c5c1 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.sim/current/android/hardware/radio/sim/IRadioSim.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.sim/current/android/hardware/radio/sim/IRadioSim.aidl
@@ -40,7 +40,13 @@
oneway void changeIccPinForApp(in int serial, in String oldPin, in String newPin, in String aid);
oneway void enableUiccApplications(in int serial, in boolean enable);
oneway void getAllowedCarriers(in int serial);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void getCdmaSubscription(in int serial);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void getCdmaSubscriptionSource(in int serial);
oneway void getFacilityLockForApp(in int serial, in String facility, in String password, in int serviceClass, in String appId);
oneway void getIccCardStatus(in int serial);
@@ -63,6 +69,9 @@
oneway void sendTerminalResponseToSim(in int serial, in String contents);
oneway void setAllowedCarriers(in int serial, in android.hardware.radio.sim.CarrierRestrictions carriers, in android.hardware.radio.sim.SimLockMultiSimPolicy multiSimPolicy);
oneway void setCarrierInfoForImsiEncryption(in int serial, in android.hardware.radio.sim.ImsiEncryptionInfo imsiEncryptionInfo);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void setCdmaSubscriptionSource(in int serial, in android.hardware.radio.sim.CdmaSubscriptionSource cdmaSub);
oneway void setFacilityLockForApp(in int serial, in String facility, in boolean lockState, in String password, in int serviceClass, in String appId);
oneway void setResponseFunctions(in android.hardware.radio.sim.IRadioSimResponse radioSimResponse, in android.hardware.radio.sim.IRadioSimIndication radioSimIndication);
diff --git a/radio/aidl/aidl_api/android.hardware.radio.sim/current/android/hardware/radio/sim/IRadioSimIndication.aidl b/radio/aidl/aidl_api/android.hardware.radio.sim/current/android/hardware/radio/sim/IRadioSimIndication.aidl
index a74b65a..0c4df06 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.sim/current/android/hardware/radio/sim/IRadioSimIndication.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.sim/current/android/hardware/radio/sim/IRadioSimIndication.aidl
@@ -36,6 +36,9 @@
@VintfStability
interface IRadioSimIndication {
oneway void carrierInfoForImsiEncryption(in android.hardware.radio.RadioIndicationType info);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void cdmaSubscriptionSourceChanged(in android.hardware.radio.RadioIndicationType type, in android.hardware.radio.sim.CdmaSubscriptionSource cdmaSource);
oneway void simPhonebookChanged(in android.hardware.radio.RadioIndicationType type);
oneway void simPhonebookRecordsReceived(in android.hardware.radio.RadioIndicationType type, in android.hardware.radio.sim.PbReceivedStatus status, in android.hardware.radio.sim.PhonebookRecordInfo[] records);
diff --git a/radio/aidl/aidl_api/android.hardware.radio.sim/current/android/hardware/radio/sim/IRadioSimResponse.aidl b/radio/aidl/aidl_api/android.hardware.radio.sim/current/android/hardware/radio/sim/IRadioSimResponse.aidl
index c653847..a512bae 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.sim/current/android/hardware/radio/sim/IRadioSimResponse.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.sim/current/android/hardware/radio/sim/IRadioSimResponse.aidl
@@ -41,7 +41,13 @@
oneway void changeIccPinForAppResponse(in android.hardware.radio.RadioResponseInfo info, in int remainingRetries);
oneway void enableUiccApplicationsResponse(in android.hardware.radio.RadioResponseInfo info);
oneway void getAllowedCarriersResponse(in android.hardware.radio.RadioResponseInfo info, in android.hardware.radio.sim.CarrierRestrictions carriers, in android.hardware.radio.sim.SimLockMultiSimPolicy multiSimPolicy);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void getCdmaSubscriptionResponse(in android.hardware.radio.RadioResponseInfo info, in String mdn, in String hSid, in String hNid, in String min, in String prl);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void getCdmaSubscriptionSourceResponse(in android.hardware.radio.RadioResponseInfo info, in android.hardware.radio.sim.CdmaSubscriptionSource source);
oneway void getFacilityLockForAppResponse(in android.hardware.radio.RadioResponseInfo info, in int response);
oneway void getIccCardStatusResponse(in android.hardware.radio.RadioResponseInfo info, in android.hardware.radio.sim.CardStatus cardStatus);
@@ -63,6 +69,9 @@
oneway void sendTerminalResponseToSimResponse(in android.hardware.radio.RadioResponseInfo info);
oneway void setAllowedCarriersResponse(in android.hardware.radio.RadioResponseInfo info);
oneway void setCarrierInfoForImsiEncryptionResponse(in android.hardware.radio.RadioResponseInfo info);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void setCdmaSubscriptionSourceResponse(in android.hardware.radio.RadioResponseInfo info);
oneway void setFacilityLockForAppResponse(in android.hardware.radio.RadioResponseInfo info, in int retry);
oneway void setSimCardPowerResponse(in android.hardware.radio.RadioResponseInfo info);
diff --git a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/Call.aidl b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/Call.aidl
index b45a45b..8bfd7ed 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/Call.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/Call.aidl
@@ -42,6 +42,9 @@
boolean isMT;
byte als;
boolean isVoice;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
boolean isVoicePrivacy;
String number;
int numberPresentation;
diff --git a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaCallWaiting.aidl b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaCallWaiting.aidl
index 0b36be4..7eb8c4e 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaCallWaiting.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaCallWaiting.aidl
@@ -35,24 +35,84 @@
/* @hide */
@JavaDerive(toString=true) @VintfStability
parcelable CdmaCallWaiting {
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
String number;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int numberPresentation;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
String name;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
android.hardware.radio.voice.CdmaSignalInfoRecord signalInfoRecord;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int numberType;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int numberPlan;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_PLAN_UNKNOWN = 0;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_PLAN_ISDN = 1;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_PLAN_DATA = 3;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_PLAN_TELEX = 4;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_PLAN_NATIONAL = 8;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_PLAN_PRIVATE = 9;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_PRESENTATION_ALLOWED = 0;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_PRESENTATION_RESTRICTED = 1;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_PRESENTATION_UNKNOWN = 2;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_TYPE_UNKNOWN = 0;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_TYPE_INTERNATIONAL = 1;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_TYPE_NATIONAL = 2;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_TYPE_NETWORK_SPECIFIC = 3;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NUMBER_TYPE_SUBSCRIBER = 4;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaDisplayInfoRecord.aidl b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaDisplayInfoRecord.aidl
index 300b03f..eb97488 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaDisplayInfoRecord.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaDisplayInfoRecord.aidl
@@ -35,6 +35,12 @@
/* @hide */
@JavaDerive(toString=true) @VintfStability
parcelable CdmaDisplayInfoRecord {
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
String alphaBuf;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int CDMA_ALPHA_INFO_BUFFER_LENGTH = 64;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaInformationRecord.aidl b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaInformationRecord.aidl
index 2f7f5f0..4f421b1 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaInformationRecord.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaInformationRecord.aidl
@@ -35,24 +35,84 @@
/* @hide */
@JavaDerive(toString=true) @VintfStability
parcelable CdmaInformationRecord {
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int name;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
android.hardware.radio.voice.CdmaDisplayInfoRecord[] display;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
android.hardware.radio.voice.CdmaNumberInfoRecord[] number;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
android.hardware.radio.voice.CdmaSignalInfoRecord[] signal;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
android.hardware.radio.voice.CdmaRedirectingNumberInfoRecord[] redir;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
android.hardware.radio.voice.CdmaLineControlInfoRecord[] lineCtrl;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
android.hardware.radio.voice.CdmaT53ClirInfoRecord[] clir;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
android.hardware.radio.voice.CdmaT53AudioControlInfoRecord[] audioCtrl;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int CDMA_MAX_NUMBER_OF_INFO_RECS = 10;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NAME_DISPLAY = 0;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NAME_CALLED_PARTY_NUMBER = 1;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NAME_CALLING_PARTY_NUMBER = 2;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NAME_CONNECTED_NUMBER = 3;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NAME_SIGNAL = 4;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NAME_REDIRECTING_NUMBER = 5;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NAME_LINE_CONTROL = 6;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NAME_EXTENDED_DISPLAY = 7;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NAME_T53_CLIR = 8;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NAME_T53_RELEASE = 9;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int NAME_T53_AUDIO_CONTROL = 10;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaLineControlInfoRecord.aidl b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaLineControlInfoRecord.aidl
index 4e4a7ee..6968a8a 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaLineControlInfoRecord.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaLineControlInfoRecord.aidl
@@ -35,8 +35,20 @@
/* @hide */
@JavaDerive(toString=true) @VintfStability
parcelable CdmaLineControlInfoRecord {
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
byte lineCtrlPolarityIncluded;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
byte lineCtrlToggle;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
byte lineCtrlReverse;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
byte lineCtrlPowerDenial;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaNumberInfoRecord.aidl b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaNumberInfoRecord.aidl
index c3b0d5a..d2c09d6 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaNumberInfoRecord.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaNumberInfoRecord.aidl
@@ -35,10 +35,28 @@
/* @hide */
@JavaDerive(toString=true) @VintfStability
parcelable CdmaNumberInfoRecord {
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
String number;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
byte numberType;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
byte numberPlan;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
byte pi;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
byte si;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int CDMA_NUMBER_INFO_BUFFER_LENGTH = 81;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaOtaProvisionStatus.aidl b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaOtaProvisionStatus.aidl
index ae35fba..0bf802d 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaOtaProvisionStatus.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaOtaProvisionStatus.aidl
@@ -35,16 +35,52 @@
/* @hide */
@Backing(type="int") @JavaDerive(toString=true) @VintfStability
enum CdmaOtaProvisionStatus {
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
SPL_UNLOCKED,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
SPC_RETRIES_EXCEEDED,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
A_KEY_EXCHANGED,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
SSD_UPDATED,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
NAM_DOWNLOADED,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
MDN_DOWNLOADED,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
IMSI_DOWNLOADED,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
PRL_DOWNLOADED,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
COMMITTED,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
OTAPA_STARTED,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
OTAPA_STOPPED,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
OTAPA_ABORTED,
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaRedirectingNumberInfoRecord.aidl b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaRedirectingNumberInfoRecord.aidl
index 93c7c6b..4e40cc7 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaRedirectingNumberInfoRecord.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaRedirectingNumberInfoRecord.aidl
@@ -35,13 +35,40 @@
/* @hide */
@JavaDerive(toString=true) @VintfStability
parcelable CdmaRedirectingNumberInfoRecord {
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
android.hardware.radio.voice.CdmaNumberInfoRecord redirectingNumber;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
int redirectingReason;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int REDIRECTING_REASON_UNKNOWN = 0;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int REDIRECTING_REASON_CALL_FORWARDING_BUSY = 1;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int REDIRECTING_REASON_CALL_FORWARDING_NO_REPLY = 2;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int REDIRECTING_REASON_CALLED_DTE_OUT_OF_ORDER = 9;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int REDIRECTING_REASON_CALL_FORWARDING_BY_THE_CALLED_DTE = 10;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int REDIRECTING_REASON_CALL_FORWARDING_UNCONDITIONAL = 15;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
const int REDIRECTING_REASON_RESERVED = 16;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaSignalInfoRecord.aidl b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaSignalInfoRecord.aidl
index 69447b4..04e7bdc 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaSignalInfoRecord.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaSignalInfoRecord.aidl
@@ -35,8 +35,20 @@
/* @hide */
@JavaDerive(toString=true) @VintfStability
parcelable CdmaSignalInfoRecord {
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
boolean isPresent;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
byte signalType;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
byte alertPitch;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
byte signal;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaT53AudioControlInfoRecord.aidl b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaT53AudioControlInfoRecord.aidl
index 69d79aa..733d822 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaT53AudioControlInfoRecord.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaT53AudioControlInfoRecord.aidl
@@ -35,6 +35,12 @@
/* @hide */
@JavaDerive(toString=true) @VintfStability
parcelable CdmaT53AudioControlInfoRecord {
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
byte upLink;
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
byte downLink;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaT53ClirInfoRecord.aidl b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaT53ClirInfoRecord.aidl
index 83b6fb9..9cf931c 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaT53ClirInfoRecord.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/CdmaT53ClirInfoRecord.aidl
@@ -35,5 +35,8 @@
/* @hide */
@JavaDerive(toString=true) @VintfStability
parcelable CdmaT53ClirInfoRecord {
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
byte cause;
}
diff --git a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/IRadioVoice.aidl b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/IRadioVoice.aidl
index d0a9451..d519bd9 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/IRadioVoice.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/IRadioVoice.aidl
@@ -59,6 +59,9 @@
oneway void rejectCall(in int serial);
oneway void responseAcknowledgement();
oneway void sendBurstDtmf(in int serial, in String dtmf, in int on, in int off);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void sendCdmaFeatureCode(in int serial, in String featureCode);
oneway void sendDtmf(in int serial, in String s);
oneway void sendUssd(in int serial, in String ussd);
diff --git a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/IRadioVoiceIndication.aidl b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/IRadioVoiceIndication.aidl
index 4614ee1..fac27f4 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/IRadioVoiceIndication.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/IRadioVoiceIndication.aidl
@@ -37,8 +37,17 @@
interface IRadioVoiceIndication {
oneway void callRing(in android.hardware.radio.RadioIndicationType type, in boolean isGsm, in android.hardware.radio.voice.CdmaSignalInfoRecord record);
oneway void callStateChanged(in android.hardware.radio.RadioIndicationType type);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void cdmaCallWaiting(in android.hardware.radio.RadioIndicationType type, in android.hardware.radio.voice.CdmaCallWaiting callWaitingRecord);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void cdmaInfoRec(in android.hardware.radio.RadioIndicationType type, in android.hardware.radio.voice.CdmaInformationRecord[] records);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void cdmaOtaProvisionStatus(in android.hardware.radio.RadioIndicationType type, in android.hardware.radio.voice.CdmaOtaProvisionStatus status);
oneway void currentEmergencyNumberList(in android.hardware.radio.RadioIndicationType type, in android.hardware.radio.voice.EmergencyNumber[] emergencyNumberList);
oneway void enterEmergencyCallbackMode(in android.hardware.radio.RadioIndicationType type);
diff --git a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/IRadioVoiceResponse.aidl b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/IRadioVoiceResponse.aidl
index 46927c2..8a0af44 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/IRadioVoiceResponse.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/IRadioVoiceResponse.aidl
@@ -59,6 +59,9 @@
oneway void isVoNrEnabledResponse(in android.hardware.radio.RadioResponseInfo info, in boolean enable);
oneway void rejectCallResponse(in android.hardware.radio.RadioResponseInfo info);
oneway void sendBurstDtmfResponse(in android.hardware.radio.RadioResponseInfo info);
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
oneway void sendCdmaFeatureCodeResponse(in android.hardware.radio.RadioResponseInfo info);
oneway void sendDtmfResponse(in android.hardware.radio.RadioResponseInfo info);
oneway void sendUssdResponse(in android.hardware.radio.RadioResponseInfo info);
diff --git a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/LastCallFailCause.aidl b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/LastCallFailCause.aidl
index 0cac135..d3d62c3 100644
--- a/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/LastCallFailCause.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio.voice/current/android/hardware/radio/voice/LastCallFailCause.aidl
@@ -105,15 +105,45 @@
RADIO_RELEASE_ABNORMAL = 259,
ACCESS_CLASS_BLOCKED = 260,
NETWORK_DETACH = 261,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
CDMA_LOCKED_UNTIL_POWER_CYCLE = 1000,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
CDMA_DROP = 1001,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
CDMA_INTERCEPT = 1002,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
CDMA_REORDER = 1003,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
CDMA_SO_REJECT = 1004,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
CDMA_RETRY_ORDER = 1005,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
CDMA_ACCESS_FAILURE = 1006,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
CDMA_PREEMPTED = 1007,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
CDMA_NOT_EMERGENCY = 1008,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
CDMA_ACCESS_BLOCKED = 1009,
OEM_CAUSE_1 = 0xf001,
OEM_CAUSE_2 = 0xf002,
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/AccessNetwork.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/AccessNetwork.aidl
index 73a267b..c719846 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/AccessNetwork.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/AccessNetwork.aidl
@@ -39,6 +39,9 @@
GERAN,
UTRAN,
EUTRAN,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
CDMA2000,
IWLAN,
NGRAN,
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioAccessFamily.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioAccessFamily.aidl
index 1298ab0..b400bbe 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioAccessFamily.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioAccessFamily.aidl
@@ -41,12 +41,24 @@
UMTS = (1 << android.hardware.radio.RadioTechnology.UMTS) /* 8 */,
IS95A = (1 << android.hardware.radio.RadioTechnology.IS95A) /* 16 */,
IS95B = (1 << android.hardware.radio.RadioTechnology.IS95B) /* 32 */,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
ONE_X_RTT = (1 << android.hardware.radio.RadioTechnology.ONE_X_RTT) /* 64 */,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
EVDO_0 = (1 << android.hardware.radio.RadioTechnology.EVDO_0) /* 128 */,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
EVDO_A = (1 << android.hardware.radio.RadioTechnology.EVDO_A) /* 256 */,
HSDPA = (1 << android.hardware.radio.RadioTechnology.HSDPA) /* 512 */,
HSUPA = (1 << android.hardware.radio.RadioTechnology.HSUPA) /* 1024 */,
HSPA = (1 << android.hardware.radio.RadioTechnology.HSPA) /* 2048 */,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
EVDO_B = (1 << android.hardware.radio.RadioTechnology.EVDO_B) /* 4096 */,
EHRPD = (1 << android.hardware.radio.RadioTechnology.EHRPD) /* 8192 */,
LTE = (1 << android.hardware.radio.RadioTechnology.LTE) /* 16384 */,
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioConst.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioConst.aidl
index 970cd1e..e24a35d 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioConst.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioConst.aidl
@@ -35,6 +35,9 @@
/* @hide */
@JavaDerive(toString=true) @VintfStability
parcelable RadioConst {
+ const int VALUE_UNAVAILABLE = 0x7FFFFFFF;
+ const long VALUE_UNAVAILABLE_LONG = 0x7FFFFFFFFFFFFFFF;
+ const byte VALUE_UNAVAILABLE_BYTE = 0xFFu8;
const int MAX_RILDS = 3;
const int MAX_UUID_LENGTH = 64;
const int CARD_MAX_APPS = 8;
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioTechnology.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioTechnology.aidl
index 7c6a657..7d2d08c 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioTechnology.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioTechnology.aidl
@@ -41,12 +41,24 @@
UMTS,
IS95A,
IS95B,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
ONE_X_RTT,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
EVDO_0,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
EVDO_A,
HSDPA,
HSUPA,
HSPA,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
EVDO_B,
EHRPD,
LTE,
diff --git a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioTechnologyFamily.aidl b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioTechnologyFamily.aidl
index 85e9850..9b05c97 100644
--- a/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioTechnologyFamily.aidl
+++ b/radio/aidl/aidl_api/android.hardware.radio/current/android/hardware/radio/RadioTechnologyFamily.aidl
@@ -36,5 +36,8 @@
@Backing(type="int") @JavaDerive(toString=true) @VintfStability
enum RadioTechnologyFamily {
THREE_GPP,
+ /**
+ * @deprecated Legacy CDMA is unsupported.
+ */
THREE_GPP2,
}
diff --git a/radio/aidl/android/hardware/radio/AccessNetwork.aidl b/radio/aidl/android/hardware/radio/AccessNetwork.aidl
index 4099f83..0d10009 100644
--- a/radio/aidl/android/hardware/radio/AccessNetwork.aidl
+++ b/radio/aidl/android/hardware/radio/AccessNetwork.aidl
@@ -39,6 +39,7 @@
EUTRAN,
/**
* CDMA 2000 network
+ * @deprecated Legacy CDMA is unsupported.
*/
CDMA2000,
/**
diff --git a/radio/aidl/android/hardware/radio/RadioAccessFamily.aidl b/radio/aidl/android/hardware/radio/RadioAccessFamily.aidl
index 9ab4583..6d38d59 100644
--- a/radio/aidl/android/hardware/radio/RadioAccessFamily.aidl
+++ b/radio/aidl/android/hardware/radio/RadioAccessFamily.aidl
@@ -29,12 +29,16 @@
UMTS = 1 << RadioTechnology.UMTS,
IS95A = 1 << RadioTechnology.IS95A,
IS95B = 1 << RadioTechnology.IS95B,
+ /** @deprecated Legacy CDMA is unsupported. */
ONE_X_RTT = 1 << RadioTechnology.ONE_X_RTT,
+ /** @deprecated Legacy CDMA is unsupported. */
EVDO_0 = 1 << RadioTechnology.EVDO_0,
+ /** @deprecated Legacy CDMA is unsupported. */
EVDO_A = 1 << RadioTechnology.EVDO_A,
HSDPA = 1 << RadioTechnology.HSDPA,
HSUPA = 1 << RadioTechnology.HSUPA,
HSPA = 1 << RadioTechnology.HSPA,
+ /** @deprecated Legacy CDMA is unsupported. */
EVDO_B = 1 << RadioTechnology.EVDO_B,
EHRPD = 1 << RadioTechnology.EHRPD,
LTE = 1 << RadioTechnology.LTE,
diff --git a/radio/aidl/android/hardware/radio/RadioConst.aidl b/radio/aidl/android/hardware/radio/RadioConst.aidl
index 7b923b9..df27526 100644
--- a/radio/aidl/android/hardware/radio/RadioConst.aidl
+++ b/radio/aidl/android/hardware/radio/RadioConst.aidl
@@ -20,6 +20,9 @@
@VintfStability
@JavaDerive(toString=true)
parcelable RadioConst {
+ const int VALUE_UNAVAILABLE = 0x7FFFFFFF;
+ const long VALUE_UNAVAILABLE_LONG = 0x7FFFFFFFFFFFFFFF;
+ const byte VALUE_UNAVAILABLE_BYTE = 0xFFu8;
const int MAX_RILDS = 3;
const int MAX_UUID_LENGTH = 64;
const int CARD_MAX_APPS = 8;
diff --git a/radio/aidl/android/hardware/radio/RadioError.aidl b/radio/aidl/android/hardware/radio/RadioError.aidl
index 9c39bc4..4640122 100644
--- a/radio/aidl/android/hardware/radio/RadioError.aidl
+++ b/radio/aidl/android/hardware/radio/RadioError.aidl
@@ -60,12 +60,11 @@
*/
SMS_SEND_FAIL_RETRY = 10,
/**
- * Fail to set the location where CDMA subscription shall be retrieved because of SIM or
- * RUIM card absent
+ * SIM or RUIM card absent
*/
SIM_ABSENT = 11,
/**
- * Fail to find CDMA subscription from specified location
+ * Failed to find subscription from specified location
*/
SUBSCRIPTION_NOT_AVAILABLE = 12,
/**
diff --git a/radio/aidl/android/hardware/radio/RadioTechnology.aidl b/radio/aidl/android/hardware/radio/RadioTechnology.aidl
index 7ae428b..cd82ef5 100644
--- a/radio/aidl/android/hardware/radio/RadioTechnology.aidl
+++ b/radio/aidl/android/hardware/radio/RadioTechnology.aidl
@@ -27,12 +27,16 @@
UMTS,
IS95A,
IS95B,
+ /** @deprecated Legacy CDMA is unsupported. */
ONE_X_RTT,
+ /** @deprecated Legacy CDMA is unsupported. */
EVDO_0,
+ /** @deprecated Legacy CDMA is unsupported. */
EVDO_A,
HSDPA,
HSUPA,
HSPA,
+ /** @deprecated Legacy CDMA is unsupported. */
EVDO_B,
EHRPD,
LTE,
diff --git a/radio/aidl/android/hardware/radio/RadioTechnologyFamily.aidl b/radio/aidl/android/hardware/radio/RadioTechnologyFamily.aidl
index 4b5498c..a13c358 100644
--- a/radio/aidl/android/hardware/radio/RadioTechnologyFamily.aidl
+++ b/radio/aidl/android/hardware/radio/RadioTechnologyFamily.aidl
@@ -27,6 +27,7 @@
THREE_GPP,
/**
* 3GPP2 Technologies - CDMA
+ * @deprecated Legacy CDMA is unsupported.
*/
THREE_GPP2,
}
diff --git a/radio/aidl/android/hardware/radio/data/DataCallFailCause.aidl b/radio/aidl/android/hardware/radio/data/DataCallFailCause.aidl
index e015e8e..c5eeeb3 100644
--- a/radio/aidl/android/hardware/radio/data/DataCallFailCause.aidl
+++ b/radio/aidl/android/hardware/radio/data/DataCallFailCause.aidl
@@ -520,26 +520,32 @@
PDN_NON_IP_CALL_DISALLOWED = 0x817,
/**
* Device in CDMA locked state.
+ * @deprecated Legacy CDMA is unsupported.
*/
CDMA_LOCK = 0x818,
/**
* Received an intercept order from the base station.
+ * @deprecated Legacy CDMA is unsupported.
*/
CDMA_INTERCEPT = 0x819,
/**
* Receiving a reorder from the base station.
+ * @deprecated Legacy CDMA is unsupported.
*/
CDMA_REORDER = 0x81A,
/**
* Receiving a release from the base station with a SO (Service Option) Reject reason.
+ * @deprecated Legacy CDMA is unsupported.
*/
CDMA_RELEASE_DUE_TO_SO_REJECTION = 0x81B,
/**
* Receiving an incoming call from the base station.
+ * @deprecated Legacy CDMA is unsupported.
*/
CDMA_INCOMING_CALL = 0x81C,
/**
* Received an alert stop from the base station due to incoming only.
+ * @deprecated Legacy CDMA is unsupported.
*/
CDMA_ALERT_STOP = 0x81D,
/**
@@ -569,6 +575,7 @@
CONCURRENT_SERVICES_INCOMPATIBLE = 0x823,
/**
* Device does not have CDMA service.
+ * @deprecated Legacy CDMA is unsupported.
*/
NO_CDMA_SERVICE = 0x824,
/**
@@ -577,6 +584,7 @@
RUIM_NOT_PRESENT = 0x825,
/**
* Receiving a retry order from the base station.
+ * @deprecated Legacy CDMA is unsupported.
*/
CDMA_RETRY_ORDER = 0x826,
/**
@@ -1061,30 +1069,37 @@
UMTS_HANDOVER_TO_IWLAN = 0x897,
/**
* Received a connection deny due to general or network busy on EVDO network.
+ * @deprecated Legacy CDMA is unsupported.
*/
EVDO_CONNECTION_DENY_BY_GENERAL_OR_NETWORK_BUSY = 0x898,
/**
* Received a connection deny due to billing or authentication failure on EVDO network.
+ * @deprecated Legacy CDMA is unsupported.
*/
EVDO_CONNECTION_DENY_BY_BILLING_OR_AUTHENTICATION_FAILURE = 0x899,
/**
* HDR system has been changed due to redirection or the PRL was not preferred.
+ * @deprecated Legacy CDMA is unsupported.
*/
EVDO_HDR_CHANGED = 0x89A,
/**
* Device exited HDR due to redirection or the PRL was not preferred.
+ * @deprecated Legacy CDMA is unsupported.
*/
EVDO_HDR_EXITED = 0x89B,
/**
* Device does not have an HDR session.
+ * @deprecated Legacy CDMA is unsupported.
*/
EVDO_HDR_NO_SESSION = 0x89C,
/**
* It is ending an HDR call origination in favor of a GPS fix.
+ * @deprecated Legacy CDMA is unsupported.
*/
EVDO_USING_GPS_FIX_INSTEAD_OF_HDR_CALL = 0x89D,
/**
* Connection setup on the HDR system was time out.
+ * @deprecated Legacy CDMA is unsupported.
*/
EVDO_HDR_CONNECTION_SETUP_TIMEOUT = 0x89E,
/**
diff --git a/radio/aidl/android/hardware/radio/data/KeepaliveRequest.aidl b/radio/aidl/android/hardware/radio/data/KeepaliveRequest.aidl
index 1838f2e..90c4454 100644
--- a/radio/aidl/android/hardware/radio/data/KeepaliveRequest.aidl
+++ b/radio/aidl/android/hardware/radio/data/KeepaliveRequest.aidl
@@ -40,7 +40,7 @@
byte[] sourceAddress;
/**
* Source port if relevant for the given type
- * INT_MAX: 0x7FFFFFFF denotes that the field is unused
+ * RadioConst:VALUE_UNAVAILABLE denotes that the field is unused
*/
int sourcePort;
/**
@@ -49,7 +49,7 @@
byte[] destinationAddress;
/**
* Destination if relevant for the given type
- * INT_MAX: 0x7FFFFFFF denotes that the field is unused
+ * RadioConst:VALUE_UNAVAILABLE denotes that the field is unused
*/
int destinationPort;
/**
diff --git a/radio/aidl/android/hardware/radio/data/LinkAddress.aidl b/radio/aidl/android/hardware/radio/data/LinkAddress.aidl
index 957973d..7ac560f 100644
--- a/radio/aidl/android/hardware/radio/data/LinkAddress.aidl
+++ b/radio/aidl/android/hardware/radio/data/LinkAddress.aidl
@@ -44,14 +44,14 @@
* The time, as reported by SystemClock.elapsedRealtime(), when this link address will be or
* was deprecated. -1 indicates this information is not available. At the time existing
* connections can still use this address until it expires, but new connections should use the
- * new address. LONG_MAX(0x7FFFFFFFFFFFFFFF) indicates this link address will never be
+ * new address. RadioConst:VALUE_UNAVAILABLE_LONG indicates this link address will never be
* deprecated.
*/
long deprecationTime;
/**
* The time, as reported by SystemClock.elapsedRealtime(), when this link address will expire
* and be removed from the interface. -1 indicates this information is not available.
- * LONG_MAX(0x7FFFFFFFFFFFFFFF) indicates this link address will never expire.
+ * RadioConst:VALUE_UNAVAILABLE_LONG indicates this link address will never expire.
*/
long expirationTime;
}
diff --git a/radio/aidl/android/hardware/radio/data/SetupDataCallResult.aidl b/radio/aidl/android/hardware/radio/data/SetupDataCallResult.aidl
index b8f01c0..31fb14c 100644
--- a/radio/aidl/android/hardware/radio/data/SetupDataCallResult.aidl
+++ b/radio/aidl/android/hardware/radio/data/SetupDataCallResult.aidl
@@ -68,10 +68,10 @@
/**
* If cause is not DataCallFailCause.NONE, this field indicates the network suggested data
* retry back-off time in milliseconds. Negative value indicates network does not give any
- * suggestion. 0 indicates retry should be performed immediately. 0x7fffffffffffffff indicates
- * the device should not retry data setup anymore. During this time, no calls to
- * IRadioData.setupDataCall for this APN will be made unless IRadioDataIndication.unthrottleApn
- * is sent with the same APN.
+ * suggestion. 0 indicates retry should be performed immediately.
+ * RadioConst:VALUE_UNAVAILABLE_LONG indicates the device should not retry data setup anymore.
+ * During this time, no calls to IRadioData.setupDataCall for this APN will be made unless
+ * IRadioDataIndication.unthrottleApn is sent with the same APN.
*/
long suggestedRetryTime;
/**
diff --git a/radio/aidl/android/hardware/radio/messaging/CdmaBroadcastSmsConfigInfo.aidl b/radio/aidl/android/hardware/radio/messaging/CdmaBroadcastSmsConfigInfo.aidl
index 35a6a8d..cef8f5d 100644
--- a/radio/aidl/android/hardware/radio/messaging/CdmaBroadcastSmsConfigInfo.aidl
+++ b/radio/aidl/android/hardware/radio/messaging/CdmaBroadcastSmsConfigInfo.aidl
@@ -23,15 +23,18 @@
/**
* Defines a broadcast message identifier whose value is 0x0000 - 0xFFFF as defined in
* C.R1001G 9.3.1 and 9.3.2.
+ * @deprecated Legacy CDMA is unsupported.
*/
int serviceCategory;
/**
* Language code of broadcast message whose value is 0x00 - 0x07 as defined in C.R1001G 9.2.
+ * @deprecated Legacy CDMA is unsupported.
*/
int language;
/**
* Selected false means message types specified in serviceCategory are not accepted,
* while true means accepted.
+ * @deprecated Legacy CDMA is unsupported.
*/
boolean selected;
}
diff --git a/radio/aidl/android/hardware/radio/messaging/CdmaSmsAck.aidl b/radio/aidl/android/hardware/radio/messaging/CdmaSmsAck.aidl
index 2544ab5..ea5d8b2 100644
--- a/radio/aidl/android/hardware/radio/messaging/CdmaSmsAck.aidl
+++ b/radio/aidl/android/hardware/radio/messaging/CdmaSmsAck.aidl
@@ -20,10 +20,12 @@
@VintfStability
@JavaDerive(toString=true)
parcelable CdmaSmsAck {
+ /** @deprecated Legacy CDMA is unsupported. */
boolean errorClass;
/**
* SMS cause code as defined in N.S00005, 6.5.2.125.
* Currently, only 35 (resource shortage) and 39 (other terminal problem) are reported.
+ * @deprecated Legacy CDMA is unsupported.
*/
int smsCauseCode;
}
diff --git a/radio/aidl/android/hardware/radio/messaging/CdmaSmsAddress.aidl b/radio/aidl/android/hardware/radio/messaging/CdmaSmsAddress.aidl
index a7ad233..11d953b 100644
--- a/radio/aidl/android/hardware/radio/messaging/CdmaSmsAddress.aidl
+++ b/radio/aidl/android/hardware/radio/messaging/CdmaSmsAddress.aidl
@@ -22,40 +22,60 @@
parcelable CdmaSmsAddress {
/**
* DTMF digits
+ * @deprecated Legacy CDMA is unsupported.
*/
const int DIGIT_MODE_FOUR_BIT = 0;
+ /** @deprecated Legacy CDMA is unsupported. */
const int DIGIT_MODE_EIGHT_BIT = 1;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_PLAN_UNKNOWN = 0;
/**
* CCITT E.164 and E.163, including ISDN plan
+ * @deprecated Legacy CDMA is unsupported.
*/
const int NUMBER_PLAN_TELEPHONY = 1;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_PLAN_RESERVED_2 = 2;
/**
* CCITT X.121
+ * @deprecated Legacy CDMA is unsupported.
*/
const int NUMBER_PLAN_DATA = 3;
/**
* CCITT F.69
+ * @deprecated Legacy CDMA is unsupported.
*/
const int NUMBER_PLAN_TELEX = 4;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_PLAN_RESERVED_5 = 5;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_PLAN_RESERVED_6 = 6;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_PLAN_RESERVED_7 = 7;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_PLAN_RESERVED_8 = 8;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_PLAN_PRIVATE = 9;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_PLAN_RESERVED_10 = 10;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_PLAN_RESERVED_11 = 11;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_PLAN_RESERVED_12 = 12;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_PLAN_RESERVED_13 = 13;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_PLAN_RESERVED_14 = 14;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_PLAN_RESERVED_15 = 15;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_TYPE_UNKNOWN = 0;
/**
* INTERNATIONAL is used when number mode is not data network address. DATA_IP is used when the
* number mode is data network address.
+ * @deprecated Legacy CDMA is unsupported.
*/
const int NUMBER_TYPE_INTERNATIONAL_OR_DATA_IP = 1;
/**
@@ -63,25 +83,33 @@
* when the number mode is data network address. For INTERNET_MAIL, in the address data
* "digits", each byte contains an ASCII character. Examples are: "x@y.com,a@b.com"
* Ref TIA/EIA-637A 3.4.3.3
+ * @deprecated Legacy CDMA is unsupported.
*/
const int NUMBER_TYPE_NATIONAL_OR_INTERNET_MAIL = 2;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_TYPE_NETWORK = 3;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_TYPE_SUBSCRIBER = 4;
/**
* GSM SMS: address value is GSM 7-bit chars
+ * @deprecated Legacy CDMA is unsupported.
*/
const int NUMBER_TYPE_ALPHANUMERIC = 5;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_TYPE_ABBREVIATED = 6;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_TYPE_RESERVED_7 = 7;
/**
* CdmaSmsDigitMode is of two types : 4 bit and 8 bit.
* For 4-bit type, only "digits" field defined below in this struct is used.
* Values are DIGIT_MODE_
+ * @deprecated Legacy CDMA is unsupported.
*/
int digitMode;
/**
* Used only when digitMode is 8-bit.
+ * @deprecated Legacy CDMA is unsupported.
*/
boolean isNumberModeDataNetwork;
/**
@@ -92,15 +120,18 @@
* numberPlan = TELEPHONY
* digits = ASCII digits, e.g. '1', '2', '3', '4', and '5'
* Values are NUMBER_TYPE_
+ * @deprecated Legacy CDMA is unsupported.
*/
int numberType;
/**
* Used only when digitMode is 8-bit.
* Values are NUMBER_PLAN_
+ * @deprecated Legacy CDMA is unsupported.
*/
int numberPlan;
/**
* Each byte in this array represents a 4 bit or 8-bit digit of address data.
+ * @deprecated Legacy CDMA is unsupported.
*/
byte[] digits;
}
diff --git a/radio/aidl/android/hardware/radio/messaging/CdmaSmsMessage.aidl b/radio/aidl/android/hardware/radio/messaging/CdmaSmsMessage.aidl
index 51388b6..5332d82 100644
--- a/radio/aidl/android/hardware/radio/messaging/CdmaSmsMessage.aidl
+++ b/radio/aidl/android/hardware/radio/messaging/CdmaSmsMessage.aidl
@@ -23,13 +23,19 @@
@VintfStability
@JavaDerive(toString=true)
parcelable CdmaSmsMessage {
+ /** @deprecated Legacy CDMA is unsupported. */
int teleserviceId;
+ /** @deprecated Legacy CDMA is unsupported. */
boolean isServicePresent;
+ /** @deprecated Legacy CDMA is unsupported. */
int serviceCategory;
+ /** @deprecated Legacy CDMA is unsupported. */
CdmaSmsAddress address;
+ /** @deprecated Legacy CDMA is unsupported. */
CdmaSmsSubaddress subAddress;
/**
* 3GPP2 C.S0015-B, v2.0
+ * @deprecated Legacy CDMA is unsupported.
*/
byte[] bearerData;
}
diff --git a/radio/aidl/android/hardware/radio/messaging/CdmaSmsSubaddress.aidl b/radio/aidl/android/hardware/radio/messaging/CdmaSmsSubaddress.aidl
index 19d84ff..0a894ff 100644
--- a/radio/aidl/android/hardware/radio/messaging/CdmaSmsSubaddress.aidl
+++ b/radio/aidl/android/hardware/radio/messaging/CdmaSmsSubaddress.aidl
@@ -22,23 +22,28 @@
parcelable CdmaSmsSubaddress {
/**
* CCITT X.213 or ISO 8348 AD2
+ * @deprecated Legacy CDMA is unsupported.
*/
const int SUBADDRESS_TYPE_NSAP = 0;
/**
* e.g. X.25
+ * @deprecated Legacy CDMA is unsupported.
*/
const int SUBADDRESS_TYPE_USER_SPECIFIED = 1;
/**
* Values are SUBADDRESS_TYPE_
+ * @deprecated Legacy CDMA is unsupported.
*/
int subaddressType;
/**
* True means the last byte's lower 4 bits must be ignored
+ * @deprecated Legacy CDMA is unsupported.
*/
boolean odd;
/**
* Each byte represents an 8-bit digit of subaddress data
+ * @deprecated Legacy CDMA is unsupported.
*/
byte[] digits;
}
diff --git a/radio/aidl/android/hardware/radio/messaging/CdmaSmsWriteArgs.aidl b/radio/aidl/android/hardware/radio/messaging/CdmaSmsWriteArgs.aidl
index 897ec80..3047859 100644
--- a/radio/aidl/android/hardware/radio/messaging/CdmaSmsWriteArgs.aidl
+++ b/radio/aidl/android/hardware/radio/messaging/CdmaSmsWriteArgs.aidl
@@ -22,15 +22,21 @@
@VintfStability
@JavaDerive(toString=true)
parcelable CdmaSmsWriteArgs {
+ /** @deprecated Legacy CDMA is unsupported. */
const int STATUS_REC_UNREAD = 0;
+ /** @deprecated Legacy CDMA is unsupported. */
const int STATUS_REC_READ = 1;
+ /** @deprecated Legacy CDMA is unsupported. */
const int STATUS_STO_UNSENT = 2;
+ /** @deprecated Legacy CDMA is unsupported. */
const int STATUS_STO_SENT = 3;
/**
* Status of message. See TS 27.005 3.1
* Values are STATUS_
+ * @deprecated Legacy CDMA is unsupported.
*/
int status;
+ /** @deprecated Legacy CDMA is unsupported. */
CdmaSmsMessage message;
}
diff --git a/radio/aidl/android/hardware/radio/messaging/IRadioMessaging.aidl b/radio/aidl/android/hardware/radio/messaging/IRadioMessaging.aidl
index 945453c..b60a225 100644
--- a/radio/aidl/android/hardware/radio/messaging/IRadioMessaging.aidl
+++ b/radio/aidl/android/hardware/radio/messaging/IRadioMessaging.aidl
@@ -65,6 +65,8 @@
* Response function is IRadioMessagingResponse.acknowledgeLastIncomingCdmaSmsResponse()
*
* This is available when android.hardware.telephony.cdma is defined.
+ *
+ * @deprecated Legacy CDMA is unsupported.
*/
void acknowledgeLastIncomingCdmaSms(in int serial, in CdmaSmsAck smsAck);
@@ -94,6 +96,8 @@
* Response function is IRadioMessagingResponse.deleteSmsOnRuimResponse()
*
* This is available when android.hardware.telephony.cdma is defined.
+ *
+ * @deprecated Legacy CDMA is unsupported.
*/
void deleteSmsOnRuim(in int serial, in int index);
@@ -117,6 +121,8 @@
* Response function is IRadioMessagingResponse.getCdmaBroadcastConfigResponse()
*
* This is available when android.hardware.telephony.cdma is defined.
+ *
+ * @deprecated Legacy CDMA is unsupported.
*/
void getCdmaBroadcastConfig(in int serial);
@@ -173,6 +179,8 @@
* Response function is IRadioMessagingResponse.sendCdmaSmsResponse()
*
* This is available when android.hardware.telephony.cdma is defined.
+ *
+ * @deprecated Legacy CDMA is unsupported.
*/
void sendCdmaSms(in int serial, in CdmaSmsMessage sms);
@@ -186,6 +194,8 @@
* Response function is IRadioMessagingResponse.sendCdmaSmsExpectMoreResponse()
*
* This is available when android.hardware.telephony.cdma is defined.
+ *
+ * @deprecated Legacy CDMA is unsupported.
*/
void sendCdmaSmsExpectMore(in int serial, in CdmaSmsMessage sms);
@@ -243,6 +253,8 @@
* Response function is IRadioMessagingResponse.setCdmaBroadcastActivationResponse()
*
* This is available when android.hardware.telephony.cdma is defined.
+ *
+ * @deprecated Legacy CDMA is unsupported.
*/
void setCdmaBroadcastActivation(in int serial, in boolean activate);
@@ -255,6 +267,8 @@
* Response function is IRadioMessagingResponse.setCdmaBroadcastConfigResponse()
*
* This is available when android.hardware.telephony.cdma is defined.
+ *
+ * @deprecated Legacy CDMA is unsupported.
*/
void setCdmaBroadcastConfig(in int serial, in CdmaBroadcastSmsConfigInfo[] configInfo);
@@ -315,6 +329,8 @@
* Response function is IRadioMessagingResponse.writeSmsToRuimResponse()
*
* This is available when android.hardware.telephony.cdma is defined.
+ *
+ * @deprecated Legacy CDMA is unsupported.
*/
void writeSmsToRuim(in int serial, in CdmaSmsWriteArgs cdmaSms);
diff --git a/radio/aidl/android/hardware/radio/messaging/IRadioMessagingIndication.aidl b/radio/aidl/android/hardware/radio/messaging/IRadioMessagingIndication.aidl
index a177c2c..4c6529b 100644
--- a/radio/aidl/android/hardware/radio/messaging/IRadioMessagingIndication.aidl
+++ b/radio/aidl/android/hardware/radio/messaging/IRadioMessagingIndication.aidl
@@ -32,6 +32,7 @@
*
* @param type Type of radio indication
* @param msg Cdma Sms Message
+ * @deprecated Legacy CDMA is unsupported.
*/
void cdmaNewSms(in RadioIndicationType type, in CdmaSmsMessage msg);
@@ -40,6 +41,7 @@
* space is freed.
*
* @param type Type of radio indication
+ * @deprecated Legacy CDMA is unsupported.
*/
void cdmaRuimSmsStorageFull(in RadioIndicationType type);
diff --git a/radio/aidl/android/hardware/radio/messaging/IRadioMessagingResponse.aidl b/radio/aidl/android/hardware/radio/messaging/IRadioMessagingResponse.aidl
index f0d7999..9b6e461 100644
--- a/radio/aidl/android/hardware/radio/messaging/IRadioMessagingResponse.aidl
+++ b/radio/aidl/android/hardware/radio/messaging/IRadioMessagingResponse.aidl
@@ -62,6 +62,7 @@
* RadioError:OPERATION_NOT_ALLOWED
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
+ * @deprecated Legacy CDMA is unsupported.
*/
void acknowledgeLastIncomingCdmaSmsResponse(in RadioResponseInfo info);
@@ -108,6 +109,7 @@
* RadioError:INVALID_MODEM_STATE
* RadioError:OPERATION_NOT_ALLOWED
* RadioError:SIM_ABSENT
+ * @deprecated Legacy CDMA is unsupported.
*/
void deleteSmsOnRuimResponse(in RadioResponseInfo info);
@@ -153,6 +155,7 @@
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
* RadioError:INVALID_MODEM_STATE
+ * @deprecated Legacy CDMA is unsupported.
*/
void getCdmaBroadcastConfigResponse(
in RadioResponseInfo info, in CdmaBroadcastSmsConfigInfo[] configs);
@@ -257,6 +260,7 @@
* RadioError:SIMULTANEOUS_SMS_AND_CALL_NOT_ALLOWED
* RadioError:ACCESS_BARRED
* RadioError:BLOCKED_DUE_TO_CALL
+ * @deprecated Legacy CDMA is unsupported.
*/
void sendCdmaSmsExpectMoreResponse(in RadioResponseInfo info, in SendSmsResult sms);
@@ -291,6 +295,7 @@
* RadioError:SIMULTANEOUS_SMS_AND_CALL_NOT_ALLOWED
* RadioError:ACCESS_BARRED
* RadioError:BLOCKED_DUE_TO_CALL
+ * @deprecated Legacy CDMA is unsupported.
*/
void sendCdmaSmsResponse(in RadioResponseInfo info, in SendSmsResult sms);
@@ -407,6 +412,7 @@
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
* RadioError:INVALID_MODEM_STATE
+ * @deprecated Legacy CDMA is unsupported.
*/
void setCdmaBroadcastActivationResponse(in RadioResponseInfo info);
@@ -427,6 +433,7 @@
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
* RadioError:INVALID_MODEM_STATE
+ * @deprecated Legacy CDMA is unsupported.
*/
void setCdmaBroadcastConfigResponse(in RadioResponseInfo info);
@@ -520,6 +527,7 @@
* RadioError:CANCELLED
* RadioError:INVALID_MODEM_STATE
* RadioError:SIM_ABSENT
+ * @deprecated Legacy CDMA is unsupported.
*/
void writeSmsToRuimResponse(in RadioResponseInfo info, in int index);
diff --git a/radio/aidl/android/hardware/radio/messaging/ImsSmsMessage.aidl b/radio/aidl/android/hardware/radio/messaging/ImsSmsMessage.aidl
index 5f9f82b..3efa523 100644
--- a/radio/aidl/android/hardware/radio/messaging/ImsSmsMessage.aidl
+++ b/radio/aidl/android/hardware/radio/messaging/ImsSmsMessage.aidl
@@ -37,6 +37,7 @@
/**
* Valid field if tech is 3GPP2 and size = 1 else must be empty. Only one of cdmaMessage and
* gsmMessage must be of size 1 based on the RadioTechnologyFamily and the other must be size 0.
+ * @deprecated Legacy CDMA is unsupported.
*/
CdmaSmsMessage[] cdmaMessage;
/**
diff --git a/radio/aidl/android/hardware/radio/messaging/SendSmsResult.aidl b/radio/aidl/android/hardware/radio/messaging/SendSmsResult.aidl
index ea93727..da41d84 100644
--- a/radio/aidl/android/hardware/radio/messaging/SendSmsResult.aidl
+++ b/radio/aidl/android/hardware/radio/messaging/SendSmsResult.aidl
@@ -23,15 +23,18 @@
/**
* TP-Message-Reference for GSM, and BearerData MessageId for CDMA.
* See 3GPP2 C.S0015-B, v2.0, table 4.5-1
+ * @deprecated Legacy CDMA is unsupported.
*/
int messageRef;
/**
* Ack PDU or empty string if n/a
+ * @deprecated Legacy CDMA is unsupported.
*/
String ackPDU;
/**
* See 3GPP 27.005, 3.2.5 for GSM/UMTS, 3GPP2 N.S0005 (IS-41C) Table 171 for CDMA.
* -1 if unknown or not applicable.
+ * @deprecated Legacy CDMA is unsupported.
*/
int errorCode;
}
diff --git a/radio/aidl/android/hardware/radio/modem/ActivityStatsTechSpecificInfo.aidl b/radio/aidl/android/hardware/radio/modem/ActivityStatsTechSpecificInfo.aidl
index 7ca4021..6ad47fc 100644
--- a/radio/aidl/android/hardware/radio/modem/ActivityStatsTechSpecificInfo.aidl
+++ b/radio/aidl/android/hardware/radio/modem/ActivityStatsTechSpecificInfo.aidl
@@ -36,7 +36,7 @@
* Radio access technology. Set UNKNOWN if the Activity statistics
* is RAT independent.
*/
- AccessNetwork rat;
+ AccessNetwork rat = AccessNetwork.UNKNOWN;
/**
* Frequency range. Values are FREQUENCY_RANGE_
* Set FREQUENCY_RANGE_UNKNOWN if the Activity statistics when frequency range
diff --git a/radio/aidl/android/hardware/radio/modem/DeviceStateType.aidl b/radio/aidl/android/hardware/radio/modem/DeviceStateType.aidl
index c1f4cd6..86df920 100644
--- a/radio/aidl/android/hardware/radio/modem/DeviceStateType.aidl
+++ b/radio/aidl/android/hardware/radio/modem/DeviceStateType.aidl
@@ -20,6 +20,7 @@
@VintfStability
@Backing(type="int")
@JavaDerive(toString=true)
+@SuppressWarnings(value={"redundant-name"})
enum DeviceStateType {
/**
* Device power save mode (provided by PowerManager). True indicates the device is in
diff --git a/radio/aidl/android/hardware/radio/modem/HardwareConfigModem.aidl b/radio/aidl/android/hardware/radio/modem/HardwareConfigModem.aidl
index 1ba3562..4818c9e 100644
--- a/radio/aidl/android/hardware/radio/modem/HardwareConfigModem.aidl
+++ b/radio/aidl/android/hardware/radio/modem/HardwareConfigModem.aidl
@@ -34,7 +34,7 @@
/**
* Bitset value, based on RadioTechnology.
*/
- RadioTechnology rat;
+ RadioTechnology rat = RadioTechnology.UNKNOWN;
/**
* Maximum number of concurrent active voice calls.
*/
diff --git a/radio/aidl/android/hardware/radio/modem/IRadioModem.aidl b/radio/aidl/android/hardware/radio/modem/IRadioModem.aidl
index bfca5a9..491657c 100644
--- a/radio/aidl/android/hardware/radio/modem/IRadioModem.aidl
+++ b/radio/aidl/android/hardware/radio/modem/IRadioModem.aidl
@@ -139,15 +139,14 @@
void nvReadItem(in int serial, in NvItem itemId);
/**
- * Reset the radio NV configuration to the factory state.
- * This is used for device configuration by some CDMA operators.
+ * Reset the radio NV configuration.
+ *
+ * This is also used to reboot the modem with ResetNvType.RELOAD.
*
* @param serial Serial number of request.
- * @param resetType ResetNvType
+ * @param resetType Type of reset operation
*
* Response function is IRadioModemResponse.nvResetConfigResponse()
- *
- * Note: This will be deprecated in favor of a rebootModem API in Android U.
*/
void nvResetConfig(in int serial, in ResetNvType resetType);
diff --git a/radio/aidl/android/hardware/radio/modem/IRadioModemResponse.aidl b/radio/aidl/android/hardware/radio/modem/IRadioModemResponse.aidl
index 6d2504c..498f228 100644
--- a/radio/aidl/android/hardware/radio/modem/IRadioModemResponse.aidl
+++ b/radio/aidl/android/hardware/radio/modem/IRadioModemResponse.aidl
@@ -175,8 +175,6 @@
* Valid errors returned:
* RadioError:NONE
* RadioError:RADIO_NOT_AVAILABLE
- *
- * Note: This will be deprecated in favor of a rebootModemResponse API in Android U.
*/
void nvResetConfigResponse(in RadioResponseInfo info);
diff --git a/radio/aidl/android/hardware/radio/modem/ImeiInfo.aidl b/radio/aidl/android/hardware/radio/modem/ImeiInfo.aidl
index 6d33505..82fade5 100644
--- a/radio/aidl/android/hardware/radio/modem/ImeiInfo.aidl
+++ b/radio/aidl/android/hardware/radio/modem/ImeiInfo.aidl
@@ -29,6 +29,8 @@
* ImeiType enum is used identify the IMEI as primary or secondary as mentioned in GSMA TS.37
*/
enum ImeiType {
+ /** Must not be used. */
+ INVALID = 0,
/**
* This is the primary IMEI of the device as mentioned in the GSMA TS.37. In a multi-SIM
* device the modem must set one IMEI with this type as mentioned in GSMA TS37_2.2_REQ_8.
@@ -40,7 +42,7 @@
}
/** Primary or secondary IMEI as mentioned in GSMA spec TS.37 */
- ImeiType type;
+ ImeiType type = ImeiType.INVALID;
/**
* IMEI value, see 3gpp spec 23.003 section 6. Note: This primary IMEI mapping must be
* permanent throughout the lifetime of the device irrespective of the factory data reset,
diff --git a/radio/aidl/android/hardware/radio/modem/NvItem.aidl b/radio/aidl/android/hardware/radio/modem/NvItem.aidl
index b405137..d646ff7 100644
--- a/radio/aidl/android/hardware/radio/modem/NvItem.aidl
+++ b/radio/aidl/android/hardware/radio/modem/NvItem.aidl
@@ -17,7 +17,6 @@
package android.hardware.radio.modem;
/**
- * @deprecated NV APIs are deprecated starting from Android U.
* @hide
*/
@VintfStability
@@ -25,172 +24,217 @@
@JavaDerive(toString=true)
enum NvItem {
/**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
+ INVALID = 0,
+ /**
* CDMA radio and account information (items 1-10)
* CDMA MEID (hex)
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
CDMA_MEID = 1,
/**
* CDMA MIN (MSID)
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
CDMA_MIN = 2,
/**
* CDMA MDN
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
CDMA_MDN = 3,
/**
* CDMA access overload control
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
CDMA_ACCOLC = 4,
/**
* Carrier device provisioning (items 11-30)
* Device MSL
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
DEVICE_MSL = 11,
/**
* RTN reconditioned status
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
RTN_RECONDITIONED_STATUS = 12,
/**
* RTN activation date
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
RTN_ACTIVATION_DATE = 13,
/**
* RTN life timer
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
RTN_LIFE_TIMER = 14,
/**
* RTN life calls
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
RTN_LIFE_CALLS = 15,
/**
* RTN life data TX
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
RTN_LIFE_DATA_TX = 16,
/**
* RTN life data RX
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
RTN_LIFE_DATA_RX = 17,
/**
* HFA in progress
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
OMADM_HFA_LEVEL = 18,
/**
* Mobile IP profile information (items 31-50)
* NAI realm
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
MIP_PROFILE_NAI = 31,
/**
* MIP home address
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
MIP_PROFILE_HOME_ADDRESS = 32,
/**
* AAA auth
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
MIP_PROFILE_AAA_AUTH = 33,
/**
* HA auth
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
MIP_PROFILE_HA_AUTH = 34,
/**
* Primary HA address
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
MIP_PROFILE_PRI_HA_ADDR = 35,
/**
* Secondary HA address
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
MIP_PROFILE_SEC_HA_ADDR = 36,
/**
* Reverse TUN preference
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
MIP_PROFILE_REV_TUN_PREF = 37,
/**
* HA SPI
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
MIP_PROFILE_HA_SPI = 38,
/**
* AAA SPI
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
MIP_PROFILE_AAA_SPI = 39,
/**
* HA shared secret
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
MIP_PROFILE_MN_HA_SS = 40,
/**
* AAA shared secret
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
MIP_PROFILE_MN_AAA_SS = 41,
/**
* CDMA network and band config (items 51-70)
* CDMA PRL version
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
CDMA_PRL_VERSION = 51,
/**
* CDMA band class 10
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
CDMA_BC10 = 52,
/**
* CDMA band class 14
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
CDMA_BC14 = 53,
/**
* CDMA SO68
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
CDMA_SO68 = 54,
/**
* CDMA SO73 COP0
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
CDMA_SO73_COP0 = 55,
/**
* CDMA SO73 COP1-7
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
CDMA_SO73_COP1TO7 = 56,
/**
* CDMA 1X Advanced enabled
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
CDMA_1X_ADVANCED_ENABLED = 57,
/**
* CDMA eHRPD enabled
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
CDMA_EHRPD_ENABLED = 58,
/**
* CDMA eHRPD forced
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
CDMA_EHRPD_FORCED = 59,
/**
* LTE network and band config (items 71-90)
* LTE band 25 enabled
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
LTE_BAND_ENABLE_25 = 71,
/**
* LTE band 26 enabled
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
LTE_BAND_ENABLE_26 = 72,
/**
* LTE band 41 enabled
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
LTE_BAND_ENABLE_41 = 73,
/**
* LTE band 25 scan priority
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
LTE_SCAN_PRIORITY_25 = 74,
/**
* LTE band 26 scan priority
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
LTE_SCAN_PRIORITY_26 = 75,
/**
* LTE band 41 scan priority
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
LTE_SCAN_PRIORITY_41 = 76,
/**
* LTE hidden band 25 priority
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
LTE_HIDDEN_BAND_PRIORITY_25 = 77,
/**
* LTE hidden band 26 priority
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
LTE_HIDDEN_BAND_PRIORITY_26 = 78,
/**
* LTE hidden band 41 priority
+ * @deprecated NV APIs are deprecated starting from Android U.
*/
LTE_HIDDEN_BAND_PRIORITY_41 = 79,
}
diff --git a/radio/aidl/android/hardware/radio/modem/NvWriteItem.aidl b/radio/aidl/android/hardware/radio/modem/NvWriteItem.aidl
index c57253b..482126a 100644
--- a/radio/aidl/android/hardware/radio/modem/NvWriteItem.aidl
+++ b/radio/aidl/android/hardware/radio/modem/NvWriteItem.aidl
@@ -19,12 +19,17 @@
import android.hardware.radio.modem.NvItem;
/**
- * @deprecated NV APIs are deprecated starting from Android U.
* @hide
*/
@VintfStability
@JavaDerive(toString=true)
parcelable NvWriteItem {
- NvItem itemId;
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
+ NvItem itemId = NvItem.INVALID;
+ /**
+ * @deprecated NV APIs are deprecated starting from Android U.
+ */
String value;
}
diff --git a/radio/aidl/android/hardware/radio/modem/ResetNvType.aidl b/radio/aidl/android/hardware/radio/modem/ResetNvType.aidl
index e290a52..71736d8 100644
--- a/radio/aidl/android/hardware/radio/modem/ResetNvType.aidl
+++ b/radio/aidl/android/hardware/radio/modem/ResetNvType.aidl
@@ -17,15 +17,15 @@
package android.hardware.radio.modem;
/**
- * Note: This will be deprecated along with nvResetConfig in Android U.
* @hide
*/
@VintfStability
@Backing(type="int")
@JavaDerive(toString=true)
+@SuppressWarnings(value={"redundant-name"})
enum ResetNvType {
/**
- * Reload all NV items
+ * Reload all NV items. This may reboot modem.
*/
RELOAD,
/**
diff --git a/radio/aidl/android/hardware/radio/network/AccessTechnologySpecificInfo.aidl b/radio/aidl/android/hardware/radio/network/AccessTechnologySpecificInfo.aidl
index 9c48a8d..10421d6 100644
--- a/radio/aidl/android/hardware/radio/network/AccessTechnologySpecificInfo.aidl
+++ b/radio/aidl/android/hardware/radio/network/AccessTechnologySpecificInfo.aidl
@@ -25,6 +25,7 @@
@JavaDerive(toString=true)
union AccessTechnologySpecificInfo {
boolean noinit;
+ /** @deprecated Legacy CDMA is unsupported. */
Cdma2000RegistrationInfo cdmaInfo;
EutranRegistrationInfo eutranInfo;
/**
diff --git a/radio/aidl/android/hardware/radio/network/Cdma2000RegistrationInfo.aidl b/radio/aidl/android/hardware/radio/network/Cdma2000RegistrationInfo.aidl
index 91b8500..333a6c4 100644
--- a/radio/aidl/android/hardware/radio/network/Cdma2000RegistrationInfo.aidl
+++ b/radio/aidl/android/hardware/radio/network/Cdma2000RegistrationInfo.aidl
@@ -20,29 +20,36 @@
@VintfStability
@JavaDerive(toString=true)
parcelable Cdma2000RegistrationInfo {
+ /** @deprecated Legacy CDMA is unsupported. */
const int PRL_INDICATOR_NOT_REGISTERED = -1;
+ /** @deprecated Legacy CDMA is unsupported. */
const int PRL_INDICATOR_NOT_IN_PRL = 0;
+ /** @deprecated Legacy CDMA is unsupported. */
const int PRL_INDICATOR_IN_PRL = 1;
/**
* Concurrent services support indicator. if registered on a CDMA system.
* false - Concurrent services not supported,
* true - Concurrent services supported
+ * @deprecated Legacy CDMA is unsupported.
*/
boolean cssSupported;
/**
* TSB-58 Roaming Indicator if registered on a CDMA or EVDO system or -1 if not.
* Valid values are 0-255.
+ * @deprecated Legacy CDMA is unsupported.
*/
int roamingIndicator;
/**
* Indicates whether the current system is in the PRL if registered on a CDMA or EVDO system
* or -1 if not. 0=not in the PRL, 1=in the PRL.
* Values are PRL_INDICATOR_
+ * @deprecated Legacy CDMA is unsupported.
*/
int systemIsInPrl;
/**
* Default Roaming Indicator from the PRL if registered on a CDMA or EVDO system or -1 if not.
* Valid values are 0-255.
+ * @deprecated Legacy CDMA is unsupported.
*/
int defaultRoamingIndicator;
}
diff --git a/radio/aidl/android/hardware/radio/network/CdmaRoamingType.aidl b/radio/aidl/android/hardware/radio/network/CdmaRoamingType.aidl
index 0bb7c04..4cad136 100644
--- a/radio/aidl/android/hardware/radio/network/CdmaRoamingType.aidl
+++ b/radio/aidl/android/hardware/radio/network/CdmaRoamingType.aidl
@@ -21,7 +21,10 @@
@Backing(type="int")
@JavaDerive(toString=true)
enum CdmaRoamingType {
+ /** @deprecated Legacy CDMA is unsupported. */
HOME_NETWORK,
+ /** @deprecated Legacy CDMA is unsupported. */
AFFILIATED_ROAM,
+ /** @deprecated Legacy CDMA is unsupported. */
ANY_ROAM,
}
diff --git a/radio/aidl/android/hardware/radio/network/CdmaSignalStrength.aidl b/radio/aidl/android/hardware/radio/network/CdmaSignalStrength.aidl
index ae7aa93..214a512 100644
--- a/radio/aidl/android/hardware/radio/network/CdmaSignalStrength.aidl
+++ b/radio/aidl/android/hardware/radio/network/CdmaSignalStrength.aidl
@@ -22,12 +22,14 @@
parcelable CdmaSignalStrength {
/**
* This value is the actual RSSI value multiplied by -1. Example: If the actual RSSI is -75,
- * then this response value will be 75. INT_MAX means invalid/unreported.
+ * then this response value will be 75. RadioConst:VALUE_UNAVAILABLE means invalid/unreported.
+ * @deprecated Legacy CDMA is unsupported.
*/
int dbm;
/**
* This value is the actual Ec/Io multiplied by -10. Example: If the actual Ec/Io is -12.5 dB,
- * then this response value will be 125. INT_MAX means invalid/unreported.
+ * then this response value will be 125. RadioConst:VALUE_UNAVAILABLE means invalid/unreported.
+ * @deprecated Legacy CDMA is unsupported.
*/
int ecio;
}
diff --git a/radio/aidl/android/hardware/radio/network/CellIdentity.aidl b/radio/aidl/android/hardware/radio/network/CellIdentity.aidl
index 6142087..76a6675 100644
--- a/radio/aidl/android/hardware/radio/network/CellIdentity.aidl
+++ b/radio/aidl/android/hardware/radio/network/CellIdentity.aidl
@@ -34,6 +34,7 @@
CellIdentityGsm gsm;
CellIdentityWcdma wcdma;
CellIdentityTdscdma tdscdma;
+ /** @deprecated Legacy CDMA is unsupported. */
CellIdentityCdma cdma;
CellIdentityLte lte;
CellIdentityNr nr;
diff --git a/radio/aidl/android/hardware/radio/network/CellIdentityCdma.aidl b/radio/aidl/android/hardware/radio/network/CellIdentityCdma.aidl
index b93988f..7f33d2d 100644
--- a/radio/aidl/android/hardware/radio/network/CellIdentityCdma.aidl
+++ b/radio/aidl/android/hardware/radio/network/CellIdentityCdma.aidl
@@ -23,31 +23,37 @@
@JavaDerive(toString=true)
parcelable CellIdentityCdma {
/**
- * Network Id 0..65535, INT_MAX if unknown
+ * Network Id 0..65535, RadioConst:VALUE_UNAVAILABLE if unknown
+ * @deprecated Legacy CDMA is unsupported.
*/
int networkId;
/**
- * CDMA System Id 0..32767, INT_MAX if unknown
+ * CDMA System Id 0..32767, RadioConst:VALUE_UNAVAILABLE if unknown
+ * @deprecated Legacy CDMA is unsupported.
*/
int systemId;
/**
- * Base Station Id 0..65535, INT_MAX if unknown
+ * Base Station Id 0..65535, RadioConst:VALUE_UNAVAILABLE if unknown
+ * @deprecated Legacy CDMA is unsupported.
*/
int baseStationId;
/**
* Longitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0. It is represented in
* units of 0.25 seconds and ranges from -2592000 to 2592000, both values inclusive
- * (corresponding to a range of -180 to +180 degrees). INT_MAX if unknown
+ * (corresponding to a range of -180 to +180 degrees). RadioConst:VALUE_UNAVAILABLE if unknown
+ * @deprecated Legacy CDMA is unsupported.
*/
int longitude;
/**
* Latitude is a decimal number as specified in 3GPP2 C.S0005-A v6.0. It is represented in
* units of 0.25 seconds and ranges from -1296000 to 1296000, both values inclusive
- * (corresponding to a range of -90 to +90 degrees). INT_MAX if unknown
+ * (corresponding to a range of -90 to +90 degrees). RadioConst:VALUE_UNAVAILABLE if unknown
+ * @deprecated Legacy CDMA is unsupported.
*/
int latitude;
/**
* OperatorInfo containing alphaLong and alphaShort
+ * @deprecated Legacy CDMA is unsupported.
*/
OperatorInfo operatorNames;
}
diff --git a/radio/aidl/android/hardware/radio/network/CellIdentityGsm.aidl b/radio/aidl/android/hardware/radio/network/CellIdentityGsm.aidl
index bc02adc..fe39a0e 100644
--- a/radio/aidl/android/hardware/radio/network/CellIdentityGsm.aidl
+++ b/radio/aidl/android/hardware/radio/network/CellIdentityGsm.aidl
@@ -31,11 +31,12 @@
*/
String mnc;
/**
- * 16-bit Location Area Code, 0..65535, INT_MAX if unknown
+ * 16-bit Location Area Code, 0..65535, RadioConst:VALUE_UNAVAILABLE if unknown
*/
int lac;
/**
- * 16-bit GSM Cell Identity described in TS 27.007, 0..65535, INT_MAX if unknown
+ * 16-bit GSM Cell Identity described in TS 27.007, 0..65535,
+ * RadioConst:VALUE_UNAVAILABLE if unknown
*/
int cid;
/**
@@ -43,7 +44,7 @@
*/
int arfcn;
/**
- * 6-bit Base Station Identity Code, 0xFF if unknown
+ * 6-bit Base Station Identity Code, RadioConst:VALUE_UNAVAILABLE_BYTE if unknown
*/
byte bsic;
/**
diff --git a/radio/aidl/android/hardware/radio/network/CellIdentityLte.aidl b/radio/aidl/android/hardware/radio/network/CellIdentityLte.aidl
index 6912e02..9c4fc3c 100644
--- a/radio/aidl/android/hardware/radio/network/CellIdentityLte.aidl
+++ b/radio/aidl/android/hardware/radio/network/CellIdentityLte.aidl
@@ -33,7 +33,7 @@
*/
String mnc;
/**
- * 28-bit Cell Identity described in TS 27.007, INT_MAX if unknown
+ * 28-bit Cell Identity described in TS 27.007, RadioConst:VALUE_UNAVAILABLE if unknown
*/
int ci;
/**
@@ -41,7 +41,7 @@
*/
int pci;
/**
- * 16-bit tracking area code, INT_MAX if unknown
+ * 16-bit tracking area code, RadioConst:VALUE_UNAVAILABLE if unknown
*/
int tac;
/**
diff --git a/radio/aidl/android/hardware/radio/network/CellIdentityNr.aidl b/radio/aidl/android/hardware/radio/network/CellIdentityNr.aidl
index 4192845..7ebc0cd 100644
--- a/radio/aidl/android/hardware/radio/network/CellIdentityNr.aidl
+++ b/radio/aidl/android/hardware/radio/network/CellIdentityNr.aidl
@@ -29,12 +29,12 @@
parcelable CellIdentityNr {
/**
* 3-digit Mobile Country Code, in range[0, 999]; This value must be valid for registered or
- * camped cells; INT_MAX means invalid/unreported.
+ * camped cells; Empty string means invalid/unreported.
*/
String mcc;
/**
* 2 or 3-digit Mobile Network Code, in range [0, 999], This value must be valid for
- * registered or camped cells; INT_MAX means invalid/unreported.
+ * registered or camped cells; Empty string means invalid/unreported.
*/
String mnc;
/**
@@ -48,7 +48,7 @@
*/
int pci;
/**
- * 16-bit tracking area code, INT_MAX means invalid/unreported.
+ * 16-bit tracking area code, RadioConst:VALUE_UNAVAILABLE means invalid/unreported.
*/
int tac;
/**
diff --git a/radio/aidl/android/hardware/radio/network/CellIdentityTdscdma.aidl b/radio/aidl/android/hardware/radio/network/CellIdentityTdscdma.aidl
index 33ffc6f..8373493 100644
--- a/radio/aidl/android/hardware/radio/network/CellIdentityTdscdma.aidl
+++ b/radio/aidl/android/hardware/radio/network/CellIdentityTdscdma.aidl
@@ -32,15 +32,17 @@
*/
String mnc;
/**
- * 16-bit Location Area Code, 0..65535, INT_MAX if unknown.
+ * 16-bit Location Area Code, 0..65535, RadioConst:VALUE_UNAVAILABLE if unknown.
*/
int lac;
/**
- * 28-bit UMTS Cell Identity described in TS 25.331, 0..268435455, INT_MAX if unknown.
+ * 28-bit UMTS Cell Identity described in TS 25.331, 0..268435455, RadioConst:VALUE_UNAVAILABLE
+ * if unknown.
*/
int cid;
/**
- * 8-bit Cell Parameters ID described in TS 25.331, 0..127, INT_MAX if unknown.
+ * 8-bit Cell Parameters ID described in TS 25.331, 0..127, RadioConst:VALUE_UNAVAILABLE if
+ * unknown.
*/
int cpid;
/**
diff --git a/radio/aidl/android/hardware/radio/network/CellIdentityWcdma.aidl b/radio/aidl/android/hardware/radio/network/CellIdentityWcdma.aidl
index b6e328a..ab703f1 100644
--- a/radio/aidl/android/hardware/radio/network/CellIdentityWcdma.aidl
+++ b/radio/aidl/android/hardware/radio/network/CellIdentityWcdma.aidl
@@ -32,11 +32,12 @@
*/
String mnc;
/**
- * 16-bit Location Area Code, 0..65535, INT_MAX if unknown.
+ * 16-bit Location Area Code, 0..65535, RadioConst:VALUE_UNAVAILABLE if unknown.
*/
int lac;
/**
- * 28-bit UMTS Cell Identity described in TS 25.331, 0..268435455, INT_MAX if unknown.
+ * 28-bit UMTS Cell Identity described in TS 25.331, 0..268435455, RadioConst:VALUE_UNAVAILABLE
+ * if unknown.
*/
int cid;
/**
diff --git a/radio/aidl/android/hardware/radio/network/CellInfoCdma.aidl b/radio/aidl/android/hardware/radio/network/CellInfoCdma.aidl
index 0a2bc54..0a0c0c0 100644
--- a/radio/aidl/android/hardware/radio/network/CellInfoCdma.aidl
+++ b/radio/aidl/android/hardware/radio/network/CellInfoCdma.aidl
@@ -24,7 +24,10 @@
@VintfStability
@JavaDerive(toString=true)
parcelable CellInfoCdma {
+ /** @deprecated Legacy CDMA is unsupported. */
CellIdentityCdma cellIdentityCdma;
+ /** @deprecated Legacy CDMA is unsupported. */
CdmaSignalStrength signalStrengthCdma;
+ /** @deprecated Legacy CDMA is unsupported. */
EvdoSignalStrength signalStrengthEvdo;
}
diff --git a/radio/aidl/android/hardware/radio/network/CellInfoRatSpecificInfo.aidl b/radio/aidl/android/hardware/radio/network/CellInfoRatSpecificInfo.aidl
index 10a4a5f..eebed9e 100644
--- a/radio/aidl/android/hardware/radio/network/CellInfoRatSpecificInfo.aidl
+++ b/radio/aidl/android/hardware/radio/network/CellInfoRatSpecificInfo.aidl
@@ -37,6 +37,7 @@
CellInfoNr nr;
/**
* 3gpp2 CellInfo types;
+ * @deprecated Legacy CDMA is unsupported.
*/
CellInfoCdma cdma;
}
diff --git a/radio/aidl/android/hardware/radio/network/EvdoSignalStrength.aidl b/radio/aidl/android/hardware/radio/network/EvdoSignalStrength.aidl
index fc7cc1b..e89eb88 100644
--- a/radio/aidl/android/hardware/radio/network/EvdoSignalStrength.aidl
+++ b/radio/aidl/android/hardware/radio/network/EvdoSignalStrength.aidl
@@ -22,17 +22,20 @@
parcelable EvdoSignalStrength {
/**
* This value is the actual RSSI value multiplied by -1. Example: If the actual RSSI is -75,
- * then this response value will be 75; INT_MAX means invalid/unreported.
+ * then this response value will be 75; RadioConst:VALUE_UNAVAILABLE means invalid/unreported.
+ * @deprecated Legacy CDMA is unsupported.
*/
int dbm;
/**
* This value is the actual Ec/Io multiplied by -10. Example: If the actual Ec/Io is -12.5 dB,
- * then this response value will be 125; INT_MAX means invalid/unreported.
+ * then this response value will be 125; RadioConst:VALUE_UNAVAILABLE means invalid/unreported.
+ * @deprecated Legacy CDMA is unsupported.
*/
int ecio;
/**
- * Valid values are 0-8. 8 is the highest signal to noise ratio; INT_MAX means
- * invalid/unreported.
+ * Valid values are 0-8. 8 is the highest signal to noise ratio; RadioConst:VALUE_UNAVAILABLE
+ * means invalid/unreported.
+ * @deprecated Legacy CDMA is unsupported.
*/
int signalNoiseRatio;
}
diff --git a/radio/aidl/android/hardware/radio/network/GsmSignalStrength.aidl b/radio/aidl/android/hardware/radio/network/GsmSignalStrength.aidl
index d569cf7..4a99646 100644
--- a/radio/aidl/android/hardware/radio/network/GsmSignalStrength.aidl
+++ b/radio/aidl/android/hardware/radio/network/GsmSignalStrength.aidl
@@ -21,15 +21,18 @@
@JavaDerive(toString=true)
parcelable GsmSignalStrength {
/**
- * Valid values are (0-61, 99) as defined in TS 27.007 8.69; INT_MAX means invalid/unreported.
+ * Valid values are (0-61, 99) as defined in TS 27.007 8.69; RadioConst:VALUE_UNAVAILABLE means
+ * invalid/unreported.
*/
int signalStrength;
/**
- * Bit error rate (0-7, 99) as defined in TS 27.007 8.5; INT_MAX means invalid/unreported.
+ * Bit error rate (0-7, 99) as defined in TS 27.007 8.5; RadioConst:VALUE_UNAVAILABLE means
+ * invalid/unreported.
*/
int bitErrorRate;
/**
- * Timing advance in bit periods. 1 bit period = 48/13 us. INT_MAX means invalid/unreported.
+ * Timing advance in bit periods. 1 bit period = 48/13 us. RadioConst:VALUE_UNAVAILABLE means
+ * invalid/unreported.
*/
int timingAdvance;
}
diff --git a/radio/aidl/android/hardware/radio/network/IRadioNetwork.aidl b/radio/aidl/android/hardware/radio/network/IRadioNetwork.aidl
index 5f26195..631901e 100644
--- a/radio/aidl/android/hardware/radio/network/IRadioNetwork.aidl
+++ b/radio/aidl/android/hardware/radio/network/IRadioNetwork.aidl
@@ -94,6 +94,8 @@
* Response function is IRadioNetworkResponse.getCdmaRoamingPreferenceResponse()
*
* This is available when android.hardware.telephony.cdma is defined.
+ *
+ * @deprecated Legacy CDMA is unsupported.
*/
void getCdmaRoamingPreference(in int serial);
@@ -272,13 +274,15 @@
* Response function is IRadioNetworkResponse.setCdmaRoamingPreferenceResponse()
*
* This is available when android.hardware.telephony.cdma is defined.
+ *
+ * @deprecated Legacy CDMA is unsupported.
*/
void setCdmaRoamingPreference(in int serial, in CdmaRoamingType type);
/**
* Sets the minimum time between when unsolicited cellInfoList() must be invoked.
* A value of 0, means invoke cellInfoList() when any of the reported information changes.
- * Setting the value to INT_MAX(0x7fffffff) means never issue a unsolicited cellInfoList().
+ * Value of RadioConst:VALUE_UNAVAILABLE means never issue a unsolicited cellInfoList().
*
* @param serial Serial number of request.
* @param rate minimum time in milliseconds to indicate time between unsolicited cellInfoList()
@@ -334,7 +338,7 @@
/**
* Enables/disables network state change notifications due to changes in LAC and/or CID (for
- * GSM) or BID/SID/NID/latitude/longitude (for CDMA). Basically +CREG=2 vs. +CREG=1 (TS 27.007).
+ * GSM). Basically +CREG=2 vs. +CREG=1 (TS 27.007).
* The Radio implementation must default to "updates enabled" when the screen is on and
* "updates disabled" when the screen is off.
*
diff --git a/radio/aidl/android/hardware/radio/network/IRadioNetworkIndication.aidl b/radio/aidl/android/hardware/radio/network/IRadioNetworkIndication.aidl
index da82b78..f752f68 100644
--- a/radio/aidl/android/hardware/radio/network/IRadioNetworkIndication.aidl
+++ b/radio/aidl/android/hardware/radio/network/IRadioNetworkIndication.aidl
@@ -63,6 +63,7 @@
*
* @param type Type of radio indication
* @param version PRL version after PRL changes
+ * @deprecated Legacy CDMA is unsupported.
*/
void cdmaPrlChanged(in RadioIndicationType type, in int version);
@@ -221,6 +222,12 @@
* - If a device uses a 2G network to send a AUTHENTICATION_AND_CIPHERING_RESPONSE message on
* the NAS and the message includes an IMEISV.
*
+ * cellularIdentifierDisclosure indications must be sent to Android regardless of the screen
+ * state. If the screen is off, the indications must still be sent to Android.
+ *
+ * Note: in the NRSA scenario, only a SUCI generated by a null scheme should be considered as a
+ * plain-text identifier.
+ *
* @param type Type of radio indication
* @param disclosure A CellularIdentifierDisclosure as specified by
* IRadioNetwork.setCellularIdentifierTransparencyEnabled.
@@ -232,23 +239,78 @@
/*
* Indicates that a new ciphering or integrity algorithm was used for a particular voice,
* 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. 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").
+ * concerns, once a ConnectionEvent has been reported on, follow-up reports about that
+ * ConnectionEvent are only generated if there is any change to the most-recently reported
+ * encryption or integrity, if there is a RAT change, or if the value of
+ * SecurityAlgorithmUpdate#isUnprotectedEmergency 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").
*
- * Sample scenario to further clarify "most-recently reported":
+ * Example to further clarify "most-recently reported":
+ * 1. After booting up, the UE is in ENDC with LTE. Modem reports NAS_SIGNALLING_LTE and
+ * AS_SIGNALLING_LTE are well-ciphered but AS_SIGNALLING_5G is null-ciphered.
+ * 2. UE moves to 3G and enters the connected mode. Modem reports indications of PS_SERVICE_3G
+ * and SIGNALLING_3G to Android.
+ * 3. UE moves to LTE. UE enters the connected mode and there is no ENDC. The algorithms of
+ * NAS_SIGNALLING_LTE and AS_SIGNALLING_LTE are the same as in Step 1. The UE should send
+ * this indication to AP as it’s a RAT switch.
+ * 4. Later, UE establishes ENDC. AS_SIGNALLING_5G is null-ciphered. The UE should send this
+ * indication as well, as it is a RAT switch.
+ * 5. The UE enter IDLE mode, and later connected mode in ENDC. There are no changes to security
+ * algorithms, so the modem does not need to send any updates.
*
- * 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).
+ * Most recently reported 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) or RAT.
*
- * 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).
+ * securityAlgorithmUpdate indications must be sent to Android regardless of the screen state.
+ * If the screen is off, the indications must still be sent to Android.
+ *
+ *
+ * 5G TS 38.331 cipheringDisabled and integrityProtection
+ * ======================================================
+ * For most connections, generally what is reported by the network is what ends up being used.
+ * There are two significant cases where this may not be the case. In 5G, per the introduction
+ * of network configuration options cipheringDisabled and integrityProtection (TS 38.331), the
+ * network can have declared certain security algorithms to be used while also requiring a null
+ * algorithm via those parameters.
+ *
+ *
+ * Exceptions for DRBs with null integrity (pre-5G Rel 16)
+ * =======================================================
+ * When reporting the SecurityAlgorithm for a ConnectionType which includes a DRB, there is an
+ * exception where a DRB with null integrity is not to be considered/included in reporting
+ * except for 5G Rel 16 connections and newer. Because DRBs almost always use null integrity in
+ * practice, and thus if included the report would always be null, rendering the report
+ * useless. For anything 5G Rel 16 or newer, accurate reporting for the DRB's integrity is
+ * required.
+ *
+ *
+ * NRDC MCG and SCGs
+ * =================
+ * In the NRDC case, there can be two sets of algorithms, one for the MCG (Master Cell Group)
+ * and one for the SCG (Secondary Cell Group). In this case, always send a combined update that
+ * reflects the weaker of the algorithms, e.g. (weakest) NEA0 < NEA1 < NEA2 < NEA3 (strongest).
+ * This applies to both the ciphering and integrity algorithms.
+ *
+ *
+ * Determining the value of isUnprotectedEmergency
+ * ===============================================
+ * 2G: isUnprotectedEmergency is true if the ciphering algorithm is NULL.
+ * 3G: isUnprotectedEmergency is true if the ciphering and integrity algorithm are NULL.
+ * 4G: isUnprotectedEmergency is true if the ciphering algorithm is NULL.
+ * 5G: isUnprotectedEmergency is true if the ciphering algorithm is NULL.
+ * Notes:
+ * - On integrity: In 4G, PDCP can be LTE-based or NR-based. Starting from 5G Rel 17, only
+ * the NR-based PDCP supports DRB integrity. As the PDCP version can change during a DRB's
+ * operation, it becomes complicated when integrity is used to determine whether an
+ * emergency call is protected or not, hence its exclusion to simplify implementation.
+ * - 4G and 5G with multiple DRBs : emergency calls are protected under that RAT only if all
+ * DRBs are protected (including IMS DRB).
+ * - 4G and 5G DRB integrity: Since DRB integrity is not enabled in most networks, if both
+ * ciphering and integrity are taken into account to determine the value of
+ * isUnprotectedEmergency, the value will mostly be false, hence why it is excluded.
*
* @param type Type of radio indication
* @param securityAlgorithmUpdate SecurityAlgorithmUpdate encapsulates details of security
diff --git a/radio/aidl/android/hardware/radio/network/IRadioNetworkResponse.aidl b/radio/aidl/android/hardware/radio/network/IRadioNetworkResponse.aidl
index b67e8e0..1d301a5 100644
--- a/radio/aidl/android/hardware/radio/network/IRadioNetworkResponse.aidl
+++ b/radio/aidl/android/hardware/radio/network/IRadioNetworkResponse.aidl
@@ -136,6 +136,7 @@
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
* RadioError:SIM_ABSENT
+ * @deprecated Legacy CDMA is unsupported.
*/
void getCdmaRoamingPreferenceResponse(in RadioResponseInfo info, in CdmaRoamingType type);
@@ -372,6 +373,7 @@
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
* RadioError:SIM_ABSENT
+ * @deprecated Legacy CDMA is unsupported.
*/
void setCdmaRoamingPreferenceResponse(in RadioResponseInfo info);
diff --git a/radio/aidl/android/hardware/radio/network/LteSignalStrength.aidl b/radio/aidl/android/hardware/radio/network/LteSignalStrength.aidl
index 21d3ec7..785db0b 100644
--- a/radio/aidl/android/hardware/radio/network/LteSignalStrength.aidl
+++ b/radio/aidl/android/hardware/radio/network/LteSignalStrength.aidl
@@ -21,41 +21,43 @@
@JavaDerive(toString=true)
parcelable LteSignalStrength {
/**
- * Valid values are (0-31, 99) as defined in TS 27.007 8.5; INT_MAX means invalid/unreported.
+ * Valid values are (0-31, 99) as defined in TS 27.007 8.5;
+ * RadioConst:VALUE_UNAVAILABLE means invalid/unreported.
*/
int signalStrength;
/**
* The current Reference Signal Receive Power in dBm multiplied by -1. Range: 44 to 140 dBm;
- * INT_MAX: 0x7FFFFFFF denotes invalid/unreported value. Reference: 3GPP TS 36.133 9.1.4
+ * RadioConst:VALUE_UNAVAILABLE denotes invalid/unreported value. Ref: 3GPP TS 36.133 9.1.4
*/
int rsrp;
/**
* The current Reference Signal Receive Quality in dB multiplied by -1. Range: 20 to 3 dB;
- * INT_MAX: 0x7FFFFFFF denotes invalid/unreported value. Reference: 3GPP TS 36.133 9.1.7
+ * RadioConst:VALUE_UNAVAILABLE denotes invalid/unreported value. Ref: 3GPP TS 36.133 9.1.7
*/
int rsrq;
/**
* The current reference signal signal-to-noise ratio in 0.1 dB units.
* Range: -200 to +300 (-200 = -20.0 dB, +300 = 30dB).
- * INT_MAX: 0x7FFFFFFF denotes invalid/unreported value. Reference: 3GPP TS 36.101 8.1.1
+ * RadioConst:VALUE_UNAVAILABLE denotes invalid/unreported value. Ref: 3GPP TS 36.101 8.1.1
*/
int rssnr;
/**
* The current Channel Quality Indicator. Range: 0 to 15.
- * INT_MAX: 0x7FFFFFFF denotes invalid/unreported value. Reference: 3GPP TS 36.101 9.2, 9.3, A.4
+ * RadioConst:VALUE_UNAVAILABLE denotes invalid/unreported value.
+ * Ref: 3GPP TS 36.101 9.2, 9.3, A.4
*/
int cqi;
/**
* Timing advance in micro seconds for a one way trip from cell to device. Approximate distance
* is calculated using 300m/us * timingAdvance. Range: 0 to 1282 inclusive.
- * INT_MAX: 0x7FFFFFFF denotes invalid/unreported value. Reference: 3GPP 36.213 section 4.2.3
+ * RadioConst:VALUE_UNAVAILABLE denotes invalid/unreported value. Ref: 3GPP 36.213 section 4.2.3
*/
int timingAdvance;
/**
* CSI channel quality indicator (CQI) table index. There are multiple CQI tables.
* The definition of CQI in each table is different.
* Reference: 3GPP TS 136.213 section 7.2.3.
- * Range [1, 6], INT_MAX means invalid/unreported.
+ * Range [1, 6], RadioConst:VALUE_UNAVAILABLE means invalid/unreported.
*/
int cqiTableIndex;
}
diff --git a/radio/aidl/android/hardware/radio/network/NrSignalStrength.aidl b/radio/aidl/android/hardware/radio/network/NrSignalStrength.aidl
index 65daf36..a0db2d5 100644
--- a/radio/aidl/android/hardware/radio/network/NrSignalStrength.aidl
+++ b/radio/aidl/android/hardware/radio/network/NrSignalStrength.aidl
@@ -16,6 +16,8 @@
package android.hardware.radio.network;
+import android.hardware.radio.RadioConst;
+
/** @hide */
@VintfStability
@JavaDerive(toString=true)
@@ -23,44 +25,44 @@
/**
* SS reference signal received power, multiplied by -1.
* Reference: 3GPP TS 38.215.
- * Range [44, 140], INT_MAX means invalid/unreported.
+ * Range [44, 140], RadioConst:VALUE_UNAVAILABLE means invalid/unreported.
*/
int ssRsrp;
/**
* SS reference signal received quality, multiplied by -1.
* Reference: 3GPP TS 38.215, 3GPP TS 38.133 section 10.
- * Range [-20 dB, 43 dB], INT_MAX means invalid/unreported.
+ * Range [-20 dB, 43 dB], RadioConst:VALUE_UNAVAILABLE means invalid/unreported.
*/
int ssRsrq;
/**
* SS signal-to-noise and interference ratio.
* Reference: 3GPP TS 38.215 section 5.1.*, 3GPP TS 38.133 section 10.1.16.1.
- * Range [-23, 40], INT_MAX means invalid/unreported.
+ * Range [-23, 40], RadioConst:VALUE_UNAVAILABLE means invalid/unreported.
*/
int ssSinr;
/**
* CSI reference signal received power, multiplied by -1.
* Reference: 3GPP TS 38.215.
- * Range [44, 140], INT_MAX means invalid/unreported.
+ * Range [44, 140], RadioConst:VALUE_UNAVAILABLE means invalid/unreported.
*/
int csiRsrp;
/**
* CSI reference signal received quality, multiplied by -1.
* Reference: 3GPP TS 38.215.
- * Range [3, 20], INT_MAX means invalid/unreported.
+ * Range [3, 20], RadioConst:VALUE_UNAVAILABLE means invalid/unreported.
*/
int csiRsrq;
/**
* CSI signal-to-noise and interference ratio.
* Reference: 3GPP TS 138.215 section 5.1.*, 3GPP TS 38.133 section 10.1.16.1.
- * Range [-23, 40], INT_MAX means invalid/unreported.
+ * Range [-23, 40], RadioConst:VALUE_UNAVAILABLE means invalid/unreported.
*/
int csiSinr;
/**
* CSI channel quality indicator (CQI) table index. There are multiple CQI tables.
* The definition of CQI in each table is different.
* Reference: 3GPP TS 138.214 section 5.2.2.1.
- * Range [1, 3], INT_MAX means invalid/unreported.
+ * Range [1, 3], RadioConst:VALUE_UNAVAILABLE means invalid/unreported.
*/
int csiCqiTableIndex;
/**
@@ -69,14 +71,14 @@
* index is provided for each subband, in ascending order of subband index. If CQI is not
* available, the CQI report is empty.
* Reference: 3GPP TS 138.214 section 5.2.2.1.
- * Range [0, 15], 0xFF means invalid/unreported.
+ * Range [0, 15], RadioConst:VALUE_UNAVAILABLE_BYTE means invalid/unreported.
*/
byte[] csiCqiReport;
/**
* Timing advance in micro seconds for a one way trip from cell to device. Approximate distance
* is calculated using 300m/us * timingAdvance. Range: 0 to 1282 inclusive.
- * INT_MAX: 0x7FFFFFFF denotes invalid/unreported value.
+ * RadioConst:VALUE_UNAVAILABLE denotes invalid/unreported value.
* Reference: 3GPP 36.213 section 4.2.3
*/
- int timingAdvance = 0x7FFFFFFF;
+ int timingAdvance = RadioConst.VALUE_UNAVAILABLE;
}
diff --git a/radio/aidl/android/hardware/radio/network/RegStateResult.aidl b/radio/aidl/android/hardware/radio/network/RegStateResult.aidl
index 57a73c0..aa4cdfc 100644
--- a/radio/aidl/android/hardware/radio/network/RegStateResult.aidl
+++ b/radio/aidl/android/hardware/radio/network/RegStateResult.aidl
@@ -27,7 +27,7 @@
@JavaDerive(toString=true)
parcelable RegStateResult {
/**
- * Registration state. If the RAT is indicated as a GERAN, UTRAN, or CDMA2000 technology, this
+ * Registration state. If the RAT is indicated as a GERAN or UTRAN technology, this
* value reports registration in the Circuit-switched domain. If the RAT is indicated as an
* EUTRAN, NGRAN, or another technology that does not support circuit-switched services, this
* value reports registration in the Packet-switched domain.
@@ -57,7 +57,7 @@
*/
String registeredPlmn;
/**
- * Access-technology-specific registration information, such as for CDMA2000.
+ * Access-technology-specific registration information.
*/
AccessTechnologySpecificInfo accessTechnologySpecificInfo;
}
diff --git a/radio/aidl/android/hardware/radio/network/SignalStrength.aidl b/radio/aidl/android/hardware/radio/network/SignalStrength.aidl
index 5fed522..4e3bcf0 100644
--- a/radio/aidl/android/hardware/radio/network/SignalStrength.aidl
+++ b/radio/aidl/android/hardware/radio/network/SignalStrength.aidl
@@ -30,37 +30,39 @@
parcelable SignalStrength {
/**
* If GSM measurements are provided, this structure must contain valid measurements; otherwise
- * all fields should be set to INT_MAX to mark them as invalid.
+ * all fields should be set to RadioConst:VALUE_UNAVAILABLE to mark them as invalid.
*/
GsmSignalStrength gsm;
/**
* If CDMA measurements are provided, this structure must contain valid measurements; otherwise
- * all fields should be set to INT_MAX to mark them as invalid.
+ * all fields should be set to RadioConst:VALUE_UNAVAILABLE to mark them as invalid.
+ * @deprecated Legacy CDMA is unsupported.
*/
CdmaSignalStrength cdma;
/**
* If EvDO measurements are provided, this structure must contain valid measurements; otherwise
- * all fields should be set to INT_MAX to mark them as invalid.
+ * all fields should be set to RadioConst:VALUE_UNAVAILABLE to mark them as invalid.
+ * @deprecated Legacy CDMA is unsupported.
*/
EvdoSignalStrength evdo;
/**
* If LTE measurements are provided, this structure must contain valid measurements; otherwise
- * all fields should be set to INT_MAX to mark them as invalid.
+ * all fields should be set to RadioConst:VALUE_UNAVAILABLE to mark them as invalid.
*/
LteSignalStrength lte;
/**
* If TD-SCDMA measurements are provided, this structure must contain valid measurements;
- * otherwise all fields should be set to INT_MAX to mark them as invalid.
+ * otherwise all fields should be set to RadioConst:VALUE_UNAVAILABLE to mark them as invalid.
*/
TdscdmaSignalStrength tdscdma;
/**
* If WCDMA measurements are provided, this structure must contain valid measurements; otherwise
- * all fields should be set to INT_MAX to mark them as invalid.
+ * all fields should be set to RadioConst:VALUE_UNAVAILABLE to mark them as invalid.
*/
WcdmaSignalStrength wcdma;
/**
* If NR 5G measurements are provided, this structure must contain valid measurements; otherwise
- * all fields should be set to INT_MAX to mark them as invalid.
+ * all fields should be set to RadioConst:VALUE_UNAVAILABLE to mark them as invalid.
*/
NrSignalStrength nr;
}
diff --git a/radio/aidl/android/hardware/radio/network/SignalThresholdInfo.aidl b/radio/aidl/android/hardware/radio/network/SignalThresholdInfo.aidl
index e440a64..b7e5fa5 100644
--- a/radio/aidl/android/hardware/radio/network/SignalThresholdInfo.aidl
+++ b/radio/aidl/android/hardware/radio/network/SignalThresholdInfo.aidl
@@ -28,7 +28,7 @@
/**
* Received Signal Strength Indication.
* Range: -113 dBm and -51 dBm
- * Used RAN: GERAN, CDMA2000
+ * Used RAN: GERAN
* Reference: 3GPP TS 27.007 section 8.5.
*/
const int SIGNAL_MEASUREMENT_TYPE_RSSI = 1;
diff --git a/radio/aidl/android/hardware/radio/network/TdscdmaSignalStrength.aidl b/radio/aidl/android/hardware/radio/network/TdscdmaSignalStrength.aidl
index 4afdd0f..87c6baa 100644
--- a/radio/aidl/android/hardware/radio/network/TdscdmaSignalStrength.aidl
+++ b/radio/aidl/android/hardware/radio/network/TdscdmaSignalStrength.aidl
@@ -22,17 +22,17 @@
parcelable TdscdmaSignalStrength {
/**
* UTRA carrier RSSI as defined in TS 25.225 5.1.4. Valid values are (0-31, 99) as defined in
- * TS 27.007 8.5. INT_MAX denotes that the value is invalid/unreported.
+ * TS 27.007 8.5. RadioConst:VALUE_UNAVAILABLE denotes that the value is invalid/unreported.
*/
int signalStrength;
/**
* Transport Channel BER as defined in TS 25.225 5.2.5. Valid values are (0-7, 99) as defined in
- * TS 27.007 8.5. INT_MAX denotes that the value is invalid/unreported.
+ * TS 27.007 8.5. RadioConst:VALUE_UNAVAILABLE denotes that the value is invalid/unreported.
*/
int bitErrorRate;
/**
* P-CCPCH RSCP as defined in TS 25.225 5.1.1. Valid values are (0-96, 255) as defined in
- * TS 27.007 8.69. INT_MAX denotes that the value is invalid/unreported.
+ * TS 27.007 8.69. RadioConst:VALUE_UNAVAILABLE denotes that the value is invalid/unreported.
*/
int rscp;
}
diff --git a/radio/aidl/android/hardware/radio/network/WcdmaSignalStrength.aidl b/radio/aidl/android/hardware/radio/network/WcdmaSignalStrength.aidl
index ace89ed..8bc7fb8 100644
--- a/radio/aidl/android/hardware/radio/network/WcdmaSignalStrength.aidl
+++ b/radio/aidl/android/hardware/radio/network/WcdmaSignalStrength.aidl
@@ -21,21 +21,23 @@
@JavaDerive(toString=true)
parcelable WcdmaSignalStrength {
/**
- * Valid values are (0-31, 99) as defined in TS 27.007 8.5; INT_MAX means unreported.
+ * Valid values are (0-31, 99) as defined in TS 27.007 8.5; RadioConst:VALUE_UNAVAILABLE means
+ * unreported.
*/
int signalStrength;
/**
- * Bit error rate (0-7, 99) as defined in TS 27.007 8.5; INT_MAX means invalid/unreported.
+ * Bit error rate (0-7, 99) as defined in TS 27.007 8.5; RadioConst:VALUE_UNAVAILABLE means
+ * invalid/unreported.
*/
int bitErrorRate;
/**
* CPICH RSCP as defined in TS 25.215 5.1.1. Valid values are (0-96, 255) as defined in
- * TS 27.007 8.69. INT_MAX denotes that the value is invalid/unreported.
+ * TS 27.007 8.69. RadioConst:VALUE_UNAVAILABLE denotes that the value is invalid/unreported.
*/
int rscp;
/**
* Ec/No value as defined in TS 25.215 5.1.5. Valid values are (0-49, 255) as defined in
- * TS 27.007 8.69. INT_MAX denotes that the value is invalid/unreported.
+ * TS 27.007 8.69. RadioConst:VALUE_UNAVAILABLE denotes that the value is invalid/unreported.
*/
int ecno;
}
diff --git a/radio/aidl/android/hardware/radio/sim/CardStatus.aidl b/radio/aidl/android/hardware/radio/sim/CardStatus.aidl
index 043bfa4..43e2467 100644
--- a/radio/aidl/android/hardware/radio/sim/CardStatus.aidl
+++ b/radio/aidl/android/hardware/radio/sim/CardStatus.aidl
@@ -54,7 +54,8 @@
*/
int gsmUmtsSubscriptionAppIndex;
/**
- * Value < RadioConst:CARD_MAX_APPS, -1 if none
+ * Value ignored.
+ * @deprecated Legacy CDMA is unsupported.
*/
int cdmaSubscriptionAppIndex;
/**
diff --git a/radio/aidl/android/hardware/radio/sim/CdmaSubscriptionSource.aidl b/radio/aidl/android/hardware/radio/sim/CdmaSubscriptionSource.aidl
index 4c6c1ef..2dbd6a8 100644
--- a/radio/aidl/android/hardware/radio/sim/CdmaSubscriptionSource.aidl
+++ b/radio/aidl/android/hardware/radio/sim/CdmaSubscriptionSource.aidl
@@ -21,6 +21,8 @@
@Backing(type="int")
@JavaDerive(toString=true)
enum CdmaSubscriptionSource {
+ /** @deprecated Legacy CDMA is unsupported. */
RUIM_SIM,
+ /** @deprecated Legacy CDMA is unsupported. */
NV,
}
diff --git a/radio/aidl/android/hardware/radio/sim/IRadioSim.aidl b/radio/aidl/android/hardware/radio/sim/IRadioSim.aidl
index 7870a74..24c7320 100644
--- a/radio/aidl/android/hardware/radio/sim/IRadioSim.aidl
+++ b/radio/aidl/android/hardware/radio/sim/IRadioSim.aidl
@@ -123,6 +123,8 @@
* Response function is IRadioSimResponse.getCdmaSubscriptionResponse()
*
* This is available when android.hardware.telephony.cdma is defined.
+ *
+ * @deprecated Legacy CDMA is unsupported.
*/
void getCdmaSubscription(in int serial);
@@ -134,6 +136,8 @@
* Response function is IRadioSimResponse.getCdmaSubscriptionSourceResponse()
*
* This is available when android.hardware.telephony.cdma is defined.
+ *
+ * @deprecated Legacy CDMA is unsupported.
*/
void getCdmaSubscriptionSource(in int serial);
@@ -255,9 +259,9 @@
/**
* Request APDU exchange on the basic channel. This command reflects TS 27.007
- * "generic SIM access" operation (+CSIM). The modem must ensure proper function of GSM/CDMA,
+ * "generic SIM access" operation (+CSIM). The modem must ensure proper function of GSM,
* and filter commands appropriately. It must filter channel management and SELECT by DF
- * name commands. "sessionid" field must be ignored.
+ * name commands. "sessionId" field is always 0 (for aid="") and may be ignored.
*
* @param serial Serial number of request.
* @param message SimApdu to be sent
@@ -406,6 +410,8 @@
* Response function is IRadioSimResponse.setCdmaSubscriptionSourceResponse()
*
* This is available when android.hardware.telephony.cdma is defined.
+ *
+ * @deprecated Legacy CDMA is unsupported.
*/
void setCdmaSubscriptionSource(in int serial, in CdmaSubscriptionSource cdmaSub);
diff --git a/radio/aidl/android/hardware/radio/sim/IRadioSimIndication.aidl b/radio/aidl/android/hardware/radio/sim/IRadioSimIndication.aidl
index fc6355d..d9735d3 100644
--- a/radio/aidl/android/hardware/radio/sim/IRadioSimIndication.aidl
+++ b/radio/aidl/android/hardware/radio/sim/IRadioSimIndication.aidl
@@ -41,6 +41,7 @@
*
* @param type Type of radio indication
* @param cdmaSource New CdmaSubscriptionSource
+ * @deprecated Legacy CDMA is unsupported.
*/
void cdmaSubscriptionSourceChanged(
in RadioIndicationType type, in CdmaSubscriptionSource cdmaSource);
diff --git a/radio/aidl/android/hardware/radio/sim/IRadioSimResponse.aidl b/radio/aidl/android/hardware/radio/sim/IRadioSimResponse.aidl
index 63134c1..92815d2 100644
--- a/radio/aidl/android/hardware/radio/sim/IRadioSimResponse.aidl
+++ b/radio/aidl/android/hardware/radio/sim/IRadioSimResponse.aidl
@@ -145,6 +145,7 @@
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
* RadioError:SIM_ABSENT
+ * @deprecated Legacy CDMA is unsupported.
*/
void getCdmaSubscriptionResponse(in RadioResponseInfo info, in String mdn, in String hSid,
in String hNid, in String min, in String prl);
@@ -163,6 +164,7 @@
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
* RadioError:SIM_ABSENT
+ * @deprecated Legacy CDMA is unsupported.
*/
void getCdmaSubscriptionSourceResponse(
in RadioResponseInfo info, in CdmaSubscriptionSource source);
@@ -263,6 +265,8 @@
* RadioError:NONE
* RadioError:RADIO_NOT_AVAILABLE
* RadioError:INTERNAL_ERR
+ * RadioError:INVALID_ARGUMENTS when given channel is invalid or basic (channel 0)
+ * RadioError:MISSING_RESOURCE when given channel is not open
* RadioError:NO_MEMORY
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
@@ -325,6 +329,7 @@
* RadioError:NONE
* RadioError:RADIO_NOT_AVAILABLE
* RadioError:INTERNAL_ERR
+ * RadioError:INVALID_ARGUMENTS
* RadioError:NO_MEMORY
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
@@ -481,6 +486,7 @@
* RadioError:NO_MEMORY
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
+ * @deprecated Legacy CDMA is unsupported.
*/
void setCdmaSubscriptionSourceResponse(in RadioResponseInfo info);
diff --git a/radio/aidl/android/hardware/radio/voice/Call.aidl b/radio/aidl/android/hardware/radio/voice/Call.aidl
index ee0b025..27dab9c 100644
--- a/radio/aidl/android/hardware/radio/voice/Call.aidl
+++ b/radio/aidl/android/hardware/radio/voice/Call.aidl
@@ -77,6 +77,7 @@
boolean isVoice;
/**
* true if CDMA voice privacy mode is active
+ * @deprecated Legacy CDMA is unsupported.
*/
boolean isVoicePrivacy;
/**
diff --git a/radio/aidl/android/hardware/radio/voice/CdmaCallWaiting.aidl b/radio/aidl/android/hardware/radio/voice/CdmaCallWaiting.aidl
index d97b319..c77f3ec 100644
--- a/radio/aidl/android/hardware/radio/voice/CdmaCallWaiting.aidl
+++ b/radio/aidl/android/hardware/radio/voice/CdmaCallWaiting.aidl
@@ -22,44 +22,64 @@
@VintfStability
@JavaDerive(toString=true)
parcelable CdmaCallWaiting {
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_PLAN_UNKNOWN = 0;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_PLAN_ISDN = 1;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_PLAN_DATA = 3;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_PLAN_TELEX = 4;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_PLAN_NATIONAL = 8;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_PLAN_PRIVATE = 9;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_PRESENTATION_ALLOWED = 0;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_PRESENTATION_RESTRICTED = 1;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_PRESENTATION_UNKNOWN = 2;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_TYPE_UNKNOWN = 0;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_TYPE_INTERNATIONAL = 1;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_TYPE_NATIONAL = 2;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_TYPE_NETWORK_SPECIFIC = 3;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NUMBER_TYPE_SUBSCRIBER = 4;
/**
* Remote party number
+ * @deprecated Legacy CDMA is unsupported.
*/
String number;
/**
* Values are NUMBER_PRESENTATION_
+ * @deprecated Legacy CDMA is unsupported.
*/
int numberPresentation;
/**
* Remote party name
+ * @deprecated Legacy CDMA is unsupported.
*/
String name;
+ /** @deprecated Legacy CDMA is unsupported. */
CdmaSignalInfoRecord signalInfoRecord;
/**
* Required to support International Call Waiting
* Values are NUMBER_TYPE_
+ * @deprecated Legacy CDMA is unsupported.
*/
int numberType;
/**
* Required to support International Call Waiting
* Values are NUMBER_PLAN_
+ * @deprecated Legacy CDMA is unsupported.
*/
int numberPlan;
}
diff --git a/radio/aidl/android/hardware/radio/voice/CdmaDisplayInfoRecord.aidl b/radio/aidl/android/hardware/radio/voice/CdmaDisplayInfoRecord.aidl
index 7e5a68d..506e407 100644
--- a/radio/aidl/android/hardware/radio/voice/CdmaDisplayInfoRecord.aidl
+++ b/radio/aidl/android/hardware/radio/voice/CdmaDisplayInfoRecord.aidl
@@ -27,9 +27,11 @@
@VintfStability
@JavaDerive(toString=true)
parcelable CdmaDisplayInfoRecord {
+ /** @deprecated Legacy CDMA is unsupported. */
const int CDMA_ALPHA_INFO_BUFFER_LENGTH = 64;
/**
* Max length = CDMA_ALPHA_INFO_BUFFER_LENGTH
+ * @deprecated Legacy CDMA is unsupported.
*/
String alphaBuf;
}
diff --git a/radio/aidl/android/hardware/radio/voice/CdmaInformationRecord.aidl b/radio/aidl/android/hardware/radio/voice/CdmaInformationRecord.aidl
index f5c656b..664ed5b 100644
--- a/radio/aidl/android/hardware/radio/voice/CdmaInformationRecord.aidl
+++ b/radio/aidl/android/hardware/radio/voice/CdmaInformationRecord.aidl
@@ -31,54 +31,74 @@
@VintfStability
@JavaDerive(toString=true)
parcelable CdmaInformationRecord {
+ /** @deprecated Legacy CDMA is unsupported. */
const int CDMA_MAX_NUMBER_OF_INFO_RECS = 10;
/**
* Names of the CDMA info records (C.S0005 section 3.7.5)
+ * @deprecated Legacy CDMA is unsupported.
*/
const int NAME_DISPLAY = 0;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NAME_CALLED_PARTY_NUMBER = 1;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NAME_CALLING_PARTY_NUMBER = 2;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NAME_CONNECTED_NUMBER = 3;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NAME_SIGNAL = 4;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NAME_REDIRECTING_NUMBER = 5;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NAME_LINE_CONTROL = 6;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NAME_EXTENDED_DISPLAY = 7;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NAME_T53_CLIR = 8;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NAME_T53_RELEASE = 9;
+ /** @deprecated Legacy CDMA is unsupported. */
const int NAME_T53_AUDIO_CONTROL = 10;
/**
* Based on CdmaInfoRecName, only one of the below vectors must have size = 1.
* All other vectors must have size 0.
* Values are NAME_
+ * @deprecated Legacy CDMA is unsupported.
*/
int name;
/**
* Display and extended display info rec
+ * @deprecated Legacy CDMA is unsupported.
*/
CdmaDisplayInfoRecord[] display;
/**
* Called party number, calling party number, connected number info rec
+ * @deprecated Legacy CDMA is unsupported.
*/
CdmaNumberInfoRecord[] number;
/**
* Signal info rec
+ * @deprecated Legacy CDMA is unsupported.
*/
CdmaSignalInfoRecord[] signal;
/**
* Redirecting number info rec
+ * @deprecated Legacy CDMA is unsupported.
*/
CdmaRedirectingNumberInfoRecord[] redir;
/**
* Line control info rec
+ * @deprecated Legacy CDMA is unsupported.
*/
CdmaLineControlInfoRecord[] lineCtrl;
/**
* T53 CLIR info rec
+ * @deprecated Legacy CDMA is unsupported.
*/
CdmaT53ClirInfoRecord[] clir;
/**
* T53 Audio Control info rec
+ * @deprecated Legacy CDMA is unsupported.
*/
CdmaT53AudioControlInfoRecord[] audioCtrl;
}
diff --git a/radio/aidl/android/hardware/radio/voice/CdmaLineControlInfoRecord.aidl b/radio/aidl/android/hardware/radio/voice/CdmaLineControlInfoRecord.aidl
index 15c22a0..9cf0103 100644
--- a/radio/aidl/android/hardware/radio/voice/CdmaLineControlInfoRecord.aidl
+++ b/radio/aidl/android/hardware/radio/voice/CdmaLineControlInfoRecord.aidl
@@ -23,8 +23,12 @@
@VintfStability
@JavaDerive(toString=true)
parcelable CdmaLineControlInfoRecord {
+ /** @deprecated Legacy CDMA is unsupported. */
byte lineCtrlPolarityIncluded;
+ /** @deprecated Legacy CDMA is unsupported. */
byte lineCtrlToggle;
+ /** @deprecated Legacy CDMA is unsupported. */
byte lineCtrlReverse;
+ /** @deprecated Legacy CDMA is unsupported. */
byte lineCtrlPowerDenial;
}
diff --git a/radio/aidl/android/hardware/radio/voice/CdmaNumberInfoRecord.aidl b/radio/aidl/android/hardware/radio/voice/CdmaNumberInfoRecord.aidl
index b04e273..0864ce5 100644
--- a/radio/aidl/android/hardware/radio/voice/CdmaNumberInfoRecord.aidl
+++ b/radio/aidl/android/hardware/radio/voice/CdmaNumberInfoRecord.aidl
@@ -25,13 +25,19 @@
@VintfStability
@JavaDerive(toString=true)
parcelable CdmaNumberInfoRecord {
+ /** @deprecated Legacy CDMA is unsupported. */
const int CDMA_NUMBER_INFO_BUFFER_LENGTH = 81;
/**
* Max length = CDMA_NUMBER_INFO_BUFFER_LENGTH
+ * @deprecated Legacy CDMA is unsupported.
*/
String number;
+ /** @deprecated Legacy CDMA is unsupported. */
byte numberType;
+ /** @deprecated Legacy CDMA is unsupported. */
byte numberPlan;
+ /** @deprecated Legacy CDMA is unsupported. */
byte pi;
+ /** @deprecated Legacy CDMA is unsupported. */
byte si;
}
diff --git a/radio/aidl/android/hardware/radio/voice/CdmaOtaProvisionStatus.aidl b/radio/aidl/android/hardware/radio/voice/CdmaOtaProvisionStatus.aidl
index b6444ab..1f003a8 100644
--- a/radio/aidl/android/hardware/radio/voice/CdmaOtaProvisionStatus.aidl
+++ b/radio/aidl/android/hardware/radio/voice/CdmaOtaProvisionStatus.aidl
@@ -21,16 +21,28 @@
@Backing(type="int")
@JavaDerive(toString=true)
enum CdmaOtaProvisionStatus {
+ /** @deprecated Legacy CDMA is unsupported. */
SPL_UNLOCKED,
+ /** @deprecated Legacy CDMA is unsupported. */
SPC_RETRIES_EXCEEDED,
+ /** @deprecated Legacy CDMA is unsupported. */
A_KEY_EXCHANGED,
+ /** @deprecated Legacy CDMA is unsupported. */
SSD_UPDATED,
+ /** @deprecated Legacy CDMA is unsupported. */
NAM_DOWNLOADED,
+ /** @deprecated Legacy CDMA is unsupported. */
MDN_DOWNLOADED,
+ /** @deprecated Legacy CDMA is unsupported. */
IMSI_DOWNLOADED,
+ /** @deprecated Legacy CDMA is unsupported. */
PRL_DOWNLOADED,
+ /** @deprecated Legacy CDMA is unsupported. */
COMMITTED,
+ /** @deprecated Legacy CDMA is unsupported. */
OTAPA_STARTED,
+ /** @deprecated Legacy CDMA is unsupported. */
OTAPA_STOPPED,
+ /** @deprecated Legacy CDMA is unsupported. */
OTAPA_ABORTED,
}
diff --git a/radio/aidl/android/hardware/radio/voice/CdmaRedirectingNumberInfoRecord.aidl b/radio/aidl/android/hardware/radio/voice/CdmaRedirectingNumberInfoRecord.aidl
index 691712e..4b93303 100644
--- a/radio/aidl/android/hardware/radio/voice/CdmaRedirectingNumberInfoRecord.aidl
+++ b/radio/aidl/android/hardware/radio/voice/CdmaRedirectingNumberInfoRecord.aidl
@@ -24,19 +24,28 @@
parcelable CdmaRedirectingNumberInfoRecord {
/**
* Redirecting Number Information Record as defined in C.S0005 section 3.7.5.11
+ * @deprecated Legacy CDMA is unsupported.
*/
const int REDIRECTING_REASON_UNKNOWN = 0;
+ /** @deprecated Legacy CDMA is unsupported. */
const int REDIRECTING_REASON_CALL_FORWARDING_BUSY = 1;
+ /** @deprecated Legacy CDMA is unsupported. */
const int REDIRECTING_REASON_CALL_FORWARDING_NO_REPLY = 2;
+ /** @deprecated Legacy CDMA is unsupported. */
const int REDIRECTING_REASON_CALLED_DTE_OUT_OF_ORDER = 9;
+ /** @deprecated Legacy CDMA is unsupported. */
const int REDIRECTING_REASON_CALL_FORWARDING_BY_THE_CALLED_DTE = 10;
+ /** @deprecated Legacy CDMA is unsupported. */
const int REDIRECTING_REASON_CALL_FORWARDING_UNCONDITIONAL = 15;
+ /** @deprecated Legacy CDMA is unsupported. */
const int REDIRECTING_REASON_RESERVED = 16;
+ /** @deprecated Legacy CDMA is unsupported. */
CdmaNumberInfoRecord redirectingNumber;
/**
* Set to UNKNOWN if not included.
* Values are REDIRECTING_REASON_
+ * @deprecated Legacy CDMA is unsupported.
*/
int redirectingReason;
}
diff --git a/radio/aidl/android/hardware/radio/voice/CdmaSignalInfoRecord.aidl b/radio/aidl/android/hardware/radio/voice/CdmaSignalInfoRecord.aidl
index 4302ba4..2ada10b 100644
--- a/radio/aidl/android/hardware/radio/voice/CdmaSignalInfoRecord.aidl
+++ b/radio/aidl/android/hardware/radio/voice/CdmaSignalInfoRecord.aidl
@@ -25,18 +25,22 @@
parcelable CdmaSignalInfoRecord {
/**
* True if signal information record is present
+ * @deprecated Legacy CDMA is unsupported.
*/
boolean isPresent;
/**
* Defined in 3.7.5.5-1
+ * @deprecated Legacy CDMA is unsupported.
*/
byte signalType;
/**
* Defined in 3.7.5.5-2
+ * @deprecated Legacy CDMA is unsupported.
*/
byte alertPitch;
/**
* Defined in 3.7.5.5-3, 3.7.5.5-4 or 3.7.5.5-5
+ * @deprecated Legacy CDMA is unsupported.
*/
byte signal;
}
diff --git a/radio/aidl/android/hardware/radio/voice/CdmaT53AudioControlInfoRecord.aidl b/radio/aidl/android/hardware/radio/voice/CdmaT53AudioControlInfoRecord.aidl
index 44ac2b4..68b19b8 100644
--- a/radio/aidl/android/hardware/radio/voice/CdmaT53AudioControlInfoRecord.aidl
+++ b/radio/aidl/android/hardware/radio/voice/CdmaT53AudioControlInfoRecord.aidl
@@ -23,6 +23,8 @@
@VintfStability
@JavaDerive(toString=true)
parcelable CdmaT53AudioControlInfoRecord {
+ /** @deprecated Legacy CDMA is unsupported. */
byte upLink;
+ /** @deprecated Legacy CDMA is unsupported. */
byte downLink;
}
diff --git a/radio/aidl/android/hardware/radio/voice/CdmaT53ClirInfoRecord.aidl b/radio/aidl/android/hardware/radio/voice/CdmaT53ClirInfoRecord.aidl
index 564d761..6a1b992 100644
--- a/radio/aidl/android/hardware/radio/voice/CdmaT53ClirInfoRecord.aidl
+++ b/radio/aidl/android/hardware/radio/voice/CdmaT53ClirInfoRecord.aidl
@@ -23,5 +23,6 @@
@VintfStability
@JavaDerive(toString=true)
parcelable CdmaT53ClirInfoRecord {
+ /** @deprecated Legacy CDMA is unsupported. */
byte cause;
}
diff --git a/radio/aidl/android/hardware/radio/voice/IRadioVoice.aidl b/radio/aidl/android/hardware/radio/voice/IRadioVoice.aidl
index 0c2b51d..74b1d5f 100644
--- a/radio/aidl/android/hardware/radio/voice/IRadioVoice.aidl
+++ b/radio/aidl/android/hardware/radio/voice/IRadioVoice.aidl
@@ -369,6 +369,8 @@
* Response function is IRadioVoiceResponse.sendCdmaFeatureCodeResponse()
*
* This is available when android.hardware.telephony.cdma is defined.
+ *
+ * @deprecated Legacy CDMA is unsupported.
*/
void sendCdmaFeatureCode(in int serial, in String featureCode);
diff --git a/radio/aidl/android/hardware/radio/voice/IRadioVoiceIndication.aidl b/radio/aidl/android/hardware/radio/voice/IRadioVoiceIndication.aidl
index 9de6364..f8bd999 100644
--- a/radio/aidl/android/hardware/radio/voice/IRadioVoiceIndication.aidl
+++ b/radio/aidl/android/hardware/radio/voice/IRadioVoiceIndication.aidl
@@ -42,8 +42,8 @@
* value of 3000 (3 seconds) if absent.
*
* @param type Type of radio indication
- * @param isGsm true for GSM & false for CDMA
- * @param record Cdma Signal Information
+ * @param isGsm Always true (Legacy CDMA is unsupported)
+ * @param record Always empty (Legacy CDMA is unsupported)
*/
void callRing(in RadioIndicationType type, in boolean isGsm, in CdmaSignalInfoRecord record);
@@ -62,6 +62,7 @@
*
* @param type Type of radio indication
* @param callWaitingRecord Cdma CallWaiting information
+ * @deprecated Legacy CDMA is unsupported.
*/
void cdmaCallWaiting(in RadioIndicationType type, in CdmaCallWaiting callWaitingRecord);
@@ -71,6 +72,7 @@
* @param type Type of radio indication
* @param records New CDMA information records.
* Max length is RadioConst:CDMA_MAX_NUMBER_OF_INFO_RECS
+ * @deprecated Legacy CDMA is unsupported.
*/
void cdmaInfoRec(in RadioIndicationType type, in CdmaInformationRecord[] records);
@@ -79,6 +81,7 @@
*
* @param type Type of radio indication
* @param status Cdma OTA provision status
+ * @deprecated Legacy CDMA is unsupported.
*/
void cdmaOtaProvisionStatus(in RadioIndicationType type, in CdmaOtaProvisionStatus status);
diff --git a/radio/aidl/android/hardware/radio/voice/IRadioVoiceResponse.aidl b/radio/aidl/android/hardware/radio/voice/IRadioVoiceResponse.aidl
index a904eaa..cf36ef9 100644
--- a/radio/aidl/android/hardware/radio/voice/IRadioVoiceResponse.aidl
+++ b/radio/aidl/android/hardware/radio/voice/IRadioVoiceResponse.aidl
@@ -564,6 +564,7 @@
* RadioError:NO_RESOURCES
* RadioError:CANCELLED
* RadioError:OPERATION_NOT_ALLOWED
+ * @deprecated Legacy CDMA is unsupported.
*/
void sendCdmaFeatureCodeResponse(in RadioResponseInfo info);
diff --git a/radio/aidl/android/hardware/radio/voice/LastCallFailCause.aidl b/radio/aidl/android/hardware/radio/voice/LastCallFailCause.aidl
index 9a38197..f37c10c 100644
--- a/radio/aidl/android/hardware/radio/voice/LastCallFailCause.aidl
+++ b/radio/aidl/android/hardware/radio/voice/LastCallFailCause.aidl
@@ -139,18 +139,28 @@
* Explicit network detach
*/
NETWORK_DETACH = 261,
+ /** @deprecated Legacy CDMA is unsupported. */
CDMA_LOCKED_UNTIL_POWER_CYCLE = 1000,
+ /** @deprecated Legacy CDMA is unsupported. */
CDMA_DROP = 1001,
+ /** @deprecated Legacy CDMA is unsupported. */
CDMA_INTERCEPT = 1002,
+ /** @deprecated Legacy CDMA is unsupported. */
CDMA_REORDER = 1003,
+ /** @deprecated Legacy CDMA is unsupported. */
CDMA_SO_REJECT = 1004,
+ /** @deprecated Legacy CDMA is unsupported. */
CDMA_RETRY_ORDER = 1005,
+ /** @deprecated Legacy CDMA is unsupported. */
CDMA_ACCESS_FAILURE = 1006,
+ /** @deprecated Legacy CDMA is unsupported. */
CDMA_PREEMPTED = 1007,
/**
* For non-emergency number dialed during emergency callback mode
+ * @deprecated Legacy CDMA is unsupported.
*/
CDMA_NOT_EMERGENCY = 1008,
+ /** @deprecated Legacy CDMA is unsupported. */
CDMA_ACCESS_BLOCKED = 1009,
/**
* OEM specific error codes. Used to distinguish error from
diff --git a/radio/aidl/compat/libradiocompat/Android.bp b/radio/aidl/compat/libradiocompat/Android.bp
index 3fbd398..a3a8c20 100644
--- a/radio/aidl/compat/libradiocompat/Android.bp
+++ b/radio/aidl/compat/libradiocompat/Android.bp
@@ -25,16 +25,16 @@
cc_defaults {
name: "android.hardware.radio-library.aidl_deps",
shared_libs: [
- "android.hardware.radio.config-V3-ndk",
+ "android.hardware.radio.config-V4-ndk",
"android.hardware.radio.data-V4-ndk",
- "android.hardware.radio.ims-V2-ndk",
+ "android.hardware.radio.ims-V3-ndk",
"android.hardware.radio.ims.media-V3-ndk",
- "android.hardware.radio.messaging-V3-ndk",
- "android.hardware.radio.modem-V3-ndk",
- "android.hardware.radio.network-V3-ndk",
+ "android.hardware.radio.messaging-V4-ndk",
+ "android.hardware.radio.modem-V4-ndk",
+ "android.hardware.radio.network-V4-ndk",
"android.hardware.radio.sap-V1-ndk",
- "android.hardware.radio.sim-V3-ndk",
- "android.hardware.radio.voice-V3-ndk",
+ "android.hardware.radio.sim-V4-ndk",
+ "android.hardware.radio.voice-V4-ndk",
],
}
diff --git a/radio/aidl/vts/Android.bp b/radio/aidl/vts/Android.bp
index 37e0ba8..6e8ce8b 100644
--- a/radio/aidl/vts/Android.bp
+++ b/radio/aidl/vts/Android.bp
@@ -77,17 +77,17 @@
"server_configurable_flags",
],
static_libs: [
- "android.hardware.radio-V3-ndk",
- "android.hardware.radio.config-V3-ndk",
+ "android.hardware.radio-V4-ndk",
+ "android.hardware.radio.config-V4-ndk",
"android.hardware.radio.data-V4-ndk",
- "android.hardware.radio.ims-V2-ndk",
+ "android.hardware.radio.ims-V3-ndk",
"android.hardware.radio.ims.media-V3-ndk",
- "android.hardware.radio.messaging-V3-ndk",
- "android.hardware.radio.modem-V3-ndk",
- "android.hardware.radio.network-V3-ndk",
+ "android.hardware.radio.messaging-V4-ndk",
+ "android.hardware.radio.modem-V4-ndk",
+ "android.hardware.radio.network-V4-ndk",
"android.hardware.radio.sap-V1-ndk",
- "android.hardware.radio.sim-V3-ndk",
- "android.hardware.radio.voice-V3-ndk",
+ "android.hardware.radio.sim-V4-ndk",
+ "android.hardware.radio.voice-V4-ndk",
"telephony_flags_c_lib",
],
test_suites: [
diff --git a/security/keymint/aidl/android/hardware/security/keymint/KeyCreationResult.aidl b/security/keymint/aidl/android/hardware/security/keymint/KeyCreationResult.aidl
index 294c205..da8b513 100644
--- a/security/keymint/aidl/android/hardware/security/keymint/KeyCreationResult.aidl
+++ b/security/keymint/aidl/android/hardware/security/keymint/KeyCreationResult.aidl
@@ -145,9 +145,9 @@
* verifiedBootKey OCTET_STRING,
* deviceLocked BOOLEAN,
* verifiedBootState VerifiedBootState,
- * # verifiedBootHash must contain 32-byte value that represents the state of all binaries
- * # or other components validated by verified boot. Updating any verified binary or
- * # component must cause this value to change.
+ * # verifiedBootHash must contain a SHA-256 digest of all binaries and components validated
+ * # by Verified Boot. Updating any verified binary or component must cause this value to
+ * # change.
* verifiedBootHash OCTET_STRING,
* }
*
diff --git a/security/keymint/aidl/default/Android.bp b/security/keymint/aidl/default/Android.bp
index a7066de..ff2393c 100644
--- a/security/keymint/aidl/default/Android.bp
+++ b/security/keymint/aidl/default/Android.bp
@@ -111,6 +111,13 @@
src: "android.hardware.hardware_keystore.xml",
}
+prebuilt_etc {
+ name: "android.hardware.hardware_keystore_V3.xml",
+ sub_dir: "permissions",
+ vendor: true,
+ src: "android.hardware.hardware_keystore_V3.xml",
+}
+
rust_library {
name: "libkmr_hal_nonsecure",
crate_name: "kmr_hal_nonsecure",
diff --git a/security/keymint/aidl/default/android.hardware.hardware_keystore_V3.xml b/security/keymint/aidl/default/android.hardware.hardware_keystore_V3.xml
new file mode 100644
index 0000000..4c75596
--- /dev/null
+++ b/security/keymint/aidl/default/android.hardware.hardware_keystore_V3.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<permissions>
+ <feature name="android.hardware.hardware_keystore" version="300" />
+</permissions>
diff --git a/security/keymint/aidl/vts/functional/BootloaderStateTest.cpp b/security/keymint/aidl/vts/functional/BootloaderStateTest.cpp
index c1f6aee..083a9aa 100644
--- a/security/keymint/aidl/vts/functional/BootloaderStateTest.cpp
+++ b/security/keymint/aidl/vts/functional/BootloaderStateTest.cpp
@@ -109,7 +109,7 @@
}
}
-// Check that attested vbmeta digest is correct.
+// Check that the attested VBMeta digest is correct.
TEST_P(BootloaderStateTest, VbmetaDigest) {
AvbSlotVerifyData* avbSlotData;
auto suffix = fs_mgr_get_slot_suffix();
@@ -125,21 +125,29 @@
AVB_HASHTREE_ERROR_MODE_EIO, &avbSlotData);
ASSERT_TRUE(avb_slot_data_loaded(result)) << "Failed to load avb slot data";
- // Unfortunately, bootloader is not required to report the algorithm used
- // to calculate the digest. There are only two supported options though,
- // SHA256 and SHA512. Attested VBMeta digest must match one of these.
- vector<uint8_t> digest256(AVB_SHA256_DIGEST_SIZE);
- vector<uint8_t> digest512(AVB_SHA512_DIGEST_SIZE);
-
+ vector<uint8_t> sha256Digest(AVB_SHA256_DIGEST_SIZE);
avb_slot_verify_data_calculate_vbmeta_digest(avbSlotData, AVB_DIGEST_TYPE_SHA256,
- digest256.data());
- avb_slot_verify_data_calculate_vbmeta_digest(avbSlotData, AVB_DIGEST_TYPE_SHA512,
- digest512.data());
+ sha256Digest.data());
- ASSERT_TRUE((attestedVbmetaDigest_ == digest256) || (attestedVbmetaDigest_ == digest512))
- << "Attested vbmeta digest (" << bin2hex(attestedVbmetaDigest_)
- << ") does not match computed digest (sha256: " << bin2hex(digest256)
- << ", sha512: " << bin2hex(digest512) << ").";
+ if (get_vsr_api_level() >= __ANDROID_API_V__) {
+ ASSERT_TRUE(attestedVbmetaDigest_ == sha256Digest)
+ << "Attested VBMeta digest (" << bin2hex(attestedVbmetaDigest_)
+ << ") does not match the expected SHA-256 digest (" << bin2hex(sha256Digest)
+ << ").";
+ } else {
+ // Prior to VSR-V, there was no MUST requirement for the algorithm used by the bootloader
+ // to calculate the VBMeta digest. However, the only two supported options are SHA-256 and
+ // SHA-512, so we expect the attested VBMeta digest to match one of these.
+ vector<uint8_t> sha512Digest(AVB_SHA512_DIGEST_SIZE);
+ avb_slot_verify_data_calculate_vbmeta_digest(avbSlotData, AVB_DIGEST_TYPE_SHA512,
+ sha512Digest.data());
+
+ ASSERT_TRUE((attestedVbmetaDigest_ == sha256Digest) ||
+ (attestedVbmetaDigest_ == sha512Digest))
+ << "Attested VBMeta digest (" << bin2hex(attestedVbmetaDigest_)
+ << ") does not match the expected digest (SHA-256: " << bin2hex(sha256Digest)
+ << " or SHA-512: " << bin2hex(sha512Digest) << ").";
+ }
}
INSTANTIATE_KEYMINT_AIDL_TEST(BootloaderStateTest);
diff --git a/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.cpp b/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.cpp
index cfe9fa7..51afa12 100644
--- a/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.cpp
+++ b/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.cpp
@@ -149,7 +149,7 @@
// The multiplier should never be higher than the AIDL version, but can be less
// (for example, if the implementation is from an earlier version but the HAL service
// uses the default libraries and so reports the current AIDL version).
- EXPECT_TRUE((attestation_version / 100) <= aidl_version);
+ EXPECT_LE((attestation_version / 100), aidl_version);
}
bool avb_verification_enabled() {
@@ -160,12 +160,13 @@
char nibble2hex[16] = {'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
-// Attestations don't contain everything in key authorization lists, so we need to filter the key
-// lists to produce the lists that we expect to match the attestations.
+// Attestations don't completely align with key authorization lists, so we need to filter the lists
+// to include only the tags that are in both.
auto kTagsToFilter = {
Tag::CREATION_DATETIME,
Tag::HARDWARE_TYPE,
Tag::INCLUDE_UNIQUE_ID,
+ Tag::MODULE_HASH,
};
AuthorizationSet filtered_tags(const AuthorizationSet& set) {
@@ -234,6 +235,83 @@
return boot_patch_level(key_characteristics_);
}
+std::optional<vector<uint8_t>> KeyMintAidlTestBase::getModuleHash() {
+ if (AidlVersion() < 4) {
+ // The `MODULE_HASH` tag was introduced in v4 of the HAL; earlier versions should never
+ // expect to encounter it.
+ return std::nullopt;
+ }
+
+ // The KeyMint instance should already have been informed of the `MODULE_HASH` value for the
+ // currently running system. Generate a single attestation so we can find out what the value
+ // is.
+ auto challenge = "hello";
+ auto app_id = "foo";
+ auto params = AuthorizationSetBuilder()
+ .EcdsaSigningKey(EcCurve::P_256)
+ .Digest(Digest::NONE)
+ .Authorization(TAG_NO_AUTH_REQUIRED)
+ .AttestationChallenge(challenge)
+ .AttestationApplicationId(app_id)
+ .SetDefaultValidity();
+ vector<uint8_t> key_blob;
+ vector<KeyCharacteristics> key_characteristics;
+ vector<Certificate> chain;
+ auto result = GenerateKey(params, &key_blob, &key_characteristics, &chain);
+ if (result != ErrorCode::OK) {
+ ADD_FAILURE() << "Failed to generate attestation:" << result;
+ return std::nullopt;
+ }
+ KeyBlobDeleter deleter(keymint_, key_blob);
+ if (chain.empty()) {
+ ADD_FAILURE() << "No attestation cert";
+ return std::nullopt;
+ }
+
+ // Parse the attestation record in the leaf cert.
+ X509_Ptr cert(parse_cert_blob(chain[0].encodedCertificate));
+ if (cert.get() == nullptr) {
+ ADD_FAILURE() << "Failed to parse attestation cert";
+ return std::nullopt;
+ }
+ ASN1_OCTET_STRING* attest_rec = get_attestation_record(cert.get());
+ if (attest_rec == nullptr) {
+ ADD_FAILURE() << "Failed to find attestation extension";
+ return std::nullopt;
+ }
+ AuthorizationSet att_sw_enforced;
+ AuthorizationSet att_hw_enforced;
+ uint32_t att_attestation_version;
+ uint32_t att_keymint_version;
+ SecurityLevel att_attestation_security_level;
+ SecurityLevel att_keymint_security_level;
+ vector<uint8_t> att_challenge;
+ vector<uint8_t> att_unique_id;
+ vector<uint8_t> att_app_id;
+
+ auto error = parse_attestation_record(attest_rec->data, //
+ attest_rec->length, //
+ &att_attestation_version, //
+ &att_attestation_security_level, //
+ &att_keymint_version, //
+ &att_keymint_security_level, //
+ &att_challenge, //
+ &att_sw_enforced, //
+ &att_hw_enforced, //
+ &att_unique_id);
+ if (error != ErrorCode::OK) {
+ ADD_FAILURE() << "Failed to parse attestation extension";
+ return std::nullopt;
+ }
+
+ // The module hash should be present in the software-enforced list.
+ if (!att_sw_enforced.Contains(TAG_MODULE_HASH)) {
+ ADD_FAILURE() << "No TAG_MODULE_HASH in attestation extension";
+ return std::nullopt;
+ }
+ return att_sw_enforced.GetTagValue(TAG_MODULE_HASH);
+}
+
/**
* An API to determine device IDs attestation is required or not,
* which is mandatory for KeyMint version 2 and first_api_level 33 or greater.
@@ -270,12 +348,7 @@
}
// Curve 25519 was included in version 2 of the KeyMint interface.
- int32_t version = 0;
- auto status = keymint_->getInterfaceVersion(&version);
- if (!status.isOk()) {
- ADD_FAILURE() << "Failed to determine interface version";
- }
- return version >= 2;
+ return AidlVersion() >= 2;
}
void KeyMintAidlTestBase::InitializeKeyMint(std::shared_ptr<IKeyMintDevice> keyMint) {
@@ -293,6 +366,20 @@
os_version_ = getOsVersion();
os_patch_level_ = getOsPatchlevel();
vendor_patch_level_ = getVendorPatchlevel();
+
+ // TODO(b/369375199): temporary code, remove when apexd -> keystore2 -> KeyMint transmission
+ // of module info happens.
+ {
+ GTEST_LOG_(INFO) << "Setting MODULE_HASH to fake value as fallback";
+ // Ensure that a MODULE_HASH value is definitely present in KeyMint (if it's >= v4).
+ vector<uint8_t> fakeModuleHash = {
+ 0xf3, 0xf1, 0x1f, 0xe5, 0x13, 0x05, 0xfe, 0xfa, 0xe9, 0xc3, 0x53,
+ 0xef, 0x69, 0xdf, 0x9f, 0xd7, 0x0c, 0x1e, 0xcc, 0x2c, 0x2c, 0x62,
+ 0x1f, 0x5e, 0x2c, 0x1d, 0x19, 0xa1, 0xfd, 0xac, 0xa1, 0xb4,
+ };
+ vector<KeyParameter> info = {Authorization(TAG_MODULE_HASH, fakeModuleHash)};
+ keymint_->setAdditionalAttestationInfo(info);
+ }
}
int32_t KeyMintAidlTestBase::AidlVersion() const {
@@ -320,6 +407,13 @@
ErrorCode KeyMintAidlTestBase::GenerateKey(const AuthorizationSet& key_desc,
vector<uint8_t>* key_blob,
vector<KeyCharacteristics>* key_characteristics) {
+ return GenerateKey(key_desc, key_blob, key_characteristics, &cert_chain_);
+}
+
+ErrorCode KeyMintAidlTestBase::GenerateKey(const AuthorizationSet& key_desc,
+ vector<uint8_t>* key_blob,
+ vector<KeyCharacteristics>* key_characteristics,
+ vector<Certificate>* cert_chain) {
std::optional<AttestationKey> attest_key = std::nullopt;
vector<Certificate> attest_cert_chain;
// If an attestation is requested, but the system is RKP-only, we need to supply an explicit
@@ -340,11 +434,10 @@
attest_key.value().issuerSubjectName = make_name_from_str("Android Keystore Key");
}
- ErrorCode error =
- GenerateKey(key_desc, attest_key, key_blob, key_characteristics, &cert_chain_);
+ ErrorCode error = GenerateKey(key_desc, attest_key, key_blob, key_characteristics, cert_chain);
if (error == ErrorCode::OK && attest_cert_chain.size() > 0) {
- cert_chain_.push_back(attest_cert_chain[0]);
+ cert_chain->push_back(attest_cert_chain[0]);
}
return error;
@@ -1049,13 +1142,12 @@
int openssl_padding = RSA_NO_PADDING;
switch (padding) {
case PaddingMode::NONE:
- ASSERT_TRUE(data_size <= key_len);
+ ASSERT_LE(data_size, key_len);
ASSERT_EQ(key_len, signature.size());
openssl_padding = RSA_NO_PADDING;
break;
case PaddingMode::RSA_PKCS1_1_5_SIGN:
- ASSERT_TRUE(data_size + kPkcs1UndigestedSignaturePaddingOverhead <=
- key_len);
+ ASSERT_LE(data_size + kPkcs1UndigestedSignaturePaddingOverhead, key_len);
openssl_padding = RSA_PKCS1_PADDING;
break;
default:
@@ -1812,7 +1904,7 @@
}
}
- // Verified boot key should be all 0's if the boot state is not verified or self signed
+ // Verified Boot key should be all zeroes if the boot state is "orange".
std::string empty_boot_key(32, '\0');
std::string verified_boot_key_str((const char*)verified_boot_key.data(),
verified_boot_key.size());
@@ -2271,7 +2363,7 @@
// ATTESTATION_IDS_NOT_PROVISIONED in this case.
ASSERT_TRUE((tag == TAG_ATTESTATION_ID_IMEI || tag == TAG_ATTESTATION_ID_MEID ||
tag == TAG_ATTESTATION_ID_SECOND_IMEI))
- << "incorrect error code on attestation ID mismatch";
+ << "incorrect error code on attestation ID mismatch for " << tag;
} else {
ADD_FAILURE() << "Error code " << result
<< " returned on attestation ID mismatch, should be CANNOT_ATTEST_IDS";
@@ -2353,7 +2445,7 @@
FILE* pipe = popen(command.c_str(), "r");
if (!pipe) {
- LOG(ERROR) << "popen failed.";
+ GTEST_LOG_(ERROR) << "popen failed.";
return result;
}
@@ -2379,7 +2471,7 @@
std::string output = exec_command(cmd);
if (output.empty()) {
- LOG(ERROR) << "Command failed. Cmd: " << cmd;
+ GTEST_LOG_(ERROR) << "Command failed. Cmd: " << cmd;
return "";
}
@@ -2387,13 +2479,14 @@
::android::base::Tokenize(::android::base::Trim(output), "Device IMEI:");
if (out.size() != 1) {
- LOG(ERROR) << "Error in parsing the command output. Cmd: " << cmd;
+ GTEST_LOG_(ERROR) << "Error in parsing the command output. Cmd: " << cmd;
return "";
}
std::string imei = ::android::base::Trim(out[0]);
if (imei.compare("null") == 0) {
- LOG(WARNING) << "Failed to get IMEI from Telephony service: value is null. Cmd: " << cmd;
+ GTEST_LOG_(WARNING) << "Failed to get IMEI from Telephony service: value is null. Cmd: "
+ << cmd;
return "";
}
diff --git a/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.h b/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.h
index 85ae93d..1c12136 100644
--- a/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.h
+++ b/security/keymint/aidl/vts/functional/KeyMintAidlTestBase.h
@@ -103,6 +103,7 @@
uint32_t vendor_patch_level() { return vendor_patch_level_; }
uint32_t boot_patch_level(const vector<KeyCharacteristics>& key_characteristics);
uint32_t boot_patch_level();
+ std::optional<vector<uint8_t>> getModuleHash();
bool isDeviceIdAttestationRequired();
bool isSecondImeiIdAttestationRequired();
std::optional<bool> isRkpOnly();
@@ -114,6 +115,10 @@
ErrorCode GenerateKey(const AuthorizationSet& key_desc, vector<uint8_t>* key_blob,
vector<KeyCharacteristics>* key_characteristics);
+ ErrorCode GenerateKey(const AuthorizationSet& key_desc, vector<uint8_t>* key_blob,
+ vector<KeyCharacteristics>* key_characteristics,
+ vector<Certificate>* cert_chain);
+
ErrorCode GenerateKey(const AuthorizationSet& key_desc,
const optional<AttestationKey>& attest_key, vector<uint8_t>* key_blob,
vector<KeyCharacteristics>* key_characteristics,
diff --git a/security/keymint/aidl/vts/functional/KeyMintTest.cpp b/security/keymint/aidl/vts/functional/KeyMintTest.cpp
index 527b5e0..067db78 100644
--- a/security/keymint/aidl/vts/functional/KeyMintTest.cpp
+++ b/security/keymint/aidl/vts/functional/KeyMintTest.cpp
@@ -643,6 +643,7 @@
// Verify that App data, ROT and auth timeout are NOT included.
EXPECT_FALSE(auths.Contains(TAG_ROOT_OF_TRUST));
EXPECT_FALSE(auths.Contains(TAG_APPLICATION_DATA));
+ EXPECT_FALSE(auths.Contains(TAG_MODULE_HASH));
EXPECT_FALSE(auths.Contains(TAG_AUTH_TIMEOUT, 301U));
// None of the tests specify CREATION_DATETIME so check that the KeyMint implementation
@@ -2583,7 +2584,8 @@
auto result = GenerateKey(
AuthorizationSetBuilder().EcdsaKey(256).Digest(Digest::NONE).SetDefaultValidity());
ASSERT_TRUE(result == ErrorCode::UNSUPPORTED_KEY_SIZE ||
- result == ErrorCode::UNSUPPORTED_EC_CURVE);
+ result == ErrorCode::UNSUPPORTED_EC_CURVE)
+ << "unexpected result " << result;
}
/*
@@ -2604,7 +2606,7 @@
.SigningKey()
.Digest(Digest::NONE)
.SetDefaultValidity());
- ASSERT_TRUE(result == ErrorCode::INVALID_ARGUMENT);
+ ASSERT_EQ(result, ErrorCode::INVALID_ARGUMENT);
}
/*
@@ -3183,7 +3185,8 @@
string result;
ErrorCode finish_error_code = Finish(message, &result);
EXPECT_TRUE(finish_error_code == ErrorCode::INVALID_INPUT_LENGTH ||
- finish_error_code == ErrorCode::INVALID_ARGUMENT);
+ finish_error_code == ErrorCode::INVALID_ARGUMENT)
+ << "unexpected error code " << finish_error_code;
// Very large message that should exceed the transfer buffer size of any reasonable TEE.
message = string(128 * 1024, 'a');
@@ -3193,7 +3196,8 @@
.Padding(PaddingMode::RSA_PKCS1_1_5_SIGN)));
finish_error_code = Finish(message, &result);
EXPECT_TRUE(finish_error_code == ErrorCode::INVALID_INPUT_LENGTH ||
- finish_error_code == ErrorCode::INVALID_ARGUMENT);
+ finish_error_code == ErrorCode::INVALID_ARGUMENT)
+ << "unexpected error code " << finish_error_code;
}
/*
@@ -3247,7 +3251,8 @@
.Digest(Digest::NONE)
.Digest(Digest::SHA1)
.Padding(PaddingMode::RSA_PKCS1_1_5_SIGN));
- ASSERT_TRUE(result == ErrorCode::UNSUPPORTED_DIGEST || result == ErrorCode::INVALID_ARGUMENT);
+ ASSERT_TRUE(result == ErrorCode::UNSUPPORTED_DIGEST || result == ErrorCode::INVALID_ARGUMENT)
+ << "unexpected result " << result;
ASSERT_EQ(ErrorCode::UNSUPPORTED_DIGEST,
Begin(KeyPurpose::SIGN,
@@ -3420,7 +3425,8 @@
}
auto rc = DeleteKey();
- ASSERT_TRUE(rc == ErrorCode::OK || rc == ErrorCode::UNIMPLEMENTED);
+ ASSERT_TRUE(rc == ErrorCode::OK || rc == ErrorCode::UNIMPLEMENTED)
+ << "unexpected result " << rc;
}
}
@@ -5704,7 +5710,8 @@
// is checked against those values, and found absent.
auto result = Begin(KeyPurpose::DECRYPT, params);
EXPECT_TRUE(result == ErrorCode::UNSUPPORTED_MGF_DIGEST ||
- result == ErrorCode::INCOMPATIBLE_MGF_DIGEST);
+ result == ErrorCode::INCOMPATIBLE_MGF_DIGEST)
+ << "unexpected result " << result;
}
/*
@@ -5969,14 +5976,16 @@
.BlockMode(BlockMode::ECB)
.Padding(PaddingMode::NONE));
EXPECT_TRUE(result == ErrorCode::INCOMPATIBLE_BLOCK_MODE ||
- result == ErrorCode::UNSUPPORTED_BLOCK_MODE);
+ result == ErrorCode::UNSUPPORTED_BLOCK_MODE)
+ << "unexpected result " << result;
result = Begin(KeyPurpose::ENCRYPT, AuthorizationSetBuilder()
.BlockMode(BlockMode::ECB)
.Padding(PaddingMode::NONE)
.Padding(PaddingMode::PKCS7));
EXPECT_TRUE(result == ErrorCode::INCOMPATIBLE_PADDING_MODE ||
- result == ErrorCode::UNSUPPORTED_PADDING_MODE);
+ result == ErrorCode::UNSUPPORTED_PADDING_MODE)
+ << "unexpected result " << result;
}
/*
@@ -8759,7 +8768,8 @@
// Re-enable and run at your own risk.
TEST_P(DestroyAttestationIdsTest, DISABLED_DestroyTest) {
auto result = DestroyAttestationIds();
- EXPECT_TRUE(result == ErrorCode::OK || result == ErrorCode::UNIMPLEMENTED);
+ EXPECT_TRUE(result == ErrorCode::OK || result == ErrorCode::UNIMPLEMENTED)
+ << "unexpected result " << result;
}
INSTANTIATE_KEYMINT_AIDL_TEST(DestroyAttestationIdsTest);
@@ -8892,6 +8902,49 @@
INSTANTIATE_KEYMINT_AIDL_TEST(EarlyBootKeyTest);
+using ModuleHashTest = KeyMintAidlTestBase;
+
+TEST_P(ModuleHashTest, SetSameValue) {
+ if (AidlVersion() < 4) {
+ GTEST_SKIP() << "Module hash only available for >= v4, this device is v" << AidlVersion();
+ }
+ auto module_hash = getModuleHash();
+ ASSERT_TRUE(module_hash.has_value());
+
+ // Setting the same value that's already there should work.
+ vector<KeyParameter> info = {Authorization(TAG_MODULE_HASH, module_hash.value())};
+ EXPECT_TRUE(keymint_->setAdditionalAttestationInfo(info).isOk());
+}
+
+TEST_P(ModuleHashTest, SetDifferentValue) {
+ if (AidlVersion() < 4) {
+ GTEST_SKIP() << "Module hash only available for >= v4, this device is v" << AidlVersion();
+ }
+ auto module_hash = getModuleHash();
+ ASSERT_TRUE(module_hash.has_value());
+ vector<uint8_t> wrong_hash = module_hash.value();
+ ASSERT_EQ(wrong_hash.size(), 32);
+
+ // Setting a slightly different value should fail.
+ wrong_hash[0] ^= 0x01;
+ vector<KeyParameter> info = {Authorization(TAG_MODULE_HASH, wrong_hash)};
+ EXPECT_EQ(GetReturnErrorCode(keymint_->setAdditionalAttestationInfo(info)),
+ ErrorCode::MODULE_HASH_ALREADY_SET);
+}
+
+TEST_P(ModuleHashTest, SetUnrelatedTag) {
+ if (AidlVersion() < 4) {
+ GTEST_SKIP() << "Module hash only available for >= v4, this device is v" << AidlVersion();
+ }
+
+ // Trying to set an unexpected tag should be silently ignored..
+ vector<uint8_t> data = {0, 1, 2, 3, 4};
+ vector<KeyParameter> info = {Authorization(TAG_ROOT_OF_TRUST, data)};
+ EXPECT_EQ(GetReturnErrorCode(keymint_->setAdditionalAttestationInfo(info)), ErrorCode::OK);
+}
+
+INSTANTIATE_KEYMINT_AIDL_TEST(ModuleHashTest);
+
using VsrRequirementTest = KeyMintAidlTestBase;
// @VsrTest = VSR-3.10-008
@@ -8912,6 +8965,18 @@
EXPECT_GE(AidlVersion(), 3) << "VSR 14+ requires KeyMint version 3";
}
+// @VsrTest = GMS-VSR-3.10-019
+TEST_P(VsrRequirementTest, Vsr16Test) {
+ int vsr_api_level = get_vsr_api_level();
+ if (vsr_api_level <= __ANDROID_API_V__) {
+ GTEST_SKIP() << "Applies only to VSR API level > 35, this device is: " << vsr_api_level;
+ }
+ if (SecLevel() == SecurityLevel::STRONGBOX) {
+ GTEST_SKIP() << "Applies only to TEE KeyMint, not StrongBox KeyMint";
+ }
+ EXPECT_GE(AidlVersion(), 4) << "VSR 16+ requires KeyMint version 4 in TEE";
+}
+
INSTANTIATE_KEYMINT_AIDL_TEST(VsrRequirementTest);
class InstanceTest : public testing::Test {
diff --git a/security/keymint/aidl/vts/performance/KeyMintBenchmark.cpp b/security/keymint/aidl/vts/performance/KeyMintBenchmark.cpp
index 49fd0c9..781b7a6 100644
--- a/security/keymint/aidl/vts/performance/KeyMintBenchmark.cpp
+++ b/security/keymint/aidl/vts/performance/KeyMintBenchmark.cpp
@@ -294,6 +294,7 @@
ErrorCode DeleteKey() {
Status result = keymint_->deleteKey(key_blob_);
key_blob_ = vector<uint8_t>();
+ key_transform_ = "";
return GetReturnErrorCode(result);
}
diff --git a/security/keymint/support/Android.bp b/security/keymint/support/Android.bp
index f313cf3..7050141 100644
--- a/security/keymint/support/Android.bp
+++ b/security/keymint/support/Android.bp
@@ -30,6 +30,7 @@
"-Wall",
"-Wextra",
"-Werror",
+ "-DKEYMINT_HAL_V4",
],
srcs: [
"attestation_record.cpp",
@@ -114,6 +115,7 @@
cc_test {
name: "libkeymint_remote_prov_support_test",
+ cpp_std: "c++20",
srcs: ["remote_prov_utils_test.cpp"],
static_libs: [
"android.hardware.security.rkp-V3-ndk",
diff --git a/security/keymint/support/attestation_record.cpp b/security/keymint/support/attestation_record.cpp
index 5a26611..d2cbf88 100644
--- a/security/keymint/support/attestation_record.cpp
+++ b/security/keymint/support/attestation_record.cpp
@@ -106,6 +106,7 @@
ASN1_NULL* device_unique_attestation;
ASN1_NULL* identity_credential;
ASN1_OCTET_STRING* attestation_id_second_imei;
+ ASN1_OCTET_STRING* module_hash;
} KM_AUTH_LIST;
ASN1_SEQUENCE(KM_AUTH_LIST) = {
@@ -173,6 +174,7 @@
TAG_IDENTITY_CREDENTIAL_KEY.maskedTag()),
ASN1_EXP_OPT(KM_AUTH_LIST, attestation_id_second_imei, ASN1_OCTET_STRING,
TAG_ATTESTATION_ID_SECOND_IMEI.maskedTag()),
+ ASN1_EXP_OPT(KM_AUTH_LIST, module_hash, ASN1_OCTET_STRING, TAG_MODULE_HASH.maskedTag()),
} ASN1_SEQUENCE_END(KM_AUTH_LIST);
IMPLEMENT_ASN1_FUNCTIONS(KM_AUTH_LIST);
@@ -327,6 +329,7 @@
copyAuthTag(record->device_unique_attestation, TAG_DEVICE_UNIQUE_ATTESTATION, auth_list);
copyAuthTag(record->identity_credential, TAG_IDENTITY_CREDENTIAL_KEY, auth_list);
copyAuthTag(record->attestation_id_second_imei, TAG_ATTESTATION_ID_SECOND_IMEI, auth_list);
+ copyAuthTag(record->module_hash, TAG_MODULE_HASH, auth_list);
return ErrorCode::OK;
}
diff --git a/security/keymint/support/fuzzer/keymint_remote_prov_fuzzer.cpp b/security/keymint/support/fuzzer/keymint_remote_prov_fuzzer.cpp
index 9b74fbb..ebccf25 100644
--- a/security/keymint/support/fuzzer/keymint_remote_prov_fuzzer.cpp
+++ b/security/keymint/support/fuzzer/keymint_remote_prov_fuzzer.cpp
@@ -74,16 +74,20 @@
uint8_t challengeSize = mFdp.ConsumeIntegralInRange<uint8_t>(kMinSize, kChallengeSize);
std::vector<uint8_t> challenge = mFdp.ConsumeBytes<uint8_t>(challengeSize);
+ RpcHardwareInfo rpcHardwareInfo;
+ gRPC->getHardwareInfo(&rpcHardwareInfo);
+
std::vector<uint8_t> csr;
gRPC->generateCertificateRequestV2(keysToSign, challenge, &csr);
while (mFdp.remaining_bytes()) {
auto invokeProvAPI = mFdp.PickValueInArray<const std::function<void()>>({
[&]() {
- verifyFactoryCsr(cborKeysToSign, csr, gRPC.get(), kServiceName, challenge);
+ verifyFactoryCsr(cborKeysToSign, csr, rpcHardwareInfo, kServiceName, challenge);
},
[&]() {
- verifyProductionCsr(cborKeysToSign, csr, gRPC.get(), kServiceName, challenge);
+ verifyProductionCsr(cborKeysToSign, csr, rpcHardwareInfo, kServiceName,
+ challenge);
},
[&]() { isCsrWithProperDiceChain(csr, kServiceName); },
});
diff --git a/security/keymint/support/include/keymint_support/keymint_tags.h b/security/keymint/support/include/keymint_support/keymint_tags.h
index 823899a..89c9c0b 100644
--- a/security/keymint/support/include/keymint_support/keymint_tags.h
+++ b/security/keymint/support/include/keymint_support/keymint_tags.h
@@ -103,6 +103,15 @@
DECLARE_TYPED_TAG(MAX_USES_PER_BOOT);
DECLARE_TYPED_TAG(MIN_MAC_LENGTH);
DECLARE_TYPED_TAG(MIN_SECONDS_BETWEEN_OPS);
+// TODO: remove special case macro once v4 HAL is frozen
+#ifdef KEYMINT_HAL_V4
+DECLARE_TYPED_TAG(MODULE_HASH);
+#else
+// When building for previous frozen HAL, the `Tag::MODULE_NAME` constant is not available.
+static const Tag Tag_MODULE_HASH = static_cast<Tag>(-1879047468);
+typedef typename Tag2TypedTag<Tag_MODULE_HASH>::type TAG_MODULE_HASH_t;
+static TAG_MODULE_HASH_t TAG_MODULE_HASH;
+#endif
DECLARE_TYPED_TAG(NONCE);
DECLARE_TYPED_TAG(NO_AUTH_REQUIRED);
DECLARE_TYPED_TAG(ORIGIN);
diff --git a/security/keymint/support/include/remote_prov/MockIRemotelyProvisionedComponent.h b/security/keymint/support/include/remote_prov/MockIRemotelyProvisionedComponent.h
deleted file mode 100644
index 4fa39c2..0000000
--- a/security/keymint/support/include/remote_prov/MockIRemotelyProvisionedComponent.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 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.
- */
-
-#pragma once
-
-#include <aidl/android/hardware/security/keymint/IRemotelyProvisionedComponent.h>
-#include <aidl/android/hardware/security/keymint/RpcHardwareInfo.h>
-#include <android-base/properties.h>
-#include <gmock/gmock.h>
-#include <gtest/gtest.h>
-
-#include <cstdint>
-
-namespace aidl::android::hardware::security::keymint::remote_prov {
-
-using ::ndk::ScopedAStatus;
-
-class MockIRemotelyProvisionedComponent : public IRemotelyProvisionedComponentDefault {
- public:
- MOCK_METHOD(ScopedAStatus, getHardwareInfo, (RpcHardwareInfo * _aidl_return), (override));
- MOCK_METHOD(ScopedAStatus, generateEcdsaP256KeyPair,
- (bool in_testMode, MacedPublicKey* out_macedPublicKey,
- std::vector<uint8_t>* _aidl_return),
- (override));
- MOCK_METHOD(ScopedAStatus, generateCertificateRequest,
- (bool in_testMode, const std::vector<MacedPublicKey>& in_keysToSign,
- const std::vector<uint8_t>& in_endpointEncryptionCertChain,
- const std::vector<uint8_t>& in_challenge, DeviceInfo* out_deviceInfo,
- ProtectedData* out_protectedData, std::vector<uint8_t>* _aidl_return),
- (override));
- MOCK_METHOD(ScopedAStatus, generateCertificateRequestV2,
- (const std::vector<MacedPublicKey>& in_keysToSign,
- const std::vector<uint8_t>& in_challenge, std::vector<uint8_t>* _aidl_return),
- (override));
- MOCK_METHOD(ScopedAStatus, getInterfaceVersion, (int32_t* _aidl_return), (override));
- MOCK_METHOD(ScopedAStatus, getInterfaceHash, (std::string * _aidl_return), (override));
-};
-
-} // namespace aidl::android::hardware::security::keymint::remote_prov
\ No newline at end of file
diff --git a/security/keymint/support/include/remote_prov/remote_prov_utils.h b/security/keymint/support/include/remote_prov/remote_prov_utils.h
index caeb7ff..6cb00f2 100644
--- a/security/keymint/support/include/remote_prov/remote_prov_utils.h
+++ b/security/keymint/support/include/remote_prov/remote_prov_utils.h
@@ -99,7 +99,7 @@
* e.g. for "android.hardware.security.keymint.IRemotelyProvisionedComponent/avf",
* it returns "avf".
*/
-std::string deviceSuffix(const std::string& name);
+std::string_view deviceSuffix(std::string_view name);
struct EekChain {
bytevec chain;
@@ -153,7 +153,7 @@
* is parsed in the manufacturing process.
*/
ErrMsgOr<std::unique_ptr<cppbor::Map>> parseAndValidateFactoryDeviceInfo(
- const std::vector<uint8_t>& deviceInfoBytes, IRemotelyProvisionedComponent* provisionable);
+ const std::vector<uint8_t>& deviceInfoBytes, const RpcHardwareInfo& info);
/**
* Parses a DeviceInfo structure from the given CBOR data. The parsed data is then validated to
@@ -162,7 +162,7 @@
* suitable for the end user.
*/
ErrMsgOr<std::unique_ptr<cppbor::Map>> parseAndValidateProductionDeviceInfo(
- const std::vector<uint8_t>& deviceInfoBytes, IRemotelyProvisionedComponent* provisionable);
+ const std::vector<uint8_t>& deviceInfoBytes, const RpcHardwareInfo& info);
/**
* Verify the protected data as if the device is still early in the factory process and may not
@@ -171,36 +171,39 @@
ErrMsgOr<std::vector<BccEntryData>> verifyFactoryProtectedData(
const DeviceInfo& deviceInfo, const cppbor::Array& keysToSign,
const std::vector<uint8_t>& keysToSignMac, const ProtectedData& protectedData,
- const EekChain& eekChain, const std::vector<uint8_t>& eekId, int32_t supportedEekCurve,
- IRemotelyProvisionedComponent* provisionable, const std::string& instanceName,
- const std::vector<uint8_t>& challenge);
+ const EekChain& eekChain, const std::vector<uint8_t>& eekId, const RpcHardwareInfo& info,
+ const std::string& instanceName, const std::vector<uint8_t>& challenge);
/**
* Verify the protected data as if the device is a final production sample.
*/
ErrMsgOr<std::vector<BccEntryData>> verifyProductionProtectedData(
const DeviceInfo& deviceInfo, const cppbor::Array& keysToSign,
const std::vector<uint8_t>& keysToSignMac, const ProtectedData& protectedData,
- const EekChain& eekChain, const std::vector<uint8_t>& eekId, int32_t supportedEekCurve,
- IRemotelyProvisionedComponent* provisionable, const std::string& instanceName,
- const std::vector<uint8_t>& challenge, bool allowAnyMode = false);
+ const EekChain& eekChain, const std::vector<uint8_t>& eekId, const RpcHardwareInfo& info,
+ const std::string& instanceName, const std::vector<uint8_t>& challenge,
+ bool allowAnyMode = false);
/**
* Verify the CSR as if the device is still early in the factory process and may not
* have all device identifiers provisioned yet.
*/
-ErrMsgOr<std::unique_ptr<cppbor::Array>> verifyFactoryCsr(
- const cppbor::Array& keysToSign, const std::vector<uint8_t>& csr,
- IRemotelyProvisionedComponent* provisionable, const std::string& instanceName,
- const std::vector<uint8_t>& challenge, bool allowDegenerate = true,
- bool requireUdsCerts = false);
+ErrMsgOr<std::unique_ptr<cppbor::Array>> verifyFactoryCsr(const cppbor::Array& keysToSign,
+ const std::vector<uint8_t>& csr,
+ const RpcHardwareInfo& info,
+ const std::string& instanceName,
+ const std::vector<uint8_t>& challenge,
+ bool allowDegenerate = true,
+ bool requireUdsCerts = false);
/**
* Verify the CSR as if the device is a final production sample.
*/
-ErrMsgOr<std::unique_ptr<cppbor::Array>> verifyProductionCsr(
- const cppbor::Array& keysToSign, const std::vector<uint8_t>& csr,
- IRemotelyProvisionedComponent* provisionable, const std::string& instanceName,
- const std::vector<uint8_t>& challenge, bool allowAnyMode = false);
+ErrMsgOr<std::unique_ptr<cppbor::Array>> verifyProductionCsr(const cppbor::Array& keysToSign,
+ const std::vector<uint8_t>& csr,
+ const RpcHardwareInfo& info,
+ const std::string& instanceName,
+ const std::vector<uint8_t>& challenge,
+ bool allowAnyMode = false);
/** Checks whether the CSR has a proper DICE chain. */
ErrMsgOr<bool> isCsrWithProperDiceChain(const std::vector<uint8_t>& csr,
diff --git a/security/keymint/support/remote_prov_utils.cpp b/security/keymint/support/remote_prov_utils.cpp
index 464d912..e11f021 100644
--- a/security/keymint/support/remote_prov_utils.cpp
+++ b/security/keymint/support/remote_prov_utils.cpp
@@ -52,8 +52,8 @@
using X509_Ptr = bssl::UniquePtr<X509>;
using CRYPTO_BUFFER_Ptr = bssl::UniquePtr<CRYPTO_BUFFER>;
-std::string deviceSuffix(const std::string& name) {
- size_t pos = name.rfind('/');
+std::string_view deviceSuffix(std::string_view name) {
+ auto pos = name.rfind('/');
if (pos == std::string::npos) {
return name;
}
@@ -483,7 +483,7 @@
}
ErrMsgOr<std::unique_ptr<cppbor::Map>> parseAndValidateDeviceInfo(
- const std::vector<uint8_t>& deviceInfoBytes, IRemotelyProvisionedComponent* provisionable,
+ const std::vector<uint8_t>& deviceInfoBytes, const RpcHardwareInfo& rpcHardwareInfo,
bool isFactory) {
const cppbor::Array kValidVbStates = {"green", "yellow", "orange"};
const cppbor::Array kValidBootloaderStates = {"locked", "unlocked"};
@@ -530,9 +530,7 @@
return "DeviceInfo ordering is non-canonical.";
}
- RpcHardwareInfo info;
- provisionable->getHardwareInfo(&info);
- if (info.versionNumber < 3) {
+ if (rpcHardwareInfo.versionNumber < 3) {
const std::unique_ptr<cppbor::Item>& version = parsed->get("version");
if (!version) {
return "Device info is missing version";
@@ -540,10 +538,10 @@
if (!version->asUint()) {
return "version must be an unsigned integer";
}
- if (version->asUint()->value() != info.versionNumber) {
+ if (version->asUint()->value() != rpcHardwareInfo.versionNumber) {
return "DeviceInfo version (" + std::to_string(version->asUint()->value()) +
") does not match the remotely provisioned component version (" +
- std::to_string(info.versionNumber) + ").";
+ std::to_string(rpcHardwareInfo.versionNumber) + ").";
}
}
// Bypasses the device info validation since the device info in AVF is currently
@@ -552,14 +550,14 @@
// TODO(b/300911665): This check is temporary and will be replaced once the markers
// on the DICE chain become available. We need to determine if the CSR is from the
// RKP VM using the markers on the DICE chain.
- if (info.uniqueId == "AVF Remote Provisioning 1") {
+ if (rpcHardwareInfo.uniqueId == "AVF Remote Provisioning 1") {
return std::move(parsed);
}
std::string error;
std::string tmp;
std::set<std::string_view> previousKeys;
- switch (info.versionNumber) {
+ switch (rpcHardwareInfo.versionNumber) {
case 3:
if (isTeeDeviceInfo(*parsed) && parsed->size() != kNumTeeDeviceInfoEntries) {
error += fmt::format(
@@ -626,7 +624,7 @@
kValidAttIdStates);
break;
default:
- return "Unrecognized version: " + std::to_string(info.versionNumber);
+ return "Unrecognized version: " + std::to_string(rpcHardwareInfo.versionNumber);
}
if (!error.empty()) {
@@ -637,13 +635,13 @@
}
ErrMsgOr<std::unique_ptr<cppbor::Map>> parseAndValidateFactoryDeviceInfo(
- const std::vector<uint8_t>& deviceInfoBytes, IRemotelyProvisionedComponent* provisionable) {
- return parseAndValidateDeviceInfo(deviceInfoBytes, provisionable, /*isFactory=*/true);
+ const std::vector<uint8_t>& deviceInfoBytes, const RpcHardwareInfo& rpcHardwareInfo) {
+ return parseAndValidateDeviceInfo(deviceInfoBytes, rpcHardwareInfo, /*isFactory=*/true);
}
ErrMsgOr<std::unique_ptr<cppbor::Map>> parseAndValidateProductionDeviceInfo(
- const std::vector<uint8_t>& deviceInfoBytes, IRemotelyProvisionedComponent* provisionable) {
- return parseAndValidateDeviceInfo(deviceInfoBytes, provisionable, /*isFactory=*/false);
+ const std::vector<uint8_t>& deviceInfoBytes, const RpcHardwareInfo& rpcHardwareInfo) {
+ return parseAndValidateDeviceInfo(deviceInfoBytes, rpcHardwareInfo, /*isFactory=*/false);
}
ErrMsgOr<bytevec> getSessionKey(ErrMsgOr<std::pair<bytevec, bytevec>>& senderPubkey,
@@ -661,8 +659,8 @@
ErrMsgOr<std::vector<BccEntryData>> verifyProtectedData(
const DeviceInfo& deviceInfo, const cppbor::Array& keysToSign,
const std::vector<uint8_t>& keysToSignMac, const ProtectedData& protectedData,
- const EekChain& eekChain, const std::vector<uint8_t>& eekId, int32_t supportedEekCurve,
- IRemotelyProvisionedComponent* provisionable, const std::string& instanceName,
+ const EekChain& eekChain, const std::vector<uint8_t>& eekId,
+ const RpcHardwareInfo& rpcHardwareInfo, const std::string& instanceName,
const std::vector<uint8_t>& challenge, bool isFactory, bool allowAnyMode = false) {
auto [parsedProtectedData, _, protDataErrMsg] = cppbor::parse(protectedData.protectedData);
if (!parsedProtectedData) {
@@ -685,7 +683,7 @@
return "The COSE_encrypt recipient does not match the expected EEK identifier";
}
- auto sessionKey = getSessionKey(senderPubkey, eekChain, supportedEekCurve);
+ auto sessionKey = getSessionKey(senderPubkey, eekChain, rpcHardwareInfo.supportedEekCurve);
if (!sessionKey) {
return sessionKey.message();
}
@@ -726,7 +724,7 @@
}
auto deviceInfoResult =
- parseAndValidateDeviceInfo(deviceInfo.deviceInfo, provisionable, isFactory);
+ parseAndValidateDeviceInfo(deviceInfo.deviceInfo, rpcHardwareInfo, isFactory);
if (!deviceInfoResult) {
return deviceInfoResult.message();
}
@@ -762,22 +760,22 @@
ErrMsgOr<std::vector<BccEntryData>> verifyFactoryProtectedData(
const DeviceInfo& deviceInfo, const cppbor::Array& keysToSign,
const std::vector<uint8_t>& keysToSignMac, const ProtectedData& protectedData,
- const EekChain& eekChain, const std::vector<uint8_t>& eekId, int32_t supportedEekCurve,
- IRemotelyProvisionedComponent* provisionable, const std::string& instanceName,
+ const EekChain& eekChain, const std::vector<uint8_t>& eekId,
+ const RpcHardwareInfo& rpcHardwareInfo, const std::string& instanceName,
const std::vector<uint8_t>& challenge) {
return verifyProtectedData(deviceInfo, keysToSign, keysToSignMac, protectedData, eekChain,
- eekId, supportedEekCurve, provisionable, instanceName, challenge,
+ eekId, rpcHardwareInfo, instanceName, challenge,
/*isFactory=*/true);
}
ErrMsgOr<std::vector<BccEntryData>> verifyProductionProtectedData(
const DeviceInfo& deviceInfo, const cppbor::Array& keysToSign,
const std::vector<uint8_t>& keysToSignMac, const ProtectedData& protectedData,
- const EekChain& eekChain, const std::vector<uint8_t>& eekId, int32_t supportedEekCurve,
- IRemotelyProvisionedComponent* provisionable, const std::string& instanceName,
+ const EekChain& eekChain, const std::vector<uint8_t>& eekId,
+ const RpcHardwareInfo& rpcHardwareInfo, const std::string& instanceName,
const std::vector<uint8_t>& challenge, bool allowAnyMode) {
return verifyProtectedData(deviceInfo, keysToSign, keysToSignMac, protectedData, eekChain,
- eekId, supportedEekCurve, provisionable, instanceName, challenge,
+ eekId, rpcHardwareInfo, instanceName, challenge,
/*isFactory=*/false, allowAnyMode);
}
@@ -912,7 +910,7 @@
ErrMsgOr<std::unique_ptr<cppbor::Array>> parseAndValidateCsrPayload(
const cppbor::Array& keysToSign, const std::vector<uint8_t>& csrPayload,
- IRemotelyProvisionedComponent* provisionable, bool isFactory) {
+ const RpcHardwareInfo& rpcHardwareInfo, bool isFactory) {
auto [parsedCsrPayload, _, errMsg] = cppbor::parse(csrPayload);
if (!parsedCsrPayload) {
return errMsg;
@@ -949,7 +947,8 @@
return "Keys must be an Array.";
}
- auto result = parseAndValidateDeviceInfo(signedDeviceInfo->encode(), provisionable, isFactory);
+ auto result =
+ parseAndValidateDeviceInfo(signedDeviceInfo->encode(), rpcHardwareInfo, isFactory);
if (!result) {
return result.message();
}
@@ -1100,13 +1099,12 @@
ErrMsgOr<std::unique_ptr<cppbor::Array>> verifyCsr(
const cppbor::Array& keysToSign, const std::vector<uint8_t>& csr,
- IRemotelyProvisionedComponent* provisionable, const std::string& instanceName,
+ const RpcHardwareInfo& rpcHardwareInfo, const std::string& instanceName,
const std::vector<uint8_t>& challenge, bool isFactory, bool allowAnyMode = false,
bool allowDegenerate = true, bool requireUdsCerts = false) {
- RpcHardwareInfo info;
- provisionable->getHardwareInfo(&info);
- if (info.versionNumber != 3) {
- return "Remotely provisioned component version (" + std::to_string(info.versionNumber) +
+ if (rpcHardwareInfo.versionNumber != 3) {
+ return "Remotely provisioned component version (" +
+ std::to_string(rpcHardwareInfo.versionNumber) +
") does not match expected version (3).";
}
@@ -1117,61 +1115,46 @@
return csrPayload.message();
}
- return parseAndValidateCsrPayload(keysToSign, *csrPayload, provisionable, isFactory);
+ return parseAndValidateCsrPayload(keysToSign, *csrPayload, rpcHardwareInfo, isFactory);
}
ErrMsgOr<std::unique_ptr<cppbor::Array>> verifyFactoryCsr(
const cppbor::Array& keysToSign, const std::vector<uint8_t>& csr,
- IRemotelyProvisionedComponent* provisionable, const std::string& instanceName,
+ const RpcHardwareInfo& rpcHardwareInfo, const std::string& instanceName,
const std::vector<uint8_t>& challenge, bool allowDegenerate, bool requireUdsCerts) {
- return verifyCsr(keysToSign, csr, provisionable, instanceName, challenge, /*isFactory=*/true,
+ return verifyCsr(keysToSign, csr, rpcHardwareInfo, instanceName, challenge, /*isFactory=*/true,
/*allowAnyMode=*/false, allowDegenerate, requireUdsCerts);
}
-ErrMsgOr<std::unique_ptr<cppbor::Array>> verifyProductionCsr(
- const cppbor::Array& keysToSign, const std::vector<uint8_t>& csr,
- IRemotelyProvisionedComponent* provisionable, const std::string& instanceName,
- const std::vector<uint8_t>& challenge, bool allowAnyMode) {
- return verifyCsr(keysToSign, csr, provisionable, instanceName, challenge, /*isFactory=*/false,
+ErrMsgOr<std::unique_ptr<cppbor::Array>> verifyProductionCsr(const cppbor::Array& keysToSign,
+ const std::vector<uint8_t>& csr,
+ const RpcHardwareInfo& rpcHardwareInfo,
+ const std::string& instanceName,
+ const std::vector<uint8_t>& challenge,
+ bool allowAnyMode) {
+ return verifyCsr(keysToSign, csr, rpcHardwareInfo, instanceName, challenge, /*isFactory=*/false,
allowAnyMode);
}
-ErrMsgOr<bool> isCsrWithProperDiceChain(const std::vector<uint8_t>& csr,
+ErrMsgOr<bool> isCsrWithProperDiceChain(const std::vector<uint8_t>& encodedCsr,
const std::string& instanceName) {
- auto [parsedRequest, _, csrErrMsg] = cppbor::parse(csr);
- if (!parsedRequest) {
- return csrErrMsg;
- }
- if (!parsedRequest->asArray()) {
- return "AuthenticatedRequest is not a CBOR array.";
- }
- if (parsedRequest->asArray()->size() != 4U) {
- return "AuthenticatedRequest must contain version, UDS certificates, DICE chain, and "
- "signed data. However, the parsed AuthenticatedRequest has " +
- std::to_string(parsedRequest->asArray()->size()) + " entries.";
- }
-
- auto version = parsedRequest->asArray()->get(0)->asUint();
- auto diceCertChain = parsedRequest->asArray()->get(2)->asArray();
-
- if (!version || version->value() != 1U) {
- return "AuthenticatedRequest version must be an unsigned integer and must be equal to 1.";
- }
- if (!diceCertChain) {
- return "AuthenticatedRequest DiceCertChain must be an Array.";
- }
-
- // DICE chain is [ pubkey, + DiceChainEntry ].
auto diceChainKind = getDiceChainKind();
if (!diceChainKind) {
return diceChainKind.message();
}
- auto encodedDiceChain = diceCertChain->encode();
- auto chain = hwtrust::DiceChain::Verify(encodedDiceChain, *diceChainKind,
- /*allowAnyMode=*/false, deviceSuffix(instanceName));
- if (!chain.ok()) return chain.error().message();
- return chain->IsProper();
+ auto csr = hwtrust::Csr::validate(encodedCsr, *diceChainKind, false /*allowAnyMode*/,
+ deviceSuffix(instanceName));
+ if (!csr.ok()) {
+ return csr.error().message();
+ }
+
+ auto diceChain = csr->getDiceChain();
+ if (!diceChain.ok()) {
+ return diceChain.error().message();
+ }
+
+ return diceChain->IsProper();
}
} // namespace aidl::android::hardware::security::keymint::remote_prov
diff --git a/security/keymint/support/remote_prov_utils_test.cpp b/security/keymint/support/remote_prov_utils_test.cpp
index 8ffb149..6f6a2d6 100644
--- a/security/keymint/support/remote_prov_utils_test.cpp
+++ b/security/keymint/support/remote_prov_utils_test.cpp
@@ -25,7 +25,6 @@
#include <keymaster/logger.h>
#include <keymaster/remote_provisioning_utils.h>
#include <openssl/curve25519.h>
-#include <remote_prov/MockIRemotelyProvisionedComponent.h>
#include <remote_prov/remote_prov_utils.h>
#include <algorithm>
@@ -82,6 +81,76 @@
0x50, 0x12, 0x82, 0x37, 0xfe, 0xa4, 0x07, 0xc3, 0xd5, 0xc3, 0x78, 0xcc, 0xf9, 0xef, 0xe1,
0x95, 0x38, 0x9f, 0xb0, 0x79, 0x16, 0x4c, 0x4a, 0x23, 0xc4, 0xdc, 0x35, 0x4e, 0x0f};
+inline const std::vector<uint8_t> kCsrWithDegenerateDiceChain{
+ 0x85, 0x01, 0xa0, 0x82, 0xa6, 0x01, 0x02, 0x03, 0x26, 0x20, 0x01, 0x21, 0x58, 0x20, 0x65,
+ 0xe0, 0x51, 0x62, 0x45, 0x17, 0xcc, 0xa8, 0x40, 0x41, 0x6d, 0xc0, 0x86, 0x7a, 0x15, 0x6e,
+ 0xee, 0x04, 0xae, 0xbd, 0x05, 0x13, 0x36, 0xcb, 0xd2, 0x8d, 0xd8, 0x80, 0x16, 0xc1, 0x69,
+ 0x0d, 0x22, 0x58, 0x20, 0xea, 0xa1, 0x37, 0xd5, 0x01, 0xbd, 0xe0, 0x25, 0x6a, 0x3d, 0x4c,
+ 0xcd, 0x31, 0xa1, 0x4d, 0xa6, 0x80, 0x82, 0x03, 0x40, 0xe2, 0x88, 0x81, 0x53, 0xc3, 0xb3,
+ 0x6d, 0xf7, 0xf4, 0x10, 0xde, 0x96, 0x23, 0x58, 0x20, 0x24, 0x69, 0x44, 0x6e, 0xf5, 0xcc,
+ 0x18, 0xfe, 0x63, 0xac, 0x5e, 0x85, 0x9c, 0xfc, 0x9d, 0xfa, 0x90, 0xee, 0x6c, 0xc2, 0x22,
+ 0x49, 0x02, 0xc7, 0x93, 0xf4, 0x30, 0xf1, 0x51, 0x11, 0x20, 0x33, 0x84, 0x43, 0xa1, 0x01,
+ 0x26, 0xa0, 0x58, 0x97, 0xa5, 0x01, 0x66, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x02, 0x67,
+ 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x3a, 0x00, 0x47, 0x44, 0x56, 0x41, 0x01, 0x3a,
+ 0x00, 0x47, 0x44, 0x57, 0x58, 0x70, 0xa6, 0x01, 0x02, 0x03, 0x26, 0x20, 0x01, 0x21, 0x58,
+ 0x20, 0x65, 0xe0, 0x51, 0x62, 0x45, 0x17, 0xcc, 0xa8, 0x40, 0x41, 0x6d, 0xc0, 0x86, 0x7a,
+ 0x15, 0x6e, 0xee, 0x04, 0xae, 0xbd, 0x05, 0x13, 0x36, 0xcb, 0xd2, 0x8d, 0xd8, 0x80, 0x16,
+ 0xc1, 0x69, 0x0d, 0x22, 0x58, 0x20, 0xea, 0xa1, 0x37, 0xd5, 0x01, 0xbd, 0xe0, 0x25, 0x6a,
+ 0x3d, 0x4c, 0xcd, 0x31, 0xa1, 0x4d, 0xa6, 0x80, 0x82, 0x03, 0x40, 0xe2, 0x88, 0x81, 0x53,
+ 0xc3, 0xb3, 0x6d, 0xf7, 0xf4, 0x10, 0xde, 0x96, 0x23, 0x58, 0x20, 0x24, 0x69, 0x44, 0x6e,
+ 0xf5, 0xcc, 0x18, 0xfe, 0x63, 0xac, 0x5e, 0x85, 0x9c, 0xfc, 0x9d, 0xfa, 0x90, 0xee, 0x6c,
+ 0xc2, 0x22, 0x49, 0x02, 0xc7, 0x93, 0xf4, 0x30, 0xf1, 0x51, 0x11, 0x20, 0x33, 0x3a, 0x00,
+ 0x47, 0x44, 0x58, 0x41, 0x20, 0x58, 0x40, 0x16, 0xb9, 0x51, 0xdf, 0x31, 0xad, 0xa0, 0x3d,
+ 0x98, 0x40, 0x85, 0xdf, 0xd9, 0xbe, 0xf6, 0x79, 0x62, 0x36, 0x8b, 0x60, 0xaa, 0x79, 0x8e,
+ 0x52, 0x04, 0xdd, 0xba, 0x39, 0xa2, 0x58, 0x9c, 0x60, 0xd5, 0x96, 0x51, 0x42, 0xe2, 0xa5,
+ 0x57, 0x58, 0xb4, 0x89, 0x2c, 0x94, 0xb9, 0xda, 0xe7, 0x93, 0x85, 0xda, 0x64, 0xa0, 0x52,
+ 0xfc, 0x6b, 0xb1, 0x0a, 0xa8, 0x13, 0xd9, 0x84, 0xfb, 0x34, 0x77, 0x84, 0x43, 0xa1, 0x01,
+ 0x26, 0xa0, 0x59, 0x02, 0x0f, 0x82, 0x58, 0x20, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
+ 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x59, 0x01, 0xe9, 0x84, 0x03,
+ 0x67, 0x6b, 0x65, 0x79, 0x6d, 0x69, 0x6e, 0x74, 0xae, 0x65, 0x62, 0x72, 0x61, 0x6e, 0x64,
+ 0x66, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x65, 0x66, 0x75, 0x73, 0x65, 0x64, 0x01, 0x65,
+ 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x65, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x66, 0x64, 0x65, 0x76,
+ 0x69, 0x63, 0x65, 0x66, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x67, 0x70, 0x72, 0x6f, 0x64,
+ 0x75, 0x63, 0x74, 0x65, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x68, 0x76, 0x62, 0x5f, 0x73, 0x74,
+ 0x61, 0x74, 0x65, 0x65, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x6a, 0x6f, 0x73, 0x5f, 0x76, 0x65,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x62, 0x31, 0x32, 0x6c, 0x6d, 0x61, 0x6e, 0x75, 0x66, 0x61,
+ 0x63, 0x74, 0x75, 0x72, 0x65, 0x72, 0x66, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x6d, 0x76,
+ 0x62, 0x6d, 0x65, 0x74, 0x61, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x4f, 0x11, 0x22,
+ 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x6e, 0x73,
+ 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x63, 0x74,
+ 0x65, 0x65, 0x70, 0x62, 0x6f, 0x6f, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x6c,
+ 0x65, 0x76, 0x65, 0x6c, 0x1a, 0x01, 0x34, 0x8c, 0x62, 0x70, 0x62, 0x6f, 0x6f, 0x74, 0x6c,
+ 0x6f, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x66, 0x6c, 0x6f, 0x63,
+ 0x6b, 0x65, 0x64, 0x72, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x70, 0x61, 0x74, 0x63,
+ 0x68, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x1a, 0x01, 0x34, 0x8c, 0x61, 0x72, 0x76, 0x65,
+ 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x70, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x6c, 0x65, 0x76, 0x65,
+ 0x6c, 0x1a, 0x01, 0x34, 0x8c, 0x63, 0x82, 0xa6, 0x01, 0x02, 0x03, 0x26, 0x20, 0x01, 0x21,
+ 0x58, 0x20, 0x46, 0xbd, 0xfc, 0xed, 0xa6, 0x94, 0x9a, 0xc4, 0x5e, 0x27, 0xcf, 0x24, 0x25,
+ 0xc5, 0x0c, 0x7d, 0xed, 0x8f, 0x21, 0xe0, 0x47, 0x81, 0x5a, 0xdc, 0x3b, 0xd4, 0x9e, 0x13,
+ 0xb6, 0x06, 0x36, 0x70, 0x22, 0x58, 0x20, 0x0a, 0xbd, 0xbc, 0x0d, 0x19, 0xba, 0xcc, 0xdc,
+ 0x00, 0x64, 0x31, 0x4c, 0x84, 0x66, 0x1d, 0xfb, 0x50, 0xd0, 0xe3, 0xf8, 0x78, 0x9d, 0xf9,
+ 0x77, 0x2b, 0x40, 0x6b, 0xb5, 0x8e, 0xd3, 0xf8, 0xa9, 0x23, 0x58, 0x21, 0x00, 0x9c, 0x42,
+ 0x3f, 0x79, 0x76, 0xa0, 0xd1, 0x98, 0x58, 0xbb, 0x9b, 0x9e, 0xfb, 0x3b, 0x08, 0xf2, 0xe1,
+ 0xa3, 0xfe, 0xf4, 0x21, 0x5b, 0x97, 0x2d, 0xcb, 0x9a, 0x55, 0x1a, 0x7f, 0xa7, 0xc1, 0xa8,
+ 0xa6, 0x01, 0x02, 0x03, 0x26, 0x20, 0x01, 0x21, 0x58, 0x20, 0xef, 0xd3, 0x88, 0xc4, 0xbc,
+ 0xce, 0x51, 0x4d, 0x4b, 0xd3, 0x81, 0x26, 0xc6, 0xcc, 0x66, 0x3b, 0x12, 0x38, 0xbf, 0x23,
+ 0x7a, 0x2e, 0x7f, 0x82, 0xa7, 0x81, 0x74, 0x21, 0xc0, 0x12, 0x79, 0xf4, 0x22, 0x58, 0x20,
+ 0xdc, 0x85, 0x6c, 0x1c, 0xcc, 0xf9, 0xf3, 0xe8, 0xff, 0x90, 0xfd, 0x89, 0x03, 0xf5, 0xaf,
+ 0x75, 0xa0, 0x79, 0xbb, 0x53, 0x9a, 0x1f, 0x2b, 0x34, 0x86, 0x47, 0x3d, 0x66, 0x2a, 0x07,
+ 0x3b, 0x1e, 0x23, 0x58, 0x20, 0x34, 0x7b, 0x15, 0xcc, 0xbf, 0x26, 0xc9, 0x28, 0x0e, 0xee,
+ 0xc5, 0x47, 0xac, 0x00, 0xc4, 0x4d, 0x81, 0x2b, 0x1e, 0xac, 0x31, 0xd2, 0x6f, 0x36, 0x85,
+ 0xe6, 0xa8, 0xf0, 0x46, 0xfc, 0xd2, 0x83, 0x58, 0x40, 0x55, 0x4c, 0x38, 0xdf, 0xfe, 0x49,
+ 0xa8, 0xa0, 0xa5, 0x08, 0xce, 0x2f, 0xe5, 0xf6, 0x6e, 0x2b, 0xc2, 0x95, 0x39, 0xc8, 0xca,
+ 0x77, 0xd6, 0xf6, 0x67, 0x24, 0x6b, 0x0e, 0x63, 0x5d, 0x11, 0x97, 0x26, 0x52, 0x30, 0xbc,
+ 0x28, 0x1d, 0xbf, 0x2a, 0x3e, 0x8c, 0x90, 0x54, 0xaa, 0xaa, 0xd1, 0x7c, 0x53, 0x7b, 0x48,
+ 0x1f, 0x51, 0x50, 0x6c, 0x32, 0xe1, 0x0f, 0x57, 0xea, 0x47, 0x76, 0x85, 0x0c, 0xa1, 0x6b,
+ 0x66, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x78, 0x3b, 0x62, 0x72,
+ 0x61, 0x6e, 0x64, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x31, 0x2f, 0x64,
+ 0x65, 0x76, 0x69, 0x63, 0x65, 0x31, 0x3a, 0x31, 0x31, 0x2f, 0x69, 0x64, 0x2f, 0x32, 0x30,
+ 0x32, 0x31, 0x30, 0x38, 0x30, 0x35, 0x2e, 0x34, 0x32, 0x3a, 0x75, 0x73, 0x65, 0x72, 0x2f,
+ 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2d, 0x6b, 0x65, 0x79, 0x73};
+
// The challenge that is in kKeysToSignForCsrWithUdsCerts and kCsrWithUdsCerts
inline const std::vector<uint8_t> kChallenge{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
@@ -328,6 +397,8 @@
0xa7, 0xb6, 0xc2, 0x40, 0x06, 0x65, 0xc5, 0xff, 0x19, 0xc5, 0xcd, 0x1c, 0xd5, 0x78, 0x01,
0xd4, 0xb8};
+const RpcHardwareInfo kRpcHardwareInfo = {.versionNumber = 3};
+
inline bool equal_byte_views(const byte_view& view1, const byte_view& view2) {
return std::equal(view1.begin(), view1.end(), view2.begin(), view2.end());
}
@@ -557,19 +628,26 @@
DEFAULT_INSTANCE_NAME));
}
+TEST(RemoteProvUtils, validateDiceChainProper) {
+ auto result = isCsrWithProperDiceChain(kCsrWithUdsCerts, DEFAULT_INSTANCE_NAME);
+ ASSERT_TRUE(result) << result.message();
+ ASSERT_TRUE(*result) << "DICE Chain is degenerate";
+}
+
+TEST(RemoteProvUtils, validateDiceChainDegenerate) {
+ auto result = isCsrWithProperDiceChain(kCsrWithDegenerateDiceChain, DEFAULT_INSTANCE_NAME);
+ ASSERT_TRUE(result) << result.message();
+ ASSERT_FALSE(*result) << "DICE Chain is proper";
+}
+
TEST(RemoteProvUtilsTest, requireUdsCertsWhenPresent) {
auto [keysToSignPtr, _, errMsg] = cppbor::parse(kKeysToSignForCsrWithUdsCerts);
ASSERT_TRUE(keysToSignPtr) << "Error: " << errMsg;
- auto mockRpc = SharedRefBase::make<MockIRemotelyProvisionedComponent>();
- EXPECT_CALL(*mockRpc, getHardwareInfo(NotNull())).WillRepeatedly([](RpcHardwareInfo* hwInfo) {
- hwInfo->versionNumber = 3;
- return ScopedAStatus::ok();
- });
-
const auto keysToSign = keysToSignPtr->asArray();
- auto csr = verifyFactoryCsr(*keysToSign, kCsrWithUdsCerts, mockRpc.get(), "default", kChallenge,
- /*allowDegenerate=*/false, /*requireUdsCerts=*/true);
+ auto csr =
+ verifyFactoryCsr(*keysToSign, kCsrWithUdsCerts, kRpcHardwareInfo, "default", kChallenge,
+ /*allowDegenerate=*/false, /*requireUdsCerts=*/true);
ASSERT_TRUE(csr) << csr.message();
}
@@ -577,27 +655,15 @@
auto [keysToSignPtr, _, errMsg] = cppbor::parse(kKeysToSignForCsrWithUdsCerts);
ASSERT_TRUE(keysToSignPtr) << "Error: " << errMsg;
- auto mockRpc = SharedRefBase::make<MockIRemotelyProvisionedComponent>();
- EXPECT_CALL(*mockRpc, getHardwareInfo(NotNull())).WillRepeatedly([](RpcHardwareInfo* hwInfo) {
- hwInfo->versionNumber = 3;
- return ScopedAStatus::ok();
- });
-
const auto* keysToSign = keysToSignPtr->asArray();
- auto csr = verifyFactoryCsr(*keysToSign, kCsrWithUdsCerts, mockRpc.get(), DEFAULT_INSTANCE_NAME,
- kChallenge,
+ auto csr = verifyFactoryCsr(*keysToSign, kCsrWithUdsCerts, kRpcHardwareInfo,
+ DEFAULT_INSTANCE_NAME, kChallenge,
/*allowDegenerate=*/false, /*requireUdsCerts=*/false);
ASSERT_TRUE(csr) << csr.message();
}
TEST(RemoteProvUtilsTest, requireUdsCertsWhenNotPresent) {
- auto mockRpc = SharedRefBase::make<MockIRemotelyProvisionedComponent>();
- EXPECT_CALL(*mockRpc, getHardwareInfo(NotNull())).WillRepeatedly([](RpcHardwareInfo* hwInfo) {
- hwInfo->versionNumber = 3;
- return ScopedAStatus::ok();
- });
-
- auto csr = verifyFactoryCsr(/*keysToSign=*/Array(), kCsrWithoutUdsCerts, mockRpc.get(),
+ auto csr = verifyFactoryCsr(/*keysToSign=*/Array(), kCsrWithoutUdsCerts, kRpcHardwareInfo,
DEFAULT_INSTANCE_NAME, kChallenge, /*allowDegenerate=*/false,
/*requireUdsCerts=*/true);
ASSERT_FALSE(csr);
@@ -610,14 +676,8 @@
kKeysToSignForCsrWithoutUdsCerts.data() + kKeysToSignForCsrWithoutUdsCerts.size());
ASSERT_TRUE(keysToSignPtr) << "Error: " << errMsg;
- auto mockRpc = SharedRefBase::make<MockIRemotelyProvisionedComponent>();
- EXPECT_CALL(*mockRpc, getHardwareInfo(NotNull())).WillRepeatedly([](RpcHardwareInfo* hwInfo) {
- hwInfo->versionNumber = 3;
- return ScopedAStatus::ok();
- });
-
const auto* keysToSign = keysToSignPtr->asArray();
- auto csr = verifyFactoryCsr(*keysToSign, kCsrWithoutUdsCerts, mockRpc.get(),
+ auto csr = verifyFactoryCsr(*keysToSign, kCsrWithoutUdsCerts, kRpcHardwareInfo,
DEFAULT_INSTANCE_NAME, kChallenge,
/*allowDegenerate=*/false, /*requireUdsCerts=*/false);
ASSERT_TRUE(csr) << csr.message();
diff --git a/security/rkp/OWNERS b/security/rkp/OWNERS
index 8f854b4..fd43089 100644
--- a/security/rkp/OWNERS
+++ b/security/rkp/OWNERS
@@ -2,3 +2,4 @@
jbires@google.com
sethmo@google.com
+vikramgaur@google.com
diff --git a/security/rkp/aidl/vts/functional/VtsRemotelyProvisionedComponentTests.cpp b/security/rkp/aidl/vts/functional/VtsRemotelyProvisionedComponentTests.cpp
index 8f918af..5467679 100644
--- a/security/rkp/aidl/vts/functional/VtsRemotelyProvisionedComponentTests.cpp
+++ b/security/rkp/aidl/vts/functional/VtsRemotelyProvisionedComponentTests.cpp
@@ -35,6 +35,7 @@
#include <remote_prov/remote_prov_utils.h>
#include <optional>
#include <set>
+#include <string_view>
#include <vector>
#include "KeyMintAidlTestBase.h"
@@ -150,22 +151,14 @@
return corruptChain.encode();
}
-string device_suffix(const string& name) {
- size_t pos = name.find('/');
- if (pos == string::npos) {
- return name;
- }
- return name.substr(pos + 1);
-}
-
bool matching_keymint_device(const string& rp_name, std::shared_ptr<IKeyMintDevice>* keyMint) {
- string rp_suffix = device_suffix(rp_name);
+ auto rp_suffix = deviceSuffix(rp_name);
vector<string> km_names = ::android::getAidlHalInstanceNames(IKeyMintDevice::descriptor);
for (const string& km_name : km_names) {
// If the suffix of the KeyMint instance equals the suffix of the
// RemotelyProvisionedComponent instance, assume they match.
- if (device_suffix(km_name) == rp_suffix && AServiceManager_isDeclared(km_name.c_str())) {
+ if (deviceSuffix(km_name) == rp_suffix && AServiceManager_isDeclared(km_name.c_str())) {
::ndk::SpAIBinder binder(AServiceManager_waitForService(km_name.c_str()));
*keyMint = IKeyMintDevice::fromBinder(binder);
return true;
@@ -489,9 +482,9 @@
&protectedData, &keysToSignMac);
ASSERT_TRUE(status.isOk()) << status.getDescription();
- auto result = verifyProductionProtectedData(
- deviceInfo, cppbor::Array(), keysToSignMac, protectedData, testEekChain_, eekId_,
- rpcHardwareInfo.supportedEekCurve, provisionable_.get(), GetParam(), challenge_);
+ auto result = verifyProductionProtectedData(deviceInfo, cppbor::Array(), keysToSignMac,
+ protectedData, testEekChain_, eekId_,
+ rpcHardwareInfo, GetParam(), challenge_);
ASSERT_TRUE(result) << result.message();
}
}
@@ -516,8 +509,7 @@
auto firstBcc = verifyProductionProtectedData(deviceInfo, /*keysToSign=*/cppbor::Array(),
keysToSignMac, protectedData, testEekChain_,
- eekId_, rpcHardwareInfo.supportedEekCurve,
- provisionable_.get(), GetParam(), challenge_);
+ eekId_, rpcHardwareInfo, GetParam(), challenge_);
ASSERT_TRUE(firstBcc) << firstBcc.message();
status = provisionable_->generateCertificateRequest(
@@ -527,8 +519,7 @@
auto secondBcc = verifyProductionProtectedData(deviceInfo, /*keysToSign=*/cppbor::Array(),
keysToSignMac, protectedData, testEekChain_,
- eekId_, rpcHardwareInfo.supportedEekCurve,
- provisionable_.get(), GetParam(), challenge_);
+ eekId_, rpcHardwareInfo, GetParam(), challenge_);
ASSERT_TRUE(secondBcc) << secondBcc.message();
// Verify that none of the keys in the first BCC are repeated in the second one.
@@ -576,9 +567,9 @@
&keysToSignMac);
ASSERT_TRUE(status.isOk()) << status.getDescription();
- auto result = verifyProductionProtectedData(
- deviceInfo, cborKeysToSign_, keysToSignMac, protectedData, testEekChain_, eekId_,
- rpcHardwareInfo.supportedEekCurve, provisionable_.get(), GetParam(), challenge_);
+ auto result = verifyProductionProtectedData(deviceInfo, cborKeysToSign_, keysToSignMac,
+ protectedData, testEekChain_, eekId_,
+ rpcHardwareInfo, GetParam(), challenge_);
ASSERT_TRUE(result) << result.message();
}
}
@@ -766,7 +757,7 @@
provisionable_->generateCertificateRequestV2({} /* keysToSign */, challenge, &csr);
ASSERT_TRUE(status.isOk()) << status.getDescription();
- auto result = verifyProductionCsr(cppbor::Array(), csr, provisionable_.get(), GetParam(),
+ auto result = verifyProductionCsr(cppbor::Array(), csr, rpcHardwareInfo, GetParam(),
challenge, isRkpVmInstance_);
ASSERT_TRUE(result) << result.message();
}
@@ -788,7 +779,7 @@
auto status = provisionable_->generateCertificateRequestV2(keysToSign_, challenge, &csr);
ASSERT_TRUE(status.isOk()) << status.getDescription();
- auto result = verifyProductionCsr(cborKeysToSign_, csr, provisionable_.get(), GetParam(),
+ auto result = verifyProductionCsr(cborKeysToSign_, csr, rpcHardwareInfo, GetParam(),
challenge, isRkpVmInstance_);
ASSERT_TRUE(result) << result.message();
}
@@ -819,14 +810,14 @@
auto status = provisionable_->generateCertificateRequestV2(keysToSign_, challenge_, &csr);
ASSERT_TRUE(status.isOk()) << status.getDescription();
- auto firstCsr = verifyProductionCsr(cborKeysToSign_, csr, provisionable_.get(), GetParam(),
+ auto firstCsr = verifyProductionCsr(cborKeysToSign_, csr, rpcHardwareInfo, GetParam(),
challenge_, isRkpVmInstance_);
ASSERT_TRUE(firstCsr) << firstCsr.message();
status = provisionable_->generateCertificateRequestV2(keysToSign_, challenge_, &csr);
ASSERT_TRUE(status.isOk()) << status.getDescription();
- auto secondCsr = verifyProductionCsr(cborKeysToSign_, csr, provisionable_.get(), GetParam(),
+ auto secondCsr = verifyProductionCsr(cborKeysToSign_, csr, rpcHardwareInfo, GetParam(),
challenge_, isRkpVmInstance_);
ASSERT_TRUE(secondCsr) << secondCsr.message();
@@ -845,8 +836,8 @@
auto status = provisionable_->generateCertificateRequestV2(keysToSign_, challenge_, &csr);
ASSERT_TRUE(status.isOk()) << status.getDescription();
- auto result = verifyProductionCsr(cborKeysToSign_, csr, provisionable_.get(), GetParam(),
- challenge_, isRkpVmInstance_);
+ auto result = verifyProductionCsr(cborKeysToSign_, csr, rpcHardwareInfo, GetParam(), challenge_,
+ isRkpVmInstance_);
ASSERT_TRUE(result) << result.message();
}
@@ -977,7 +968,7 @@
ASSERT_TRUE(irpcStatus.isOk()) << irpcStatus.getDescription();
auto result =
- verifyProductionCsr(cppbor::Array(), csr, provisionable_.get(), GetParam(), challenge_);
+ verifyProductionCsr(cppbor::Array(), csr, rpcHardwareInfo, GetParam(), challenge_);
ASSERT_TRUE(result) << result.message();
std::unique_ptr<cppbor::Array> csrPayload = std::move(*result);
@@ -1002,7 +993,7 @@
ASSERT_TRUE(bootPatchLevel);
ASSERT_TRUE(securityLevel);
- auto kmDeviceName = device_suffix(GetParam());
+ auto kmDeviceName = deviceSuffix(GetParam());
// Compare DeviceInfo against IDs attested by KeyMint.
ASSERT_TRUE((securityLevel->value() == "tee" && kmDeviceName == "default") ||
diff --git a/staging/security/see/hwcrypto/aidl/Android.bp b/staging/security/see/hwcrypto/aidl/Android.bp
index 0a7e8be..2da59a4 100644
--- a/staging/security/see/hwcrypto/aidl/Android.bp
+++ b/staging/security/see/hwcrypto/aidl/Android.bp
@@ -28,4 +28,5 @@
enabled: true,
},
},
+ frozen: false,
}
diff --git a/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/IHwCryptoKey.aidl b/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/IHwCryptoKey.aidl
index 3763f0a..5b34572 100644
--- a/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/IHwCryptoKey.aidl
+++ b/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/IHwCryptoKey.aidl
@@ -38,10 +38,16 @@
android.hardware.security.see.hwcrypto.IHwCryptoKey.DerivedKey deriveKey(in android.hardware.security.see.hwcrypto.IHwCryptoKey.DerivedKeyParameters parameters);
android.hardware.security.see.hwcrypto.IHwCryptoOperations getHwCryptoOperations();
android.hardware.security.see.hwcrypto.IOpaqueKey importClearKey(in android.hardware.security.see.hwcrypto.types.ExplicitKeyMaterial keyMaterial, in android.hardware.security.see.hwcrypto.KeyPolicy newKeyPolicy);
+ byte[] getCurrentDicePolicy();
+ android.hardware.security.see.hwcrypto.IOpaqueKey keyTokenImport(in android.hardware.security.see.hwcrypto.types.OpaqueKeyToken requestedKey, in byte[] sealingDicePolicy);
+ android.hardware.security.see.hwcrypto.IOpaqueKey getKeyslotData(android.hardware.security.see.hwcrypto.IHwCryptoKey.KeySlot slotId);
enum DeviceKeyId {
DEVICE_BOUND_KEY,
BATCH_KEY,
}
+ enum KeySlot {
+ KEYMINT_SHARED_HMAC_KEY,
+ }
union DiceBoundDerivationKey {
android.hardware.security.see.hwcrypto.IOpaqueKey opaqueKey;
android.hardware.security.see.hwcrypto.IHwCryptoKey.DeviceKeyId keyId;
diff --git a/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/IOpaqueKey.aidl b/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/IOpaqueKey.aidl
index 9cbf272..88dbdf1 100644
--- a/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/IOpaqueKey.aidl
+++ b/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/IOpaqueKey.aidl
@@ -36,4 +36,6 @@
byte[] exportWrappedKey(in android.hardware.security.see.hwcrypto.IOpaqueKey wrappingKey);
android.hardware.security.see.hwcrypto.KeyPolicy getKeyPolicy();
byte[] getPublicKey();
+ android.hardware.security.see.hwcrypto.types.OpaqueKeyToken getShareableToken(in byte[] sealingDicePolicy);
+ void setProtectionId(in android.hardware.security.see.hwcrypto.types.ProtectionId protectionId, in android.hardware.security.see.hwcrypto.types.OperationType[] allowedOperations);
}
diff --git a/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/OperationParameters.aidl b/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/OperationParameters.aidl
index 017e51c..e069610 100644
--- a/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/OperationParameters.aidl
+++ b/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/OperationParameters.aidl
@@ -35,4 +35,5 @@
union OperationParameters {
android.hardware.security.see.hwcrypto.types.SymmetricAuthOperationParameters symmetricAuthCrypto;
android.hardware.security.see.hwcrypto.types.SymmetricOperationParameters symmetricCrypto;
+ android.hardware.security.see.hwcrypto.types.HmacOperationParameters hmac;
}
diff --git a/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/types/ExplicitKeyMaterial.aidl b/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/types/ExplicitKeyMaterial.aidl
index 933fb67..9970678 100644
--- a/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/types/ExplicitKeyMaterial.aidl
+++ b/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/types/ExplicitKeyMaterial.aidl
@@ -34,4 +34,5 @@
package android.hardware.security.see.hwcrypto.types;
union ExplicitKeyMaterial {
android.hardware.security.see.hwcrypto.types.AesKey aes;
+ android.hardware.security.see.hwcrypto.types.HmacKey hmac;
}
diff --git a/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/types/HalErrorCode.aidl b/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/types/HalErrorCode.aidl
index cd8b3c6..742314c 100644
--- a/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/types/HalErrorCode.aidl
+++ b/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/types/HalErrorCode.aidl
@@ -41,4 +41,5 @@
const int ALLOCATION_ERROR = (-5) /* -5 */;
const int INVALID_KEY = (-6) /* -6 */;
const int BAD_PARAMETER = (-7) /* -7 */;
+ const int UNAUTHORIZED = (-8) /* -8 */;
}
diff --git a/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/types/HmacKey.aidl b/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/types/HmacKey.aidl
new file mode 100644
index 0000000..f8de94a
--- /dev/null
+++ b/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/types/HmacKey.aidl
@@ -0,0 +1,38 @@
+/*
+ * Copyright 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.security.see.hwcrypto.types;
+union HmacKey {
+ byte[32] sha256 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+ byte[64] sha512;
+}
diff --git a/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/types/HmacOperationParameters.aidl b/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/types/HmacOperationParameters.aidl
new file mode 100644
index 0000000..532cd8d
--- /dev/null
+++ b/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/types/HmacOperationParameters.aidl
@@ -0,0 +1,37 @@
+/*
+ * Copyright 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.security.see.hwcrypto.types;
+parcelable HmacOperationParameters {
+ android.hardware.security.see.hwcrypto.IOpaqueKey key;
+}
diff --git a/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/types/OpaqueKeyToken.aidl b/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/types/OpaqueKeyToken.aidl
new file mode 100644
index 0000000..fc2dd63
--- /dev/null
+++ b/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/types/OpaqueKeyToken.aidl
@@ -0,0 +1,37 @@
+/*
+ * Copyright 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.security.see.hwcrypto.types;
+parcelable OpaqueKeyToken {
+ byte[] keyToken;
+}
diff --git a/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/types/ProtectionId.aidl b/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/types/ProtectionId.aidl
new file mode 100644
index 0000000..1e304ab
--- /dev/null
+++ b/staging/security/see/hwcrypto/aidl/aidl_api/android.hardware.security.see/current/android/hardware/security/see/hwcrypto/types/ProtectionId.aidl
@@ -0,0 +1,37 @@
+/*
+ * Copyright 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.security.see.hwcrypto.types;
+enum ProtectionId {
+ WIDEVINE_OUTPUT_BUFFER = 1,
+}
diff --git a/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/IHwCryptoKey.aidl b/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/IHwCryptoKey.aidl
index b5e7e9d..bb194a3 100644
--- a/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/IHwCryptoKey.aidl
+++ b/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/IHwCryptoKey.aidl
@@ -19,6 +19,7 @@
import android.hardware.security.see.hwcrypto.IOpaqueKey;
import android.hardware.security.see.hwcrypto.KeyPolicy;
import android.hardware.security.see.hwcrypto.types.ExplicitKeyMaterial;
+import android.hardware.security.see.hwcrypto.types.OpaqueKeyToken;
/*
* Higher level interface to access and generate keys.
@@ -36,6 +37,19 @@
DEVICE_BOUND_KEY,
BATCH_KEY,
}
+
+ /*
+ * Identifier for the requested key slot. The currently supported identifiers are:
+ *
+ * KEYMINT_SHARED_HMAC_KEY:
+ * This is the shared HMAC key that will now be computed by HwCryptoKey after participating
+ * in the ISharedSecret protocol that can be shared with KeyMint and authenticators. See
+ * ISharedSecret.aidl for more information.
+ */
+ enum KeySlot {
+ KEYMINT_SHARED_HMAC_KEY,
+ }
+
union DiceBoundDerivationKey {
/*
* Opaque to be used to derive the DICE bound key.
@@ -217,4 +231,59 @@
* otherwise.
*/
IOpaqueKey importClearKey(in ExplicitKeyMaterial keyMaterial, in KeyPolicy newKeyPolicy);
+
+ /*
+ * getCurrentDicePolicy() - Returns the client current DICE policy. This policy is encrypted and
+ * considered opaque from the client perspective. This policy is the
+ * same used to create DICE bound keys and will also be used to seal
+ * secrets that can only be retrieved by the DICE policy owner. The
+ * first use of this seal operation will be
+ * <code>IOpaqueKey::getShareableToken</code> and
+ * <code>IHwCryptoKey::keyTokenImport</code>. To start this process,
+ * the intended key receiver will call this function and then pass the
+ * generated DICE policy to the owner of the key that the receiver
+ * wants to import. The key owner will then call
+ * <code>IOpaqueKey::getShareableToken</code> passing the receiver DICE
+ * policy to insure that only that receiver can import the key.
+ *
+ * Return:
+ * byte[] on success, which is the caller encrypted DICE policy.
+ */
+ byte[] getCurrentDicePolicy();
+
+ /*
+ * key_token_import() - Imports a key from a different client service instance. Because
+ * IOpaqueKey are binder objects that cannot be directly shared between
+ * binder rpc clients, this method provide a way to send a key to another
+ * client. Keys to be imported by the receiver are represented by a token
+ * created using <code>IOpaqueKey::getShareableToken</code>. The flow
+ * to create this token is described in
+ * <code>IHwCryptoKey::getCurrentDicePolicy</code>.
+ *
+ * @requested_key:
+ * Handle to the key to be imported to the caller service.
+ * @sealingDicePolicy:
+ * DICE policy used to seal the exported key.
+ * Return:
+ * A IOpaqueKey that can be directly be used on the local HWCrypto service on
+ * success, service specific error based on <code>HalErrorCode</code> otherwise.
+ */
+ IOpaqueKey keyTokenImport(in OpaqueKeyToken requestedKey, in byte[] sealingDicePolicy);
+
+ /*
+ * getKeyslotData() - Gets the keyslot key material referenced by slotId.
+ *
+ * @slotId:
+ * Identifier for the requested keyslot
+ *
+ * This interface is used to access device specific keys with known types and uses. Because the
+ * returned key is opaque, it can only be used through the different HwCrypto interfaces.
+ * Because the keys live in a global namespace the identity of the caller needs to be
+ * checked to verify that it has permission to accesses the requested key.
+ *
+ * Return:
+ * Ok(IOpaqueKey) on success, UNAUTHORIZED if the caller cannot access the requested key,
+ * another specific error code otherwise.
+ */
+ IOpaqueKey getKeyslotData(KeySlot slotId);
}
diff --git a/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/IOpaqueKey.aidl b/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/IOpaqueKey.aidl
index 0d0f613..9a72639 100644
--- a/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/IOpaqueKey.aidl
+++ b/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/IOpaqueKey.aidl
@@ -16,7 +16,9 @@
package android.hardware.security.see.hwcrypto;
import android.hardware.security.see.hwcrypto.KeyPolicy;
+import android.hardware.security.see.hwcrypto.types.OpaqueKeyToken;
import android.hardware.security.see.hwcrypto.types.OperationType;
+import android.hardware.security.see.hwcrypto.types.ProtectionId;
interface IOpaqueKey {
/*
@@ -52,4 +54,37 @@
* <code>HalErrorCode</code> otherwise. Format used for the returned public key is COSE.
*/
byte[] getPublicKey();
+
+ /*
+ * getShareableToken() - Returns a token that can shared with another HWCrypto client.
+ *
+ * @sealingDicePolicy:
+ * Token to be used to protect the returned OpaqueKeyToken. It will be used so only
+ * the owner of the sealingDicePolicy can import the key.
+ * Return:
+ * <code>OpaqueKeyMaterial</code> token on success, service specific error based on
+ * <code>HalErrorCode</code> otherwise.
+ */
+ OpaqueKeyToken getShareableToken(in byte[] sealingDicePolicy);
+
+ /*
+ * setProtectionId() - Sets the protectionID associated with the buffers where the operation
+ * will be performed. A protection ID serves as a limitation on the key so
+ * it can only operate on buffers with a matching protection ID.
+ * The client calling this functions needs to have the necessary permissions
+ * to read and/or write to this buffer. Setting this parameter means that
+ * if the key is shared with a different client, the client receiving the
+ * key will be limited in which buffers can be used to read/write data for
+ * this operation.
+ *
+ * @protectionId:
+ * ID of the given use case to provide protection for. The method of protecting the buffer
+ * will be platform dependent.
+ * @allowedOperations:
+ * array of allowed operations. Allowed operations are either READ or WRITE.
+ *
+ * Return:
+ * service specific error based on <code>HalErrorCode</code> on failure.
+ */
+ void setProtectionId(in ProtectionId protectionId, in OperationType[] allowedOperations);
}
diff --git a/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/OperationParameters.aidl b/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/OperationParameters.aidl
index 9e2fc6c..a977f56 100644
--- a/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/OperationParameters.aidl
+++ b/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/OperationParameters.aidl
@@ -15,6 +15,7 @@
*/
package android.hardware.security.see.hwcrypto;
+import android.hardware.security.see.hwcrypto.types.HmacOperationParameters;
import android.hardware.security.see.hwcrypto.types.SymmetricAuthOperationParameters;
import android.hardware.security.see.hwcrypto.types.SymmetricOperationParameters;
@@ -31,4 +32,9 @@
* Parameters for non-authenticated symmetric cryptography (AES/TDES).
*/
SymmetricOperationParameters symmetricCrypto;
+
+ /*
+ * Parameters for hash based message authenticated code operations.
+ */
+ HmacOperationParameters hmac;
}
diff --git a/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/types/ExplicitKeyMaterial.aidl b/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/types/ExplicitKeyMaterial.aidl
index 4298ba9..3aa5611 100644
--- a/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/types/ExplicitKeyMaterial.aidl
+++ b/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/types/ExplicitKeyMaterial.aidl
@@ -16,10 +16,12 @@
package android.hardware.security.see.hwcrypto.types;
import android.hardware.security.see.hwcrypto.types.AesKey;
+import android.hardware.security.see.hwcrypto.types.HmacKey;
/*
* Type encapsulating a clear key.
*/
union ExplicitKeyMaterial {
AesKey aes;
+ HmacKey hmac;
}
diff --git a/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/types/HalErrorCode.aidl b/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/types/HalErrorCode.aidl
index e8e8539..f536c0e 100644
--- a/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/types/HalErrorCode.aidl
+++ b/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/types/HalErrorCode.aidl
@@ -42,4 +42,7 @@
/* Bad parameter supplied for the desired operation */
const int BAD_PARAMETER = -7;
+
+ /* Caller is not authorized to make this call */
+ const int UNAUTHORIZED = -8;
}
diff --git a/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/types/HmacKey.aidl b/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/types/HmacKey.aidl
new file mode 100644
index 0000000..a0b6ba7
--- /dev/null
+++ b/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/types/HmacKey.aidl
@@ -0,0 +1,32 @@
+/*
+ * Copyright 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.security.see.hwcrypto.types;
+
+/*
+ * Type that represents an Hmac key.
+ */
+union HmacKey {
+ /*
+ * Raw Hmac key for use with sha256.
+ */
+ byte[32] sha256 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0};
+
+ /*
+ * Raw Hmac key for use with sha512.
+ */
+ byte[64] sha512;
+}
diff --git a/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/types/HmacOperationParameters.aidl b/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/types/HmacOperationParameters.aidl
new file mode 100644
index 0000000..da09a2c
--- /dev/null
+++ b/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/types/HmacOperationParameters.aidl
@@ -0,0 +1,27 @@
+/*
+ * Copyright 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.security.see.hwcrypto.types;
+
+import android.hardware.security.see.hwcrypto.IOpaqueKey;
+/*
+ * Data needed to perform HMAC operations.
+ */
+parcelable HmacOperationParameters {
+ /*
+ * Key to be used for the HMAC operation.
+ */
+ IOpaqueKey key;
+}
diff --git a/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/types/OpaqueKeyToken.aidl b/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/types/OpaqueKeyToken.aidl
new file mode 100644
index 0000000..db95c18
--- /dev/null
+++ b/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/types/OpaqueKeyToken.aidl
@@ -0,0 +1,29 @@
+/*
+ * Copyright 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.security.see.hwcrypto.types;
+
+/*
+ * Implementation defined structure that represents a key and its associated metadata. It is only
+ * valid on the current boot, and its reuse after a session is closed (or between sessions) is not
+ * guaranteed.
+ */
+parcelable OpaqueKeyToken {
+ /*
+ * Opaque type used to send IOpaqueKeys keys to different clients. Its format is implementation
+ * dependant.
+ */
+ byte[] keyToken;
+}
diff --git a/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/types/ProtectionId.aidl b/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/types/ProtectionId.aidl
new file mode 100644
index 0000000..8686882
--- /dev/null
+++ b/staging/security/see/hwcrypto/aidl/android/hardware/security/see/hwcrypto/types/ProtectionId.aidl
@@ -0,0 +1,29 @@
+/*
+ * Copyright 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.security.see.hwcrypto.types;
+
+/*
+ * Enum describing the different types of protected buffers. Protected buffers are named by its
+ * corresponding use case and its underlaying implementation is platform dependant.
+ */
+enum ProtectionId {
+ /*
+ * ProtectionID used by HwCrypto to enable Keys that can be used for Widevine video buffers.
+ * These buffers should not be readable by non-trusted entities and HwCrypto should not allow
+ * any read access to them through its interface.
+ */
+ WIDEVINE_OUTPUT_BUFFER = 1,
+}
diff --git a/staging/security/see/storage/aidl/android/hardware/security/see/storage/ISecureStorage.aidl b/staging/security/see/storage/aidl/android/hardware/security/see/storage/ISecureStorage.aidl
index 022de9a..1841bf5 100644
--- a/staging/security/see/storage/aidl/android/hardware/security/see/storage/ISecureStorage.aidl
+++ b/staging/security/see/storage/aidl/android/hardware/security/see/storage/ISecureStorage.aidl
@@ -34,6 +34,13 @@
/**
* Starts a storage session for a filesystem.
*
+ * Clients should be prepared for `startSession` and any methods called on the `IStorageSession`
+ * or its sub-interfaces to return `WOULD_BLOCK` (a `binder::Status` with an exception code of
+ * `EX_TRANSACTION_FAILED` and a transaction error code of `android::WOULD_BLOCK`), which
+ * indicates that the requested storage is not currently available. Possible cases that might
+ * cause this return code might be accessing the data partition during boot stages where it
+ * isn't yet mounted or attempting to commit changes while an A/B update is in progress.
+ *
* @filesystem:
* The minimum filesystem properties requested.
*
diff --git a/usb/1.0/vts/functional/Android.bp b/usb/1.0/vts/functional/Android.bp
index d976a06..09bbeec 100644
--- a/usb/1.0/vts/functional/Android.bp
+++ b/usb/1.0/vts/functional/Android.bp
@@ -15,6 +15,7 @@
//
package {
+ default_team: "trendy_team_android_usb",
// 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"
diff --git a/usb/1.1/vts/functional/Android.bp b/usb/1.1/vts/functional/Android.bp
index f514009..48e36f0 100644
--- a/usb/1.1/vts/functional/Android.bp
+++ b/usb/1.1/vts/functional/Android.bp
@@ -15,6 +15,7 @@
//
package {
+ default_team: "trendy_team_android_usb",
// 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"
diff --git a/usb/1.2/vts/functional/Android.bp b/usb/1.2/vts/functional/Android.bp
index 688e725..62442be 100644
--- a/usb/1.2/vts/functional/Android.bp
+++ b/usb/1.2/vts/functional/Android.bp
@@ -15,6 +15,7 @@
//
package {
+ default_team: "trendy_team_android_usb",
// 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"
diff --git a/usb/1.3/vts/functional/Android.bp b/usb/1.3/vts/functional/Android.bp
index 6a1ce1e..a345128 100644
--- a/usb/1.3/vts/functional/Android.bp
+++ b/usb/1.3/vts/functional/Android.bp
@@ -15,6 +15,7 @@
//
package {
+ default_team: "trendy_team_android_usb",
// 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"
diff --git a/usb/aidl/vts/Android.bp b/usb/aidl/vts/Android.bp
index cf9299e..d41116a 100644
--- a/usb/aidl/vts/Android.bp
+++ b/usb/aidl/vts/Android.bp
@@ -15,6 +15,7 @@
//
package {
+ default_team: "trendy_team_android_usb",
// 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"
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 09cdc26..d0f1ed9 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
@@ -36,6 +36,7 @@
enum UwbVendorCapabilityTlvTypes {
SUPPORTED_POWER_STATS_QUERY = 0xC0,
SUPPORTED_ANTENNA_MODES = 0xC1,
+ SUPPORTED_MAX_SESSION_COUNT = 0xEB,
CCC_SUPPORTED_CHAPS_PER_SLOT = 0xA0,
CCC_SUPPORTED_SYNC_CODES = 0xA1,
CCC_SUPPORTED_HOPPING_CONFIG_MODES_AND_SEQUENCES = 0xA2,
diff --git a/uwb/aidl/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl b/uwb/aidl/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl
index 28e44ef..2d81ed2 100644
--- a/uwb/aidl/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl
+++ b/uwb/aidl/android/hardware/uwb/fira_android/UwbVendorCapabilityTlvTypes.aidl
@@ -48,6 +48,11 @@
*/
SUPPORTED_ANTENNA_MODES = 0xC1,
+ /**
+ * Int value to indicate max supported session count
+ */
+ SUPPORTED_MAX_SESSION_COUNT = 0xEB,
+
/*********************************************
* CCC 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 6197585..90caa26 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
@@ -51,4 +51,5 @@
long cipherSuitesSupported;
boolean secureHeLtfSupported;
boolean rangingFrameProtectionSupported;
+ int maxSupportedSecureHeLtfProtocolVersion;
}
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 87257be..9d62431 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
@@ -71,4 +71,6 @@
long baseAkm;
long cipherSuite;
int secureHeLtfProtocolVersion;
+ long pasnComebackAfterMillis;
+ @nullable byte[] pasnComebackCookie;
}
diff --git a/wifi/aidl/aidl_api/android.hardware.wifi/current/android/hardware/wifi/RttSecureConfig.aidl b/wifi/aidl/aidl_api/android.hardware.wifi/current/android/hardware/wifi/RttSecureConfig.aidl
index c2d7866..64e81de 100644
--- a/wifi/aidl/aidl_api/android.hardware.wifi/current/android/hardware/wifi/RttSecureConfig.aidl
+++ b/wifi/aidl/aidl_api/android.hardware.wifi/current/android/hardware/wifi/RttSecureConfig.aidl
@@ -37,4 +37,5 @@
android.hardware.wifi.PasnConfig pasnConfig;
boolean enableSecureHeLtf;
boolean enableRangingFrameProtection;
+ byte[] pasnComebackCookie;
}
diff --git a/wifi/aidl/android/hardware/wifi/RttCapabilities.aidl b/wifi/aidl/android/hardware/wifi/RttCapabilities.aidl
index 0cf048d..48e211d 100644
--- a/wifi/aidl/android/hardware/wifi/RttCapabilities.aidl
+++ b/wifi/aidl/android/hardware/wifi/RttCapabilities.aidl
@@ -100,4 +100,8 @@
* Whether frame protection for ranging is supported.
*/
boolean rangingFrameProtectionSupported;
+ /**
+ * Maximum supported secure HE-LTF protocol version.
+ */
+ int maxSupportedSecureHeLtfProtocolVersion;
}
diff --git a/wifi/aidl/android/hardware/wifi/RttResult.aidl b/wifi/aidl/android/hardware/wifi/RttResult.aidl
index dd41868..16b823d 100644
--- a/wifi/aidl/android/hardware/wifi/RttResult.aidl
+++ b/wifi/aidl/android/hardware/wifi/RttResult.aidl
@@ -234,4 +234,19 @@
* Secure HE-LTF protocol version used.
*/
int secureHeLtfProtocolVersion;
+ /**
+ * When an AP receives a large volume of initial PASN Authentication frames, it can use the
+ * comeback after field in the PASN Parameters element to indicate a deferral time and
+ * optionally provide a comeback cookie which is an opaque sequence of octets. This field is
+ * set to 0 to indicate that the subsequent ranging request can be retried with the
+ * |pasnComebackCookie|.
+ */
+ long pasnComebackAfterMillis;
+ /**
+ * Comeback cookie is an opaque sequence of octects sent by the AP when PASN authentication
+ * needs to be deferred. The same cookie needs to be passed in |RttSecureConfig| when the
+ * station has to range with the AP after |RttResult.pasnComebackAfterMillis|. Maximum size of
+ * cookie is 255 bytes. Refer IEEE Std 802.11az‐2022, section 9.4.2.303 PASN Parameters element.
+ */
+ @nullable byte[] pasnComebackCookie;
}
diff --git a/wifi/aidl/android/hardware/wifi/RttSecureConfig.aidl b/wifi/aidl/android/hardware/wifi/RttSecureConfig.aidl
index c10e6b5..d1394ab 100644
--- a/wifi/aidl/android/hardware/wifi/RttSecureConfig.aidl
+++ b/wifi/aidl/android/hardware/wifi/RttSecureConfig.aidl
@@ -35,4 +35,8 @@
* Enable Ranging frame protection.
*/
boolean enableRangingFrameProtection;
+ /**
+ * Comeback cookie is an opaque sequence of octets retrieved from |RttResult|.
+ */
+ byte[] pasnComebackCookie;
}
diff --git a/wifi/aidl/default/aidl_callback_util.h b/wifi/aidl/default/aidl_callback_util.h
index f8ba53b..2419db9 100644
--- a/wifi/aidl/default/aidl_callback_util.h
+++ b/wifi/aidl/default/aidl_callback_util.h
@@ -45,6 +45,11 @@
~AidlCallbackHandler() { invalidate(); }
bool addCallback(const std::shared_ptr<CallbackType>& cb) {
+ if (cb == nullptr) {
+ LOG(ERROR) << "Unable to register a null callback";
+ return false;
+ }
+
std::unique_lock<std::mutex> lk(callback_handler_lock_);
void* cbPtr = reinterpret_cast<void*>(cb->asBinder().get());
const auto& cbPosition = findCbInSet(cbPtr);
diff --git a/wifi/hostapd/aidl/aidl_api/android.hardware.wifi.hostapd/current/android/hardware/wifi/hostapd/NetworkParams.aidl b/wifi/hostapd/aidl/aidl_api/android.hardware.wifi.hostapd/current/android/hardware/wifi/hostapd/NetworkParams.aidl
index 4554223..b6c5cf2 100644
--- a/wifi/hostapd/aidl/aidl_api/android.hardware.wifi.hostapd/current/android/hardware/wifi/hostapd/NetworkParams.aidl
+++ b/wifi/hostapd/aidl/aidl_api/android.hardware.wifi.hostapd/current/android/hardware/wifi/hostapd/NetworkParams.aidl
@@ -40,4 +40,5 @@
String passphrase;
boolean isMetered;
byte[] vendorElements;
+ boolean isClientIsolationEnabled;
}
diff --git a/wifi/hostapd/aidl/android/hardware/wifi/hostapd/NetworkParams.aidl b/wifi/hostapd/aidl/android/hardware/wifi/hostapd/NetworkParams.aidl
index 47d9e6f..acc2cad 100644
--- a/wifi/hostapd/aidl/android/hardware/wifi/hostapd/NetworkParams.aidl
+++ b/wifi/hostapd/aidl/android/hardware/wifi/hostapd/NetworkParams.aidl
@@ -52,4 +52,8 @@
* one or more elements). Example: byte[]{ 221, 4, 17, 34, 51, 1 }
*/
byte[] vendorElements;
+ /**
+ * Whether the network uses client isolation.
+ */
+ boolean isClientIsolationEnabled;
}
diff --git a/wifi/hostapd/aidl/lint-baseline.xml b/wifi/hostapd/aidl/lint-baseline.xml
index 4329e12..23fe690 100644
--- a/wifi/hostapd/aidl/lint-baseline.xml
+++ b/wifi/hostapd/aidl/lint-baseline.xml
@@ -63,4 +63,22 @@
file="out/soong/.intermediates/hardware/interfaces/wifi/hostapd/aidl/android.hardware.wifi.hostapd-V3-java-source/gen/android/hardware/wifi/hostapd/IHostapdCallback.java"/>
</issue>
-</issues>
\ No newline at end of file
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 30): `android.os.Binder#markVintfStability`"
+ errorLine1=" this.markVintfStability();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/soong/.intermediates/hardware/interfaces/wifi/hostapd/aidl/android.hardware.wifi.hostapd-V4-java-source/gen/android/hardware/wifi/hostapd/IHostapd.java"/>
+ </issue>
+
+ <issue
+ id="NewApi"
+ message="Call requires API level 31 (current min is 30): `android.os.Binder#markVintfStability`"
+ errorLine1=" this.markVintfStability();"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~">
+ <location
+ file="out/soong/.intermediates/hardware/interfaces/wifi/hostapd/aidl/android.hardware.wifi.hostapd-V4-java-source/gen/android/hardware/wifi/hostapd/IHostapdCallback.java"/>
+ </issue>
+
+</issues>
diff --git a/wifi/legacy_headers/include/hardware_legacy/rtt.h b/wifi/legacy_headers/include/hardware_legacy/rtt.h
index 631821d..3fa4e95 100644
--- a/wifi/legacy_headers/include/hardware_legacy/rtt.h
+++ b/wifi/legacy_headers/include/hardware_legacy/rtt.h
@@ -100,6 +100,7 @@
#define RTT_SECURITY_MAX_PASSPHRASE_LEN 63
#define PMKID_LEN 16
+#define RTT_MAX_COOKIE_LEN 255
typedef struct {
wifi_rtt_akm base_akm; // Base Authentication and Key Management (AKM) protocol used for PASN
@@ -111,7 +112,9 @@
u32 pmkid_len;
u8 pmkid[PMKID_LEN]; // PMKID corresponding to the cached PMK from the base AKM. PMKID can be
// null if no cached PMK is present.
-
+ u8 comeback_cookie_len; // Comeback cookie length. If the length is 0, it indicates there is no
+ // cookie.
+ u8 comeback_cookie[RTT_MAX_COOKIE_LEN]; // Comeback cookie indicated over wifi_rtt_result_v4.
} wifi_rtt_pasn_config;
typedef struct {
@@ -257,10 +260,15 @@
typedef struct {
wifi_rtt_result_v3 rtt_result_v3;
bool is_ranging_protection_enabled;
- bool is_secure_ltf_enabled;
+ bool is_secure_he_ltf_enabled;
wifi_rtt_akm base_akm;
wifi_rtt_cipher_suite cipher_suite;
int secure_he_ltf_protocol_version;
+ u16 pasn_comeback_after_millis; // The time in milliseconds after which the non-AP STA is
+ // requested to retry the PASN authentication.
+ u8 pasn_comeback_cookie_len; // Comeback cookie length. If the length is 0, it indicates there
+ // is no cookie.
+ u8 pasn_comeback_cookie[RTT_MAX_COOKIE_LEN]; // Comeback cookie octets.
} wifi_rtt_result_v4;
/* RTT result callbacks */
@@ -395,7 +403,9 @@
/* RTT Capabilities v4 (11az secure support) */
typedef struct {
wifi_rtt_capabilities_v3 rtt_capab_v3;
- bool secure_ltf_supported;
+ bool secure_he_ltf_supported;
+ int max_supported_secure_he_ltf_protocol_ver; // Maximum supported secure HE-LTF protocol
+ // version.
bool ranging_fame_protection_supported;
wifi_rtt_akm supported_akms; // Bitmap of wifi_rtt_akm values indicating the set of supported
// AKMs.
diff --git a/wifi/supplicant/aidl/aidl_api/android.hardware.wifi.supplicant/current/android/hardware/wifi/supplicant/ISupplicantStaIfaceCallback.aidl b/wifi/supplicant/aidl/aidl_api/android.hardware.wifi.supplicant/current/android/hardware/wifi/supplicant/ISupplicantStaIfaceCallback.aidl
index b617c57..e96b386 100644
--- a/wifi/supplicant/aidl/aidl_api/android.hardware.wifi.supplicant/current/android/hardware/wifi/supplicant/ISupplicantStaIfaceCallback.aidl
+++ b/wifi/supplicant/aidl/aidl_api/android.hardware.wifi.supplicant/current/android/hardware/wifi/supplicant/ISupplicantStaIfaceCallback.aidl
@@ -86,6 +86,6 @@
enum MloLinkInfoChangeReason {
TID_TO_LINK_MAP = 0,
MULTI_LINK_RECONFIG_AP_REMOVAL = 1,
- MULTI_LINK_RECONFIG_AP_ADDITION = 2,
+ MULTI_LINK_DYNAMIC_RECONFIG = 2,
}
}
diff --git a/wifi/supplicant/aidl/android/hardware/wifi/supplicant/ISupplicantStaIfaceCallback.aidl b/wifi/supplicant/aidl/android/hardware/wifi/supplicant/ISupplicantStaIfaceCallback.aidl
index 8740ad0..e5e2e84 100644
--- a/wifi/supplicant/aidl/android/hardware/wifi/supplicant/ISupplicantStaIfaceCallback.aidl
+++ b/wifi/supplicant/aidl/android/hardware/wifi/supplicant/ISupplicantStaIfaceCallback.aidl
@@ -336,21 +336,24 @@
*/
TID_TO_LINK_MAP = 0,
/**
- * Multi-link reconfiguration - AP removal as described in
- * IEEE 802.11be spec, section 35.3.6. This is a mandatory feature for
- * station according to Wi-Fi 7 R1 MRD.
+ * Multi-link reconfiguration - AP removal as described in the Wi-Fi 7 R1 MRD section
+ * 6.3.2.18. This is a mandatory feature for station.
*
* Removed link will not be present in |ISupplicantStaIface.getConnectionMloLinksInfo|.
*/
MULTI_LINK_RECONFIG_AP_REMOVAL = 1,
/**
- * Multi-link reconfiguration - Adding affiliated AP(s) as described in
- * IEEE 802.11be spec, section 35.3.6. This is an optional feature for
- * station according to Wi-Fi 7 R2 MRD.
+ * Multi-link reconfiguration add/delete links without re-association as described in
+ * the Wi-Fi 7 R2 MRD section 6.4.2.4. This is an optional feature.
+ *
+ * This feature enables dynamic link reconfiguration operations (add link and/or delete
+ * link) on the multi-link setup of a STA MLD, either triggered by the AP MLD or initiated
+ * by the STA MLD itself. This avoids reassociation for any link reconfiguration operation.
*
* Added link will be present in |ISupplicantStaIface.getConnectionMloLinksInfo|.
+ * Deleted link will not be present in |ISupplicantStaIface.getConnectionMloLinksInfo|.
*/
- MULTI_LINK_RECONFIG_AP_ADDITION = 2,
+ MULTI_LINK_DYNAMIC_RECONFIG = 2,
}
/**