Pino de emparelhamento periférico BLE no android

Eu implementei um servidor GATT e um aplicativo cliente no Android. A conexão está funcionando e forcei o emparelhamento adicionando PERMISSION_READ / WRITE_ENCRYPTED_MITM a todas as GattCharacteristics.

Mas o comportamento de emparelhamento difere em diferentes clientes:

1) O pino é mostrado no cliente / central (Android 5 no Samsung Galaxy S3) e deve ser inserido no servidor / periférico (Android 7 no Nexus 5).

2) A senha é exibida nos dispositivos cliente / central (Android 5 no Samsung Galaxy S3) e servidor / periférico (Android 6 no Nexus 7)

3) O emparelhamento com Windows ou iOS falha com o servidor / periférico expecando um pino para entrada.

O que eu esperava e quero que aconteça é:

O pino é mostrado no servidor / periférico e deve ser inserido no cliente / central

Existe alguma maneira de configurar esse comportamento?

Desde já, obrigado!

EDITAR

Aqui está a minha configuração:

BluetoothGattService gattService = new BluetoothGattService(
    serviceUUID, BluetoothGattService.SERVICE_TYPE_PRIMARY);
gattService.addCharacteristic(new BluetoothGattCharacteristic(
    charReadUUID,
    BluetoothGattCharacteristic.PROPERTY_READ,
    BluetoothGattCharacteristic.PERMISSION_READ_ENCRYPTED_MITM
));
gattService.addCharacteristic(new BluetoothGattCharacteristic(
    charWriteUUID,
    BluetoothGattCharacteristic.PROPERTY_WRITE,
    BluetoothGattCharacteristic.PERMISSION_WRITE_ENCRYPTED_MITM
));
gattServer.addService(gattService);

...

AdvertiseSettings settings = new AdvertiseSettings.Builder()
    .setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_BALANCED)
    .setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH)
    .setConnectable(true)
    .build();

AdvertiseData data = new AdvertiseData.Builder()
    .setIncludeTxPowerLevel(false)
    .addServiceUuid(serviceUUID)
    .build();

BluetoothLeAdvertiser advertiser = adaper.getBluetoothLeAdvertiser()
advertiser.startAdvertising(settings, data, callback);

questionAnswers(1)

yourAnswerToTheQuestion