This is an automated email from the ASF dual-hosted git repository.
janc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git
The following commit(s) were added to refs/heads/master by this push:
new 6c30f9632 apps/bttester: Refactor reporting supported commands
6c30f9632 is described below
commit 6c30f96322f7650bddbde40f7aa4ee74f837b54b
Author: Szymon Czapracki <[email protected]>
AuthorDate: Thu May 22 12:54:58 2025 +0200
apps/bttester: Refactor reporting supported commands
Implement new way for reporting supported commands.
Now only commands with registered handler will
be present in the queried response.
---
apps/bttester/src/btp/bttester.h | 3 +++
apps/bttester/src/btp_bap.c | 14 ++---------
apps/bttester/src/btp_core.c | 8 ++-----
apps/bttester/src/btp_gap.c | 51 ++--------------------------------------
apps/bttester/src/btp_gatt.c | 34 ++-------------------------
apps/bttester/src/btp_gatt_cl.c | 31 ++----------------------
apps/bttester/src/btp_l2cap.c | 11 ++-------
apps/bttester/src/btp_mesh.c | 28 ++--------------------
apps/bttester/src/btp_pacs.c | 9 ++-----
apps/bttester/src/bttester.c | 19 +++++++++++++++
10 files changed, 38 insertions(+), 170 deletions(-)
diff --git a/apps/bttester/src/btp/bttester.h b/apps/bttester/src/btp/bttester.h
index 6e1fb3a87..ac56d8846 100644
--- a/apps/bttester/src/btp/bttester.h
+++ b/apps/bttester/src/btp/bttester.h
@@ -93,6 +93,9 @@ struct btp_handler {
void tester_register_command_handlers(uint8_t service,
const struct btp_handler *handlers,
size_t num);
+
+uint16_t tester_supported_commands(uint8_t service, uint8_t *cmds);
+
void
tester_send_buf(uint8_t service, uint8_t opcode, uint8_t index,
struct os_mbuf *buf);
diff --git a/apps/bttester/src/btp_bap.c b/apps/bttester/src/btp_bap.c
index 37ecedb0e..7ff489bb9 100644
--- a/apps/bttester/src/btp_bap.c
+++ b/apps/bttester/src/btp_bap.c
@@ -139,18 +139,8 @@ supported_commands(const void *cmd, uint16_t cmd_len,
{
struct btp_bap_read_supported_commands_rp *rp = rsp;
- /* octet 0 */
- tester_set_bit(rp->data, BTP_BAP_READ_SUPPORTED_COMMANDS);
- tester_set_bit(rp->data, BTP_BAP_BROADCAST_SOURCE_SETUP);
- tester_set_bit(rp->data, BTP_BAP_BROADCAST_SOURCE_RELEASE);
- tester_set_bit(rp->data, BTP_BAP_BROADCAST_ADV_START);
- tester_set_bit(rp->data, BTP_BAP_BROADCAST_ADV_STOP);
-
- /* octet 1 */
- tester_set_bit(rp->data, BTP_BAP_BROADCAST_SOURCE_START);
- tester_set_bit(rp->data, BTP_BAP_BROADCAST_SOURCE_STOP);
-
- *rsp_len = sizeof(*rp) + 2;
+ *rsp_len = tester_supported_commands(BTP_SERVICE_ID_BAP, rp->data);
+ *rsp_len += sizeof(*rp);
return BTP_STATUS_SUCCESS;
}
diff --git a/apps/bttester/src/btp_core.c b/apps/bttester/src/btp_core.c
index a1eafb300..65f3491a1 100644
--- a/apps/bttester/src/btp_core.c
+++ b/apps/bttester/src/btp_core.c
@@ -35,12 +35,8 @@ supported_commands(const void *cmd, uint16_t cmd_len,
{
struct btp_core_read_supported_commands_rp *rp = rsp;
- tester_set_bit(rp->data, BTP_CORE_READ_SUPPORTED_COMMANDS);
- tester_set_bit(rp->data, BTP_CORE_READ_SUPPORTED_SERVICES);
- tester_set_bit(rp->data, BTP_CORE_REGISTER_SERVICE);
- tester_set_bit(rp->data, BTP_CORE_UNREGISTER_SERVICE);
-
- *rsp_len = sizeof(*rp) + 1;
+ *rsp_len = tester_supported_commands(BTP_SERVICE_ID_CORE, rp->data);
+ *rsp_len += sizeof(*rp);
return BTP_STATUS_SUCCESS;
}
diff --git a/apps/bttester/src/btp_gap.c b/apps/bttester/src/btp_gap.c
index 0f0fcb31f..9448bd60b 100644
--- a/apps/bttester/src/btp_gap.c
+++ b/apps/bttester/src/btp_gap.c
@@ -128,55 +128,8 @@ supported_commands(const void *cmd, uint16_t cmd_len,
{
struct btp_gap_read_supported_commands_rp *rp = rsp;
- /* octet 0 */
- tester_set_bit(rp->data, BTP_GAP_READ_SUPPORTED_COMMANDS);
- tester_set_bit(rp->data, BTP_GAP_READ_CONTROLLER_INDEX_LIST);
- tester_set_bit(rp->data, BTP_GAP_READ_CONTROLLER_INFO);
- tester_set_bit(rp->data, BTP_GAP_SET_CONNECTABLE);
-
- /* octet 1 */
- tester_set_bit(rp->data, BTP_GAP_SET_DISCOVERABLE);
- tester_set_bit(rp->data, BTP_GAP_SET_BONDABLE);
- tester_set_bit(rp->data, BTP_GAP_START_ADVERTISING);
- tester_set_bit(rp->data, BTP_GAP_STOP_ADVERTISING);
- tester_set_bit(rp->data, BTP_GAP_START_DISCOVERY);
- tester_set_bit(rp->data, BTP_GAP_STOP_DISCOVERY);
- tester_set_bit(rp->data, BTP_GAP_CONNECT);
- tester_set_bit(rp->data, BTP_GAP_DISCONNECT);
-
- /* octet 2 */
- tester_set_bit(rp->data, BTP_GAP_SET_IO_CAP);
- tester_set_bit(rp->data, BTP_GAP_PAIR);
- tester_set_bit(rp->data, BTP_GAP_UNPAIR);
- tester_set_bit(rp->data, BTP_GAP_PASSKEY_ENTRY);
- tester_set_bit(rp->data, BTP_GAP_PASSKEY_CONFIRM);
- tester_set_bit(rp->data, BTP_GAP_START_DIRECT_ADV);
- tester_set_bit(rp->data, BTP_GAP_CONN_PARAM_UPDATE);
-
- /* octet 3 */
- tester_set_bit(rp->data, BTP_GAP_OOB_LEGACY_SET_DATA);
- tester_set_bit(rp->data, BTP_GAP_OOB_SC_GET_LOCAL_DATA);
- tester_set_bit(rp->data, BTP_GAP_OOB_SC_SET_REMOTE_DATA);
- tester_set_bit(rp->data, BTP_GAP_SET_MITM);
- tester_set_bit(rp->data, BTP_GAP_SET_FILTER_ACCEPT_LIST);
-
- /* octet 4 */
-#if MYNEWT_VAL(BLE_PERIODIC_ADV)
- tester_set_bit(rp->data, GAP_SET_EXT_ADV);
- tester_set_bit(rp->data, GAP_PADV_CONFIGURE);
- tester_set_bit(rp->data, GAP_PADV_START);
- tester_set_bit(rp->data, GAP_PADV_SET_DATA);
- tester_set_bit(rp->data, GAP_PADV_CREATE_SYNC);
-#endif
-#if MYNEWT_VAL(BLE_PERIODIC_ADV_SYNC_TRANSFER)
- tester_set_bit(rp->data, GAP_PADV_SYNC_TRANSFER_SET_INFO);
- tester_set_bit(rp->data, GAP_PADV_SYNC_TRANSFER_START);
- tester_set_bit(rp->data, GAP_PADV_SYNC_TRANSFER_START);
-#endif
-
- *rsp_len = sizeof(*rp) + 4 +
- (MYNEWT_VAL(BLE_PERIODIC_ADV) ||
- MYNEWT_VAL(BLE_PERIODIC_ADV_SYNC_TRANSFER) ? 1 : 0);
+ *rsp_len = tester_supported_commands(BTP_SERVICE_ID_GAP, rp->data);
+ *rsp_len += sizeof(*rp);
return BTP_STATUS_SUCCESS;
}
diff --git a/apps/bttester/src/btp_gatt.c b/apps/bttester/src/btp_gatt.c
index b6ac433c0..2baa1c835 100644
--- a/apps/bttester/src/btp_gatt.c
+++ b/apps/bttester/src/btp_gatt.c
@@ -1960,38 +1960,8 @@ supported_commands(const void *cmd, uint16_t cmd_len,
{
struct btp_gatt_read_supported_commands_rp *rp = rsp;
- /* octet 0 */
- tester_set_bit(rp->data, BTP_GATT_READ_SUPPORTED_COMMANDS);
- tester_set_bit(rp->data, BTP_GATT_START_SERVER);
-
- /* octet 1 */
- tester_set_bit(rp->data, BTP_GATT_EXCHANGE_MTU);
- tester_set_bit(rp->data, BTP_GATT_DISC_ALL_PRIM_SVCS);
- tester_set_bit(rp->data, BTP_GATT_DISC_PRIM_UUID);
- tester_set_bit(rp->data, BTP_GATT_FIND_INCLUDED);
- tester_set_bit(rp->data, BTP_GATT_DISC_ALL_CHRC);
- tester_set_bit(rp->data, BTP_GATT_DISC_CHRC_UUID);
-
- /* octet 2 */
- tester_set_bit(rp->data, BTP_GATT_DISC_ALL_DESC);
- tester_set_bit(rp->data, BTP_GATT_READ);
- tester_set_bit(rp->data, BTP_GATT_READ_LONG);
- tester_set_bit(rp->data, BTP_GATT_READ_MULTIPLE);
- tester_set_bit(rp->data, BTP_GATT_WRITE_WITHOUT_RSP);
-#if 0
- tester_set_bit(rp->data, BTP_GATT_SIGNED_WRITE_WITHOUT_RSP);
-#endif
- tester_set_bit(rp->data, BTP_GATT_WRITE);
-
- /* octet 3 */
- tester_set_bit(rp->data, BTP_GATT_WRITE_LONG);
- tester_set_bit(rp->data, BTP_GATT_CFG_NOTIFY);
- tester_set_bit(rp->data, BTP_GATT_CFG_INDICATE);
- tester_set_bit(rp->data, BTP_GATT_GET_ATTRIBUTES);
- tester_set_bit(rp->data, BTP_GATT_GET_ATTRIBUTE_VALUE);
- tester_set_bit(rp->data, BTP_GATT_CHANGE_DATABASE);
-
- *rsp_len = sizeof(*rp) + 4;
+ *rsp_len = tester_supported_commands(BTP_SERVICE_ID_GATT, rp->data);
+ *rsp_len += sizeof(*rp);
return BTP_STATUS_SUCCESS;
}
diff --git a/apps/bttester/src/btp_gatt_cl.c b/apps/bttester/src/btp_gatt_cl.c
index e4da8a3ea..8771c395b 100644
--- a/apps/bttester/src/btp_gatt_cl.c
+++ b/apps/bttester/src/btp_gatt_cl.c
@@ -1491,35 +1491,8 @@ supported_commands(const void *cmd, uint16_t cmd_len,
{
struct btp_gattc_read_supported_commands_rp *rp = rsp;
- SYS_LOG_DBG("");
-
- /* octet 0 */
- tester_set_bit(rp->data, BTP_GATTC_READ_SUPPORTED_COMMANDS);
- tester_set_bit(rp->data, BTP_GATTC_EXCHANGE_MTU);
- tester_set_bit(rp->data, BTP_GATTC_DISC_ALL_PRIM_SVCS);
- tester_set_bit(rp->data, BTP_GATTC_DISC_PRIM_UUID);
- tester_set_bit(rp->data, BTP_GATTC_FIND_INCLUDED);
- tester_set_bit(rp->data, BTP_GATTC_DISC_ALL_CHRC);
- tester_set_bit(rp->data, BTP_GATTC_DISC_CHRC_UUID);
- /* octet 1 */
- tester_set_bit(rp->data, BTP_GATTC_DISC_ALL_DESC);
- tester_set_bit(rp->data, BTP_GATTC_READ);
- tester_set_bit(rp->data, BTP_GATTC_READ_UUID);
- tester_set_bit(rp->data, BTP_GATTC_READ_LONG);
- tester_set_bit(rp->data, BTP_GATTC_READ_MULTIPLE);
- tester_set_bit(rp->data, BTP_GATTC_WRITE_WITHOUT_RSP);
-#if 0
- tester_set_bit(rp->data, BTP_GATTC_SIGNED_WRITE_WITHOUT_RSP);
-#endif
- tester_set_bit(rp->data, BTP_GATTC_WRITE);
- /* octet 2 */
- tester_set_bit(rp->data, BTP_GATTC_WRITE_LONG);
- tester_set_bit(rp->data, BTP_GATTC_RELIABLE_WRITE);
- tester_set_bit(rp->data, BTP_GATTC_CFG_NOTIFY);
- tester_set_bit(rp->data, BTP_GATTC_CFG_INDICATE);
- tester_set_bit(rp->data, BTP_GATTC_READ_MULTIPLE_VAR);
-
- *rsp_len = sizeof(*rp) + 3;
+ *rsp_len = tester_supported_commands(BTP_SERVICE_ID_GATTC, rp->data);
+ *rsp_len += sizeof(*rp);
return BTP_STATUS_SUCCESS;
}
diff --git a/apps/bttester/src/btp_l2cap.c b/apps/bttester/src/btp_l2cap.c
index 916e714e7..03099b778 100644
--- a/apps/bttester/src/btp_l2cap.c
+++ b/apps/bttester/src/btp_l2cap.c
@@ -678,15 +678,8 @@ supported_commands(const void *cmd, uint16_t cmd_len,
{
struct btp_l2cap_read_supported_commands_rp *rp = rsp;
- /* octet 0 */
- tester_set_bit(rp->data, BTP_L2CAP_READ_SUPPORTED_COMMANDS);
- tester_set_bit(rp->data, BTP_L2CAP_CONNECT);
- tester_set_bit(rp->data, BTP_L2CAP_DISCONNECT);
- tester_set_bit(rp->data, BTP_L2CAP_SEND_DATA);
- tester_set_bit(rp->data, BTP_L2CAP_LISTEN);
- /* octet 1 */
- tester_set_bit(rp->data, BTP_L2CAP_CREDITS);
- *rsp_len = sizeof(*rp) + 2;
+ *rsp_len = tester_supported_commands(BTP_SERVICE_ID_L2CAP, rp->data);
+ *rsp_len += sizeof(*rp);
return BTP_STATUS_SUCCESS;
}
diff --git a/apps/bttester/src/btp_mesh.c b/apps/bttester/src/btp_mesh.c
index aad7eb4ad..4815dbe5b 100644
--- a/apps/bttester/src/btp_mesh.c
+++ b/apps/bttester/src/btp_mesh.c
@@ -94,32 +94,8 @@ supported_commands(const void *cmd, uint16_t cmd_len,
{
struct btp_mesh_read_supported_commands_rp *rp = rsp;
- /* octet 0 */
- tester_set_bit(rp->data, BTP_MESH_READ_SUPPORTED_COMMANDS);
- tester_set_bit(rp->data, BTP_MESH_CONFIG_PROVISIONING);
- tester_set_bit(rp->data, BTP_MESH_PROVISION_NODE);
- tester_set_bit(rp->data, BTP_MESH_INIT);
- tester_set_bit(rp->data, BTP_MESH_RESET);
- tester_set_bit(rp->data, BTP_MESH_INPUT_NUMBER);
- tester_set_bit(rp->data, BTP_MESH_INPUT_STRING);
- /* octet 1 */
- tester_set_bit(rp->data, BTP_MESH_IVU_TEST_MODE);
- tester_set_bit(rp->data, BTP_MESH_IVU_TOGGLE_STATE);
- tester_set_bit(rp->data, BTP_MESH_NET_SEND);
- tester_set_bit(rp->data, BTP_MESH_HEALTH_GENERATE_FAULTS);
- tester_set_bit(rp->data, BTP_MESH_HEALTH_CLEAR_FAULTS);
- tester_set_bit(rp->data, BTP_MESH_LPN);
- tester_set_bit(rp->data, BTP_MESH_LPN_POLL);
- tester_set_bit(rp->data, BTP_MESH_MODEL_SEND);
- /* octet 2 */
-#if MYNEWT_VAL(BLE_MESH_TESTING)
- tester_set_bit(rp->data, BTP_MESH_LPN_SUBSCRIBE);
- tester_set_bit(rp->data, BTP_MESH_LPN_UNSUBSCRIBE);
- tester_set_bit(rp->data, BTP_MESH_RPL_CLEAR);
-#endif /* CONFIG_BT_TESTING */
- tester_set_bit(rp->data, BTP_MESH_PROXY_IDENTITY);
-
- *rsp_len = sizeof(*rp) + 3;
+ *rsp_len = tester_supported_commands(BTP_SERVICE_ID_GAP, rp->data);
+ *rsp_len += sizeof(*rp);
return BTP_STATUS_SUCCESS;
}
diff --git a/apps/bttester/src/btp_pacs.c b/apps/bttester/src/btp_pacs.c
index 9404cd946..2ccc6f1b9 100644
--- a/apps/bttester/src/btp_pacs.c
+++ b/apps/bttester/src/btp_pacs.c
@@ -266,13 +266,8 @@ supported_commands(const void *cmd, uint16_t cmd_len,
{
struct btp_pacs_read_supported_commands_rp *rp = rsp;
- /* octet 0 */
- tester_set_bit(rp->data, BTP_PACS_READ_SUPPORTED_COMMANDS);
- tester_set_bit(rp->data, BTP_PACS_UPDATE_CHARACTERISTIC);
- tester_set_bit(rp->data, BTP_PACS_SET_AVAILABLE_CONTEXTS);
- tester_set_bit(rp->data, BTP_PACS_SET_SUPPORTED_CONTEXTS);
-
- *rsp_len = sizeof(*rp) + 1;
+ *rsp_len = tester_supported_commands(BTP_SERVICE_ID_PACS, rp->data);
+ *rsp_len += sizeof(*rp);
return BTP_STATUS_SUCCESS;
}
diff --git a/apps/bttester/src/bttester.c b/apps/bttester/src/bttester.c
index fa4a82bb6..8bbca9f2e 100644
--- a/apps/bttester/src/bttester.c
+++ b/apps/bttester/src/bttester.c
@@ -377,3 +377,22 @@ tester_rsp(uint8_t service, uint8_t opcode, uint8_t status)
os_eventq_put(&avail_queue,
CONTAINER_OF(cmd, struct btp_buf, data)->ev);
}
+
+uint16_t
+tester_supported_commands(uint8_t service, uint8_t *cmds)
+{
+ uint8_t opcode_max = 0;
+
+ assert(service <= BTP_SERVICE_ID_MAX);
+
+ for (size_t i = 0; i < service_handler[service].num; i++) {
+ const struct btp_handler *handler =
&service_handler[service].handlers[i];
+ tester_set_bit(cmds, handler->opcode);
+
+ if (handler->opcode > opcode_max) {
+ opcode_max = handler->opcode;
+ }
+ }
+
+ return (opcode_max / 8) + 1;
+}