¿Bluetooth LE solo para dispositivos emparejados en Windows?
Desarrollé un sensor Open-IoT con hardware BLE (CPU Nordic, https://github.com/joembedded/Open-SDI12-Blue), que funciona de manera excelente y puedo acceder fácilmente a él (y sin emparejamiento) a través de la API de Web-Bluetooth (HTML/JS) en Windows y Android.
Ahora, al intentar hacer lo mismo en RAD Studio C++ (usando Windows 11), parece que solo se aceptan dispositivos emparejados para “DiscoverServices()” (los no emparejados generan una excepción). Esto no tiene sentido (especialmente para BLE)…
Noté una opción en la Configuración de Windows para “permitir esto a aplicaciones especiales”, como MS LE Explorer.
Encontré para la entrada “TBluetoothLEDevice*” una opción “Emparejado” (Captura de pantalla de la configuración de Windows) enlace a la imagen (https://i.stack.imgur.com/vPnFQ.png).
¿Alguien sabe si hay una solución automática?
¡Gracias por su ayuda!
Jo (JoEmbedded.de)
// Esto es del DEMO de RAD Studio BLE-Scanner-Demo (solo en C, pero los datos son los mismos para Delphi)
void __fastcall TTPDiscoverServices::Invoke(void){
TBluetoothLE BLEh = FForm->BluetoothLE1;
TBluetoothLEDeviceList *DLh = BLEh->DiscoveredDevices;
TBluetoothLEDevice BTDev = DLh->Items[FForm->ListBox1->ItemIndex];
bool bres;
if(!BTDev->Paired) {
bres = false;
::MessageBox(NULL,L”¿Dispositivo no emparejado?”,L”**Error**”,MB_OK);
} else {
//original: if(!FForm->BluetoothLE1->DiscoveredDevices->Items[FForm->ListBox1->ItemIndex]->DiscoverServices())
bres = BTDev->DiscoverServices(); // Jo: Excepción Win11 para dispositivos no emparejados
::MessageBox(NULL,bres?L”Descubrimiento OK”:L”Error de descubrimiento”,L”**Descubrimiento**”,MB_OK);
}
if(!bres) TThread::Synchronize(NULL, SynchronizeProc);
}
davy.ai
Solución para el problema de descubrimiento de dispositivos BluetoothLE en RAD Studio C++
Jo, un experto en IT especializado en C++, Windows, Delphi y Bluetooth de baja energía (BLE), ha desarrollado un sensor Open-IoT con hardware BLE. El sensor funciona perfectamente y puede ser accedido fácilmente a través de la API de Web-Bluetooth en Windows y Android sin necesidad de emparejamiento. Sin embargo, Jo se encontró con un problema al intentar conectarse al mismo sensor usando RAD Studio C++ en Windows 11. Parece que solo se aceptan dispositivos emparejados, y los dispositivos sin emparejar provocan una excepción durante la llamada a la función DiscoverServices(), lo cual no tiene ningún sentido, especialmente para dispositivos BLE. Jo encontró una opción en la Configuración de Windows que se puede utilizar para permitir que aplicaciones especiales como MS LE Explorer acepten dispositivos sin emparejar. Jo también descubrió que hay una opción llamada ‘Emparejado’ para la entrada TBluetoothLEDevice*, lo cual puede indicar si un dispositivo está emparejado o no. Jo está buscando una solución automática para este problema.
Para resolver este problema, Jo puede intentar los siguientes pasos: