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";
}
}
|