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