static void client_l2cap_rsp(uint8_t code, const void *data, uint16_t len, void *user_data) { struct test_data *t_data = tester_get_data(); struct bthost *bthost = hciemu_client_get_host(t_data->hciemu); struct emu_l2cap_cid_data *cid_data = user_data; const uint16_t *psm = data; const struct iovec con_req = raw_pdu(0x13, 0x00, /* PSM */ 0x41, 0x00); /* Source CID */ if (len < sizeof(*psm)) { tester_warn("Invalid l2cap response."); return; } switch (*psm) { case 0x40: bthost_add_cid_hook(bthost, cid_data->handle, 0x40, hid_ctrl_cid_hook_cb, cid_data); bthost_l2cap_req(bthost, cid_data->handle, 0x02, con_req.iov_base, con_req.iov_len, client_l2cap_rsp, cid_data); break; case 0x41: bthost_add_cid_hook(bthost, cid_data->handle, 0x41, hid_intr_cid_hook_cb, cid_data); break; default: break; } }
static void hid_prepare_reply_report(struct emu_l2cap_cid_data *cid_data) { struct test_data *t_data = tester_get_data(); struct bthost *bthost = hciemu_client_get_host(t_data->hciemu); const struct iovec pdu = raw_pdu(0xa2, 0x01, 0x00); bthost_send_cid_v(bthost, cid_data->handle, cid_data->cid, &pdu, 1); }
static void avrcp_get_element_attributes_req(void) { struct test_data *data = tester_get_data(); struct bthost *bthost = hciemu_client_get_host(data->hciemu); const struct iovec pdu = raw_pdu(req_ele_attr); struct step *step = g_new0(struct step, 1); bthost_send_cid_v(bthost, avrcp_data.handle, avrcp_data.cid, &pdu, 1); step->action_status = BT_STATUS_SUCCESS; schedule_action_verification(step); }
static void hidhost_conn_cb(uint16_t handle, void *user_data) { const struct iovec con_req = raw_pdu(0x11, 0x00, /* PSM */ 0x40, 0x00); /* Source CID */ struct test_data *data = tester_get_data(); struct bthost *bthost = hciemu_client_get_host(data->hciemu); if (data->hciemu_type == HCIEMU_TYPE_BREDR) { tester_warn("Not handled device type."); return; } ctrl_cid_data.cid = 0x40; ctrl_cid_data.handle = handle; tester_print("Sending L2CAP Request from remote"); bthost_l2cap_req(bthost, handle, 0x02, con_req.iov_base, con_req.iov_len, client_l2cap_rsp, &ctrl_cid_data); }
0x06, 0x19, 0x11, 0x0e, 0x19, 0x11, 0x0f, 0x09, 0x00, \ 0x04, 0x35, 0x10, 0x35, 0x06, 0x19, 0x01, 0x00, 0x09, \ 0x00, 0x17, 0x35, 0x06, 0x19, 0x00, 0x17, 0x09, 0x01, \ 0x03, 0x09, 0x00, 0x09, 0x35, 0x08, 0x35, 0x06, 0x19, \ 0x11, 0x0e, 0x09, 0x01, 0x00, 0x09, 0x03, 0x11, 0x09, \ 0x00, 0x01, 0x36, 0x00, 0x38, 0x09, 0x00, 0x00, 0x0a, \ 0x00, 0x01, 0x00, 0x05, 0x09, 0x00, 0x01, 0x35, 0x03, \ 0x19, 0x11, 0x0c, 0x09, 0x00, 0x04, 0x35, 0x10, 0x35, \ 0x06, 0x19, 0x01, 0x00, 0x09, 0x00, 0x17, 0x35, 0x06, \ 0x19, 0x00, 0x17, 0x09, 0x01, 0x03, 0x09, 0x00, 0x09, \ 0x35, 0x08, 0x35, 0x06, 0x19, 0x11, 0x0e, 0x09, 0x01, \ 0x04, 0x09, 0x03, 0x11, 0x09, 0x00, 0x02, \ 0x00 static const struct pdu_set sdp_pdus[] = { { end_pdu, raw_pdu(sdp_rsp_pdu) }, { end_pdu, end_pdu }, }; static struct emu_l2cap_cid_data sdp_data = { .pdu = sdp_pdus, .is_sdp = TRUE, }; #define req_dsc 0x00, 0x01 #define rsp_dsc 0x02, 0x01, 0x04, 0x08 #define req_get 0x10, 0x02, 0x04 #define rsp_get 0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, \ 0x00, 0xff, 0xff, 0x02, 0x40 #define req_cfg 0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, \ 0x06, 0x00, 0x00, 0x21, 0x15, 0x02, \
int main(int argc, char *argv[]) { tester_init(&argc, &argv); define_test("/TP/HGRF/RH/BV-01-I", test_hog, raw_pdu(0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28), raw_pdu(0x11, 0x06, 0x01, 0x00, 0x04, 0x00, 0x12, 0x18, 0x05, 0x00, 0x08, 0x00, 0x12, 0x18), raw_pdu(0x10, 0x09, 0x00, 0xff, 0xff, 0x00, 0x28), raw_pdu(0x01, 0x10, 0x09, 0x00, 0x0a), raw_pdu(0x08, 0x01, 0x00, 0x04, 0x00, 0x03, 0x28), raw_pdu(0x09, 0x07, 0x03, 0x00, 0x02, 0x04, 0x00, 0x4b, 0x2a), raw_pdu(0x08, 0x01, 0x00, 0x04, 0x00, 0x02, 0x28), raw_pdu(0x01, 0x08, 0x01, 0x00, 0x0a), raw_pdu(0x08, 0x05, 0x00, 0x08, 0x00, 0x02, 0x28), raw_pdu(0x01, 0x08, 0x05, 0x00, 0x0a), raw_pdu(0x08, 0x05, 0x00, 0x08, 0x00, 0x03, 0x28), raw_pdu(0x09, 0x07, 0x07, 0x00, 0x02, 0x08, 0x00, 0x4b, 0x2a), raw_pdu(0x0a, 0x04, 0x00), raw_pdu(0x0b, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16), raw_pdu(0x0a, 0x08, 0x00), raw_pdu(0x0b, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16), raw_pdu(0x0c, 0x04, 0x00, 0x16, 0x00), raw_pdu(0x0d, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16), raw_pdu(0x0c, 0x08, 0x00, 0x16, 0x00), raw_pdu(0x0d, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16), raw_pdu(0x0c, 0x04, 0x00, 0x2c, 0x00), raw_pdu(0x0d, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13), raw_pdu(0x0c, 0x08, 0x00, 0x2c, 0x00), raw_pdu(0x0d, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13)); define_test("/TP/HGRF/RH/BV-08-I", test_hog, raw_pdu(0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28), raw_pdu(0x11, 0x06, 0x01, 0x00, 0x05, 0x00, 0x12, 0x18, 0x06, 0x00, 0x0a, 0x00, 0x12, 0x18), raw_pdu(0x10, 0x0b, 0x00, 0xff, 0xff, 0x00, 0x28), raw_pdu(0x01, 0x10, 0x0b, 0x00, 0x0a), raw_pdu(0x08, 0x01, 0x00, 0x05, 0x00, 0x03, 0x28), raw_pdu(0x09, 0x07, 0x03, 0x00, 0x0a, 0x04, 0x00, 0x4d, 0x2a), raw_pdu(0x08, 0x01, 0x00, 0x05, 0x00, 0x02, 0x28), raw_pdu(0x01, 0x08, 0x01, 0x00, 0x0a), raw_pdu(0x08, 0x06, 0x00, 0x0a, 0x00, 0x02, 0x28), raw_pdu(0x01, 0x08, 0x06, 0x00, 0x0a), raw_pdu(0x08, 0x06, 0x00, 0x0a, 0x00, 0x03, 0x28), raw_pdu(0x09, 0x07, 0x08, 0x00, 0x0a, 0x09, 0x00, 0x4d, 0x2a), raw_pdu(0x08, 0x04, 0x00, 0x05, 0x00, 0x03, 0x28), raw_pdu(0x01, 0x08, 0x04, 0x00, 0x0a), raw_pdu(0x08, 0x09, 0x00, 0x0a, 0x00, 0x03, 0x28), raw_pdu(0x01, 0x08, 0x09, 0x00, 0x0a), raw_pdu(0x0a, 0x04, 0x00), raw_pdu(0x0b, 0xee, 0xee, 0xff, 0xff), raw_pdu(0x04, 0x05, 0x00, 0x05, 0x00), raw_pdu(0x05, 0x01, 0x05, 0x00, 0x08, 0x29), raw_pdu(0x0a, 0x09, 0x00), raw_pdu(0x0b, 0xff, 0xff, 0xee, 0xee), raw_pdu(0x04, 0x0a, 0x00, 0x0a, 0x00), raw_pdu(0x05, 0x01, 0x0a, 0x00, 0x08, 0x29), raw_pdu(0x0a, 0x05, 0x00), raw_pdu(0x0b, 0x01, 0x03), raw_pdu(0x0a, 0x0a, 0x00), raw_pdu(0x0b, 0x02, 0x03)); define_test("/TP/HGRF/RH/BV-09-I", test_hog, raw_pdu(0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28), raw_pdu(0x11, 0x06, 0x01, 0x00, 0x04, 0x00, 0x12, 0x18, 0x05, 0x00, 0x08, 0x00, 0x12, 0x18), raw_pdu(0x10, 0x09, 0x00, 0xff, 0xff, 0x00, 0x28), raw_pdu(0x01, 0x10, 0x09, 0x00, 0x0a), raw_pdu(0x08, 0x01, 0x00, 0x04, 0x00, 0x03, 0x28), raw_pdu(0x09, 0x07, 0x03, 0x00, 0x02, 0x04, 0x00, 0x4a, 0x2a), raw_pdu(0x08, 0x01, 0x00, 0x04, 0x00, 0x02, 0x28), raw_pdu(0x01, 0x08, 0x01, 0x00, 0x0a), raw_pdu(0x08, 0x05, 0x00, 0x08, 0x00, 0x02, 0x28), raw_pdu(0x01, 0x08, 0x05, 0x00, 0x0a), raw_pdu(0x08, 0x05, 0x00, 0x08, 0x00, 0x03, 0x28), raw_pdu(0x09, 0x07, 0x07, 0x00, 0x02, 0x08, 0x00, 0x4a, 0x2a), raw_pdu(0x0a, 0x04, 0x00), raw_pdu(0x0b, 0x01, 0x11, 0x00, 0x01), raw_pdu(0x0a, 0x08, 0x00), raw_pdu(0x0b, 0x01, 0x11, 0x00, 0x01)); define_test("/TP/HGRF/RH/BV-06-I", test_hog, raw_pdu(0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28), raw_pdu(0x11, 0x06, 0x01, 0x00, 0x05, 0x00, 0x12, 0x18, 0x06, 0x00, 0x0a, 0x00, 0x12, 0x18), raw_pdu(0x10, 0x0b, 0x00, 0xff, 0xff, 0x00, 0x28), raw_pdu(0x01, 0x10, 0x0b, 0x00, 0x0a), raw_pdu(0x08, 0x01, 0x00, 0x05, 0x00, 0x03, 0x28), raw_pdu(0x09, 0x07, 0x03, 0x00, 0x0a, 0x04, 0x00, 0x4d, 0x2a), raw_pdu(0x08, 0x01, 0x00, 0x05, 0x00, 0x02, 0x28), raw_pdu(0x01, 0x08, 0x01, 0x00, 0x0a), raw_pdu(0x08, 0x06, 0x00, 0x0a, 0x00, 0x02, 0x28), raw_pdu(0x01, 0x08, 0x06, 0x00, 0x0a), raw_pdu(0x08, 0x06, 0x00, 0x0a, 0x00, 0x03, 0x28), raw_pdu(0x09, 0x07, 0x08, 0x00, 0x0a, 0x09, 0x00, 0x4d, 0x2a), raw_pdu(0x08, 0x04, 0x00, 0x05, 0x00, 0x03, 0x28), raw_pdu(0x01, 0x08, 0x05, 0x00, 0x0a), raw_pdu(0x08, 0x09, 0x00, 0x0a, 0x00, 0x03, 0x28), raw_pdu(0x01, 0x08, 0x09, 0x00, 0x0a), raw_pdu(0x0a, 0x04, 0x00), raw_pdu(0x0b, 0xee, 0xee, 0xff, 0xff), raw_pdu(0x04, 0x05, 0x00, 0x05, 0x00), raw_pdu(0x05, 0x01, 0x05, 0x00, 0x08, 0x29), raw_pdu(0x0a, 0x09, 0x00), raw_pdu(0x0b, 0xff, 0xff, 0xee, 0xee), raw_pdu(0x04, 0x0a, 0x00, 0x0a, 0x00), raw_pdu(0x05, 0x01, 0x0a, 0x00, 0x08, 0x29), raw_pdu(0x0a, 0x05, 0x00), raw_pdu(0x0b, 0x01, 0x02), raw_pdu(0x0a, 0x0a, 0x00), raw_pdu(0x0b, 0x02, 0x02)); define_test("/TP/HGCF/RH/BV-01-I", test_hog, raw_pdu(0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28), raw_pdu(0x11, 0x06, 0x01, 0x00, 0x06, 0x00, 0x12, 0x18, 0x07, 0x00, 0x0c, 0x00, 0x12, 0x18), raw_pdu(0x10, 0x0d, 0x00, 0xff, 0xff, 0x00, 0x28), raw_pdu(0x01, 0x10, 0x0d, 0x00, 0x0a), raw_pdu(0x08, 0x01, 0x00, 0x06, 0x00, 0x03, 0x28), raw_pdu(0x09, 0x07, 0x03, 0x00, 0x1a, 0x04, 0x00, 0x4d, 0x2a), raw_pdu(0x08, 0x01, 0x00, 0x06, 0x00, 0x02, 0x28), raw_pdu(0x01, 0x08, 0x01, 0x00, 0x0a), raw_pdu(0x08, 0x07, 0x00, 0x0c, 0x00, 0x02, 0x28), raw_pdu(0x01, 0x08, 0x07, 0x00, 0x0a), raw_pdu(0x08, 0x07, 0x00, 0x0c, 0x00, 0x03, 0x28), raw_pdu(0x09, 0x07, 0x09, 0x00, 0x1a, 0x0a, 0x00, 0x4d, 0x2a), raw_pdu(0x08, 0x04, 0x00, 0x06, 0x00, 0x03, 0x28), raw_pdu(0x01, 0x08, 0x04, 0x00, 0x0a), raw_pdu(0x08, 0x0a, 0x00, 0x0c, 0x00, 0x03, 0x28), raw_pdu(0x01, 0x08, 0x0a, 0x00, 0x0a), raw_pdu(0x0a, 0x04, 0x00), raw_pdu(0x0b, 0xed, 0x00), raw_pdu(0x04, 0x05, 0x00, 0x06, 0x00), raw_pdu(0x05, 0x01, 0x05, 0x00, 0x02, 0x29, 0x06, 0x00, 0x08, 0x29), raw_pdu(0x0a, 0x0a, 0x00), raw_pdu(0x0b, 0xed, 0x00), raw_pdu(0x04, 0x0b, 0x00, 0x0c, 0x00), raw_pdu(0x05, 0x01, 0x0b, 0x00, 0x02, 0x29, 0x0c, 0x00, 0x08, 0x29), raw_pdu(0x0a, 0x06, 0x00), raw_pdu(0x0b, 0x01, 0x01), raw_pdu(0x0a, 0x0c, 0x00), raw_pdu(0x0b, 0x02, 0x01), raw_pdu(0x0a, 0x05, 0x00), raw_pdu(0x0b, 0x00, 0x00), raw_pdu(0x0a, 0x0b, 0x00), raw_pdu(0x0b, 0x00, 0x00), raw_pdu(0x12, 0x05, 0x00, 0x01, 0x00), raw_pdu(0x13), raw_pdu(0x12, 0x0b, 0x00, 0x01, 0x00), raw_pdu(0x13)); define_test("/TP/HGRF/RH/BV-02-I", test_hog, raw_pdu(0x10, 0x01, 0x00, 0xff, 0xff, 0x00, 0x28), raw_pdu(0x11, 0x06, 0x01, 0x00, 0x05, 0x00, 0x12, 0x18, 0x06, 0x00, 0x0a, 0x00, 0x12, 0x18), raw_pdu(0x10, 0x0b, 0x00, 0xff, 0xff, 0x00, 0x28), raw_pdu(0x01, 0x10, 0x0b, 0x00, 0x0a), raw_pdu(0x08, 0x01, 0x00, 0x05, 0x00, 0x03, 0x28), raw_pdu(0x09, 0x07, 0x03, 0x00, 0x02, 0x04, 0x00, 0x4b, 0x2a), raw_pdu(0x08, 0x01, 0x00, 0x05, 0x00, 0x02, 0x28), raw_pdu(0x01, 0x08, 0x01, 0x00, 0x0a), raw_pdu(0x08, 0x06, 0x00, 0x0a, 0x00, 0x02, 0x28), raw_pdu(0x01, 0x08, 0x06, 0x00, 0x0a), raw_pdu(0x08, 0x06, 0x00, 0x0a, 0x00, 0x03, 0x28), raw_pdu(0x09, 0x07, 0x08, 0x00, 0x02, 0x09, 0x00, 0x4b, 0x2a), raw_pdu(0x08, 0x04, 0x00, 0x05, 0x00, 0x03, 0x28), raw_pdu(0x01, 0x08, 0x04, 0x00, 0x0a), raw_pdu(0x08, 0x09, 0x00, 0x0a, 0x00, 0x03, 0x28), raw_pdu(0x01, 0x08, 0x09, 0x00, 0x0a), raw_pdu(0x0a, 0x04, 0x00), raw_pdu(0x0b, 0x01, 0x02, 0x03), raw_pdu(0x04, 0x05, 0x00, 0x05, 0x00), raw_pdu(0x05, 0x01, 0x05, 0x00, 0x07, 0x29), raw_pdu(0x0a, 0x09, 0x00), raw_pdu(0x0b, 0x01, 0x02, 0x03), raw_pdu(0x04, 0x0a, 0x00, 0x0a, 0x00), raw_pdu(0x05, 0x01, 0x0a, 0x00, 0x07, 0x29), raw_pdu(0x0a, 0x05, 0x00), raw_pdu(0x0b, 0x19, 0x2a), raw_pdu(0x0a, 0x0a, 0x00), raw_pdu(0x0b, 0x19, 0x2a)); return tester_run(); }
int main(int argc, char *argv[]) { g_test_init(&argc, &argv, NULL); define_test("/hfp/test_init", test_init, NULL, data_end()); define_test("/hfp/test_cmd_handler_1", test_command_handler, NULL, raw_pdu('A', 'T', '+', 'B', 'R', 'S', 'F', '\r'), raw_pdu('A', 'T', '+', 'B', 'R', 'S', 'F'), data_end()); define_test("/hfp/test_cmd_handler_2", test_command_handler, NULL, raw_pdu('A', 'T', 'D', '1', '2', '3', '4', '\r'), raw_pdu('A', 'T', 'D', '1', '2', '3', '4'), data_end()); define_test("/hfp/test_register_1", test_register, prefix_handler, raw_pdu('+', 'B', 'R', 'S', 'F', '\0'), raw_pdu('A', 'T', '+', 'B', 'R', 'S', 'F', '\r'), type_pdu(HFP_GW_CMD_TYPE_COMMAND, 0), data_end()); define_test("/hfp/test_register_2", test_register, prefix_handler, raw_pdu('+', 'B', 'R', 'S', 'F', '\0'), raw_pdu('A', 'T', '+', 'B', 'R', 'S', 'F', '=', '\r'), type_pdu(HFP_GW_CMD_TYPE_SET, 0), data_end()); define_test("/hfp/test_register_3", test_register, prefix_handler, raw_pdu('+', 'B', 'R', 'S', 'F', '\0'), raw_pdu('A', 'T', '+', 'B', 'R', 'S', 'F', '?', '\r'), type_pdu(HFP_GW_CMD_TYPE_READ, 0), data_end()); define_test("/hfp/test_register_4", test_register, prefix_handler, raw_pdu('+', 'B', 'R', 'S', 'F', '\0'), raw_pdu('A', 'T', '+', 'B', 'R', 'S', 'F', '=', '?', '\r'), type_pdu(HFP_GW_CMD_TYPE_TEST, 0), data_end()); define_test("/hfp/test_register_5", test_register, prefix_handler, raw_pdu('D', '\0'), raw_pdu('A', 'T', 'D', '1', '2', '3', '4', '5', '\r'), type_pdu(HFP_GW_CMD_TYPE_SET, 0), data_end()); define_test("/hfp/test_fragmented_1", test_fragmented, NULL, frg_pdu('A'), frg_pdu('T'), frg_pdu('+'), frg_pdu('B'), frg_pdu('R'), frg_pdu('S'), frg_pdu('F'), frg_pdu('\r'), data_end()); define_test("/hfp/test_ustring_1", test_register, check_ustring_1, raw_pdu('D', '\0'), raw_pdu('A', 'T', 'D', '0', '1', '2', '3', '\r'), type_pdu(HFP_GW_CMD_TYPE_SET, 0), data_end()); define_test("/hfp/test_ustring_2", test_register, check_ustring_2, raw_pdu('D', '\0'), raw_pdu('A', 'T', 'D', '0', '1', '2', '3', '\r'), type_pdu(HFP_GW_CMD_TYPE_SET, 0), data_end()); define_test("/hfp/test_string_1", test_register, check_string_1, raw_pdu('D', '\0'), raw_pdu('A', 'T', 'D', '\"', '0', '1', '2', '3', '\"', '\r'), type_pdu(HFP_GW_CMD_TYPE_SET, 0), data_end()); define_test("/hfp/test_string_2", test_register, check_string_2, raw_pdu('D', '\0'), raw_pdu('A', 'T', 'D', '\"', '0', '1', '2', '3', '\"', '\r'), type_pdu(HFP_GW_CMD_TYPE_SET, 0), data_end()); define_test("/hfp/test_empty", test_fragmented, NULL, raw_pdu('\r'), data_end()); return g_test_run(); }
0x20, 0x53, 0x4d, 0x53, 0x2f, 0x4d, 0x4d, 0x53, 0x00, \ 0x09, 0x03, 0x15, 0x08, 0x00, 0x09, 0x03, 0x16, 0x08, \ 0x0e, 0x36, 0x00, 0x54, 0x09, 0x00, 0x00, 0x0a, 0x00, \ 0x01, 0x00, 0x0a, 0x09, 0x00, 0x01, 0x35, 0x03, 0x19, \ 0x11, 0x32, 0x09, 0x00, 0x04, 0x35, 0x11, 0x35, 0x03, \ 0x19, 0x01, 0x00, 0x35, 0x05, 0x19, 0x00, 0x03, 0x08, \ 0x05, 0x35, 0x03, 0x19, 0x00, 0x08, 0x09, 0x00, 0x05, \ 0x35, 0x03, 0x19, 0x10, 0x02, 0x09, 0x00, 0x09, 0x35, \ 0x08, 0x35, 0x06, 0x19, 0x11, 0x34, 0x09, 0x01, 0x01, \ 0x09, 0x01, 0x00, 0x25, 0x0a, 0x4d, 0x41, 0x50, 0x20, \ 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x00, 0x09, 0x03, 0x15, \ 0x08, 0x01, 0x09, 0x03, 0x16, 0x08, 0x01, \ 0x00 static const struct pdu_set pdus[] = { { end_pdu, raw_pdu(sdp_rsp_pdu) }, { end_pdu, end_pdu }, }; static struct emu_l2cap_cid_data cid_data = { .pdu = pdus, }; static bt_bdaddr_t emu_remote_bdaddr_val = { .address = { 0x00, 0xaa, 0x01, 0x01, 0x00, 0x00 }, }; static struct emu_set_l2cap_data l2cap_sdp_setup_data = { .psm = 1, .func = tester_generic_connect_cb, .user_data = &cid_data,
0x01, 0x81, 0x06, 0x05, 0x0c, 0x0a, 0x38, 0x02, 0x81, \ 0x06, 0x05, 0x09, 0x19, 0x09, 0x29, 0x10, 0x15, 0x00, \ 0x25, 0x01, 0x95, 0x08, 0x75, 0x01, 0x81, 0x02, 0xc0, \ 0xc0, 0x06, 0x00, 0xff, 0x09, 0x01, 0xa1, 0x01, 0x85, \ 0x10, 0x75, 0x08, 0x95, 0x06, 0x15, 0x00, 0x26, 0xff, \ 0x00, 0x09, 0x01, 0x81, 0x00, 0x09, 0x01, 0x91, 0x00, \ 0xc0, 0x09, 0x02, 0x07, 0x35, 0x08, 0x35, 0x06, 0x09, \ 0x04, 0x09, 0x09, 0x01, 0x00, 0x09, 0x02, 0x08, 0x28, \ 0x00, 0x09, 0x02, 0x09, 0x28, 0x01, 0x09, 0x02, 0x0a, \ 0x28, 0x01, 0x09, 0x02, 0x0b, 0x09, 0x01, 0x00, 0x09, \ 0x02, 0x0c, 0x09, 0x0c, 0x80, 0x09, 0x02, 0x0d, 0x28, \ 0x00, 0x09, 0x02, 0x0e, 0x28, 0x01, \ 0x00 static const struct pdu_set sdp_pdus[] = { { raw_pdu(did_req_pdu), raw_pdu(did_rsp_pdu) }, { raw_pdu(hid_req_pdu), raw_pdu(hid_rsp_pdu) }, { end_pdu, end_pdu }, }; static struct emu_l2cap_cid_data sdp_cid_data = { .pdu = sdp_pdus, .is_sdp = TRUE, }; #define hid_keyboard_rsp_pdu 0x07, \ 0x00, 0x01, \ 0x02, 0x04, \ 0x02, 0x01, \ 0x36, 0x01, 0xfe, 0x36, 0x01, 0x93, 0x09, 0x00, 0x00, \ 0x0a, 0x00, 0x01, 0x00, 0x00, 0x09, 0x00, 0x01, 0x35, \