示例#1
0
 /// <summary>
 /// Called when a altitude value is being notified
 /// </summary>
 /// <param name="characteristic">Characteristic which notified the value</param>
 /// <param name="value">New characteristic value</param>
 private void OnAltitudeNotification(BleGattCharacteristic characteristic, BleValue value)
 {
     if (characteristic.Guid == MainAltiGuid)
     {
         MainAltitudeChanged?.Invoke(Altitude.MainAltitude, value.ToInt16());
     }
     else if (characteristic.Guid == Alti1Guid)
     {
         Altitude1Changed?.Invoke(Altitude.Altitude1, value.ToInt16());
     }
     else if (characteristic.Guid == Alti2Guid)
     {
         Altitude2Changed?.Invoke(Altitude.Altitude2, value.ToInt16());
     }
     else if (characteristic.Guid == Alti3Guid)
     {
         Altitude3Changed?.Invoke(Altitude.Altitude3, value.ToInt16());
     }
     else if (characteristic.Guid == Alti4Guid)
     {
         Altitude4Changed?.Invoke(Altitude.Altitude4, value.ToInt16());
     }
     else
     {
     }
 }
示例#2
0
        /// <summary>
        /// Read a specified navigation value
        /// </summary>
        /// <param name="value">Navigation value to read</param>
        /// <returns>true if the operation succeeded, false otherwise</returns>
        public async Task <ReadNavigationValueResult> ReadNavigationValue(NavigationValue value)
        {
            ReadNavigationValueResult ret = new ReadNavigationValueResult();

            // List characteristics
            ret.Success = await InitCharacteristics();

            if (ret.Success)
            {
                // Look for the selected characteristic
                BleValue val = new BleValue();
                BleGattCharacteristic nav_characteristic = _navigation_characteristics[value];
                ret.Success = await BleDevice.ReadValueAsync(nav_characteristic, val);

                if (ret.Success)
                {
                    switch (value)
                    {
                    case NavigationValue.Speed:
                    {
                        ret.SpeedValue = val.ToUInt16();
                        break;
                    }

                    case NavigationValue.Latitude:
                    {
                        ret.LatitudeValue = val.ToFloat64();
                        break;
                    }

                    case NavigationValue.Longitude:
                    {
                        ret.LongitudeValue = val.ToFloat64();
                        break;
                    }

                    case NavigationValue.TrackAngle:
                    {
                        ret.TrackAngleValue = val.ToUInt16();
                        break;
                    }

                    default:
                    {
                        ret.Success = false;
                        break;
                    }
                    }
                }
            }

            return(ret);
        }
示例#3
0
 /// <summary>
 /// Called when a variometer value is being notified
 /// </summary>
 /// <param name="characteristic">Characteristic which notified the value</param>
 /// <param name="value">New characteristic value</param>
 private void OnVariometerNotification(BleGattCharacteristic characteristic, BleValue value)
 {
     if (characteristic.Guid == VarioGuid)
     {
         VarioChanged?.Invoke(value.ToInt16());
     }
     else if (characteristic.Guid == AccelerationGuid)
     {
         AccelerationChanged?.Invoke(value.ToUInt8());
     }
     else
     {
     }
 }
示例#4
0
 /// <summary>
 /// Called when a barometer value is being notified
 /// </summary>
 /// <param name="characteristic">Characteristic which notified the value</param>
 /// <param name="value">New characteristic value</param>
 private void OnBarometerNotification(BleGattCharacteristic characteristic, BleValue value)
 {
     if (characteristic.Guid == PressureGuid)
     {
         PressureChanged?.Invoke(value.ToUInt32());
     }
     else if (characteristic.Guid == TemperatureGuid)
     {
         TemperatureChanged?.Invoke(value.ToInt16());
     }
     else
     {
     }
 }
示例#5
0
        /// <summary>
        /// Start notification on a specified variometer value
        /// </summary>
        /// <param name="value">Variometer value to start being notified</param>
        /// <returns>true if the operation succeeded, false otherwise</returns>
        public async Task <bool> StartNotification(VariometerValue value)
        {
            bool ret;

            // List characteristics
            ret = await InitCharacteristics();

            if (ret)
            {
                // Look for the selected characteristic
                BleGattCharacteristic vario_characteristic = _variometer_characteristics[value];
                ret = await BleDevice.RegisterValueNotificationAsync(vario_characteristic, OnVariometerNotification);
            }

            return(ret);
        }
示例#6
0
        /// <summary>
        /// Stop notification on a specified navigation value
        /// </summary>
        /// <param name="value">Navigation to stop being notified</param>
        /// <returns>true if the operation succeeded, false otherwise</returns>
        public async Task <bool> StopNotification(NavigationValue value)
        {
            bool ret;

            // List characteristics
            ret = await InitCharacteristics();

            if (ret)
            {
                // Look for the selected characteristic
                BleGattCharacteristic nav_characteristic = _navigation_characteristics[value];
                ret = await BleDevice.UnregisterValueNotificationAsync(nav_characteristic, OnNavigationNotification);
            }

            return(ret);
        }
示例#7
0
        /// <summary>
        /// Modify a specified altitude value
        /// </summary>
        /// <param name="altitude">Altitude to modified</param>
        /// <param name="value">Altitude value</param>
        /// <returns>true if the operation succeeded, false otherwise</returns>
        public async Task <bool> WriteAltitude(Altitude altitude, Int16 value)
        {
            bool ret;

            // List characteristics
            ret = await InitCharacteristics();

            if (ret)
            {
                // Look for the selected characteristic
                BleGattCharacteristic alti_characteristic = _altitude_characteristics[altitude];
                ret = await BleDevice.WriteValueAsync(alti_characteristic, new BleValue(value));
            }

            return(ret);
        }
示例#8
0
        /// <summary>
        /// Stop notification on a specified altitude value
        /// </summary>
        /// <param name="altitude">Altitude to stop being notified</param>
        /// <returns>true if the operation succeeded, false otherwise</returns>
        public async Task <bool> StopNotification(Altitude altitude)
        {
            bool ret;

            // List characteristics
            ret = await InitCharacteristics();

            if (ret)
            {
                // Look for the selected characteristic
                BleGattCharacteristic alti_characteristic = _altitude_characteristics[altitude];
                ret = await BleDevice.UnregisterValueNotificationAsync(alti_characteristic, OnAltitudeNotification);
            }

            return(ret);
        }
示例#9
0
        /// <summary>
        /// Stop notification on a specified barometer value
        /// </summary>
        /// <param name="value">Barometer to stop being notified</param>
        /// <returns>true if the operation succeeded, false otherwise</returns>
        public async Task <bool> StopNotification(BarometerValue value)
        {
            bool ret;

            // List characteristics
            ret = await InitCharacteristics();

            if (ret)
            {
                // Look for the selected characteristic
                BleGattCharacteristic baro_characteristic = _barometer_characteristics[value];
                ret = await BleDevice.UnregisterValueNotificationAsync(baro_characteristic, OnBarometerNotification);
            }

            return(ret);
        }
示例#10
0
        /// <summary>
        /// Read a specified variometer value
        /// </summary>
        /// <param name="value">Variometer value to read</param>
        /// <returns>true if the operation succeeded, false otherwise</returns>
        public async Task <ReadVariometerValueResult> ReadVariometerValue(VariometerValue value)
        {
            ReadVariometerValueResult ret = new ReadVariometerValueResult();

            // List characteristics
            ret.Success = await InitCharacteristics();

            if (ret.Success)
            {
                // Look for the selected characteristic
                BleValue val = new BleValue();
                BleGattCharacteristic vario_characteristic = _variometer_characteristics[value];
                ret.Success = await BleDevice.ReadValueAsync(vario_characteristic, val);

                if (ret.Success)
                {
                    switch (value)
                    {
                    case VariometerValue.Vario:
                    {
                        ret.VarioValue = val.ToInt16();
                        break;
                    }

                    case VariometerValue.Acceleration:
                    {
                        ret.AccelerationValue = val.ToUInt8();
                        break;
                    }

                    default:
                    {
                        ret.Success = false;
                        break;
                    }
                    }
                }
            }

            return(ret);
        }
示例#11
0
        /// <summary>
        /// Read a specified barometer value
        /// </summary>
        /// <param name="value">Barometer value to read</param>
        /// <returns>true if the operation succeeded, false otherwise</returns>
        public async Task <ReadBarometerValueResult> ReadBarometerValue(BarometerValue value)
        {
            ReadBarometerValueResult ret = new ReadBarometerValueResult();

            // List characteristics
            ret.Success = await InitCharacteristics();

            if (ret.Success)
            {
                // Look for the selected characteristic
                BleValue val = new BleValue();
                BleGattCharacteristic baro_characteristic = _barometer_characteristics[value];
                ret.Success = await BleDevice.ReadValueAsync(baro_characteristic, val);

                if (ret.Success)
                {
                    switch (value)
                    {
                    case BarometerValue.Pressure:
                    {
                        ret.PressureValue = val.ToUInt32();
                        break;
                    }

                    case BarometerValue.Temperature:
                    {
                        ret.TemperatureValue = val.ToInt16();
                        break;
                    }

                    default:
                    {
                        ret.Success = false;
                        break;
                    }
                    }
                }
            }

            return(ret);
        }
示例#12
0
 /// <summary>
 /// Called when a navigation value is being notified
 /// </summary>
 /// <param name="characteristic">Characteristic which notified the value</param>
 /// <param name="value">New characteristic value</param>
 private void OnNavigationNotification(BleGattCharacteristic characteristic, BleValue value)
 {
     if (characteristic.Guid == SpeedGuid)
     {
         SpeedChanged?.Invoke(value.ToUInt16());
     }
     else if (characteristic.Guid == LatitudeGuid)
     {
         LatitudeChanged?.Invoke(value.ToFloat64());
     }
     else if (characteristic.Guid == LongitudeGuid)
     {
         LongitudeChanged?.Invoke(value.ToFloat64());
     }
     else if (characteristic.Guid == TrackAngleGuid)
     {
         TrackAngleChanged?.Invoke(value.ToUInt16());
     }
     else
     {
     }
 }
示例#13
0
        /// <summary>
        /// Read a specified altitude value
        /// </summary>
        /// <param name="altitude">Altitude to read</param>
        /// <returns>true if the operation succeeded, false otherwise</returns>
        public async Task <ReadAltitudeResult> ReadAltitude(Altitude altitude)
        {
            ReadAltitudeResult ret = new ReadAltitudeResult();

            // List characteristics
            ret.Success = await InitCharacteristics();

            if (ret.Success)
            {
                // Look for the selected characteristic
                BleValue val = new BleValue();
                BleGattCharacteristic alti_characteristic = _altitude_characteristics[altitude];
                ret.Success = await BleDevice.ReadValueAsync(alti_characteristic, val);

                if (ret.Success)
                {
                    ret.Value = val.ToInt16();
                }
            }

            return(ret);
        }
示例#14
0
        private void OnNotification(BleGattCharacteristic characteristic, BleValue value)
        {
            string val = value.ToString();

            val += "";
        }
示例#15
0
        /// <summary>
        /// Get the Open Vario device identification information
        /// </summary>
        /// <returns>Identification information if the operation succeeded, null otherwise</returns>
        public async Task <IdentificationInfo> GetIdentificationInfo()
        {
            // Check if identification information has already been retrieved
            if (_identification_info == null)
            {
                // List characteristics
                await ListCharacteristics();

                // Look for the command and identification information characteristics
                bool found = true;
                BleGattCharacteristic command_char = null;
                BleGattCharacteristic info_char    = null;
                try
                {
                    command_char = BleCharacteristics[CommandGuid];
                    info_char    = BleCharacteristics[IdentificationInfoGuid];
                }
                catch (KeyNotFoundException)
                {
                    found = false;
                }
                if (found)
                {
                    // Read identification information
                    bool     success  = true;
                    BleValue read_val = new BleValue();
                    _identification_info = new IdentificationInfo();
                    success = success && await BleDevice.WriteValueAsync(command_char, new BleValue((byte)0u));

                    success = success && await BleDevice.ReadValueAsync(info_char, read_val);

                    if (success)
                    {
                        _identification_info.GattVersion = read_val.ToString();
                    }
                    success = success && await BleDevice.WriteValueAsync(command_char, new BleValue((byte)1u));

                    success = success && await BleDevice.ReadValueAsync(info_char, read_val);

                    if (success)
                    {
                        _identification_info.SoftwareVersion = read_val.ToString();
                    }
                    success = success && await BleDevice.WriteValueAsync(command_char, new BleValue((byte)2u));

                    success = success && await BleDevice.ReadValueAsync(info_char, read_val);

                    if (success)
                    {
                        _identification_info.SoftwareManufacturerName = read_val.ToString();
                    }
                    success = success && await BleDevice.WriteValueAsync(command_char, new BleValue((byte)3u));

                    success = success && await BleDevice.ReadValueAsync(info_char, read_val);

                    if (success)
                    {
                        _identification_info.HardwareVersion = read_val.ToString();
                    }
                    success = success && await BleDevice.WriteValueAsync(command_char, new BleValue((byte)4u));

                    success = success && await BleDevice.ReadValueAsync(info_char, read_val);

                    if (success)
                    {
                        _identification_info.HardwareManufacturerName = read_val.ToString();
                    }
                    success = success && await BleDevice.WriteValueAsync(command_char, new BleValue((byte)5u));

                    success = success && await BleDevice.ReadValueAsync(info_char, read_val);

                    if (success)
                    {
                        _identification_info.HardwareSerialNumber = read_val.ToString();
                    }
                    success = success && await BleDevice.WriteValueAsync(command_char, new BleValue((byte)6u));

                    success = success && await BleDevice.ReadValueAsync(info_char, read_val);

                    if (success)
                    {
                        _identification_info.HardwareManufacturingDate = read_val.ToString();
                    }
                    if (!success)
                    {
                        _identification_info = null;
                    }
                }
            }

            // Return a copy of the identification information
            IdentificationInfo identification_info = null;

            if (_identification_info != null)
            {
                identification_info = (_identification_info.Clone() as IdentificationInfo);
            }
            return(identification_info);
        }