Beware that this post is related to an SDK in maintenance mode
More Info: Consider nRF Connect SDK for new designs

Zephyr BLE connection management

Hi,

I have a bluetooth central app which connects to several BLE peripherals and am now working on fixing various connection reliability issues.
White lists and bonding are bring used and I am forcing connection loss via use of faraday bags.

I have questions related to connection management.

1) Use of bt_conn_le_create() verses bt_conn_le_create_auto() ?

On my initial scan of peripherals, I make my initial connection to the peripheral using bt_conn_le_create(); security level is set to L2 and the device is added to the whitelist.
On disconnects I call bt_conn_le_create_auto() to listen for whitelisted devices so they can reconnect.

Is a better schema to just do the scans, and add my peripheral devices to the white list. Then use bt_conn_le_create_auto() to connect to the white listed devices. When any peripheral is disconnected (callback); then call bt_conn_le_create_auto() to listen for the peripheral reconnecting?

Also Is it only necessary to set the security level to L2 on that initial connection; or must this be done on seeing each reconnection?
A similar question with regards to service discovery; must I only do this on the inital make of connection; or must this be done on each reconnection?

2) Use of bt_conn_ref() and bt_conn_unref() ?

Should bt_conn_unref() only be used when I am no-longer interested in a connection. IE seeing a deliberate disconnection? or should this be done for every disconnection I see even these environmental ones; where I hope to see the device reconnect?

KInd Regards,
Owain



  • Hi Hung,

    Any hints here?
    Unfortunately samples don't go into this detail.

    Regards,
    Owain

  • This looks to be to do with the connection reference counters.
    If I remove the bt_conn_unref() from the disconnect() callback and just re'arm the wit for incoming connection with bt_conn_le_create_auto(); then I can merrily loose and regain the sensor at random and the connection is reconnected after each period of disconnect.

    So only if it is a deliberately disconnect a peripherl should one do a bt_conn_unref()?

    This may be answer to one of my initial questions.

  • Hi, 

    1. The flow looks correct. Security and service discovery should be executed on each connection. 

    2. bt_conn_unref would decrement a connection’s reference count. It is used when the connection counter involved the application. 

    Regards,
    Amanda H.

  • Hi Amanda,

    So in the connected() callback we are given the reference to the connection (A reference counter has been incremented in the stack somewhere?).


    And in the disconnected() callback I must explicitly call bt_conn_unref()? this is not very symmetrical. Counter incremented inside the stack but decremented outside the stack. Where is that reference counter incremented?

    Its funny because at the moment the bt_conn_unref() is commented out in my disconnect routine before disconnect routine calls bt_conn_le_create_auto() and the device is merrily disconnecting/reconnecting as peripheral RF connection is blocked/freed using a faraday bag.


    See here attached a trace where bt_conn_unref() is called on disconnect(); this results in an assertion that related to refrence counters.

    Regards,

    Owain



    \033[m
    
    \033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:00.295,959] \033[0m<inf> max17330: max17330_gauge_init: init status ffff8882\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:00.296,112] \033[0m<inf> max17330: max17330_gauge_init: POR event detected - device configurationi needed?\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:00.296,722] \033[1;31m<err> i2c_nrfx_twim: i2c_nrfx_twim_transfer: Error 0x0BAE0001 occurred for message 0\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:00.296,813] \033[1;31m<err> stwlc68: stwlc68_reg_read: Unable to read register\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:00.296,875] \033[0m<inf> stwlc68: stwlc68_init: Failed to read CHIP_ID0 register\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:00.296,997] \033[0m<inf> app: main: ***NOVA STARTED***\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:06.306,091] \033[0m<inf> app: hapticInit: hapticInit: PWM frequency base is 016000000 Hz\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:08.363,311] \033[0m<inf> sd: sd_check_card_type: Detected SD card\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;31m--- 22 messages dropped ---
    \033[m[00:00:08.515,991] \033[0m<inf> app: novaBt_init: Bluetooth initialized\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;31m--- 3 messages dropped ---
    \033[m[00:00:08.516,052] \033[0m<inf> app: novaBt_ready: Bluetooth initialized
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:08.525,756] \033[0m<inf> app: handleSet: nova/flags = 0
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:08.534,362] \033[0m<inf> app: handleSet: nova/power = 00:00:00:00:00:00 (public)
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:08.537,384] \033[0m<inf> app: handleSet: nova/heart = 00:00:00:00:00:00 (public)
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:08.546,356] \033[0m<inf> app: handleSet: nova/devName = novaPro
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:08.555,572] \033[0m<inf> app: handleSet: nova/devUser = John Doe
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:08.573,760] \033[0m<dbg> bt_smp: smp_d1: key f84bc9c0d147a3025c48a9fd05143459 d 1 r 0\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:08.574,035] \033[0m<dbg> bt_smp: smp_d1: res 0eeac1c104f44541f3912acd35ce71b3\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:08.574,340] \033[0m<inf> bt_hci_core: bt_dev_show_info: Identity: E8:29:BA:A0:21:36 (random)\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:08.574,401] \033[0m<inf> bt_hci_core: bt_dev_show_info: HCI: version 5.3 (0x0c) revision 0x21fa, manufacturer 0x0059\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:08.574,462] \033[0m<inf> bt_hci_core: bt_dev_show_info: LMP: version 5.3 (0x0c) subver 0x21fa\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[Jloading all settings under <nova> handler is done
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:08.580,627] \033[0m<inf> app: configureWhiteListAndStartAdvertising: Whitelist Inactive!
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:08.580,688] \033[0m<inf> app: configureWhiteListAndStartAdvertising: Advertising started
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:08.580,810] \033[0m<inf> app: systemProcessThread: System got EVENT_CELL_DEREGISISTERED\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:08.581,634] \033[0m<inf> app: systemProcessThread: System got EVENT_CONNECT_BONDED_PERIPHERALS\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:08.971,557] \033[0m<dbg> bt_smp: bt_smp_pkey_ready: \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:13.665,405] \033[0m<inf> app: novaUbloxNetInit: added cellular network with handle 536984624.
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:31.813,934] \033[0m<inf> app: novaUbloxNetInit: Forced modem reboot
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:31.876,678] \033[0m<inf> app: novaUbloxNetInit: Ublox Device Opened OK\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:00:31.877,349] \033[0m<inf> app: systemGetUniqueId: Device Unique ID: d636616d 9e6c4ee4
    \033[0m
    
    
    COMMENT - At this point we have no whitelisted/bonded BLE peipherals; so do a scan
    
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[mbt bonds show
    heart strap addr: 00:00:00:00:00:00 (public)
    power meter addr: 00:00:00:00:00:00 (public)
    \033[1;32mnovaPro>\033[m\033[8D\033[J[00:02:08.433,380] \033[0m<inf> app: novaBtDisplayAllBonds:  **** BONDS ****\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:02:08.433,471] \033[0m<inf> app: novaBtDisplayAllBonds:  **** END ****\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[mbt central scan start
    \033[1;32mnovaPro>\033[m\033[8D\033[J  Device found indx 0 addr CD:B3:DD:1C:59:54 (random) name  type 1
    
    \033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:28.654,937] \033[0m<inf> app: novaBt_scanStart: Peripheral scan started\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:28.674,896] \033[0m<inf> app: scanListAdd: ScanListAdd added CD:B3:DD:1C:59:54 (random)  type 1
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[mbt central scan stop
    
    
    COMMENT - At this point we have discovered a Heart rate monitor so we connect it via bt_conn_le_create()
    
    \033[1;32mnovaPro>\033[mbt central heart connect 0
    \033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:55.887,878] \033[0m<dbg> bt_smp: bt_smp_accept: conn 0x20009790 handle 0\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:55.887,969] \033[0m<dbg> bt_smp: bt_smp_connected: chan 0x20009bec cid 0x0006\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:55.888,122] \033[0m<inf> app: mtu_updated: Updated MTU: TX: 23 RX: 23 bytes
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:55.888,519] \033[0m<inf> app: connected: Central: connected to CD:B3:DD:1C:59:54 (random)
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:55.888,702] \033[0m<inf> app: connected: security is currently 1
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:55.888,793] \033[0m<dbg> bt_smp: smp_send_pairing_req: \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:55.890,289] \033[0m<dbg> bt_smp: smp_init: prnd f958ac4078c7795b92218c96d1406d7d\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:55.890,472] \033[0m<inf> app: connected: security set to BT_SECURITY_L2
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:55.891,967] \033[0m<inf> app: systemProcessThread: System got EVENT_BLE_PERIPHERAL_CONNECTED\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:56.140,289] \033[0m<inf> app: mtu_updated: Updated MTU: TX: 65 RX: 65 bytes
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:56.140,380] \033[0m<inf> app: exchange_func: MTU exchange done\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:56.389,587] \033[0m<dbg> bt_smp: bt_smp_recv: Received SMP code 0x02 len 6\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:56.389,648] \033[0m<dbg> bt_smp: smp_pairing_rsp: \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:56.389,709] \033[0m<dbg> bt_smp: legacy_pairing_rsp: \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:56.389,862] \033[0m<dbg> bt_smp: smp_c1: k 00000000000000000000000000000000\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:56.389,953] \033[0m<dbg> bt_smp: smp_c1: r f958ac4078c7795b92218c96d1406d7d\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:56.390,136] \033[0m<dbg> bt_smp: smp_c1: ia 65:8A:5D:A4:7B:03 (random)\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:56.390,350] \033[0m<dbg> bt_smp: smp_c1: ra CD:B3:DD:1C:59:54 (random)\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:56.390,411] \033[0m<dbg> bt_smp: smp_c1: preq 0100000d100707\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:56.390,502] \033[0m<dbg> bt_smp: smp_c1: pres 02030001100303\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:56.390,563] \033[0m<dbg> bt_smp: smp_c1: p1 01010100000d10070702030001100303\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:56.390,838] \033[0m<dbg> bt_smp: smp_c1: p2 54591cddb3cd037ba45d8a6500000000\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:56.889,587] \033[0m<dbg> bt_smp: bt_smp_recv: Received SMP code 0x03 len 16\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:56.889,648] \033[0m<dbg> bt_smp: smp_pairing_confirm: \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:57.389,587] \033[0m<dbg> bt_smp: bt_smp_recv: Received SMP code 0x04 len 16\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:57.389,648] \033[0m<dbg> bt_smp: smp_pairing_random: \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:57.389,709] \033[0m<dbg> bt_smp: legacy_pairing_random: \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:57.389,801] \033[0m<dbg> bt_smp: smp_c1: k 00000000000000000000000000000000\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:57.389,862] \033[0m<dbg> bt_smp: smp_c1: r 18865a9d8297c25bfa0c77965c97d01c\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:57.390,075] \033[0m<dbg> bt_smp: smp_c1: ia 65:8A:5D:A4:7B:03 (random)\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:57.390,258] \033[0m<dbg> bt_smp: smp_c1: ra CD:B3:DD:1C:59:54 (random)\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:57.390,350] \033[0m<dbg> bt_smp: smp_c1: preq 0100000d100707\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:57.390,411] \033[0m<dbg> bt_smp: smp_c1: pres 02030001100303\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:57.390,563] \033[0m<dbg> bt_smp: smp_c1: p1 01010100000d10070702030001100303\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:57.390,808] \033[0m<dbg> bt_smp: smp_c1: p2 54591cddb3cd037ba45d8a6500000000\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:57.391,082] \033[0m<dbg> bt_smp: legacy_pairing_random: pcnf 4d71f7c79a929a263ea2c2320af576d0\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:03:57.391,143] \033[0m<dbg> bt_smp: legacy_pairing_random: cfm 4d71f7c79a929a263ea2c2320af576d0\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:00.161,254] \033[0m<dbg> bt_smp: bt_smp_encrypt_change: chan 0x20009bec conn 0x20009790 handle 0 encrypt 0x01 hci status 0x00\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:00.161,682] \033[0m<inf> app: securityChanged: Security changed: CD:B3:DD:1C:59:54 (random) level 2
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:00.162,719] \033[0m<inf> app: addDeviceToWhiteList: whitelist add: CD:B3:DD:1C:59:54 (random) OK
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:00.390,319] \033[0m<dbg> bt_smp: bt_smp_recv: Received SMP code 0x06 len 16\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:00.390,380] \033[0m<dbg> bt_smp: smp_encrypt_info: \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:00.639,526] \033[0m<dbg> bt_smp: bt_smp_recv: Received SMP code 0x07 len 10\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:00.639,587] \033[0m<dbg> bt_smp: smp_central_ident: \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:00.640,136] \033[0m<dbg> bt_smp: bt_smp_recv: Received SMP code 0x08 len 16\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:00.640,197] \033[0m<dbg> bt_smp: smp_ident_info: \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:00.640,747] \033[0m<dbg> bt_smp: bt_smp_recv: Received SMP code 0x09 len 7\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:00.640,960] \033[0m<dbg> bt_smp: smp_ident_addr_info: identity CD:B3:DD:1C:59:54 (random)\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:02.139,465] \033[0m<dbg> bt_smp: smp_pairing_complete: status 0x0\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:02.164,459] \033[0m<inf> app: authPairingComplete: Pairing complete: CD:B3:DD:1C:59:54 (random) BONDED
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:03.639,556] \033[0m<inf> app: discoveryComplete: The discovery procedure succeeded
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:04.140,228] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:05.139,526] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:06.139,617] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:07.139,556] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:08.139,739] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:09.139,617] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:10.139,709] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:11.139,678] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:12.139,953] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:13.139,526] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:14.139,801] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:15.139,617] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:16.139,556] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:17.139,526] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:18.139,678] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:19.139,556] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:20.389,556] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:21.139,556] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:22.139,556] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:23.389,556] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:24.139,587] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:25.140,869] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:26.139,678] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:27.139,587] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:28.139,526] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:29.139,556] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:30.139,526] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:31.139,556] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:32.139,526] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:33.139,556] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:34.139,526] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:35.139,526] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:37.139,495] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:37.140,258] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    
    COMMENT - At this point we have hidden the Heart rate monitor; bt_conn_unref() and bt_conn_le_create_auto() are called.
    
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:38.639,556] \033[0m<dbg> bt_smp: bt_smp_disconnected: chan 0x20009bec cid 0x0006\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:38.683,288] \033[0m<inf> app: disconnected: Peripheral disconnected (reason 0x13)
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:38.684,417] \033[0m<inf> app: listenForIncomingPeripheralConnection: primed for incoming connection \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:38.694,458] \033[0m<inf> app: systemProcessThread: System got EVENT_BLE_PERIPHERAL_DISCONNECTED\033[0m
    
    COMMENT - At this point we wake the heart monitor and it reconnects to our central which is primed/waiting for a reconnection.
    
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:54.912,628] \033[0m<dbg> bt_smp: bt_smp_accept: conn 0x20009858 handle 0\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:54.912,719] \033[0m<dbg> bt_smp: bt_smp_connected: chan 0x20009bec cid 0x0006\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:54.912,872] \033[0m<inf> app: mtu_updated: Updated MTU: TX: 23 RX: 23 bytes
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:54.952,789] \033[0m<inf> app: connected: Central: connected to CD:B3:DD:1C:59:54 (random)
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:54.953,033] \033[0m<inf> app: connected: security is currently 1
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:54.953,948] \033[0m<inf> app: connected: security set to BT_SECURITY_L2
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:54.965,637] \033[0m<inf> app: systemProcessThread: System got EVENT_BLE_PERIPHERAL_CONNECTED\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:55.414,337] \033[0m<inf> app: mtu_updated: Updated MTU: TX: 65 RX: 65 bytes
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:55.414,428] \033[0m<inf> app: exchange_func: MTU exchange done\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:56.664,154] \033[0m<dbg> bt_smp: bt_smp_encrypt_change: chan 0x20009bec conn 0x20009858 handle 0 encrypt 0x01 hci status 0x00\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:56.664,550] \033[0m<inf> app: securityChanged: Security changed: CD:B3:DD:1C:59:54 (random) level 2
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:56.665,740] \033[0m<inf> app: addDeviceToWhiteList: whitelist add: CD:B3:DD:1C:59:54 (random) OK
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:59.164,215] \033[0m<inf> app: discoveryComplete: The discovery procedure succeeded
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:04:59.914,215] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:00.914,367] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:01.914,642] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:02.914,337] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:03.914,489] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:04.914,215] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:05.914,642] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:06.914,215] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:07.914,276] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:09.164,215] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:09.914,215] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:10.914,215] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:11.914,306] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:12.914,215] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:13.914,337] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:14.914,215] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:15.914,276] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:16.914,215] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:17.914,306] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:18.914,215] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:19.914,276] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:20.914,215] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:21.914,520] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:22.914,581] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:23.914,276] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:24.915,740] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:25.914,367] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:26.914,245] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:27.914,428] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:28.914,337] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:29.914,215] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:30.914,215] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:31.914,276] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:32.914,215] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:33.914,276] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:34.914,215] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:35.914,215] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:36.914,215] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:37.914,306] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:38.914,215] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:39.914,276] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[8D\033[J[00:05:40.914,215] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[1;32mnovaPro>\033[m\033[1B\033[9D\033[8D\033[J\033[8D\033[J[00:05:42.914,215] \033[0m<inf> app: hrNotify: Heart Rate Value: 0 bpm
    
    COMMENT - Again we hide our heart monitor and it gets disconnected....
    
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[8D\033[J[00:05:43.914,306] \033[0m<dbg> bt_smp: bt_smp_disconnected: chan 0x20009bec cid 0x0006\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[8D\033[J[00:05:43.957,916] \033[0m<inf> app: disconnected: Peripheral disconnected (reason 0x13)
    \033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[8D\033[J[00:05:43.959,381] \033[0m<inf> app: listenForIncomingPeripheralConnection: primed for incoming connection \033[0m
    
    COMMENT - Assertion in ble conenction code because reference counter is Zero. Is this that a connection made via bt_conn_le_create() increments a reference counter; but bt_conn_le_create_auto does not increment a reference counter internally?
    
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[8D\033[JASSERTION FAIL [old > 0] @ WEST_TOPDIR/zephyr/subsys/bluetooth/host/conn.c:1173
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[8D\033[J  Conn reference counter is 0
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[8D\033[J[00:06:09.579,040] \033[1;31m<err> os: esf_dump: r0/a1:  0x00000004  r1/a2:  0x00000495  r2/a3:  0x00000000\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[8D\033[J[00:06:09.579,101] \033[1;31m<err> os: esf_dump: r3/a4:  0x00000495 r12/ip:  0x00000000 r14/lr:  0x0009bdc3\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[8D\033[J[00:06:09.579,162] \033[1;31m<err> os: esf_dump:  xpsr:  0x61000000\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[8D\033[J[00:06:09.579,223] \033[1;31m<err> os: esf_dump: Faulting instruction address (r15/pc): 0x0009bde4\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[8D\033[J[00:06:09.579,284] \033[1;31m<err> os: z_fatal_error: >>> ZEPHYR FATAL ERROR 4: Kernel panic on CPU 0\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[8D\033[J[00:06:09.579,376] \033[1;31m<err> os: z_fatal_error: Current thread: 0x2000a410 (sysworkq)\033[0m
    \033[1;32mnovaPro>\033[m\033[8D\033[J\033[8D\033[J[00:06:19.282,318] \033[1;31m<err> os: k_sys_fatal_error_handler: Halting system\033[0m
    \033[1;32mnovaPro>\033[m

  • In fact if I search through all sample code; one sees most examples using bt_conn_unref(); but only some that have calls to bt_conn_ref().

Related