From dfddf441919f5de35d5e46978f00f381f6ecb3f0 Mon Sep 17 00:00:00 2001 From: david Date: Wed, 13 Nov 2024 17:24:32 +0000 Subject: [PATCH] added ServiceType to ESD --- cbusLibrary.js | 34 +++++++++++++++++----------------- package.json | 2 +- unit_tests/cbusLibrary.spec.js | 28 ++++++++++++++-------------- 3 files changed, 32 insertions(+), 32 deletions(-) diff --git a/cbusLibrary.js b/cbusLibrary.js index c0b7827..cf06281 100644 --- a/cbusLibrary.js +++ b/cbusLibrary.js @@ -1384,14 +1384,14 @@ class cbusLibrary { if(!message.hasOwnProperty('build')) {throw Error("encode: property 'build' missing")}; message.encoded = this.encodeSTAT(message.nodeNumber, message.CS, message.flags, message.major, message.minor, message.build); break; - case 'ESD': // E7 + case 'ESD': // E7 if(!message.hasOwnProperty('nodeNumber')) {throw Error("encode: property 'nodeNumber' missing")}; if(!message.hasOwnProperty('ServiceIndex')) {throw Error("encode: property 'ServiceIndex' missing")}; + if(!message.hasOwnProperty('ServiceType')) {throw Error("encode: property 'ServiceType' missing")}; if(!message.hasOwnProperty('Data1')) {throw Error("encode: property 'Data1' missing")}; if(!message.hasOwnProperty('Data2')) {throw Error("encode: property 'Data2' missing")}; if(!message.hasOwnProperty('Data3')) {throw Error("encode: property 'Data3' missing")}; - if(!message.hasOwnProperty('Data4')) {throw Error("encode: property 'Data4' missing")}; - message.encoded = this.encodeESD(message.nodeNumber, message.ServiceIndex, message.Data1, message.Data2, message.Data3, message.Data4); + message.encoded = this.encodeESD(message.nodeNumber, message.ServiceIndex, message.ServiceType, message.Data1, message.Data2, message.Data3); break; case 'PARAMS': // EF if(!message.hasOwnProperty('param1')) {throw Error("encode: property 'param1' missing")}; @@ -5127,8 +5127,8 @@ class cbusLibrary { // E7 ESD - // ESD Format: [] - // + // ESD Format: [] + // // decodeESD(message) { return {'encoded': message, @@ -5137,36 +5137,36 @@ class cbusLibrary { 'opCode': message.substr(7, 2), 'nodeNumber': parseInt(message.substr(9, 4), 16), 'ServiceIndex': parseInt(message.substr(13, 2), 16), - 'Data1': parseInt(message.substr(15, 2), 16), - 'Data2': parseInt(message.substr(17,2), 16), - 'Data3': parseInt(message.substr(19, 2), 16), - 'Data4': parseInt(message.substr(21, 2), 16), + 'ServiceType': parseInt(message.substr(15, 2), 16), + 'Data1': parseInt(message.substr(17,2), 16), + 'Data2': parseInt(message.substr(19, 2), 16), + 'Data3': parseInt(message.substr(21, 2), 16), 'text': "ESD (E7) nodeNumber " + parseInt(message.substr(9, 4), 16) + " ServiceIndex " + parseInt(message.substr(13, 2), 16) + - " Data1 " + parseInt(message.substr(15, 2), 16) + - " Data2 " + parseInt(message.substr(17, 2), 16) + - " Data3 " + parseInt(message.substr(19, 2), 16) + - " Data4 " + parseInt(message.substr(21, 2), 16) + " ServiceType " + parseInt(message.substr(15, 2), 16) + + " Data1 " + parseInt(message.substr(17, 2), 16) + + " Data2 " + parseInt(message.substr(19, 2), 16) + + " Data3 " + parseInt(message.substr(21, 2), 16) } } /** * @desc opCode E7
* @param {int} nodeNumber 0 to 65535 * @param {int} ServiceIndex 0 to 255 + * @param {int} ServiceType 0 to 255 * @param {int} Data1 0 to 255 * @param {int} Data2 0 to 255 * @param {int} Data3 0 to 255 - * @param {int} Data4 0 to 255 * @return {String} CBUS message encoded as a 'Grid Connect' ASCII string
* Format: [<MjPri><MinPri=2><CANID>]<E7><nodeNumber hi><nodeNumber lo><ServiceIndex><Data1><Data2><Data3><Data4> */ - encodeESD(nodeNumber, ServiceIndex, Data1, Data2, Data3, Data4) { + encodeESD(nodeNumber, ServiceIndex, ServiceType, Data1, Data2, Data3) { return this.header({MinPri: 2}) + 'E7' + decToHex(nodeNumber, 4) + decToHex(ServiceIndex, 2) + + decToHex(ServiceType, 2) + decToHex(Data1, 2) + decToHex(Data2, 2) + - decToHex(Data3, 2) + - decToHex(Data4, 2) + ';' + decToHex(Data3, 2) + ';' } diff --git a/package.json b/package.json index f90af83..131d3b6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cbuslibrary", - "version": "2.7.5", + "version": "2.7.6", "description": "Library to decode & encode CBUS messages", "main": "cbusLibrary.js", "directories": { diff --git a/unit_tests/cbusLibrary.spec.js b/unit_tests/cbusLibrary.spec.js index 10456e3..91c090a 100644 --- a/unit_tests/cbusLibrary.spec.js +++ b/unit_tests/cbusLibrary.spec.js @@ -246,7 +246,7 @@ describe('cbusMessage tests', function(){ testCases.push({'test':{'mnemonic': 'PLOC', 'session': '1', 'address':'2', 'speed':'3', 'direction':'Forward', 'Fn1':'5', 'Fn2':'6', 'Fn3':'7'}, 'expected': ':SA780NE101000283050607;'}); testCases.push({'test':{'mnemonic': 'NAME', 'name': '1234567'}, 'expected': ':SB780NE231323334353637;'}); testCases.push({'test':{'mnemonic': 'STAT', 'nodeNumber':'1', 'CS':'2', 'flags':'3', 'major':'4', 'minor':'5', 'build':'6'}, 'expected': ':SA780NE300010203040506;'}); - testCases.push({'test':{'mnemonic': 'ESD', 'nodeNumber':'1', 'ServiceIndex':'2', 'Data1':'3', 'Data2':'4', 'Data3':'5', 'Data4':'6'}, 'expected': ':SA780NE700010203040506;'}); + testCases.push({'test':{'mnemonic': 'ESD', 'nodeNumber':'1', 'ServiceIndex':'2', 'ServiceType':'3', 'Data1':'4', 'Data2':'5', 'Data3':'6'}, 'expected': ':SA780NE700010203040506;'}); testCases.push({'test':{'mnemonic': 'PARAMS', 'param1': '1', 'param2':'2', 'param3':'3', 'param4':'4', 'param5':'5', 'param6':'6', 'param7':'7'}, 'expected': ':SB780NEF01020304050607;'}); testCases.push({'test':{'mnemonic': 'ACON3', 'nodeNumber': '1', 'eventNumber':'2', 'data1':'3', 'data2':'4', 'data3':'5'}, 'expected': ':SB780NF000010002030405;'}); testCases.push({'test':{'mnemonic': 'ACOF3', 'nodeNumber': '1', 'eventNumber':'2', 'data1':'3', 'data2':'4', 'data3':'5'}, 'expected': ':SB780NF100010002030405;'}); @@ -593,12 +593,12 @@ describe('cbusMessage tests', function(){ testCases.push({'test':{'mnemonic': 'STAT', 'nodeNumber':'1', 'CS':'2', 'flags':'3', 'minor':'5', 'build':'6'}, 'expected': 'encode: property \'major\' missing'}); testCases.push({'test':{'mnemonic': 'STAT', 'nodeNumber':'1', 'CS':'2', 'flags':'3', 'major':'4', 'build':'6'}, 'expected': 'encode: property \'minor\' missing'}); testCases.push({'test':{'mnemonic': 'STAT', 'nodeNumber':'1', 'CS':'2', 'flags':'3', 'major':'4', 'minor':'5'}, 'expected': 'encode: property \'build\' missing'}); - testCases.push({'test':{'mnemonic': 'ESD', 'ServiceIndex':'2', 'Data1':'3', 'Data2':'5', 'Data3':'4', 'Data4':'6'}, 'expected': 'encode: property \'nodeNumber\' missing'}); - testCases.push({'test':{'mnemonic': 'ESD', 'nodeNumber':'1', 'Data1':'3', 'Data2':'4', 'Data3':'5', 'Data4':'6'}, 'expected': 'encode: property \'ServiceIndex\' missing'}); - testCases.push({'test':{'mnemonic': 'ESD', 'nodeNumber':'1', 'ServiceIndex':'2', 'Data2':'4', 'Data3':'5', 'Data4':'6'}, 'expected': 'encode: property \'Data1\' missing'}); - testCases.push({'test':{'mnemonic': 'ESD', 'nodeNumber':'1', 'ServiceIndex':'2', 'Data1':'3', 'Data3':'5', 'Data4':'6'}, 'expected': 'encode: property \'Data2\' missing'}); - testCases.push({'test':{'mnemonic': 'ESD', 'nodeNumber':'1', 'ServiceIndex':'2', 'Data1':'3', 'Data2':'4', 'Data4':'6'}, 'expected': 'encode: property \'Data3\' missing'}); - testCases.push({'test':{'mnemonic': 'ESD', 'nodeNumber':'1', 'ServiceIndex':'2', 'Data1':'3', 'Data2':'4', 'Data3':'5'}, 'expected': 'encode: property \'Data4\' missing'}); + testCases.push({'test':{'mnemonic': 'ESD', 'ServiceIndex':'2', 'Data1':'3', 'Data1':'5', 'Data2':'4', 'Data3':'6'}, 'expected': 'encode: property \'nodeNumber\' missing'}); + testCases.push({'test':{'mnemonic': 'ESD', 'nodeNumber':'1', 'ServiceType':'3', 'Data1':'4', 'Data2':'5', 'Data3':'6'}, 'expected': 'encode: property \'ServiceIndex\' missing'}); + testCases.push({'test':{'mnemonic': 'ESD', 'nodeNumber':'1', 'ServiceIndex':'2', 'Data1':'4', 'Data2':'5', 'Data3':'6'}, 'expected': 'encode: property \'ServiceType\' missing'}); + testCases.push({'test':{'mnemonic': 'ESD', 'nodeNumber':'1', 'ServiceIndex':'2', 'ServiceType':'3', 'Data2':'5', 'Data3':'6'}, 'expected': 'encode: property \'Data1\' missing'}); + testCases.push({'test':{'mnemonic': 'ESD', 'nodeNumber':'1', 'ServiceIndex':'2', 'ServiceType':'3', 'Data1':'4', 'Data3':'6'}, 'expected': 'encode: property \'Data2\' missing'}); + testCases.push({'test':{'mnemonic': 'ESD', 'nodeNumber':'1', 'ServiceIndex':'2', 'ServiceType':'3', 'Data1':'4', 'Data2':'5'}, 'expected': 'encode: property \'Data3\' missing'}); testCases.push({'test':{'mnemonic': 'PARAMS', 'param2':'2', 'param3':'3', 'param4':'4', 'param5':'5', 'param6':'6', 'param7':'7'}, 'expected': 'encode: property \'param1\' missing'}); testCases.push({'test':{'mnemonic': 'PARAMS', 'param1':'1', 'param3':'3', 'param4':'4', 'param5':'5', 'param6':'6', 'param7':'7'}, 'expected': 'encode: property \'param2\' missing'}); testCases.push({'test':{'mnemonic': 'PARAMS', 'param1':'1', 'param2':'3', 'param4':'4', 'param5':'5', 'param6':'6', 'param7':'7'}, 'expected': 'encode: property \'param3\' missing'}); @@ -5839,10 +5839,10 @@ describe('cbusMessage tests', function(){ 'opCode':'E7', 'nodeNumber':arg1, 'ServiceIndex':arg2, - 'Data1':arg3, - 'Data2':arg4, - 'Data3':arg5, - 'Data4':arg6}); + 'ServiceType':arg3, + 'Data1':arg4, + 'Data2':arg5, + 'Data3':arg6}); } } } @@ -5857,8 +5857,8 @@ describe('cbusMessage tests', function(){ itParam("ESD test nodeNumber ${value.nodeNumber} ServiceIndex ${value.ServiceIndex} Data1 ${value.Data1} Data2 ${value.Data2} Data3 ${value.Data3} Data4 ${value.Data4}", GetTestCase_ESD(), function (value) { winston.info({message: 'cbusMessage test: BEGIN ' + value.mnemonic +' test ' + JSON.stringify(value)}); - expected = ":SA780N" + value.opCode + decToHex(value.nodeNumber, 4) + decToHex(value.ServiceIndex, 2) + decToHex(value.Data1, 2) + decToHex(value.Data2, 2) + decToHex(value.Data3, 2) + decToHex(value.Data4, 2) + ";"; - var encode = cbusLib.encodeESD(value.nodeNumber, value.ServiceIndex, value.Data1, value.Data2, value.Data3, value.Data4); + expected = ":SA780N" + value.opCode + decToHex(value.nodeNumber, 4) + decToHex(value.ServiceIndex, 2) + decToHex(value.ServiceType, 2) + decToHex(value.Data1, 2) + decToHex(value.Data2, 2) + decToHex(value.Data3, 2) + ";"; + var encode = cbusLib.encodeESD(value.nodeNumber, value.ServiceIndex, value.ServiceType, value.Data1, value.Data2, value.Data3); var decode = cbusLib.decode(encode); winston.info({message: 'cbusMessage test: ' + value.mnemonic +' encode ' + encode}); expect(encode).to.equal(expected, 'encode'); @@ -5871,10 +5871,10 @@ describe('cbusMessage tests', function(){ expect(decode.text).to.include('(' + value.opCode + ')', 'text opCode'); expect(decode.nodeNumber).to.equal(value.nodeNumber, 'nodeNumber'); expect(decode.ServiceIndex).to.equal(value.ServiceIndex, 'ServiceIndex'); + expect(decode.ServiceType).to.equal(value.ServiceType, 'ServiceType'); expect(decode.Data1).to.equal(value.Data1, 'Data1'); expect(decode.Data2).to.equal(value.Data2, 'Data2'); expect(decode.Data3).to.equal(value.Data3, 'Data3'); - expect(decode.Data4).to.equal(value.Data4, 'Data4'); })