diff --git a/drm/1.4/Android.bp b/drm/1.4/Android.bp index 8e1dc93c9f..f40ff87b13 100644 --- a/drm/1.4/Android.bp +++ b/drm/1.4/Android.bp @@ -8,6 +8,7 @@ hidl_interface { "ICryptoPlugin.hal", "IDrmFactory.hal", "IDrmPlugin.hal", + "types.hal", ], interfaces: [ "android.hardware.drm@1.0", diff --git a/drm/1.4/ICryptoPlugin.hal b/drm/1.4/ICryptoPlugin.hal index 874ef4cd3b..addfdd08d9 100644 --- a/drm/1.4/ICryptoPlugin.hal +++ b/drm/1.4/ICryptoPlugin.hal @@ -16,6 +16,8 @@ package android.hardware.drm@1.4; import @1.2::ICryptoPlugin; +import @1.4::LogMessage; +import @1.4::Status; /** * ICryptoPlugin is the HAL for vendor-provided crypto plugins. @@ -23,4 +25,15 @@ import @1.2::ICryptoPlugin; * load crypto keys for a codec to decrypt protected video content. */ interface ICryptoPlugin extends @1.2::ICryptoPlugin { + + /** + * @return logMessages latest plugin level log messages. Can be used + * by apps in diagnosis of errors. + * @return status the status of the call. The status must be: + * OK on success; + * GENERAL_OEM_ERROR on OEM-provided, low-level component failures; + * GENERAL_PLUGIN_ERROR on unexpected plugin-level errors. + */ + getLogMessages() generates (@1.4::Status status, vec logMessages); + }; diff --git a/drm/1.4/IDrmPlugin.hal b/drm/1.4/IDrmPlugin.hal index e8af230033..df04b9f226 100644 --- a/drm/1.4/IDrmPlugin.hal +++ b/drm/1.4/IDrmPlugin.hal @@ -19,6 +19,8 @@ import @1.0::Status; import @1.0::SessionId; import @1.1::SecurityLevel; import @1.2::IDrmPlugin; +import @1.4::LogMessage; +import @1.4::Status; /** * IDrmPlugin is used to interact with a specific drm plugin that was @@ -61,4 +63,14 @@ interface IDrmPlugin extends @1.2::IDrmPlugin { */ setPlaybackId(SessionId sessionId, string playbackId) generates (@1.0::Status status); + /** + * @return logMessages latest plugin level log messages. Can be used + * by apps in diagnosis of errors. + * @return status the status of the call. The status must be: + * OK on success; + * GENERAL_OEM_ERROR on OEM-provided, low-level component failures; + * GENERAL_PLUGIN_ERROR on unexpected plugin-level errors. + */ + getLogMessages() generates (@1.4::Status status, vec logMessages); + }; diff --git a/drm/1.4/types.hal b/drm/1.4/types.hal new file mode 100644 index 0000000000..706c3aa92a --- /dev/null +++ b/drm/1.4/types.hal @@ -0,0 +1,51 @@ +/** + * Copyright (C) 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.hardware.drm@1.4; + +import @1.2::Status; + +enum LogPriority : uint32_t { + ERROR, + WARN, + INFO, + DEBUG, + VERBOSE +}; + +/** + * Returned by getLogMessages to report error diagnostics to the + * app. + */ +struct LogMessage { + int64_t timeMs; + LogPriority priority; + string message; +}; + +enum Status : @1.2::Status { + + /** + * Non-specific error reported by the device OEM subsystem. + */ + GENERAL_OEM_ERROR, + + /** + * Unexpected internal failure in the drm/crypto plugin. + */ + GENERAL_PLUGIN_ERROR, + +};