예제 #1
0
        /// <inheritdoc />
        public void Start()
        {
            _device = _connection.System.GetObject <Device1> (BlueZPath.Service, BlueZPath.Device(_adapterName, _deviceAddress));
            int retries = 3;

            for (int i = 0; i < retries; i++)
            {
                try
                {
                    _logger.Info("Connecting...");
                    _device.Connect();
                    _logger.Info("Connected");
                    System.Threading.Thread.Sleep(3000);
                    break;
                }
                catch (Exception ex)
                {
                    _logger.Warn("Failed", ex);
                    //we can't really do much other than try again
                    if (i == retries - 1)
                    {
                        throw new Exception("Failed to connect to BLE Anemometer", ex);
                    }
                    else
                    {
                        System.Threading.Thread.Sleep(3000);
                    }
                }
            }

            string name = _device.Name;

            for (int i = 0; i < retries; i++)
            {
                try
                {
                    var readCharPath = BlueZPath.GattCharacteristic(_adapterName, _deviceAddress, _serviceId, _readCharId);
                    _readChar   = _connection.System.GetObject <GattCharacteristic1> (BlueZPath.Service, readCharPath);
                    _properties = _connection.System.GetObject <Properties> (BlueZPath.Service, readCharPath);

                    _readChar.StartNotify();
                    InitializePropertyListener();
                    _logger.Info("Now listening for wind data");
                    break;
                }
                catch (Exception ex)
                {
                    _logger.Warn("Failed to configure listener", ex);

                    if (i == retries - 1)
                    {
                        throw new Exception("Are you sure BlueZ is running in experimental mode?", ex);
                    }
                    else
                    {
                        System.Threading.Thread.Sleep(3000);
                    }
                }
            }
        }
예제 #2
0
 public GattCharacteristic(GattCharacteristic1 native, IGattService service, CharacteristicProperties properties)
     : base(service, Guid.Parse(native.UUID), properties)
 {
     this.native = native;
 }