def _orchestrate_gatt_disconnection(self, bluetooth_gatt, gatt_callback):
        """Disconnect gatt connection between two devices.

        Args:
            bluetooth_gatt: Index of the BluetoothGatt object
            gatt_callback: Index of gatt callback object.

        Steps:
        1. Disconnect gatt connection.
        2. Close bluetooth gatt object.

        Returns:
            True if successful, False otherwise.
        """
        self.log.info("Disconnecting from peripheral device.")
        try:
            disconnect_gatt_connection(self.pri_ad, bluetooth_gatt,
                                       gatt_callback)
            close_gatt_client(self.pri_ad, bluetooth_gatt)
            if bluetooth_gatt in self.bluetooth_gatt_list:
                self.bluetooth_gatt_list.remove(bluetooth_gatt)
        except GattTestUtilsError as err:
            self.log.error(err)
            return False
        return True
Exemplo n.º 2
0
 def _orchestrate_gatt_disconnection(self, bluetooth_gatt, gatt_callback):
     self.log.info("Disconnecting from peripheral device.")
     try:
         disconnect_gatt_connection(self.cen_ad, bluetooth_gatt,
                                    gatt_callback)
         close_gatt_client(self.cen_ad, bluetooth_gatt)
         if bluetooth_gatt in self.bluetooth_gatt_list:
             self.bluetooth_gatt_list.remove(bluetooth_gatt)
     except GattTestUtilsError as err:
         self.log.error(err)
         return False
     return True
def ble_gatt_disconnection(client_ad, bluetooth_gatt, gatt_callback):
    """Function to disconnect GATT connection between client and server.

    Args:
        client_ad: the Android device performing the connection.
        bluetooth_gatt: GATT object
        gatt_callback:the gatt connection call back object
    Returns:
      ble_rssi: RSSI value of the remote BLE device
    """
    logging.info("Disconnecting from peripheral device.")
    try:
        disconnect_gatt_connection(client_ad, bluetooth_gatt, gatt_callback)
        close_gatt_client(client_ad, bluetooth_gatt)
    except GattTestUtilsError as err:
        logging.error(err)
        return False
    return True
Exemplo n.º 4
0
    def test_gatt_connect_opportunistic(self):
        """Test opportunistic GATT connection over LE.

        Test establishing a gatt connection between a GATT server and GATT
        client in opportunistic mode.

        Steps:
        1. Start a generic advertisement.
        2. Start a generic scanner.
        3. Find the advertisement and extract the mac address.
        4. Stop the first scanner.
        5. Create GATT connection 1 between the scanner and advertiser normally
        6. Create GATT connection 2 between the scanner and advertiser using
           opportunistic mode
        7. Disconnect GATT connection 1

        Expected Result:
        Verify GATT connection 2 automatically disconnects when GATT connection
        1 disconnect

        Returns:
          Pass if True
          Fail if False

        TAGS: LE, Advertising, Filtering, Scanning, GATT
        Priority: 0
        """
        gatt_server_cb = self.per_ad.droid.gattServerCreateGattServerCallback()
        gatt_server = self.per_ad.droid.gattServerOpenGattServer(
            gatt_server_cb)
        self.gatt_server_list.append(gatt_server)
        mac_address, adv_callback = (
            get_mac_address_of_generic_advertisement(self.cen_ad, self.per_ad))
        # Make GATT connection 1
        try:
            bluetooth_gatt_1, gatt_callback_1 = setup_gatt_connection(
                self.cen_ad,
                mac_address,
                False,
                transport=gatt_transport['auto'],
                opportunistic=False)
            self.bluetooth_gatt_list.append(bluetooth_gatt_1)
        except GattTestUtilsError as err:
            self.log.error(err)
            return False
        # Make GATT connection 2
        try:
            bluetooth_gatt_2, gatt_callback_2 = setup_gatt_connection(
                self.cen_ad,
                mac_address,
                False,
                transport=gatt_transport['auto'],
                opportunistic=True)
            self.bluetooth_gatt_list.append(bluetooth_gatt_2)
        except GattTestUtilsError as err:
            self.log.error(err)
            return False
        # Disconnect GATT connection 1
        try:
            disconnect_gatt_connection(self.cen_ad, bluetooth_gatt_1,
                                       gatt_callback_1)
            close_gatt_client(self.cen_ad, bluetooth_gatt_1)
            if bluetooth_gatt_1 in self.bluetooth_gatt_list:
                self.bluetooth_gatt_list.remove(bluetooth_gatt_1)
        except GattTestUtilsError as err:
            self.log.error(err)
            return False
        # Confirm that GATT connection 2 also disconnects
        wait_for_gatt_disconnect_event(self.cen_ad, gatt_callback_2)
        close_gatt_client(self.cen_ad, bluetooth_gatt_2)
        if bluetooth_gatt_2 in self.bluetooth_gatt_list:
            self.bluetooth_gatt_list.remove(bluetooth_gatt_2)
        return True
Exemplo n.º 5
0
    def test_gatt_connect_autoconnect(self):
        """Test GATT connection over LE.

        Test re-establishing a gatt connection using autoconnect
        set to True in order to test connection whitelist.

        Steps:
        1. Start a generic advertisement.
        2. Start a generic scanner.
        3. Find the advertisement and extract the mac address.
        4. Stop the first scanner.
        5. Create a GATT connection between the scanner and advertiser.
        6. Disconnect the GATT connection.
        7. Create a GATT connection with autoconnect set to True
        8. Disconnect the GATT connection.

        Expected Result:
        Verify that a connection was re-established and then disconnected
        successfully.

        Returns:
          Pass if True
          Fail if False

        TAGS: LE, Advertising, Filtering, Scanning, GATT
        Priority: 0
        """
        gatt_server_cb = self.per_ad.droid.gattServerCreateGattServerCallback()
        gatt_server = self.per_ad.droid.gattServerOpenGattServer(
            gatt_server_cb)
        self.gatt_server_list.append(gatt_server)
        autoconnect = False
        mac_address, adv_callback = (
            get_mac_address_of_generic_advertisement(self.cen_ad, self.per_ad))
        try:
            bluetooth_gatt, gatt_callback = setup_gatt_connection(
                self.cen_ad, mac_address, autoconnect)
            self.bluetooth_gatt_list.append(bluetooth_gatt)
        except GattTestUtilsError as err:
            self.log.error(err)
            return False
        try:
            disconnect_gatt_connection(self.cen_ad, bluetooth_gatt,
                                       gatt_callback)
            close_gatt_client(self.cen_ad, bluetooth_gatt)
            if bluetooth_gatt in self.bluetooth_gatt_list:
                self.bluetooth_gatt_list.remove(bluetooth_gatt)
        except GattTestUtilsError as err:
            self.log.error(err)
            return False
        autoconnect = True
        bluetooth_gatt = self.cen_ad.droid.gattClientConnectGatt(
            gatt_callback, mac_address, autoconnect, gatt_transport['auto'],
            False, gatt_phy_mask['1m_mask'])
        self.bluetooth_gatt_list.append(bluetooth_gatt)
        expected_event = gatt_cb_strings['gatt_conn_change'].format(
            gatt_callback)
        try:
            event = self.cen_ad.ed.pop_event(expected_event,
                                             self.default_timeout)
        except Empty:
            self.log.error(gatt_cb_err['gatt_conn_change_err'].format(
                expected_event))
            test_result = False
        return self._orchestrate_gatt_disconnection(bluetooth_gatt,
                                                    gatt_callback)