@bitpoolos/edge-bacnet 1.1.8 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/bacnet_client.js +331 -168
  2. package/bacnet_device.js +50 -16
  3. package/bacnet_gateway.html +119 -15
  4. package/bacnet_gateway.js +388 -395
  5. package/bacnet_read.html +32 -11
  6. package/bacnet_read.js +1 -1
  7. package/bacnet_server.js +16 -12
  8. package/common.js +26 -19
  9. package/examples/1-Discover-Read.json +1 -1
  10. package/examples/2-Discover-Write.json +1 -1
  11. package/examples/3-Discover-Read-Write.json +1 -1
  12. package/package.json +3 -3
  13. package/resources/{node-bacnet/LICENSE.md → node-bacstack-ts/LICENSE} +3 -4
  14. package/resources/node-bacstack-ts/README.md +75 -0
  15. package/resources/{node-bacnet → node-bacstack-ts/dist}/index.js +0 -2
  16. package/resources/node-bacstack-ts/dist/lib/apdu.js +193 -0
  17. package/resources/node-bacstack-ts/dist/lib/asn1.js +1660 -0
  18. package/resources/node-bacstack-ts/dist/lib/bvlc.js +47 -0
  19. package/resources/node-bacstack-ts/dist/lib/client.js +1454 -0
  20. package/resources/node-bacstack-ts/dist/lib/enum.js +2114 -0
  21. package/resources/node-bacstack-ts/dist/lib/npdu.js +112 -0
  22. package/resources/node-bacstack-ts/dist/lib/services/add-list-element.js +58 -0
  23. package/resources/node-bacstack-ts/dist/lib/services/alarm-acknowledge.js +93 -0
  24. package/resources/node-bacstack-ts/dist/lib/services/alarm-summary.js +42 -0
  25. package/resources/node-bacstack-ts/dist/lib/services/atomic-read-file.js +157 -0
  26. package/resources/node-bacstack-ts/dist/lib/services/atomic-write-file.js +136 -0
  27. package/resources/node-bacstack-ts/dist/lib/services/cov-notify.js +119 -0
  28. package/resources/node-bacstack-ts/dist/lib/services/create-object.js +104 -0
  29. package/resources/node-bacstack-ts/dist/lib/services/delete-object.js +21 -0
  30. package/resources/node-bacstack-ts/dist/lib/services/device-communication-control.js +46 -0
  31. package/resources/node-bacstack-ts/dist/lib/services/error.js +27 -0
  32. package/resources/node-bacstack-ts/dist/lib/services/event-information.js +100 -0
  33. package/resources/node-bacstack-ts/dist/lib/services/event-notify-data.js +219 -0
  34. package/resources/node-bacstack-ts/dist/lib/services/get-enrollment-summary.js +172 -0
  35. package/resources/node-bacstack-ts/dist/lib/services/get-event-information.js +135 -0
  36. package/resources/node-bacstack-ts/dist/lib/services/i-am-broadcast.js +59 -0
  37. package/resources/node-bacstack-ts/dist/lib/services/i-have-broadcast.js +34 -0
  38. package/resources/node-bacstack-ts/dist/lib/services/index.js +32 -0
  39. package/resources/node-bacstack-ts/dist/lib/services/life-safety-operation.js +40 -0
  40. package/resources/node-bacstack-ts/dist/lib/services/private-transfer.js +43 -0
  41. package/resources/node-bacstack-ts/dist/lib/services/read-property-multiple.js +44 -0
  42. package/resources/node-bacstack-ts/dist/lib/services/read-property.js +122 -0
  43. package/resources/node-bacstack-ts/dist/lib/services/read-range.js +201 -0
  44. package/resources/node-bacstack-ts/dist/lib/services/reinitialize-device.js +35 -0
  45. package/resources/node-bacstack-ts/dist/lib/services/subscribe-cov.js +55 -0
  46. package/resources/node-bacstack-ts/dist/lib/services/subscribe-property.js +93 -0
  47. package/resources/node-bacstack-ts/dist/lib/services/time-sync.js +31 -0
  48. package/resources/node-bacstack-ts/dist/lib/services/who-has.js +56 -0
  49. package/resources/node-bacstack-ts/dist/lib/services/who-is.js +45 -0
  50. package/resources/node-bacstack-ts/dist/lib/services/write-property-multiple.js +105 -0
  51. package/resources/node-bacstack-ts/dist/lib/services/write-property.js +90 -0
  52. package/resources/node-bacstack-ts/dist/lib/transport.js +49 -0
  53. package/resources/node-bacstack-ts/dist/lib/types.js +2 -0
  54. package/resources/node-bacstack-ts/package.json +94 -0
  55. package/resources/node-bacnet/CHANGELOG.md +0 -481
  56. package/resources/node-bacnet/README.md +0 -91
  57. package/resources/node-bacnet/docs/Client.html +0 -4422
  58. package/resources/node-bacnet/docs/bacnet-icon-quad.png +0 -0
  59. package/resources/node-bacnet/docs/bacnet-icon-quad128.png +0 -0
  60. package/resources/node-bacnet/docs/bacnet-icon-quad64.png +0 -0
  61. package/resources/node-bacnet/docs/bacnet-icon-small.xcf +0 -0
  62. package/resources/node-bacnet/docs/bacnet-icon.xcf +0 -0
  63. package/resources/node-bacnet/docs/bacnet.html +0 -7032
  64. package/resources/node-bacnet/docs/client.js.html +0 -1759
  65. package/resources/node-bacnet/docs/enum.js.html +0 -2530
  66. package/resources/node-bacnet/docs/global.html +0 -2068
  67. package/resources/node-bacnet/docs/images/mocha-logo.svg +0 -65
  68. package/resources/node-bacnet/docs/index.html +0 -283
  69. package/resources/node-bacnet/docs/scripts/collapse.js +0 -11
  70. package/resources/node-bacnet/docs/scripts/jquery-3.1.1.min.js +0 -4
  71. package/resources/node-bacnet/docs/scripts/linenumber.js +0 -26
  72. package/resources/node-bacnet/docs/scripts/prettify/Apache-License-2.0.txt +0 -202
  73. package/resources/node-bacnet/docs/scripts/prettify/lang-css.js +0 -2
  74. package/resources/node-bacnet/docs/scripts/prettify/prettify.js +0 -28
  75. package/resources/node-bacnet/docs/scripts/search.js +0 -47
  76. package/resources/node-bacnet/docs/services_i-am.js.html +0 -157
  77. package/resources/node-bacnet/docs/services_time-sync.js.html +0 -118
  78. package/resources/node-bacnet/docs/services_who-is.js.html +0 -138
  79. package/resources/node-bacnet/docs/styles/jsdoc.css +0 -683
  80. package/resources/node-bacnet/docs/styles/prettify.css +0 -82
  81. package/resources/node-bacnet/examples/discover-devices.js +0 -66
  82. package/resources/node-bacnet/examples/read-device.js +0 -510
  83. package/resources/node-bacnet/examples/subscribe-cov.js +0 -75
  84. package/resources/node-bacnet/lib/apdu.js +0 -209
  85. package/resources/node-bacnet/lib/asn1.js +0 -1733
  86. package/resources/node-bacnet/lib/bvlc.js +0 -90
  87. package/resources/node-bacnet/lib/client.js +0 -1695
  88. package/resources/node-bacnet/lib/enum.js +0 -2463
  89. package/resources/node-bacnet/lib/npdu.js +0 -123
  90. package/resources/node-bacnet/lib/services/add-list-element.js +0 -64
  91. package/resources/node-bacnet/lib/services/alarm-acknowledge.js +0 -90
  92. package/resources/node-bacnet/lib/services/alarm-summary.js +0 -42
  93. package/resources/node-bacnet/lib/services/atomic-read-file.js +0 -162
  94. package/resources/node-bacnet/lib/services/atomic-write-file.js +0 -138
  95. package/resources/node-bacnet/lib/services/cov-notify.js +0 -126
  96. package/resources/node-bacnet/lib/services/create-object.js +0 -106
  97. package/resources/node-bacnet/lib/services/delete-object.js +0 -23
  98. package/resources/node-bacnet/lib/services/device-communication-control.js +0 -48
  99. package/resources/node-bacnet/lib/services/error.js +0 -33
  100. package/resources/node-bacnet/lib/services/event-information.js +0 -99
  101. package/resources/node-bacnet/lib/services/event-notify-data.js +0 -229
  102. package/resources/node-bacnet/lib/services/get-enrollment-summary.js +0 -178
  103. package/resources/node-bacnet/lib/services/get-event-information.js +0 -144
  104. package/resources/node-bacnet/lib/services/i-am.js +0 -90
  105. package/resources/node-bacnet/lib/services/i-have.js +0 -34
  106. package/resources/node-bacnet/lib/services/index.js +0 -34
  107. package/resources/node-bacnet/lib/services/life-safety-operation.js +0 -40
  108. package/resources/node-bacnet/lib/services/private-transfer.js +0 -43
  109. package/resources/node-bacnet/lib/services/read-property-multiple.js +0 -50
  110. package/resources/node-bacnet/lib/services/read-property.js +0 -130
  111. package/resources/node-bacnet/lib/services/read-range.js +0 -201
  112. package/resources/node-bacnet/lib/services/register-foreign-device.js +0 -18
  113. package/resources/node-bacnet/lib/services/reinitialize-device.js +0 -37
  114. package/resources/node-bacnet/lib/services/subscribe-cov.js +0 -57
  115. package/resources/node-bacnet/lib/services/subscribe-property.js +0 -97
  116. package/resources/node-bacnet/lib/services/time-sync.js +0 -51
  117. package/resources/node-bacnet/lib/services/who-has.js +0 -54
  118. package/resources/node-bacnet/lib/services/who-is.js +0 -71
  119. package/resources/node-bacnet/lib/services/write-property-multiple.js +0 -117
  120. package/resources/node-bacnet/lib/services/write-property.js +0 -94
  121. package/resources/node-bacnet/lib/transport.js +0 -82
  122. package/resources/node-bacnet/package.json +0 -92
@@ -0,0 +1,112 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.encode = exports.decode = exports.decodeFunction = void 0;
4
+ const baEnum = require("./enum");
5
+ const BACNET_PROTOCOL_VERSION = 1;
6
+ const BacnetAddressTypes = {
7
+ NONE: 0,
8
+ IP: 1
9
+ };
10
+ const decodeTarget = (buffer, offset) => {
11
+ let len = 0;
12
+ const target = { type: BacnetAddressTypes.NONE, net: (buffer[offset + len++] << 8) | (buffer[offset + len++] << 0) };
13
+ const adrLen = buffer[offset + len++];
14
+ if (adrLen > 0) {
15
+ target.adr = [];
16
+ for (let i = 0; i < adrLen; i++) {
17
+ target.adr.push(buffer[offset + len++]);
18
+ }
19
+ }
20
+ return {
21
+ target: target,
22
+ len: len
23
+ };
24
+ };
25
+ const encodeTarget = (buffer, target) => {
26
+ buffer.buffer[buffer.offset++] = (target.net & 0xFF00) >> 8;
27
+ buffer.buffer[buffer.offset++] = (target.net & 0x00FF) >> 0;
28
+ if (target.net === 0xFFFF || !target.adr) {
29
+ buffer.buffer[buffer.offset++] = 0;
30
+ }
31
+ else {
32
+ buffer.buffer[buffer.offset++] = target.adr.length;
33
+ if (target.adr.length > 0) {
34
+ for (let i = 0; i < target.adr.length; i++) {
35
+ buffer.buffer[buffer.offset++] = target.adr[i];
36
+ }
37
+ }
38
+ }
39
+ };
40
+ const decodeFunction = (buffer, offset) => {
41
+ if (buffer[offset + 0] !== BACNET_PROTOCOL_VERSION)
42
+ return;
43
+ return buffer[offset + 1];
44
+ };
45
+ exports.decodeFunction = decodeFunction;
46
+ const decode = (buffer, offset) => {
47
+ const orgOffset = offset;
48
+ offset++;
49
+ const funct = buffer[offset++];
50
+ let destination;
51
+ if (funct & baEnum.NpduControlBits.DESTINATION_SPECIFIED) {
52
+ const tmpDestination = decodeTarget(buffer, offset);
53
+ offset += tmpDestination.len;
54
+ destination = tmpDestination.target;
55
+ }
56
+ let source;
57
+ if (funct & baEnum.NpduControlBits.SOURCE_SPECIFIED) {
58
+ const tmpSource = decodeTarget(buffer, offset);
59
+ offset += tmpSource.len;
60
+ source = tmpSource.target;
61
+ }
62
+ let hopCount = 0;
63
+ if (funct & baEnum.NpduControlBits.DESTINATION_SPECIFIED) {
64
+ hopCount = buffer[offset++];
65
+ }
66
+ let networkMsgType = baEnum.NetworkLayerMessageType.WHO_IS_ROUTER_TO_NETWORK;
67
+ let vendorId = 0;
68
+ if (funct & baEnum.NpduControlBits.NETWORK_LAYER_MESSAGE) {
69
+ networkMsgType = buffer[offset++];
70
+ if (networkMsgType >= 0x80) {
71
+ vendorId = (buffer[offset++] << 8) | (buffer[offset++] << 0);
72
+ }
73
+ else if (networkMsgType === baEnum.NetworkLayerMessageType.WHO_IS_ROUTER_TO_NETWORK) {
74
+ offset += 2;
75
+ }
76
+ }
77
+ if (buffer[orgOffset + 0] !== BACNET_PROTOCOL_VERSION)
78
+ return;
79
+ return {
80
+ len: offset - orgOffset,
81
+ funct: funct,
82
+ destination: destination,
83
+ source: source,
84
+ hopCount: hopCount,
85
+ networkMsgType: networkMsgType,
86
+ vendorId: vendorId
87
+ };
88
+ };
89
+ exports.decode = decode;
90
+ const encode = (buffer, funct, destination, source, hopCount, networkMsgType, vendorId) => {
91
+ const hasDestination = destination && destination.net > 0;
92
+ const hasSource = source && source.net > 0 && source.net !== 0xFFFF;
93
+ buffer.buffer[buffer.offset++] = BACNET_PROTOCOL_VERSION;
94
+ buffer.buffer[buffer.offset++] = funct | (hasDestination ? baEnum.NpduControlBits.DESTINATION_SPECIFIED : 0) | (hasSource ? baEnum.NpduControlBits.SOURCE_SPECIFIED : 0);
95
+ if (hasDestination) {
96
+ encodeTarget(buffer, destination);
97
+ }
98
+ if (hasSource) {
99
+ encodeTarget(buffer, source);
100
+ }
101
+ if (hasDestination) {
102
+ buffer.buffer[buffer.offset++] = hopCount;
103
+ }
104
+ if ((funct & baEnum.NpduControlBits.NETWORK_LAYER_MESSAGE) > 0) {
105
+ buffer.buffer[buffer.offset++] = networkMsgType;
106
+ if (networkMsgType >= 0x80) {
107
+ buffer.buffer[buffer.offset++] = (vendorId & 0xFF00) >> 8;
108
+ buffer.buffer[buffer.offset++] = (vendorId & 0x00FF) >> 0;
109
+ }
110
+ }
111
+ };
112
+ exports.encode = encode;
@@ -0,0 +1,58 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.decode = exports.encode = void 0;
4
+ const baAsn1 = require("../asn1");
5
+ const baEnum = require("../enum");
6
+ const encode = (buffer, objectId, propertyId, arrayIndex, values) => {
7
+ baAsn1.encodeContextObjectId(buffer, 0, objectId.type, objectId.instance);
8
+ baAsn1.encodeContextEnumerated(buffer, 1, propertyId);
9
+ if (arrayIndex !== baEnum.ASN1_ARRAY_ALL) {
10
+ baAsn1.encodeContextUnsigned(buffer, 2, arrayIndex);
11
+ }
12
+ baAsn1.encodeOpeningTag(buffer, 3);
13
+ values.forEach((value) => baAsn1.bacappEncodeApplicationData(buffer, value));
14
+ baAsn1.encodeClosingTag(buffer, 3);
15
+ };
16
+ exports.encode = encode;
17
+ const decode = (buffer, offset, apduLen) => {
18
+ let len = 0;
19
+ let result;
20
+ let decodedValue;
21
+ const value = {};
22
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
23
+ len += result.len;
24
+ decodedValue = baAsn1.decodeObjectId(buffer, offset + len);
25
+ len += decodedValue.len;
26
+ value.objectId = { type: decodedValue.objectType, instance: decodedValue.instance };
27
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
28
+ len += result.len;
29
+ decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
30
+ len += decodedValue.len;
31
+ value.property = { id: decodedValue.value, index: baEnum.ASN1_ARRAY_ALL };
32
+ if (len < apduLen && baAsn1.decodeIsContextTag(buffer, offset + len, 2)) {
33
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
34
+ len += result.len;
35
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
36
+ len += decodedValue.len;
37
+ value.property.index = decodedValue.value;
38
+ }
39
+ const values = [];
40
+ if (!baAsn1.decodeIsOpeningTagNumber(buffer, offset + len, 3))
41
+ return;
42
+ len++;
43
+ while ((apduLen - len) > 1) {
44
+ result = baAsn1.bacappDecodeApplicationData(buffer, offset + len, apduLen + offset, value.objectId.type, value.property.id);
45
+ if (!result)
46
+ return;
47
+ len += result.len;
48
+ delete result.len;
49
+ values.push(result);
50
+ }
51
+ value.values = values;
52
+ if (!baAsn1.decodeIsClosingTagNumber(buffer, offset + len, 3))
53
+ return;
54
+ len++;
55
+ value.len = len;
56
+ return value;
57
+ };
58
+ exports.decode = decode;
@@ -0,0 +1,93 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.decode = exports.encode = void 0;
4
+ const baAsn1 = require("../asn1");
5
+ const baEnum = require("../enum");
6
+ const encode = (buffer, ackProcessId, eventObjectId, eventStateAcknowledged, ackSource, eventTimeStamp, ackTimeStamp) => {
7
+ baAsn1.encodeContextUnsigned(buffer, 0, ackProcessId);
8
+ baAsn1.encodeContextObjectId(buffer, 1, eventObjectId.type, eventObjectId.instance);
9
+ baAsn1.encodeContextEnumerated(buffer, 2, eventStateAcknowledged);
10
+ baAsn1.bacappEncodeContextTimestamp(buffer, 3, eventTimeStamp);
11
+ baAsn1.encodeContextCharacterString(buffer, 4, ackSource);
12
+ baAsn1.bacappEncodeContextTimestamp(buffer, 5, ackTimeStamp);
13
+ };
14
+ exports.encode = encode;
15
+ const decode = (buffer, offset, apduLen) => {
16
+ let len = 0;
17
+ const value = {};
18
+ let result;
19
+ let decodedValue;
20
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
21
+ len += result.len;
22
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
23
+ len += decodedValue.len;
24
+ value.acknowledgedProcessId = decodedValue.value;
25
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
26
+ len += result.len;
27
+ decodedValue = baAsn1.decodeObjectId(buffer, offset + len);
28
+ len += decodedValue.len;
29
+ value.eventObjectId = { type: decodedValue.objectType, instance: decodedValue.instance };
30
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
31
+ len += result.len;
32
+ decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
33
+ len += decodedValue.len;
34
+ value.eventStateAcknowledged = decodedValue.value;
35
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
36
+ len += result.len;
37
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
38
+ len += result.len;
39
+ if (result.tagNumber === baEnum.TimeStamp.TIME) {
40
+ decodedValue = baAsn1.decodeBacnetTime(buffer, offset + len);
41
+ len += decodedValue.len;
42
+ value.eventTimeStamp = decodedValue.value;
43
+ }
44
+ else if (result.tagNumber === baEnum.TimeStamp.SEQUENCE_NUMBER) {
45
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
46
+ len += decodedValue.len;
47
+ value.eventTimeStamp = decodedValue.value;
48
+ }
49
+ else if (result.tagNumber === baEnum.TimeStamp.DATETIME) {
50
+ const dateRaw = baAsn1.decodeApplicationDate(buffer, offset + len);
51
+ len += dateRaw.len;
52
+ const date = dateRaw.value;
53
+ const timeRaw = baAsn1.decodeApplicationTime(buffer, offset + len);
54
+ len += timeRaw.len;
55
+ const time = timeRaw.value;
56
+ value.eventTimeStamp = new Date(date.getFullYear(), date.getMonth(), date.getDate(), time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());
57
+ len++;
58
+ }
59
+ len++;
60
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
61
+ len += result.len;
62
+ decodedValue = baAsn1.decodeCharacterString(buffer, offset + len, apduLen - (offset + len), result.value);
63
+ value.acknowledgeSource = decodedValue.value;
64
+ len += decodedValue.len;
65
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
66
+ len += result.len;
67
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
68
+ len += result.len;
69
+ if (result.tagNumber === baEnum.TimeStamp.TIME) {
70
+ decodedValue = baAsn1.decodeBacnetTime(buffer, offset + len);
71
+ len += decodedValue.len;
72
+ value.acknowledgeTimeStamp = decodedValue.value;
73
+ }
74
+ else if (result.tagNumber === baEnum.TimeStamp.SEQUENCE_NUMBER) {
75
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
76
+ len += decodedValue.len;
77
+ value.acknowledgeTimeStamp = decodedValue.value;
78
+ }
79
+ else if (result.tagNumber === baEnum.TimeStamp.DATETIME) {
80
+ const dateRaw = baAsn1.decodeApplicationDate(buffer, offset + len);
81
+ len += dateRaw.len;
82
+ const date = dateRaw.value;
83
+ const timeRaw = baAsn1.decodeApplicationTime(buffer, offset + len);
84
+ len += timeRaw.len;
85
+ const time = timeRaw.value;
86
+ value.acknowledgeTimeStamp = new Date(date.getFullYear(), date.getMonth(), date.getDate(), time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());
87
+ len++;
88
+ }
89
+ len++;
90
+ value.len = len;
91
+ return value;
92
+ };
93
+ exports.decode = decode;
@@ -0,0 +1,42 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.decode = exports.encode = void 0;
4
+ const baAsn1 = require("../asn1");
5
+ const encode = (buffer, alarms) => {
6
+ alarms.forEach((alarm) => {
7
+ baAsn1.encodeContextObjectId(buffer, 12, alarm.objectId.type, alarm.objectId.instance);
8
+ baAsn1.encodeContextEnumerated(buffer, 9, alarm.alarmState);
9
+ baAsn1.encodeContextBitstring(buffer, 8, alarm.acknowledgedTransitions);
10
+ });
11
+ };
12
+ exports.encode = encode;
13
+ const decode = (buffer, offset, apduLen) => {
14
+ let len = 0;
15
+ let result;
16
+ let decodedValue;
17
+ const alarms = [];
18
+ while ((apduLen - 3 - len) > 0) {
19
+ const value = {};
20
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
21
+ len += result.len;
22
+ decodedValue = baAsn1.decodeObjectId(buffer, offset + len);
23
+ len += decodedValue.len;
24
+ value.objectId = { type: decodedValue.objectType, instance: decodedValue.instance };
25
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
26
+ len += result.len;
27
+ decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
28
+ len += decodedValue.len;
29
+ value.alarmState = decodedValue.value;
30
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
31
+ len += result.len;
32
+ decodedValue = baAsn1.decodeBitstring(buffer, offset + len, result.value);
33
+ len += decodedValue.len;
34
+ value.acknowledgedTransitions = decodedValue.value;
35
+ alarms.push(value);
36
+ }
37
+ return {
38
+ len: len,
39
+ alarms: alarms
40
+ };
41
+ };
42
+ exports.decode = decode;
@@ -0,0 +1,157 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.decodeAcknowledge = exports.encodeAcknowledge = exports.decode = exports.encode = void 0;
4
+ const baAsn1 = require("../asn1");
5
+ const baEnum = require("../enum");
6
+ const encode = (buffer, isStream, objectId, position, count) => {
7
+ baAsn1.encodeApplicationObjectId(buffer, objectId.type, objectId.instance);
8
+ if (isStream) {
9
+ baAsn1.encodeOpeningTag(buffer, 0);
10
+ baAsn1.encodeApplicationSigned(buffer, position);
11
+ baAsn1.encodeApplicationUnsigned(buffer, count);
12
+ baAsn1.encodeClosingTag(buffer, 0);
13
+ }
14
+ else {
15
+ baAsn1.encodeOpeningTag(buffer, 1);
16
+ baAsn1.encodeApplicationSigned(buffer, position);
17
+ baAsn1.encodeApplicationUnsigned(buffer, count);
18
+ baAsn1.encodeClosingTag(buffer, 1);
19
+ }
20
+ };
21
+ exports.encode = encode;
22
+ const decode = (buffer, offset) => {
23
+ let len = 0;
24
+ let result;
25
+ let decodedValue;
26
+ let isStream = true;
27
+ let objectId = {};
28
+ let position = -1;
29
+ let count = 0;
30
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
31
+ len += result.len;
32
+ if (result.tagNumber !== baEnum.ApplicationTags.OBJECTIDENTIFIER)
33
+ return;
34
+ decodedValue = baAsn1.decodeObjectId(buffer, offset + len);
35
+ len += decodedValue.len;
36
+ objectId = { type: decodedValue.objectType, instance: decodedValue.instance };
37
+ if (baAsn1.decodeIsOpeningTagNumber(buffer, offset + len, 0)) {
38
+ isStream = true;
39
+ len++;
40
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
41
+ len += result.len;
42
+ if (result.tagNumber !== baEnum.ApplicationTags.SIGNED_INTEGER)
43
+ return;
44
+ decodedValue = baAsn1.decodeSigned(buffer, offset + len, result.value);
45
+ len += decodedValue.len;
46
+ position = decodedValue.value;
47
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
48
+ len += result.len;
49
+ if (result.tagNumber !== baEnum.ApplicationTags.UNSIGNED_INTEGER)
50
+ return;
51
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
52
+ len += decodedValue.len;
53
+ count = decodedValue.value;
54
+ if (!baAsn1.decodeIsClosingTagNumber(buffer, offset + len, 0))
55
+ return;
56
+ len++;
57
+ }
58
+ else if (baAsn1.decodeIsOpeningTagNumber(buffer, offset + len, 1)) {
59
+ isStream = false;
60
+ len++;
61
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
62
+ len += result.len;
63
+ if (result.tagNumber !== baEnum.ApplicationTags.SIGNED_INTEGER)
64
+ return;
65
+ decodedValue = baAsn1.decodeSigned(buffer, offset + len, result.value);
66
+ len += decodedValue.len;
67
+ position = decodedValue.value;
68
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
69
+ len += result.len;
70
+ if (result.tagNumber !== baEnum.ApplicationTags.UNSIGNED_INTEGER)
71
+ return;
72
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
73
+ len += decodedValue.len;
74
+ count = decodedValue.value;
75
+ if (!baAsn1.decodeIsClosingTagNumber(buffer, offset + len, 1))
76
+ return;
77
+ len++;
78
+ }
79
+ else {
80
+ return;
81
+ }
82
+ return {
83
+ len: len,
84
+ isStream: isStream,
85
+ objectId: objectId,
86
+ position: position,
87
+ count: count
88
+ };
89
+ };
90
+ exports.decode = decode;
91
+ const encodeAcknowledge = (buffer, isStream, endOfFile, position, blockCount, blocks, counts) => {
92
+ baAsn1.encodeApplicationBoolean(buffer, endOfFile);
93
+ if (isStream) {
94
+ baAsn1.encodeOpeningTag(buffer, 0);
95
+ baAsn1.encodeApplicationSigned(buffer, position);
96
+ baAsn1.encodeApplicationOctetString(buffer, blocks[0], 0, counts[0]);
97
+ baAsn1.encodeClosingTag(buffer, 0);
98
+ }
99
+ else {
100
+ baAsn1.encodeOpeningTag(buffer, 1);
101
+ baAsn1.encodeApplicationSigned(buffer, position);
102
+ baAsn1.encodeApplicationUnsigned(buffer, blockCount);
103
+ for (let i = 0; i < blockCount; i++) {
104
+ baAsn1.encodeApplicationOctetString(buffer, blocks[i], 0, counts[i]);
105
+ }
106
+ baAsn1.encodeClosingTag(buffer, 1);
107
+ }
108
+ };
109
+ exports.encodeAcknowledge = encodeAcknowledge;
110
+ const decodeAcknowledge = (buffer, offset) => {
111
+ let len = 0;
112
+ let result;
113
+ let decodedValue;
114
+ let isStream;
115
+ let position;
116
+ let targetBuffer;
117
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
118
+ len += result.len;
119
+ if (result.tagNumber !== baEnum.ApplicationTags.BOOLEAN)
120
+ return;
121
+ const endOfFile = result.value > 0;
122
+ if (baAsn1.decodeIsOpeningTagNumber(buffer, offset + len, 0)) {
123
+ isStream = true;
124
+ len++;
125
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
126
+ len += result.len;
127
+ if (result.tagNumber !== baEnum.ApplicationTags.SIGNED_INTEGER)
128
+ return;
129
+ decodedValue = baAsn1.decodeSigned(buffer, offset + len, result.value);
130
+ len += decodedValue.len;
131
+ position = decodedValue.value;
132
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
133
+ len += result.len;
134
+ if (result.tagNumber !== baEnum.ApplicationTags.OCTET_STRING)
135
+ return;
136
+ targetBuffer = buffer.slice(offset + len, offset + len + result.value);
137
+ len += result.value;
138
+ if (!baAsn1.decodeIsClosingTagNumber(buffer, offset + len, 0))
139
+ return;
140
+ len++;
141
+ }
142
+ else if (baAsn1.decodeIsOpeningTagNumber(buffer, offset + len, 1)) {
143
+ isStream = false;
144
+ throw new Error('NotImplemented');
145
+ }
146
+ else {
147
+ return;
148
+ }
149
+ return {
150
+ len: len,
151
+ endOfFile: endOfFile,
152
+ isStream: isStream,
153
+ position: position,
154
+ buffer: targetBuffer
155
+ };
156
+ };
157
+ exports.decodeAcknowledge = decodeAcknowledge;
@@ -0,0 +1,136 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.decodeAcknowledge = exports.encodeAcknowledge = exports.decode = exports.encode = void 0;
4
+ const baAsn1 = require("../asn1");
5
+ const baEnum = require("../enum");
6
+ const encode = (buffer, isStream, objectId, position, blocks) => {
7
+ baAsn1.encodeApplicationObjectId(buffer, objectId.type, objectId.instance);
8
+ if (isStream) {
9
+ baAsn1.encodeOpeningTag(buffer, 0);
10
+ baAsn1.encodeApplicationSigned(buffer, position);
11
+ baAsn1.encodeApplicationOctetString(buffer, blocks[0], 0, blocks[0].length);
12
+ baAsn1.encodeClosingTag(buffer, 0);
13
+ }
14
+ else {
15
+ baAsn1.encodeOpeningTag(buffer, 1);
16
+ baAsn1.encodeApplicationSigned(buffer, position);
17
+ baAsn1.encodeApplicationUnsigned(buffer, blocks.length);
18
+ for (let i = 0; i < blocks.length; i++) {
19
+ baAsn1.encodeApplicationOctetString(buffer, blocks[i], 0, blocks[i].length);
20
+ }
21
+ baAsn1.encodeClosingTag(buffer, 1);
22
+ }
23
+ };
24
+ exports.encode = encode;
25
+ const decode = (buffer, offset, apduLen) => {
26
+ let len = 0;
27
+ let result;
28
+ let decodedValue;
29
+ let isStream;
30
+ let position;
31
+ const blocks = [];
32
+ let blockCount;
33
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
34
+ len += result.len;
35
+ if (result.tagNumber !== baEnum.ApplicationTags.OBJECTIDENTIFIER)
36
+ return;
37
+ decodedValue = baAsn1.decodeObjectId(buffer, offset + len);
38
+ len += decodedValue.len;
39
+ const objectId = { type: decodedValue.objectType, instance: decodedValue.instance };
40
+ if (baAsn1.decodeIsOpeningTagNumber(buffer, offset + len, 0)) {
41
+ isStream = true;
42
+ len++;
43
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
44
+ len += result.len;
45
+ if (result.tagNumber !== baEnum.ApplicationTags.SIGNED_INTEGER)
46
+ return;
47
+ decodedValue = baAsn1.decodeSigned(buffer, offset + len, result.value);
48
+ len += decodedValue.len;
49
+ position = decodedValue.value;
50
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
51
+ len += result.len;
52
+ if (result.tagNumber !== baEnum.ApplicationTags.OCTET_STRING)
53
+ return;
54
+ decodedValue = baAsn1.decodeOctetString(buffer, offset + len, apduLen, 0, result.value);
55
+ len += decodedValue.len;
56
+ blocks.push(decodedValue.value);
57
+ if (!baAsn1.decodeIsClosingTagNumber(buffer, offset + len, 0))
58
+ return;
59
+ len++;
60
+ }
61
+ else if (baAsn1.decodeIsOpeningTagNumber(buffer, offset + len, 1)) {
62
+ isStream = false;
63
+ len++;
64
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
65
+ len += result.len;
66
+ if (result.tagNumber !== baEnum.ApplicationTags.SIGNED_INTEGER)
67
+ return;
68
+ decodedValue = baAsn1.decodeSigned(buffer, offset + len, result.value);
69
+ len += decodedValue.len;
70
+ position = decodedValue.value;
71
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
72
+ len += result.len;
73
+ if (result.tagNumber !== baEnum.ApplicationTags.UNSIGNED_INTEGER)
74
+ return;
75
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
76
+ len += decodedValue.len;
77
+ blockCount = decodedValue.value;
78
+ for (let i = 0; i < blockCount; i++) {
79
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
80
+ len += result.len;
81
+ if (result.tagNumber !== baEnum.ApplicationTags.OCTET_STRING)
82
+ return;
83
+ decodedValue = baAsn1.decodeOctetString(buffer, offset + len, apduLen, 0, result.value);
84
+ len += decodedValue.len;
85
+ blocks.push(decodedValue.value);
86
+ }
87
+ if (!baAsn1.decodeIsClosingTagNumber(buffer, offset + len, 1))
88
+ return;
89
+ len++;
90
+ }
91
+ else {
92
+ return;
93
+ }
94
+ return {
95
+ len: len,
96
+ isStream: isStream,
97
+ objectId: objectId,
98
+ position: position,
99
+ blocks: blocks
100
+ };
101
+ };
102
+ exports.decode = decode;
103
+ const encodeAcknowledge = (buffer, isStream, position) => {
104
+ if (isStream) {
105
+ baAsn1.encodeContextSigned(buffer, 0, position);
106
+ }
107
+ else {
108
+ baAsn1.encodeContextSigned(buffer, 1, position);
109
+ }
110
+ };
111
+ exports.encodeAcknowledge = encodeAcknowledge;
112
+ const decodeAcknowledge = (buffer, offset) => {
113
+ let len = 0;
114
+ let isStream = false;
115
+ let position = 0;
116
+ const result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
117
+ len += result.len;
118
+ if (result.tagNumber === 0) {
119
+ isStream = true;
120
+ }
121
+ else if (result.tagNumber === 1) {
122
+ isStream = false;
123
+ }
124
+ else {
125
+ return;
126
+ }
127
+ const decodedValue = baAsn1.decodeSigned(buffer, offset + len, result.value);
128
+ len += decodedValue.len;
129
+ position = decodedValue.value;
130
+ return {
131
+ len: len,
132
+ isStream: isStream,
133
+ position: position
134
+ };
135
+ };
136
+ exports.decodeAcknowledge = decodeAcknowledge;