UNPKG

rxpoweredup

Version:

A Typescript RxJS-based library for controlling LEGO Powered UP hubs & peripherals.

44 lines (43 loc) 1.64 kB
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')}`; }