UNPKG

@iotile/iotile-device

Version:

A typescript library for interfacing with IOTile BLE devices

85 lines 3.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const iotile_common_1 = require("@iotile/iotile-common"); const advertisements_1 = require("./advertisements"); class IOTileAdvertisementService { constructor() { } processAdvertisement(connectionID, rssi, rawAdvert) { let advert; if (rawAdvert instanceof ArrayBuffer) { advert = advertisements_1.Advertisement.FromAndroid(rawAdvert); } else { advert = advertisements_1.Advertisement.FromIOS(rawAdvert); } if (advert.containsService(advertisements_1.IOTileV1ServiceUUID)) { let manuData = advert.getManufacturerData(advertisements_1.ArchManufacturerCode); if (manuData == null) return null; if (manuData.byteLength < 6) return null; return this.processValidAdvertisementV1(connectionID, rssi, advert); } else if (advert.containsService(advertisements_1.IOTileV2ServiceUUID)) { let serviceData = advert.getServiceData(); if (serviceData == null) return null; if (serviceData.byteLength < 9) return null; return this.processValidAdvertisementV2(connectionID, rssi, advert); } else { return null; } } processValidAdvertisementV1(connectionID, rssi, advert) { let manuData = advert.getManufacturerData(advertisements_1.ArchManufacturerCode); if (manuData == null) throw new iotile_common_1.ArgumentError("Missing manufactururer data in processValidAdvertisementV1"); if (manuData.byteLength < 6) throw new iotile_common_1.ArgumentError(`Manufacturer data too short, length=${manuData.byteLength}`); let [uuid, rawFlags] = iotile_common_1.unpackArrayBuffer("LH", manuData.slice(0, 6)); let slug = iotile_common_1.deviceIDToSlug(uuid); let flags = parseFlags(rawFlags); return { batteryVoltage: 0, deviceID: uuid, slug: slug, connectionID: connectionID, rssi: rssi, flags: flags }; } processValidAdvertisementV2(connectionID, rssi, advert) { let serviceData = advert.getServiceData(); if (serviceData == null) throw new iotile_common_1.ArgumentError("Missing service data in processValidAdvertisementV2"); if (serviceData.byteLength < 9) throw new iotile_common_1.ArgumentError(`Service data too short, length=${serviceData.byteLength}`); let [uuid, rawFlags] = iotile_common_1.unpackArrayBuffer("L4xB", serviceData.slice(0, 9)); let slug = iotile_common_1.deviceIDToSlug(uuid); let flags = parseFlags(rawFlags); flags.robustReports = true; flags.fastWrites = true; return { batteryVoltage: 0, deviceID: uuid, slug: slug, connectionID: connectionID, rssi: rssi, flags: flags }; } } exports.IOTileAdvertisementService = IOTileAdvertisementService; function parseFlags(flags) { return { hasData: ((flags & (1 << 0)) !== 0), lowVoltage: ((flags & (1 << 1)) !== 0), otherConnected: ((flags & (1 << 2)) !== 0), robustReports: ((flags & (1 << 3)) !== 0), fastWrites: ((flags & (1 << 4)) !== 0) }; } //# sourceMappingURL=iotile-advert-serv.js.map