inventoresed
Version:
Z-Wave driver written entirely in JavaScript/TypeScript
106 lines (96 loc) • 2.41 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 ExtNVMWriteLongByteRequestOptions extends MessageBaseOptions {
offset: number;
byte: number;
}
export class ExtNVMWriteLongByteRequest extends Message {
public constructor(
host: ZWaveHost,
options:
| MessageDeserializationOptions
| ExtNVMWriteLongByteRequestOptions,
) {
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.byte & 0xff) !== options.byte) {
throw new ZWaveError(
"The data must be a byte!",
ZWaveErrorCodes.Argument_Invalid,
);
}
this.offset = options.offset;
this.byte = options.byte;
}
}
public offset: number;
public byte: number;
public serialize(): Buffer {
this.payload = Buffer.allocUnsafe(4);
this.payload.writeUIntBE(this.offset, 0, 3);
this.payload[3] = this.byte;
return super.serialize();
}
public toLogEntry(): MessageOrCCLogEntry {
return {
...super.toLogEntry(),
message: {
offset: num2hex(this.offset),
byte: num2hex(this.byte),
},
};
}
}
export class ExtNVMWriteLongByteResponse extends Message {
public constructor(
host: ZWaveHost,
options: MessageDeserializationOptions,
) {
super(host, options);
this.success = this.payload[0] !== 0;
}
public readonly success: boolean;
public isOK(): boolean {
return this.success;
}
public toLogEntry(): MessageOrCCLogEntry {
return {
...super.toLogEntry(),
message: {
success: this.success,
},
};
}
}