diff --git a/tests/bluetooth/tester/CMakeLists.txt b/tests/bluetooth/tester/CMakeLists.txt index 2493fd11f999..051734620d2e 100644 --- a/tests/bluetooth/tester/CMakeLists.txt +++ b/tests/bluetooth/tester/CMakeLists.txt @@ -33,5 +33,9 @@ if(CONFIG_BT_OTS) target_sources(app PRIVATE src/btp_ots.c) endif() +if(CONFIG_BT_BAS) + target_sources(app PRIVATE src/btp_bas.c) +endif() + zephyr_library_include_directories(src src/btp src/audio/btp) add_subdirectory_ifdef(CONFIG_BT_AUDIO src/audio) diff --git a/tests/bluetooth/tester/prj.conf b/tests/bluetooth/tester/prj.conf index 3edea64b22c5..5c6969c12b1f 100644 --- a/tests/bluetooth/tester/prj.conf +++ b/tests/bluetooth/tester/prj.conf @@ -66,3 +66,9 @@ CONFIG_BT_BUF_EVT_RX_SIZE=255 CONFIG_BT_BUF_CMD_TX_SIZE=255 CONFIG_BT_BUF_ACL_TX_SIZE=251 CONFIG_BT_BUF_ACL_RX_SIZE=255 + +CONFIG_BT_BAS=y +CONFIG_BT_BAS_BLS=y +CONFIG_BT_BAS_BLS_IDENTIFIER_PRESENT=y +CONFIG_BT_BAS_BLS_BATTERY_LEVEL_PRESENT=y +CONFIG_BT_BAS_BLS_ADDITIONAL_STATUS_PRESENT=y diff --git a/tests/bluetooth/tester/src/btp/btp.h b/tests/bluetooth/tester/src/btp/btp.h index 06dc07883989..bdae188b0457 100644 --- a/tests/bluetooth/tester/src/btp/btp.h +++ b/tests/bluetooth/tester/src/btp/btp.h @@ -39,6 +39,7 @@ #include "btp_tmap.h" #include "btp_ots.h" #include "btp_pbp.h" +#include "btp_bas.h" #define BTP_MTU 1024 #define BTP_DATA_MAX_SIZE (BTP_MTU - sizeof(struct btp_hdr)) @@ -77,8 +78,9 @@ #define BTP_SERVICE_ID_TMAP 0x1c #define BTP_SERVICE_ID_OTS 0x1d #define BTP_SERVICE_ID_PBP 0x1e +#define BTP_SERVICE_ID_BAS 0x1f -#define BTP_SERVICE_ID_MAX BTP_SERVICE_ID_PBP +#define BTP_SERVICE_ID_MAX BTP_SERVICE_ID_BAS #define BTP_STATUS_SUCCESS 0x00 #define BTP_STATUS_FAILED 0x01 diff --git a/tests/bluetooth/tester/src/btp/btp_bas.h b/tests/bluetooth/tester/src/btp/btp_bas.h new file mode 100644 index 000000000000..071996751055 --- /dev/null +++ b/tests/bluetooth/tester/src/btp/btp_bas.h @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2024 Demant A/S + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef BTP_BAS_H_ +#define BTP_BAS_H_ + +#include +#include + +/* BTP BAS Service Opcodes */ +#define BTP_BAS_READ_SUPPORTED_COMMANDS 0x01 +#define BTP_BAS_SET_BATTERY_LEVEL 0x02 +#define BTP_BAS_BLS_SET_BATTERY_PRESENT 0x03 +#define BTP_BAS_BLS_SET_WIRED_POWER_SOURCE 0x04 +#define BTP_BAS_BLS_SET_WIRELESS_POWER_SOURCE 0x05 +#define BTP_BAS_BLS_SET_BATTERY_CHARGE_STATE 0x06 +#define BTP_BAS_BLS_SET_BATTERY_CHARGE_LEVEL 0x07 +#define BTP_BAS_BLS_SET_BATTERY_CHARGE_TYPE 0x08 +#define BTP_BAS_BLS_SET_CHARGING_FAULT_REASON 0x09 +#define BTP_BAS_BLS_SET_IDENTIFIER 0x0A +#define BTP_BAS_BLS_SET_SERVICE_REQUIRED 0x0B +#define BTP_BAS_BLS_SET_BATTERY_FAULT 0x0C + +/* Command structures */ +struct btp_bas_read_supported_commands_rp { + uint8_t data[0]; +} __packed; + +struct btp_bas_set_battery_level_cmd { + uint8_t level; +} __packed; + +struct btp_bas_bls_set_battery_present_cmd { + uint8_t present; +} __packed; + +struct btp_bas_bls_set_wired_power_source_cmd { + uint8_t source; +} __packed; + +struct btp_bas_bls_set_wireless_power_source_cmd { + uint8_t source; +} __packed; + +struct btp_bas_bls_set_battery_charge_state_cmd { + uint8_t state; +} __packed; + +struct btp_bas_bls_set_battery_charge_level_cmd { + uint8_t level; +} __packed; + +struct btp_bas_bls_set_battery_charge_type_cmd { + uint8_t type; +} __packed; + +struct btp_bas_bls_set_charging_fault_reason_cmd { + uint8_t reason; +} __packed; + +struct btp_bas_bls_set_identifier_cmd { + uint16_t identifier; +} __packed; + +struct btp_bas_bls_set_service_required_cmd { + uint8_t service_required; +} __packed; + +struct btp_bas_bls_set_battery_fault_cmd { + uint8_t battery_fault; +} __packed; + +/** + * @brief Initialize the Battery Service (BAS) tester. + * + * @return Status of the initialization. Returns `BTP_STATUS_SUCCESS` + * if the initialization is successful. Other values indicate failure. + */ +uint8_t tester_init_bas(void); + +/** + * @brief Unregister the Battery Service (BAS) tester. + * + * @return Status of the unregistration. Returns `BTP_STATUS_SUCCESS` + * if the unregistration is successful. Other values indicate failure. + */ +uint8_t tester_unregister_bas(void); + +#endif /* BTP_BAS_H_ */ diff --git a/tests/bluetooth/tester/src/btp_bas.c b/tests/bluetooth/tester/src/btp_bas.c new file mode 100644 index 000000000000..62a26f62515e --- /dev/null +++ b/tests/bluetooth/tester/src/btp_bas.c @@ -0,0 +1,435 @@ +/* + * Copyright (c) 2024 Demant A/S + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include +#include "btp/btp.h" +#include "btp/btp_bas.h" + +static uint8_t bas_supported_commands(const void *cmd, uint16_t cmd_len, void *rsp, + uint16_t *rsp_len) +{ + struct btp_bas_read_supported_commands_rp *rp = rsp; + + /* octet 0 */ + tester_set_bit(rp->data, BTP_BAS_READ_SUPPORTED_COMMANDS); + tester_set_bit(rp->data, BTP_BAS_SET_BATTERY_LEVEL); +#if defined(CONFIG_BT_BAS_BLS) + tester_set_bit(rp->data, BTP_BAS_BLS_SET_BATTERY_PRESENT); + tester_set_bit(rp->data, BTP_BAS_BLS_SET_WIRED_POWER_SOURCE); + tester_set_bit(rp->data, BTP_BAS_BLS_SET_WIRELESS_POWER_SOURCE); + tester_set_bit(rp->data, BTP_BAS_BLS_SET_BATTERY_CHARGE_STATE); + tester_set_bit(rp->data, BTP_BAS_BLS_SET_BATTERY_CHARGE_LEVEL); + /* octet 1 */ + tester_set_bit(rp->data, BTP_BAS_BLS_SET_BATTERY_CHARGE_TYPE); + tester_set_bit(rp->data, BTP_BAS_BLS_SET_CHARGING_FAULT_REASON); +#if defined(CONFIG_BT_BAS_BLS_IDENTIFIER_PRESENT) + tester_set_bit(rp->data, BTP_BAS_BLS_SET_IDENTIFIER); +#endif /* CONFIG_BT_BAS_BLS_IDENTIFIER_PRESENT */ + tester_set_bit(rp->data, BTP_BAS_BLS_SET_SERVICE_REQUIRED); + tester_set_bit(rp->data, BTP_BAS_BLS_SET_BATTERY_FAULT); +#endif /* CONFIG_BT_BAS_BLS */ + + *rsp_len = sizeof(*rp) + 2; + + return BTP_STATUS_SUCCESS; +} + +static uint8_t btp_bas_set_battery_level(const void *cmd, uint16_t cmd_len, void *rsp, + uint16_t *rsp_len) +{ + const struct btp_bas_set_battery_level_cmd *cp = + (const struct btp_bas_set_battery_level_cmd *)cmd; + uint8_t level = cp->level; + int err = bt_bas_set_battery_level(level); + + return err ? BTP_STATUS_FAILED : BTP_STATUS_SUCCESS; +} + +#if defined(CONFIG_BT_BAS_BLS) +static uint8_t btp_bas_bls_set_battery_present(const void *cmd, uint16_t cmd_len, void *rsp, + uint16_t *rsp_len) +{ + const struct btp_bas_bls_set_battery_present_cmd *cp = + (const struct btp_bas_bls_set_battery_present_cmd *)cmd; + + if (cp->present != BT_BAS_BLS_BATTERY_NOT_PRESENT && + cp->present != BT_BAS_BLS_BATTERY_PRESENT) { + return BTP_STATUS_FAILED; + } + + /* + * BTP Values: + * Battery is not present. + * BTP_BAS_BLS_BATTERY_NOT_PRESENT = 0, + * + * Battery is present. + * BTP_BAS_BLS_BATTERY_PRESENT = 1 + */ + enum bt_bas_bls_battery_present present = cp->present; + + bt_bas_bls_set_battery_present(present); + + return BTP_STATUS_SUCCESS; +} + +static uint8_t btp_bas_bls_set_wired_power_source(const void *cmd, uint16_t cmd_len, void *rsp, + uint16_t *rsp_len) +{ + const struct btp_bas_bls_set_wired_power_source_cmd *cp = + (const struct btp_bas_bls_set_wired_power_source_cmd *)cmd; + + if (!IN_RANGE(cp->source, BT_BAS_BLS_WIRED_POWER_NOT_CONNECTED, + BT_BAS_BLS_WIRED_POWER_UNKNOWN)) { + return BTP_STATUS_FAILED; + } + + /* + * BTP Values: + * Wired external power source is not connected. + * BTP_BAS_BLS_WIRED_POWER_NOT_CONNECTED = 0, + * + * Wired external power source is connected. + * BTP_BAS_BLS_WIRED_POWER_CONNECTED = 1, + * + * Wired external power source status is unknown. + * BTP_BAS_BLS_WIRED_POWER_UNKNOWN = 2 + */ + enum bt_bas_bls_wired_power_source source = cp->source; + + bt_bas_bls_set_wired_external_power_source(source); + + return BTP_STATUS_SUCCESS; +} + +static uint8_t btp_bas_bls_set_wireless_power_source(const void *cmd, uint16_t cmd_len, void *rsp, + uint16_t *rsp_len) +{ + const struct btp_bas_bls_set_wireless_power_source_cmd *cp = + (const struct btp_bas_bls_set_wireless_power_source_cmd *)cmd; + + if (!IN_RANGE(cp->source, BT_BAS_BLS_WIRELESS_POWER_NOT_CONNECTED, + BT_BAS_BLS_WIRELESS_POWER_UNKNOWN)) { + return BTP_STATUS_FAILED; + } + + /* + * BTP Values: + * Wireless external power source is not connected. + * BTP_BAS_BLS_WIRELESS_POWER_NOT_CONNECTED = 0, + * + * Wireless external power source is connected. + * BTP_BAS_BLS_WIRELESS_POWER_CONNECTED = 1, + * + * Wireless external power source status is unknown. + * BTP_BAS_BLS_WIRELESS_POWER_UNKNOWN = 2 + */ + enum bt_bas_bls_wireless_power_source source = cp->source; + + bt_bas_bls_set_wireless_external_power_source(source); + + return BTP_STATUS_SUCCESS; +} + +static uint8_t btp_bas_bls_set_battery_charge_state(const void *cmd, uint16_t cmd_len, void *rsp, + uint16_t *rsp_len) +{ + const struct btp_bas_bls_set_battery_charge_state_cmd *cp = + (const struct btp_bas_bls_set_battery_charge_state_cmd *)cmd; + + if (!IN_RANGE(cp->state, BT_BAS_BLS_CHARGE_STATE_UNKNOWN, + BT_BAS_BLS_CHARGE_STATE_DISCHARGING_INACTIVE)) { + return BTP_STATUS_FAILED; + } + + /* + * BTP Values: + * Battery charge state is unknown. + * BTP_BAS_BLS_CHARGE_STATE_UNKNOWN = 0, + * + * Battery is currently charging. + * BTP_BAS_BLS_CHARGE_STATE_CHARGING = 1, + * + * Battery is discharging actively. + * BTP_BAS_BLS_CHARGE_STATE_DISCHARGING_ACTIVE = 2, + * + * Battery is discharging but inactive. + * BTP_BAS_BLS_CHARGE_STATE_DISCHARGING_INACTIVE = 3 + */ + enum bt_bas_bls_battery_charge_state state = cp->state; + + bt_bas_bls_set_battery_charge_state(state); + + return BTP_STATUS_SUCCESS; +} + +static uint8_t btp_bas_bls_set_battery_charge_level(const void *cmd, uint16_t cmd_len, void *rsp, + uint16_t *rsp_len) +{ + const struct btp_bas_bls_set_battery_charge_level_cmd *cp = + (const struct btp_bas_bls_set_battery_charge_level_cmd *)cmd; + + if (!IN_RANGE(cp->level, BT_BAS_BLS_CHARGE_LEVEL_UNKNOWN, + BT_BAS_BLS_CHARGE_LEVEL_CRITICAL)) { + return BTP_STATUS_FAILED; + } + + /* + * BTP Values: + * Battery charge level is unknown. + * BTP_BAS_BLS_CHARGE_LEVEL_UNKNOWN = 0, + * + * Battery charge level is good. + * BTP_BAS_BLS_CHARGE_LEVEL_GOOD = 1, + * + * Battery charge level is low. + * BTP_BAS_BLS_CHARGE_LEVEL_LOW = 2, + * + * Battery charge level is critical. + * BTP_BAS_BLS_CHARGE_LEVEL_CRITICAL = 3 + */ + enum bt_bas_bls_battery_charge_level level = cp->level; + + bt_bas_bls_set_battery_charge_level(level); + + return BTP_STATUS_SUCCESS; +} + +static uint8_t btp_bas_bls_set_battery_charge_type(const void *cmd, uint16_t cmd_len, void *rsp, + uint16_t *rsp_len) +{ + const struct btp_bas_bls_set_battery_charge_type_cmd *cp = + (const struct btp_bas_bls_set_battery_charge_type_cmd *)cmd; + + if (!IN_RANGE(cp->type, BT_BAS_BLS_CHARGE_TYPE_UNKNOWN, + BT_BAS_BLS_CHARGE_TYPE_FLOAT)) { + return BTP_STATUS_FAILED; + } + + /* + * BTP Values: + * Battery charge type is unknown or not charging. + * BTP_BAS_BLS_CHARGE_TYPE_UNKNOWN = 0, + * + * Battery is charged using constant current. + * BTP_BAS_BLS_CHARGE_TYPE_CONSTANT_CURRENT = 1, + * + * Battery is charged using constant voltage. + * BTP_BAS_BLS_CHARGE_TYPE_CONSTANT_VOLTAGE = 2, + * + * Battery is charged using trickle charge. + * BTP_BAS_BLS_CHARGE_TYPE_TRICKLE = 3, + * + * Battery is charged using float charge. + * BTP_BAS_BLS_CHARGE_TYPE_FLOAT = 4 + */ + enum bt_bas_bls_battery_charge_type type = cp->type; + + bt_bas_bls_set_battery_charge_type(type); + + return BTP_STATUS_SUCCESS; +} + +static uint8_t btp_bas_bls_set_charging_fault_reason(const void *cmd, uint16_t cmd_len, void *rsp, + uint16_t *rsp_len) +{ + const struct btp_bas_bls_set_charging_fault_reason_cmd *cp = + (const struct btp_bas_bls_set_charging_fault_reason_cmd *)cmd; + + if (cp->reason != BT_BAS_BLS_FAULT_REASON_NONE && + cp->reason != BT_BAS_BLS_FAULT_REASON_BATTERY && + cp->reason != BT_BAS_BLS_FAULT_REASON_EXTERNAL_POWER && + cp->reason != BT_BAS_BLS_FAULT_REASON_OTHER) { + return BTP_STATUS_FAILED; + } + + /* + * BTP Values: + * No charging fault. + * BTP_BAS_BLS_FAULT_REASON_NONE = 0, + * + * Charging fault due to battery issue. + * BTP_BAS_BLS_FAULT_REASON_BATTERY = BIT(0), + * + * Charging fault due to external power source issue. + * BTP_BAS_BLS_FAULT_REASON_EXTERNAL_POWER = BIT(1), + * + * Charging fault for other reasons. + * BTP_BAS_BLS_FAULT_REASON_OTHER = BIT(2) + */ + enum bt_bas_bls_charging_fault_reason reason = cp->reason; + + bt_bas_bls_set_charging_fault_reason(reason); + + return BTP_STATUS_SUCCESS; +} + +#if defined(CONFIG_BT_BAS_BLS_IDENTIFIER_PRESENT) +static uint8_t btp_bas_bls_set_identifier(const void *cmd, uint16_t cmd_len, void *rsp, + uint16_t *rsp_len) +{ + const struct btp_bas_bls_set_identifier_cmd *cp = + (const struct btp_bas_bls_set_identifier_cmd *)cmd; + uint16_t identifier = sys_le16_to_cpu(cp->identifier); + + bt_bas_bls_set_identifier(identifier); + + return BTP_STATUS_SUCCESS; +} +#endif /* CONFIG_BT_BAS_BLS_IDENTIFIER_PRESENT */ + +#if defined(CONFIG_BT_BAS_BLS_ADDITIONAL_STATUS_PRESENT) +static uint8_t btp_bas_bls_set_service_required(const void *cmd, uint16_t cmd_len, void *rsp, + uint16_t *rsp_len) +{ + const struct btp_bas_bls_set_service_required_cmd *cp = + (const struct btp_bas_bls_set_service_required_cmd *)cmd; + + if (!IN_RANGE(cp->service_required, BT_BAS_BLS_SERVICE_REQUIRED_FALSE, + BT_BAS_BLS_SERVICE_REQUIRED_UNKNOWN)) { + return BTP_STATUS_FAILED; + } + + /* + * BTP Values: + * Service is not required. + * BTP_BAS_BLS_SERVICE_REQUIRED_FALSE = 0, + * + * Service is required. + * BTP_BAS_BLS_SERVICE_REQUIRED_TRUE = 1, + * + * Service requirement is unknown. + * BTP_BAS_BLS_SERVICE_REQUIRED_UNKNOWN = 2 + */ + enum bt_bas_bls_service_required value = cp->service_required; + + bt_bas_bls_set_service_required(value); + + return BTP_STATUS_SUCCESS; +} + +static uint8_t btp_bas_bls_set_battery_fault(const void *cmd, uint16_t cmd_len, void *rsp, + uint16_t *rsp_len) +{ + const struct btp_bas_bls_set_battery_fault_cmd *cp = + (const struct btp_bas_bls_set_battery_fault_cmd *)cmd; + + if (cp->battery_fault != BT_BAS_BLS_BATTERY_FAULT_NO && + cp->battery_fault != BT_BAS_BLS_BATTERY_FAULT_YES) { + return BTP_STATUS_FAILED; + } + + /* + * BTP Values: + * No battery fault. + * BTP_BAS_BLS_BATTERY_FAULT_NO = 0, + * + * Battery fault present. + * BTP_BAS_BLS_BATTERY_FAULT_YES = 1 + */ + enum bt_bas_bls_battery_fault value = cp->battery_fault; + + bt_bas_bls_set_battery_fault(value); + + return BTP_STATUS_SUCCESS; +} +#endif /* CONFIG_BT_BAS_BLS_ADDITIONAL_STATUS_PRESENT */ + +#endif /* CONFIG_BT_BAS_BLS */ + +static const struct btp_handler handlers[] = { + { + .opcode = BTP_BAS_READ_SUPPORTED_COMMANDS, + .index = BTP_INDEX_NONE, + .expect_len = 0, + .func = bas_supported_commands, + }, + { + .opcode = BTP_BAS_SET_BATTERY_LEVEL, + .index = BTP_INDEX_NONE, + .expect_len = sizeof(struct btp_bas_set_battery_level_cmd), + .func = btp_bas_set_battery_level, + }, +#if defined(CONFIG_BT_BAS_BLS) + { + .opcode = BTP_BAS_BLS_SET_BATTERY_PRESENT, + .index = BTP_INDEX_NONE, + .expect_len = sizeof(struct btp_bas_bls_set_battery_present_cmd), + .func = btp_bas_bls_set_battery_present, + }, + { + .opcode = BTP_BAS_BLS_SET_WIRED_POWER_SOURCE, + .index = BTP_INDEX_NONE, + .expect_len = sizeof(struct btp_bas_bls_set_wired_power_source_cmd), + .func = btp_bas_bls_set_wired_power_source, + }, + { + .opcode = BTP_BAS_BLS_SET_WIRELESS_POWER_SOURCE, + .index = BTP_INDEX_NONE, + .expect_len = sizeof(struct btp_bas_bls_set_wireless_power_source_cmd), + .func = btp_bas_bls_set_wireless_power_source, + }, + { + .opcode = BTP_BAS_BLS_SET_BATTERY_CHARGE_STATE, + .index = BTP_INDEX_NONE, + .expect_len = sizeof(struct btp_bas_bls_set_battery_charge_state_cmd), + .func = btp_bas_bls_set_battery_charge_state, + }, + { + .opcode = BTP_BAS_BLS_SET_BATTERY_CHARGE_LEVEL, + .index = BTP_INDEX_NONE, + .expect_len = sizeof(struct btp_bas_bls_set_battery_charge_level_cmd), + .func = btp_bas_bls_set_battery_charge_level, + }, + { + .opcode = BTP_BAS_BLS_SET_BATTERY_CHARGE_TYPE, + .index = BTP_INDEX_NONE, + .expect_len = sizeof(struct btp_bas_bls_set_battery_charge_type_cmd), + .func = btp_bas_bls_set_battery_charge_type, + }, + { + .opcode = BTP_BAS_BLS_SET_CHARGING_FAULT_REASON, + .index = BTP_INDEX_NONE, + .expect_len = sizeof(struct btp_bas_bls_set_charging_fault_reason_cmd), + .func = btp_bas_bls_set_charging_fault_reason, + }, +#if defined(CONFIG_BT_BAS_BLS_IDENTIFIER_PRESENT) + { + .opcode = BTP_BAS_BLS_SET_IDENTIFIER, + .index = BTP_INDEX_NONE, + .expect_len = sizeof(struct btp_bas_bls_set_identifier_cmd), + .func = btp_bas_bls_set_identifier, + }, +#endif /* CONFIG_BT_BAS_BLS_IDENTIFIER_PRESENT */ +#if defined(CONFIG_BT_BAS_BLS_ADDITIONAL_STATUS_PRESENT) + { + .opcode = BTP_BAS_BLS_SET_SERVICE_REQUIRED, + .index = BTP_INDEX_NONE, + .expect_len = sizeof(struct btp_bas_bls_set_service_required_cmd), + .func = btp_bas_bls_set_service_required, + }, + { + .opcode = BTP_BAS_BLS_SET_BATTERY_FAULT, + .index = BTP_INDEX_NONE, + .expect_len = sizeof(struct btp_bas_bls_set_battery_fault_cmd), + .func = btp_bas_bls_set_battery_fault, + }, +#endif /* CONFIG_BT_BAS_BLS_ADDITIONAL_STATUS_PRESENT */ +#endif /* CONFIG_BT_BAS_BLS */ +}; + +uint8_t tester_init_bas(void) +{ + tester_register_command_handlers(BTP_SERVICE_ID_BAS, handlers, ARRAY_SIZE(handlers)); + + return BTP_STATUS_SUCCESS; +} + +uint8_t tester_unregister_bas(void) +{ + return BTP_STATUS_SUCCESS; +} diff --git a/tests/bluetooth/tester/src/btp_core.c b/tests/bluetooth/tester/src/btp_core.c index 2da735f44ec7..001a7964e78a 100644 --- a/tests/bluetooth/tester/src/btp_core.c +++ b/tests/bluetooth/tester/src/btp_core.c @@ -101,6 +101,9 @@ static uint8_t supported_services(const void *cmd, uint16_t cmd_len, #if defined(CONFIG_BT_HAS) tester_set_bit(rp->data, BTP_SERVICE_ID_HAP); #endif /* CONFIG_BT_HAS */ +#if defined(CONFIG_BT_BAS) + tester_set_bit(rp->data, BTP_SERVICE_ID_BAS); +#endif /* CONFIG_BT_BAS */ #if defined(CONFIG_BT_TBS) tester_set_bit(rp->data, BTP_SERVICE_ID_TBS); #endif /*CONFIG_BT_TBS */ @@ -198,6 +201,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_BAS) + case BTP_SERVICE_ID_BAS: + status = tester_init_bas(); + break; +#endif /* CONFIG_BT_BAS */ #if defined(CONFIG_BT_CSIP_SET_MEMBER) case BTP_SERVICE_ID_CSIS: status = tester_init_csis(); @@ -350,6 +358,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_BAS) + case BTP_SERVICE_ID_BAS: + status = tester_unregister_bas(); + break; +#endif /* CONFIG_BT_BAS */ #if defined(CONFIG_BT_CSIP_SET_MEMBER) case BTP_SERVICE_ID_CSIS: status = tester_unregister_csis();