Example #1
0
 private partial IImmutableDictionary <Guid, ReadOnlyMemory <byte> > GetServiceData() =>
 args.Advertisement.GetSectionsByType(
     BluetoothLEAdvertisementDataTypes.ServiceData16BitUuids
     ).Concat(scanResponse?.GetSectionsByType(
                  BluetoothLEAdvertisementDataTypes.ServiceData16BitUuids
                  ) ?? Enumerable.Empty <BluetoothLEAdvertisementDataSection>())
 .Select(x => (ReadOnlyMemory <byte>)x.Data.ToArray())
 .ToImmutableDictionary(
     x => Uuid.From16(ReadUInt16LittleEndian(x.Slice(0, 2).Span)),
     x => x.Slice(2)
     ).AddRange(
     args.Advertisement.GetSectionsByType(
         BluetoothLEAdvertisementDataTypes.ServiceData32BitUuids
         ).Concat(scanResponse?.GetSectionsByType(
                      BluetoothLEAdvertisementDataTypes.ServiceData32BitUuids
                      ) ?? Enumerable.Empty <BluetoothLEAdvertisementDataSection>())
     .Select(x => (ReadOnlyMemory <byte>)x.Data.ToArray())
     .ToDictionary(
         x => Uuid.From32(ReadUInt32LittleEndian(x.Slice(0, 4).Span)),
         x => x.Slice(4)
         )
     ).AddRange(
     args.Advertisement.GetSectionsByType(
         BluetoothLEAdvertisementDataTypes.ServiceData128BitUuids
         ).Concat(scanResponse?.GetSectionsByType(
                      BluetoothLEAdvertisementDataTypes.ServiceData128BitUuids
                      ) ?? Enumerable.Empty <BluetoothLEAdvertisementDataSection>())
     .Select(x => (ReadOnlyMemory <byte>)x.Data.ToArray())
     .ToDictionary(
         x => new Guid(x.Slice(0, 16).ToArray()),
         x => x.Slice(16)
         )
     );