Skip to content

Commit

Permalink
Update Filtering Namespace | Ephemeral Identifier
Browse files Browse the repository at this point in the history
  • Loading branch information
sachinmobstac committed Oct 31, 2018
1 parent c3469d5 commit 6924cd3
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 35 deletions.
10 changes: 10 additions & 0 deletions EddystoneScanner/EddystoneRFC/Models/Beacon.swift
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ import CoreBluetooth
frameData: Data?,
rssi: Int,
name: String?,
namespaceFilter: String?,
filterType: RSSIFilterType) {
guard let frameData = frameData, frameData.count > 1 else {
return nil
Expand All @@ -127,6 +128,15 @@ import CoreBluetooth
}
beaconID = BeaconID(beaconType: .eddystone,
beaconID: Array(frameBytes[2..<18]))
if let filter = namespaceFilter {
if let namespace = beaconID.namespace?.hexString {
if filter != namespace {
return nil
}
} else {
return nil
}
}
} else {
guard frameBytes.count >= 10 else {
debugPrint("Frame Data for EID Frame unexpectedly truncated.")
Expand Down
14 changes: 12 additions & 2 deletions EddystoneScanner/EddystoneRFC/Models/BeaconID.swift
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public enum BeaconType {
/// 10 byte raw namespace data
///
@objc public var namespace: Array<UInt8>? {
guard beaconID.count >= 10 else {
guard beaconType == .eddystone else {
return nil
}
return Array(beaconID[..<10])
Expand All @@ -48,12 +48,22 @@ public enum BeaconType {
/// 6 byte raw namespace data
///
@objc public var instance: Array<UInt8>? {
guard beaconID.count >= 16 else {
guard beaconType == .eddystone else {
return nil
}
return Array(beaconID[10..<16])
}

///
/// 8 byte raw Ephemeral Identifier
///
@objc public var ephemeralIdentifier: Array<UInt8>? {
guard beaconType == .eddystoneEID else {
return nil
}
return Array(beaconID[..<8])
}

///
/// Base64 encoded string of the byte beacon ID data
///
Expand Down
32 changes: 1 addition & 31 deletions EddystoneScanner/Scanner.swift
Original file line number Diff line number Diff line change
Expand Up @@ -153,16 +153,6 @@ extension Scanner: CBCentralManagerDelegate {
return
}

if let filter = namespaceFilter {
if let namespace = beacon.beaconID.namespace?.hexString {
if filter != namespace {
return
}
} else {
return
}
}

beacon.updateBeacon(telemetryData: telemetryData, eddystoneURL: nil, rssi: RSSI.intValue)
self.nearbyBeacons.update(with: beacon)

Expand All @@ -177,20 +167,10 @@ extension Scanner: CBCentralManagerDelegate {
guard let index = nearbyBeacons.index(where: {$0.identifier == peripheral.identifier}) else {
// Newly discovered beacon. Create a new beacon object
let beaconServiceData = serviceData[Eddystone.ServiceUUID] as? Data
guard let beacon = Beacon(identifier: peripheral.identifier, frameData: beaconServiceData, rssi: RSSI.intValue, name: peripheral.name, filterType: rssiFilterType) else {
guard let beacon = Beacon(identifier: peripheral.identifier, frameData: beaconServiceData, rssi: RSSI.intValue, name: peripheral.name, namespaceFilter: namespaceFilter, filterType: rssiFilterType) else {
return
}

if let filter = namespaceFilter {
if let namespace = beacon.beaconID.namespace?.hexString {
if filter != namespace {
return
}
} else {
return
}
}

self.nearbyBeacons.insert(beacon)
self.delegate?.didFindBeacon(scanner: self, beacon: beacon)
return
Expand Down Expand Up @@ -222,16 +202,6 @@ extension Scanner: CBCentralManagerDelegate {
return
}

if let filter = namespaceFilter {
if let namespace = beacon.beaconID.namespace?.hexString {
if filter != namespace {
return
}
} else {
return
}
}

beacon.updateBeacon(telemetryData: nil, eddystoneURL: eddystoneURL, rssi: RSSI.intValue)
self.nearbyBeacons.update(with: beacon)

Expand Down
10 changes: 8 additions & 2 deletions SampleApp/BeaconTableViewCell.swift
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,15 @@ class BeaconTableViewCell: UITableViewCell {
self.batteryView.backgroundColor = batteryColor(forGreenAmount: batteryAmount)

guard let instance = beacon.beaconID.instance, let namespace = beacon.beaconID.namespace else {
guard let ephemeralIdentifier = beacon.beaconID.ephemeralIdentifier else {
self.beaconMac.text = "Instance | Namespace | Ephemeral Identifier not found"
self.beaconNamespace.text = "Instance | Namespace | Ephemeral Identifier not found"
self.beaconInstance.text = "Instance | Namespace | Ephemeral Identifier not found"
return
}
self.beaconMac.text = beacon.beaconID.description
self.beaconNamespace.text = "Namespace: Not found, maybe a EID frame"
self.beaconInstance.text = "Instance: Not found, maybe a EID frame"
self.beaconNamespace.text = "Ephemeral Identifier: \(ephemeralIdentifier)"
self.beaconInstance.text = "Instance: Should be decoded"
return
}

Expand Down

0 comments on commit 6924cd3

Please sign in to comment.