/// <summary>
        /// Event raised when the bluettoth device notify a value change
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void OnCharacteristicValueChangeEvent(object sender, Plugin.BLE.Abstractions.EventArgs.CharacteristicUpdatedEventArgs e)
        {
            if (this.eventAggregator == null)
            {
                eventAggregator = (IEventAggregator)App.Current.Container.Resolve(typeof(IEventAggregator));
            }

            DialogBehaviourHolder beahaviour = FreeStyleLibreUtils.RespondToPacketBehaviour(e.Characteristic.Value);

            switch (beahaviour.ResponseType)
            {
            case PacketResponseType.Accept:
                eventAggregator.GetEvent <MeasureChangeEvent>().Publish(beahaviour.ReceivedData);
                this.MeasureServiceState = MeasureServiceState.RECEIVING_DATA;
                break;

            case PacketResponseType.AnswerBack:
                WriteCharacteristicAsync(MiaoMiaoProtocol.NRF_UART_RX, beahaviour.Response);
                break;

            case PacketResponseType.Refuse:
                this.MeasureServiceState = MeasureServiceState.REFUSED_DATA_THEN_WAIT;
                break;

            case PacketResponseType.Ignore:
            default:
                this.MeasureServiceState = MeasureServiceState.WAITING_DATA;
                break;
            }
        }
        /// <summary>
        /// This method analyzes the received data and determines what is the behaviour to react (Accept, answer, ignore, refuse)
        /// </summary>
        /// <param name="DialogProtocolHolder">Holds the </param>
        /// <returns></returns>
        public static DialogBehaviourHolder RespondToPacketBehaviour(byte[] packet)
        {
            DialogBehaviourHolder holder = new DialogBehaviourHolder();

            holder.ReceivedData = packet;

            // MIAOMIAO PROTOCOL
            if (packet.Length == 1 && packet[0] == 0x32)
            {
                byte[] resetallowNewSensorValue = new byte[2];
                byte[] frequency = new byte[2];
                byte[] ack       = new byte[1];

                // MIAOMIAO PROTOCOL
                resetallowNewSensorValue[0] = 0xD3;
                resetallowNewSensorValue[1] = 0x01;

                frequency[0] = 0xD1;
                frequency[1] = 0x01;

                holder.Response.Add(resetallowNewSensorValue);
                holder.Response.Add(frequency);
                holder.Response.Add(ack);

                holder.ResponseType = PacketResponseType.AnswerBack;
            }

            // MIAOMIAO PROTOCOL
            // received when the Miaomiao is not connected to the sensor
            else if (packet.Length == 1 && packet[0] == 0x34)
            {
                holder.ResponseType = PacketResponseType.Ignore;
            }

            // MIAOMIAO PROTOCOL
            // I don't know what to do with this ==> we will need to raise an error in this case
            // CAUTION : The behaviour should no be PacketResponseType.Ignore in this case
            else if (packet.Length == 2)
            {
                holder.ResponseType = PacketResponseType.Refuse;
            }

            // MIAOMIAO PROTOCOL
            // The data received is accepted. We will process it
            else
            {
                holder.ResponseType = PacketResponseType.Accept;
            }

            Log.Debug(LOG_TAG, $"FreeStyleLibreUtils.RespondToPacket : answer={holder.ResponseType}");
            return(holder);
        }