Alle Devices finden...
-
Hallo,
ich schreibe momentan an einer App, die mit Bluetooth Low Energy Devices kommunizieren soll (die schon gepairt) sind. Mein Problem ist nun, mir die entsprechende Device rauszusuchen.
Folgenden Code habe ich mir soweit mal zusammen gebastelt:
int BLEDevice::initializeDevice() { GUID GUID_BLESHIELD_DEVICE_INTERFACE = {0x781aee18, 0x7733, 0x4ce4, 0xad, 0xd0, 0x91, 0xf4, 0x1c, 0x67, 0xb5, 0x92}; //GUID InterfaceClassGUID = {}; // Interface Class GUID, nach der gesucht wird GUID InterfaceClassGUID = {0x4d36e972L, 0xe325, 0x11ce, {0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18}}; HDEVINFO DevInfoSet; // information set with all BLE-Devices SP_DEVICE_INTERFACE_DATA bufDevInterfaceData; bufDevInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); SP_DEVICE_INTERFACE_DETAIL_DATA* pBufDevInterfaceDetailData; HANDLE devHandle; DWORD MemberIndex = 0; DWORD lastErrorCode = 0; DWORD RequiredSize = 0; WCHAR* devicePath; // get a handle to the device information set who are currently present DevInfoSet = SetupDiGetClassDevs(NULL, NULL, NULL, DIGCF_ALLCLASSES); if (DevInfoSet == INVALID_HANDLE_VALUE) { SetupDiDestroyDeviceInfoList(DevInfoSet); return 1; } // enumerate the device interfaces in the device information set, und speichern in devInterfaceList // ----> HIER while(SetupDiEnumDeviceInterfaces(DevInfoSet, NULL, &GUID_BLESHIELD_DEVICE_INTERFACE, MemberIndex, &bufDevInterfaceData)) { RequiredSize = 0; // detail data größe in RequiredSize für bufDevInterfaceData holen if(!SetupDiGetDeviceInterfaceDetail(DevInfoSet, &bufDevInterfaceData, NULL, NULL, &RequiredSize, NULL)) break; // Speicher für bufDevInterfaceDetailData allokieren if(RequiredSize) pBufDevInterfaceDetailData = (SP_DEVICE_INTERFACE_DETAIL_DATA*) malloc(RequiredSize); else break; if(!SetupDiGetDeviceInterfaceDetail(DevInfoSet, &bufDevInterfaceData, pBufDevInterfaceDetailData, RequiredSize, NULL, NULL)) break; // Handle zum Device Interface herstellen devHandle = CreateFile(pBufDevInterfaceDetailData->DevicePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL); if(devHandle == INVALID_HANDLE_VALUE) break; // device Handle in Liste eintragen deviceHandlesList.push_back(devHandle); MemberIndex++; } int i = GetLastError(); return 0; }
Leider springt er mir bei der Markierung immer über die while-Schleife drüber und gibt mir den Error-Code 259 (ERROR_NO_MORE_ITEMS) aus. Also findet er wohl in den geholten Devices keine, die der Suche entsprechen?
Ich steh momentan total auf dem Schlauch und aus der Windowsdoku werd ich auch nicht schlau. Vielleicht kann mir jemand helfen...
Vielen Dank für eure Hilfe!
Edit: Als Service GUID ist einfach mal die vom Netzwerkadapter eingetragen, die im GUIDexplorer stand.
-
Du willst Device Interfaces aufzählen, lässt Dir aber keine Interfaces in Dein InfoSet packen. Genau zu diesem Zwecke gibt es das Flag DIGCF_DEVICEINTERFACE, dieses musst Du beim Aufruf von SetupDiGetClassDevs auch angeben.