replace number[] by Uint8Array
This commit is contained in:
@ -19,4 +19,7 @@ export namespace MeterbusLibExceptions {
|
|||||||
|
|
||||||
export class PayloadTooShortError extends InvalidTelegramError {
|
export class PayloadTooShortError extends InvalidTelegramError {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class IllegalNumberError extends InvalidTelegramError {
|
||||||
|
}
|
||||||
}
|
}
|
@ -8,7 +8,7 @@ export namespace MeterbusLibLongFrame {
|
|||||||
private _fixedDataHeader : FixedDataHeader
|
private _fixedDataHeader : FixedDataHeader
|
||||||
get fixedDataHeader() : FixedDataHeader { return this._fixedDataHeader }
|
get fixedDataHeader() : FixedDataHeader { return this._fixedDataHeader }
|
||||||
|
|
||||||
constructor(telegram : number[]) {
|
constructor(telegram : Uint8Array) {
|
||||||
super(telegram)
|
super(telegram)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -20,7 +20,7 @@ export namespace MeterbusLibLongFrame {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class FixedDataHeader {
|
export class FixedDataHeader {
|
||||||
private _data : number[]
|
private _data : Uint8Array
|
||||||
|
|
||||||
private _identNo : number
|
private _identNo : number
|
||||||
private _manufacturer : string
|
private _manufacturer : string
|
||||||
@ -28,7 +28,7 @@ export namespace MeterbusLibLongFrame {
|
|||||||
private _medium : string
|
private _medium : string
|
||||||
private _accessNo : number
|
private _accessNo : number
|
||||||
private _status : number
|
private _status : number
|
||||||
private _signature : number[]
|
private _signature : Uint8Array
|
||||||
|
|
||||||
get identNo() : number { return this._identNo }
|
get identNo() : number { return this._identNo }
|
||||||
get manufacturer() : string { return this._manufacturer }
|
get manufacturer() : string { return this._manufacturer }
|
||||||
@ -36,9 +36,9 @@ export namespace MeterbusLibLongFrame {
|
|||||||
get medium() : string { return this._medium }
|
get medium() : string { return this._medium }
|
||||||
get accessNo() : number { return this._accessNo }
|
get accessNo() : number { return this._accessNo }
|
||||||
get status() : number { return this._status }
|
get status() : number { return this._status }
|
||||||
get signature() : number[] { return this._signature }
|
get signature() : Uint8Array { return this._signature }
|
||||||
|
|
||||||
constructor(data : number[]) {
|
constructor(data : Uint8Array) {
|
||||||
this._data = data
|
this._data = data
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,6 +43,8 @@ let inputNOKLongframe_too_short = "68 02 02 68 01 02 03 16"
|
|||||||
|
|
||||||
let inputNOk_wrong_startcode = "15 01 02 03 16"
|
let inputNOk_wrong_startcode = "15 01 02 03 16"
|
||||||
|
|
||||||
|
let inputNOk_illegal_number = "10 01 260 03 16"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
describe('The Meterbus Library', () => {
|
describe('The Meterbus Library', () => {
|
||||||
@ -54,7 +56,7 @@ describe('The Meterbus Library', () => {
|
|||||||
it('should parse the hexString into the telegram array', () => {
|
it('should parse the hexString into the telegram array', () => {
|
||||||
const telegram = new MeterbusLib.Telegram()
|
const telegram = new MeterbusLib.Telegram()
|
||||||
telegram.fromHexString("01 02 03")
|
telegram.fromHexString("01 02 03")
|
||||||
expect(telegram.telegram).to.deep.equal([1, 2, 3])
|
expect(telegram.telegram).to.deep.equal(new Uint8Array([1, 2, 3]))
|
||||||
})
|
})
|
||||||
it('should detect a control frame', () => {
|
it('should detect a control frame', () => {
|
||||||
const telegram = new MeterbusLib.Telegram()
|
const telegram = new MeterbusLib.Telegram()
|
||||||
@ -105,6 +107,10 @@ describe('The Meterbus Library', () => {
|
|||||||
telegram.fromHexString(inputNOKLongframe_too_short)
|
telegram.fromHexString(inputNOKLongframe_too_short)
|
||||||
expect(() => telegram.parse()).to.throw(MeterbusLibExceptions.PayloadTooShortError)
|
expect(() => telegram.parse()).to.throw(MeterbusLibExceptions.PayloadTooShortError)
|
||||||
})
|
})
|
||||||
|
it('should detect an invalid number', () => {
|
||||||
|
const telegram = new MeterbusLib.Telegram()
|
||||||
|
expect(() => telegram.fromHexString(inputNOk_illegal_number)).to.throw(MeterbusLibExceptions.IllegalNumberError)
|
||||||
|
})
|
||||||
it('should parse cField from a short frame', () => {
|
it('should parse cField from a short frame', () => {
|
||||||
const telegram = new MeterbusLib.Telegram()
|
const telegram = new MeterbusLib.Telegram()
|
||||||
telegram.fromHexString(inputOkShortframe)
|
telegram.fromHexString(inputOkShortframe)
|
||||||
@ -171,7 +177,7 @@ describe('The Meterbus Library', () => {
|
|||||||
})
|
})
|
||||||
it('should find the signature', () => {
|
it('should find the signature', () => {
|
||||||
expect((telegram.frame as MeterbusLibLongFrame.LongFrame).fixedDataHeader.signature)
|
expect((telegram.frame as MeterbusLibLongFrame.LongFrame).fixedDataHeader.signature)
|
||||||
.to.deep.equal([0,0])
|
.to.deep.equal(new Uint8Array([0,0]))
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ export namespace MeterbusLib {
|
|||||||
|
|
||||||
export class Telegram {
|
export class Telegram {
|
||||||
private _hexString : string
|
private _hexString : string
|
||||||
private _telegram : number[]
|
private _telegram : Uint8Array
|
||||||
private _frame : MeterbusLibFrames.Frame
|
private _frame : MeterbusLibFrames.Frame
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
@ -17,7 +17,7 @@ export namespace MeterbusLib {
|
|||||||
return this._hexString
|
return this._hexString
|
||||||
}
|
}
|
||||||
|
|
||||||
get telegram() : number[] {
|
get telegram() : Uint8Array {
|
||||||
return this._telegram
|
return this._telegram
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -27,9 +27,13 @@ export namespace MeterbusLib {
|
|||||||
|
|
||||||
fromHexString(hexString : string) {
|
fromHexString(hexString : string) {
|
||||||
this._hexString = hexString
|
this._hexString = hexString
|
||||||
this._telegram = this._hexString.split(' ').map<number>((val) => {
|
this._telegram = new Uint8Array(this._hexString.split(' ').map<number>((val) => {
|
||||||
return parseInt(val, 16)
|
let n = parseInt(val, 16)
|
||||||
})
|
if ((n < 0) || (n > 255)) {
|
||||||
|
throw new MeterbusLibExceptions.IllegalNumberError()
|
||||||
|
}
|
||||||
|
return n
|
||||||
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
parse() {
|
parse() {
|
||||||
|
@ -3,14 +3,14 @@ import {MeterbusLibExceptions} from './exceptions'
|
|||||||
|
|
||||||
export namespace MeterbusLibFrames {
|
export namespace MeterbusLibFrames {
|
||||||
export abstract class Frame {
|
export abstract class Frame {
|
||||||
protected _telegram : number[]
|
protected _telegram : Uint8Array
|
||||||
protected _startCharacter : number
|
protected _startCharacter : number
|
||||||
protected _frameLength : number
|
protected _frameLength : number
|
||||||
protected _firstPayload : number
|
protected _firstPayload : number
|
||||||
protected _payloadLength : number
|
protected _payloadLength : number
|
||||||
|
|
||||||
constructor(startCharacter : number, frameLength : number,
|
constructor(startCharacter : number, frameLength : number,
|
||||||
firstPayload : number, telegram : number[]) {
|
firstPayload : number, telegram : Uint8Array) {
|
||||||
this._startCharacter = startCharacter
|
this._startCharacter = startCharacter
|
||||||
this._frameLength = frameLength
|
this._frameLength = frameLength
|
||||||
this._firstPayload = firstPayload
|
this._firstPayload = firstPayload
|
||||||
@ -68,7 +68,7 @@ export namespace MeterbusLibFrames {
|
|||||||
return this._ciField
|
return this._ciField
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(telegram : number[]) {
|
constructor(telegram : Uint8Array) {
|
||||||
super(0x68, (telegram[1] + 6), 4, telegram)
|
super(0x68, (telegram[1] + 6), 4, telegram)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,7 +98,7 @@ export namespace MeterbusLibFrames {
|
|||||||
return this._address
|
return this._address
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(telegram : number[]) {
|
constructor(telegram : Uint8Array) {
|
||||||
super(0x10, 5, 1, telegram)
|
super(0x10, 5, 1, telegram)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,7 +109,7 @@ export namespace MeterbusLibFrames {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class SingleCharFrame extends Frame {
|
export class SingleCharFrame extends Frame {
|
||||||
constructor(telegram : number[]) {
|
constructor(telegram : Uint8Array) {
|
||||||
super(0xe5, 1, 0, telegram)
|
super(0xe5, 1, 0, telegram)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
export namespace MeterbusLibUtils {
|
export namespace MeterbusLibUtils {
|
||||||
export function bcd(data : number[]) : number {
|
export function bcd(data : Uint8Array) : number {
|
||||||
let v : string = ""
|
let v : string = ""
|
||||||
data.forEach((c : number) => {
|
data.forEach((c : number) => {
|
||||||
v += (c & 0xf0) >> 4
|
v += (c & 0xf0) >> 4
|
||||||
@ -9,7 +9,7 @@ export namespace MeterbusLibUtils {
|
|||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
export function manufCode(data : number[]) : string {
|
export function manufCode(data : Uint8Array) : string {
|
||||||
let v : number = (data[1] << 8) + data[0]
|
let v : number = (data[1] << 8) + data[0]
|
||||||
return String.fromCharCode((((v >> 10) & 0x1f) + 64), (((v >> 5) & 0x1f) + 64), ((v & 0x1f) + 64))
|
return String.fromCharCode((((v >> 10) & 0x1f) + 64), (((v >> 5) & 0x1f) + 64), ((v & 0x1f) + 64))
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user