blob: a3cc988fb28438bf8400d9c3f89c0602fb1fa1d1 [file] [log] [blame]
#
# 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.
#
import logging
from vts.runners.host import errors
_DEFAULT_HWBINDER_SERVICE = "default"
COMPONENT_CLASS_DICT = {
"hal_conventional": 1,
"hal_conventional_submodule": 2,
"hal_legacy": 3,
"hal_hidl": 4,
"hal_hidl_wrapped_conventional": 5,
"lib_shared": 11
}
COMPONENT_TYPE_DICT = {
"audio": 1,
"camera": 2,
"gps": 3,
"gnss": 3,
"light": 4,
"wifi": 5,
"mobile": 6,
"bluetooth": 7,
"nfc": 8,
"vibrator": 12,
"thermal": 13,
"tv_input": 14,
"tv_cec": 15,
"sensors": 16,
"vehicle": 17,
"vr": 18,
"graphics_allocator": 19,
"graphics_mapper": 20,
"radio": 21,
"contexthub": 22,
"graphics_composer": 23,
"media_omx": 24,
"tests_msgq": 25,
"tests_memory": 26,
"dumpstate": 27,
"media_c2": 28,
"bionic_libm": 1001,
"bionic_libc": 1002,
"vndk_libcutils": 1101
}
class MirrorObject(object):
"""The class that mirrors objects on the native side.
Attributes:
_client: VtsTcpClient, the client instance that can be used to send
commands to the target-side's agent.
_caller_uid: string, the caller's UID if not None.
"""
def __init__(self, client, caller_uid=None):
self._client = client
self._caller_uid = caller_uid
def CleanUp(self):
if self._client:
self._client.Disconnect()
def SetCallerUid(self, uid):
"""Sets target-side caller's UID.
Args:
uid: string, the caller's UID.
"""
self._caller_uid = uid
def LaunchMirrorDriver(self,
driver_type,
target_class,
target_type,
target_version_major,
target_version_minor,
target_package="",
target_filename=None,
target_component_name=None,
handler_name=None,
service_name=None,
hw_binder_service_name=_DEFAULT_HWBINDER_SERVICE,
bits=64,
is_test_hal=False):
"""Initiates the driver for a lib on the target device and creates a top
level MirroObject for it.
Args:
driver_type: type of
target_class: string, the target class name (e.g., lib).
target_type: string, the target type name (e.g., light, camera).
target_version_major:
int, the target component major version (e.g. 1.0 -> 1).
target_version_minor:
int, the target component minor version (e.g. 1.0 -> 0).
target_basepaths: list of strings, the paths to look for target
files in. Default is _DEFAULT_TARGET_BASE_PATHS.
target_package: . separated string (e.g., a.b.c) to denote the
package name of target component.
target_filename: string, the target file name (e.g., libm.so).
handler_name: string, the name of the handler. target_type is used
by default.
bits: integer, processor architecture indicator: 32 or 64.
Default is 64 bits.
is_test_hal: bool, whether the HAL service is a test HAL
(e.g. msgq).
Raises:
errors.ComponentLoadingError is raised when error occurs trying to
create a MirrorObject.
"""
if bits not in [32, 64]:
raise error.ComponentLoadingError(
"Invalid value for bits: %s" % bits)
if not handler_name:
handler_name = target_type
if not service_name:
service_name = "vts_driver_%s" % handler_name
# Launch the corresponding driver of the requested HAL on the target.
logging.debug("Init the driver service for %s", target_type)
target_class_id = COMPONENT_CLASS_DICT[target_class.lower()]
target_type_id = COMPONENT_TYPE_DICT[target_type.lower()]
driver_id = self._client.LaunchDriverService(
driver_type=driver_type,
service_name=service_name,
bits=bits,
file_path=target_filename,
target_class=target_class_id,
target_type=target_type_id,
target_version_major=target_version_major,
target_version_minor=target_version_minor,
target_package=target_package,
target_component_name=target_component_name,
hw_binder_service_name=hw_binder_service_name,
is_test_hal=is_test_hal)
if driver_id == -1:
raise errors.ComponentLoadingError(
"Failed to launch driver service %s from file path %s" %
(target_type, target_filename))
return driver_id
def Ping(self):
"""Returns true iff pinging the agent is successful, False otherwise."""
return self._client.Ping()