UNPKG

@iotize/ionic

Version:

Iotize specific building blocks on top of @ionic/angular.

93 lines 12.8 kB
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFudWZhY3R1cmVyLWRhdGEtZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW90aXplLWlvbmljL3NyYy9saWIvdGFwLXNjYW5uZXIvdGFwLXNjYW5uZXItYmxlL21hbnVmYWN0dXJlci1kYXRhLWZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFZQSxNQUFNLFVBQVUsMEJBQTBCLENBQ3hDLGdCQUE4QixFQUM5Qix1QkFBNkQ7SUFFN0QsTUFBTSx3QkFBd0IsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUNsRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUMsQ0FBQztJQUNILElBQUksd0JBQXdCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUN6QyxPQUFPLEtBQUssQ0FBQztLQUNkO1NBQU0sSUFBSSx3QkFBd0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzlDLE9BQU8sQ0FBQyxJQUFJLENBQ1Ysb0VBQW9FLENBQ3JFLENBQUM7S0FDSDtJQUNELE1BQU0sc0JBQXNCLEdBQUcsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0QsTUFBTSx5QkFBeUIsR0FBRyxTQUFTLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekUsT0FBTyxDQUFDLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMsc0JBQXNCLEVBQUUsRUFBRTtRQUMvRCxNQUFNLG9CQUFvQixHQUFHLFNBQVMsQ0FDcEMsc0JBQXNCLENBQUMsaUJBQWlCLENBQ3pDLENBQUM7UUFDRixJQUFJLG9CQUFvQixLQUFLLHlCQUF5QixFQUFFO1lBQ3RELE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLHNCQUFzQixD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SUFFakMsT0FBTyxDQUNMLElBQUksQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLE1BQU07UUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDbEQsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxJQUFnRDtJQUNqRSxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ1QsT0FBTyxDQUFDLENBQUM7S0FDVjtTQUFNLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1FBQ25DLE9BQU8sSUFBSSxDQUFDO0tBQ2I7U0FBTTtRQUNMLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDN0M7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBTY2FuUmVjb3JkIHtcbiAgbGVuZ3RoOiBudW1iZXI7XG4gIHR5cGU6IG51bWJlcjtcbiAgZGF0YTogVWludDhBcnJheTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXZWJCbHVldG9vdGhNYW51ZmFjdHVyZXJEYXRhRmlsdGVyIHtcbiAgY29tcGFueUlkZW50aWZpZXI/OiBudW1iZXIgfCBVaW50OEFycmF5IHwgbnVtYmVyW107XG4gIGRhdGFQcmVmaXg/OiBVaW50OEFycmF5IHwgbnVtYmVyW107XG4gIG1hc2s/OiBVaW50OEFycmF5IHwgbnVtYmVyW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja01hbnVmYWN0dXJlckRhdGFNYXRjaChcbiAgcGFyc2VkU2NhblJlY29yczogU2NhblJlY29yZFtdLFxuICBtYW51ZmFjdHVyZXJEYXRhRmlsdGVyczogV2ViQmx1ZXRvb3RoTWFudWZhY3R1cmVyRGF0YUZpbHRlcltdXG4pOiBib29sZWFuIHtcbiAgY29uc3QgY29tcGFueUlkZW50aWZpZXJSZWNvcmRzID0gcGFyc2VkU2NhblJlY29ycy5maWx0ZXIoKHJlY29yZCkgPT4ge1xuICAgIHJldHVybiByZWNvcmQudHlwZSA9PT0gMHhmZiAmJiByZWNvcmQuZGF0YS5sZW5ndGggPj0gMjtcbiAgfSk7XG4gIGlmIChjb21wYW55SWRlbnRpZmllclJlY29yZHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKGNvbXBhbnlJZGVudGlmaWVyUmVjb3Jkcy5sZW5ndGggPiAxKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYE11bHRpcGxlIGNvbXBhbnkgaWRlbnRpZmllciByZWNvcmQgZm91bmQuIE9ubHkgdXNpbmcgdGhlIGZpcnN0IG9uZWBcbiAgICApO1xuICB9XG4gIGNvbnN0IG1hbnVmYWN0dXJlckRhdGFSZWNvcmQgPSBjb21wYW55SWRlbnRpZmllclJlY29yZHNbMF07XG4gIGNvbnN0IHJlY29yZENvbXBhbnlJZGVudGlmaWVySWQgPSBfdG9VaW50MTYobWFudWZhY3R1cmVyRGF0YVJlY29yZC5kYXRhKTtcbiAgcmV0dXJuICEhbWFudWZhY3R1cmVyRGF0YUZpbHRlcnMuZmluZCgobWFudWZhY3R1cmVyRGF0YUZpbHRlcikgPT4ge1xuICAgIGNvbnN0IGZpbHRlck1hbnVmYWN0dXJlcklkID0gX3RvVWludDE2KFxuICAgICAgbWFudWZhY3R1cmVyRGF0YUZpbHRlci5jb21wYW55SWRlbnRpZmllclxuICAgICk7XG4gICAgaWYgKGZpbHRlck1hbnVmYWN0dXJlcklkICE9PSByZWNvcmRDb21wYW55SWRlbnRpZmllcklkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChtYW51ZmFjdHVyZXJEYXRhRmlsdGVyLmRhdGFQcmVmaXgpIHtcbiAgICAgIHJldHVybiBjaGVja01hbnVmYWN0dXJlckRhdGFQcmVmaXgoXG4gICAgICAgIG1hbnVmYWN0dXJlckRhdGFSZWNvcmQuZGF0YS5zdWJhcnJheSgyKSxcbiAgICAgICAgbWFudWZhY3R1cmVyRGF0YUZpbHRlci5kYXRhUHJlZml4LFxuICAgICAgICBtYW51ZmFjdHVyZXJEYXRhRmlsdGVyLm1hc2tcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2NhblJlY29yZHMoXG4gIHNjYW5SZWNvcmQ6IG51bWJlcltdIHwgQnVmZmVyIHwgVWludDhBcnJheSB8IHVuZGVmaW5lZFxuKTogU2NhblJlY29yZFtdIHtcbiAgY29uc3QgcmVjb3JkczogU2NhblJlY29yZFtdID0gW107XG4gIGlmICghc2NhblJlY29yZD8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlY29yZHM7XG4gIH1cbiAgbGV0IGluZGV4ID0gMDtcbiAgY29uc3QgYXJyYXlTY2FuUmVjb3JkID0gVWludDhBcnJheS5mcm9tKHNjYW5SZWNvcmQpO1xuICB3aGlsZSAoaW5kZXggPCBhcnJheVNjYW5SZWNvcmQubGVuZ3RoKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gYXJyYXlTY2FuUmVjb3JkW2luZGV4KytdO1xuICAgIC8vRG9uZSBvbmNlIHdlIHJ1biBvdXQgb2YgcmVjb3Jkc1xuICAgIGlmIChsZW5ndGggPT0gMCkgYnJlYWs7XG5cbiAgICBjb25zdCB0eXBlID0gYXJyYXlTY2FuUmVjb3JkW2luZGV4KytdO1xuICAgIC8vRG9uZSBpZiBvdXIgcmVjb3JkIGlzbid0IGEgdmFsaWQgdHlwZVxuICAgIGlmICh0eXBlID09IDApIGJyZWFrO1xuXG4gICAgY29uc3QgZGF0YUxlbmd0aCA9IGxlbmd0aCAtIDE7XG4gICAgY29uc3QgZGF0YSA9IFVpbnQ4QXJyYXkuZnJvbShcbiAgICAgIGFycmF5U2NhblJlY29yZC5zbGljZShpbmRleCwgaW5kZXggKyBkYXRhTGVuZ3RoKVxuICAgICk7XG4gICAgaW5kZXggKz0gZGF0YUxlbmd0aDtcblxuICAgIHJlY29yZHMucHVzaCh7XG4gICAgICBkYXRhLFxuICAgICAgbGVuZ3RoLFxuICAgICAgdHlwZSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZWNvcmRzO1xufVxuXG5mdW5jdGlvbiBjaGVja01hbnVmYWN0dXJlckRhdGFQcmVmaXgoXG4gIGRhdGE6IFVpbnQ4QXJyYXkgfCBudW1iZXJbXSxcbiAgZGF0YVByZWZpeDogVWludDhBcnJheSB8IG51bWJlcltdLFxuICBtYXNrOiBVaW50OEFycmF5IHwgbnVtYmVyW10gfCB1bmRlZmluZWRcbik6IGJvb2xlYW4ge1xuICBjb25zdCBzdWJEYXRhID0gVWludDhBcnJheS5mcm9tKGRhdGEpLnN1YmFycmF5KDAsIGRhdGFQcmVmaXgubGVuZ3RoKTtcbiAgaWYgKG1hc2spIHtcbiAgICBmb3IgKFxuICAgICAgbGV0IGJ5dGVQb3NpdGlvbiA9IDA7XG4gICAgICBieXRlUG9zaXRpb24gPCBkYXRhUHJlZml4Lmxlbmd0aDtcbiAgICAgIGJ5dGVQb3NpdGlvbisrXG4gICAgKSB7XG4gICAgICBjb25zdCBkYXRhQnl0ZSA9IGRhdGFbYnl0ZVBvc2l0aW9uXTtcbiAgICAgIGNvbnN0IGRhdGFQcmVmaXhCeXRlID0gZGF0YVByZWZpeFtieXRlUG9zaXRpb25dO1xuICAgICAgY29uc3QgbWFza0J5dGUgPSBtYXNrW2J5dGVQb3NpdGlvbl07XG4gICAgICBpZiAobWFza0J5dGUpIHtcbiAgICAgICAgZm9yIChsZXQgYml0UG9zaXRpb24gPSAwOyBiaXRQb3NpdGlvbiA8IDg7IGJpdFBvc2l0aW9uKyspIHtcbiAgICAgICAgICBjb25zdCBtYXNrID0gMSA8PCAoNyAtIGJpdFBvc2l0aW9uKTtcbiAgICAgICAgICBpZiAoKG1hc2tCeXRlICYgbWFzaykgPT09IDApIHtcbiAgICAgICAgICAgIC8vIElmIG1hc2sgYml0IGlzIG5vdCBzZXQsIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhpcyBiaXRcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoKGRhdGFCeXRlICYgbWFzaykgIT09IChkYXRhUHJlZml4Qnl0ZSAmIG1hc2spKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBhcnJheUVxdWFscyhzdWJEYXRhLCBkYXRhUHJlZml4KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhcnJheUVxdWFscyhcbiAgYXJnMDogVWludDhBcnJheSB8IG51bWJlcltdLFxuICBkYXRhUHJlZml4OiBVaW50OEFycmF5IHwgbnVtYmVyW11cbik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGFyZzAubGVuZ3RoID09PSBkYXRhUHJlZml4Lmxlbmd0aCAmJlxuICAgIGFyZzAuZXZlcnkoKHYsIGluZGV4KSA9PiB2ID09PSBkYXRhUHJlZml4W2luZGV4XSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gX3RvVWludDE2KGRhdGE6IFVpbnQ4QXJyYXkgfCBudW1iZXJbXSB8IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICBpZiAoIWRhdGEpIHtcbiAgICByZXR1cm4gMDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB1aW50OEFycmF5ID0gVWludDhBcnJheS5mcm9tKGRhdGEpO1xuICAgIHJldHVybiAodWludDhBcnJheVswXSA8PCA4KSArIHVpbnQ4QXJyYXlbMV07XG4gIH1cbn1cbiJdfQ==