I have made some good progress with the BLE side of things.  I am getting to the point where I am fairly confident that I know what minimal BLE functionality we will need in out device, and more importantly, what size it's footprint will be 56K + 88K for softmachine = 144K Flash and 2K+8K for RAM.  I'm pretty sure the DW code will fit in the remaining space, but it uses an (as yet unknown) bunch of RAM for buffers.

But I have also discovered a snag with BLE.  It's too popular!  I have a bunch of Apple devices within wireless earshot (apartment below), all of which implement Apple's iBeacon protocol (based on BLE).  They are issuing unwanted advertising packets that wake me up many times a minutes, just so that I can ignore them and go back to sleep.

There is a mechanism, called a "white list" that allows you to register the MAC addresses of devices in which you are interested, so that the radio controller can quickly ignore unwanted devices without bothering the processor.  The problem is that that list can only be 8 items long.   It also means that you have to tell each TS the identity of all the other TSs.  So if an unknown wearable suddenly arrives, it won't be in the white list and will get ignored.  But if you don't have a white list, then you get  a storm of advertising packets.
The other problem is that iBeacons appear to keep changing their MAC address so you can't ignore a particular MAC address for very long anyway.   
Below, a list of packets I flagged as unwanted in just 60 seconds.  
60 second tick interrupt
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(0)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(1)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(0)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(1)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(0)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(1)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(0)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(1)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(0)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(1)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(0)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(1)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(0)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(1)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(0)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(1)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(0)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(1)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(0)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(1)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(0)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(1)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(0)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(1)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(0)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(1)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(0)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(1)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(0)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(1)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(0)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(1)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(0)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(1)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(0)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(1)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(0)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(1)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(0)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(1)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(0)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(1)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(0)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(1)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(0)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(1)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(0)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(1)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(0)
on_ble_evt BLE_GAP_EVT_ADV_REPORT – BLACK 88(1)
60 second tick interrupt

Leave a Reply