Hi,

I need to admit that I totally missed the part that you are on FreeRTOS but
I see DEBUG lines that work for you.
On the first picture you see radio activity every advertising interval and
on the second one you see a single advertising event - all looks good.

Good to know that when it works, it works well :-)

Anyway, the question now is why BLE_GAP_EVENT_ADV_COMPLETE is sent with a
timeout. Did you try to debug it by setting breakpoint at
ble_gap_adv_finished?

This is probably because advertising is started with a timeout of 3 minutes :

ble_gap_adv_start(addrType, NULL, 180000, &adv_params, GAPEventCallback, this);

Isn't that expected?

Anyway, here's the callstack when the BLE_GAP_EVENT_ADV_COMPLETE event is received:

Breakpoint 2, Pinetime::Controllers::NimbleController::OnGAPEvent (this=0x200019e0 <systemTask+96>, event=0x20006b44 <ucHeap+8364>) at /home/jf/git/PineTime/src/components/ble/NimbleController.cpp:137 137 NRF_LOG_INFO("Advertising event : BLE_GAP_EVENT_ADV_COMPLETE");
(gdb) bt
#0 Pinetime::Controllers::NimbleController::OnGAPEvent (this=0x200019e0 <systemTask+96>, event=0x20006b44 <ucHeap+8364>) at /home/jf/git/PineTime/src/components/ble/NimbleController.cpp:137 #1 0x0000e7c4 in GAPEventCallback (event=<optimized out>, arg=<optimized out>) at /home/jf/git/PineTime/src/components/ble/NimbleController.cpp:47 #2 0x000177cc in ble_gap_adv_finished (instance=instance@entry=0 '\000', reason=reason@entry=13, conn_handle=conn_handle@entry=0, num_events=num_events@entry=0 '\000') at /home/jf/git/PineTime/src/libs/mynewt-nimble/nimble/host/src/ble_gap.c:802 #3 0x00017aba in ble_gap_slave_timer () at /home/jf/git/PineTime/src/libs/mynewt-nimble/nimble/host/src/ble_gap.c:1970 #4 0x00017d5e in ble_gap_timer () at /home/jf/git/PineTime/src/libs/mynewt-nimble/nimble/host/src/ble_gap.c:2044 #5 0x00014a60 in ble_hs_timer_exp (ev=<optimized out>) at /home/jf/git/PineTime/src/libs/mynewt-nimble/nimble/host/src/ble_hs.c:407 #6 0x0000b748 in ble_npl_event_run (ev=<optimized out>) at /home/jf/git/PineTime/src/libs/mynewt-nimble/porting/npl/freertos/include/nimble/nimble_npl_os.h:115
#7  nimble_port_run () at /home/jf/git/PineTime/src/main.cpp:266

Also could you share btsnoop logs?

Do you mean the HCI logs from BLE_MONITOR_RTT I get using btmon ? I'll let it run overnight to get fresh logs.

Thanks,
JF


Le 06/08/2021 10:45, Łukasz Rymanowski a écrit :
Hi JF,

I need to admit that I totally missed the part that you are on FreeRTOS but
I see DEBUG lines that work for you.
On the first picture you see radio activity every advertising interval and
on the second one you see a single advertising event - all looks good.

Anyway, the question now is why BLE_GAP_EVENT_ADV_COMPLETE is sent with a
timeout. Did you try to debug it by setting breakpoint at
ble_gap_adv_finished?
Also could you share btsnoop logs?

Bes
Łukasz


On Tue, 3 Aug 2021 at 20:37, <j...@codingfield.com> wrote:

> If you have nrf52 you could trace radio activity with some debug pins
> BLE_PHY_DBG_TIME_ADDRESS_END_PIN
> BLE_PHY_DBG_TIME_WFR_PIN
> BLE_PHY_DBG_TIME_TXRXEN_READY_PIN
>
> Here you can find a description of those.
>
https://github.com/apache/mynewt-nimble/blob/master/nimble/drivers/nrf52/syscfg.yml#L35

Thanks Łukasz! I've connected my logic analyzer (saleae logic 8) on 3
pins, and I've also enabled the logging feature of nimble.
When BLE is working fine and start advertising, I can see this in the
logs :

<info> app: GAP procedure initiated: advertise;
<info> app: disc_mode=2
<info> app:  adv_channel_map=0 own_addr_type=0 adv_filter_policy=0
adv_itvl_min=0 adv_itvl_max=0
<info> app:

And when it stops, after 3 minutes:

<info> app: Advertising event : BLE_GAP_EVENT_ADV_COMPLETE
<info> app: advertise complete; reason=13n status=13

See ble-adv1.png and ble-adv2.png for screenshots of the capture of the
3 pins.

I left the device running during the whole day and in the evening, I
tried to restart the advertising (with a push button) and... the logs
are exactly the same (as if it was advertising correctly for 3 minutes
and then complete) but... nothing on the 3 debug pins, they were just
flat on low level. Obviously, the device was not found by my ble
scanner.

Sooo... any ideas :p ?

Thanks!

JF

Reply via email to