Exemplo n.º 1
0
        /*
         * 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.");
                }
            }
        }
Exemplo n.º 2
0
 internal WinBleStream(WinBleDevice device, WinBleService service)
     : base(device, service)
 {
     _closeEventHandle = NativeMethods.CreateManualResetEventOrThrow();
     _watchEventHandle = NativeMethods.CreateManualResetEventOrThrow();
     _watchEvents      = new Queue <BleEvent>();
     _watchMap         = new Dictionary <ushort, BleCharacteristic>();
 }