test: bsim: bluetooth: mesh: Wait until adv is actually sent
k_sleep may not be enough to let advertiser send the message. Instead we should rely on the bt_mesh_send_cb. Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
This commit is contained in:
parent
4c5c434ea2
commit
457a20c4a2
3 changed files with 33 additions and 3 deletions
|
@ -569,11 +569,17 @@ uint16_t bt_mesh_test_own_addr_get(uint16_t start_addr)
|
|||
}
|
||||
|
||||
void bt_mesh_test_send_over_adv(void *data, size_t len)
|
||||
{
|
||||
bt_mesh_test_send_over_adv_cb(data, len, NULL, NULL);
|
||||
}
|
||||
|
||||
void bt_mesh_test_send_over_adv_cb(void *data, size_t len, const struct bt_mesh_send_cb *cb,
|
||||
void *cb_data)
|
||||
{
|
||||
struct bt_mesh_adv *adv = bt_mesh_adv_create(BT_MESH_ADV_DATA, BT_MESH_ADV_TAG_LOCAL,
|
||||
BT_MESH_TRANSMIT(0, 20), K_NO_WAIT);
|
||||
net_buf_simple_add_mem(&adv->b, data, len);
|
||||
bt_mesh_adv_send(adv, NULL, NULL);
|
||||
bt_mesh_adv_send(adv, cb, cb_data);
|
||||
}
|
||||
|
||||
int bt_mesh_test_wait_for_packet(bt_le_scan_cb_t scan_cb, struct k_sem *observer_sem, uint16_t wait)
|
||||
|
|
|
@ -204,6 +204,8 @@ void bt_mesh_test_ra_cb_setup(void (*cb)(uint8_t *, size_t));
|
|||
uint16_t bt_mesh_test_own_addr_get(uint16_t start_addr);
|
||||
|
||||
void bt_mesh_test_send_over_adv(void *data, size_t len);
|
||||
void bt_mesh_test_send_over_adv_cb(void *data, size_t len, const struct bt_mesh_send_cb *cb,
|
||||
void *cb_data);
|
||||
/* Wait for a packet (i. e. an advertisement or a GATT frame) sent by a device.
|
||||
* `scan_cb` is triggered if the packet is received, and must release `observer_sem` when finished.
|
||||
*/
|
||||
|
|
|
@ -318,8 +318,29 @@ static void dut_pub_common(bool disable_bt)
|
|||
ASSERT_OK(bt_mesh_suspend());
|
||||
}
|
||||
|
||||
static void send_start(uint16_t duration, int err, void *cb_data)
|
||||
{
|
||||
if (err) {
|
||||
FAIL("Failed to send message (err %d)", err);
|
||||
}
|
||||
}
|
||||
|
||||
static void send_end(int err, void *cb_data)
|
||||
{
|
||||
k_sem_give((struct k_sem *)cb_data);
|
||||
}
|
||||
|
||||
static void dut_gatt_common(bool disable_bt)
|
||||
{
|
||||
struct k_sem send_sem;
|
||||
|
||||
k_sem_init(&send_sem, 0, 1);
|
||||
|
||||
const struct bt_mesh_send_cb send_cb = {
|
||||
.start = send_start,
|
||||
.end = send_end,
|
||||
};
|
||||
|
||||
bt_mesh_test_cfg_set(NULL, WAIT_TIME);
|
||||
bt_mesh_device_setup(&prov, &comp);
|
||||
ASSERT_OK_MSG(bt_mesh_prov_enable(BT_MESH_PROV_GATT), "Failed to enable GATT provisioner");
|
||||
|
@ -336,8 +357,9 @@ static void dut_gatt_common(bool disable_bt)
|
|||
|
||||
/* Send a mesh message to notify Tester that DUT is about to be suspended. */
|
||||
dut_status = DUT_SUSPENDED;
|
||||
bt_mesh_test_send_over_adv(&dut_status, sizeof(enum dut_mesh_status));
|
||||
k_sleep(K_MSEC(150));
|
||||
bt_mesh_test_send_over_adv_cb(&dut_status, sizeof(enum dut_mesh_status), &send_cb,
|
||||
&send_sem);
|
||||
ASSERT_OK(k_sem_take(&send_sem, K_MSEC(200)));
|
||||
|
||||
ASSERT_OK_MSG(bt_mesh_suspend(), "Failed to suspend Mesh.");
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue