Bluetooth: Tester: Add TMAP tests support
Adding support for TMAP tests. Signed-off-by: Agata Figiel <agata.figiel@codecoup.pl>
This commit is contained in:
parent
ff61a38436
commit
19610233e2
7 changed files with 160 additions and 1 deletions
|
@ -90,3 +90,7 @@ endif()
|
|||
if(CONFIG_BT_TBS OR CONFIG_BT_GTBS)
|
||||
target_sources(app PRIVATE src/btp_ccp.c)
|
||||
endif()
|
||||
|
||||
if(CONFIG_BT_TMAP)
|
||||
target_sources(app PRIVATE src/btp_tmap.c)
|
||||
endif()
|
||||
|
|
|
@ -142,3 +142,6 @@ CONFIG_BT_GTBS=y
|
|||
CONFIG_BT_TBS=y
|
||||
CONFIG_BT_TBS_MAX_CALLS=10
|
||||
CONFIG_BT_TBS_SUPPORTED_FEATURES=3
|
||||
|
||||
# TMAP
|
||||
CONFIG_BT_TMAP=y
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include "btp_csip.h"
|
||||
#include "btp_cap.h"
|
||||
#include "btp_tbs.h"
|
||||
#include "btp_tmap.h"
|
||||
|
||||
#define BTP_MTU 1024
|
||||
#define BTP_DATA_MAX_SIZE (BTP_MTU - sizeof(struct btp_hdr))
|
||||
|
@ -71,8 +72,9 @@
|
|||
#define BTP_SERVICE_ID_CSIP 25
|
||||
#define BTP_SERVICE_ID_CAP 26
|
||||
#define BTP_SERVICE_ID_TBS 27
|
||||
#define BTP_SERVICE_ID_TMAP 28
|
||||
|
||||
#define BTP_SERVICE_ID_MAX BTP_SERVICE_ID_TBS
|
||||
#define BTP_SERVICE_ID_MAX BTP_SERVICE_ID_TMAP
|
||||
|
||||
#define BTP_STATUS_SUCCESS 0x00
|
||||
#define BTP_STATUS_FAILED 0x01
|
||||
|
|
26
tests/bluetooth/tester/src/btp/btp_tmap.h
Normal file
26
tests/bluetooth/tester/src/btp/btp_tmap.h
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* btp_tmap.h - Bluetooth tester headers */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2024 Codecoup
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
#include <zephyr/types.h>
|
||||
|
||||
/* TMAP commands */
|
||||
#define BTP_TMAP_READ_SUPPORTED_COMMANDS 0x01
|
||||
struct btp_tmap_read_supported_commands_rp {
|
||||
uint8_t data[0];
|
||||
} __packed;
|
||||
|
||||
#define BTP_TMAP_DISCOVER 0x02
|
||||
struct btp_tmap_discover_cmd {
|
||||
bt_addr_le_t address;
|
||||
} __packed;
|
||||
|
||||
#define BT_TMAP_EV_DISCOVERY_COMPLETE 0x80
|
||||
struct btp_tmap_discovery_complete_ev {
|
||||
bt_addr_le_t address;
|
||||
uint8_t status;
|
||||
uint16_t role;
|
||||
} __packed;
|
|
@ -132,3 +132,6 @@ uint8_t tester_unregister_hap(void);
|
|||
|
||||
uint8_t tester_init_tbs(void);
|
||||
uint8_t tester_unregister_tbs(void);
|
||||
|
||||
uint8_t tester_init_tmap(void);
|
||||
uint8_t tester_unregister_tmap(void);
|
||||
|
|
|
@ -104,6 +104,9 @@ static uint8_t supported_services(const void *cmd, uint16_t cmd_len,
|
|||
#if defined(CONFIG_BT_TBS) || defined(CONFIG_BT_GTBS)
|
||||
tester_set_bit(rp->data, BTP_SERVICE_ID_TBS);
|
||||
#endif /*CONFIG_BT_TBS */
|
||||
#if defined(CONFIG_BT_TMAP)
|
||||
tester_set_bit(rp->data, BTP_SERVICE_ID_TMAP);
|
||||
#endif /* CONFIG_BT_TMAP */
|
||||
|
||||
*rsp_len = sizeof(*rp) + 2;
|
||||
|
||||
|
@ -237,6 +240,11 @@ static uint8_t register_service(const void *cmd, uint16_t cmd_len,
|
|||
status = tester_init_tbs();
|
||||
break;
|
||||
#endif /* CONFIG_BT_TBS */
|
||||
#if defined(CONFIG_BT_TMAP)
|
||||
case BTP_SERVICE_ID_TMAP:
|
||||
status = tester_init_tmap();
|
||||
break;
|
||||
#endif /* CONFIG_BT_TMAP */
|
||||
default:
|
||||
LOG_WRN("unknown id: 0x%02x", cp->id);
|
||||
status = BTP_STATUS_FAILED;
|
||||
|
@ -374,6 +382,11 @@ static uint8_t unregister_service(const void *cmd, uint16_t cmd_len,
|
|||
status = tester_unregister_tbs();
|
||||
break;
|
||||
#endif /* CONFIG_BT_TBS */
|
||||
#if defined(CONFIG_BT_TMAP)
|
||||
case BTP_SERVICE_ID_TMAP:
|
||||
status = tester_unregister_tmap();
|
||||
break;
|
||||
#endif /* CONFIG_BT_TMAP */
|
||||
default:
|
||||
LOG_WRN("unknown id: 0x%x", cp->id);
|
||||
status = BTP_STATUS_FAILED;
|
||||
|
|
108
tests/bluetooth/tester/src/btp_tmap.c
Normal file
108
tests/bluetooth/tester/src/btp_tmap.c
Normal file
|
@ -0,0 +1,108 @@
|
|||
/* btp_tmap.c - Bluetooth TMAP Tester */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2024 Codecoup
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
#include <zephyr/bluetooth/audio/tmap.h>
|
||||
#include "btp/btp.h"
|
||||
|
||||
#include <zephyr/logging/log.h>
|
||||
LOG_MODULE_REGISTER(bttester_tmap, CONFIG_BTTESTER_LOG_LEVEL);
|
||||
|
||||
static uint8_t read_supported_commands(const void *cmd, uint16_t cmd_len, void *rsp,
|
||||
uint16_t *rsp_len)
|
||||
{
|
||||
struct btp_tmap_read_supported_commands_rp *rp = rsp;
|
||||
|
||||
tester_set_bit(rp->data, BTP_TMAP_READ_SUPPORTED_COMMANDS);
|
||||
tester_set_bit(rp->data, BTP_TMAP_DISCOVER);
|
||||
|
||||
*rsp_len = sizeof(*rp) + 1;
|
||||
|
||||
return BTP_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static void tmap_discover_cb(enum bt_tmap_role role, struct bt_conn *conn, int err)
|
||||
{
|
||||
struct btp_tmap_discovery_complete_ev ev;
|
||||
|
||||
if (err) {
|
||||
LOG_ERR("Discovery failed (%d)", err);
|
||||
}
|
||||
|
||||
bt_addr_le_copy(&ev.address, bt_conn_get_dst(conn));
|
||||
ev.status = err;
|
||||
ev.role = role;
|
||||
|
||||
tester_event(BTP_SERVICE_ID_TMAP, BT_TMAP_EV_DISCOVERY_COMPLETE, &ev, sizeof(ev));
|
||||
}
|
||||
|
||||
static const struct bt_tmap_cb tmap_cb = {
|
||||
.discovery_complete = tmap_discover_cb,
|
||||
};
|
||||
|
||||
static uint8_t tmap_discover(const void *cmd, uint16_t cmd_len, void *rsp, uint16_t *rsp_len)
|
||||
{
|
||||
const struct btp_tmap_discover_cmd *cp = cmd;
|
||||
struct bt_conn *conn;
|
||||
int err;
|
||||
|
||||
conn = bt_conn_lookup_addr_le(BT_ID_DEFAULT, &cp->address);
|
||||
if (!conn) {
|
||||
LOG_ERR("Unknown connection");
|
||||
return BTP_STATUS_FAILED;
|
||||
}
|
||||
|
||||
err = bt_tmap_discover(conn, &tmap_cb);
|
||||
if (err != 0) {
|
||||
LOG_ERR("Failed to discover remote TMAP: %d", err);
|
||||
}
|
||||
|
||||
bt_conn_unref(conn);
|
||||
|
||||
return BTP_STATUS_VAL(err);
|
||||
}
|
||||
|
||||
static const struct btp_handler tmap_handlers[] = {
|
||||
{
|
||||
.opcode = BTP_TMAP_READ_SUPPORTED_COMMANDS,
|
||||
.index = BTP_INDEX_NONE,
|
||||
.expect_len = 0,
|
||||
.func = read_supported_commands,
|
||||
},
|
||||
{
|
||||
.opcode = BTP_TMAP_DISCOVER,
|
||||
.expect_len = sizeof(struct btp_tmap_discover_cmd),
|
||||
.func = tmap_discover,
|
||||
},
|
||||
};
|
||||
|
||||
uint8_t tester_init_tmap(void)
|
||||
{
|
||||
const enum bt_tmap_role role = (BT_TMAP_CG_SUPPORTED ? BT_TMAP_ROLE_CG : 0U) |
|
||||
(BT_TMAP_CT_SUPPORTED ? BT_TMAP_ROLE_CT : 0U) |
|
||||
(BT_TMAP_UMS_SUPPORTED ? BT_TMAP_ROLE_UMS : 0U) |
|
||||
(BT_TMAP_UMR_SUPPORTED ? BT_TMAP_ROLE_UMR : 0U) |
|
||||
(BT_TMAP_BMS_SUPPORTED ? BT_TMAP_ROLE_BMS : 0U) |
|
||||
(BT_TMAP_BMR_SUPPORTED ? BT_TMAP_ROLE_BMR : 0U);
|
||||
int err;
|
||||
|
||||
err = bt_tmap_register(role);
|
||||
|
||||
if (err != 0) {
|
||||
LOG_ERR("Failed to register TMAP (err %d)", err);
|
||||
return BTP_STATUS_FAILED;
|
||||
}
|
||||
|
||||
tester_register_command_handlers(BTP_SERVICE_ID_TMAP, tmap_handlers,
|
||||
ARRAY_SIZE(tmap_handlers));
|
||||
|
||||
return BTP_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
uint8_t tester_unregister_tmap(void)
|
||||
{
|
||||
return BTP_STATUS_SUCCESS;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue