internal Task <bool> WriteValueAsyncTask(BluetoothGattAttributeHandle handle)
        {
            TaskCompletionSource <bool> tcs = new TaskCompletionSource <bool>();

            Interop.Bluetooth.BtGattClientRequestCompletedCallback cb = (result, requestHandle, userData) =>
            {
                if (result == (int)BluetoothError.None)
                {
                    tcs.SetResult(true);
                }
                else
                {
                    tcs.SetResult(false);
                }
            };

            int err = Interop.Bluetooth.BtGattClientWriteValue(handle, cb, IntPtr.Zero);

            if (err.IsFailed())
            {
                GattUtil.Error(err, "Failed to write value to remote device");
                tcs.SetResult(false);
                BluetoothErrorFactory.ThrowBluetoothException(err);
            }
            return(tcs.Task);
        }
        internal BluetoothGattProperty GetProperties()
        {
            int properties = 0;
            int err        = Interop.Bluetooth.BtGattCharacteristicGetProperties(_handle, out properties);

            GattUtil.Error(err, "Failed to get characteristic properties");
            return((BluetoothGattProperty)properties);
        }
        internal void RegisterGattService(BluetoothGattServer server, BluetoothGattService service)
        {
            int err = Interop.Bluetooth.BtGattServerRegisterService(_handle, service.GetHandle());

            GattUtil.ThrowForError(err, "Failed to Register service");

            service.SetParent(server);
        }
        internal BluetoothGattWriteType GetWriteType()
        {
            int writeType;
            int err = Interop.Bluetooth.BtGattCharacteristicGetWriteType(_handle, out writeType);

            GattUtil.Error(err, "Failed to get characteristic writetype");
            return((BluetoothGattWriteType)writeType);
        }
        internal void UnregisterGattService(BluetoothGattService service)
        {
            int err = Interop.Bluetooth.BtGattServerUnregisterService(_handle, service.GetHandle());

            GattUtil.ThrowForError(err, "Failed to Unregister service");

            service.UnregisterService();
        }
        internal float GetValue(FloatDataType type, int offset)
        {
            float value;
            int   err = Interop.Bluetooth.BtGattGetFloatValue(_handle, (int)type, offset, out value);

            GattUtil.Error(err, "Failed to get attribute float value at offset");
            return(value);
        }
        internal BluetoothGattServerImpl()
        {
            int err = Interop.Bluetooth.BtGattServerInitialize();

            GattUtil.ThrowForError(err, "Failed to initialize server");

            err = Interop.Bluetooth.BtGattServerCreate(out _handle);
            GattUtil.ThrowForError(err, "Failed to create server");
        }
        internal string GetUuid()
        {
            string uuid;
            int    err = Interop.Bluetooth.BtGattGetUuid(_handle, out uuid);

            GattUtil.Error(err, "Failed to get attribute uuid");

            return(uuid);
        }
        internal string GetRemoteAddress()
        {
            string remoteAddress;
            int    err = Interop.Bluetooth.BtGattClientGetRemoteAddress(_handle, out remoteAddress);

            GattUtil.ThrowForError(err, "Failed to get remote address for this client");

            return(remoteAddress);
        }
Beispiel #10
0
        internal void SetAttMtu(int mtu)
        {
            int err = Interop.Bluetooth.BtGattClientSetAttMtu(_handle, mtu);

            if (err.IsFailed())
            {
                GattUtil.Error(err, "Failed to set MTU value");
                BluetoothErrorFactory.ThrowBluetoothException(err);
            }
        }
Beispiel #11
0
        /// <summary>
        /// Sets the string value as a specified offset.
        /// </summary>
        /// <param name="value">value to set</param>
        /// <exception cref="InvalidOperationException">Throws exception if the value is null.</exception>
        /// <since_tizen> 3 </since_tizen>
        public void SetValue(string value)
        {
            if (string.IsNullOrEmpty(value))
            {
                GattUtil.ThrowForError((int)BluetoothError.InvalidParameter, "value should not be null");
            }

            byte[] val = Encoding.UTF8.GetBytes(value);
            Impl.SetValue(val);
        }
        internal byte[] GetValue()
        {
            IntPtr nativeValue;
            int    nativeValueLength;
            int    err = Interop.Bluetooth.BtGattGetValue(_handle, out nativeValue, out nativeValueLength);

            GattUtil.Error(err, "Failed to get attribute value");

            return(GattUtil.IntPtrToByteArray(nativeValue, nativeValueLength));
        }
Beispiel #13
0
        internal int GetAttMtu(string clientAddress)
        {
            int err = Interop.Bluetooth.BtGattServerGetDeviceMtu(clientAddress, out int mtu);

            if (err.IsFailed())
            {
                GattUtil.Error(err, "Failed to get MTU value");
                BluetoothErrorFactory.ThrowBluetoothException(err);
            }
            return(mtu);
        }
Beispiel #14
0
        internal BluetoothGattServerImpl()
        {
            _sendIndicationCallback = SendIndicationCallback;

            int err = Interop.Bluetooth.BtGattServerInitialize();

            GattUtil.ThrowForError(err, "Failed to initialize server");

            err = Interop.Bluetooth.BtGattServerCreate(out _handle);
            GattUtil.ThrowForError(err, "Failed to create server");
        }
Beispiel #15
0
        internal int GetAttMtu()
        {
            int err = Interop.Bluetooth.BtGattClientGetAttMtu(_handle, out int mtu);

            if (err.IsFailed())
            {
                GattUtil.Error(err, "Failed to get MTU value");
                BluetoothErrorFactory.ThrowBluetoothException(err);
            }
            return(mtu);
        }
        internal static BluetoothGattService CreateBluetoothGattService(BluetoothGattAttributeHandle handle, string uuid)
        {
            if (uuid == "")
            {
                int err = Interop.Bluetooth.BtGattGetUuid(handle, out uuid);
                GattUtil.ThrowForError(err, "Failed to get UUID");
            }

            BluetoothGattServiceImpl impl = new BluetoothGattServiceImpl(handle);

            return(new BluetoothGattService(impl, uuid));
        }
 internal BluetoothGattClientImpl(string remoteAddress)
 {
     if (BluetoothAdapter.IsBluetoothEnabled)
     {
         int err = Interop.Bluetooth.BtGattClientCreate(remoteAddress, out _handle);
         GattUtil.ThrowForError(err, "Failed to get native client handle");
     }
     else
     {
         BluetoothErrorFactory.ThrowBluetoothException((int)BluetoothError.NotEnabled);
     }
 }
        internal BluetoothGattDescriptor GetDescriptor(BluetoothGattCharacteristic characteristic, string uuid)
        {
            BluetoothGattAttributeHandle handle;
            int err = Interop.Bluetooth.BtGattCharacteristicGetDescriptor(_handle, uuid, out handle);

            if (err.IsFailed())
            {
                GattUtil.Error(err, string.Format("Failed to get descriptor with UUID ({0})", uuid));
                return(null);
            }
            BluetoothGattDescriptor descriptor = BluetoothGattDescriptorImpl.CreateBluetoothGattDescriptor(handle, uuid);

            descriptor.SetParent(characteristic);
            return(descriptor);
        }
        internal BluetoothGattCharacteristic GetCharacteristic(BluetoothGattService service, string uuid)
        {
            BluetoothGattAttributeHandle attributeHandle;
            int err = Interop.Bluetooth.BtGattServiceGetCharacteristic(_handle, uuid, out attributeHandle);

            if (err.IsFailed())
            {
                GattUtil.Error(err, string.Format("Failed to get Characteristic with UUID ({0})", uuid));
                return(null);
            }

            BluetoothGattCharacteristic Characteristic = BluetoothGattCharacteristicImpl.CreateBluetoothGattGattCharacteristic(attributeHandle, uuid);

            Characteristic.SetParent(service);
            return(Characteristic);
        }
        internal BluetoothGattService GetService(BluetoothGattServer server, string uuid)
        {
            BluetoothGattAttributeHandle serviceHandle;
            int err = Interop.Bluetooth.BtGattServerGetService(_handle, uuid, out serviceHandle);

            if (err.IsFailed())
            {
                GattUtil.Error(err, string.Format("Failed to get service with UUID ({0})", uuid));
                return(null);
            }

            BluetoothGattService service = new BluetoothGattService(new BluetoothGattServiceImpl(serviceHandle), uuid);;

            service.SetParent(server);
            return(service);
        }
        internal static BluetoothGattDescriptor CreateBluetoothGattDescriptor(BluetoothGattAttributeHandle handle, string uuid)
        {
            int permission;
            int err = Interop.Bluetooth.BtGattDescriptorGetPermissions(handle, out permission);

            GattUtil.ThrowForError(err, string.Format("Failed to get permissions with UUID ({0})", uuid));

            if (uuid == "")
            {
                int ret = Interop.Bluetooth.BtGattGetUuid(handle, out uuid);
                GattUtil.ThrowForError(ret, "Failed to get UUID");
            }

            BluetoothGattDescriptorImpl impl = new BluetoothGattDescriptorImpl(handle);

            return(new BluetoothGattDescriptor(impl, uuid, (BluetoothGattPermission)permission));
        }
        internal static BluetoothGattCharacteristic CreateBluetoothGattGattCharacteristic(BluetoothGattAttributeHandle handle, string uuid)
        {
            int permission;
            int err = Interop.Bluetooth.BtGattCharacteristicGetPermissions(handle, out permission);

            GattUtil.ThrowForError(err, "Failed to get permissions");

            if (uuid == "")
            {
                err = Interop.Bluetooth.BtGattGetUuid(handle, out uuid);
                GattUtil.ThrowForError(err, "Failed to get UUID");
            }

            BluetoothGattCharacteristicImpl impl = new BluetoothGattCharacteristicImpl(handle);

            return(new BluetoothGattCharacteristic(impl, uuid, (BluetoothGattPermission)permission));
        }
        internal Task <bool> SendIndicationAsync(BluetoothGattServer server, BluetoothGattCharacteristic characteristic, string clientAddress)
        {
            TaskCompletionSource <bool> tcs = new TaskCompletionSource <bool>();

            Interop.Bluetooth.BtGattServerNotificationSentCallback cb = (result, address, serverHandle, characteristicHandle, completed, userData) =>
            {
                _notificationSent?.Invoke(characteristic, new NotificationSentEventArg(server, address, result, completed));
                if (completed)
                {
                    tcs.SetResult(true);
                }
            };

            int err = Interop.Bluetooth.BtGattServerNotify(characteristic.GetHandle(), cb, clientAddress, IntPtr.Zero);

            GattUtil.ThrowForError(err, string.Format("Failed to send value changed indication for characteristic uuid {0}", characteristic.Uuid));

            return(tcs.Task);
        }
        internal IEnumerable <BluetoothGattDescriptor> GetDescriptors(BluetoothGattCharacteristic characteristic)
        {
            List <BluetoothGattDescriptor> attribututeList = new List <BluetoothGattDescriptor>();

            Interop.Bluetooth.BtGattForeachCallback cb = (total, index, attributeHandle, userData) =>
            {
                BluetoothGattAttributeHandle handle     = new BluetoothGattAttributeHandle(attributeHandle, false);
                BluetoothGattDescriptor      descriptor = BluetoothGattDescriptorImpl.CreateBluetoothGattDescriptor(handle, "");
                if (descriptor != null)
                {
                    descriptor.SetParent(characteristic);
                    attribututeList.Add(descriptor);
                }
                return(true);
            };

            int err = Interop.Bluetooth.BtGattCharacteristicForeachDescriptors(characteristic.GetHandle(), cb, IntPtr.Zero);

            GattUtil.Error(err, "Failed to get all descriptor");

            return(attribututeList);
        }
Beispiel #25
0
        internal Task <bool> WriteValueAsyncTask(BluetoothGattAttributeHandle handle)
        {
            TaskCompletionSource <bool> task = new TaskCompletionSource <bool>();
            int requestId = 0;

            lock (this)
            {
                requestId = _requestId++;
                _writeValueTaskSource[requestId] = task;
            }

            int err = Interop.Bluetooth.BtGattClientWriteValue(handle, _writeValueCallback, (IntPtr)requestId);

            if (err.IsFailed())
            {
                GattUtil.Error(err, "Failed to write value to remote device");
                task.SetResult(false);
                _writeValueTaskSource.Remove(requestId);
                BluetoothErrorFactory.ThrowBluetoothException(err);
            }
            return(task.Task);
        }
Beispiel #26
0
        internal IEnumerable <BluetoothGattService> GetIncludeServices(BluetoothGattService parentService)
        {
            List <BluetoothGattService> attribututeList = new List <BluetoothGattService>();

            _includedServiceForeachCallback = (total, index, attributeHandle, userData) =>
            {
                BluetoothGattAttributeHandle handle  = new BluetoothGattAttributeHandle(attributeHandle, false);
                BluetoothGattService         service = BluetoothGattServiceImpl.CreateBluetoothGattService(handle, "");
                if (service != null)
                {
                    service.SetParent(parentService);
                    attribututeList.Add(service);
                }
                return(true);
            };

            int err = Interop.Bluetooth.BtGattServiceForeachIncludedServices(parentService.GetHandle(), _includedServiceForeachCallback, IntPtr.Zero);

            GattUtil.Error(err, "Failed to get all services");

            return(attribututeList);
        }
Beispiel #27
0
        internal Task <bool> SendIndicationAsync(BluetoothGattServer server, BluetoothGattCharacteristic characteristic, string clientAddress)
        {
            TaskCompletionSource <bool> task = new TaskCompletionSource <bool>();
            int requestId = 0;

            lock (this)
            {
                requestId = _requestId++;
                _sendIndicationTaskSource[requestId] = task;
            }

            int err = Interop.Bluetooth.BtGattServerNotify(characteristic.GetHandle(), _sendIndicationCallback, clientAddress, (IntPtr)requestId);

            if (err.IsFailed())
            {
                GattUtil.Error(err, string.Format("Failed to send value changed indication for characteristic uuid {0}", characteristic.Uuid));
                task.SetResult(false);
                _sendIndicationTaskSource.Remove(requestId);
                BluetoothErrorFactory.ThrowBluetoothException(err);
            }
            return(task.Task);
        }
        internal IEnumerable <BluetoothGattService> GetServices(BluetoothGattServer server)
        {
            List <BluetoothGattService> attribututeList = new List <BluetoothGattService>();

            Interop.Bluetooth.BtGattForeachCallback cb = (total, index, attributeHandle, userData) =>
            {
                BluetoothGattAttributeHandle handle  = new BluetoothGattAttributeHandle(attributeHandle, false);
                BluetoothGattService         service = BluetoothGattServiceImpl.CreateBluetoothGattService(handle, "");;
                if (service != null)
                {
                    service.SetParent(server);
                    attribututeList.Add(service);
                }
                return(true);
            };

            int err = Interop.Bluetooth.BtGattServerForeachServices(_handle, cb, IntPtr.Zero);

            GattUtil.Error(err, "Failed to get all services");

            return(attribututeList);
        }
        internal IEnumerable <BluetoothGattCharacteristic> GetCharacteristics(BluetoothGattService service)
        {
            List <BluetoothGattCharacteristic> attribututeList = new List <BluetoothGattCharacteristic>();

            Interop.Bluetooth.BtGattForeachCallback cb = (total, index, attributeHandle, userData) =>
            {
                BluetoothGattAttributeHandle handle         = new BluetoothGattAttributeHandle(attributeHandle, false);
                BluetoothGattCharacteristic  Characteristic = BluetoothGattCharacteristicImpl.CreateBluetoothGattGattCharacteristic(handle, "");
                if (Characteristic != null)
                {
                    Characteristic.SetParent(service);
                    attribututeList.Add(Characteristic);
                }
                return(true);
            };

            int err = Interop.Bluetooth.BtGattServiceForeachCharacteristics(service.GetHandle(), cb, IntPtr.Zero);

            GattUtil.Error(err, "Failed to get all Characteristic");

            return(attribututeList);
        }
        internal void SetWriteValueRequestedEventCallback(Interop.Bluetooth.BtGattServerWriteValueRequestedCallback callback)
        {
            int err = Interop.Bluetooth.BtGattServerSetWriteValueRequestedCallback(_handle, callback, IntPtr.Zero);

            GattUtil.ThrowForError(err, "Failed to set attribute write value requested callback");
        }