示例#1
0
        public bool GetFeatures()
        {
            stage = 4;
            int Res = Client.ReadCharacteristics(UEIservice, wclGattOperationFlag.goReadFromDevice, out Characteristics);

            if (Res != wclErrors.WCL_E_SUCCESS || Characteristics == null)
            {
                return(false);
            }

            stage = 5;
            int flags = 0;

            foreach (wclGattCharacteristic Character in Characteristics)
            {
                String s;
                if (Character.Uuid.IsShortUuid)
                {
                    s = Character.Uuid.ShortUuid.ToString("X4");
                }
                else
                {
                    s = Character.Uuid.LongUuid.ToString();
                }
                if (s.Equals("FFE1"))
                {
                    WriteCh = Character;
                    flags  |= 1;
                }
                else if (s.Equals("FFE2"))
                {
                    ReadCh = Character;
                    flags |= 2;
                }
            }
            if (flags != 3)
            {
                return(false);
            }

            stage = 6;
            Res   = Client.ReadDescriptors(ReadCh, wclGattOperationFlag.goReadFromDevice, out Descriptors);
            if (Res != wclErrors.WCL_E_SUCCESS || Descriptors == null)
            {
                return(false);
            }

            stage = 7;
            foreach (wclGattDescriptor Descriptor in Descriptors)
            {
                String s;
                if (Descriptor.Uuid.IsShortUuid)
                {
                    s = Descriptor.Uuid.ShortUuid.ToString("X4");
                }
                else
                {
                    s = Descriptor.Uuid.LongUuid.ToString();
                }
                if (s.Equals("2902"))
                {
                    hasCCCD        = true;
                    CCCDdescriptor = Descriptor;
                }
                else if (s.Equals("2901"))
                {
                    ReadChUserDesc = Descriptor;
                }
            }

            stage = 8;
            Res   = Client.ReadDescriptors(WriteCh, wclGattOperationFlag.goReadFromDevice, out Descriptors);
            if (Res != wclErrors.WCL_E_SUCCESS || Descriptors == null)
            {
                return(false);
            }
            foreach (wclGattDescriptor Descriptor in Descriptors)
            {
                String s;
                if (Descriptor.Uuid.IsShortUuid)
                {
                    s = Descriptor.Uuid.ShortUuid.ToString("X4");
                }
                else
                {
                    s = Descriptor.Uuid.LongUuid.ToString();
                }
                if (s.Equals("2901"))
                {
                    WriteChUserDesc = Descriptor;
                }
            }

            stage = 9;
            Subscribe(true);
            Client.OnCharacteristicChanged += Client_OnCharacteristicChanged;
            return(true);
        }
示例#2
0
        private void GetService()
        {
            _fServices = null;

            var resServices = _client.ReadServices(wclGattOperationFlag.goNone, out _fServices);

            if (resServices != wclErrors.WCL_E_SUCCESS)
            {
                MessageBox.Show("Error: 0x" + resServices.ToString("X8"), "Error", MessageBoxButtons.OK,
                                MessageBoxIcon.Error);
                TraceEvent(_client.Address, "Services", "FF00", "Failed");
                _client.Disconnect();
                return;
            }

            TraceEvent(_client.Address, "Services", "FF00", "Success");
            if (_fServices == null)
            {
                return;
            }

            foreach (var service in _fServices)
            {
                if (service.Uuid.IsShortUuid)
                {
                    if (_uuid.ShortUuid == service.Uuid.ShortUuid)
                    {
                        var resChar = _client.ReadCharacteristics(service, wclGattOperationFlag.goNone,
                                                                  out _fCharacteristics);
                        if (resChar != wclErrors.WCL_E_SUCCESS)
                        {
                            return;
                        }

                        foreach (var character in _fCharacteristics)
                        {
                            if (character.Uuid.ShortUuid == _rxUuid)
                            {
                                var resSubs = _client.Subscribe(character);
                                if (resSubs != wclErrors.WCL_E_SUCCESS)
                                {
                                    TraceEvent(_client.Address, "Subs", "RX", "Failed");
                                    return;
                                }
                                else
                                {
                                    TraceEvent(_client.Address, "Subs", "RX", "Success");
                                    var resReadDesc = _client.ReadDescriptors(character, wclGattOperationFlag.goNone,
                                                                              out _fDescriptors);
                                    if (resReadDesc != wclErrors.WCL_E_SUCCESS)
                                    {
                                        TraceEvent(_client.Address, "Subs", "RX", "Failed to get description");
                                        return;
                                    }
                                }
                            }
                            else if (character.Uuid.ShortUuid == _txUuid)
                            {
                                _txCharacteristic = character;
                            }
                        }
                    }
                }
            }
        }