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

Pipe always not available for a notification enabled characteristic

Hi,

I'm new to nRF8001 SDK and Bluetooth and I hope my questions are not too stupid lol. So here it goes:

I'm using the Nordic nRF8001 SDK to implement a self-defined service with vendor specific UUID, in order to communicate with an iPhone app using the RedBearLab's BLE shield. The service has a notification enabled characteristic (TX pipe), used for transmitting data to the iPhone central.

I used the nRFgo Studio to generate the appropriate service.h file and the iPhone app can find the device and connect to it. After connection, the iPhone app (according to the app develope) would subscribe to the characteristic (represented by the TX pipe in question) and wait for a response that subscription was acknowledged. On the Arduino side, I can see that the 'ACI_EVT_PIPE_STATUS' would flare, indicating a change of pipe status. However the lib_aci_is_pipe_available(...) function would always return 'false' on that particular pipe. So I am trying to understand what happened...

My questions are:

  1. in order to open the TX pipe, does it suffice for the central to subscribe to the characteristic in question (setting notify to yes) ?

  2. If the central subscribes to this characteristic, with this SDK will the peripheral send a response to central acknowledging the subscription automatically (through the pipe)?

  3. If I am able to see an ACI_EVT_PIPE_STATUS returned, does it mean that the central actually subscribed to the characteristic?

  4. On the iPhone app side, the developer can use iOS standard Bluetooth api and the nRF8001 SDK should have no problem working with it , right?

I know it's a lot of questions but thank you very much for taking your time to have a look at them !!

Best regards.

Parents
    1. Yes, the central can enable/disable notifications or indications by writing to the CCCD.
    2. There is always Link layer acknowledgment in BLE, so this shouldn't be a problem. Note that iOS doesn't necessarily remember the states of the CCCD's of a device after disconnecting and reconnecting to a device.
    3. You can check if the pipe is available using lib_aci_is_pipe_available. Note that we had a bug in the earlier SDK where the pipe updating was wrong. Make sure youe use the latest SDK.
    4. Yes. notice the earlier mentioned caveats.
Reply
    1. Yes, the central can enable/disable notifications or indications by writing to the CCCD.
    2. There is always Link layer acknowledgment in BLE, so this shouldn't be a problem. Note that iOS doesn't necessarily remember the states of the CCCD's of a device after disconnecting and reconnecting to a device.
    3. You can check if the pipe is available using lib_aci_is_pipe_available. Note that we had a bug in the earlier SDK where the pipe updating was wrong. Make sure youe use the latest SDK.
    4. Yes. notice the earlier mentioned caveats.
Children
Related