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); }
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; } } } } } }