rxpoweredup
Version:
A Typescript RxJS-based library for controlling LEGO Powered UP hubs & peripherals.
44 lines (43 loc) • 1.64 kB
JavaScript
import { MessageType } from './constants';
export function readBitAtPosition(value, position) {
return (value & (1 << position)) !== 0;
}
export function concatUint8ToUint16(high, low) {
return (high << 8) + low;
}
export function numberToUint32LEArray(value) {
return [value & 0xff, (value >> 8) & 0xff, (value >> 16) & 0xff, (value >> 24) & 0xff];
}
export function numberToUint16LEArray(value) {
return [value & 0xff, (value >> 8) & 0xff];
}
export function readNumberFromUint8LEArray(value) {
return [...value].reduce((acc, val, index) => acc + (val << (index * 8)), 0);
}
export function convertUint8ToSignedInt(value) {
return value > 127 ? value - 256 : value;
}
export function convertUint32ToSignedInt(value) {
return value > 2147483647 ? value - 4294967296 : value;
}
export function convertUint16ToSignedInt(value) {
return value > 32767 ? value - 65536 : value;
}
export function concatUintArraysToUint8Array(...a) {
const totalLength = a.reduce((acc, val) => acc + val.length, 0);
const result = new Uint8Array(totalLength);
let offset = 0;
for (const arr of a) {
result.set(arr, offset);
offset += arr.length;
}
return result;
}
export function formatMessageForDump(message) {
const messageType = `${numberToHexString(message.header.messageType)} (${MessageType[message.header.messageType]})`;
const payload = [...message.payload].map((v) => numberToHexString(v)).join(' ');
return `message type '${messageType}', payload ${payload}`;
}
export function numberToHexString(number) {
return `0x${number.toString(16).padStart(2, '0')}`;
}