inventoresed
Version:
Z-Wave driver written entirely in JavaScript/TypeScript
87 lines (78 loc) • 2.04 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 ExtNVMReadLongByteRequestOptions extends MessageBaseOptions {
offset: number;
}
export class ExtNVMReadLongByteRequest extends Message {
public constructor(
host: ZWaveHost,
options:
| MessageDeserializationOptions
| ExtNVMReadLongByteRequestOptions,
) {
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,
);
}
this.offset = options.offset;
}
}
public offset: number;
public serialize(): Buffer {
this.payload = Buffer.allocUnsafe(3);
this.payload.writeUIntBE(this.offset, 0, 3);
return super.serialize();
}
public toLogEntry(): MessageOrCCLogEntry {
return {
...super.toLogEntry(),
message: { offset: num2hex(this.offset) },
};
}
}
export class ExtNVMReadLongByteResponse extends Message {
public constructor(
host: ZWaveHost,
options: MessageDeserializationOptions,
) {
super(host, options);
this.byte = this.payload[0];
}
public readonly byte: number;
public toLogEntry(): MessageOrCCLogEntry {
return {
...super.toLogEntry(),
message: { byte: num2hex(this.byte) },
};
}
}