123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- namespace InABox.DigitalMatter
- {
- public class DMBluetoothTagData : DMField
- {
- public override byte Type => 0x1E;
- public byte DataLength { get; set; }
- public byte LogReason { get; set; }
- public byte TagType { get; set; }
- public sbyte RSSI { get; set; }
- public uint TimeStamp { get; set; }
- public int Latitude { get; set; }
- public int Longitude { get; set; }
- public byte GPSAccuracy { get; set; }
- public DMBluetoothTag Tag { get; set; }
- public override bool IsValid()
- {
- return true;
- }
- protected override void DoDecode()
- {
- var header = TakeByte();
- DataLength = EncodeByte(DecodeByte(header, 0, 6));
- LogReason = EncodeByte(DecodeByte(header, 6, 2));
- TagType = TakeByte();
- RSSI = TakeInt8();
- TimeStamp = TakeUInt32();
- Latitude = TakeInt32();
- Longitude = TakeInt32();
- GPSAccuracy = TakeByte();
- var data = TakeBytes(DataLength);
- Tag = DMFactory.ParseBluetoothTag(TagType, data);
- }
- protected override void DoEncode()
- {
- AddByte(TagType);
- AddInt8(RSSI);
- AddUInt32(TimeStamp);
- AddInt32(Latitude);
- AddInt32(Longitude);
- AddByte(GPSAccuracy);
- var data = Tag.Encode();
- AddBytes(data);
- DataLength = (byte)data.Length;
- var header = EncodeByte(DecodeByte(DataLength, 0, 6));
- header = UpdateByte(header, 6, DecodeByte(LogReason, 0, 2));
- InsertByte(0, header);
- }
- public override string ToString()
- {
- return string.Format("{0} {1} {2:dd MMM yy hh-mm-ss} Lat: {3:F6} Lng: {4:F6} RSSI: {5}", Tag,
- LogReason == 1 ? "Found" : LogReason == 2 ? "Lost" : "Updated", TimeStampToDateTime(TimeStamp), (double)Latitude / 10000000.0F,
- (double)Longitude / 10000000.0F, RSSI);
- }
- }
- }
|