Example #1
0
    def test_btp_GATT_CL_GAW_1(self):
        """
        Verify that a Generic Attribute Profile client can write
        a Characteristic Value selected by handle.
        """

        connection_procedure(self, central=self.iut1, peripheral=self.iut2)

        btp.gattc_disc_chrc_uuid(self.iut1, self.iut2.stack.gap.iut_addr_get(),
                                 0x0001, 0xffff, PTS_DB.CHR_READ_WRITE)

        db = GattDB()
        btp.gattc_disc_chrc_uuid_rsp(self.iut1, db)

        db.print_db()

        chr = db.find_chr_by_uuid(PTS_DB.CHR_READ_WRITE)
        self.assertIsNotNone(chr)

        new_value = "FF"
        btp.gattc_write(self.iut1, self.iut2.stack.gap.iut_addr_get(),
                        chr.value_handle, new_value)

        future_iut2 = btp.gatts_attr_value_changed_ev(self.iut2)

        val = GattValue()
        btp.gattc_write_rsp(self.iut1, val)
        self.assertEqual(val.att_rsp, "No error")

        wait_futures([future_iut2], timeout=EV_TIMEOUT)

        hdl, data = future_iut2.result()
        self.assertEqual(data, new_value)

        disconnection_procedure(self, central=self.iut1, peripheral=self.iut2)
Example #2
0
    def test_btp_GATT_CL_GAW_3(self):
        """
        Verify that a Generic Attribute Profile client can write
        a characteristic descriptor selected by handle.
        """

        connection_procedure(self, central=self.iut1, peripheral=self.iut2)

        btp.gattc_disc_prim_uuid(self.iut1, self.iut2.stack.gap.iut_addr_get(),
                                 PTS_DB.SVC)

        db = GattDB()
        btp.gattc_disc_prim_uuid_rsp(self.iut1, db)

        svc = db.find_svc_by_uuid(PTS_DB.SVC)
        self.assertIsNotNone(svc)

        start_hdl, end_hdl = svc.handle, svc.end_hdl

        btp.gattc_disc_all_chrc(self.iut1, self.iut2.stack.gap.iut_addr_get(),
                                start_hdl, end_hdl)

        btp.gattc_disc_all_chrc_rsp(self.iut1, db)

        db.print_db()

        chr = db.find_chr_by_uuid(PTS_DB.CHR_READ_WRITE)
        self.assertIsNotNone(chr)

        end_hdl = db.find_characteristic_end(chr.handle)
        self.assertIsNotNone(end_hdl)

        btp.gattc_disc_all_desc(self.iut1, self.iut2.stack.gap.iut_addr_get(),
                                chr.value_handle + 1, end_hdl)

        btp.gattc_disc_all_desc_rsp(self.iut1, db)

        db.print_db()

        dsc = db.find_dsc_by_uuid(PTS_DB.DSC_READ_WRITE)
        self.assertIsNotNone(dsc)

        new_value = "FF"
        btp.gattc_write(self.iut1, self.iut2.stack.gap.iut_addr_get(),
                        dsc.handle, new_value)

        future_iut2 = btp.gatts_attr_value_changed_ev(self.iut2)

        val = GattValue()
        btp.gattc_write_rsp(self.iut1, val)
        self.assertEqual(val.att_rsp, "No error")

        wait_futures([future_iut2], timeout=EV_TIMEOUT)

        hdl, data = future_iut2.result()
        self.assertEqual(data, new_value)

        disconnection_procedure(self, central=self.iut1, peripheral=self.iut2)
Example #3
0
    def test_ATT_Client_Write_Attribute_Value(self, iut, valid):
        btp.gap_conn(iut, self.config.tester_addr)
        btp.gap_wait_for_connection(iut)

        btp.gattc_write(iut, self.config.tester_addr,
                        self.config.tester_write_hdl, '00')
        tuple_hdr, tuple_data = iut.btp_worker.read()
        try:
            btp.btp_hdr_check(tuple_hdr, defs.BTP_SERVICE_ID_GATT,
                              defs.GATT_WRITE)
        except BTPErrorInvalidStatus:
            pass
Example #4
0
def hdl_wid_142(desc):
    MMI.reset()
    MMI.parse_description(desc)

    hdl = MMI.args[0]

    if not hdl:
        logging.error("parsing error")
        return False

    btp.gattc_write(btp.pts_addr_type_get(None), btp.pts_addr_get(None), hdl,
                    '02', 1)
    return True
Example #5
0
def hdl_wid_135(params: WIDParams):
    MMI.reset()
    MMI.parse_description(params.description)

    hdl = MMI.args[0]

    if not hdl:
        logging.error("parsing error")
        return False

    btp.gattc_write(btp.pts_addr_type_get(None), btp.pts_addr_get(None), hdl,
                    '01', 1)
    return True
Example #6
0
def hdl_wid_74(desc):
    pattern = re.compile("'([0-9a-fA-F]+)'")
    params = pattern.findall(desc)
    if not params:
        logging.error("parsing error")
        return False

    handle = params[0]
    size = int(params[1])

    btp.gattc_write(btp.pts_addr_type_get(None), btp.pts_addr_get(None),
                    handle, '12', size)
    btp.gattc_write_rsp()

    return True
Example #7
0
def hdl_wid_80(desc):
    MMI.reset()
    MMI.parse_description(desc)

    hdl = MMI.args[0]
    val_mtp = MMI.args[1]

    if not hdl or not val_mtp:
        logging.error("parsing error")
        return False

    btp.gattc_write(btp.pts_addr_type_get(), btp.pts_addr_get(), hdl, '1234',
                    val_mtp)

    btp.gattc_write_rsp(True)

    return True
Example #8
0
def hdl_wid_74(desc):
    MMI.reset()
    MMI.parse_description(desc)

    hdl = MMI.args[0]
    size = int(MMI.args[1])

    if not hdl or size == 0:
        logging.error("parsing error")
        return False

    btp.gattc_write(btp.pts_addr_type_get(), btp.pts_addr_get(), hdl, '12',
                    size)

    try:
        btp.gattc_write_rsp(True, 40)
    except socket.timeout:
        pass

    return True
Example #9
0
def hdl_wid_150(params: WIDParams):
    """
    Please send an ATT_Write_Request to Client Support Features handle = 'XXXX'O to enable Multiple Handle Value Notifications.
    Discover all characteristics if needed.
    """
    MMI.reset()
    MMI.parse_description(params.description)

    hdl = MMI.args[0]

    # First read the existing value in Client Supported Features.
    btp.gattc_read(btp.pts_addr_type_get(), btp.pts_addr_get(), hdl)
    btp.gattc_read_rsp(False, True)
    client_support_features = int(btp.get_verify_values()[0])

    # Set Multiple Handle Value Notifications bit in features.
    multi_hvn_bit = 4
    value = client_support_features | multi_hvn_bit

    btp.gattc_write(btp.pts_addr_type_get(), btp.pts_addr_get(), hdl,
                    f'{value:02x}')
    btp.gattc_write_rsp()

    return True
Example #10
0
def hdl_wid_82(desc):
    btp.gattc_write(btp.pts_addr_type_get(None), btp.pts_addr_get(None),
                    '0100', '12', 1)
    btp.gattc_write_rsp()

    return True