/* * public override bool GetConnectionState() * { * uint devInst; * if (0 == NativeMethods.CM_Locate_DevNode(out devInst, _id)) * { * uint dnStatus, dnProblemNumber; * if (0 == NativeMethods.CM_Get_DevNode_Status(out dnStatus, out dnProblemNumber, devInst)) * { * if (0 == (dnStatus & NativeMethods.DN_DEVICE_DISCONNECTED)) { return true; } * } * } * * return false; * } */ void RequiresServices() { lock (_syncObject) { if (!TryOpenToGetInfo(handle => { var nativeServices = NativeMethods.BluetoothGATTGetServices(handle); if (nativeServices == null) { return(false); } var services = new List <WinBleService>(); foreach (var nativeService in nativeServices) { var service = new WinBleService(this, nativeService); services.Add(service); } _services = services.ToArray(); return(true); })) { throw DeviceException.CreateIOException(this, "BLE service list could not be retrieved."); } } }
internal WinBleStream(WinBleDevice device, WinBleService service) : base(device, service) { _closeEventHandle = NativeMethods.CreateManualResetEventOrThrow(); _watchEventHandle = NativeMethods.CreateManualResetEventOrThrow(); _watchEvents = new Queue <BleEvent>(); _watchMap = new Dictionary <ushort, BleCharacteristic>(); }