@iotize/ionic
Version:
Iotize specific building blocks on top of @ionic/angular.
93 lines • 12.8 kB
JavaScript
export function checkManufacturerDataMatch(parsedScanRecors, manufacturerDataFilters) {
const companyIdentifierRecords = parsedScanRecors.filter((record) => {
return record.type === 0xff && record.data.length >= 2;
});
if (companyIdentifierRecords.length === 0) {
return false;
}
else if (companyIdentifierRecords.length > 1) {
console.warn(`Multiple company identifier record found. Only using the first one`);
}
const manufacturerDataRecord = companyIdentifierRecords[0];
const recordCompanyIdentifierId = _toUint16(manufacturerDataRecord.data);
return !!manufacturerDataFilters.find((manufacturerDataFilter) => {
const filterManufacturerId = _toUint16(manufacturerDataFilter.companyIdentifier);
if (filterManufacturerId !== recordCompanyIdentifierId) {
return false;
}
if (manufacturerDataFilter.dataPrefix) {
return checkManufacturerDataPrefix(manufacturerDataRecord.data.subarray(2), manufacturerDataFilter.dataPrefix, manufacturerDataFilter.mask);
}
return true;
});
}
export function parseScanRecords(scanRecord) {
const records = [];
if (!scanRecord?.length) {
return records;
}
let index = 0;
const arrayScanRecord = Uint8Array.from(scanRecord);
while (index < arrayScanRecord.length) {
const length = arrayScanRecord[index++];
//Done once we run out of records
if (length == 0)
break;
const type = arrayScanRecord[index++];
//Done if our record isn't a valid type
if (type == 0)
break;
const dataLength = length - 1;
const data = Uint8Array.from(arrayScanRecord.slice(index, index + dataLength));
index += dataLength;
records.push({
data,
length,
type,
});
}
return records;
}
function checkManufacturerDataPrefix(data, dataPrefix, mask) {
const subData = Uint8Array.from(data).subarray(0, dataPrefix.length);
if (mask) {
for (let bytePosition = 0; bytePosition < dataPrefix.length; bytePosition++) {
const dataByte = data[bytePosition];
const dataPrefixByte = dataPrefix[bytePosition];
const maskByte = mask[bytePosition];
if (maskByte) {
for (let bitPosition = 0; bitPosition < 8; bitPosition++) {
const mask = 1 << (7 - bitPosition);
if ((maskByte & mask) === 0) {
// If mask bit is not set, we don't need to check this bit
continue;
}
if ((dataByte & mask) !== (dataPrefixByte & mask)) {
return false;
}
}
}
}
return true;
}
else {
return arrayEquals(subData, dataPrefix);
}
}
function arrayEquals(arg0, dataPrefix) {
return (arg0.length === dataPrefix.length &&
arg0.every((v, index) => v === dataPrefix[index]));
}
function _toUint16(data) {
if (!data) {
return 0;
}
else if (typeof data === 'number') {
return data;
}
else {
const uint8Array = Uint8Array.from(data);
return (uint8Array[0] << 8) + uint8Array[1];
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFudWZhY3R1cmVyLWRhdGEtZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW90aXplLWlvbmljL3NyYy9saWIvdGFwLXNjYW5uZXIvdGFwLXNjYW5uZXItYmxlL21hbnVmYWN0dXJlci1kYXRhLWZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFZQSxNQUFNLFVBQVUsMEJBQTBCLENBQ3hDLGdCQUE4QixFQUM5Qix1QkFBNkQ7SUFFN0QsTUFBTSx3QkFBd0IsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUNsRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUMsQ0FBQztJQUNILElBQUksd0JBQXdCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUN6QyxPQUFPLEtBQUssQ0FBQztLQUNkO1NBQU0sSUFBSSx3QkFBd0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzlDLE9BQU8sQ0FBQyxJQUFJLENBQ1Ysb0VBQW9FLENBQ3JFLENBQUM7S0FDSDtJQUNELE1BQU0sc0JBQXNCLEdBQUcsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsTUFBTSx5QkFBeUIsR0FBRyxTQUFTLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekUsT0FBTyxDQUFDLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMsc0JBQXNCLEVBQUUsRUFBRTtRQUMvRCxNQUFNLG9CQUFvQixHQUFHLFNBQVMsQ0FDcEMsc0JBQXNCLENBQUMsaUJBQWlCLENBQ3pDLENBQUM7UUFDRixJQUFJLG9CQUFvQixLQUFLLHlCQUF5QixFQUFFO1lBQ3RELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLHNCQUFzQixDQUFDLFVBQVUsRUFBRTtZQUNyQyxPQUFPLDJCQUEyQixDQUNoQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUN2QyxzQkFBc0IsQ0FBQyxVQUFVLEVBQ2pDLHNCQUFzQixDQUFDLElBQUksQ0FDNUIsQ0FBQztTQUNIO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLFVBQXNEO0lBRXRELE1BQU0sT0FBTyxHQUFpQixFQUFFLENBQUM7SUFDakMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUU7UUFDdkIsT0FBTyxPQUFPLENBQUM7S0FDaEI7SUFDRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDZCxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BELE9BQU8sS0FBSyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUU7UUFDckMsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDeEMsaUNBQWlDO1FBQ2pDLElBQUksTUFBTSxJQUFJLENBQUM7WUFBRSxNQUFNO1FBRXZCLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLHVDQUF1QztRQUN2QyxJQUFJLElBQUksSUFBSSxDQUFDO1lBQUUsTUFBTTtRQUVyQixNQUFNLFVBQVUsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQzFCLGVBQWUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxVQUFVLENBQUMsQ0FDakQsQ0FBQztRQUNGLEtBQUssSUFBSSxVQUFVLENBQUM7UUFFcEIsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNYLElBQUk7WUFDSixNQUFNO1lBQ04sSUFBSTtTQUNMLENBQUMsQ0FBQztLQUNKO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVELFNBQVMsMkJBQTJCLENBQ2xDLElBQTJCLEVBQzNCLFVBQWlDLEVBQ2pDLElBQXVDO0lBRXZDLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckUsSUFBSSxJQUFJLEVBQUU7UUFDUixLQUNFLElBQUksWUFBWSxHQUFHLENBQUMsRUFDcEIsWUFBWSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQ2hDLFlBQVksRUFBRSxFQUNkO1lBQ0EsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNoRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDcEMsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osS0FBSyxJQUFJLFdBQVcsR0FBRyxDQUFDLEVBQUUsV0FBVyxHQUFHLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRTtvQkFDeEQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO29CQUNwQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTt3QkFDM0IsMERBQTBEO3dCQUMxRCxTQUFTO3FCQUNWO29CQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEVBQUU7d0JBQ2pELE9BQU8sS0FBSyxDQUFDO3FCQUNkO2lCQUNGO2FBQ0Y7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0tBQ2I7U0FBTTtRQUNMLE9BQU8sV0FBVyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztLQUN6QztBQUNILENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FDbEIsSUFBMkIsRUFDM0IsVUFBaUM7SUFFakMsT0FBTyxDQUNMLElBQUksQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLE1BQU07UUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDbEQsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxJQUFnRDtJQUNqRSxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ1QsT0FBTyxDQUFDLENBQUM7S0FDVjtTQUFNLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1FBQ25DLE9BQU8sSUFBSSxDQUFDO0tBQ2I7U0FBTTtRQUNMLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDN0M7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBTY2FuUmVjb3JkIHtcbiAgbGVuZ3RoOiBudW1iZXI7XG4gIHR5cGU6IG51bWJlcjtcbiAgZGF0YTogVWludDhBcnJheTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXZWJCbHVldG9vdGhNYW51ZmFjdHVyZXJEYXRhRmlsdGVyIHtcbiAgY29tcGFueUlkZW50aWZpZXI/OiBudW1iZXIgfCBVaW50OEFycmF5IHwgbnVtYmVyW107XG4gIGRhdGFQcmVmaXg/OiBVaW50OEFycmF5IHwgbnVtYmVyW107XG4gIG1hc2s/OiBVaW50OEFycmF5IHwgbnVtYmVyW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja01hbnVmYWN0dXJlckRhdGFNYXRjaChcbiAgcGFyc2VkU2NhblJlY29yczogU2NhblJlY29yZFtdLFxuICBtYW51ZmFjdHVyZXJEYXRhRmlsdGVyczogV2ViQmx1ZXRvb3RoTWFudWZhY3R1cmVyRGF0YUZpbHRlcltdXG4pOiBib29sZWFuIHtcbiAgY29uc3QgY29tcGFueUlkZW50aWZpZXJSZWNvcmRzID0gcGFyc2VkU2NhblJlY29ycy5maWx0ZXIoKHJlY29yZCkgPT4ge1xuICAgIHJldHVybiByZWNvcmQudHlwZSA9PT0gMHhmZiAmJiByZWNvcmQuZGF0YS5sZW5ndGggPj0gMjtcbiAgfSk7XG4gIGlmIChjb21wYW55SWRlbnRpZmllclJlY29yZHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKGNvbXBhbnlJZGVudGlmaWVyUmVjb3Jkcy5sZW5ndGggPiAxKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYE11bHRpcGxlIGNvbXBhbnkgaWRlbnRpZmllciByZWNvcmQgZm91bmQuIE9ubHkgdXNpbmcgdGhlIGZpcnN0IG9uZWBcbiAgICApO1xuICB9XG4gIGNvbnN0IG1hbnVmYWN0dXJlckRhdGFSZWNvcmQgPSBjb21wYW55SWRlbnRpZmllclJlY29yZHNbMF07XG4gIGNvbnN0IHJlY29yZENvbXBhbnlJZGVudGlmaWVySWQgPSBfdG9VaW50MTYobWFudWZhY3R1cmVyRGF0YVJlY29yZC5kYXRhKTtcbiAgcmV0dXJuICEhbWFudWZhY3R1cmVyRGF0YUZpbHRlcnMuZmluZCgobWFudWZhY3R1cmVyRGF0YUZpbHRlcikgPT4ge1xuICAgIGNvbnN0IGZpbHRlck1hbnVmYWN0dXJlcklkID0gX3RvVWludDE2KFxuICAgICAgbWFudWZhY3R1cmVyRGF0YUZpbHRlci5jb21wYW55SWRlbnRpZmllclxuICAgICk7XG4gICAgaWYgKGZpbHRlck1hbnVmYWN0dXJlcklkICE9PSByZWNvcmRDb21wYW55SWRlbnRpZmllcklkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChtYW51ZmFjdHVyZXJEYXRhRmlsdGVyLmRhdGFQcmVmaXgpIHtcbiAgICAgIHJldHVybiBjaGVja01hbnVmYWN0dXJlckRhdGFQcmVmaXgoXG4gICAgICAgIG1hbnVmYWN0dXJlckRhdGFSZWNvcmQuZGF0YS5zdWJhcnJheSgyKSxcbiAgICAgICAgbWFudWZhY3R1cmVyRGF0YUZpbHRlci5kYXRhUHJlZml4LFxuICAgICAgICBtYW51ZmFjdHVyZXJEYXRhRmlsdGVyLm1hc2tcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2NhblJlY29yZHMoXG4gIHNjYW5SZWNvcmQ6IG51bWJlcltdIHwgQnVmZmVyIHwgVWludDhBcnJheSB8IHVuZGVmaW5lZFxuKTogU2NhblJlY29yZFtdIHtcbiAgY29uc3QgcmVjb3JkczogU2NhblJlY29yZFtdID0gW107XG4gIGlmICghc2NhblJlY29yZD8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlY29yZHM7XG4gIH1cbiAgbGV0IGluZGV4ID0gMDtcbiAgY29uc3QgYXJyYXlTY2FuUmVjb3JkID0gVWludDhBcnJheS5mcm9tKHNjYW5SZWNvcmQpO1xuICB3aGlsZSAoaW5kZXggPCBhcnJheVNjYW5SZWNvcmQubGVuZ3RoKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gYXJyYXlTY2FuUmVjb3JkW2luZGV4KytdO1xuICAgIC8vRG9uZSBvbmNlIHdlIHJ1biBvdXQgb2YgcmVjb3Jkc1xuICAgIGlmIChsZW5ndGggPT0gMCkgYnJlYWs7XG5cbiAgICBjb25zdCB0eXBlID0gYXJyYXlTY2FuUmVjb3JkW2luZGV4KytdO1xuICAgIC8vRG9uZSBpZiBvdXIgcmVjb3JkIGlzbid0IGEgdmFsaWQgdHlwZVxuICAgIGlmICh0eXBlID09IDApIGJyZWFrO1xuXG4gICAgY29uc3QgZGF0YUxlbmd0aCA9IGxlbmd0aCAtIDE7XG4gICAgY29uc3QgZGF0YSA9IFVpbnQ4QXJyYXkuZnJvbShcbiAgICAgIGFycmF5U2NhblJlY29yZC5zbGljZShpbmRleCwgaW5kZXggKyBkYXRhTGVuZ3RoKVxuICAgICk7XG4gICAgaW5kZXggKz0gZGF0YUxlbmd0aDtcblxuICAgIHJlY29yZHMucHVzaCh7XG4gICAgICBkYXRhLFxuICAgICAgbGVuZ3RoLFxuICAgICAgdHlwZSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZWNvcmRzO1xufVxuXG5mdW5jdGlvbiBjaGVja01hbnVmYWN0dXJlckRhdGFQcmVmaXgoXG4gIGRhdGE6IFVpbnQ4QXJyYXkgfCBudW1iZXJbXSxcbiAgZGF0YVByZWZpeDogVWludDhBcnJheSB8IG51bWJlcltdLFxuICBtYXNrOiBVaW50OEFycmF5IHwgbnVtYmVyW10gfCB1bmRlZmluZWRcbik6IGJvb2xlYW4ge1xuICBjb25zdCBzdWJEYXRhID0gVWludDhBcnJheS5mcm9tKGRhdGEpLnN1YmFycmF5KDAsIGRhdGFQcmVmaXgubGVuZ3RoKTtcbiAgaWYgKG1hc2spIHtcbiAgICBmb3IgKFxuICAgICAgbGV0IGJ5dGVQb3NpdGlvbiA9IDA7XG4gICAgICBieXRlUG9zaXRpb24gPCBkYXRhUHJlZml4Lmxlbmd0aDtcbiAgICAgIGJ5dGVQb3NpdGlvbisrXG4gICAgKSB7XG4gICAgICBjb25zdCBkYXRhQnl0ZSA9IGRhdGFbYnl0ZVBvc2l0aW9uXTtcbiAgICAgIGNvbnN0IGRhdGFQcmVmaXhCeXRlID0gZGF0YVByZWZpeFtieXRlUG9zaXRpb25dO1xuICAgICAgY29uc3QgbWFza0J5dGUgPSBtYXNrW2J5dGVQb3NpdGlvbl07XG4gICAgICBpZiAobWFza0J5dGUpIHtcbiAgICAgICAgZm9yIChsZXQgYml0UG9zaXRpb24gPSAwOyBiaXRQb3NpdGlvbiA8IDg7IGJpdFBvc2l0aW9uKyspIHtcbiAgICAgICAgICBjb25zdCBtYXNrID0gMSA8PCAoNyAtIGJpdFBvc2l0aW9uKTtcbiAgICAgICAgICBpZiAoKG1hc2tCeXRlICYgbWFzaykgPT09IDApIHtcbiAgICAgICAgICAgIC8vIElmIG1hc2sgYml0IGlzIG5vdCBzZXQsIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhpcyBiaXRcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoKGRhdGFCeXRlICYgbWFzaykgIT09IChkYXRhUHJlZml4Qnl0ZSAmIG1hc2spKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBhcnJheUVxdWFscyhzdWJEYXRhLCBkYXRhUHJlZml4KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhcnJheUVxdWFscyhcbiAgYXJnMDogVWludDhBcnJheSB8IG51bWJlcltdLFxuICBkYXRhUHJlZml4OiBVaW50OEFycmF5IHwgbnVtYmVyW11cbik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGFyZzAubGVuZ3RoID09PSBkYXRhUHJlZml4Lmxlbmd0aCAmJlxuICAgIGFyZzAuZXZlcnkoKHYsIGluZGV4KSA9PiB2ID09PSBkYXRhUHJlZml4W2luZGV4XSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gX3RvVWludDE2KGRhdGE6IFVpbnQ4QXJyYXkgfCBudW1iZXJbXSB8IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICBpZiAoIWRhdGEpIHtcbiAgICByZXR1cm4gMDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB1aW50OEFycmF5ID0gVWludDhBcnJheS5mcm9tKGRhdGEpO1xuICAgIHJldHVybiAodWludDhBcnJheVswXSA8PCA4KSArIHVpbnQ4QXJyYXlbMV07XG4gIH1cbn1cbiJdfQ==