This is probably more of an Android problem rather than CYBLE, but I hoped someone might have some insight.
I have developed a server using CYBLE-022001-00 and am testing this with the CySmart app on some Android devices. On a Nexus 5X with Android 6.0.1 my server works as intended: With Security Mode: 'Mode 1', Security Level: 'Authenticated pairing with encryption', I/O Capabilities: 'Display', Bonding Requirement: 'Bonding', when I touch 'pair' in CySmart a dialog appears asking for a passkey. When I enter this the device is paired and I can read and write its characteristics.
However doing exactly the same thing with a Lenovo Yoga Tablet 2 with Android 5.0.1, CySmart does not prompt for the passkey and goes directly to "paired". When I go into the GATT database, I can enumerate the characteristics, but an attempt to read them is met with no response at all (not even an error message). The only way I was able to get the server working on this tablet was to set Security Level (on the CYBLE BLE Component) to 'No security. No Authentication, No Encryption'.
I have Googled this extensively, but cannot find any decent information on BLE support at different versions of Android or on different hardware. I do not know if this is something that does not work until Android 5.1 or 6, or if it is a hardware limitation with the Blootooth chip in this particular Tablet. The behavior is similar when I use pairing from the Android Settings Bluetooth page (prompts for passcode on the Nexus, pairs without this prompt on the Lenovo).
Any ideas anyone?
We have not tested with this particuar tablet yet. But the problem is not with the android version 5.0.1, as we have already tested with this OS on different devices. Please confirm if this works on different devices with android 5.0.1
I'm afraid these are the only two physical Android devices I have available at present. Emulator of course will not work as it has no Bluetooth hardware.
I found I could set Security Level: "Unauthenticated pairing with encryption", I/O Capabilities: "No Input No Output", Bonding Requirement: "Bonding" and it works OK, both in CySmart and also in the Xamarin App I wrote for this project. So it seems it is just authentication or the passkey entry that is the problem on the Lenovo, not the encryption. This may suffice for my requirements as I can prevent the BLE chip bonding with more than one device and require physical access to delete an existing bond before it can be re-bonded to a different tablet.