49 lines
1.1 KiB
TypeScript
49 lines
1.1 KiB
TypeScript
'use strict';
|
|
import { BufferLengthError } from './errors/BufferLengthError';
|
|
import { InvalidValueError } from './errors/InvalidValueError';
|
|
import { DPT } from './definitions';
|
|
import { buffer } from 'stream/consumers';
|
|
|
|
export class DPT12 implements DPT {
|
|
id = '12';
|
|
name = '4-byte unsigned value';
|
|
bufferLength = 4
|
|
|
|
/**
|
|
* Decode a buffer
|
|
*
|
|
* @param buffer the buffer
|
|
* @returns the DPT value
|
|
*/
|
|
decoder(buffer: Buffer): number {
|
|
if (buffer.length !== this.bufferLength)
|
|
throw new BufferLengthError(`Invalid buffer length ${buffer.length}/${buffer}. Expected ${this.bufferLength}.`);
|
|
|
|
return buffer.readUInt32BE(0);
|
|
};
|
|
|
|
/**
|
|
* Encode a buffer
|
|
*
|
|
* @param value the value to be converted to buffer
|
|
* @returns the buffer
|
|
*/
|
|
encoder(value: number): Buffer {
|
|
if (!value)
|
|
throw new InvalidValueError('Cannot write null value');
|
|
|
|
let result = Buffer.alloc(this.bufferLength)
|
|
result.writeUInt32BE(value)
|
|
return result;
|
|
}
|
|
|
|
subtypes: {
|
|
// 12.001 counter pulses
|
|
"001": {
|
|
"name": "DPT_Value_4_Ucount",
|
|
"desc": "counter pulses"
|
|
}
|
|
};
|
|
|
|
}
|