UNPKG

rxpoweredup

Version:

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

77 lines (76 loc) 3.09 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 { AttachIoEvent, MessageType } from '../../constants'; import { readNumberFromUint8LEArray } from '../../helpers'; let AttachedIoReplyParser = class AttachedIoReplyParser { messageType = MessageType.attachedIO; portIdOffset = 0; eventIdOffset = 1; ioTypeIdOffsetByte0 = 2; ioTypeIdOffsetByte1 = 3; portIdAOffset = 4; portIdBOffset = 5; parseMessage(rawMessage) { const payload = rawMessage.payload; switch (this.getEventId(payload)) { case AttachIoEvent.Attached: return this.composeAttachReply(payload); case AttachIoEvent.Detached: return this.composeDetachReply(payload); case AttachIoEvent.AttachedVirtual: return this.composeAttachVirtualIO(payload); } } composeAttachReply(payload) { return { messageType: MessageType.attachedIO, portId: this.getPortId(payload), event: AttachIoEvent.Attached, ioTypeId: this.getIoTypeId(payload), hardwareRevision: this.decodeVersion(payload.slice(4, 7)), softwareRevision: this.decodeVersion(payload.slice(8, 11)), }; } composeDetachReply(payload) { return { messageType: MessageType.attachedIO, portId: this.getPortId(payload), event: AttachIoEvent.Detached, }; } composeAttachVirtualIO(payload) { return { messageType: MessageType.attachedIO, portId: this.getPortId(payload), event: AttachIoEvent.AttachedVirtual, ioTypeId: this.getIoTypeId(payload), portIdA: payload[this.portIdAOffset], portIdB: payload[this.portIdBOffset], }; } getIoTypeId(data) { return data[this.ioTypeIdOffsetByte0] + (data[this.ioTypeIdOffsetByte1] << 8); } getPortId(data) { return data[this.portIdOffset]; } getEventId(data) { return data[this.eventIdOffset]; } decodeVersion(data) { const majorVersion = data[0] >> 4; const minorVersion = data[0] & 0b00001111; const bugFixingNumber = data[1]; const buildNumber = readNumberFromUint8LEArray(data.slice(2, 4)); return `${majorVersion}.${minorVersion}.${bugFixingNumber}.${buildNumber}`; } }; AttachedIoReplyParser = __decorate([ injectable() ], AttachedIoReplyParser); export { AttachedIoReplyParser };