UNPKG

rxpoweredup

Version:

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

59 lines (58 loc) 2.68 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; import { injectable } from 'tsyringe'; import { MessageType, PortInformationReplyType } from '../../constants'; import { concatUint8ToUint16, readBitAtPosition } from '../../helpers'; let PortInformationReplyParser = class PortInformationReplyParser { messageType = MessageType.portInformation; parseMessage(message) { const informationType = message.payload[1]; switch (informationType) { case PortInformationReplyType.modeInfo: return this.parseInformationTypeReply(message); default: throw new Error(`Unknown port information reply type: ${informationType}`); } } parseInformationTypeReply(message) { const capabilities = message.payload[2]; const totalModeCount = message.payload[3]; const inputModesValue = concatUint8ToUint16(message.payload[5], message.payload[4]); const inputModes = []; for (let i = 0; i < 15; i++) { if (readBitAtPosition(inputModesValue, i)) { inputModes.push(i); } } const outputModesValue = concatUint8ToUint16(message.payload[7], message.payload[6]); const outputModes = []; for (let i = 0; i < 15; i++) { if (readBitAtPosition(outputModesValue, i)) { outputModes.push(i); } } return { messageType: this.messageType, portId: message.payload[0], informationType: PortInformationReplyType.modeInfo, currentModeId: message.payload[1], capabilities: { output: readBitAtPosition(capabilities, 0), input: readBitAtPosition(capabilities, 1), logicalCombinable: readBitAtPosition(capabilities, 2), logicalSynchronizable: readBitAtPosition(capabilities, 3), }, totalModeCount, inputModes, outputModes, }; } }; PortInformationReplyParser = __decorate([ injectable() ], PortInformationReplyParser); export { PortInformationReplyParser };