This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

How do I make suggestions for improvement to the softdevice stack?

I have some improvement I would like to see in the stack. How can I get these implemented. Improvements include:

  1. Allow advertisement reporting events during connect scanning. Currently when a connect is in progress advertising packets are received and processed by the stack but they do not generate reports. There should be a option to enable such reporting.

  2. Non-connectable advertising packets are limited to 100ms (<10Hz in practice). Remove this limitation as it adds nothing to the abilities of the stack.

  3. Dynamic advertising cannot be implemented well in the current stack because the stack does not have a "transmitted advertising packet" callback (which seems like it would be trivial to add) and because of the 100ms limit above. When scanning, connecting and advertising at the same time there appears to be no way to determine that an advertising packet was sent so that a new one can be loaded.

  4. The 100ms limit also means that if you want to cycle through even 2 packets your net rate is 5Hz, if you have 10 packet the net rate would be 1Hz. There should be a way to instantly send advertising packet so that the "transmitted advertising packet" callback can send dynamic packets.

  • Not arguing about potential benefits of all your suggestions, just reminder that point number 2 is because of BT 4.0/4.1 certification which forbids non-connectable advertisement intervals below 100ms and point number 3 is not true, there are radio_notification events which gives application callback before and after every radio packet transmission (so if you are only doing advertisement it will tell you exactly when packet goes out), however it's not useful for dynamic advertisement implementation (you cannot start/stop/modify adv. interval easily in radio_notification handler). I'm also surprised by point number 1, that would be rather bug then feature because if you run any scanner - not central connection, that's different story! - then you should always get all adv. events. Are you sure you enable additional scanner once your central establishes connection?

  • I do agree with point 4 in connection with point number 2: it's currently very hard to implement "multiple" advertisers on Nordic BLE stacks, even if you accept limitation of equal adv. intervals it leads to multiplying of 20ms (for connectable) or 100ms (for non-connectable) interval as lower limit which can be a problem for some applications. Also once there is another radio "role" active (= connection) then radio_notification events are not useful any more and application needs to use separate timers to juggle with adv. data to emulate multiple advertisers...

  • Regarding advertising reports while connecting: as I understand it, during the connection process there is first a scan phase, whose time depends on the peripheral, to find a suitable peripheral and then a connection phase which is quite short. During this scanning phase you cannot see the received advertising packets - at least I do not see them. Once connected I can turn on the scanning process and see advertising packets again. Perhaps I'm doing something wrong? The reason I do not like this design is that the peripheral and RF determine the performance of the central. I have gotten around this by setting a bunch of timers to make sure a misbehaving peripheral does not deny service to other peripherals, but I can only scan around 2/3 of the time, the remaining 1/3 of the time is devoted to initiating connections.

  • OK, I've missed this detail. So it's only about the time between sd_ble_gap_connect function call and incoming BLE_GAP_EVT_CONNECTED event. I'm afraid it still makes sense because once you said to lower (LL) stack to connect you should be not interested about further scanning events. If you are you should enable separate Observer (or Central) role, shouldn't you?

  • I am not sure how to enable a separate scanner, I only see sd_ble_gap_scan_start and sd_ble_gap_connect, and they don't seem to run at the same time. I see no way to add a context to either. Perhaps I just don't understand.

Related