btdev: Fix sending terminate advertising event to the wrong device
Luiz Augusto von Dentz
maintainerRFC 1/3 btdev: Fix sending terminate advertising event to the wrong device
From: Luiz Augusto von Dentz <[email protected]>
The device where the event should be sent is the same that had created not the connection one.
--- emulator/btdev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
emulator/btdev.c +1 -1
@@ -5118,7 +5118,7 @@ static void ext_adv_term(void *data, void *user_data)/* if connectable bit is set the send adv terminate */ if (conn && adv->type &0x01 ) { -adv_set_terminate (conn->dev,0x00 , adv->handle, conn->handle, +adv_set_terminate (adv->dev,0x00 , adv->handle, conn->handle,0x00 );le_ext_adv_free (adv); }
Signature · 1 line
2.31.1
Luiz Augusto von Dentz
maintainerRFC 2/3 btdev: Fix order of BT_HCI_EVT_LE_ADV_SET_TERM
From: Luiz Augusto von Dentz <[email protected]>
BT_HCI_EVT_LE_ADV_SET_TERM shall come after BT_HCI_EVT_LE_ENHANCED_CONN_COMPLETE otherwise the host doesn't know the connection handle.
--- emulator/btdev.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)
emulator/btdev.c +8 -6
@@ -5129,22 +5129,17 @@ static void le_ext_conn_complete(struct btdev *btdev, struct le_ext_adv *ext_adv, uint8_t status) { +struct btdev_conn *conn =NULL ;struct bt_hci_evt_le_enhanced_conn_complete ev;struct bt_hci_le_ext_create_conn *lecc = (void *)cmd->data;memset (&ev,0 ,sizeof (ev));if (!status) { -struct btdev_conn *conn; - conn =conn_add_acl (btdev, cmd->peer_addr, cmd->peer_addr_type);if (!conn)return ; -/* Disable EXT ADV */ -queue_foreach (btdev->le_ext_adv, ext_adv_term, conn); -queue_foreach (conn->link->dev->le_ext_adv, ext_adv_term, conn); - ev.status = status; ev.peer_addr_type = btdev->le_scan_own_addr_type;if (ev.peer_addr_type ==0x01 )
@@ -5166,6 +5161,9 @@ static void le_ext_conn_complete(struct btdev *btdev,le_meta_event (conn->link->dev,BT_HCI_EVT_LE_ENHANCED_CONN_COMPLETE , &ev,sizeof (ev)); + +/* Disable EXT ADV */ +queue_foreach (conn->link->dev->le_ext_adv, ext_adv_term, conn); } ev.status = status;
@@ -5177,6 +5175,10 @@ static void le_ext_conn_complete(struct btdev *btdev,le_meta_event (btdev,BT_HCI_EVT_LE_ENHANCED_CONN_COMPLETE , &ev,sizeof (ev)); + +/* Disable EXT ADV */ +if (conn) +queue_foreach (btdev->le_ext_adv, ext_adv_term, conn); } static int cmd_ext_create_conn_complete(struct btdev *dev, const void *data,
Signature · 1 line
2.31.1
Luiz Augusto von Dentz
maintainerRFC 3/3 btdev: Fix removing advertising set if it was terminated
In reply to Luiz Augusto von DentzFrom: Luiz Augusto von Dentz <[email protected]>
Consider the advertising set disabled but don't remove it as the host may still reuse it.
--- emulator/btdev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
emulator/btdev.c +1 -1
@@ -5120,7 +5120,7 @@ static void ext_adv_term(void *data, void *user_data)if (conn && adv->type &0x01 ) {adv_set_terminate (adv->dev,0x00 , adv->handle, conn->handle,0x00 ); -le_ext_adv_free (adv); +ext_adv_disable (adv,NULL ); } }
Signature · 1 line
2.31.1
Luiz Augusto von Dentz
maintainerHi,
Quoted 23 lines · Luiz Augusto von Dentz
From: Luiz Augusto von Dentz <[email protected]>
The device where the event should be sent is the same that had created not the connection one.
--- emulator/btdev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)emulator/btdev.c +1
-2@@ -5118,7 +5118,7 @@ static void ext_adv_term(void *data, void *user_data)/* if connectable bit is set the send adv terminate */ if (conn && adv->type &0x01 ) { -adv_set_terminate (conn->dev,0x00 , adv->handle, conn->handle, +adv_set_terminate (adv->dev,0x00 , adv->handle, conn->handle,0x00 );le_ext_adv_free (adv); } --
Quoted 2 lines
2.31.1
Pushed.
Signature · 1 line
Luiz Augusto von Dentz