1#!/usr/bin/env python3 2# 3# Copyright 2019 - The Android Open Source Project 4# 5# Licensed under the Apache License, Version 2.0 (the "License"); 6# you may not use this file except in compliance with the License. 7# You may obtain a copy of the License at 8# 9# http://www.apache.org/licenses/LICENSE-2.0 10# 11# Unless required by applicable law or agreed to in writing, software 12# distributed under the License is distributed on an "AS IS" BASIS, 13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14# See the License for the specific language governing permissions and 15# limitations under the License. 16 17from acts.controllers.fuchsia_lib.base_lib import BaseLib 18 19 20class FuchsiaProfileServerLib(BaseLib): 21 def __init__(self, addr, tc, client_id): 22 self.address = addr 23 self.test_counter = tc 24 self.client_id = client_id 25 26 def addService(self, record): 27 """Publishes an SDP service record specified by input args 28 29 Args: 30 record: A database that represents an SDP record to 31 be published. 32 33 Returns: 34 Dictionary, service id if success, error if error. 35 """ 36 test_cmd = "profile_server_facade.ProfileServerAddService" 37 test_args = { 38 "record": record, 39 } 40 test_id = self.build_id(self.test_counter) 41 self.test_counter += 1 42 43 return self.send_command(test_id, test_cmd, test_args) 44 45 def addSearch(self, attribute_list, profile_id): 46 """Publishes services specified by input args 47 48 Args: 49 attribute_list: The list of attributes to set 50 profile_id: The profile ID to set. 51 Returns: 52 Dictionary, None if success, error if error. 53 """ 54 test_cmd = "profile_server_facade.ProfileServerAddSearch" 55 test_args = { 56 "attribute_list": attribute_list, 57 "profile_id": profile_id 58 } 59 test_id = self.build_id(self.test_counter) 60 self.test_counter += 1 61 62 return self.send_command(test_id, test_cmd, test_args) 63 64 def removeService(self, service_id): 65 """Removes a service. 66 67 Args: 68 record: A database that represents an SDP record to 69 be published. 70 71 Returns: 72 Dictionary, None if success, error if error. 73 """ 74 test_cmd = "profile_server_facade.ProfileServerRemoveService" 75 test_args = { 76 "service_id": service_id, 77 } 78 test_id = self.build_id(self.test_counter) 79 self.test_counter += 1 80 81 return self.send_command(test_id, test_cmd, test_args) 82 83 def init(self): 84 """Initializes the ProfileServerFacade's proxy object. 85 86 No operations for SDP can be performed until this is initialized. 87 88 Returns: 89 Dictionary, None if success, error if error. 90 """ 91 test_cmd = "profile_server_facade.ProfileServerInit" 92 test_args = {} 93 test_id = self.build_id(self.test_counter) 94 self.test_counter += 1 95 96 return self.send_command(test_id, test_cmd, test_args) 97 98 def cleanUp(self): 99 """Cleans up all objects related to SDP. 100 101 Returns: 102 Dictionary, None if success, error if error. 103 """ 104 test_cmd = "profile_server_facade.ProfileServerCleanup" 105 test_args = {} 106 test_id = self.build_id(self.test_counter) 107 self.test_counter += 1 108 109 return self.send_command(test_id, test_cmd, test_args) 110 111 def connectL2cap(self, identifier, psm, mode): 112 """ Sends an outgoing l2cap connection to a connected peer device. 113 114 Args: 115 psm: The psm value to connect over. Available PSMs: 116 SDP 0x0001 See Bluetooth Service Discovery Protocol (SDP) 117 RFCOMM 0x0003 See RFCOMM with TS 07.10 118 TCS-BIN 0x0005 See Bluetooth Telephony Control Specification / 119 TCS Binary 120 TCS-BIN-CORDLESS 0x0007 See Bluetooth Telephony Control 121 Specification / TCS Binary 122 BNEP 0x000F See Bluetooth Network Encapsulation Protocol 123 HID_Control 0x0011 See Human Interface Device 124 HID_Interrupt 0x0013 See Human Interface Device 125 UPnP 0x0015 See [ESDP] 126 AVCTP 0x0017 See Audio/Video Control Transport Protocol 127 AVDTP 0x0019 See Audio/Video Distribution Transport Protocol 128 AVCTP_Browsing 0x001B See Audio/Video Remote Control Profile 129 UDI_C-Plane 0x001D See the Unrestricted Digital Information 130 Profile [UDI] 131 ATT 0x001F See Bluetooth Core Specification 132 3DSP 0x0021 See 3D Synchronization Profile. 133 LE_PSM_IPSP 0x0023 See Internet Protocol Support Profile 134 (IPSP) 135 OTS 0x0025 See Object Transfer Service (OTS) 136 EATT 0x0027 See Bluetooth Core Specification 137 mode: String - The channel mode to connect to. Available values: 138 Basic mode: BASIC 139 Enhanced Retransmission mode: ERTM 140 141 Returns: 142 Dictionary, None if success, error if error. 143 """ 144 test_cmd = "profile_server_facade.ProfileServerConnectL2cap" 145 test_args = {"identifier": identifier, "psm": psm, "mode": mode} 146 test_id = self.build_id(self.test_counter) 147 self.test_counter += 1 148 149 return self.send_command(test_id, test_cmd, test_args) 150