bluetooth: tester: Added support for testing CSIS.
- Initialisation of Coordinated Set Identification Service. - Set and clear member lock. - Get member RSI. Signed-off-by: Henrik Eriksen <heri@demant.com>
This commit is contained in:
parent
3f8d33ee3b
commit
5bd46b91fd
7 changed files with 160 additions and 1 deletions
|
@ -39,3 +39,7 @@ endif()
|
|||
if(CONFIG_BT_HAS)
|
||||
target_sources(app PRIVATE src/btp_has.c)
|
||||
endif()
|
||||
|
||||
if (CONFIG_BT_CSIP_SET_MEMBER)
|
||||
target_sources(app PRIVATE src/btp_csis.c)
|
||||
endif()
|
||||
|
|
|
@ -48,3 +48,6 @@ CONFIG_BT_IAS_CLIENT=y
|
|||
CONFIG_BT_HAS=y
|
||||
CONFIG_BT_HAS_PRESET_COUNT=5
|
||||
CONFIG_BT_HAS_PRESET_NAME_DYNAMIC=y
|
||||
|
||||
# CSIS
|
||||
CONFIG_BT_CSIP_SET_MEMBER=y
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include "btp_ascs.h"
|
||||
#include "btp_bap.h"
|
||||
#include "btp_has.h"
|
||||
#include "btp_csis.h"
|
||||
|
||||
#define BTP_MTU 1024
|
||||
#define BTP_DATA_MAX_SIZE (BTP_MTU - sizeof(struct btp_hdr))
|
||||
|
@ -47,8 +48,9 @@
|
|||
#define BTP_SERVICE_ID_ASCS 13
|
||||
#define BTP_SERVICE_ID_BAP 14
|
||||
#define BTP_SERVICE_ID_HAS 15
|
||||
#define BTP_SERVICE_ID_CSIS 17
|
||||
|
||||
#define BTP_SERVICE_ID_MAX BTP_SERVICE_ID_HAS
|
||||
#define BTP_SERVICE_ID_MAX BTP_SERVICE_ID_CSIS
|
||||
|
||||
#define BTP_STATUS_SUCCESS 0x00
|
||||
#define BTP_STATUS_FAILED 0x01
|
||||
|
|
30
tests/bluetooth/tester/src/btp/btp_csis.h
Normal file
30
tests/bluetooth/tester/src/btp/btp_csis.h
Normal file
|
@ -0,0 +1,30 @@
|
|||
/* btp_csis.h - Bluetooth tester headers */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 Oticon
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
#include <zephyr/bluetooth/audio/csip.h>
|
||||
|
||||
/* CSIS commands */
|
||||
#define BTP_CSIS_READ_SUPPORTED_COMMANDS 0x01
|
||||
struct btp_csis_read_supported_commands_rp {
|
||||
uint8_t data[0];
|
||||
} __packed;
|
||||
|
||||
#define BTP_CSIS_SET_MEMBER_LOCK 0x02
|
||||
struct btp_csis_set_member_lock_cmd {
|
||||
bt_addr_le_t address;
|
||||
uint8_t lock;
|
||||
uint8_t force;
|
||||
} __packed;
|
||||
|
||||
#define BTP_CSIS_GET_MEMBER_RSI 0x03
|
||||
struct btp_csis_get_member_rsi_cmd {
|
||||
bt_addr_le_t address;
|
||||
} __packed;
|
||||
|
||||
struct btp_csis_get_member_rsi_rp {
|
||||
uint8_t rsi[BT_CSIP_RSI_SIZE];
|
||||
} __packed;
|
|
@ -89,3 +89,6 @@ uint8_t tester_unregister_bap(void);
|
|||
|
||||
uint8_t tester_init_has(void);
|
||||
uint8_t tester_unregister_has(void);
|
||||
|
||||
uint8_t tester_init_csis(void);
|
||||
uint8_t tester_unregister_csis(void);
|
||||
|
|
|
@ -77,6 +77,9 @@ static uint8_t supported_services(const void *cmd, uint16_t cmd_len,
|
|||
#if defined(CONFIG_BT_HAS) || defined(CONFIG_BT_HAS_CLIENT)
|
||||
tester_set_bit(rp->data, BTP_SERVICE_ID_HAS);
|
||||
#endif /* CONFIG_BT_HAS */
|
||||
#if defined(CONFIG_BT_CSIP_SET_MEMBER)
|
||||
tester_set_bit(rp->data, BTP_SERVICE_ID_CSIS);
|
||||
#endif /* CONFIG_BT_CSIP_SET_MEMBER */
|
||||
|
||||
*rsp_len = sizeof(*rp) + 2;
|
||||
|
||||
|
@ -148,6 +151,11 @@ static uint8_t register_service(const void *cmd, uint16_t cmd_len,
|
|||
status = tester_init_has();
|
||||
break;
|
||||
#endif /* CONFIG_BT_HAS */
|
||||
#if defined(CONFIG_BT_CSIP_SET_MEMBER)
|
||||
case BTP_SERVICE_ID_CSIS:
|
||||
status = tester_init_csis();
|
||||
break;
|
||||
#endif /* CONFIG_BT_CSIP_SET_MEMBER */
|
||||
default:
|
||||
LOG_WRN("unknown id: 0x%02x", cp->id);
|
||||
status = BTP_STATUS_FAILED;
|
||||
|
@ -226,6 +234,11 @@ static uint8_t unregister_service(const void *cmd, uint16_t cmd_len,
|
|||
status = tester_unregister_has();
|
||||
break;
|
||||
#endif /* CONFIG_BT_HAS */
|
||||
#if defined(CONFIG_BT_CSIP_SET_MEMBER)
|
||||
case BTP_SERVICE_ID_CSIS:
|
||||
status = tester_unregister_csis();
|
||||
break;
|
||||
#endif /* CONFIG_BT_CSIP_SET_MEMBER */
|
||||
default:
|
||||
LOG_WRN("unknown id: 0x%x", cp->id);
|
||||
status = BTP_STATUS_FAILED;
|
||||
|
|
104
tests/bluetooth/tester/src/btp_csis.c
Normal file
104
tests/bluetooth/tester/src/btp_csis.c
Normal file
|
@ -0,0 +1,104 @@
|
|||
/* btp_csis.c - Bluetooth CSIS Tester */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2023 Oticon
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
#include <zephyr/bluetooth/audio/csip.h>
|
||||
|
||||
#include "btp/btp.h"
|
||||
#include "zephyr/sys/byteorder.h"
|
||||
|
||||
#include <zephyr/logging/log.h>
|
||||
#define LOG_MODULE_NAME bttester_csis
|
||||
LOG_MODULE_REGISTER(LOG_MODULE_NAME, CONFIG_BTTESTER_LOG_LEVEL);
|
||||
|
||||
#define BTP_STATUS_VAL(err) (err) ? BTP_STATUS_FAILED : BTP_STATUS_SUCCESS
|
||||
|
||||
static struct bt_csip_set_member_svc_inst *csis_svc_inst;
|
||||
|
||||
static uint8_t csis_supported_commands(const void *cmd, uint16_t cmd_len,
|
||||
void *rsp, uint16_t *rsp_len)
|
||||
{
|
||||
struct btp_csis_read_supported_commands_rp *rp = rsp;
|
||||
|
||||
/* octet 0 */
|
||||
tester_set_bit(rp->data, BTP_CSIS_READ_SUPPORTED_COMMANDS);
|
||||
tester_set_bit(rp->data, BTP_CSIS_SET_MEMBER_LOCK);
|
||||
tester_set_bit(rp->data, BTP_CSIS_GET_MEMBER_RSI);
|
||||
|
||||
*rsp_len = sizeof(*rp) + 1;
|
||||
|
||||
return BTP_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static uint8_t csis_set_member_lock(const void *cmd, uint16_t cmd_len,
|
||||
void *rsp, uint16_t *rsp_len)
|
||||
{
|
||||
const struct btp_csis_set_member_lock_cmd *cp = cmd;
|
||||
int err = -1;
|
||||
|
||||
if (csis_svc_inst) {
|
||||
err = bt_csip_set_member_lock(csis_svc_inst, cp->lock, cp->force);
|
||||
}
|
||||
|
||||
return BTP_STATUS_VAL(err);
|
||||
}
|
||||
|
||||
static uint8_t csis_get_member_rsi(const void *cmd, uint16_t cmd_len,
|
||||
void *rsp, uint16_t *rsp_len)
|
||||
{
|
||||
struct btp_csis_get_member_rsi_rp *rp = rsp;
|
||||
int err = -1;
|
||||
|
||||
if (csis_svc_inst) {
|
||||
err = bt_csip_set_member_generate_rsi(csis_svc_inst, rp->rsi);
|
||||
}
|
||||
|
||||
*rsp_len = sizeof(*rp);
|
||||
|
||||
return BTP_STATUS_VAL(err);
|
||||
}
|
||||
|
||||
static const struct btp_handler csis_handlers[] = {
|
||||
{
|
||||
.opcode = BTP_CSIS_READ_SUPPORTED_COMMANDS,
|
||||
.index = BTP_INDEX_NONE,
|
||||
.expect_len = 0,
|
||||
.func = csis_supported_commands
|
||||
},
|
||||
{
|
||||
.opcode = BTP_CSIS_SET_MEMBER_LOCK,
|
||||
.expect_len = sizeof(struct btp_csis_set_member_lock_cmd),
|
||||
.func = csis_set_member_lock
|
||||
},
|
||||
{
|
||||
.opcode = BTP_CSIS_GET_MEMBER_RSI,
|
||||
.expect_len = sizeof(struct btp_csis_get_member_rsi_cmd),
|
||||
.func = csis_get_member_rsi
|
||||
}
|
||||
};
|
||||
|
||||
uint8_t tester_init_csis(void)
|
||||
{
|
||||
const struct bt_csip_set_member_register_param register_params = {
|
||||
.set_size = 1,
|
||||
.set_sirk = { 0xB8, 0x03, 0xEA, 0xC6, 0xAF, 0xBB, 0x65, 0xA2,
|
||||
0x5A, 0x41, 0xF1, 0x53, 0x05, 0x68, 0x8E, 0x83 },
|
||||
.lockable = true,
|
||||
.rank = 1,
|
||||
.cb = NULL
|
||||
};
|
||||
int err = bt_csip_set_member_register(®ister_params, &csis_svc_inst);
|
||||
|
||||
tester_register_command_handlers(BTP_SERVICE_ID_CSIS, csis_handlers,
|
||||
ARRAY_SIZE(csis_handlers));
|
||||
|
||||
return BTP_STATUS_VAL(err);
|
||||
}
|
||||
|
||||
uint8_t tester_unregister_csis(void)
|
||||
{
|
||||
return BTP_STATUS_SUCCESS;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue