Re: [PATCH BlueZ 3/4] emulator/btdev: Send page timeout after 2 secs delay

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Jonas,

On Mon, Jan 29, 2024 at 6:49 AM Jonas Dreßler <verdre@xxxxxxx> wrote:
>
> Real bluetooth adapters wouldn't send the page timeout immediately
> when trying to page a device, instead it would take a few seconds.
>
> Try to behave more realistically in the emulator and send the page
> timeout after two seconds.
> ---
>  emulator/btdev.c | 30 +++++++++++++++++++++++++++++-
>  1 file changed, 29 insertions(+), 1 deletion(-)
>
> diff --git a/emulator/btdev.c b/emulator/btdev.c
> index da94f29d1..a40117400 100644
> --- a/emulator/btdev.c
> +++ b/emulator/btdev.c
> @@ -1281,6 +1281,27 @@ static void conn_complete(struct btdev *btdev,
>         send_event(btdev, BT_HCI_EVT_CONN_COMPLETE, &cc, sizeof(cc));
>  }
>
> +struct page_timeout_data {
> +       struct btdev *btdev;
> +       uint8_t bdaddr[6];
> +       unsigned int timeout_id;
> +};
> +
> +static bool page_timeout(void *user_data)
> +{
> +       struct page_timeout_data *pt_data = user_data;
> +       struct btdev *btdev = pt_data->btdev;
> +       const uint8_t *bdaddr = pt_data->bdaddr;
> +
> +       timeout_remove(pt_data->timeout_id);
> +       pt_data->timeout_id = 0;
> +
> +       conn_complete(btdev, bdaddr, BT_HCI_ERR_PAGE_TIMEOUT);
> +
> +       free(pt_data);
> +       return false;
> +}
> +
>  static int cmd_create_conn_complete(struct btdev *dev, const void *data,
>                                                 uint8_t len)
>  {
> @@ -1298,7 +1319,14 @@ static int cmd_create_conn_complete(struct btdev *dev, const void *data,
>
>                 send_event(remote, BT_HCI_EVT_CONN_REQUEST, &cr, sizeof(cr));
>         } else {
> -               conn_complete(dev, cmd->bdaddr, BT_HCI_ERR_PAGE_TIMEOUT);
> +               struct page_timeout_data *pt_data = new0(struct page_timeout_data, 1);
> +               pt_data->btdev = dev;
> +               memcpy(pt_data->bdaddr, cmd->bdaddr, 6);
> +
> +               /* Send page timeout after 2 seconds to emulate real paging */
> +               pt_data->timeout_id = timeout_add(2000,
> +                                                 page_timeout,
> +                                                 pt_data, NULL);
>         }
>
>         return 0;
> --
> 2.43.0

We currently don't set a specific page timeout which means we are
using the default value which is 5.12 sec, so I'd replace 2000 with
5120, we might have to do something similar to LE Audio scanning
though since during this period the remote instance could enable
connections which should trigger the connection request event as well.


-- 
Luiz Augusto von Dentz





[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux