1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- using System.Collections.Generic;
- namespace InABox.DigitalMatter
- {
- public enum GPSStatus
- {
- Valid,
- ThreeDimensional,
- NoSignal
- }
- public class DMGPSField : DMField
- {
- public override byte Type => 0x00;
- public uint TimeStamp { get; set; }
- public int Latitude { get; set; }
- public int Longitude { get; set; }
- public short Altitude { get; set; }
- public ushort Speed { get; set; }
- public byte SpeedAccuracy { get; set; }
- public byte Heading { get; set; }
- public byte PDOP { get; set; }
- public byte GPSAccuracy { get; set; }
- public byte Status { get; set; }
- public GPSStatus[] StatusFlags()
- {
- var result = new List<GPSStatus>();
- var flags = IDMBuffer.DecodeByte(Status, 1, 8);
- if (flags[0])
- result.Add(GPSStatus.Valid);
- if (flags[1])
- result.Add(GPSStatus.ThreeDimensional);
- if (flags[2])
- result.Add(GPSStatus.NoSignal);
- return result.ToArray();
- }
- public override bool IsValid()
- {
- return Status != 0;
- }
- public override string ToString()
- {
- return string.Format("{0:dd MMM yy hh-mm-ss} Lat: {1:F6} Lng: {2:F6} Status: {3}", TimeStampToDateTime(TimeStamp),
- (double)Latitude / 10000000.0F, (double)Longitude / 10000000.0F, string.Join(",", StatusFlags()));
- }
- protected override void DoDecode(IDMReadBuffer buffer)
- {
- TimeStamp = buffer.TakeUInt32();
- Latitude = buffer.TakeInt32();
- Longitude = buffer.TakeInt32();
- Altitude = buffer.TakeInt16();
- Speed = buffer.TakeByte();
- SpeedAccuracy = buffer.TakeByte();
- Heading = buffer.TakeByte();
- PDOP = buffer.TakeByte();
- GPSAccuracy = buffer.TakeByte();
- Status = buffer.TakeByte();
- }
- protected override void DoEncode(IDMWriteBuffer buffer)
- {
- buffer.AddUInt32(TimeStamp);
- buffer.AddInt32(Latitude);
- buffer.AddInt32(Longitude);
- buffer.AddInt16(Altitude);
- buffer.AddUInt16(Speed);
- buffer.AddByte(SpeedAccuracy);
- buffer.AddByte(Heading);
- buffer.AddByte(PDOP);
- buffer.AddByte(GPSAccuracy);
- buffer.AddByte(Status);
- }
- }
- }
|