All files / src/commands comms.ts

32% Statements 16/50
0% Branches 0/2
18.18% Functions 4/22
32% Lines 16/50
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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 1165x 5x     5x                                                   5x                   5x                           5x                         5x                         5x   1x 1x   1x       5x   1x 1x   1x                     5x                    
import { Command, CommandType } from './command';
import { Buffer } from 'buffer/'
 
/** Simple Response buffer with error code & data buffer. */
export class PBResponseBuffer {
    readonly _buffer: Buffer;
 
    constructor(byteArray: Uint8Array) {
        this._buffer = Buffer.from(byteArray.buffer)
    }
 
    // lazy is good.
    get sid(): number { return this._buffer[0] }
    get cid(): number { return this._buffer[1] }
    get seq(): number { return this._buffer[2] }
    get len(): number { return this._buffer[3] }
    get err(): number { return this._buffer[4] }
    get data(): Buffer {
        return this._buffer.slice(5)
    }
 
    toString(): string {
        // TODO - this no workie but would be very helpful
        return "PBResponseBuffer[sid:" + this.sid.toString(16) + " cid:" +
            this.cid.toString(16) + " seq:" + this.seq + " len:" +
            this.len + " err:" + this.err + " data: " + this.data.toString('hex') + " ]";
    }
}
 
 
export class CommsRegisterShadeCmd extends Command<PBResponseBuffer> {
    constructor(shadeName: string) {
        super("USB", "USB-Control", (encoder) => {
            encoder.setHeader(0xFC, 0x02);
            encoder.addASCIIArray(shadeName);
        });
        this.name = "CommsRegisterShade";
    }
}
 
export class CommsScanCmd extends Command<PBResponseBuffer> {
    constructor(monitor: boolean) {
        super("USB", "USB-Control", (encoder) => {
            if (monitor) {
                encoder.setHeader(0xFC, 0x01);
            } else {
                encoder.setHeader(0xFC, 0xD1);
            }
            encoder.addUInt8(0);
        });
        this.name = "CommsScan";
    }
}
 
export class CommsConnectCmd extends Command<PBResponseBuffer> {
    constructor(shindex: number[]) {
        super("USB", "USB-Control", (encoder) => {
            encoder.setHeader(0xFC, 0x0C);
            encoder.addUInt8(shindex.length);
            for (var i = 0; i < shindex.length; i++) {
                encoder.addUInt8(shindex[i]);
            }
        });
        this.name = "CommsConnect";
    }
}
 
export class CommsDisconnectCmd extends Command<PBResponseBuffer> {
    constructor(shindex: number[]) {
        super("USB", "USB-Control", (encoder) => {
            encoder.setHeader(0xFC, 0xDC);
            encoder.addUInt8(shindex.length);
            for (var i = 0; i < shindex.length; i++) {
                encoder.addUInt8(shindex[i]);
            }
        });
        this.name = "CommsDisconnectCmd";
    }
}
 
export class CommsResetCmd extends Command<PBResponseBuffer> {
    constructor() {
        super("USB", "USB-Control", (encoder) => {
            encoder.setHeader(0xFC, 0xEA);
        });
        this.name = "CommsReset";
    }
}
 
export class ListShadesCmd extends Command<PBResponseBuffer> {
    constructor() {
        super("USB", "USB-Control", (encoder) => {
            encoder.setHeader(0xFC, 0x0D);
        });
        this.name = "ListShades";
    }
}
 
 
// TODO implement parseResponse
// class NordicInfo {
 
// }
 
 
export class NordicInfoCmd extends Command<PBResponseBuffer> {
    constructor() {
        super("USB", "USB-Control", (encoder) => {
            encoder.setHeader(0xFC, 0x1B);
            encoder.addUInt8(0); // len
        });
        this.name = "NordicInfo";
    }
 
}