Example #1
0
        private static LeAdvertisingEvent[] ParseAdvertisingReport(Queue <byte> data)
        {
            int numberOfEvents = data.Dequeue();
            var events         = new LeAdvertisingEvent[numberOfEvents];

            for (int i = 0; i < numberOfEvents; i++)
            {
                events[i] = LeAdvertisingEvent.Parse(data);
            }
            return(events);
        }
Example #2
0
 private static LeAdvertisingEvent[] ParseAdvertisingReport(Queue<byte> data)
 {
     int numberOfEvents = data.Dequeue();
     var events = new LeAdvertisingEvent[numberOfEvents];
     for (int i = 0; i < numberOfEvents; i++)
         events[i] = LeAdvertisingEvent.Parse(data);
     return events;
 }
Example #3
0
 /// <summary>
 /// Parse low energy advertising event to a beacon instance.
 /// </summary>
 /// <param name="e">The event.</param>
 /// <returns>The beacon or null in case of failure.</returns>
 internal static Beacon Parse(LeAdvertisingEvent e)
 {
     if (e.EventType == LeAdvertisingEventType.ScanRsp)
         return null;
     var payload = new Queue<byte>(e.Payload);
     while (payload.Count > 0)
     {
         var adLength = payload.Dequeue();
         if (payload.Count < adLength)
             break;
         var adType = payload.Dequeue();
         if (adType == 0xFF || adLength >= 26)
         {
             var companyId = (ushort)((payload.Dequeue() << 8) + payload.Dequeue());
             var b0advInd = payload.Dequeue();
             var b1advInd = payload.Dequeue();
             var uuid = payload.Dequeue(16);
             var major = (ushort)((payload.Dequeue() << 8) + payload.Dequeue());
             var minor = (ushort)((payload.Dequeue() << 8) + payload.Dequeue());
             var txPower = (sbyte)payload.Dequeue();
             return new Beacon
             {
                 Uuid = uuid.ToLittleEndianFormattedUuidString(),
                 Address = e.Address,
                 Major = major,
                 Minor = minor,
                 Rssi = e.Rssi,
                 CalibratedTxPower = txPower,
                 CompanyId = companyId
             };
         }
         else
         {
             if (adLength > 0)
                 payload.Dequeue(adLength - 1);
         }
     }
     return null;
 }
Example #4
0
 /// <summary>
 /// Parse low energy advertising event to a beacon instance.
 /// </summary>
 /// <param name="e">The event.</param>
 /// <returns>The beacon or null in case of failure.</returns>
 internal static Beacon Parse(LeAdvertisingEvent e)
 {
     if (e.EventType == LeAdvertisingEventType.ScanRsp)
         return null;
     if (e.Payload.Length < 9)
         return null;
     var payload = new Queue<byte>(e.Payload);
     var ad1Length = payload.Dequeue();
     var ad1Type = payload.Dequeue();
     var flags = payload.Dequeue();
     var ad2Length = payload.Dequeue();
     var ad2Type = payload.Dequeue();
     var companyId = (ushort)((payload.Dequeue() << 8) + payload.Dequeue());
     var b0advInd = payload.Dequeue();
     var b1advInd = payload.Dequeue();
     if (ad1Length != 2 || ad1Type != 0x01 || ad2Length < 26 || ad2Type != 0xFF)
         return null;
     var uuid = payload.Dequeue(16);
     var major = (ushort)((payload.Dequeue() << 8) + payload.Dequeue());
     var minor = (ushort)((payload.Dequeue() << 8) + payload.Dequeue());
     var txPower = (sbyte)payload.Dequeue();
     return new Beacon
     {
         Uuid = uuid.ToLittleEndianFormattedUuidString(),
         Address = e.Address,
         Major = major,
         Minor = minor,
         Rssi = e.Rssi,
         CalibratedTxPower = txPower,
         CompanyId = companyId
     };
 }