IOS and macOS devices can't connect to BLE MIDI device (nrf52832)

Hello. I'm trying to make a simple BLE MIDI switch device based on PCA10040 dev kit and nrf Connect SDK v2.0.0. So I've added one GATT service with one characteristic according to BLE MIDI specification. All tutorials at this point say that I'll be able to discover this device and connect to it. Indeed, I can do it from Windows laptop. But when I try to connect it to macbook pro or iphone, I can't see my device at devices list at all (I tried BT settings on both of them, also I tried Audio/MIDI studio on mac and GarageBand on iphone, which are standart ways to discover BLE MIDI Devices). But when I go further and download some BLE scanner apps on my devices, I can see my PCA10040 and connect it. Furthermore, when I connect PCA10040 with scanner app, I can see and connect it using Audio/MIDI studio and GarageBand. 

I also have some common BLE MIDI controllers from Roli, Akai, etc and when I try to connect them, I can see them in BT settings without any additional manipulations.

So the question is: how to make my device scannable not only for scanner apps, but for default means on mac/iphone? I thought that the difference is in advertising modes, but I'm not shure about it. I've seen this behavior before when I tried to connect to some beacons.

Parents Reply Children
  • So I've tried to compare my device with other ones, also spent some time on searching info about my issue.

    So the first thing I found was this. Here I read this: iOS devices will not pair with BLE devices unless one of the device's characteristics specifies that encryption is required. So the next question is: how to show to iOS device that encryption is required? Maybe I need to edit the prj.conf file to add it?

    The second thing was observed when I tried to compare services and characteristics to ROLI Lightpad device ones. I found that it contains not only BLE MIDI and BAS (battery) services, but also the service called "Device Information" with 16-bit UUID 0x180A that contains manufacturer and model info. So I guess that it is a kind of standard service and maybe it is also required by iOS for device discovering. I think I need some example that shows how to implement it, but I can't find one. I guess that adding any standard service is much more simple then adding a custom one, e. g. for adding battery service I need to enable it in prj.conf using CONFIG_BT_BAS=y and implement some functions in my code.

    King regards,
    Piotr 

Related