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(IDMReadBuffer buffer)
- {
- var header = buffer.TakeByte();
- DataLength = IDMBuffer.EncodeByte(IDMBuffer.DecodeByte(header, 0, 6));
- LogReason = IDMBuffer.EncodeByte(IDMBuffer.DecodeByte(header, 6, 2));
- TagType = buffer.TakeByte();
- RSSI = buffer.TakeInt8();
- TimeStamp = buffer.TakeUInt32();
- Latitude = buffer.TakeInt32();
- Longitude = buffer.TakeInt32();
- GPSAccuracy = buffer.TakeByte();
- var data = buffer.TakeBytes(DataLength);
- Tag = DMFactory.ParseBluetoothTag(TagType, data);
- }
- protected override void DoEncode(IDMWriteBuffer buffer)
- {
- buffer.AddByte(TagType);
- buffer.AddInt8(RSSI);
- buffer.AddUInt32(TimeStamp);
- buffer.AddInt32(Latitude);
- buffer.AddInt32(Longitude);
- buffer.AddByte(GPSAccuracy);
- var data = Tag.EncodeArray();
- buffer.AddBytes(data);
- DataLength = (byte)data.Length;
- var header = IDMBuffer.EncodeByte(IDMBuffer.DecodeByte(DataLength, 0, 6));
- header = IDMBuffer.UpdateByte(header, 6, IDMBuffer.DecodeByte(LogReason, 0, 2));
- buffer.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);
- }
- }
- }
|