/// <summary> /// Write message to the ublox reciver. /// </summary> /// <param name="message"></param> public bool WriteMessage(IMessageBase message) { byte[] messageArray = message.ToArray(); WriteReceiver(messageArray); if (message.IsAcknowledged) { int acknowledgeKey = new { Class = 0x05, Id = 0x01, MessageClass = messageArray[2], MessageId = messageArray[3] }.GetHashCode(); var stopwatch = new Stopwatch(); stopwatch.Start(); do { if (Acknowlagements.ContainsKey(acknowledgeKey)) { Acknowlagements.Remove(acknowledgeKey); return(true); } else { Task.Delay(10).Wait(); } } while (stopwatch.Elapsed < TimeSpan.FromSeconds(AcknowledgementTimeOut)); } return(false); }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void OnMessageReceived(object sender, MessageReceivedEventArgs args) { // Mark connected true if (!IsConnected) { IsConnected = true; } //Debug.WriteLine(ArrayExtensions.HexDump(args.Message)); if (args.MessageProtocol == MessageProtocol.UBX) { if (args.MessageType == typeof(GeodeticPosition)) { GeodeticPosition message = (GeodeticPosition)args.MessageResult; GeodeticSensorReading.Latitude = message.Latitude; GeodeticSensorReading.Longitude = message.Longitude; GeodeticSensorReading.TimeMillisOfWeek = (int)message.TimeMillisOfWeek; GeodeticSensorReading.VerticalAccuracy = message.VerticalAccuracy; GeodeticSensorReading.HorizontalAccuracy = message.HorizontalAccuracy; GeodeticSensorReading.HeightAboveEllipsoid = message.HeightAboveEllipsoid; GeodeticSensorReading.HeightAboveSeaLevel = message.HeightAboveSeaLevel; // Fire reading changed event GeodeticSensorChanged?.Invoke(this, GeodeticSensorReading); } else if (args.MessageType == typeof(Acknowledge)) { int key = new { Class = args.Message[2], Id = args.Message[3], MessageClass = args.Message[6], MessageId = args.Message[7] }.GetHashCode(); // Add acknowlagement Acknowlagements.Add(key, DateTime.Now); } else if (args.MessageType == typeof(NotAcknowledge)) { //int key = new { Class = args.Message[2], Id = args.Message[3], MessageClass = args.Message[6], MessageId = args.Message[7] }.GetHashCode(); //// Add not acknowlagement //_acknowlagements.Add(key, DateTime.Now); } else if (args.MessageType == typeof(ReceiverSoftware)) { ReceiverSoftware message = (ReceiverSoftware)args.MessageResult; SoftwareVersion = Encoding.ASCII.GetString(message.SoftwareVersion); HardwareVersion = Encoding.ASCII.GetString(message.HardwareVersion); } } }