/// <summary>
        /// Initializes a ble service within the device
        /// </summary>
        /// <param name="device">The device to initialize</param>
        /// <param name="serviceUUID">The service to initialize</param>
        /// <returns>True if the intialization is successfull. False in any other case</returns>
        public async Task <bool> InitializeBLEServicesAsync(Device device, string serviceUUID)
        {
            try
            {
                Log.Debug(LOG_TAG, "InitializeBLEServicesAsync : trying to initialize services for device " + device.ToString() + " service=[" + serviceUUID + "]");

                InitializeBlueTooth();

                // if ConnectedDevice is NULL we try to (re)Register the device
                if (this.ConnectedDevice == null)
                {
                    // if it's still not OK, then we return
                    if (!RegisterDeviceAsync(device).Result)
                    {
                        return(false);
                    }
                }

                Guid?serviceGuid = Utils.AsGuid(serviceUUID);
                if (!serviceGuid.HasValue)
                {
                    Log.Debug(LOG_TAG, "InitializeBLEServicesAsync: " + nameof(serviceGuid) + " is NULL");
                    return(false);
                }

                // Workaround (to let the Bluetooth GATT discover the services)
                await Task.Delay(1500);

                // connection
                this.UARTService = await this.ConnectedDevice.GetServiceAsync(serviceGuid.Value);

                // Workaround (to let the Bluetooth GATT discover the services)
                await Task.Delay(1500);

                if (this.UARTService == null)
                {
                    Log.Debug(LOG_TAG, "InitializeBLEServicesAsync: " + nameof(this.UARTService) + " is NULL");
                    return(false);
                }

                Log.Debug(LOG_TAG, "InitializeBLEServicesAsync: Service connection successfull");
                return(true);
            }
            catch (Exception e)
            {
                DisposeAll();
                Log.Error(LOG_TAG, "InitializeBLEServicesAsync: " + e);
                return(false);
            }
        }
        /// <summary>
        /// Register the bluetooth device and connects to it
        /// </summary>
        /// <param name="device">The device to register</param>
        /// <returns>True if the registration is successfull. False in any other case</returns>
        public async Task <bool> RegisterDeviceAsync(Device device)
        {
            try
            {
                Log.Debug(LOG_TAG, "RegisterDevice: trying to register device " + device.ToString());

                InitializeBlueTooth();

                // converting our device Id in Guid
                Guid?deviceGuid = Utils.AsGuid(device.Id, /*this.appSettings.DEVICE_GUID_FORMAT*/ "00000000-0000-0000-0000-{0}");
                if (!deviceGuid.HasValue)
                {
                    Log.Debug(LOG_TAG, "RegisterDeviceAsync: " + nameof(deviceGuid) + " is NULL");
                    return(false);
                }

                // connection
                this.ConnectedDevice = await this.Adapter.ConnectToKnownDeviceAsync(deviceGuid.Value);

                if (this.ConnectedDevice == null)
                {
                    Log.Debug(LOG_TAG, "RegisterDeviceAsync: " + nameof(this.ConnectedDevice) + " is NULL");
                    return(false);
                }

                Log.Debug(LOG_TAG, "RegisterDeviceAsync: Connection successfull");
                return(true);
            }
            catch (DeviceConnectionException e)
            {
                DisposeAll();
                Log.Error(LOG_TAG, "RegisterDeviceAsync.DeviceConnectionException: " + e);
                return(false);
            }
            catch (Exception e)
            {
                DisposeAll();
                Log.Error(LOG_TAG, "RegisterDeviceAsync.Exception: " + e);
                return(false);
            }
        }
        /// <summary>
        /// Register the bluetooth device and disconnects from it
        /// </summary>
        /// <returns>True if the unregistration is successfull. False in any other case</returns>
        public void UnregisterDevice(Device device)
        {
            // try to disose all (only if the service state allows it)
            Xamarin.Forms.Device.StartTimer(TimeSpan.FromMinutes(/*AppSettings.MEASURE_SERVICE_RETRY_DEFAULT_TIME*/ 1), () =>
            {
                switch (this.MeasureServiceState)
                {
                case MeasureServiceState.OFF:
                case MeasureServiceState.REFUSED_DATA_THEN_WAIT:
                case MeasureServiceState.WAITING_DATA:
                    this.DisposeAll();
                    return(false);

                // receiving data. We could not dispose for the moment
                case MeasureServiceState.RECEIVING_DATA:
                default:
                    Log.Debug(LOG_TAG, GetType() + ".UnregisterDevice is reported because data is being received");
                    return(true);
                }
            });
        }