Compare commits

...

2 Commits

Author SHA1 Message Date
Wolfgang Hottgenroth
83143ca8c2 utils test adapted to Uint8Array 2017-08-10 13:11:43 +02:00
Wolfgang Hottgenroth
098633af13 replace number[] by Uint8Array 2017-08-10 02:02:42 +02:00
7 changed files with 45 additions and 25 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)
}
@ -17,10 +17,14 @@ export namespace MeterbusLibLongFrame {
this._fixedDataHeader = new FixedDataHeader(this._telegram.slice(7, 19))
this._fixedDataHeader.parse()
}
getJSON() : string {
return JSON.stringify(this)
}
}
export class FixedDataHeader {
private _data : number[]
private _data : Uint8Array
private _identNo : number
private _manufacturer : string
@ -28,7 +32,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 +40,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,10 @@ 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]))
})
it('should print itself as json', () => {
console.log((telegram.frame as MeterbusLibLongFrame.LongFrame).getJSON())
})
})

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

@ -8,21 +8,21 @@ const expect = chai.expect
describe('The Meterbus Library Utils', () => {
it('should convert a bcd to a number (10203)', () => {
expect(MeterbusLibUtils.bcd([1, 2, 3])).to.equal(10203)
expect(MeterbusLibUtils.bcd(new Uint8Array([1, 2, 3]))).to.equal(10203)
})
it('should convert a bcd to a number (0010203)', () => {
expect(MeterbusLibUtils.bcd([0, 1, 2, 3])).to.equal(10203)
expect(MeterbusLibUtils.bcd(new Uint8Array([0, 1, 2, 3]))).to.equal(10203)
})
it('should convert a bcd to a number (0)', () => {
expect(MeterbusLibUtils.bcd([0, 0, 0])).to.equal(0)
expect(MeterbusLibUtils.bcd(new Uint8Array([0, 0, 0]))).to.equal(0)
})
it('should convert a bcd to a number (0)', () => {
expect(MeterbusLibUtils.bcd([0, 0, 0, 0])).to.equal(0)
expect(MeterbusLibUtils.bcd(new Uint8Array([0, 0, 0, 0]))).to.equal(0)
})
it('should convert a bcd to a number (99999999)', () => {
expect(MeterbusLibUtils.bcd([0x99, 0x99, 0x99, 0x99])).to.equal(99999999)
expect(MeterbusLibUtils.bcd(new Uint8Array([0x99, 0x99, 0x99, 0x99]))).to.equal(99999999)
})
it('should convert two number to manufacturer code', () => {
expect(MeterbusLibUtils.manufCode([0x2e, 0x19])).to.equal("FIN")
expect(MeterbusLibUtils.manufCode(new Uint8Array([0x2e, 0x19]))).to.equal("FIN")
})
})

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))
}