All files rcp-manager.ts

100% Statements 38/38
100% Branches 18/18
100% Functions 4/4
100% Lines 36/36

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 621x   1x   1x 4x 4x             4x 4x 4x 4x     1x 79x 78x 78x 78x   78x 39x     78x 121x 43x 43x 23x 23x 23x 23x 23x 14x   23x 23x   20x 20x   78x         1x 23x         23x 23x     1x
import { Packet } from './packet';
import { Util } from ".";
import { EventEmitter } from 'events';
 
export class RcpManager extends EventEmitter {
    private preamble: number = 0xBB;
    private endMark: number = 0x7E;
    private byteRxPkt: Buffer;
    private rcpReceivedPacket: boolean;
    private rcpReceivedPacketCrcError: boolean;
    private static instance: RcpManager;
 
    constructor() {
        super();
        this.byteRxPkt = Buffer.from([]);
        this.rcpReceivedPacket = false;
        this.rcpReceivedPacketCrcError = false;
    }
 
    dataReceived(data: Buffer): void {
        if (data.length != 0) {
            this.byteRxPkt = Buffer.concat([this.byteRxPkt, data], this.byteRxPkt.length + data.length);
            let num = 0;
            for (num = 0; num < this.byteRxPkt.length && this.byteRxPkt[num] != this.preamble; num++) {
            }
            if (num != 0) {
                this.byteRxPkt = Buffer.from(this.byteRxPkt.subarray(num, this.byteRxPkt.length - num));
            }
 
            while (true) {
                if (this.byteRxPkt.length > 8) {
                    let num2 = (this.byteRxPkt[3] << 8) + this.byteRxPkt[4];
                    if (this.byteRxPkt[num2 + 5] == this.endMark) {
                        this.rcpReceivedPacket = true;
                        let bytePkt2 = Buffer.from(this.byteRxPkt.subarray(0, num2 + 8));
                        this.parseRxData(bytePkt2);
                        bytePkt2 = Buffer.from([]);
                        if (this.byteRxPkt.length - (num2 + 8) > 0) {
                            bytePkt2 = Buffer.from(this.byteRxPkt.subarray(num2 + 8, this.byteRxPkt.length - (num2 + 8)));
                        }
                        this.byteRxPkt = Buffer.from(bytePkt2);
                        continue;
                    }
                    this.byteRxPkt = Buffer.from([]);
                    continue;
                }
                return;
            }
        }
    }
 
    private parseRxData(buffer: Buffer): void {
        switch (buffer[1]) {
            case 1:
            case 2:
            case 3:
            case 4:
                this.emit('packet', Packet.from(buffer));
                break;
        }
    }
}