Ejemplo n.º 1
0
        private void PacketReceived(ThunderboltPacket packet)
        {
            if (packet.IsPacketValid)
            {
                if (packet.ID == 0x8F && packet.Data.Count == 17 && packet.Data[0] == 0xAB)
                {
                    int    timeOfWeek = packet.Data[1] << 24 | packet.Data[2] << 16 | packet.Data[3] << 8 | packet.Data[4];
                    ushort weekNumber = (ushort)(packet.Data[5] << 8 | packet.Data[6]);
                    short  utcOffset  = (short)(packet.Data[7] << 8 | packet.Data[8]);

                    // The Thunderbolt can take up to 12.5 minutes to receive the UTC offset
                    if (utcOffset == 0)
                    {
                        Log?.Invoke("Thunderbolt has not yet recieved UTC offset.", LogLevel.Error);
                        return;
                    }

                    // Current epoch for GPS week numbers is the morning of 22/8/1999
                    DateTime dateTime = new DateTime(1999, 8, 22, 0, 0, 0);

                    dateTime = dateTime.AddDays(7 * weekNumber);
                    dateTime = dateTime.AddSeconds(timeOfWeek);

                    dateTime = dateTime.AddSeconds(-utcOffset);

                    TimeAvailable?.Invoke(dateTime);
                }
            }
            else
            {
                Log?.Invoke("An invalid packet was received.", LogLevel.Warning);
            }
        }
Ejemplo n.º 2
0
        private void SentenceReceived(NMEASentence sentence)
        {
            if (sentence.IsSentenceValid)
            {
                if (sentence.Talker == "GP" && sentence.MessageType == "RMC")
                {
                    string timeString = sentence.Data[0];
                    int    hour       = int.Parse(timeString.Substring(0, 2));
                    int    minute     = int.Parse(timeString.Substring(2, 2));
                    int    second     = int.Parse(timeString.Substring(4, 2));

                    string dateString = sentence.Data[8];
                    int    day        = int.Parse(dateString.Substring(0, 2));
                    int    month      = int.Parse(dateString.Substring(2, 2));
                    int    year       = 2000 + int.Parse(dateString.Substring(4, 2));

                    TimeAvailable?.Invoke(new DateTime(year, month, day, hour, minute, second));
                }
            }
            else
            {
                Log?.Invoke("An invalid packet was received.", LogLevel.Warning);
            }
        }