replace number[] by Uint8Array

This commit is contained in:
Wolfgang Hottgenroth
2017-08-10 02:02:42 +02:00
parent 41a38f2d50
commit 098633af13
6 changed files with 32 additions and 19 deletions

View File

@ -19,4 +19,7 @@ export namespace MeterbusLibExceptions {
export class PayloadTooShortError extends InvalidTelegramError {
}
export class IllegalNumberError extends InvalidTelegramError {
}
}

View File

@ -8,7 +8,7 @@ export namespace MeterbusLibLongFrame {
private _fixedDataHeader : FixedDataHeader
get fixedDataHeader() : FixedDataHeader { return this._fixedDataHeader }
constructor(telegram : number[]) {
constructor(telegram : Uint8Array) {
super(telegram)
}
@ -20,7 +20,7 @@ export namespace MeterbusLibLongFrame {
}
export class FixedDataHeader {
private _data : number[]
private _data : Uint8Array
private _identNo : number
private _manufacturer : string
@ -28,7 +28,7 @@ export namespace MeterbusLibLongFrame {
private _medium : string
private _accessNo : number
private _status : number
private _signature : number[]
private _signature : Uint8Array
get identNo() : number { return this._identNo }
get manufacturer() : string { return this._manufacturer }
@ -36,9 +36,9 @@ export namespace MeterbusLibLongFrame {
get medium() : string { return this._medium }
get accessNo() : number { return this._accessNo }
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
}

View File

@ -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_illegal_number = "10 01 260 03 16"
describe('The Meterbus Library', () => {
@ -54,7 +56,7 @@ describe('The Meterbus Library', () => {
it('should parse the hexString into the telegram array', () => {
const telegram = new MeterbusLib.Telegram()
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', () => {
const telegram = new MeterbusLib.Telegram()
@ -105,6 +107,10 @@ describe('The Meterbus Library', () => {
telegram.fromHexString(inputNOKLongframe_too_short)
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', () => {
const telegram = new MeterbusLib.Telegram()
telegram.fromHexString(inputOkShortframe)
@ -171,7 +177,7 @@ describe('The Meterbus Library', () => {
})
it('should find the signature', () => {
expect((telegram.frame as MeterbusLibLongFrame.LongFrame).fixedDataHeader.signature)
.to.deep.equal([0,0])
.to.deep.equal(new Uint8Array([0,0]))
})
})

View File

@ -7,7 +7,7 @@ export namespace MeterbusLib {
export class Telegram {
private _hexString : string
private _telegram : number[]
private _telegram : Uint8Array
private _frame : MeterbusLibFrames.Frame
constructor() {
@ -17,7 +17,7 @@ export namespace MeterbusLib {
return this._hexString
}
get telegram() : number[] {
get telegram() : Uint8Array {
return this._telegram
}
@ -27,9 +27,13 @@ export namespace MeterbusLib {
fromHexString(hexString : string) {
this._hexString = hexString
this._telegram = this._hexString.split(' ').map<number>((val) => {
return parseInt(val, 16)
})
this._telegram = new Uint8Array(this._hexString.split(' ').map<number>((val) => {
let n = parseInt(val, 16)
if ((n < 0) || (n > 255)) {
throw new MeterbusLibExceptions.IllegalNumberError()
}
return n
}))
}
parse() {

View File

@ -3,14 +3,14 @@ import {MeterbusLibExceptions} from './exceptions'
export namespace MeterbusLibFrames {
export abstract class Frame {
protected _telegram : number[]
protected _telegram : Uint8Array
protected _startCharacter : number
protected _frameLength : number
protected _firstPayload : number
protected _payloadLength : number
constructor(startCharacter : number, frameLength : number,
firstPayload : number, telegram : number[]) {
firstPayload : number, telegram : Uint8Array) {
this._startCharacter = startCharacter
this._frameLength = frameLength
this._firstPayload = firstPayload
@ -68,7 +68,7 @@ export namespace MeterbusLibFrames {
return this._ciField
}
constructor(telegram : number[]) {
constructor(telegram : Uint8Array) {
super(0x68, (telegram[1] + 6), 4, telegram)
}
@ -98,7 +98,7 @@ export namespace MeterbusLibFrames {
return this._address
}
constructor(telegram : number[]) {
constructor(telegram : Uint8Array) {
super(0x10, 5, 1, telegram)
}
@ -109,7 +109,7 @@ export namespace MeterbusLibFrames {
}
export class SingleCharFrame extends Frame {
constructor(telegram : number[]) {
constructor(telegram : Uint8Array) {
super(0xe5, 1, 0, telegram)
}

View File

@ -1,5 +1,5 @@
export namespace MeterbusLibUtils {
export function bcd(data : number[]) : number {
export function bcd(data : Uint8Array) : number {
let v : string = ""
data.forEach((c : number) => {
v += (c & 0xf0) >> 4
@ -9,7 +9,7 @@ export namespace MeterbusLibUtils {
return r
}
export function manufCode(data : number[]) : string {
export function manufCode(data : Uint8Array) : string {
let v : number = (data[1] << 8) + data[0]
return String.fromCharCode((((v >> 10) & 0x1f) + 64), (((v >> 5) & 0x1f) + 64), ((v & 0x1f) + 64))
}