UNPKG

isatdatapro-microservices

Version:

A library for creating microservices to access Inmarsat's IsatData Pro satellite IoT system

431 lines (424 loc) 15.5 kB
'use strict'; const { coreModem } = require('../src/infra/messageCodecs'); const returnMessages = { modemRegistration: { payloadJson: { "name":"modemRegistration", "codecServiceId":0, "codecMessageId":0, "fields":[ {"name":"hardwareMajorVersion","stringValue":"0","dataType":"unsignedint"}, {"name":"hardwareMinorVersion","stringValue":"0","dataType":"unsignedint"}, {"name":"softwareMajorVersion","stringValue":"0","dataType":"unsignedint"}, {"name":"softwareMinorVersion","stringValue":"0","dataType":"unsignedint"}, {"name":"product","stringValue":"0","dataType":"unsignedint"}, {"name":"wakeupPeriod","stringValue":"None","dataType":"enum"}, {"name":"lastResetReason","stringValue":"Unknown","dataType":"enum"}, {"name":"virtualCarrier","stringValue":"0","dataType":"unsignedint"}, {"name":"beam","stringValue":"0","dataType":"unsignedint"}, {"name":"vain","stringValue":"0","dataType":"unsignedint"}, {"name":"reserved","stringValue":"0","dataType":"unsignedint"}, {"name":"operatorTxState","stringValue":"0","dataType":"unsignedint"}, {"name":"userTxState","stringValue":"0","dataType":"unsignedint"}, {"name":"broadcastIDCount","stringValue":"0","dataType":"unsignedint"} ] }, payloadRaw: [0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], otaMessageSize: 15, }, protocolError: { payloadJson: { "name":"protocolError", "codecServiceId":0, "codecMessageId":2, "fields":[ {"name":"reserved","stringValue":"0","dataType":"unsignedint"}, {"name":"messageReference","stringValue":"0","dataType":"unsignedint"}, {"name":"errorCode","stringValue":"0","dataType":"unsignedint"}, {"name":"errorInfo","stringValue":"0","dataType":"unsignedint"} ] } }, sleepSchedule: { payloadJson: { "name":"sleepSchedule", "codecServiceId":0, "codecMessageId":70, "fields":[ {"name":"wakeupPeriod","stringValue":"None","dataType":"enum"}, {"name":"mobileInitiated","stringValue":"False","dataType":"boolean"}, {"name":"messageReference","stringValue":"0","dataType":"unsignedint"} ] } }, position: { payloadJson: { "name":"position", "codecServiceId":0, "codecMessageId":72, "fields":[ {"name":"fixStatus","stringValue":"0","dataType":"unsignedint"}, {"name":"latitude","stringValue":"0","dataType":"signedint"}, {"name":"longitude","stringValue":"0","dataType":"signedint"}, {"name":"altitude","stringValue":"0","dataType":"signedint"}, {"name":"speed","stringValue":"0","dataType":"unsignedint"}, {"name":"heading","stringValue":"0","dataType":"unsignedint"}, {"name":"dayOfMonth","stringValue":"0","dataType":"unsignedint"}, {"name":"minuteOfDay","stringValue":"0","dataType":"unsignedint"} ] } }, configuration: { payloadJson: { "name":"configuration", "codecServiceId":0, "codecMessageId":97, "fields":[ {"name":"hardwareMajorVersion","stringValue":"0","dataType":"unsignedint"}, {"name":"hardwareMinorVersion","stringValue":"0","dataType":"unsignedint"}, {"name":"softwareMajorVersion","stringValue":"0","dataType":"unsignedint"}, {"name":"softwareMinorVersion","stringValue":"0","dataType":"unsignedint"}, {"name":"product","stringValue":"0","dataType":"unsignedint"}, {"name":"wakeupPeriod","stringValue":"None","dataType":"enum"}, {"name":"lastResetReason","stringValue":"Unknown","dataType":"enum"}, {"name":"virtualCarrier","stringValue":"0","dataType":"unsignedint"}, {"name":"beam","stringValue":"0","dataType":"unsignedint"}, {"name":"vain","stringValue":"0","dataType":"unsignedint"}, {"name":"reserved","stringValue":"0","dataType":"unsignedint"}, {"name":"operatorTxState","stringValue":"0","dataType":"unsignedint"}, {"name":"userTxState","stringValue":"0","dataType":"unsignedint"}, {"name":"broadcastIDCount","stringValue":"0","dataType":"unsignedint"} ] }, payloadRaw: [0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], otaMessageSize: 15, }, pingResponse: { payloadJson: { "name":"pingResponse", "codecServiceId":0, "codecMessageId":112, "fields":[ {"name":"requestTime","stringValue":"0","dataType":"unsignedint"}, {"name":"responseTime","stringValue":"0","dataType":"unsignedint"} ] }, payloadRaw: [0, 112, 0, 0, 0, 0], otaMessageSize: 6, }, pingRequest: { payloadJson: { "name":"pingRequest", "codecServiceId":0, "codecMessageId":113, "fields":[ {"name":"requestTime","stringValue":"0","dataType":"unsignedint"} ] }, payloadRaw: [0, 113, 0, 0], otaMessageSize: 4, }, broadcastIds: { payloadJson: { "name":"broadcastIDs", "codecServiceId":0, "codecMessageId":115, "fields":[ { "name":"broadcastIDs", "dataType":"array", "arrayElements":[ {"index":0,"fields":[{"name":"id","stringValue":"01234567","dataType":"unsignedint"}]}, {"index":1,"fields":[{"name":"id","stringValue":"0","dataType":"unsignedint"}]}, {"index":2,"fields":[{"name":"id","stringValue":"0","dataType":"unsignedint"}]}, {"index":3,"fields":[{"name":"id","stringValue":"0","dataType":"unsignedint"}]}, {"index":4,"fields":[{"name":"id","stringValue":"0","dataType":"unsignedint"}]}, {"index":5,"fields":[{"name":"id","stringValue":"0","dataType":"unsignedint"}]}, {"index":6,"fields":[{"name":"id","stringValue":"0","dataType":"unsignedint"}]}, {"index":7,"fields":[{"name":"id","stringValue":"0","dataType":"unsignedint"}]}, {"index":8,"fields":[{"name":"id","stringValue":"0","dataType":"unsignedint"}]}, {"index":9,"fields":[{"name":"id","stringValue":"0","dataType":"unsignedint"}]}, {"index":10,"fields":[{"name":"id","stringValue":"0","dataType":"unsignedint"}]}, {"index":11,"fields":[{"name":"id","stringValue":"0","dataType":"unsignedint"}]}, {"index":12,"fields":[{"name":"id","stringValue":"0","dataType":"unsignedint"}]}, {"index":13,"fields":[{"name":"id","stringValue":"0","dataType":"unsignedint"}]}, {"index":14,"fields":[{"name":"id","stringValue":"0","dataType":"unsignedint"}]}, {"index":15,"fields":[{"name":"id","stringValue":"0","dataType":"unsignedint"}]} ] } ] }, //payloadRaw: [0,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], otaMessageSize: 50, }, rxMetrics: { payloadJson: { "name":"rxMetrics", "codecServiceId":0, "codecMessageId":99, "fields":[ {"name":"reserved","stringValue":"0","dataType":"unsignedint"}, {"name":"period","stringValue":"LastFullMinute","dataType":"enum"}, {"name":"packets","stringValue":"0","dataType":"unsignedint"}, {"name":"packetsOK","stringValue":"0","dataType":"unsignedint"}, {"name":"averageCNO","stringValue":"0","dataType":"unsignedint"}, {"name":"samples","stringValue":"0","dataType":"unsignedint"}, {"name":"channelErrorRate","stringValue":"0","dataType":"unsignedint"}, {"name":"uwErrorRate","stringValue":"0","dataType":"unsignedint"} ] } }, txMetrics: { payloadJson: { "name": "txMetrics", "codecServiceId": 0, "codecMessageId": 100, "fields": [ { "name": "period", "stringValue": "LastFullMinute", "dataType": "enum" }, { "name": "packetTypeMask", "stringValue": "0", "dataType": "unsignedint" }, { "name": "txMetrics", "dataType": "array", "arrayElements": [ { "index": 0, "fields": [{ "name": "PacketsTotal", "stringValue": "0", "dataType": "unsignedint" }, { "name": "PacketsSuccess", "stringValue": "0", "dataType": "unsignedint" }, { "name": "PacketsFailed", "stringValue": "0", "dataType": "unsignedint" } ] }] } ] } }, txMetrics2: { payloadJson: { "name": "txMetrics", "codecServiceId": 0, "codecMessageId": 100, "fields": [ { "name": "period", "stringValue": "LastPartialDay", "dataType": "enum" }, { "name": "packetTypeMask", "stringValue": "3", "dataType": "unsignedint" }, { "name": "txMetrics", "dataType": "array", "arrayElements": [ { "index": 0, "fields": [ { "name": "PacketsTotal", "stringValue": "17", "dataType": "unsignedint" }, { "name": "PacketsSuccess", "stringValue": "17", "dataType": "unsignedint" }, { "name": "PacketsFailed", "stringValue": "0", "dataType": "unsignedint" } ] }, { "index": 1, "fields": [ { "name": "PacketsTotal", "stringValue": "8", "dataType": "unsignedint" }, { "name": "PacketsSuccess", "stringValue": "8", "dataType": "unsignedint" }, { "name": "PacketsFailed", "stringValue": "0", "dataType": "unsignedint" } ] } ] } ] }, }, lastRxMetrics: { payloadJson: { "name":"lastRxMetrics", "codecServiceId":0, "codecMessageId":98, "fields":[ {"name":"sipValid","stringValue":"False","dataType":"boolean"}, {"name":"subframe","stringValue":"512","dataType":"unsignedint"}, {"name":"packets","stringValue":"0","dataType":"unsignedint"}, {"name":"packetsOK","stringValue":"0","dataType":"unsignedint"}, {"name":"frequencyOffset","stringValue":"0","dataType":"unsignedint"}, {"name":"timingOffset","stringValue":"0","dataType":"unsignedint"}, {"name":"packetCNO","stringValue":"0","dataType":"unsignedint"}, {"name":"uwCNO","stringValue":"0","dataType":"unsignedint"}, {"name":"uwRSSI","stringValue":"0","dataType":"unsignedint"}, {"name":"uwSymbols","stringValue":"0","dataType":"unsignedint"}, {"name":"uwErrors","stringValue":"0","dataType":"unsignedint"}, {"name":"packetSymbols","stringValue":"0","dataType":"unsignedint"}, {"name":"packetErrors","stringValue":"0","dataType":"unsignedint"} ] } } }; const forwardMessages = { reset: { payloadJson: { "name":"reset", "codecServiceId":0, "codecMessageId":68, "isForward": true, "fields":[ {"name":"resetType","stringValue":"TerminalModemFlush","dataType":"enum"} ] }, payloadRaw: [0, 68, 3], otaMessageSize: 3, }, setSleepSchedule: { payloadJson: { "name":"setSleepSchedule", "codecServiceId":0, "codecMessageId":70, "isForward": true, "fields":[ {"name":"wakeupPeriod","stringValue":"None","dataType":"enum"} ] }, payloadRaw: [0, 70, 0], otaMessageSize: 3, }, setTxMute: { payloadJson: { "name":"setTxMute", "codecServiceId":0, "codecMessageId":71, "isForward": true, "fields":[ {"name":"reserved","stringValue":"0","dataType":"unsignedint"}, {"name":"txMute","stringValue":"True","dataType":"boolean"} ] }, payloadRaw: [0, 71, 0], otaMessageSize: 3, }, getPosition: { payloadJson: {"name":"getPosition","codecServiceId":0,"codecMessageId":72,"isForward": true}, payloadRaw: [0, 72], otaMessageSize: 2, }, getRxMetrics: { payloadJson: { "name":"getRxMetrics", "codecServiceId":0, "codecMessageId":99, "isForward":"True", "fields":[ {"name":"reserved","stringValue":"0","dataType":"unsignedint"}, {"name":"period","stringValue":"LastFullMinute","dataType":"enum"} ] } }, getTxMetrics: { payloadJson: { "name":"getTxMetrics", "codecServiceId":0, "codecMessageId":100, "isForward":"True", "fields":[ {"name":"reserved","stringValue":"0","dataType":"unsignedint"}, {"name":"period","stringValue":"LastFullMinute","dataType":"enum"} ] } }, }; function test() { let returnCase = 0; const returnTests = [ 'none', ]; for (let testCase in returnMessages) { if (returnTests[0] === 'none') break; if (returnTests.length === 0 || returnTests.includes(testCase)) { returnCase += 1; let message = returnMessages[testCase]; message.messageId = returnCase; message.mobileId = '00000000MFREE3D'; message.codecServiceId = 0; message.receiveTimeUtc = new Date().toISOString().substring(0, 19) + 'Z'; message.mailboxTimeUtc = message.receiveTimeUtc; let response = coreModem.parse(message); console.log(`${JSON.stringify(response)}`); } } let forwardCase = 0; const forwardTests = [ 'setSleepSchedule', ]; for (let testCase in forwardMessages) { if (forwardTests[0] === 'none') break; if (forwardTests.length === 0 || forwardTests.includes(testCase)) { forwardCase += 1; let match = true; let payloadJson; switch (testCase) { case 'reset': payloadJson = coreModem.commandMessages.reset(); break; case 'setSleepSchedule': payloadJson = coreModem.commandMessages.setWakeupPeriod('None'); break; case 'setTxMute': payloadJson = coreModem.commandMessages.setTxMute(true); break; case 'getPosition': payloadJson = coreModem.commandMessages.getLocation(); break; default: console.log(`No encoding defined for ${testCase}`); } if (payloadJson) { const benchmark = forwardMessages[testCase].payloadJson; for (let prop in benchmark) { if (benchmark.hasOwnProperty(prop)) { if (payloadJson.hasOwnProperty(prop)) { if (payloadJson[prop] instanceof Array) { payloadJson[prop].forEach(subProp => { if (benchmark[prop][subProp] !== payloadJson[prop][subProp]) { console.log(`Mismatch ${subProp}`); match = false; } }); } else { if (benchmark[prop] != payloadJson[prop]) { console.log(`Mismatch ${prop}`); match = false; } } } else { console.log(`Mismatch ${prop}`); match = false; } } } if (match) { console.log(`Matched ${testCase}`) } } } } } //test();