inventoresed
Version:
Z-Wave driver written entirely in JavaScript/TypeScript
105 lines (95 loc) • 2.46 kB
text/typescript
import {
MessageOrCCLogEntry,
MessagePriority,
ZWaveError,
ZWaveErrorCodes,
} from "@zwave-js/core";
import type { ZWaveHost } from "@zwave-js/host";
import {
expectedResponse,
FunctionType,
gotDeserializationOptions,
Message,
MessageBaseOptions,
MessageDeserializationOptions,
MessageType,
messageTypes,
priority,
} from "@zwave-js/serial";
import { num2hex } from "@zwave-js/shared";
export interface ExtNVMReadLongBufferRequestOptions extends MessageBaseOptions {
offset: number;
length: number;
}
export class ExtNVMReadLongBufferRequest extends Message {
public constructor(
host: ZWaveHost,
options:
| MessageDeserializationOptions
| ExtNVMReadLongBufferRequestOptions,
) {
super(host, options);
if (gotDeserializationOptions(options)) {
throw new ZWaveError(
`${this.constructor.name}: deserialization not implemented`,
ZWaveErrorCodes.Deserialization_NotImplemented,
);
} else {
if (options.offset < 0 || options.offset > 0xffffff) {
throw new ZWaveError(
"The offset must be a 24-bit number!",
ZWaveErrorCodes.Argument_Invalid,
);
}
if (options.length < 1 || options.length > 0xffff) {
throw new ZWaveError(
"The length must be between 1 and 65535",
ZWaveErrorCodes.Argument_Invalid,
);
}
this.offset = options.offset;
this.length = options.length;
}
}
public offset: number;
public length: number;
public serialize(): Buffer {
this.payload = Buffer.allocUnsafe(5);
this.payload.writeUIntBE(this.offset, 0, 3);
this.payload.writeUInt16BE(this.length, 3);
return super.serialize();
}
public toLogEntry(): MessageOrCCLogEntry {
return {
...super.toLogEntry(),
message: {
offset: num2hex(this.offset),
length: this.length,
},
};
}
}
export class ExtNVMReadLongBufferResponse extends Message {
public constructor(
host: ZWaveHost,
options: MessageDeserializationOptions,
) {
super(host, options);
this.buffer = this.payload;
}
public readonly buffer: Buffer;
public toLogEntry(): MessageOrCCLogEntry {
return {
...super.toLogEntry(),
message: {
buffer: `(${this.buffer.length} byte${
this.buffer.length === 1 ? "" : "s"
})`,
},
};
}
}