|
12 | 12 | #include <zephyr/bluetooth/addr.h> |
13 | 13 | #include <zephyr/bluetooth/att.h> |
14 | 14 | #include <zephyr/bluetooth/iso.h> |
| 15 | +#include <zephyr/bluetooth/audio/mcs.h> |
15 | 16 | #include <zephyr/net_buf.h> |
16 | 17 | #include <zephyr/sys/byteorder.h> |
17 | 18 |
|
@@ -453,6 +454,82 @@ static inline void bsim_btp_wait_for_hauc_discovery_complete(bt_addr_le_t *addre |
453 | 454 |
|
454 | 455 | net_buf_unref(buf); |
455 | 456 | } |
| 457 | +static inline void bsim_btp_mcp_discover(const bt_addr_le_t *address) |
| 458 | +{ |
| 459 | + struct btp_mcp_discover_cmd *cmd; |
| 460 | + struct btp_hdr *cmd_hdr; |
| 461 | + |
| 462 | + NET_BUF_SIMPLE_DEFINE(cmd_buffer, BTP_MTU); |
| 463 | + |
| 464 | + cmd_hdr = net_buf_simple_add(&cmd_buffer, sizeof(*cmd_hdr)); |
| 465 | + cmd_hdr->service = BTP_SERVICE_ID_MCP; |
| 466 | + cmd_hdr->opcode = BTP_MCP_DISCOVER; |
| 467 | + cmd_hdr->index = BTP_INDEX; |
| 468 | + cmd = net_buf_simple_add(&cmd_buffer, sizeof(*cmd)); |
| 469 | + bt_addr_le_copy(&cmd->address, address); |
| 470 | + |
| 471 | + cmd_hdr->len = cmd_buffer.len - sizeof(*cmd_hdr); |
| 472 | + |
| 473 | + bsim_btp_send_to_tester(cmd_buffer.data, cmd_buffer.len); |
| 474 | +} |
| 475 | + |
| 476 | +static inline void bsim_btp_mcp_send_cmd(const bt_addr_le_t *address, uint8_t opcode, |
| 477 | + bool use_param, int32_t param) |
| 478 | +{ |
| 479 | + struct btp_mcp_send_cmd *cmd; |
| 480 | + struct btp_hdr *cmd_hdr; |
| 481 | + |
| 482 | + NET_BUF_SIMPLE_DEFINE(cmd_buffer, BTP_MTU); |
| 483 | + |
| 484 | + cmd_hdr = net_buf_simple_add(&cmd_buffer, sizeof(*cmd_hdr)); |
| 485 | + cmd_hdr->service = BTP_SERVICE_ID_MCP; |
| 486 | + cmd_hdr->opcode = BTP_MCP_CMD_SEND; |
| 487 | + cmd_hdr->index = BTP_INDEX; |
| 488 | + cmd = net_buf_simple_add(&cmd_buffer, sizeof(*cmd)); |
| 489 | + bt_addr_le_copy(&cmd->address, address); |
| 490 | + cmd->opcode = opcode; |
| 491 | + cmd->use_param = use_param ? 1U : 0U; |
| 492 | + cmd->param = sys_cpu_to_le32(param); |
| 493 | + |
| 494 | + cmd_hdr->len = cmd_buffer.len - sizeof(*cmd_hdr); |
| 495 | + |
| 496 | + bsim_btp_send_to_tester(cmd_buffer.data, cmd_buffer.len); |
| 497 | +} |
| 498 | + |
| 499 | +static inline void bsim_btp_wait_for_mcp_discovered(bt_addr_le_t *address) |
| 500 | +{ |
| 501 | + struct btp_mcp_discovered_ev *ev; |
| 502 | + struct net_buf *buf; |
| 503 | + |
| 504 | + bsim_btp_wait_for_evt(BTP_SERVICE_ID_MCP, BTP_MCP_DISCOVERED_EV, &buf); |
| 505 | + ev = net_buf_pull_mem(buf, sizeof(*ev)); |
| 506 | + |
| 507 | + TEST_ASSERT(ev->status == BT_ATT_ERR_SUCCESS); |
| 508 | + |
| 509 | + if (address != NULL) { |
| 510 | + bt_addr_le_copy(address, &ev->address); |
| 511 | + } |
| 512 | + |
| 513 | + net_buf_unref(buf); |
| 514 | +} |
| 515 | + |
| 516 | +static inline void bsim_btp_wait_for_mcp_cmd_ntf(uint8_t *requested_opcode) |
| 517 | +{ |
| 518 | + struct btp_mcp_cmd_ntf_ev *ev; |
| 519 | + struct net_buf *buf; |
| 520 | + |
| 521 | + bsim_btp_wait_for_evt(BTP_SERVICE_ID_MCP, BTP_MCP_NTF_EV, &buf); |
| 522 | + ev = net_buf_pull_mem(buf, sizeof(*ev)); |
| 523 | + |
| 524 | + TEST_ASSERT(ev->status == BT_ATT_ERR_SUCCESS); |
| 525 | + TEST_ASSERT(ev->result_code == BT_MCS_OPC_NTF_SUCCESS); |
| 526 | + |
| 527 | + if (requested_opcode != NULL) { |
| 528 | + *requested_opcode = ev->requested_opcode; |
| 529 | + } |
| 530 | + |
| 531 | + net_buf_unref(buf); |
| 532 | +} |
456 | 533 |
|
457 | 534 | static inline void bsim_btp_tmap_discover(const bt_addr_le_t *address) |
458 | 535 | { |
|
0 commit comments