Beispiel #1
0
        /// <summary>
        /// Bind the inquired GattDeviceService to send and receive data to and from the pen.
        /// (It is not used unless it is a special case.)
        /// </summary>
        /// <param name="gattDeviceServices">GattDeviceService found</param>
        /// <returns>True on success false on failure</returns>
        public async Task <bool> Bind(IReadOnlyList <GattDeviceService> gattDeviceServices)
        {
            Debug.WriteLine("Bind Try");
            try
            {
                foreach (var gds in gattDeviceServices)
                {
                    if (gds.Uuid.Equals(OldServiceUuidV2) || gds.Uuid.Equals(ServiceUuidV2))
                    {
                        gattDeviceService = gds;
                        mtuSize           = gattDeviceService.Session.MaxPduSize;
                        var result = await gds.GetCharacteristicsAsync();

                        if (result.Status == GattCommunicationStatus.Success)
                        {
                            var characteristics = result.Characteristics;

                            await InitCharacteristics(characteristics);

                            if (writeCharacteristic != null && indicateCharacteristic != null)
                            {
                                writeTask = Task.Run(GattSendDataTask);
                                PenController.PenClient = this;
                                PenController.Protocol  = Protocols.V2;
                                PenController.OnConnected();
                                return(true);
                            }
                            else
                            {
                                // TODO error
                                Debug.WriteLine("Bind cannot init Characteristics");
                            }
                        }
                        else
                        {
                            // todo error
                            Debug.WriteLine("Bind GattCommunicationStatus is not Success");
                        }

                        break;
                    }
                }
                return(false);
            }
            catch (Exception exp)
            {
                Debug.WriteLine("Bind Exception occured : " + exp.Message);
                return(false);
            }
        }