From 813ec50838b20ea85b288c7e2c84186ff1262e8d Mon Sep 17 00:00:00 2001 From: Mariusz Skamra Date: Tue, 2 Jan 2018 11:26:08 +0100 Subject: [PATCH] Bluetooth: btp: Add event indicating expiration of incomp timer This event indicates that segmented message incomplete timer expired. Signed-off-by: Mariusz Skamra --- include/bluetooth/testing.h | 1 + subsys/bluetooth/host/mesh/transport.c | 5 +++++ subsys/bluetooth/host/testing.c | 11 +++++++++++ subsys/bluetooth/host/testing.h | 1 + tests/bluetooth/tester/btp_spec.txt | 8 ++++++++ tests/bluetooth/tester/src/bttester.h | 2 ++ tests/bluetooth/tester/src/mesh.c | 7 +++++++ 7 files changed, 35 insertions(+) diff --git a/include/bluetooth/testing.h b/include/bluetooth/testing.h index eb1868ebcec..f5fc3a2bc92 100644 --- a/include/bluetooth/testing.h +++ b/include/bluetooth/testing.h @@ -35,6 +35,7 @@ struct bt_test_cb { void (*mesh_model_unbound)(u16_t addr, struct bt_mesh_model *model, u16_t key_idx); void (*mesh_prov_invalid_bearer)(u8_t opcode); + void (*mesh_trans_incomp_timer_exp)(void); sys_snode_t node; }; diff --git a/subsys/bluetooth/host/mesh/transport.c b/subsys/bluetooth/host/mesh/transport.c index e5889251fac..daddf6e716c 100644 --- a/subsys/bluetooth/host/mesh/transport.c +++ b/subsys/bluetooth/host/mesh/transport.c @@ -978,6 +978,11 @@ static void seg_ack(struct k_work *work) send_ack(rx->sub, rx->dst, rx->src, rx->ttl, &rx->seq_auth, 0, rx->obo); seg_rx_reset(rx); + + if (IS_ENABLED(CONFIG_BT_TESTING)) { + bt_test_mesh_trans_incomp_timer_exp(); + } + return; } diff --git a/subsys/bluetooth/host/testing.c b/subsys/bluetooth/host/testing.c index 7fb460da543..8b620429047 100644 --- a/subsys/bluetooth/host/testing.c +++ b/subsys/bluetooth/host/testing.c @@ -76,6 +76,17 @@ void bt_test_mesh_prov_invalid_bearer(u8_t opcode) } } +void bt_test_mesh_trans_incomp_timer_exp(void) +{ + struct bt_test_cb *cb; + + SYS_SLIST_FOR_EACH_CONTAINER(&cb_slist, cb, node) { + if (cb->mesh_trans_incomp_timer_exp) { + cb->mesh_trans_incomp_timer_exp(); + } + } +} + int bt_test_mesh_lpn_group_add(u16_t group) { bt_mesh_lpn_group_add(group); diff --git a/subsys/bluetooth/host/testing.h b/subsys/bluetooth/host/testing.h index 6cc17169bb4..a1f6a8e3a13 100644 --- a/subsys/bluetooth/host/testing.h +++ b/subsys/bluetooth/host/testing.h @@ -16,3 +16,4 @@ void bt_test_mesh_model_bound(u16_t addr, struct bt_mesh_model *model, void bt_test_mesh_model_unbound(u16_t addr, struct bt_mesh_model *model, u16_t key_idx); void bt_test_mesh_prov_invalid_bearer(u8_t opcode); +void bt_test_mesh_trans_incomp_timer_exp(void); diff --git a/tests/bluetooth/tester/btp_spec.txt b/tests/bluetooth/tester/btp_spec.txt index 2a536851617..391d65a4bcf 100644 --- a/tests/bluetooth/tester/btp_spec.txt +++ b/tests/bluetooth/tester/btp_spec.txt @@ -1613,3 +1613,11 @@ Events: This event indicates reception of provisioning message with invalid RFU BearerOpcode. + + Opcode 0x88 - Transport Incomplete Timer Expired Event + + Controller Index: + Event parameters: + + This event indicates that segmented message incomplete timer + expired. diff --git a/tests/bluetooth/tester/src/bttester.h b/tests/bluetooth/tester/src/bttester.h index 32e45a7a306..97e0843ff81 100644 --- a/tests/bluetooth/tester/src/bttester.h +++ b/tests/bluetooth/tester/src/bttester.h @@ -815,6 +815,8 @@ struct mesh_invalid_bearer_ev { u8_t opcode; } __packed; +#define MESH_EV_INCOMP_TIMER_EXP 0x88 + void tester_init(void); void tester_rsp(u8_t service, u8_t opcode, u8_t index, u8_t status); void tester_send(u8_t service, u8_t opcode, u8_t index, u8_t *data, diff --git a/tests/bluetooth/tester/src/mesh.c b/tests/bluetooth/tester/src/mesh.c index 8c5daf9607c..727c97ba535 100644 --- a/tests/bluetooth/tester/src/mesh.c +++ b/tests/bluetooth/tester/src/mesh.c @@ -857,11 +857,18 @@ static void invalid_bearer_cb(u8_t opcode) CONTROLLER_INDEX, (u8_t *) &ev, sizeof(ev)); } +static void incomp_timer_exp_cb(void) +{ + tester_send(BTP_SERVICE_ID_MESH, MESH_EV_INCOMP_TIMER_EXP, + CONTROLLER_INDEX, NULL, 0); +} + static struct bt_test_cb bt_test_cb = { .mesh_net_recv = net_recv_ev, .mesh_model_bound = model_bound_cb, .mesh_model_unbound = model_unbound_cb, .mesh_prov_invalid_bearer = invalid_bearer_cb, + .mesh_trans_incomp_timer_exp = incomp_timer_exp_cb, }; u8_t tester_init_mesh(void)