if (mDataMQ) {
ALOGE("the client attempts to call prepareForReading twice");
_hidl_cb(Result::INVALID_STATE,
- MQDescriptorSync<uint8_t>(), MQDescriptorSync<ReadStatus>());
+ DataMQ::Descriptor(), StatusMQ::Descriptor());
return Void();
}
std::unique_ptr<DataMQ> tempDataMQ(
ALOGE_IF(!tempDataMQ->isValid(), "data MQ is invalid");
ALOGE_IF(!tempStatusMQ->isValid(), "status MQ is invalid");
_hidl_cb(Result::INVALID_ARGUMENTS,
- MQDescriptorSync<uint8_t>(), MQDescriptorSync<ReadStatus>());
+ DataMQ::Descriptor(), StatusMQ::Descriptor());
return Void();
}
// TODO: Remove event flag management once blocking MQ is implemented. b/33815422
if (status != OK || !mEfGroup) {
ALOGE("failed creating event flag for data MQ: %s", strerror(-status));
_hidl_cb(Result::INVALID_ARGUMENTS,
- MQDescriptorSync<uint8_t>(), MQDescriptorSync<ReadStatus>());
+ DataMQ::Descriptor(), StatusMQ::Descriptor());
return Void();
}
if (status != OK) {
ALOGW("failed to start reader thread: %s", strerror(-status));
_hidl_cb(Result::INVALID_ARGUMENTS,
- MQDescriptorSync<uint8_t>(), MQDescriptorSync<ReadStatus>());
+ DataMQ::Descriptor(), StatusMQ::Descriptor());
return Void();
}
if (mDataMQ) {
ALOGE("the client attempts to call prepareForWriting twice");
_hidl_cb(Result::INVALID_STATE,
- MQDescriptorSync<uint8_t>(), MQDescriptorSync<WriteStatus>());
+ DataMQ::Descriptor(), StatusMQ::Descriptor());
return Void();
}
std::unique_ptr<DataMQ> tempDataMQ(
ALOGE_IF(!tempDataMQ->isValid(), "data MQ is invalid");
ALOGE_IF(!tempStatusMQ->isValid(), "status MQ is invalid");
_hidl_cb(Result::INVALID_ARGUMENTS,
- MQDescriptorSync<uint8_t>(), MQDescriptorSync<WriteStatus>());
+ DataMQ::Descriptor(), StatusMQ::Descriptor());
return Void();
}
// TODO: Remove event flag management once blocking MQ is implemented. b/33815422
if (status != OK || !mEfGroup) {
ALOGE("failed creating event flag for data MQ: %s", strerror(-status));
_hidl_cb(Result::INVALID_ARGUMENTS,
- MQDescriptorSync<uint8_t>(), MQDescriptorSync<WriteStatus>());
+ DataMQ::Descriptor(), StatusMQ::Descriptor());
return Void();
}
if (status != OK) {
ALOGW("failed to start writer thread: %s", strerror(-status));
_hidl_cb(Result::INVALID_ARGUMENTS,
- MQDescriptorSync<uint8_t>(), MQDescriptorSync<WriteStatus>());
+ DataMQ::Descriptor(), StatusMQ::Descriptor());
return Void();
}
#include <hardware/fingerprint.h>
#include "BiometricsFingerprint.h"
+#include <inttypes.h>
+
namespace android {
namespace hardware {
namespace biometrics {
if (auth_token != nullptr && auth_token_length > 0) {
// TODO: cache service?
sp<IServiceManager> sm = android::defaultServiceManager();
- sp<IBinder> binder = sm->getService(String16("android.security.keystore"));
+ sp<::android::IBinder> binder = sm->getService(String16("android.security.keystore"));
sp<IKeystoreService> service = interface_cast<IKeystoreService>(binder);
if (service != nullptr) {
- status_t ret = service->addAuthToken(auth_token, auth_token_length);
- if (ret != ResponseCode::NO_ERROR) {
- ALOGE("Falure sending auth token to KeyStore: %d", ret);
+ auto ret = service->addAuthToken(auth_token, auth_token_length);
+ if (!ret.isOk()) {
+ ALOGE("Failure sending auth token to KeyStore: %" PRId32, int32_t(ret));
}
} else {
ALOGE("Unable to communicate with KeyStore");
--- /dev/null
+#
+# Copyright (C) 2016 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.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+include $(LOCAL_PATH)/functional/vts/testcases/hal/bluetooth/hidl/Android.mk
--- /dev/null
+component_class: HAL_HIDL
+component_type_version: 1.0
+component_name: "IBluetoothHci"
+
+package: "android.hardware.bluetooth"
+
+import: "android.hardware.bluetooth@1.0::IBluetoothHciCallbacks"
+import: "android.hardware.bluetooth@1.0::types"
+
+interface: {
+ api: {
+ name: "initialize"
+ return_type_hidl: {
+ type: TYPE_ENUM
+ predefined_type: "::android::hardware::bluetooth::V1_0::Status"
+ }
+ arg: {
+ type: TYPE_HIDL_INTERFACE
+ predefined_type: "IBluetoothHciCallbacks"
+ is_callback: false
+ }
+ }
+
+ api: {
+ name: "sendHciCommand"
+ arg: {
+ type: TYPE_VECTOR
+ vector_value: {
+ type: TYPE_SCALAR
+ scalar_type: "uint8_t"
+ }
+ }
+ }
+
+ api: {
+ name: "sendAclData"
+ arg: {
+ type: TYPE_VECTOR
+ vector_value: {
+ type: TYPE_SCALAR
+ scalar_type: "uint8_t"
+ }
+ }
+ }
+
+ api: {
+ name: "sendScoData"
+ arg: {
+ type: TYPE_VECTOR
+ vector_value: {
+ type: TYPE_SCALAR
+ scalar_type: "uint8_t"
+ }
+ }
+ }
+
+ api: {
+ name: "close"
+ }
+
+}
--- /dev/null
+component_class: HAL_HIDL
+component_type_version: 1.0
+component_name: "IBluetoothHciCallbacks"
+
+package: "android.hardware.bluetooth"
+
+import: "android.hardware.bluetooth@1.0::types"
+
+interface: {
+ api: {
+ name: "hciEventReceived"
+ arg: {
+ type: TYPE_VECTOR
+ vector_value: {
+ type: TYPE_SCALAR
+ scalar_type: "uint8_t"
+ }
+ }
+ }
+
+ api: {
+ name: "aclDataReceived"
+ arg: {
+ type: TYPE_VECTOR
+ vector_value: {
+ type: TYPE_SCALAR
+ scalar_type: "uint8_t"
+ }
+ }
+ }
+
+ api: {
+ name: "scoDataReceived"
+ arg: {
+ type: TYPE_VECTOR
+ vector_value: {
+ type: TYPE_SCALAR
+ scalar_type: "uint8_t"
+ }
+ }
+ }
+
+}
--- /dev/null
+#
+# Copyright (C) 2016 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.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+include $(call all-subdir-makefiles)
--- /dev/null
+#
+# Copyright (C) 2016 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.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := HalBluetoothHidlTargetBasicTest
+VTS_CONFIG_SRC_DIR := testcases/hal/bluetooth/hidl/target
+include test/vts/tools/build/Android.host_config.mk
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<configuration description="Config for VTS Bluetooth HIDL HAL's basic target-side test cases">
+ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+ <option name="push-group" value="HidlHalTest.push" />
+ </target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
+ <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
+ <option name="test-module-name" value="HalBluetoothHidlTargetBasicTest" />
+ <option name="binary-test-sources" value="
+ _64bit::DATA/nativetest64/bluetooth_hidl_hal_test/bluetooth_hidl_hal_test,
+ "/>
+ <option name="binary-test-type" value="gtest" />
+ <option name="test-timeout" value="1m" />
+ </test>
+</configuration>
--- /dev/null
+#
+## Copyright (C) 2016 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.
+# #
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := BluetoothHidlTargetProfilingTest
+VTS_CONFIG_SRC_DIR := testcases/hal/bluetooth/hidl/target_profiling
+include test/vts/tools/build/Android.host_config.mk
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<configuration description="Config for VTS Bluetooth HIDL HAL's target-side profiling test cases">
+ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+ <option name="push-group" value="HidlHalTest.push" />
+ </target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
+ <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
+ <option name="test-module-name" value="BluetoothHidlTargetProfilingTest" />
+ <option name="binary-test-sources" value="
+ _64bit::DATA/nativetest64/bluetooth_hidl_hal_test/bluetooth_hidl_hal_test,
+ "/>
+ <option name="binary-test-type" value="gtest" />
+ <option name="test-timeout" value="1m" />
+ <option name="enable-profiling" value="true" />
+ </test>
+</configuration>
--- /dev/null
+component_class: HAL_HIDL
+component_type_version: 1.0
+component_name: "types"
+
+package: "android.hardware.bluetooth"
+
+
+attribute: {
+ name: "::android::hardware::bluetooth::V1_0::Status"
+ type: TYPE_ENUM
+ enum_value: {
+ scalar_type: "int32_t"
+
+ enumerator: "SUCCESS"
+ scalar_value: {
+ int32_t: 0
+ }
+ enumerator: "TRANSPORT_ERROR"
+ scalar_value: {
+ int32_t: 1
+ }
+ enumerator: "INITIALIZATION_ERROR"
+ scalar_value: {
+ int32_t: 2
+ }
+ enumerator: "UNKNOWN"
+ scalar_value: {
+ int32_t: 3
+ }
+ }
+}
+
}
-IBootControl* HIDL_FETCH_IBootControl(const char* hal) {
+IBootControl* HIDL_FETCH_IBootControl(const char* /* hal */) {
int ret = 0;
boot_control_module_t* module = NULL;
hw_module_t **hwm = reinterpret_cast<hw_module_t**>(&module);
- ret = hw_get_module(hal, const_cast<const hw_module_t**>(hwm));
+ ret = hw_get_module(BOOT_CONTROL_HARDWARE_MODULE_ID, const_cast<const hw_module_t**>(hwm));
if (ret)
{
- ALOGE("hw_get_module %s failed: %d", hal, ret);
+ ALOGE("hw_get_module %s failed: %d", BOOT_CONTROL_HARDWARE_MODULE_ID, ret);
return nullptr;
}
module->init(module);
using android::hardware::defaultPassthroughServiceImplementation;
int main (int /* argc */, char * /* argv */ []) {
- return defaultPassthroughServiceImplementation<IBootControl>("bootctrl");
+ return defaultPassthroughServiceImplementation<IBootControl>();
}
],
export_include_dirs: ["."]
}
+
+cc_library_shared {
+ name: "android.hardware.camera.device@3.2-impl-binderized",
+ srcs: ["CameraDevice.cpp",
+ "CameraDeviceSession.cpp",
+ "convert.cpp"],
+ cppflags: ["-DBINDERIZED"],
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "libcutils",
+ "android.hardware.camera.device@3.2",
+ "android.hardware.camera.provider@2.4",
+ "liblog",
+ "libhardware",
+ "libcamera_metadata"
+ ],
+ static_libs: [
+ "android.hardware.camera.common@1.0-helper"
+ ],
+ export_include_dirs: ["."]
+}
"android.hardware.camera.common@1.0-helper"
]
}
+
+cc_binary {
+ name: "android.hardware.camera.provider@2.4-service",
+ relative_install_path: "hw",
+ srcs: ["service.cpp", "CameraProvider.cpp"],
+ compile_multilib: "32",
+ init_rc: ["android.hardware.camera.provider@2.4-service.rc"],
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "liblog",
+ "libhwbinder",
+ "libutils",
+ "libhardware",
+ "android.hardware.camera.device@1.0",
+ "android.hardware.camera.device@3.2",
+ "android.hardware.camera.provider@2.4",
+ "android.hardware.camera.common@1.0",
+ "libcutils",
+ "android.hardware.camera.device@3.2-impl-binderized",
+ "libcamera_metadata"
+ ],
+ static_libs: [
+ "android.hardware.camera.common@1.0-helper"
+ ]
+}
#define LOG_TAG "CamProvider@2.4-impl"
#include <android/log.h>
-#include <regex>
-
#include "CameraProvider.h"
#include "CameraDevice.h"
#include <string.h>
#ifndef ANDROID_HARDWARE_CAMERA_PROVIDER_V2_4_CAMERAPROVIDER_H
#define ANDROID_HARDWARE_CAMERA_PROVIDER_V2_4_CAMERAPROVIDER_H
+#include <regex>
#include "hardware/camera_common.h"
#include "utils/Mutex.h"
#include "utils/SortedVector.h"
--- /dev/null
+service camera-provider-2-4 /system/bin/hw/android.hardware.camera.provider@2.4-service
+ class hal
+ user cameraserver
+ group audio camera input drmrpc
+ ioprio rt 4
+ writepid /dev/cpuset/camera-daemon/tasks /dev/stune/top-app/tasks
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "android.hardware.camera.provider@2.4-service"
+
+#include <android/hardware/camera/provider/2.4/ICameraProvider.h>
+#include <CameraProvider.h>
+
+#include <hidl/HidlTransportSupport.h>
+#include <utils/StrongPointer.h>
+
+using android::hardware::configureRpcThreadpool;
+using android::hardware::joinRpcThreadpool;
+using android::sp;
+using android::hardware::camera::provider::V2_4::ICameraProvider;
+using android::hardware::camera::provider::V2_4::implementation::HIDL_FETCH_ICameraProvider;
+
+int main()
+{
+ const char instance[] = "legacy/0";
+
+ ALOGI("Camera provider Service is starting.");
+
+ configureRpcThreadpool(1, true /* callerWillJoin */);
+ // TODO (b/34510650): check the passthrough/binderized dev key
+ sp<ICameraProvider> service = HIDL_FETCH_ICameraProvider(instance);
+ if (service == nullptr) {
+ ALOGI("Camera provider getService returned NULL");
+ return -1;
+ }
+
+ LOG_FATAL_IF(service->isRemote(), "Camera provider service is REMOTE!");
+
+ service->registerAsService(instance);
+ joinRpcThreadpool();
+
+ return 0;
+}
\ No newline at end of file
--- /dev/null
+// This file is autogenerated by hidl-gen. Do not edit manually.
+
+genrule {
+ name: "android.hardware.drm@1.0_genc++",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.drm@1.0",
+ srcs: [
+ "types.hal",
+ "ICryptoFactory.hal",
+ "ICryptoPlugin.hal",
+ "IDrmFactory.hal",
+ "IDrmPlugin.hal",
+ "IDrmPluginListener.hal",
+ ],
+ out: [
+ "android/hardware/drm/1.0/types.cpp",
+ "android/hardware/drm/1.0/CryptoFactoryAll.cpp",
+ "android/hardware/drm/1.0/CryptoPluginAll.cpp",
+ "android/hardware/drm/1.0/DrmFactoryAll.cpp",
+ "android/hardware/drm/1.0/DrmPluginAll.cpp",
+ "android/hardware/drm/1.0/DrmPluginListenerAll.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.drm@1.0_genc++_headers",
+ tools: ["hidl-gen"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.drm@1.0",
+ srcs: [
+ "types.hal",
+ "ICryptoFactory.hal",
+ "ICryptoPlugin.hal",
+ "IDrmFactory.hal",
+ "IDrmPlugin.hal",
+ "IDrmPluginListener.hal",
+ ],
+ out: [
+ "android/hardware/drm/1.0/types.h",
+ "android/hardware/drm/1.0/ICryptoFactory.h",
+ "android/hardware/drm/1.0/IHwCryptoFactory.h",
+ "android/hardware/drm/1.0/BnHwCryptoFactory.h",
+ "android/hardware/drm/1.0/BpHwCryptoFactory.h",
+ "android/hardware/drm/1.0/BsCryptoFactory.h",
+ "android/hardware/drm/1.0/ICryptoPlugin.h",
+ "android/hardware/drm/1.0/IHwCryptoPlugin.h",
+ "android/hardware/drm/1.0/BnHwCryptoPlugin.h",
+ "android/hardware/drm/1.0/BpHwCryptoPlugin.h",
+ "android/hardware/drm/1.0/BsCryptoPlugin.h",
+ "android/hardware/drm/1.0/IDrmFactory.h",
+ "android/hardware/drm/1.0/IHwDrmFactory.h",
+ "android/hardware/drm/1.0/BnHwDrmFactory.h",
+ "android/hardware/drm/1.0/BpHwDrmFactory.h",
+ "android/hardware/drm/1.0/BsDrmFactory.h",
+ "android/hardware/drm/1.0/IDrmPlugin.h",
+ "android/hardware/drm/1.0/IHwDrmPlugin.h",
+ "android/hardware/drm/1.0/BnHwDrmPlugin.h",
+ "android/hardware/drm/1.0/BpHwDrmPlugin.h",
+ "android/hardware/drm/1.0/BsDrmPlugin.h",
+ "android/hardware/drm/1.0/IDrmPluginListener.h",
+ "android/hardware/drm/1.0/IHwDrmPluginListener.h",
+ "android/hardware/drm/1.0/BnHwDrmPluginListener.h",
+ "android/hardware/drm/1.0/BpHwDrmPluginListener.h",
+ "android/hardware/drm/1.0/BsDrmPluginListener.h",
+ ],
+}
+
+cc_library_shared {
+ name: "android.hardware.drm@1.0",
+ generated_sources: ["android.hardware.drm@1.0_genc++"],
+ generated_headers: ["android.hardware.drm@1.0_genc++_headers"],
+ export_generated_headers: ["android.hardware.drm@1.0_genc++_headers"],
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "android.hidl.base@1.0",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "android.hidl.base@1.0",
+ ],
+}
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package android.hardware.drm.crypto@1.0;
+package android.hardware.drm@1.0;
import ICryptoPlugin;
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package android.hardware.drm.crypto@1.0;
+package android.hardware.drm@1.0;
-import android.hardware.drm.crypto@1.0::types;
+import android.hardware.drm@1.0::types;
/**
* Ref: frameworks/native/include/media/hardware/CryptoAPI.h:CryptoPlugin
setMediaDrmSession(vec<uint8_t> sessionId) generates(Status status);
/**
+ * Set a shared memory base for subsequent decrypt operations. The buffer
+ * base is a hidl_memory which maps shared memory in the HAL module.
+ * After the shared buffer base is established, the decrypt() method
+ * receives SharedBuffer instances which specify the buffer address range
+ * for decrypt source and destination addresses.
+ */
+ setSharedBufferBase(memory base);
+
+ /**
* Decrypt an array of subsamples from the source memory buffer to the
* destination memory buffer.
*
*/
decrypt(bool secure, uint8_t[16] keyId, uint8_t[16] iv, Mode mode,
Pattern pattern, vec<SubSample> subSamples,
- memory source, uint32_t offset, DestinationBuffer destination)
+ SharedBuffer source, uint64_t offset, DestinationBuffer destination)
generates(Status status, uint32_t bytesWritten, string detailedError);
};
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package android.hardware.drm.drm@1.0;
+package android.hardware.drm@1.0;
import IDrmPlugin;
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package android.hardware.drm.drm@1.0;
+package android.hardware.drm@1.0;
import IDrmPluginListener;
* limitations under the License.
*/
-package android.hardware.drm.drm@1.0;
+package android.hardware.drm@1.0;
-import android.hardware.drm.drm@1.0::types;
+import android.hardware.drm@1.0::types;
/**
* Ref: frameworks/native/include/media/drm/DrmAPI.h:DrmPluginListener
# limitations under the License.
+############# Build legacy drm service ############
+
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
service.cpp \
LOCAL_SHARED_LIBRARIES := \
+ android.hardware.drm@1.0 \
+ android.hidl.memory@1.0 \
libhidlbase \
libhidltransport \
- liblog \
+ libhardware \
libhwbinder \
+ liblog \
libutils \
- libhardware \
- android.hardware.drm.drm@1.0 \
- android.hardware.drm.crypto@1.0 \
- android.hidl.memory@1.0 \
-
LOCAL_C_INCLUDES := \
hardware/interfaces/drm
LOCAL_32_BIT_ONLY := true
include $(BUILD_EXECUTABLE)
+
+############# Build legacy drm impl library ############
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := android.hardware.drm@1.0-impl
+LOCAL_MODULE_RELATIVE_PATH := hw
+LOCAL_SRC_FILES := \
+ DrmFactory.cpp \
+ DrmPlugin.cpp \
+ CryptoFactory.cpp \
+ CryptoPlugin.cpp \
+ TypeConvert.cpp \
+
+LOCAL_SHARED_LIBRARIES := \
+ android.hardware.drm@1.0 \
+ android.hidl.memory@1.0 \
+ libhidlbase \
+ libhidlmemory \
+ libhidltransport \
+ libhwbinder \
+ liblog \
+ libmediadrm \
+ libstagefright_foundation \
+ libutils \
+
+LOCAL_C_INCLUDES := \
+ frameworks/native/include \
+ frameworks/av/include
+
+# TODO: The legacy DRM plugins only support 32-bit. They need
+# to be migrated to 64-bit (b/18948909)
+LOCAL_32_BIT_ONLY := true
+
+include $(BUILD_SHARED_LIBRARY)
namespace android {
namespace hardware {
namespace drm {
-namespace crypto {
namespace V1_0 {
namespace implementation {
loader("/vendor/lib/mediadrm", "createCryptoFactory") {
}
- // Methods from ::android::hardware::drm::crypto::V1_0::ICryptoFactory follow.
+ // Methods from ::android::hardware::drm::V1_0::ICryptoFactory follow.
Return<bool> CryptoFactory::isCryptoSchemeSupported(
const hidl_array<uint8_t, 16>& uuid) {
for (size_t i = 0; i < loader.factoryCount(); i++) {
} // namespace implementation
} // namespace V1_0
-} // namespace crypto
} // namespace drm
} // namespace hardware
} // namespace android
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-#ifndef ANDROID_HARDWARE_DRM_CRYPTO_V1_0__CRYPTOFACTORY_H
-#define ANDROID_HARDWARE_DRM_CRYPTO_V1_0__CRYPTOFACTORY_H
+#ifndef ANDROID_HARDWARE_DRM_V1_0__CRYPTOFACTORY_H
+#define ANDROID_HARDWARE_DRM_V1_0__CRYPTOFACTORY_H
-#include <android/hardware/drm/crypto/1.0/ICryptoFactory.h>
+#include <android/hardware/drm/1.0/ICryptoFactory.h>
#include <hidl/Status.h>
#include <media/hardware/CryptoAPI.h>
#include <media/PluginLoader.h>
namespace android {
namespace hardware {
namespace drm {
-namespace crypto {
namespace V1_0 {
namespace implementation {
-using ::android::hardware::drm::crypto::V1_0::ICryptoFactory;
-using ::android::hardware::drm::crypto::V1_0::ICryptoPlugin;
+using ::android::hardware::drm::V1_0::ICryptoFactory;
+using ::android::hardware::drm::V1_0::ICryptoPlugin;
using ::android::hardware::hidl_array;
using ::android::hardware::hidl_string;
using ::android::hardware::hidl_vec;
CryptoFactory();
virtual ~CryptoFactory() {}
- // Methods from ::android::hardware::drm::crypto::V1_0::ICryptoFactory follow.
+ // Methods from ::android::hardware::drm::V1_0::ICryptoFactory follow.
Return<bool> isCryptoSchemeSupported(const hidl_array<uint8_t, 16>& uuid)
override;
} // namespace implementation
} // namespace V1_0
-} // namespace crypto
} // namespace drm
} // namespace hardware
} // namespace android
-#endif // ANDROID_HARDWARE_DRM_CRYPTO_V1_0__CRYPTOFACTORY_H
+#endif // ANDROID_HARDWARE_DRM_V1_0__CRYPTOFACTORY_H
#include "CryptoPlugin.h"
#include "TypeConvert.h"
-#include <media/stagefright/foundation/AString.h>
-
-#include <hidlmemory/mapping.h>
#include <android/hidl/memory/1.0/IMemory.h>
+#include <hidlmemory/mapping.h>
+#include <media/stagefright/foundation/AString.h>
#include <utils/Log.h>
+using android::hardware::hidl_memory;
using android::hidl::memory::V1_0::IMemory;
-
namespace android {
namespace hardware {
namespace drm {
-namespace crypto {
namespace V1_0 {
namespace implementation {
- // Methods from ::android::hardware::drm::crypto::V1_0::ICryptoPlugin follow
+ // Methods from ::android::hardware::drm::V1_0::ICryptoPlugin follow
Return<bool> CryptoPlugin::requiresSecureDecoderComponent(
const hidl_string& mime) {
return mLegacyPlugin->requiresSecureDecoderComponent(mime);
return toStatus(mLegacyPlugin->setMediaDrmSession(toVector(sessionId)));
}
+ Return<void> CryptoPlugin::setSharedBufferBase(const hidl_memory& base) {
+ mSharedBufferBase = mapMemory(base);
+ return Void();
+ }
+
Return<void> CryptoPlugin::decrypt(bool secure,
const hidl_array<uint8_t, 16>& keyId,
const hidl_array<uint8_t, 16>& iv, Mode mode,
const Pattern& pattern, const hidl_vec<SubSample>& subSamples,
- const hidl_memory& source, uint32_t offset,
+ const SharedBuffer& source, uint64_t offset,
const DestinationBuffer& destination,
decrypt_cb _hidl_cb) {
AString detailMessage;
- sp<IMemory> sharedSourceMemory = mapMemory(source);
+ if (source.offset + offset + source.size > mSharedBufferBase->getSize()) {
+ _hidl_cb(Status::ERROR_DRM_CANNOT_HANDLE, 0, "invalid buffer size");
+ return Void();
+ }
- void *srcPtr = static_cast<void *>(sharedSourceMemory->getPointer());
- uint8_t *offsetSrc = static_cast<uint8_t *>(srcPtr) + offset;
- srcPtr = static_cast<void *>(offsetSrc);
+ uint8_t *base = static_cast<uint8_t *>
+ (static_cast<void *>(mSharedBufferBase->getPointer()));
+ void *srcPtr = static_cast<void *>(base + source.offset + offset);
- sp<IMemory> sharedDestinationMemory;
void *destPtr = NULL;
-
if (destination.type == BufferType::SHARED_MEMORY) {
- sharedDestinationMemory = mapMemory(destination.nonsecureMemory);
- sharedDestinationMemory->update();
- destPtr = sharedDestinationMemory->getPointer();
+ const SharedBuffer& destBuffer = destination.nonsecureMemory;
+ if (destBuffer.offset + destBuffer.size > mSharedBufferBase->getSize()) {
+ _hidl_cb(Status::ERROR_DRM_CANNOT_HANDLE, 0, "invalid buffer size");
+ return Void();
+ }
+ destPtr = static_cast<void *>(base + destination.nonsecureMemory.offset);
} else if (destination.type == BufferType::NATIVE_HANDLE) {
native_handle_t *handle = const_cast<native_handle_t *>(
destination.secureMemory.getNativeHandle());
legacyMode, legacyPattern, srcPtr, legacySubSamples,
subSamples.size(), destPtr, &detailMessage);
- if (destination.type == BufferType::SHARED_MEMORY) {
- sharedDestinationMemory->commit();
- }
-
delete[] legacySubSamples;
uint32_t status;
} // namespace implementation
} // namespace V1_0
-} // namespace crypto
} // namespace drm
} // namespace hardware
} // namespace android
* limitations under the License.
*/
-#ifndef ANDROID_HARDWARE_DRM_CRYPTO_V1_0__CRYPTOPLUGIN_H
-#define ANDROID_HARDWARE_DRM_CRYPTO_V1_0__CRYPTOPLUGIN_H
+#ifndef ANDROID_HARDWARE_DRM_V1_0__CRYPTOPLUGIN_H
+#define ANDROID_HARDWARE_DRM_V1_0__CRYPTOPLUGIN_H
-#include <media/hardware/CryptoAPI.h>
-#include <android/hardware/drm/crypto/1.0/ICryptoPlugin.h>
+#include <android/hidl/memory/1.0/IMemory.h>
+#include <android/hardware/drm/1.0/ICryptoPlugin.h>
#include <hidl/Status.h>
+#include <media/hardware/CryptoAPI.h>
namespace android {
namespace hardware {
namespace drm {
-namespace crypto {
namespace V1_0 {
namespace implementation {
-using ::android::hardware::drm::crypto::V1_0::DestinationBuffer;
-using ::android::hardware::drm::crypto::V1_0::ICryptoPlugin;
-using ::android::hardware::drm::crypto::V1_0::Mode;
-using ::android::hardware::drm::crypto::V1_0::Pattern;
-using ::android::hardware::drm::crypto::V1_0::SubSample;
+using ::android::hardware::drm::V1_0::DestinationBuffer;
+using ::android::hardware::drm::V1_0::ICryptoPlugin;
+using ::android::hardware::drm::V1_0::Mode;
+using ::android::hardware::drm::V1_0::Pattern;
+using ::android::hardware::drm::V1_0::SubSample;
using ::android::hardware::hidl_array;
using ::android::hardware::hidl_string;
using ::android::hardware::hidl_vec;
using ::android::hardware::Return;
using ::android::hardware::Void;
+using ::android::hidl::memory::V1_0::IMemory;
using ::android::sp;
struct CryptoPlugin : public ICryptoPlugin {
~CryptoPlugin() {delete mLegacyPlugin;}
- // Methods from ::android::hardware::drm::crypto::V1_0::ICryptoPlugin
+ // Methods from ::android::hardware::drm::V1_0::ICryptoPlugin
// follow.
Return<bool> requiresSecureDecoderComponent(const hidl_string& mime)
Return<Status> setMediaDrmSession(const hidl_vec<uint8_t>& sessionId)
override;
+ Return<void> setSharedBufferBase(const ::android::hardware::hidl_memory& base)
+ override;
+
Return<void> decrypt(bool secure, const hidl_array<uint8_t, 16>& keyId,
const hidl_array<uint8_t, 16>& iv, Mode mode, const Pattern& pattern,
- const hidl_vec<SubSample>& subSamples, const hidl_memory& source,
- uint32_t offset, const DestinationBuffer& destination,
+ const hidl_vec<SubSample>& subSamples, const SharedBuffer& source,
+ uint64_t offset, const DestinationBuffer& destination,
decrypt_cb _hidl_cb) override;
private:
android::CryptoPlugin *mLegacyPlugin;
+ sp<IMemory> mSharedBufferBase;
CryptoPlugin() = delete;
CryptoPlugin(const CryptoPlugin &) = delete;
} // namespace implementation
} // namespace V1_0
-} // namespace crypto
} // namespace drm
} // namespace hardware
} // namespace android
-#endif // ANDROID_HARDWARE_DRM_CRYPTO_V1_0__CRYPTOPLUGIN_H
+#endif // ANDROID_HARDWARE_DRM_V1_0__CRYPTOPLUGIN_H
namespace android {
namespace hardware {
namespace drm {
-namespace drm {
namespace V1_0 {
namespace implementation {
loader("/vendor/lib/mediadrm", "createDrmFactory") {
}
- // Methods from ::android::hardware::drm::drm::V1_0::IDrmFactory follow.
+ // Methods from ::android::hardware::drm::V1_0::IDrmFactory follow.
Return<bool> DrmFactory::isCryptoSchemeSupported (
const hidl_array<uint8_t, 16>& uuid) {
for (size_t i = 0; i < loader.factoryCount(); i++) {
} // namespace implementation
} // namespace V1_0
} // namespace drm
-} // namespace drm
} // namespace hardware
} // namespace android
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-#ifndef ANDROID_HARDWARE_DRM_DRM_V1_0__DRMFACTORY_H
-#define ANDROID_HARDWARE_DRM_DRM_V1_0__DRMFACTORY_H
+#ifndef ANDROID_HARDWARE_DRM_V1_0__DRMFACTORY_H
+#define ANDROID_HARDWARE_DRM_V1_0__DRMFACTORY_H
-#include <android/hardware/drm/drm/1.0/IDrmFactory.h>
+#include <android/hardware/drm/1.0/IDrmFactory.h>
#include <hidl/Status.h>
#include <media/drm/DrmAPI.h>
#include <media/PluginLoader.h>
namespace android {
namespace hardware {
namespace drm {
-namespace drm {
namespace V1_0 {
namespace implementation {
-using ::android::hardware::drm::drm::V1_0::IDrmFactory;
-using ::android::hardware::drm::drm::V1_0::IDrmPlugin;
+using ::android::hardware::drm::V1_0::IDrmFactory;
+using ::android::hardware::drm::V1_0::IDrmPlugin;
using ::android::hardware::hidl_array;
using ::android::hardware::hidl_string;
using ::android::hardware::hidl_vec;
DrmFactory();
virtual ~DrmFactory() {}
- // Methods from ::android::hardware::drm::drm::V1_0::IDrmFactory follow.
+ // Methods from ::android::hardware::drm::V1_0::IDrmFactory follow.
Return<bool> isCryptoSchemeSupported(const hidl_array<uint8_t, 16>& uuid)
override;
} // namespace implementation
} // namespace V1_0
} // namespace drm
-} // namespace drm
} // namespace hardware
} // namespace android
-#endif // ANDROID_HARDWARE_DRM_DRM_V1_0__DRMFACTORY_H
+#endif // ANDROID_HARDWARE_DRM_V1_0__DRMFACTORY_H
namespace android {
namespace hardware {
namespace drm {
-namespace drm {
namespace V1_0 {
namespace implementation {
- // Methods from ::android::hardware::drm::drm::V1_0::IDrmPlugin follow.
+ // Methods from ::android::hardware::drm::V1_0::IDrmPlugin follow.
Return<void> DrmPlugin::openSession(openSession_cb _hidl_cb) {
Vector<uint8_t> legacySessionId;
} // namespace implementation
} // namespace V1_0
} // namespace drm
-} // namespace drm
} // namespace hardware
} // namespace android
* limitations under the License.
*/
-#ifndef ANDROID_HARDWARE_DRM_DRM_V1_0__DRMPLUGIN_H
-#define ANDROID_HARDWARE_DRM_DRM_V1_0__DRMPLUGIN_H
+#ifndef ANDROID_HARDWARE_DRM_V1_0__DRMPLUGIN_H
+#define ANDROID_HARDWARE_DRM_V1_0__DRMPLUGIN_H
-#include <media/drm/DrmAPI.h>
-#include <android/hardware/drm/drm/1.0/IDrmPlugin.h>
-#include <android/hardware/drm/drm/1.0/IDrmPluginListener.h>
-#include <hidl/MQDescriptor.h>
+#include <android/hardware/drm/1.0/IDrmPlugin.h>
+#include <android/hardware/drm/1.0/IDrmPluginListener.h>
#include <hidl/Status.h>
+#include <media/drm/DrmAPI.h>
namespace android {
namespace hardware {
namespace drm {
-namespace drm {
namespace V1_0 {
namespace implementation {
-using ::android::hardware::drm::drm::V1_0::EventType;
-using ::android::hardware::drm::drm::V1_0::IDrmPlugin;
-using ::android::hardware::drm::drm::V1_0::IDrmPluginListener;
-using ::android::hardware::drm::drm::V1_0::KeyRequestType;
-using ::android::hardware::drm::drm::V1_0::KeyStatus;
-using ::android::hardware::drm::drm::V1_0::KeyType;
-using ::android::hardware::drm::drm::V1_0::KeyValue;
-using ::android::hardware::drm::drm::V1_0::SecureStop;
+using ::android::hardware::drm::V1_0::EventType;
+using ::android::hardware::drm::V1_0::IDrmPlugin;
+using ::android::hardware::drm::V1_0::IDrmPluginListener;
+using ::android::hardware::drm::V1_0::KeyRequestType;
+using ::android::hardware::drm::V1_0::KeyStatus;
+using ::android::hardware::drm::V1_0::KeyType;
+using ::android::hardware::drm::V1_0::KeyValue;
+using ::android::hardware::drm::V1_0::SecureStop;
using ::android::hardware::hidl_array;
using ::android::hardware::hidl_string;
using ::android::hardware::hidl_vec;
DrmPlugin(android::DrmPlugin *plugin) : mLegacyPlugin(plugin) {}
~DrmPlugin() {delete mLegacyPlugin;}
- // Methods from ::android::hardware::drm::drm::V1_0::IDrmPlugin follow.
+ // Methods from ::android::hardware::drm::V1_0::IDrmPlugin follow.
Return<void> openSession(openSession_cb _hidl_cb) override;
} // namespace implementation
} // namespace V1_0
} // namespace drm
-} // namespace drm
} // namespace hardware
} // namespace android
-#endif // ANDROID_HARDWARE_DRM_DRM_V1_0__DRMPLUGIN_H
+#endif // ANDROID_HARDWARE_DRM_V1_0__DRMPLUGIN_H
namespace android {
namespace hardware {
namespace drm {
-namespace drm {
namespace V1_0 {
namespace implementation {
case android::ERROR_DRM_RESOURCE_BUSY:
status = Status::ERROR_DRM_RESOURCE_BUSY;
break;
+ case android::ERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION:
+ status = Status::ERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION;
+ break;
case android::ERROR_DRM_DEVICE_REVOKED:
status = Status::ERROR_DRM_DEVICE_REVOKED;
break;
} // namespace implementation
} // namespace V1_0
} // namespace drm
-} // namespace drm
} // namespace hardware
} // namespace android
* limitations under the License.
*/
-#ifndef ANDROID_HARDWARE_DRM_CRYPTO_V1_0_TYPECONVERT
-#define ANDROID_HARDWARE_DRM_CRYPTO_V1_0_TYPECONVERT
+#ifndef ANDROID_HARDWARE_DRM_V1_0_TYPECONVERT
+#define ANDROID_HARDWARE_DRM_V1_0_TYPECONVERT
-#include <utils/Vector.h>
+#include <android/hardware/drm/1.0/types.h>
#include <media/stagefright/MediaErrors.h>
-#include <media/hardware/CryptoAPI.h>
-
-#include <hidl/MQDescriptor.h>
-#include <android/hardware/drm/crypto/1.0/types.h>
+#include <utils/Vector.h>
namespace android {
namespace hardware {
namespace drm {
-namespace crypto {
namespace V1_0 {
namespace implementation {
} // namespace implementation
} // namespace V1_0
-} // namespace crypto
} // namespace drm
} // namespace hardware
} // namespace android
-#endif // ANDROID_HARDWARE_DRM_CRYPTO_V1_0_TYPECONVERT
+#endif // ANDROID_HARDWARE_DRM_V1_0_TYPECONVERT
#define LOG_TAG "android.hardware.drm@1.0-service"
-#include <crypto/1.0/default/CryptoFactory.h>
-#include <drm/1.0/default/DrmFactory.h>
+#include <1.0/default/CryptoFactory.h>
+#include <1.0/default/DrmFactory.h>
#include <hidl/HidlTransportSupport.h>
#include <hidl/LegacySupport.h>
using android::hardware::joinRpcThreadpool;
using android::hardware::registerPassthroughServiceImplementation;
-using android::hardware::drm::crypto::V1_0::ICryptoFactory;
-using android::hardware::drm::drm::V1_0::IDrmFactory;
+using android::hardware::drm::V1_0::ICryptoFactory;
+using android::hardware::drm::V1_0::IDrmFactory;
int main() {
ALOGD("android.hardware.drm@1.0-service starting...");
* limitations under the License.
*/
-package android.hardware.drm.drm@1.0;
+package android.hardware.drm@1.0;
enum Status : uint32_t {
/**
ERROR_DRM_INVALID_STATE,
/**
- * The Drm plugin must return BAD_VALUE whenever an illegal parameter is
+ * The DRM plugin must return BAD_VALUE whenever an illegal parameter is
* passed to one of the interface functions.
*/
BAD_VALUE,
ERROR_DRM_RESOURCE_BUSY,
/**
- * The Drm Plugin must return ERROR_DRM_DEVICE_REVOKED from
+ * The DRM Plugin must return ERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION
+ * when the output protection level enabled on the device is not
+ * sufficient to meet the requirements in the license policy. HDCP is an
+ * example of a form of output protection.
+ */
+ ERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION,
+
+ /**
+ * The DRM Plugin must return ERROR_DRM_DEVICE_REVOKED from
* provideProvisionResponse and provideKeyResponse if the response indicates
* that the device has been revoked. Device revocation means that the device
* is no longer permitted to play content.
};
typedef vec<uint8_t> SecureStopId;
+
+
+/**
+ * Enumerate the supported crypto modes
+ */
+enum Mode : uint32_t {
+ UNENCRYPTED = 0, // Samples are unencrypted
+ AES_CTR = 1, // Samples are encrypted with AES CTR mode
+ AES_CBC_CTS = 2, // Samples are encrypted with AES CBC CTS mode
+ AES_CBC = 3, // Samples are encrypted with AES CBC mode
+};
+
+/**
+ * A subsample consists of some number of bytes of clear (unencrypted)
+ * data followed by a number of bytes of encrypted data.
+ */
+struct SubSample {
+ uint32_t numBytesOfClearData;
+ uint32_t numBytesOfEncryptedData;
+};
+
+/**
+ * A crypto Pattern is a repeating sequence of encrypted and clear blocks
+ * occuring within the bytes indicated by mNumBytesOfEncryptedDatad bytes
+ * of a subsample. Patterns are used to reduce the CPU overhead of
+ * decrypting samples. As an example, HLS uses 1:9 patterns where every
+ * 10th block is encrypted.
+ */
+struct Pattern {
+ /**
+ * The number of blocks to be encrypted in the pattern. If zero,
+ * pattern encryption is inoperative.
+ */
+ uint32_t encryptBlocks;
+
+ /**
+ * The number of blocks to be skipped (left clear) in the pattern. If
+ * zero, pattern encryption is inoperative.
+ */
+ uint32_t skipBlocks;
+};
+
+enum BufferType : uint32_t {
+ SHARED_MEMORY = 0,
+ NATIVE_HANDLE = 1,
+};
+
+/**
+ * A SharedBuffer describes a decrypt buffer which is defined by an offset and
+ * a size. The offset is relative to the shared memory base which is established
+ * using setSharedMemoryBase().
+ */
+struct SharedBuffer {
+ /**
+ * The offset from the shared memory base
+ */
+ uint64_t offset;
+
+ /**
+ * The size of the shared buffer in bytes
+ */
+ uint64_t size;
+};
+
+
+/**
+ * A decrypt destination buffer can be either normal user-space shared
+ * memory for the non-secure decrypt case, or it can be a secure buffer
+ * which is referenced by a native-handle. The native handle is allocated
+ * by the vendor's buffer allocator.
+ */
+struct DestinationBuffer {
+ /**
+ * The type of the buffer
+ */
+ BufferType type;
+
+ /**
+ * If type == SHARED_MEMORY, the decrypted data must be written
+ * to user-space non-secure shared memory.
+ */
+ SharedBuffer nonsecureMemory;
+
+ /**
+ * If type == NATIVE_HANDLE, the decrypted data must be written
+ * to secure memory referenced by the vendor's buffer allocator.
+ */
+ handle secureMemory;
+};
// This is an autogenerated file, do not edit.
subdirs = [
- "crypto/1.0",
- "drm/1.0",
+ "1.0",
]
+++ /dev/null
-// This file is autogenerated by hidl-gen. Do not edit manually.
-
-genrule {
- name: "android.hardware.drm.crypto@1.0_genc++",
- tools: ["hidl-gen"],
- cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.drm.crypto@1.0",
- srcs: [
- "types.hal",
- "ICryptoFactory.hal",
- "ICryptoPlugin.hal",
- ],
- out: [
- "android/hardware/drm/crypto/1.0/types.cpp",
- "android/hardware/drm/crypto/1.0/CryptoFactoryAll.cpp",
- "android/hardware/drm/crypto/1.0/CryptoPluginAll.cpp",
- ],
-}
-
-genrule {
- name: "android.hardware.drm.crypto@1.0_genc++_headers",
- tools: ["hidl-gen"],
- cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.drm.crypto@1.0",
- srcs: [
- "types.hal",
- "ICryptoFactory.hal",
- "ICryptoPlugin.hal",
- ],
- out: [
- "android/hardware/drm/crypto/1.0/types.h",
- "android/hardware/drm/crypto/1.0/ICryptoFactory.h",
- "android/hardware/drm/crypto/1.0/IHwCryptoFactory.h",
- "android/hardware/drm/crypto/1.0/BnHwCryptoFactory.h",
- "android/hardware/drm/crypto/1.0/BpHwCryptoFactory.h",
- "android/hardware/drm/crypto/1.0/BsCryptoFactory.h",
- "android/hardware/drm/crypto/1.0/ICryptoPlugin.h",
- "android/hardware/drm/crypto/1.0/IHwCryptoPlugin.h",
- "android/hardware/drm/crypto/1.0/BnHwCryptoPlugin.h",
- "android/hardware/drm/crypto/1.0/BpHwCryptoPlugin.h",
- "android/hardware/drm/crypto/1.0/BsCryptoPlugin.h",
- ],
-}
-
-cc_library_shared {
- name: "android.hardware.drm.crypto@1.0",
- generated_sources: ["android.hardware.drm.crypto@1.0_genc++"],
- generated_headers: ["android.hardware.drm.crypto@1.0_genc++_headers"],
- export_generated_headers: ["android.hardware.drm.crypto@1.0_genc++_headers"],
- shared_libs: [
- "libhidlbase",
- "libhidltransport",
- "libhwbinder",
- "liblog",
- "libutils",
- "libcutils",
- "android.hidl.base@1.0",
- ],
- export_shared_lib_headers: [
- "libhidlbase",
- "libhidltransport",
- "libhwbinder",
- "libutils",
- "android.hidl.base@1.0",
- ],
-}
+++ /dev/null
-# Copyright (C) 2016, 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.
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := android.hardware.drm.crypto@1.0-impl
-LOCAL_MODULE_RELATIVE_PATH := hw
-LOCAL_SRC_FILES := \
- CryptoFactory.cpp \
- CryptoPlugin.cpp \
- TypeConvert.cpp \
-
-LOCAL_SHARED_LIBRARIES := \
- libhidlbase \
- libhidltransport \
- libhwbinder \
- libhidlmemory \
- libutils \
- liblog \
- libmediadrm \
- libstagefright_foundation \
- android.hardware.drm.crypto@1.0 \
- android.hidl.memory@1.0 \
-
-LOCAL_C_INCLUDES := \
- frameworks/native/include \
- frameworks/av/include
-
-# TODO: The legacy DRM plugins only support 32-bit. They need
-# to be migrated to 64-bit (b/18948909)
-LOCAL_32_BIT_ONLY := true
-
-
-include $(BUILD_SHARED_LIBRARY)
+++ /dev/null
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "TypeConvert.h"
-
-namespace android {
-namespace hardware {
-namespace drm {
-namespace crypto {
-namespace V1_0 {
-namespace implementation {
-
-Status toStatus(status_t legacyStatus) {
- Status status;
- switch(legacyStatus) {
- case android::OK:
- status = Status::OK;
- break;
- case android::ERROR_DRM_NO_LICENSE:
- status = Status::ERROR_DRM_NO_LICENSE;
- break;
- case android::ERROR_DRM_LICENSE_EXPIRED:
- status = Status::ERROR_DRM_LICENSE_EXPIRED;
- break;
- case android::ERROR_DRM_RESOURCE_BUSY:
- status = Status::ERROR_DRM_RESOURCE_BUSY;
- break;
- case android::ERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION:
- status = Status::ERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION;
- break;
- case android::ERROR_DRM_SESSION_NOT_OPENED:
- status = Status::ERROR_DRM_SESSION_NOT_OPENED;
- break;
- case android::ERROR_DRM_CANNOT_HANDLE:
- case android::BAD_VALUE:
- status = Status::ERROR_DRM_CANNOT_HANDLE;
- break;
- default:
- ALOGW("Unable to convert legacy status: %d, defaulting to UNKNOWN",
- legacyStatus);
- status = Status::ERROR_UNKNOWN_CRYPTO_EXCEPTION;
- break;
- }
- return status;
-}
-
-} // namespace implementation
-} // namespace V1_0
-} // namespace crypto
-} // namespace drm
-} // namespace hardware
-} // namespace android
+++ /dev/null
-/*
- * Copyright (C) 2016 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.crypto@1.0;
-
-enum Status : uint32_t {
- /**
- * The Crypto plugin must return OK when an operation completes without any
- * errors.
- */
- OK,
-
- /**
- * The Crypto Plugin must return ERROR_DRM_NO_LICENSE if decryption is
- * attempted when the license keys have not been loaded into the crypto
- * session.
- */
- ERROR_DRM_NO_LICENSE,
-
- /**
- * The Crypto Plugin must return ERROR_DRM_LICENSE_EXPIRED if decryption
- * is attempted when the license keys have expired and are no longer usable.
- */
- ERROR_DRM_LICENSE_EXPIRED,
-
- /**
- * The Crypto Plugin must return ERROR_DRM_RESOURCE_BUSY when a required
- * crypto resource cannot be allocated while attempting decryption.
- */
- ERROR_DRM_RESOURCE_BUSY,
-
- /**
- * The Crypto Plugin must return ERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION
- * when the output protection level enabled on the device is not
- * sufficient to meet the requirements in the license policy. HDCP is an
- * example of a form of output protection.
- */
- ERROR_DRM_INSUFFICIENT_OUTPUT_PROTECTION,
-
- /**
- * The Crypto Plugin must return ERROR_DRM_SESSION_NOT_OPENED when
- * decryption is attempted on a session that is not opened.
- */
- ERROR_DRM_SESSION_NOT_OPENED,
-
- /**
- * The Crypto Plugin must return ERROR_DRM_CANNOT_HANDLE when an operation
- * is attempted that cannot be supported by the crypto system of the device.
- */
- ERROR_DRM_CANNOT_HANDLE,
-
- /**
- * The Crypto Plugin must return ERROR_UNKNOWN_CRYPTO_EXCEPTION in any
- * fatal condition that is not covered by the other error messages.
- */
- ERROR_UNKNOWN_CRYPTO_EXCEPTION,
-};
-
-/**
- * Enumerate the supported crypto modes
- */
-enum Mode : uint32_t {
- UNENCRYPTED = 0, // Samples are unencrypted
- AES_CTR = 1, // Samples are encrypted with AES CTR mode
- AES_CBC_CTS = 2, // Samples are encrypted with AES CBC CTS mode
- AES_CBC = 3, // Samples are encrypted with AES CBC mode
-};
-
-/**
- * A subsample consists of some number of bytes of clear (unencrypted)
- * data followed by a number of bytes of encrypted data.
- */
-struct SubSample {
- uint32_t numBytesOfClearData;
- uint32_t numBytesOfEncryptedData;
-};
-
-/**
- * A crypto Pattern is a repeating sequence of encrypted and clear blocks
- * occuring within the bytes indicated by mNumBytesOfEncryptedDatad bytes
- * of a subsample. Patterns are used to reduce the CPU overhead of
- * decrypting samples. As an example, HLS uses 1:9 patterns where every
- * 10th block is encrypted.
- */
-struct Pattern {
- /**
- * The number of blocks to be encrypted in the pattern. If zero,
- * pattern encryption is inoperative.
- */
- uint32_t encryptBlocks;
-
- /**
- * The number of blocks to be skipped (left clear) in the pattern. If
- * zero, pattern encryption is inoperative.
- */
- uint32_t skipBlocks;
-};
-
-enum BufferType : uint32_t {
- SHARED_MEMORY = 0,
- NATIVE_HANDLE = 1,
-};
-
-
-/**
- * A decrypt destination buffer can be either normal user-space shared
- * memory for the non-secure decrypt case, or it can be a secure buffer
- * which is referenced by a native-handle. The native handle is allocated
- * by the vendor's buffer allocator.
- */
-struct DestinationBuffer {
- /**
- * The type of the buffer
- */
- BufferType type;
-
- /**
- * If type == SHARED_MEMORY, the decrypted data must be written
- * to user-space non-secure shared memory.
- */
- memory nonsecureMemory;
-
- /**
- * If type == NATIVE_HANDLE, the decrypted data must be written
- * to secure memory referenced by the vendor's buffer allocator.
- */
- handle secureMemory;
-};
+++ /dev/null
-// This file is autogenerated by hidl-gen. Do not edit manually.
-
-genrule {
- name: "android.hardware.drm.drm@1.0_genc++",
- tools: ["hidl-gen"],
- cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.drm.drm@1.0",
- srcs: [
- "types.hal",
- "IDrmFactory.hal",
- "IDrmPlugin.hal",
- "IDrmPluginListener.hal",
- ],
- out: [
- "android/hardware/drm/drm/1.0/types.cpp",
- "android/hardware/drm/drm/1.0/DrmFactoryAll.cpp",
- "android/hardware/drm/drm/1.0/DrmPluginAll.cpp",
- "android/hardware/drm/drm/1.0/DrmPluginListenerAll.cpp",
- ],
-}
-
-genrule {
- name: "android.hardware.drm.drm@1.0_genc++_headers",
- tools: ["hidl-gen"],
- cmd: "$(location hidl-gen) -o $(genDir) -Lc++ -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.drm.drm@1.0",
- srcs: [
- "types.hal",
- "IDrmFactory.hal",
- "IDrmPlugin.hal",
- "IDrmPluginListener.hal",
- ],
- out: [
- "android/hardware/drm/drm/1.0/types.h",
- "android/hardware/drm/drm/1.0/IDrmFactory.h",
- "android/hardware/drm/drm/1.0/IHwDrmFactory.h",
- "android/hardware/drm/drm/1.0/BnHwDrmFactory.h",
- "android/hardware/drm/drm/1.0/BpHwDrmFactory.h",
- "android/hardware/drm/drm/1.0/BsDrmFactory.h",
- "android/hardware/drm/drm/1.0/IDrmPlugin.h",
- "android/hardware/drm/drm/1.0/IHwDrmPlugin.h",
- "android/hardware/drm/drm/1.0/BnHwDrmPlugin.h",
- "android/hardware/drm/drm/1.0/BpHwDrmPlugin.h",
- "android/hardware/drm/drm/1.0/BsDrmPlugin.h",
- "android/hardware/drm/drm/1.0/IDrmPluginListener.h",
- "android/hardware/drm/drm/1.0/IHwDrmPluginListener.h",
- "android/hardware/drm/drm/1.0/BnHwDrmPluginListener.h",
- "android/hardware/drm/drm/1.0/BpHwDrmPluginListener.h",
- "android/hardware/drm/drm/1.0/BsDrmPluginListener.h",
- ],
-}
-
-cc_library_shared {
- name: "android.hardware.drm.drm@1.0",
- generated_sources: ["android.hardware.drm.drm@1.0_genc++"],
- generated_headers: ["android.hardware.drm.drm@1.0_genc++_headers"],
- export_generated_headers: ["android.hardware.drm.drm@1.0_genc++_headers"],
- shared_libs: [
- "libhidlbase",
- "libhidltransport",
- "libhwbinder",
- "liblog",
- "libutils",
- "libcutils",
- "android.hidl.base@1.0",
- ],
- export_shared_lib_headers: [
- "libhidlbase",
- "libhidltransport",
- "libhwbinder",
- "libutils",
- "android.hidl.base@1.0",
- ],
-}
+++ /dev/null
-# Copyright (C) 2016, 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.
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := android.hardware.drm.drm@1.0-impl
-LOCAL_MODULE_RELATIVE_PATH := hw
-LOCAL_SRC_FILES := \
- DrmFactory.cpp \
- DrmPlugin.cpp \
- TypeConvert.cpp \
-
-LOCAL_SHARED_LIBRARIES := \
- libhidlbase \
- libhidltransport \
- libhwbinder \
- libutils \
- liblog \
- libmediadrm \
- libstagefright_foundation \
- android.hardware.drm.drm@1.0 \
-
-LOCAL_C_INCLUDES := \
- frameworks/native/include \
- frameworks/av/include
-
-# TODO: The legacy DRM plugins only support 32-bit. They need
-# to be migrated to 64-bit (b/18948909)
-LOCAL_32_BIT_ONLY := true
-
-include $(BUILD_SHARED_LIBRARY)
+++ /dev/null
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef ANDROID_HARDWARE_DRM_DRM_V1_0_TYPECONVERT
-#define ANDROID_HARDWARE_DRM_DRM_V1_0_TYPECONVERT
-
-#include <utils/Vector.h>
-#include <media/stagefright/MediaErrors.h>
-#include <media/drm/DrmAPI.h>
-
-#include <hidl/MQDescriptor.h>
-#include <android/hardware/drm/drm/1.0/types.h>
-
-namespace android {
-namespace hardware {
-namespace drm {
-namespace drm {
-namespace V1_0 {
-namespace implementation {
-
-using ::android::hardware::hidl_vec;
-
-template<typename T> const hidl_vec<T> toHidlVec(const Vector<T> &Vector) {
- hidl_vec<T> vec;
- vec.setToExternal(const_cast<T *>(Vector.array()), Vector.size());
- return vec;
-}
-
-template<typename T> hidl_vec<T> toHidlVec(Vector<T> &Vector) {
- hidl_vec<T> vec;
- vec.setToExternal(Vector.editArray(), Vector.size());
- return vec;
-}
-
-template<typename T> const Vector<T> toVector(const hidl_vec<T> & vec) {
- Vector<T> vector;
- vector.appendArray(vec.data(), vec.size());
- return *const_cast<const Vector<T> *>(&vector);
-}
-
-template<typename T> Vector<T> toVector(hidl_vec<T> &vec) {
- Vector<T> vector;
- vector.appendArray(vec.data(), vec.size());
- return vector;
-}
-
-Status toStatus(status_t legacyStatus);
-
-} // namespace implementation
-} // namespace V1_0
-} // namespace drm
-} // namespace drm
-} // namespace hardware
-} // namespace android
-
-#endif // ANDROID_HARDWARE_DRM_DRM_V1_0_TYPECONVERT
/*
* Carrier frequency of the signal tracked, for example it can be the
- * GPS L1 = 1.57542e9 Hz, or L2, L5, varying GLO channels, etc. If
- * the field is not set, it is the primary common use frequency,
- * e.g. L1 for GPS.
+ * GPS central frequency for L1 = 1575.45 MHz, or L2 = 1227.60 MHz, L5 =
+ * 1176.45 MHz, varying GLO channels, etc. If the field is not set, it
+ * is the primary common use central frequency, e.g. L1 = 1575.45 MHz
+ * for GPS.
+ *
+ * For an L1, L5 receiver tracking a satellite on L1 and L5 at the same
+ * time, two GnssSvInfo structs must be reported for this same
+ * satellite, in one of the structs, all the values related
+ * to L1 must be filled, and in the other all of the values related to
+ * L5 must be filled.
*
* If the data is available, gnssClockFlags must contain
* HAS_CARRIER_FREQUENCY.
/*
* Carrier frequency of the signal tracked, for example it can be the
- * GPS L1 = 1.57542e9 Hz, or L2, L5, varying GLO channels, etc. If the
- * field is not set, it is the primary common use frequency,
- * e.g. L1 for GPS.
+ * GPS central frequency for L1 = 1575.45 MHz, or L2 = 1227.60 MHz, L5 =
+ * 1176.45 MHz, varying GLO channels, etc. If the field is not set, it
+ * is the primary common use central frequency, e.g. L1 = 1575.45 MHz
+ * for GPS.
+ *
+ * For an L1, L5 receiver tracking a satellite on L1 and L5 at the same
+ * time, two raw measurement structs must be reported for this same
+ * satellite, in one of the measurement structs, all the values related
+ * to L1 must be filled, and in the other all of the values related to
+ * L5 must be filled.
*
* If the data is available, gnssClockFlags must contain
* HAS_CARRIER_FREQUENCY.
/*
* Automatic gain control (AGC) level. AGC acts as a variable gain
- * amplifier adjusting the power of the incoming signal to minimize the
- * quantization losses. The AGC level may be used to indicate potential
- * interference. When AGC is at a nominal level, this value
- * must be set as 0. Higher gain (and/or lower input power) must be
- * output as a positive number. Hence in cases of strong jamming, in the
- * band of this signal, this value must go more negative.
+ * amplifier adjusting the power of the incoming signal. The AGC level
+ * may be used to indicate potential interference. When AGC is at a
+ * nominal level, this value must be set as 0. Higher gain (and/or lower
+ * input power) must be output as a positive number. Hence in cases of
+ * strong jamming, in the band of this signal, this value must go more
+ * negative.
*
* Note: Different hardware designs (e.g. antenna, pre-amplification, or
* other RF HW components) may also affect the typical output of of this
* red 0.680 0.320
* white (D65) 0.3127 0.3290
*
- * Gamma: 2.2
+ * Gamma: 2.6
*/
DCI_P3 = 6,
*
* Gamma: 2.2
*/
- ADOBE_RGB = 8
+ ADOBE_RGB = 8,
+
+ /*
+ * DISPLAY_P3 is a color space that uses the DCI_P3 primaries,
+ * the D65 white point and the SRGB transfer functions.
+ * Rendering Intent: Colorimetric
+ * Primaries:
+ * x y
+ * green 0.265 0.690
+ * blue 0.150 0.060
+ * red 0.680 0.320
+ * white (D65) 0.3127 0.3290
+ *
+ * PC/Internet (sRGB) Gamma Correction (GC):
+ *
+ * if Vlinear ≤ 0.0031308
+ * Vnonlinear = 12.92 * Vlinear
+ * else
+ * Vnonlinear = 1.055 * (Vlinear)^(1/2.4) – 0.055
+ */
+ DISPLAY_P3 = 9
};
/*
if (outDescriptor) {
hidl_cb(Error::NONE, *outDescriptor);
} else {
- hidl_cb(Error::NO_RESOURCES, MQDescriptorSync<uint32_t>());
+ hidl_cb(Error::NO_RESOURCES, CommandQueueType::Descriptor());
}
return Void();
"android.hidl.base@1.0",
],
}
+
+genrule {
+ name: "android.hardware.ir.vts.driver@1.0_genc++",
+ tools: ["hidl-gen", "vtsc"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.ir@1.0 && $(location vtsc) -mDRIVER -tSOURCE -b$(genDir) android/hardware/ir/1.0/ $(genDir)/android/hardware/ir/1.0/",
+ srcs: [
+ "types.hal",
+ "IConsumerIr.hal",
+ ],
+ out: [
+ "android/hardware/ir/1.0/types.vts.cpp",
+ "android/hardware/ir/1.0/ConsumerIr.vts.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.ir.vts.driver@1.0_genc++_headers",
+ tools: ["hidl-gen", "vtsc"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.ir@1.0 && $(location vtsc) -mDRIVER -tHEADER -b$(genDir) android/hardware/ir/1.0/ $(genDir)/android/hardware/ir/1.0/",
+ srcs: [
+ "types.hal",
+ "IConsumerIr.hal",
+ ],
+ out: [
+ "android/hardware/ir/1.0/types.vts.h",
+ "android/hardware/ir/1.0/ConsumerIr.vts.h",
+ ],
+}
+
+cc_library_shared {
+ name: "android.hardware.ir.vts.driver@1.0",
+ generated_sources: ["android.hardware.ir.vts.driver@1.0_genc++"],
+ generated_headers: ["android.hardware.ir.vts.driver@1.0_genc++_headers"],
+ export_generated_headers: ["android.hardware.ir.vts.driver@1.0_genc++_headers"],
+ shared_libs: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "liblog",
+ "libutils",
+ "libcutils",
+ "libvts_common",
+ "libvts_datatype",
+ "libvts_measurement",
+ "libvts_multidevice_proto",
+ "libcamera_metadata",
+ "libprotobuf-cpp-full",
+ "android.hidl.base@1.0",
+ "android.hardware.ir@1.0",
+ ],
+ export_shared_lib_headers: [
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "android.hidl.base@1.0",
+ ],
+}
+
+genrule {
+ name: "android.hardware.ir@1.0-IConsumerIr-vts.profiler_genc++",
+ tools: ["hidl-gen", "vtsc"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.ir@1.0 && $(location vtsc) -mPROFILER -tSOURCE -b$(genDir) android/hardware/ir/1.0/ $(genDir)/android/hardware/ir/1.0/",
+ srcs: [
+ "IConsumerIr.hal",
+ "types.hal",
+ ],
+ out: [
+ "android/hardware/ir/1.0/ConsumerIr.vts.cpp",
+ "android/hardware/ir/1.0/types.vts.cpp",
+ ],
+}
+
+genrule {
+ name: "android.hardware.ir@1.0-IConsumerIr-vts.profiler_genc++_headers",
+ tools: ["hidl-gen", "vtsc"],
+ cmd: "$(location hidl-gen) -o $(genDir) -Lvts -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport android.hardware.ir@1.0 && $(location vtsc) -mPROFILER -tHEADER -b$(genDir) android/hardware/ir/1.0/ $(genDir)/android/hardware/ir/1.0/",
+ srcs: [
+ "IConsumerIr.hal",
+ "types.hal",
+ ],
+ out: [
+ "android/hardware/ir/1.0/ConsumerIr.vts.h",
+ "android/hardware/ir/1.0/types.vts.h",
+ ],
+}
+
+cc_library_shared {
+ name: "android.hardware.ir@1.0-IConsumerIr-vts.profiler",
+ generated_sources: ["android.hardware.ir@1.0-IConsumerIr-vts.profiler_genc++"],
+ generated_headers: ["android.hardware.ir@1.0-IConsumerIr-vts.profiler_genc++_headers"],
+ export_generated_headers: ["android.hardware.ir@1.0-IConsumerIr-vts.profiler_genc++_headers"],
+ shared_libs: [
+ "libbase",
+ "libhidlbase",
+ "libhidltransport",
+ "libvts_profiling",
+ "libvts_multidevice_proto",
+ "libprotobuf-cpp-full",
+ "android.hidl.base@1.0",
+ "android.hardware.ir@1.0",
+ ],
+}
--- /dev/null
+#
+# Copyright (C) 2016 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.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+include $(LOCAL_PATH)/functional/vts/testcases/hal/ir/hidl/target/Android.mk
--- /dev/null
+component_class: HAL_HIDL
+component_type_version: 1.0
+component_name: "IConsumerIr"
+
+package: "android.hardware.ir"
+
+import: "android.hardware.ir@1.0::types"
+
+interface: {
+ api: {
+ name: "transmit"
+ return_type_hidl: {
+ type: TYPE_SCALAR
+ scalar_type: "bool_t"
+ }
+ arg: {
+ type: TYPE_SCALAR
+ scalar_type: "int32_t"
+ }
+ arg: {
+ type: TYPE_VECTOR
+ vector_value: {
+ type: TYPE_SCALAR
+ scalar_type: "int32_t"
+ }
+ }
+ }
+
+ api: {
+ name: "getCarrierFreqs"
+ return_type_hidl: {
+ type: TYPE_SCALAR
+ scalar_type: "bool_t"
+ }
+ return_type_hidl: {
+ type: TYPE_VECTOR
+ vector_value: {
+ type: TYPE_STRUCT
+ predefined_type: "::android::hardware::ir::V1_0::ConsumerIrFreqRange"
+ }
+ }
+ }
+
+}
--- /dev/null
+//
+// Copyright (C) 2016 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.
+//
+
+cc_test {
+ name: "ir_hidl_hal_test",
+ gtest: true,
+ srcs: ["ir_hidl_hal_test.cpp"],
+ shared_libs: [
+ "libbase",
+ "liblog",
+ "libcutils",
+ "libhidlbase",
+ "libhidltransport",
+ "libhwbinder",
+ "libutils",
+ "android.hardware.ir@1.0",
+ ],
+ static_libs: ["libgtest"],
+ cflags: [
+ "--coverage",
+ "-O0",
+ "-g",
+ ],
+ ldflags: [
+ "--coverage"
+ ]
+}
--- /dev/null
+/*
+ * Copyright (C) 2016 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 "ir_hidl_hal_test"
+
+#include <android-base/logging.h>
+
+#include <android/hardware/ir/1.0/IConsumerIr.h>
+#include <android/hardware/ir/1.0/types.h>
+
+#include <gtest/gtest.h>
+#include <algorithm>
+
+using ::android::hardware::ir::V1_0::IConsumerIr;
+using ::android::hardware::ir::V1_0::ConsumerIrFreqRange;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::Return;
+using ::android::sp;
+
+// The main test class for IR HIDL HAL.
+class ConsumerIrHidlTest : public ::testing::Test {
+ public:
+ virtual void SetUp() override {
+ ir = IConsumerIr::getService(false);
+ ASSERT_NE(ir, nullptr);
+ }
+
+ virtual void TearDown() override {}
+
+ sp<IConsumerIr> ir;
+};
+
+// Test transmit() for the min and max frequency of every available range
+TEST_F(ConsumerIrHidlTest, TransmitTest) {
+ int32_t freqs;
+ bool success;
+ hidl_vec<ConsumerIrFreqRange> ranges;
+ auto cb = [&](bool s, hidl_vec<ConsumerIrFreqRange> v) {
+ ranges = v;
+ success = s;
+ };
+ Return<void> ret = ir->getCarrierFreqs(cb);
+ ASSERT_TRUE(ret.isOk());
+ ASSERT_TRUE(success);
+
+ if (ranges.size() > 0) {
+ uint32_t len = 16;
+ hidl_vec<int32_t> vec;
+ vec.resize(len);
+ std::fill(vec.begin(), vec.end(), 1);
+ for (auto range = ranges.begin(); range != ranges.end(); range++) {
+ EXPECT_TRUE(ir->transmit(range->min, vec));
+ EXPECT_TRUE(ir->transmit(range->max, vec));
+ }
+ }
+}
+
+// Test transmit() when called with invalid frequencies
+TEST_F(ConsumerIrHidlTest, BadFreqTest) {
+ uint32_t len = 16;
+ hidl_vec<int32_t> vec;
+ vec.resize(len);
+ std::fill(vec.begin(), vec.end(), 1);
+ EXPECT_FALSE(ir->transmit(-1, vec));
+ EXPECT_FALSE(ir->transmit(0, vec));
+}
+
+int main(int argc, char **argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ int status = RUN_ALL_TESTS();
+ LOG(INFO) << "Test result = " << status;
+ return status;
+}
--- /dev/null
+#
+# Copyright (C) 2016 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.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := HalIrHidlTargetTest
+VTS_CONFIG_SRC_DIR := testcases/hal/ir/hidl/target
+include test/vts/tools/build/Android.host_config.mk
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<configuration description="Config for VTS IR HIDL HAL's target-side test cases">
+ <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
+ <option name="push-group" value="HidlHalTest.push" />
+ </target_preparer>
+ <target_preparer class="com.android.tradefed.targetprep.VtsPythonVirtualenvPreparer" />
+ <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
+ <option name="test-module-name" value="HalIrHidlTargetTest"/>
+ <option name="binary-test-sources" value="
+ _32bit::DATA/nativetest/ir_hidl_hal_test/ir_hidl_hal_test,
+ _64bit::DATA/nativetest64/ir_hidl_hal_test/ir_hidl_hal_test,
+ "/>
+ <option name="binary-test-type" value="hal_hidl_gtest" />
+ <option name="hwbinder-service" value="android.hardware.ir" />
+ <option name="test-timeout" value="1m" />
+ </test>
+</configuration>
--- /dev/null
+component_class: HAL_HIDL
+component_type_version: 1.0
+component_name: "types"
+
+package: "android.hardware.ir"
+
+
+attribute: {
+ name: "::android::hardware::ir::V1_0::ConsumerIrFreqRange"
+ type: TYPE_STRUCT
+ struct_value: {
+ name: "min"
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+ struct_value: {
+ name: "max"
+ type: TYPE_SCALAR
+ scalar_type: "uint32_t"
+ }
+}
\ No newline at end of file
subdirs = [
"1.0",
"1.0/default",
+ "1.0/vts/functional",
]
--- /dev/null
+#
+# Copyright (C) 2016 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.
+#
+
+LOCAL_PATH := $(call my-dir)
+
+include $(call all-subdir-makefiles)
* limitations under the License.
*/
-#define LOG_TAG "android.hardware.nfc@1.0-service"
+#define LOG_TAG "android.hardware.sensors@1.0-service"
#include <android/hardware/sensors/1.0/ISensors.h>
#include <hidl/LegacySupport.h>
return type != TV_STREAM_TYPE_BUFFER_PRODUCER;
}
-ITvInput* HIDL_FETCH_ITvInput(const char* name) {
+ITvInput* HIDL_FETCH_ITvInput(const char* /* name */) {
int ret = 0;
const hw_module_t* hw_module = nullptr;
tv_input_device_t* input_device;
}
}
else {
- LOG(ERROR) << "hw_get_module " << name << " failed: " << ret;
+ LOG(ERROR) << "hw_get_module " << TV_INPUT_HARDWARE_MODULE_ID
+ << " failed: " << ret;
return nullptr;
}
}
using android::hardware::defaultPassthroughServiceImplementation;
int main() {
- return defaultPassthroughServiceImplementation<ITvInput>("tv.input");
+ return defaultPassthroughServiceImplementation<ITvInput>();
}
target_version=1.0,
target_package="android.hardware.tv.input",
target_component_name="ITvInput",
- hw_binder_service_name="tv-input-1-0",
bits=64 if self.dut.is64Bit else 32)
self.dut.shell.InvokeTerminal("one")
TEST_F(VehicleHalManagerTest, get_NegativeCases) {
// Write-only property must fail.
invokeGet(VehicleProperty::HVAC_SEAT_TEMPERATURE, 0);
- ASSERT_EQ(StatusCode::INVALID_ARG, actualStatusCode);
+ ASSERT_EQ(StatusCode::ACCESS_DENIED, actualStatusCode);
// Unknown property must fail.
invokeGet(VehicleProperty::MIRROR_Z_MOVE, 0);
}
if (!checkReadPermission(*config, getCaller())) {
- _hidl_cb(StatusCode::INVALID_ARG, kEmptyValue);
+ _hidl_cb(StatusCode::ACCESS_DENIED, kEmptyValue);
return Void();
}
}
if (!checkWritePermission(*config, getCaller())) {
- return StatusCode::INVALID_ARG;
+ return StatusCode::ACCESS_DENIED;
}
handlePropertySetEvent(value);
const sp<IVehicleCallback> &callback,
const hidl_vec<SubscribeOptions> &options) {
hidl_vec<SubscribeOptions> verifiedOptions(options);
+ auto caller = getCaller();
for (size_t i = 0; i < verifiedOptions.size(); i++) {
SubscribeOptions& ops = verifiedOptions[i];
VehicleProperty prop = ops.propId;
return StatusCode::INVALID_ARG;
}
+ if (!checkAcl(caller.uid, config->prop, VehiclePropertyAccess::READ)) {
+ return StatusCode::ACCESS_DENIED;
+ }
+
if (!isSubscribable(*config, ops.flags)) {
ALOGE("Failed to subscribe: property 0x%x is not subscribable",
prop);
return true;
}
-bool checkAcl(const PropertyAclMap& aclMap,
- uid_t callerUid,
- VehicleProperty propertyId,
- VehiclePropertyAccess requiredAccess) {
+bool VehicleHalManager::checkAcl(uid_t callerUid, VehicleProperty propertyId,
+ VehiclePropertyAccess requiredAccess) const {
if (callerUid == AID_SYSTEM && isSystemProperty(propertyId)) {
return true;
}
- auto range = aclMap.equal_range(propertyId);
+ auto range = mPropertyAclMap.equal_range(propertyId);
for (auto it = range.first; it != range.second; ++it) {
auto& acl = it->second;
if (acl.uid == callerUid && (acl.access & requiredAccess)) {
ALOGW("Property 0%x has no write access", config.prop);
return false;
}
- return checkAcl(mPropertyAclMap, caller.uid, config.prop,
- VehiclePropertyAccess::WRITE);
+ return checkAcl(caller.uid, config.prop, VehiclePropertyAccess::WRITE);
}
bool VehicleHalManager::checkReadPermission(const VehiclePropConfig &config,
return false;
}
- return checkAcl(mPropertyAclMap, caller.uid, config.prop,
- VehiclePropertyAccess::READ);
+ return checkAcl(caller.uid, config.prop, VehiclePropertyAccess::READ);
}
void VehicleHalManager::handlePropertySetEvent(const VehiclePropValue& value) {
const Caller& callee) const;
bool checkReadPermission(const VehiclePropConfig &config,
const Caller& caller) const;
+ bool checkAcl(uid_t callerUid,
+ VehicleProperty propertyId,
+ VehiclePropertyAccess requiredAccess) const;
static bool isSubscribable(const VehiclePropConfig& config,
SubscribeFlags flags);
from vts.runners.host import asserts
from vts.runners.host import base_test_with_webdb
+from vts.runners.host import const
from vts.runners.host import test_runner
from vts.utils.python.controllers import android_device
from vts.utils.python.profiling import profiling_utils
self.dut.shell.InvokeTerminal("one")
self.dut.shell.one.Execute("setenforce 0") # SELinux permissive mode
+ results = self.dut.shell.one.Execute("id -u system")
+ system_uid = results[const.STDOUT][0].strip()
+ logging.info("system_uid: %s", system_uid)
+
self.dut.hal.InitHidlHal(
target_type="vehicle",
target_basepaths=self.dut.libPaths,
bits=64 if self.dut.is64Bit else 32)
self.vehicle = self.dut.hal.vehicle # shortcut
+ self.vehicle.SetCallerUid(system_uid)
self.vtypes = self.dut.hal.vehicle.GetHidlTypeInterface("types")
logging.info("vehicle types: %s", self.vtypes)
return Status::OK;
}
-IVibrator* HIDL_FETCH_IVibrator(const char *hal) {
+IVibrator* HIDL_FETCH_IVibrator(const char * /*hal*/) {
vibrator_device_t *vib_device;
const hw_module_t *hw_module = nullptr;
- int ret = hw_get_module(hal, &hw_module);
+ int ret = hw_get_module(VIBRATOR_HARDWARE_MODULE_ID, &hw_module);
if (ret == 0) {
ret = vibrator_open(hw_module, &vib_device);
if (ret != 0) {
- ALOGE("vibrator_open %s failed: %d", hal, ret);
+ ALOGE("vibrator_open failed: %d", ret);
}
} else {
- ALOGE("hw_get_module %s failed: %d", hal, ret);
+ ALOGE("hw_get_module %s failed: %d", VIBRATOR_HARDWARE_MODULE_ID, ret);
}
if (ret == 0) {
using ::android::hardware::Void;
using ::android::sp;
-#define VIBRATOR_SERVICE_NAME "vibrator"
-
// The main test class for VIBRATOR HIDL HAL.
class VibratorHidlTest : public ::testing::Test {
public:
virtual void SetUp() override {
- vibrator = IVibrator::getService(VIBRATOR_SERVICE_NAME, false);
+ vibrator = IVibrator::getService(false);
ASSERT_NE(vibrator, nullptr);
}
target_version=1.0,
target_package="android.hardware.vibrator",
target_component_name="IVibrator",
- hw_binder_service_name="vibrator",
bits=64 if self.dut.is64Bit else 32)
def tearDownClass(self):
if (!legacy_request) {
return false;
}
- memset(&legacy_request, 0, sizeof(legacy_hal::NanPublishRequest));
+ memset(legacy_request, 0, sizeof(legacy_hal::NanPublishRequest));
legacy_request->publish_id = hidl_request.baseConfigs.sessionId;
legacy_request->ttl = hidl_request.baseConfigs.ttlSec;
if (!legacy_request) {
return false;
}
- memset(&legacy_request, 0, sizeof(legacy_hal::NanSubscribeRequest));
+ memset(legacy_request, 0, sizeof(legacy_hal::NanSubscribeRequest));
legacy_request->subscribe_id = hidl_request.baseConfigs.sessionId;
legacy_request->ttl = hidl_request.baseConfigs.ttlSec;
if (!legacy_request) {
return false;
}
- memset(&legacy_request, 0, sizeof(legacy_hal::NanTransmitFollowupRequest));
+ memset(legacy_request, 0, sizeof(legacy_hal::NanTransmitFollowupRequest));
legacy_request->publish_subscribe_id = hidl_request.discoverySessionId;
legacy_request->requestor_instance_id = hidl_request.peerId;
if (!legacy_request) {
return false;
}
- memset(&legacy_request, 0, sizeof(legacy_hal::NanConfigRequest));
+ memset(legacy_request, 0, sizeof(legacy_hal::NanConfigRequest));
// TODO: b/34059183 tracks missing configurations in legacy HAL or uknown defaults
legacy_request->master_pref = hidl_request.masterPref;
if (!legacy_request) {
return false;
}
- memset(&legacy_request, 0, sizeof(legacy_hal::NanBeaconSdfPayloadRequest));
+ memset(legacy_request, 0, sizeof(legacy_hal::NanBeaconSdfPayloadRequest));
legacy_request->vsa.payload_transmit_flag = hidl_request.transmitInNext16dws ? 1 : 0;
legacy_request->vsa.tx_in_discovery_beacon = hidl_request.transmitInDiscoveryBeacon;
if (!legacy_request) {
return false;
}
- memset(&legacy_request, 0, sizeof(legacy_hal::NanDataPathInitiatorRequest));
+ memset(legacy_request, 0, sizeof(legacy_hal::NanDataPathInitiatorRequest));
legacy_request->requestor_instance_id = hidl_request.peerId;
memcpy(legacy_request->peer_disc_mac_addr, hidl_request.peerDiscMacAddr.data(), 6);
if (!legacy_request) {
return false;
}
- memset(&legacy_request, 0, sizeof(legacy_hal::NanDataPathIndicationResponse));
+ memset(legacy_request, 0, sizeof(legacy_hal::NanDataPathIndicationResponse));
legacy_request->rsp_code = hidl_request.acceptRequest ?
legacy_hal::NAN_DP_REQUEST_ACCEPT : legacy_hal::NAN_DP_REQUEST_REJECT;
// Setup hwbinder service
android::sp<android::hardware::wifi::V1_0::IWifi> service =
new android::hardware::wifi::V1_0::implementation::Wifi();
- CHECK_EQ(service->registerAsService("wifi"), android::NO_ERROR)
+ CHECK_EQ(service->registerAsService(), android::NO_ERROR)
<< "Failed to register wifi HAL";
joinRpcThreadpool();
using ::android::hardware::hidl_string;
using ::android::hardware::hidl_vec;
-const char kWifiServiceName[] = "wifi";
-
void stopFramework() {
ASSERT_EQ(std::system("svc wifi disable"), 0);
sleep(5);
void startFramework() { ASSERT_EQ(std::system("svc wifi enable"), 0); }
sp<IWifi> getWifi() {
- sp<IWifi> wifi = IWifi::getService(kWifiServiceName);
+ sp<IWifi> wifi = IWifi::getService();
return wifi;
}
using ::android::wifi_system::SupplicantManager;
namespace {
-const char kSupplicantServiceName[] = "wpa_supplicant";
+const char kSupplicantServiceName[] = "default";
// Helper function to initialize the driver and firmware to STA mode.
void initilializeDriverAndFirmware() {