private async void OnSerialDeviceDiscovered(string id)
        {
            if (id.Contains("UART0"))
            {
                // LoRa device.
                _loraSerialDevice = SerialPortFactory.GetInstance().Create(SerialDeviceType.LoRa);
                await _loraSerialDevice.Create(id);

                if (false == _loraSerialDevice.IsConfigured)
                {
                    _loraSerialDevice.Configure(9600, 500, 500);
                    if (_loraSerialDevice.IsConfigured)
                    {
                        _loraSerialDevice.OnSerialDataEvent += OnLoraDataReceived;
                    }
                }
            }
            else
            {
                _bleSerialDevice = SerialPortFactory.GetInstance().Create(SerialDeviceType.BTLe);
                await _bleSerialDevice.Create(id);

                if (false == _bleSerialDevice.IsConfigured)
                {
                    _bleSerialDevice.Configure(9600, 3000, 500);
                    if (_bleSerialDevice.IsConfigured)
                    {
                        _bleSerialDevice.OnSerialDataEvent          += OnBleDataReceived;
                        _bleSerialDevice.OnSerialDeviceConnected    += OnBLEDeviceConnected;
                        _bleSerialDevice.OnSerialDeviceDisconnected += OnBLEDeviceDisconnected;
                    }
                }
            }
        }
        private void OnBleDataReceived(object sender, string data)
        {
            Debug.WriteLine(String.Format("Data received from BLE - {0}\n", data));
            // If data from BLE is received, we have to send it to LoRa device.
            if (null != _loraSerialDevice)
            {
                if (_loraSerialDevice.IsConfigured == false)
                {
                    _loraSerialDevice.Configure(9600, 3000, 500);
                }

                // Try to parse the value received.

                double currentBPM = 0;
                if (double.TryParse(data, out currentBPM))
                {
                    _pulseData.Add(currentBPM);
                    if (_pulseData.Count == MAX_PULSE_COUNT)
                    {
                        double average = _pulseData.Average();
                        _criticalRate.Add(average);

                        if (_criticalRate.Count == MAX_CRITICAL_RATE)
                        {
                            double averageCriticalRate = _criticalRate.Average();
                            _loraSerialDevice.Send(String.Format("\r\nLoc - {0}\r\n,C.BPM - {1}\r\n, C.Pulse Status - {2}\r\n. Av.BPM - {3}\r\n", LOCATION, (int)average, ConvertToPulseStatus(average, true), ConvertToPulseStatus(averageCriticalRate, true)));
                            _criticalRate.Clear();
                        }
                        else
                        {
                            _loraSerialDevice.Send(String.Format("\r\nLoc- {0}\r\n,C.BPM - {1}\r\n,C.Pulse Status - {2}\r\n", LOCATION, (int)average, ConvertToPulseStatus(average, false)));
                        }

                        _pulseData.Clear();
                        _pulseData.Add(average);
                    }
                }
            }
        }