/// <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); }