@iotize/ionic
Version:
Iotize specific building blocks on top of @ionic/angular.
93 lines • 13 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFudWZhY3R1cmVyLWRhdGEtZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW90aXplLWlvbmljL3NyYy9saWIvdGFwLXNjYW5uZXIvdGFwLXNjYW5uZXItYmxlL21hbnVmYWN0dXJlci1kYXRhLWZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFZQSxNQUFNLFVBQVUsMEJBQTBCLENBQ3hDLGdCQUE4QixFQUM5Qix1QkFBNkQ7SUFFN0QsTUFBTSx3QkFBd0IsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUNsRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUMsQ0FBQztJQUNILElBQUksd0JBQXdCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztTQUFNLElBQUksd0JBQXdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQy9DLE9BQU8sQ0FBQyxJQUFJLENBQ1Ysb0VBQW9FLENBQ3JFLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxzQkFBc0IsR0FBRyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRCxNQUFNLHlCQUF5QixHQUFHLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6RSxPQUFPLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxFQUFFO1FBQy9ELE1BQU0sb0JBQW9CLEdBQUcsU0FBUyxDQUNwQyxzQkFBc0IsQ0FBQyxpQkFBaUIsQ0FDekMsQ0FBQztRQUNGLElBQUksb0JBQW9CLEtBQUsseUJBQXlCLEVBQUUsQ0FBQztZQUN2RCxPQUFPLEtBQUssQ0FB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Q0FBQztJQUNkLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxXQUFXLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQ2xCLElBQTJCLEVBQzNCLFVBQWlDO0lBRWpDLE9BQU8sQ0FDTCxJQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxNQUFNO1FBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ2xELENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsSUFBZ0Q7SUFDakUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO1NBQU0sSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNwQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgU2NhblJlY29yZCB7XG4gIGxlbmd0aDogbnVtYmVyO1xuICB0eXBlOiBudW1iZXI7XG4gIGRhdGE6IFVpbnQ4QXJyYXk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQmx1ZXRvb3RoTWFudWZhY3R1cmVyRGF0YUZpbHRlciB7XG4gIGNvbXBhbnlJZGVudGlmaWVyPzogbnVtYmVyIHwgVWludDhBcnJheSB8IG51bWJlcltdO1xuICBkYXRhUHJlZml4PzogVWludDhBcnJheSB8IG51bWJlcltdO1xuICBtYXNrPzogVWludDhBcnJheSB8IG51bWJlcltdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tNYW51ZmFjdHVyZXJEYXRhTWF0Y2goXG4gIHBhcnNlZFNjYW5SZWNvcnM6IFNjYW5SZWNvcmRbXSxcbiAgbWFudWZhY3R1cmVyRGF0YUZpbHRlcnM6IFdlYkJsdWV0b290aE1hbnVmYWN0dXJlckRhdGFGaWx0ZXJbXVxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IGNvbXBhbnlJZGVudGlmaWVyUmVjb3JkcyA9IHBhcnNlZFNjYW5SZWNvcnMuZmlsdGVyKChyZWNvcmQpID0+IHtcbiAgICByZXR1cm4gcmVjb3JkLnR5cGUgPT09IDB4ZmYgJiYgcmVjb3JkLmRhdGEubGVuZ3RoID49IDI7XG4gIH0pO1xuICBpZiAoY29tcGFueUlkZW50aWZpZXJSZWNvcmRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChjb21wYW55SWRlbnRpZmllclJlY29yZHMubGVuZ3RoID4gMSkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBNdWx0aXBsZSBjb21wYW55IGlkZW50aWZpZXIgcmVjb3JkIGZvdW5kLiBPbmx5IHVzaW5nIHRoZSBmaXJzdCBvbmVgXG4gICAgKTtcbiAgfVxuICBjb25zdCBtYW51ZmFjdHVyZXJEYXRhUmVjb3JkID0gY29tcGFueUlkZW50aWZpZXJSZWNvcmRzWzBdO1xuICBjb25zdCByZWNvcmRDb21wYW55SWRlbnRpZmllcklkID0gX3RvVWludDE2KG1hbnVmYWN0dXJlckRhdGFSZWNvcmQuZGF0YSk7XG4gIHJldHVybiAhIW1hbnVmYWN0dXJlckRhdGFGaWx0ZXJzLmZpbmQoKG1hbnVmYWN0dXJlckRhdGFGaWx0ZXIpID0+IHtcbiAgICBjb25zdCBmaWx0ZXJNYW51ZmFjdHVyZXJJZCA9IF90b1VpbnQxNihcbiAgICAgIG1hbnVmYWN0dXJlckRhdGFGaWx0ZXIuY29tcGFueUlkZW50aWZpZXJcbiAgICApO1xuICAgIGlmIChmaWx0ZXJNYW51ZmFjdHVyZXJJZCAhPT0gcmVjb3JkQ29tcGFueUlkZW50aWZpZXJJZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAobWFudWZhY3R1cmVyRGF0YUZpbHRlci5kYXRhUHJlZml4KSB7XG4gICAgICByZXR1cm4gY2hlY2tNYW51ZmFjdHVyZXJEYXRhUHJlZml4KFxuICAgICAgICBtYW51ZmFjdHVyZXJEYXRhUmVjb3JkLmRhdGEuc3ViYXJyYXkoMiksXG4gICAgICAgIG1hbnVmYWN0dXJlckRhdGFGaWx0ZXIuZGF0YVByZWZpeCxcbiAgICAgICAgbWFudWZhY3R1cmVyRGF0YUZpbHRlci5tYXNrXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNjYW5SZWNvcmRzKFxuICBzY2FuUmVjb3JkOiBudW1iZXJbXSB8IEJ1ZmZlciB8IFVpbnQ4QXJyYXkgfCB1bmRlZmluZWRcbik6IFNjYW5SZWNvcmRbXSB7XG4gIGNvbnN0IHJlY29yZHM6IFNjYW5SZWNvcmRbXSA9IFtdO1xuICBpZiAoIXNjYW5SZWNvcmQ/Lmxlbmd0aCkge1xuICAgIHJldHVybiByZWNvcmRzO1xuICB9XG4gIGxldCBpbmRleCA9IDA7XG4gIGNvbnN0IGFycmF5U2NhblJlY29yZCA9IFVpbnQ4QXJyYXkuZnJvbShzY2FuUmVjb3JkKTtcbiAgd2hpbGUgKGluZGV4IDwgYXJyYXlTY2FuUmVjb3JkLmxlbmd0aCkge1xuICAgIGNvbnN0IGxlbmd0aCA9IGFycmF5U2NhblJlY29yZFtpbmRleCsrXTtcbiAgICAvL0RvbmUgb25jZSB3ZSBydW4gb3V0IG9mIHJlY29yZHNcbiAgICBpZiAobGVuZ3RoID09IDApIGJyZWFrO1xuXG4gICAgY29uc3QgdHlwZSA9IGFycmF5U2NhblJlY29yZFtpbmRleCsrXTtcbiAgICAvL0RvbmUgaWYgb3VyIHJlY29yZCBpc24ndCBhIHZhbGlkIHR5cGVcbiAgICBpZiAodHlwZSA9PSAwKSBicmVhaztcblxuICAgIGNvbnN0IGRhdGFMZW5ndGggPSBsZW5ndGggLSAxO1xuICAgIGNvbnN0IGRhdGEgPSBVaW50OEFycmF5LmZyb20oXG4gICAgICBhcnJheVNjYW5SZWNvcmQuc2xpY2UoaW5kZXgsIGluZGV4ICsgZGF0YUxlbmd0aClcbiAgICApO1xuICAgIGluZGV4ICs9IGRhdGFMZW5ndGg7XG5cbiAgICByZWNvcmRzLnB1c2goe1xuICAgICAgZGF0YSxcbiAgICAgIGxlbmd0aCxcbiAgICAgIHR5cGUsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVjb3Jkcztcbn1cblxuZnVuY3Rpb24gY2hlY2tNYW51ZmFjdHVyZXJEYXRhUHJlZml4KFxuICBkYXRhOiBVaW50OEFycmF5IHwgbnVtYmVyW10sXG4gIGRhdGFQcmVmaXg6IFVpbnQ4QXJyYXkgfCBudW1iZXJbXSxcbiAgbWFzazogVWludDhBcnJheSB8IG51bWJlcltdIHwgdW5kZWZpbmVkXG4pOiBib29sZWFuIHtcbiAgY29uc3Qgc3ViRGF0YSA9IFVpbnQ4QXJyYXkuZnJvbShkYXRhKS5zdWJhcnJheSgwLCBkYXRhUHJlZml4Lmxlbmd0aCk7XG4gIGlmIChtYXNrKSB7XG4gICAgZm9yIChcbiAgICAgIGxldCBieXRlUG9zaXRpb24gPSAwO1xuICAgICAgYnl0ZVBvc2l0aW9uIDwgZGF0YVByZWZpeC5sZW5ndGg7XG4gICAgICBieXRlUG9zaXRpb24rK1xuICAgICkge1xuICAgICAgY29uc3QgZGF0YUJ5dGUgPSBkYXRhW2J5dGVQb3NpdGlvbl07XG4gICAgICBjb25zdCBkYXRhUHJlZml4Qnl0ZSA9IGRhdGFQcmVmaXhbYnl0ZVBvc2l0aW9uXTtcbiAgICAgIGNvbnN0IG1hc2tCeXRlID0gbWFza1tieXRlUG9zaXRpb25dO1xuICAgICAgaWYgKG1hc2tCeXRlKSB7XG4gICAgICAgIGZvciAobGV0IGJpdFBvc2l0aW9uID0gMDsgYml0UG9zaXRpb24gPCA4OyBiaXRQb3NpdGlvbisrKSB7XG4gICAgICAgICAgY29uc3QgbWFzayA9IDEgPDwgKDcgLSBiaXRQb3NpdGlvbik7XG4gICAgICAgICAgaWYgKChtYXNrQnl0ZSAmIG1hc2spID09PSAwKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXNrIGJpdCBpcyBub3Qgc2V0LCB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoaXMgYml0XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKChkYXRhQnl0ZSAmIG1hc2spICE9PSAoZGF0YVByZWZpeEJ5dGUgJiBtYXNrKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXJyYXlFcXVhbHMoc3ViRGF0YSwgZGF0YVByZWZpeCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXJyYXlFcXVhbHMoXG4gIGFyZzA6IFVpbnQ4QXJyYXkgfCBudW1iZXJbXSxcbiAgZGF0YVByZWZpeDogVWludDhBcnJheSB8IG51bWJlcltdXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBhcmcwLmxlbmd0aCA9PT0gZGF0YVByZWZpeC5sZW5ndGggJiZcbiAgICBhcmcwLmV2ZXJ5KCh2LCBpbmRleCkgPT4gdiA9PT0gZGF0YVByZWZpeFtpbmRleF0pXG4gICk7XG59XG5cbmZ1bmN0aW9uIF90b1VpbnQxNihkYXRhOiBVaW50OEFycmF5IHwgbnVtYmVyW10gfCBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgaWYgKCFkYXRhKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdWludDhBcnJheSA9IFVpbnQ4QXJyYXkuZnJvbShkYXRhKTtcbiAgICByZXR1cm4gKHVpbnQ4QXJyYXlbMF0gPDwgOCkgKyB1aW50OEFycmF5WzFdO1xuICB9XG59XG4iXX0=