Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reopening device fails #103

Open
martinhansdk opened this issue Mar 25, 2022 · 6 comments
Open

Reopening device fails #103

martinhansdk opened this issue Mar 25, 2022 · 6 comments

Comments

@martinhansdk
Copy link

martinhansdk commented Mar 25, 2022

I find that I frequently get a timeout when trying to open a BleDevice that I have recently closed. This happens when I'm running a script, interrupt it and then start it again.

I am using a nrf52840 dongle that I've programmed with the connectivity firmware that ships with blatann version 0.3.6. I am on Ubuntu 21.10.

I have boiled the situation down to the following minimal script which simply opens and closes the device in a loop:

#!/usr/bin/env python3
"""Try opening and closing a bunch of times"""

import argparse
from pathlib import Path

from blatann import BleDevice
from blatann.utils import setup_logger


def main():
    "Run as a script."

    parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawTextHelpFormatter)
    parser.add_argument('-d', '--dongle', required=True, help='BLE dongle serial port')

    args = parser.parse_args()

    setup_logger(level="DEBUG")

    while True:
        print("---------------------")
        assert Path(args.dongle).exists()
        dongle = BleDevice(args.dongle, log_driver_comms=True)
        dongle.open(clear_bonding_data=True)
        dongle.close()


if __name__ == "__main__":
    main()

Here is the output that I get from running the script:

./debug_timeout.py --dongle=/dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01
---------------------
[2022-03-25 13:25:56,898] [MainThread] [blatann.device.clear_bonding_data:207] [INFO]: Clearing out all bonding information
[2022-03-25 13:25:56,899] [MainThread] [blatann.nrf.nrf_driver.wrapper:64] [DEBUG]: [/dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01] open()
[2022-03-25 13:25:57,303] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [2]: Successfully opened /dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01. Baud rate: 1000000. Flow control: none. Parity: none.
[2022-03-25 13:25:57,304] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]: State change: STATE_START -> STATE_RESET
[2022-03-25 13:25:57,304] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        1 ->  [N/A] type:          RESERVED_5 reliable: no seq#:0 ack#:0 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:57,304] [Dummy-3] [blatann.nrf.nrf_driver._status_handler:654] [INFO]: STATUS [6]: Target Reset performed
[2022-03-25 13:25:57,604] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]: State change: STATE_RESET -> STATE_UNINITIALIZED
[2022-03-25 13:25:57,604] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        2 ->  [01 7e ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:2 data_integrity:0 err_code:0x0 [SYNC]
[2022-03-25 13:25:57,605] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     1/ 0 <-  [02 7d ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:2 data_integrity:0 err_code:0x0 [SYNC_RESP]
[2022-03-25 13:25:57,605] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]: State change: STATE_UNINITIALIZED -> STATE_INITIALIZED
[2022-03-25 13:25:57,605] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        3 ->  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:25:57,705] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        4 ->  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:25:57,805] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        5 ->  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:25:57,906] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        6 ->  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:25:58,003] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     2/ 0 <-  [01 7e ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:2 data_integrity:0 err_code:0x0 [SYNC]
[2022-03-25 13:25:58,003] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        7 ->  [02 7d ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:2 data_integrity:0 err_code:0x0 [SYNC_RESP]
[2022-03-25 13:25:58,006] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        8 ->  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:25:58,007] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     3/ 0 <-  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:25:58,007] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        9 ->  [04 7b 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG_RESP [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:25:58,107] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       10 ->  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:25:58,107] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     4/ 0 <-  [04 7b 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG_RESP [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:25:58,108] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]: State change: STATE_INITIALIZED -> STATE_ACTIVE
[2022-03-25 13:25:58,108] [Dummy-3] [blatann.nrf.nrf_driver._status_handler:654] [INFO]: STATUS [7]: Connection active
[2022-03-25 13:25:58,109] [MainThread] [blatann.nrf.nrf_driver.wrapper:64] [DEBUG]: [/dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01] ble_conn_configure(<blatann.nrf.nrf_types.config.BleConnConfig object at 0x7f2731a22460>,)
[2022-03-25 13:25:58,109] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       11 ->  [00 69 20 00 00 00 01 01 04 06 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:0 ack#:0 payload_length:b data_integrity:1 header_checksum:82 err_code:0x0
[2022-03-25 13:25:58,110] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     5/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:1 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:58,110] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     6/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:0 ack#:1 payload_length:6 data_integrity:1 header_checksum:ca err_code:0x0
[2022-03-25 13:25:58,110] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       12 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:1 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:58,111] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       13 ->  [00 69 23 00 00 00 01 01 17 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:1 ack#:1 payload_length:a data_integrity:1 header_checksum:89 err_code:0x0
[2022-03-25 13:25:58,111] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     7/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:2 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:58,112] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     8/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:1 ack#:2 payload_length:6 data_integrity:1 header_checksum:c1 err_code:0x0
[2022-03-25 13:25:58,112] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       14 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:2 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:58,112] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       15 ->  [00 69 21 00 00 00 01 01 10 ] type:     VENDOR_SPECIFIC reliable:yes seq#:2 ack#:2 payload_length:9 data_integrity:1 header_checksum:90 err_code:0x0
[2022-03-25 13:25:58,113] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     9/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:3 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:58,113] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    10/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:2 ack#:3 payload_length:6 data_integrity:1 header_checksum:b8 err_code:0x0
[2022-03-25 13:25:58,113] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       16 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:3 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:58,113] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       17 ->  [00 69 22 00 00 00 01 01 10 ] type:     VENDOR_SPECIFIC reliable:yes seq#:3 ack#:3 payload_length:9 data_integrity:1 header_checksum:87 err_code:0x0
[2022-03-25 13:25:58,113] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    11/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:4 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:58,114] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    12/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:3 ack#:4 payload_length:6 data_integrity:1 header_checksum:af err_code:0x0
[2022-03-25 13:25:58,114] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       18 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:4 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:58,115] [MainThread] [blatann.nrf.nrf_driver.wrapper:64] [DEBUG]: [/dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01] ble_enable(<blatann.nrf.nrf_types.config.BleEnableConfig object at 0x7f2731a22400>,)
[2022-03-25 13:25:58,115] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       19 ->  [00 69 01 00 00 00 01 0a ] type:     VENDOR_SPECIFIC reliable:yes seq#:4 ack#:4 payload_length:8 data_integrity:1 header_checksum:8e err_code:0x0
[2022-03-25 13:25:58,115] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    13/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:5 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:58,116] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    14/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:4 ack#:5 payload_length:6 data_integrity:1 header_checksum:a6 err_code:0x0
[2022-03-25 13:25:58,116] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       20 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:5 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:58,116] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       21 ->  [00 69 40 00 00 00 01 01 03 03 ] type:     VENDOR_SPECIFIC reliable:yes seq#:5 ack#:5 payload_length:a data_integrity:1 header_checksum:65 err_code:0x0
[2022-03-25 13:25:58,117] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    15/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:6 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:58,117] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    16/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:5 ack#:6 payload_length:6 data_integrity:1 header_checksum:9d err_code:0x0
[2022-03-25 13:25:58,117] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       22 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:6 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:58,118] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       23 ->  [00 69 41 00 00 00 01 00 01 00 00 1f 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:6 ack#:6 payload_length:e data_integrity:1 header_checksum:1c err_code:0x0
[2022-03-25 13:25:58,118] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    17/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:7 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:58,119] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    18/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:6 ack#:7 payload_length:6 data_integrity:1 header_checksum:94 err_code:0x0
[2022-03-25 13:25:58,119] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       24 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:7 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:58,119] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       25 ->  [00 69 a0 00 00 00 01 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:7 ack#:7 payload_length:8 data_integrity:1 header_checksum:73 err_code:0x0
[2022-03-25 13:25:58,120] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    19/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:0 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:58,120] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    20/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:7 ack#:0 payload_length:6 data_integrity:1 header_checksum:cb err_code:0x0
[2022-03-25 13:25:58,120] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       26 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:0 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:58,120] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       27 ->  [00 69 a1 00 00 00 01 80 05 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:0 ack#:0 payload_length:b data_integrity:1 header_checksum:82 err_code:0x0
[2022-03-25 13:25:58,121] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    21/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:1 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:58,121] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    22/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:0 ack#:1 payload_length:6 data_integrity:1 header_checksum:ca err_code:0x0
[2022-03-25 13:25:58,121] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       28 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:1 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:58,121] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       29 ->  [00 60 ] type:     VENDOR_SPECIFIC reliable:yes seq#:1 ack#:1 payload_length:2 data_integrity:1 header_checksum:9 err_code:0x0
[2022-03-25 13:25:58,121] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    23/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:2 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:58,122] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    24/ 0 <-  [01 60 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:1 ack#:2 payload_length:6 data_integrity:1 header_checksum:c1 err_code:0x0
[2022-03-25 13:25:58,122] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       30 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:2 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:58,123] [MainThread] [blatann.nrf.nrf_driver.wrapper:64] [DEBUG]: [/dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01] ble_gap_device_name_set(b'nRF5x',)
[2022-03-25 13:25:58,123] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       31 ->  [00 7c 01 00 05 00 01 58 5f 2c a0 fe ] type:     VENDOR_SPECIFIC reliable:yes seq#:2 ack#:2 payload_length:c data_integrity:1 header_checksum:60 err_code:0x0
[2022-03-25 13:25:58,123] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    25/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:3 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:58,123] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    26/ 0 <-  [01 7c 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:2 ack#:3 payload_length:6 data_integrity:1 header_checksum:b8 err_code:0x0
[2022-03-25 13:25:58,123] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       32 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:3 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:58,124] [MainThread] [blatann.nrf.nrf_driver.wrapper:64] [DEBUG]: [/dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01] ble_gap_appearance_set(<Appearance.unknown: 0>,)
[2022-03-25 13:25:58,124] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       33 ->  [00 78 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:3 ack#:3 payload_length:4 data_integrity:1 header_checksum:d7 err_code:0x0
[2022-03-25 13:25:58,124] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    27/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:4 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:58,125] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    28/ 0 <-  [01 78 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:3 ack#:4 payload_length:6 data_integrity:1 header_checksum:af err_code:0x0
[2022-03-25 13:25:58,125] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       34 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:4 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:58,125] [MainThread] [blatann.nrf.nrf_driver.wrapper:64] [DEBUG]: [/dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01] close()
[2022-03-25 13:25:58,125] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       35 ->  [05 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:4 ack#:4 payload_length:2 data_integrity:1 header_checksum:ee err_code:0x0
[2022-03-25 13:25:58,126] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    29/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:5 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:25:58,126] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]: State change: STATE_ACTIVE -> STATE_CLOSED
[2022-03-25 13:25:58,127] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]: serial port read on port /dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01 aborted.
[2022-03-25 13:25:58,128] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [0]: serial io_context executed 65 handlers.
[2022-03-25 13:25:58,128] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [2]: serial port /dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01 closed.
---------------------
[2022-03-25 13:25:58,214] [MainThread] [blatann.device.clear_bonding_data:207] [INFO]: Clearing out all bonding information
[2022-03-25 13:25:58,215] [MainThread] [blatann.nrf.nrf_driver.wrapper:64] [DEBUG]: [/dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01] open()
[2022-03-25 13:25:58,416] [MainThread] [blatann.nrf.nrf_driver._status_handler:654] [INFO]: STATUS [5]: Error setting up serial port /dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01. open: No such file or directory
[2022-03-25 13:25:58,416] [Dummy-7] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]: State change: STATE_START -> STATE_FAILED
Traceback (most recent call last):
  File "/home/martin/work/marco_recorder/tools/debug_timeout.py", line 29, in <module>
    main()
  File "/home/martin/work/marco_recorder/tools/debug_timeout.py", line 24, in main
    dongle.open(clear_bonding_data=True)
  File "/home/martin/.local/lib/python3.9/site-packages/blatann/device.py", line 185, in open
    self.ble_driver.open()
  File "/home/martin/.local/lib/python3.9/site-packages/blatann/nrf/nrf_driver.py", line 80, in wrapper
    raise NordicSemiException('Failed to {}. {}'.format(wrapped.__name__, err_string), err_code)
pc_ble_driver_py.exceptions.NordicSemiException: Failed to open. Error code: NrfError.rpc_h5_transport_state

As you can see, it complains about a non-existing file when trying to open the device the second time. My script checks that the serial port device exists before opening, so I don't know what could cause this.

@martinhansdk
Copy link
Author

I can add, that adding a 10 second sleep after each call to close() does help somewhat. Now it succeeds at opening the device a few times before failing with a different error, this time a timeout:

---------------------
[2022-03-25 13:39:00,067] [MainThread] [blatann.device.clear_bonding_data:207] [INFO]: Clearing out all bonding information
[2022-03-25 13:39:00,067] [MainThread] [blatann.nrf.nrf_driver.wrapper:64] [DEBUG]: [/dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01] open()
[2022-03-25 13:39:00,471] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [2]: Successfully opened /dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01. Baud rate: 1000000. Flow control: none. Parity: none.
[2022-03-25 13:39:00,471] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     1/ 0 <-  [01 7e ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:2 data_integrity:0 err_code:0x0 [SYNC]
[2022-03-25 13:39:00,471] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]: State change: STATE_START -> STATE_RESET
[2022-03-25 13:39:00,472] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        1 ->  [N/A] type:          RESERVED_5 reliable: no seq#:0 ack#:0 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:00,472] [Dummy-4] [blatann.nrf.nrf_driver._status_handler:654] [INFO]: STATUS [6]: Target Reset performed
[2022-03-25 13:39:00,772] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]: State change: STATE_RESET -> STATE_UNINITIALIZED
[2022-03-25 13:39:00,772] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        2 ->  [01 7e ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:2 data_integrity:0 err_code:0x0 [SYNC]
[2022-03-25 13:39:00,773] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     2/ 0 <-  [02 7d ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:2 data_integrity:0 err_code:0x0 [SYNC_RESP]
[2022-03-25 13:39:00,773] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]: State change: STATE_UNINITIALIZED -> STATE_INITIALIZED
[2022-03-25 13:39:00,773] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        3 ->  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:00,874] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        4 ->  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:00,974] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        5 ->  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:01,074] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        6 ->  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:01,172] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     3/ 0 <-  [01 7e ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:2 data_integrity:0 err_code:0x0 [SYNC]
[2022-03-25 13:39:01,172] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        7 ->  [02 7d ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:2 data_integrity:0 err_code:0x0 [SYNC_RESP]
[2022-03-25 13:39:01,175] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        8 ->  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:01,175] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     4/ 0 <-  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:01,176] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        9 ->  [04 7b 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG_RESP [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:01,275] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       10 ->  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:01,276] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     5/ 0 <-  [04 7b 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG_RESP [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:01,276] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]: State change: STATE_INITIALIZED -> STATE_ACTIVE
[2022-03-25 13:39:01,277] [Dummy-4] [blatann.nrf.nrf_driver._status_handler:654] [INFO]: STATUS [7]: Connection active
[2022-03-25 13:39:01,278] [MainThread] [blatann.nrf.nrf_driver.wrapper:64] [DEBUG]: [/dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01] ble_conn_configure(<blatann.nrf.nrf_types.config.BleConnConfig object at 0x7ff139ad3580>,)
[2022-03-25 13:39:01,278] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       11 ->  [00 69 20 00 00 00 01 01 04 06 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:0 ack#:0 payload_length:b data_integrity:1 header_checksum:82 err_code:0x0
[2022-03-25 13:39:01,279] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     6/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:1 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:01,279] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     7/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:0 ack#:1 payload_length:6 data_integrity:1 header_checksum:ca err_code:0x0
[2022-03-25 13:39:01,279] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       12 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:1 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:01,280] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       13 ->  [00 69 23 00 00 00 01 01 17 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:1 ack#:1 payload_length:a data_integrity:1 header_checksum:89 err_code:0x0
[2022-03-25 13:39:01,280] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     8/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:2 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:01,280] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     9/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:1 ack#:2 payload_length:6 data_integrity:1 header_checksum:c1 err_code:0x0
[2022-03-25 13:39:01,281] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       14 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:2 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:01,281] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       15 ->  [00 69 21 00 00 00 01 01 10 ] type:     VENDOR_SPECIFIC reliable:yes seq#:2 ack#:2 payload_length:9 data_integrity:1 header_checksum:90 err_code:0x0
[2022-03-25 13:39:01,281] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    10/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:3 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:01,281] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    11/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:2 ack#:3 payload_length:6 data_integrity:1 header_checksum:b8 err_code:0x0
[2022-03-25 13:39:01,281] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       16 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:3 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:01,281] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       17 ->  [00 69 22 00 00 00 01 01 10 ] type:     VENDOR_SPECIFIC reliable:yes seq#:3 ack#:3 payload_length:9 data_integrity:1 header_checksum:87 err_code:0x0
[2022-03-25 13:39:01,282] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    12/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:4 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:01,282] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    13/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:3 ack#:4 payload_length:6 data_integrity:1 header_checksum:af err_code:0x0
[2022-03-25 13:39:01,282] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       18 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:4 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:01,282] [MainThread] [blatann.nrf.nrf_driver.wrapper:64] [DEBUG]: [/dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01] ble_enable(<blatann.nrf.nrf_types.config.BleEnableConfig object at 0x7ff139ad3520>,)
[2022-03-25 13:39:01,283] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       19 ->  [00 69 01 00 00 00 01 0a ] type:     VENDOR_SPECIFIC reliable:yes seq#:4 ack#:4 payload_length:8 data_integrity:1 header_checksum:8e err_code:0x0
[2022-03-25 13:39:01,283] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    14/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:5 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:01,283] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    15/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:4 ack#:5 payload_length:6 data_integrity:1 header_checksum:a6 err_code:0x0
[2022-03-25 13:39:01,283] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       20 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:5 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:01,284] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       21 ->  [00 69 40 00 00 00 01 01 03 03 ] type:     VENDOR_SPECIFIC reliable:yes seq#:5 ack#:5 payload_length:a data_integrity:1 header_checksum:65 err_code:0x0
[2022-03-25 13:39:01,284] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    16/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:6 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:01,284] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    17/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:5 ack#:6 payload_length:6 data_integrity:1 header_checksum:9d err_code:0x0
[2022-03-25 13:39:01,285] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       22 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:6 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:01,285] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       23 ->  [00 69 41 00 00 00 01 00 01 00 00 1f 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:6 ack#:6 payload_length:e data_integrity:1 header_checksum:1c err_code:0x0
[2022-03-25 13:39:01,285] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    18/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:7 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:01,286] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    19/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:6 ack#:7 payload_length:6 data_integrity:1 header_checksum:94 err_code:0x0
[2022-03-25 13:39:01,286] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       24 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:7 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:01,286] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       25 ->  [00 69 a0 00 00 00 01 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:7 ack#:7 payload_length:8 data_integrity:1 header_checksum:73 err_code:0x0
[2022-03-25 13:39:01,287] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    20/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:0 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:01,287] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    21/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:7 ack#:0 payload_length:6 data_integrity:1 header_checksum:cb err_code:0x0
[2022-03-25 13:39:01,287] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       26 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:0 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:01,287] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       27 ->  [00 69 a1 00 00 00 01 80 05 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:0 ack#:0 payload_length:b data_integrity:1 header_checksum:82 err_code:0x0
[2022-03-25 13:39:01,288] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    22/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:1 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:01,288] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    23/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:0 ack#:1 payload_length:6 data_integrity:1 header_checksum:ca err_code:0x0
[2022-03-25 13:39:01,288] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       28 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:1 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:01,288] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       29 ->  [00 60 ] type:     VENDOR_SPECIFIC reliable:yes seq#:1 ack#:1 payload_length:2 data_integrity:1 header_checksum:9 err_code:0x0
[2022-03-25 13:39:01,289] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    24/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:2 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:01,289] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    25/ 0 <-  [01 60 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:1 ack#:2 payload_length:6 data_integrity:1 header_checksum:c1 err_code:0x0
[2022-03-25 13:39:01,289] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       30 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:2 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:01,289] [MainThread] [blatann.nrf.nrf_driver.wrapper:64] [DEBUG]: [/dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01] ble_gap_device_name_set(b'nRF5x',)
[2022-03-25 13:39:01,290] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       31 ->  [00 7c 01 00 05 00 01 78 67 e9 a2 fd ] type:     VENDOR_SPECIFIC reliable:yes seq#:2 ack#:2 payload_length:c data_integrity:1 header_checksum:60 err_code:0x0
[2022-03-25 13:39:01,290] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    26/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:3 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:01,291] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    27/ 0 <-  [01 7c 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:2 ack#:3 payload_length:6 data_integrity:1 header_checksum:b8 err_code:0x0
[2022-03-25 13:39:01,291] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       32 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:3 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:01,291] [MainThread] [blatann.nrf.nrf_driver.wrapper:64] [DEBUG]: [/dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01] ble_gap_appearance_set(<Appearance.unknown: 0>,)
[2022-03-25 13:39:01,291] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       33 ->  [00 78 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:3 ack#:3 payload_length:4 data_integrity:1 header_checksum:d7 err_code:0x0
[2022-03-25 13:39:01,291] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    28/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:4 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:01,292] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    29/ 0 <-  [01 78 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:3 ack#:4 payload_length:6 data_integrity:1 header_checksum:af err_code:0x0
[2022-03-25 13:39:01,292] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       34 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:4 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:01,292] [MainThread] [blatann.nrf.nrf_driver.wrapper:64] [DEBUG]: [/dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01] close()
[2022-03-25 13:39:01,292] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       35 ->  [05 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:4 ack#:4 payload_length:2 data_integrity:1 header_checksum:ee err_code:0x0
[2022-03-25 13:39:01,292] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    30/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:5 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:01,293] [Dummy-4] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]: State change: STATE_ACTIVE -> STATE_CLOSED
[2022-03-25 13:39:01,293] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]: serial port read on port /dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01 aborted.
[2022-03-25 13:39:01,294] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [0]: serial io_context executed 66 handlers.
[2022-03-25 13:39:01,294] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [2]: serial port /dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01 closed.
---------------------
[2022-03-25 13:39:11,387] [MainThread] [blatann.device.clear_bonding_data:207] [INFO]: Clearing out all bonding information
[2022-03-25 13:39:11,388] [MainThread] [blatann.nrf.nrf_driver.wrapper:64] [DEBUG]: [/dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01] open()
[2022-03-25 13:39:11,792] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [2]: Successfully opened /dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01. Baud rate: 1000000. Flow control: none. Parity: none.
[2022-03-25 13:39:11,792] [Dummy-7] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]: State change: STATE_START -> STATE_RESET
[2022-03-25 13:39:11,793] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     1/ 0 <-  [01 7e ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:2 data_integrity:0 err_code:0x0 [SYNC]
[2022-03-25 13:39:11,793] [Dummy-7] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        1 ->  [N/A] type:          RESERVED_5 reliable: no seq#:0 ack#:0 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:11,793] [Dummy-7] [blatann.nrf.nrf_driver._status_handler:654] [INFO]: STATUS [6]: Target Reset performed
[2022-03-25 13:39:12,094] [Dummy-7] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]: State change: STATE_RESET -> STATE_UNINITIALIZED
[2022-03-25 13:39:12,094] [Dummy-7] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        2 ->  [01 7e ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:2 data_integrity:0 err_code:0x0 [SYNC]
[2022-03-25 13:39:12,095] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     2/ 0 <-  [02 7d ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:2 data_integrity:0 err_code:0x0 [SYNC_RESP]
[2022-03-25 13:39:12,095] [Dummy-7] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]: State change: STATE_UNINITIALIZED -> STATE_INITIALIZED
[2022-03-25 13:39:12,095] [Dummy-7] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        3 ->  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:12,196] [Dummy-7] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        4 ->  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:12,296] [Dummy-7] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        5 ->  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:12,397] [Dummy-7] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        6 ->  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:12,492] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     3/ 0 <-  [01 7e ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:2 data_integrity:0 err_code:0x0 [SYNC]
[2022-03-25 13:39:12,492] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        7 ->  [02 7d ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:2 data_integrity:0 err_code:0x0 [SYNC_RESP]
[2022-03-25 13:39:12,497] [Dummy-7] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        8 ->  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:12,498] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     4/ 0 <-  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:12,498] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        9 ->  [04 7b 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG_RESP [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:12,598] [Dummy-7] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       10 ->  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:12,599] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     5/ 0 <-  [04 7b 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG_RESP [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:12,599] [Dummy-7] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]: State change: STATE_INITIALIZED -> STATE_ACTIVE
[2022-03-25 13:39:12,599] [Dummy-7] [blatann.nrf.nrf_driver._status_handler:654] [INFO]: STATUS [7]: Connection active
[2022-03-25 13:39:12,600] [MainThread] [blatann.nrf.nrf_driver.wrapper:64] [DEBUG]: [/dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01] ble_conn_configure(<blatann.nrf.nrf_types.config.BleConnConfig object at 0x7ff139aeae80>,)
[2022-03-25 13:39:12,600] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       11 ->  [00 69 20 00 00 00 01 01 04 06 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:0 ack#:0 payload_length:b data_integrity:1 header_checksum:82 err_code:0x0
[2022-03-25 13:39:12,601] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     6/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:1 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:12,601] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     7/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:0 ack#:1 payload_length:6 data_integrity:1 header_checksum:ca err_code:0x0
[2022-03-25 13:39:12,601] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       12 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:1 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:12,602] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       13 ->  [00 69 23 00 00 00 01 01 17 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:1 ack#:1 payload_length:a data_integrity:1 header_checksum:89 err_code:0x0
[2022-03-25 13:39:12,602] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     8/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:2 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:12,603] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     9/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:1 ack#:2 payload_length:6 data_integrity:1 header_checksum:c1 err_code:0x0
[2022-03-25 13:39:12,603] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       14 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:2 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:12,603] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       15 ->  [00 69 21 00 00 00 01 01 10 ] type:     VENDOR_SPECIFIC reliable:yes seq#:2 ack#:2 payload_length:9 data_integrity:1 header_checksum:90 err_code:0x0
[2022-03-25 13:39:12,604] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    10/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:3 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:12,604] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    11/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:2 ack#:3 payload_length:6 data_integrity:1 header_checksum:b8 err_code:0x0
[2022-03-25 13:39:12,604] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       16 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:3 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:12,605] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       17 ->  [00 69 22 00 00 00 01 01 10 ] type:     VENDOR_SPECIFIC reliable:yes seq#:3 ack#:3 payload_length:9 data_integrity:1 header_checksum:87 err_code:0x0
[2022-03-25 13:39:12,605] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    12/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:4 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:12,606] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    13/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:3 ack#:4 payload_length:6 data_integrity:1 header_checksum:af err_code:0x0
[2022-03-25 13:39:12,606] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       18 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:4 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:12,606] [MainThread] [blatann.nrf.nrf_driver.wrapper:64] [DEBUG]: [/dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01] ble_enable(<blatann.nrf.nrf_types.config.BleEnableConfig object at 0x7ff139aeae50>,)
[2022-03-25 13:39:12,607] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       19 ->  [00 69 01 00 00 00 01 0a ] type:     VENDOR_SPECIFIC reliable:yes seq#:4 ack#:4 payload_length:8 data_integrity:1 header_checksum:8e err_code:0x0
[2022-03-25 13:39:12,607] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    14/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:5 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:12,607] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    15/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:4 ack#:5 payload_length:6 data_integrity:1 header_checksum:a6 err_code:0x0
[2022-03-25 13:39:12,608] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       20 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:5 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:12,608] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       21 ->  [00 69 40 00 00 00 01 01 03 03 ] type:     VENDOR_SPECIFIC reliable:yes seq#:5 ack#:5 payload_length:a data_integrity:1 header_checksum:65 err_code:0x0
[2022-03-25 13:39:12,608] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    16/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:6 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:12,609] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    17/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:5 ack#:6 payload_length:6 data_integrity:1 header_checksum:9d err_code:0x0
[2022-03-25 13:39:12,609] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       22 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:6 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:12,609] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       23 ->  [00 69 41 00 00 00 01 00 01 00 00 1f 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:6 ack#:6 payload_length:e data_integrity:1 header_checksum:1c err_code:0x0
[2022-03-25 13:39:12,609] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    18/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:7 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:12,610] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    19/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:6 ack#:7 payload_length:6 data_integrity:1 header_checksum:94 err_code:0x0
[2022-03-25 13:39:12,610] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       24 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:7 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:12,610] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       25 ->  [00 69 a0 00 00 00 01 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:7 ack#:7 payload_length:8 data_integrity:1 header_checksum:73 err_code:0x0
[2022-03-25 13:39:12,611] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    20/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:0 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:12,611] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    21/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:7 ack#:0 payload_length:6 data_integrity:1 header_checksum:cb err_code:0x0
[2022-03-25 13:39:12,611] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       26 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:0 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:12,612] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       27 ->  [00 69 a1 00 00 00 01 80 05 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:0 ack#:0 payload_length:b data_integrity:1 header_checksum:82 err_code:0x0
[2022-03-25 13:39:12,612] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    22/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:1 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:12,613] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    23/ 0 <-  [01 69 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:0 ack#:1 payload_length:6 data_integrity:1 header_checksum:ca err_code:0x0
[2022-03-25 13:39:12,613] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       28 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:1 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:12,613] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       29 ->  [00 60 ] type:     VENDOR_SPECIFIC reliable:yes seq#:1 ack#:1 payload_length:2 data_integrity:1 header_checksum:9 err_code:0x0
[2022-03-25 13:39:12,613] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    24/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:2 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:12,614] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    25/ 0 <-  [01 60 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:1 ack#:2 payload_length:6 data_integrity:1 header_checksum:c1 err_code:0x0
[2022-03-25 13:39:12,614] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       30 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:2 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:12,614] [MainThread] [blatann.nrf.nrf_driver.wrapper:64] [DEBUG]: [/dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01] ble_gap_device_name_set(b'nRF5x',)
[2022-03-25 13:39:12,615] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       31 ->  [00 7c 01 00 05 00 01 78 67 e9 a2 fd ] type:     VENDOR_SPECIFIC reliable:yes seq#:2 ack#:2 payload_length:c data_integrity:1 header_checksum:60 err_code:0x0
[2022-03-25 13:39:12,615] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    26/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:3 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:12,615] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    27/ 0 <-  [01 7c 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:2 ack#:3 payload_length:6 data_integrity:1 header_checksum:b8 err_code:0x0
[2022-03-25 13:39:12,615] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       32 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:3 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:12,615] [MainThread] [blatann.nrf.nrf_driver.wrapper:64] [DEBUG]: [/dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01] ble_gap_appearance_set(<Appearance.unknown: 0>,)
[2022-03-25 13:39:12,616] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       33 ->  [00 78 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:3 ack#:3 payload_length:4 data_integrity:1 header_checksum:d7 err_code:0x0
[2022-03-25 13:39:12,616] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    28/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:4 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:12,616] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    29/ 0 <-  [01 78 00 00 00 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:3 ack#:4 payload_length:6 data_integrity:1 header_checksum:af err_code:0x0
[2022-03-25 13:39:12,616] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       34 ->  [N/A] type:                 ACK reliable: no seq#:0 ack#:4 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:12,616] [MainThread] [blatann.nrf.nrf_driver.wrapper:64] [DEBUG]: [/dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01] close()
[2022-03-25 13:39:12,616] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       35 ->  [05 00 ] type:     VENDOR_SPECIFIC reliable:yes seq#:4 ack#:4 payload_length:2 data_integrity:1 header_checksum:ee err_code:0x0
[2022-03-25 13:39:12,617] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:    30/ 0 <-  [N/A] type:                 ACK reliable: no seq#:0 ack#:5 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:12,617] [Dummy-7] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]: State change: STATE_ACTIVE -> STATE_CLOSED
[2022-03-25 13:39:12,617] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]: serial port read on port /dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01 aborted.
[2022-03-25 13:39:12,618] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [0]: serial io_context executed 66 handlers.
[2022-03-25 13:39:12,618] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [2]: serial port /dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01 closed.
---------------------
[2022-03-25 13:39:22,705] [MainThread] [blatann.device.clear_bonding_data:207] [INFO]: Clearing out all bonding information
[2022-03-25 13:39:22,706] [MainThread] [blatann.nrf.nrf_driver.wrapper:64] [DEBUG]: [/dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01] open()
[2022-03-25 13:39:23,110] [MainThread] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [2]: Successfully opened /dev/serial/by-id/usb-Nordic_Semiconductor_nRF52_Connectivity_D66630A5B594-if01. Baud rate: 1000000. Flow control: none. Parity: none.
[2022-03-25 13:39:23,110] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     1/ 0 <-  [01 7e ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:2 data_integrity:0 err_code:0x0 [SYNC]
[2022-03-25 13:39:23,110] [Dummy-10] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]: State change: STATE_START -> STATE_RESET
[2022-03-25 13:39:23,110] [Dummy-10] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        1 ->  [N/A] type:          RESERVED_5 reliable: no seq#:0 ack#:0 payload_length:0 data_integrity:0 err_code:0x0
[2022-03-25 13:39:23,111] [Dummy-10] [blatann.nrf.nrf_driver._status_handler:654] [INFO]: STATUS [6]: Target Reset performed
[2022-03-25 13:39:23,411] [Dummy-10] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]: State change: STATE_RESET -> STATE_UNINITIALIZED
[2022-03-25 13:39:23,411] [Dummy-10] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        2 ->  [01 7e ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:2 data_integrity:0 err_code:0x0 [SYNC]
[2022-03-25 13:39:23,412] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     2/ 0 <-  [02 7d ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:2 data_integrity:0 err_code:0x0 [SYNC_RESP]
[2022-03-25 13:39:23,412] [Dummy-10] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]: State change: STATE_UNINITIALIZED -> STATE_INITIALIZED
[2022-03-25 13:39:23,413] [Dummy-10] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        3 ->  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:23,513] [Dummy-10] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        4 ->  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:23,614] [Dummy-10] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        5 ->  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:23,715] [Dummy-10] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        6 ->  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:23,815] [Dummy-10] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        7 ->  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:23,816] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     3/ 0 <-  [01 7e ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:2 data_integrity:0 err_code:0x0 [SYNC]
[2022-03-25 13:39:23,816] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        8 ->  [02 7d ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:2 data_integrity:0 err_code:0x0 [SYNC_RESP]
[2022-03-25 13:39:23,916] [Dummy-10] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:        9 ->  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:23,917] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:     4/ 0 <-  [03 fc 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:23,917] [Dummy-3] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]:       10 ->  [04 7b 11 ] type: LINK_CONTROL_PACKET reliable: no seq#:0 ack#:0 payload_length:3 data_integrity:0 err_code:0x0 [CONFIG_RESP [ sliding-window-size:1 out-of-frame:0 data-integrity-check-type:1 version-number:0 ]]
[2022-03-25 13:39:24,017] [Dummy-10] [blatann.nrf.nrf_driver._status_handler:654] [INFO]: STATUS [0]: No response from device. Tried to send packet 6 times.
[2022-03-25 13:39:24,017] [Dummy-10] [blatann.nrf.nrf_driver._log_message_handler:658] [INFO]: LOG [1]: State change: STATE_INITIALIZED -> STATE_NO_RESPONSE
Traceback (most recent call last):
  File "/home/martin/work/marco_recorder/tools/debug_timeout.py", line 33, in <module>
    main()
  File "/home/martin/work/marco_recorder/tools/debug_timeout.py", line 26, in main
    dongle.open(clear_bonding_data=True)
  File "/home/martin/.local/lib/python3.9/site-packages/blatann/device.py", line 185, in open
    self.ble_driver.open()
  File "/home/martin/.local/lib/python3.9/site-packages/blatann/nrf/nrf_driver.py", line 80, in wrapper
    raise NordicSemiException('Failed to {}. {}'.format(wrapped.__name__, err_string), err_code)
pc_ble_driver_py.exceptions.NordicSemiException: Failed to open. Error code: NrfError.timeout

@ThomasGerstenberg
Copy link
Owner

Thank you for the detailed logs! This looks to be similar to #75. It's a known issue that there's some quirks around re-opening the device (especially the USB dongle) that I haven't investigated in detail. I haven't prioritized this issue as the typical/most common use-cases close the device when the program terminates, but I will keep it on my radar.

@regin-mBohm
Copy link

Any updates on this?
I have the same issue. around 6 seconds delay in between and its very flaky. would be nice with a workaround

@ThomasGerstenberg
Copy link
Owner

I haven't looked much into this. I think there's a solution polling pc-ble-driver-py's enum_serial_ports. I haven't been working in this domain recently so this has fallen to the wayside for a bit

@mdxs
Copy link
Contributor

mdxs commented Nov 8, 2023

The issue can be reduced by waiting for the serial port to be ready before opening the Blatann BLE Device. In the following code, modified from the original test script by @martinhansdk, this is done using pyserial 3.5 to find the serial port first, then checking that the serial device path exists:

#!/usr/bin/env python3
"""Try opening and closing a bunch of times"""

import argparse
from pathlib import Path
import serial.tools.list_ports as slp
import time

from blatann import BleDevice
from blatann.utils import setup_logger


logger = setup_logger(level="DEBUG")


def wait_for_serial_port(serial_port, retries=10, delay=0.5):
    logger.info("Wait for serial port {} to be ready...".format(serial_port))
    for retry in range(retries):
        logger.info("run/retry = {}".format(retry))
        for port in slp.comports():
            if port.device == serial_port:
                logger.info("Found with usb_info={}".format(port.usb_info()))
                # HACK: add just a little more time...
                # as sometimes it is found while path device is not yet ready
                time.sleep(delay)
                if Path(serial_port).exists():
                    return True
                logger.info("... but path didn't exist (yet)")
        time.sleep(delay)
    return False


def get_ble_device(serial_port, retries=10, delay=0.5):
    if not wait_for_serial_port(serial_port, retries=retries, delay=delay):
        return None
    ble_device = BleDevice(serial_port, log_driver_comms=True)
    return ble_device


def main():
    "Run as a script."

    parser = argparse.ArgumentParser(
        description=__doc__, formatter_class=argparse.RawTextHelpFormatter
    )
    parser.add_argument(
        "-p",
        "--port",
        required=True,
        help="Serial port for nRF52 with Connectivity firmware",
    )

    args = parser.parse_args()

    while True:
        logger.info("=" * 40)
        ble_device = get_ble_device(args.port)
        if ble_device:
            logger.info("Opening Blatann BLE Device...")
            ble_device.open(clear_bonding_data=True)
            logger.info("Closing Blatann BLE Device...")
            ble_device.close()
        else:
            logger.warning("Failed to obtain Blatann BLE Device in time")


if __name__ == "__main__":
    main()

In my testing on Linux I found that sometimes the serial port is listed/found while the operating system level serial device path isn't ready (yet). The code tries to detect that situation and does another retry/run to find the serial port (and path). It also adds a little more time before checking the path... which feels a bit like a hack, but this does provide much more reliable use of the nRF52840-Dongle (PCA10059).

This approach does introduce delays (as other fixed/static duration sleep workarounds also do), but it tries to be more reliable with as little delay as possible.

Next to testing with the nRF52840-Dongle (PCA10059), I've also tested the script with the nRF52-DK, a Dev Kit for the nRF52832 (PCA10040), and that also worked fine with the script.

@mdxs
Copy link
Contributor

mdxs commented Nov 8, 2023

On 2023-06-07 @ThomasGerstenberg commented:

I haven't looked much into this. I think there's a solution polling pc-ble-driver-py's enum_serial_ports. I haven't been working in this domain recently so this has fallen to the wayside for a bit

I looked into this a bit (after my work on the above PySerial based approach) to see if it could be used.

However, the nRF52840-Dongle (PCA10059) will not be enumerated by enum_serial_ports in pc-ble-driver-py as reported in NordicSemiconductor/pc-ble-driver-py#64 and confirmed with the following test script (a modification of the pc_ble_driver_py/examples/serial_port_enum.py example):

def init(conn_ic_id):
    global BLEDriver
    from pc_ble_driver_py import config

    config.__conn_ic_id__ = conn_ic_id
    # noinspection PyUnresolvedReferences
    from pc_ble_driver_py.ble_driver import BLEDriver

    from pc_ble_driver_py import __version__

    print("pc_ble_driver_py v{}".format(__version__))


def main():
    descs = BLEDriver.enum_serial_ports()
    print("enum_serial_ports: {} serial ports found".format(len(descs)))
    for i, d in enumerate(descs):
        print("\nSerial port #{}:".format(i))
        print("|")
        print('|-  Port: "{}"'.format(d.port))
        print('|-  Manufacturer: "{}"'.format(d.manufacturer))
        print('|-  Serial Number: "{}"'.format(d.serial_number))
        print('|-  PnP ID: "{}"'.format(d.pnp_id))
        print('|-  Location ID: "{}"'.format(d.location_id))
        print('|-  Vendor ID: "{}"'.format(d.vendor_id))
        print('|_  Product ID: "{}"'.format(d.product_id))


init("NRF52")
main()

Which on Linux showed the following (incorrect, see below) output:

pc_ble_driver_py v0.17.0
enum_serial_ports: 1 serial ports found

Serial port #0:
|
|-  Port: "/dev/ttyACM1"
|-  Manufacturer: "SEGGER"
|-  Serial Number: "000682919562"
|-  PnP ID: ""
|-  Location ID: "/sys/devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb2/2-1/2-1:1.0/tty/ttyACM1"
|-  Vendor ID: "1366"
|_  Product ID: "1015"

Note that in my case that output is incorrect, as I had the following two nRF52 Connectivity devices present:

  • nRF52840-Dongle (PCA10059) - not seen, though present as /dev/ttyACM0
  • nRF52-DK, a Dev Kit for the nRF52832 (PCA10040) - seen on /dev/ttyACM1

Both have proven to work with Blatann just fine (and thus are known-good nRF52 Connectivity devices).

There might be fixes proposed for the underlying pc-ble-driver that might fix enum_serial_ports in pc-ble-driver-py in the future; though that could still take some time. At the moment, this approach will unfortunately not work.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants