Example #1
0
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;
	}
}
Example #2
0
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);
}
Example #3
0
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);
}
Example #4
0
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);
}
Example #5
0
			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, \
Example #6
0
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,
Example #9
0
			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, \