Skip to content

Instantly share code, notes, and snippets.

@marcwan
Created December 4, 2015 11:59
Show Gist options
  • Save marcwan/eb3760cee286e7026594 to your computer and use it in GitHub Desktop.
Save marcwan/eb3760cee286e7026594 to your computer and use it in GitHub Desktop.
A function to parse Eddystone TLM frames.
static let kEddystoneTLMFrameByteCount = 14;
static let EddystoneTLMFrameTypeID: UInt8 = 0x20
private func parseTelemetryFrame(telemetryFrame : NSData) {
let count = telemetryFrame.length
if count == ThisClassName.kEddystoneTLMFrameByteCount {
var frameType: UInt8 = 0
telemetryFrame.getBytes(&frameType, length: sizeof(UInt8))
if frameType != ThisClassName.EddystoneTLMFrameTypeID {
NSLog("This is not a TLM frame")
return
}
var tlmVersion: Int8 = 0
telemetryFrame.getBytes(&tlmVersion, range: NSMakeRange(1, sizeof(UInt8)))
if tlmVersion != 0 {
NSLog("Unknown TLM frame version")
return
}
var batteryVoltage: UInt16 = 0
telemetryFrame.getBytes(&batteryVoltage, range: NSMakeRange(2, sizeof(UInt16)))
batteryVoltage = UInt16(bigEndian: batteryVoltage)
// This is in 8.8 fixed point. Just have to divide by 256 to get the actual number.
var beaconTemperatureFixed: Int8 = 0
var beaconTemperatureFractional: UInt8 = 0
telemetryFrame.getBytes(&beaconTemperatureFixed, range: NSMakeRange(4, sizeof(Int8)))
telemetryFrame.getBytes(&beaconTemperatureFractional, range: NSMakeRange(5, sizeof(UInt8)))
let beaconTemperature = Float(beaconTemperatureFixed)
+ Float(beaconTemperatureFractional) / 256.0
var advertisingPDUCount: UInt32 = 0
telemetryFrame.getBytes(&advertisingPDUCount, range: NSMakeRange(6, sizeof(UInt32)))
advertisingPDUCount = UInt32(bigEndian: advertisingPDUCount)
var timeOnSincePowerOn: UInt32 = 0
telemetryFrame.getBytes(&timeOnSincePowerOn, range: NSMakeRange(10, sizeof(UInt32)))
timeOnSincePowerOn = UInt32(bigEndian: timeOnSincePowerOn)
NSLog("TLM Frame: voltage: %d temp: %f PDU count: %u time on: %u",
batteryVoltage, beaconTemperature, advertisingPDUCount, timeOnSincePowerOn)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment