@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,119 @@
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, subscriberProcessId, initiatingDeviceId, monitoredObjectId, timeRemaining, values) => {
7
+ baAsn1.encodeContextUnsigned(buffer, 0, subscriberProcessId);
8
+ baAsn1.encodeContextObjectId(buffer, 1, baEnum.ObjectType.DEVICE, initiatingDeviceId);
9
+ baAsn1.encodeContextObjectId(buffer, 2, monitoredObjectId.type, monitoredObjectId.instance);
10
+ baAsn1.encodeContextUnsigned(buffer, 3, timeRemaining);
11
+ baAsn1.encodeOpeningTag(buffer, 4);
12
+ values.forEach((value) => {
13
+ baAsn1.encodeContextEnumerated(buffer, 0, value.property.id);
14
+ if (value.property.index === baEnum.ASN1_ARRAY_ALL) {
15
+ baAsn1.encodeContextUnsigned(buffer, 1, value.property.index);
16
+ }
17
+ baAsn1.encodeOpeningTag(buffer, 2);
18
+ value.value.forEach((v) => baAsn1.bacappEncodeApplicationData(buffer, v));
19
+ baAsn1.encodeClosingTag(buffer, 2);
20
+ if (value.priority === baEnum.ASN1_NO_PRIORITY) {
21
+ baAsn1.encodeContextUnsigned(buffer, 3, value.priority);
22
+ }
23
+ // TODO: Handle to too large telegrams -> APDU limit
24
+ });
25
+ baAsn1.encodeClosingTag(buffer, 4);
26
+ };
27
+ exports.encode = encode;
28
+ const decode = (buffer, offset, apduLen) => {
29
+ let len = 0;
30
+ let result;
31
+ let decodedValue;
32
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 0))
33
+ return;
34
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
35
+ len += result.len;
36
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
37
+ len += decodedValue.len;
38
+ const subscriberProcessId = decodedValue.value;
39
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 1))
40
+ return;
41
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
42
+ len += result.len;
43
+ decodedValue = baAsn1.decodeObjectId(buffer, offset + len);
44
+ len += decodedValue.len;
45
+ const initiatingDeviceId = { type: decodedValue.objectType, instance: decodedValue.instance };
46
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 2))
47
+ return;
48
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
49
+ len += result.len;
50
+ decodedValue = baAsn1.decodeObjectId(buffer, offset + len);
51
+ len += decodedValue.len;
52
+ const monitoredObjectId = { type: decodedValue.objectType, instance: decodedValue.instance };
53
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 3))
54
+ return;
55
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
56
+ len += result.len;
57
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
58
+ len += decodedValue.len;
59
+ const timeRemaining = decodedValue.value;
60
+ if (!baAsn1.decodeIsOpeningTagNumber(buffer, offset + len, 4))
61
+ return;
62
+ len++;
63
+ const values = [];
64
+ while ((apduLen - len) > 1 && !baAsn1.decodeIsClosingTagNumber(buffer, offset + len, 4)) {
65
+ const newEntry = {};
66
+ newEntry.property = {};
67
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 0))
68
+ return;
69
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
70
+ len += result.len;
71
+ decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
72
+ len += decodedValue.len;
73
+ newEntry.property.id = decodedValue.value;
74
+ if (baAsn1.decodeIsContextTag(buffer, offset + len, 1)) {
75
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
76
+ len += result.len;
77
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
78
+ len += decodedValue.len;
79
+ newEntry.property.index = decodedValue.value;
80
+ }
81
+ else {
82
+ newEntry.property.index = baEnum.ASN1_ARRAY_ALL;
83
+ }
84
+ if (!baAsn1.decodeIsOpeningTagNumber(buffer, offset + len, 2))
85
+ return;
86
+ len++;
87
+ const properties = [];
88
+ while ((apduLen - len) > 1 && !baAsn1.decodeIsClosingTagNumber(buffer, offset + len, 2)) {
89
+ decodedValue = baAsn1.bacappDecodeApplicationData(buffer, offset + len, apduLen + offset, monitoredObjectId.type, newEntry.property.id);
90
+ if (!decodedValue)
91
+ return;
92
+ len += decodedValue.len;
93
+ delete decodedValue.len;
94
+ properties.push(decodedValue);
95
+ }
96
+ newEntry.value = properties;
97
+ len++;
98
+ if (baAsn1.decodeIsContextTag(buffer, offset + len, 3)) {
99
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
100
+ len += result.len;
101
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
102
+ len += decodedValue.len;
103
+ newEntry.priority = decodedValue.value;
104
+ }
105
+ else {
106
+ newEntry.priority = baEnum.ASN1_NO_PRIORITY;
107
+ }
108
+ values.push(newEntry);
109
+ }
110
+ return {
111
+ len: len,
112
+ subscriberProcessId: subscriberProcessId,
113
+ initiatingDeviceId: initiatingDeviceId,
114
+ monitoredObjectId: monitoredObjectId,
115
+ timeRemaining: timeRemaining,
116
+ values: values
117
+ };
118
+ };
119
+ exports.decode = decode;
@@ -0,0 +1,104 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.encodeAcknowledge = exports.decode = exports.encode = void 0;
4
+ const baAsn1 = require("../asn1");
5
+ const baEnum = require("../enum");
6
+ const encode = (buffer, objectId, values) => {
7
+ baAsn1.encodeOpeningTag(buffer, 0);
8
+ baAsn1.encodeContextObjectId(buffer, 1, objectId.type, objectId.instance);
9
+ baAsn1.encodeClosingTag(buffer, 0);
10
+ baAsn1.encodeOpeningTag(buffer, 1);
11
+ values.forEach((propertyValue) => {
12
+ baAsn1.encodeContextEnumerated(buffer, 0, propertyValue.property.id);
13
+ if (propertyValue.property.index !== baEnum.ASN1_ARRAY_ALL) {
14
+ baAsn1.encodeContextUnsigned(buffer, 1, propertyValue.property.index);
15
+ }
16
+ baAsn1.encodeOpeningTag(buffer, 2);
17
+ propertyValue.value.forEach((value) => {
18
+ baAsn1.bacappEncodeApplicationData(buffer, value);
19
+ });
20
+ baAsn1.encodeClosingTag(buffer, 2);
21
+ if (propertyValue.priority !== baEnum.ASN1_NO_PRIORITY) {
22
+ baAsn1.encodeContextUnsigned(buffer, 3, propertyValue.priority);
23
+ }
24
+ });
25
+ baAsn1.encodeClosingTag(buffer, 1);
26
+ };
27
+ exports.encode = encode;
28
+ const decode = (buffer, offset, apduLen) => {
29
+ let len = 0;
30
+ let result;
31
+ let decodedValue;
32
+ let objectId;
33
+ const valueList = [];
34
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
35
+ len += result.len;
36
+ if ((result.tagNumber === 0) && (apduLen > len)) {
37
+ apduLen -= len;
38
+ if (apduLen < 4)
39
+ return;
40
+ decodedValue = baAsn1.decodeContextObjectId(buffer, offset + len, 1);
41
+ len += decodedValue.len;
42
+ objectId = { type: decodedValue.objectType, instance: decodedValue.instance };
43
+ }
44
+ else {
45
+ return;
46
+ }
47
+ if (baAsn1.decodeIsClosingTag(buffer, offset + len)) {
48
+ len++;
49
+ }
50
+ if (!baAsn1.decodeIsOpeningTagNumber(buffer, offset + len, 1))
51
+ return;
52
+ len++;
53
+ while ((apduLen - len) > 1) {
54
+ const newEntry = {};
55
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
56
+ len += result.len;
57
+ if (result.tagNumber !== 0)
58
+ return;
59
+ decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
60
+ len += decodedValue.len;
61
+ const propertyId = decodedValue.value;
62
+ let arraIndex = baEnum.ASN1_ARRAY_ALL;
63
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
64
+ len += result.len;
65
+ if (result.tagNumber === 1) {
66
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
67
+ len += decodedValue.len;
68
+ arraIndex += decodedValue.value;
69
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
70
+ len += result.len;
71
+ }
72
+ newEntry.property = { id: propertyId, index: arraIndex };
73
+ if ((result.tagNumber === 2) && (baAsn1.decodeIsOpeningTag(buffer, offset + len - 1))) {
74
+ const values = [];
75
+ while (!baAsn1.decodeIsClosingTag(buffer, offset + len)) {
76
+ decodedValue = baAsn1.bacappDecodeApplicationData(buffer, offset + len, apduLen + offset, objectId.type, propertyId);
77
+ if (!decodedValue)
78
+ return;
79
+ len += decodedValue.len;
80
+ delete decodedValue.len;
81
+ values.push(decodedValue);
82
+ }
83
+ len++;
84
+ newEntry.value = values;
85
+ }
86
+ else {
87
+ return;
88
+ }
89
+ valueList.push(newEntry);
90
+ }
91
+ if (!baAsn1.decodeIsClosingTagNumber(buffer, offset + len, 1))
92
+ return;
93
+ len++;
94
+ return {
95
+ len: len,
96
+ objectId: objectId,
97
+ values: valueList
98
+ };
99
+ };
100
+ exports.decode = decode;
101
+ const encodeAcknowledge = (buffer, objectId) => {
102
+ baAsn1.encodeApplicationObjectId(buffer, objectId.type, objectId.instance);
103
+ };
104
+ exports.encodeAcknowledge = encodeAcknowledge;
@@ -0,0 +1,21 @@
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, objectId) => {
6
+ baAsn1.encodeApplicationObjectId(buffer, objectId.type, objectId.instance);
7
+ };
8
+ exports.encode = encode;
9
+ const decode = (buffer, offset, apduLen) => {
10
+ const result = baAsn1.decodeTagNumberAndValue(buffer, offset);
11
+ if (result.tagNumber !== 12)
12
+ return;
13
+ let len = 1;
14
+ const value = baAsn1.decodeObjectId(buffer, offset + len);
15
+ len += value.len;
16
+ if (len !== apduLen)
17
+ return;
18
+ value.len = len;
19
+ return value;
20
+ };
21
+ exports.decode = decode;
@@ -0,0 +1,46 @@
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, timeDuration, enableDisable, password) => {
6
+ if (timeDuration > 0) {
7
+ baAsn1.encodeContextUnsigned(buffer, 0, timeDuration);
8
+ }
9
+ baAsn1.encodeContextEnumerated(buffer, 1, enableDisable);
10
+ if (password && password !== '') {
11
+ baAsn1.encodeContextCharacterString(buffer, 2, password);
12
+ }
13
+ };
14
+ exports.encode = encode;
15
+ const decode = (buffer, offset, apduLen) => {
16
+ let len = 0;
17
+ const value = {};
18
+ let decodedValue;
19
+ let result;
20
+ if (baAsn1.decodeIsContextTag(buffer, offset + len, 0)) {
21
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
22
+ len += result.len;
23
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
24
+ value.timeDuration = decodedValue.value;
25
+ len += decodedValue.len;
26
+ }
27
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 1))
28
+ return;
29
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
30
+ len += result.len;
31
+ decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
32
+ value.enableDisable = decodedValue.value;
33
+ len += decodedValue.len;
34
+ if (len < apduLen) {
35
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 2))
36
+ return;
37
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
38
+ len += result.len;
39
+ decodedValue = baAsn1.decodeCharacterString(buffer, offset + len, apduLen - (offset + len), result.value);
40
+ value.password = decodedValue.value;
41
+ len += decodedValue.len;
42
+ }
43
+ value.len = len;
44
+ return value;
45
+ };
46
+ exports.decode = decode;
@@ -0,0 +1,27 @@
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, errorClass, errorCode) => {
6
+ baAsn1.encodeApplicationEnumerated(buffer, errorClass);
7
+ baAsn1.encodeApplicationEnumerated(buffer, errorCode);
8
+ };
9
+ exports.encode = encode;
10
+ const decode = (buffer, offset) => {
11
+ const orgOffset = offset;
12
+ let result;
13
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset);
14
+ offset += result.len;
15
+ const errorClass = baAsn1.decodeEnumerated(buffer, offset, result.value);
16
+ offset += errorClass.len;
17
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset);
18
+ offset += result.len;
19
+ const errorCode = baAsn1.decodeEnumerated(buffer, offset, result.value);
20
+ offset += errorClass.len;
21
+ return {
22
+ len: offset - orgOffset,
23
+ class: errorClass.value,
24
+ code: errorCode.value
25
+ };
26
+ };
27
+ exports.decode = decode;
@@ -0,0 +1,100 @@
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, events, moreEvents) => {
7
+ baAsn1.encodeOpeningTag(buffer, 0);
8
+ events.forEach((event) => {
9
+ baAsn1.encodeContextObjectId(buffer, 0, event.objectId.type, event.objectId.instance);
10
+ baAsn1.encodeContextEnumerated(buffer, 1, event.eventState);
11
+ baAsn1.encodeContextBitstring(buffer, 2, event.acknowledgedTransitions);
12
+ baAsn1.encodeOpeningTag(buffer, 3);
13
+ for (let i = 0; i < 3; i++) {
14
+ baAsn1.encodeApplicationDate(buffer, event.eventTimeStamps[i]);
15
+ baAsn1.encodeApplicationTime(buffer, event.eventTimeStamps[i]);
16
+ }
17
+ baAsn1.encodeClosingTag(buffer, 3);
18
+ baAsn1.encodeContextEnumerated(buffer, 4, event.notifyType);
19
+ baAsn1.encodeContextBitstring(buffer, 5, event.eventEnable);
20
+ baAsn1.encodeOpeningTag(buffer, 6);
21
+ for (let i = 0; i < 3; i++) {
22
+ baAsn1.encodeApplicationUnsigned(buffer, event.eventPriorities[i]);
23
+ }
24
+ baAsn1.encodeClosingTag(buffer, 6);
25
+ });
26
+ baAsn1.encodeClosingTag(buffer, 0);
27
+ baAsn1.encodeContextBoolean(buffer, 1, moreEvents);
28
+ };
29
+ exports.encode = encode;
30
+ const decode = (buffer, offset, apduLen) => {
31
+ let len = 0;
32
+ let result;
33
+ let decodedValue;
34
+ len++;
35
+ const alarms = [];
36
+ while ((apduLen - 3 - len) > 0) {
37
+ const value = {};
38
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
39
+ len += result.len;
40
+ decodedValue = baAsn1.decodeObjectId(buffer, offset + len);
41
+ len += decodedValue.len;
42
+ value.objectId = { type: decodedValue.objectType, instance: decodedValue.instance };
43
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
44
+ len += result.len;
45
+ decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
46
+ len += decodedValue.len;
47
+ value.eventState = decodedValue.value;
48
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
49
+ len += result.len;
50
+ decodedValue = baAsn1.decodeBitstring(buffer, offset + len, result.value);
51
+ len += decodedValue.len;
52
+ value.acknowledgedTransitions = decodedValue.value;
53
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
54
+ len += result.len;
55
+ value.eventTimeStamps = [];
56
+ for (let i = 0; i < 3; i++) {
57
+ if (result.tagNumber !== baEnum.ApplicationTags.NULL) {
58
+ decodedValue = baAsn1.decodeApplicationDate(buffer, offset + len);
59
+ len += decodedValue.len;
60
+ const date = decodedValue.value;
61
+ decodedValue = baAsn1.decodeApplicationTime(buffer, offset + len);
62
+ len += decodedValue.len;
63
+ const time = decodedValue.value;
64
+ value.eventTimeStamps[i] = new Date(date.getFullYear(), date.getMonth(), date.getDate(), time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());
65
+ }
66
+ else {
67
+ len += result.value;
68
+ }
69
+ }
70
+ len++;
71
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
72
+ len += result.len;
73
+ decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
74
+ len += decodedValue.len;
75
+ value.notifyType = decodedValue.value;
76
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
77
+ len += result.len;
78
+ decodedValue = baAsn1.decodeBitstring(buffer, offset + len, result.value);
79
+ len += decodedValue.len;
80
+ value.eventEnable = decodedValue.value;
81
+ len++;
82
+ value.eventPriorities = [];
83
+ for (let i = 0; i < 3; i++) {
84
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
85
+ len += result.len;
86
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
87
+ len += decodedValue.len;
88
+ value.eventPriorities[i] = decodedValue.value;
89
+ }
90
+ len++;
91
+ alarms.push(value);
92
+ }
93
+ const moreEvents = (buffer[apduLen - 1] === 1);
94
+ return {
95
+ len: len,
96
+ alarms: alarms,
97
+ moreEvents: moreEvents
98
+ };
99
+ };
100
+ exports.decode = decode;
@@ -0,0 +1,219 @@
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, data) => {
7
+ baAsn1.encodeContextUnsigned(buffer, 0, data.processId);
8
+ baAsn1.encodeContextObjectId(buffer, 1, data.initiatingObjectId.type, data.initiatingObjectId.instance);
9
+ baAsn1.encodeContextObjectId(buffer, 2, data.eventObjectId.type, data.eventObjectId.instance);
10
+ baAsn1.bacappEncodeContextTimestamp(buffer, 3, data.timeStamp);
11
+ baAsn1.encodeContextUnsigned(buffer, 4, data.notificationClass);
12
+ baAsn1.encodeContextUnsigned(buffer, 5, data.priority);
13
+ baAsn1.encodeContextEnumerated(buffer, 6, data.eventType);
14
+ if (data.messageText && data.messageText !== '') {
15
+ baAsn1.encodeContextCharacterString(buffer, 7, data.messageText);
16
+ }
17
+ baAsn1.encodeContextEnumerated(buffer, 8, data.notifyType);
18
+ switch (data.notifyType) {
19
+ case baEnum.NotifyType.ALARM:
20
+ case baEnum.NotifyType.EVENT:
21
+ baAsn1.encodeContextBoolean(buffer, 9, data.ackRequired);
22
+ baAsn1.encodeContextEnumerated(buffer, 10, data.fromState);
23
+ break;
24
+ default:
25
+ break;
26
+ }
27
+ baAsn1.encodeContextEnumerated(buffer, 11, data.toState);
28
+ switch (data.notifyType) {
29
+ case baEnum.NotifyType.ALARM:
30
+ case baEnum.NotifyType.EVENT:
31
+ baAsn1.encodeOpeningTag(buffer, 12);
32
+ switch (data.eventType) {
33
+ case baEnum.EventType.CHANGE_OF_BITSTRING:
34
+ baAsn1.encodeOpeningTag(buffer, 0);
35
+ baAsn1.encodeContextBitstring(buffer, 0, data.changeOfBitstringReferencedBitString);
36
+ baAsn1.encodeContextBitstring(buffer, 1, data.changeOfBitstringStatusFlags);
37
+ baAsn1.encodeClosingTag(buffer, 0);
38
+ break;
39
+ case baEnum.EventType.CHANGE_OF_STATE:
40
+ baAsn1.encodeOpeningTag(buffer, 1);
41
+ baAsn1.encodeOpeningTag(buffer, 0);
42
+ baAsn1.bacappEncodePropertyState(buffer, data.changeOfStateNewState);
43
+ baAsn1.encodeClosingTag(buffer, 0);
44
+ baAsn1.encodeContextBitstring(buffer, 1, data.changeOfStateStatusFlags);
45
+ baAsn1.encodeClosingTag(buffer, 1);
46
+ break;
47
+ case baEnum.EventType.CHANGE_OF_VALUE:
48
+ baAsn1.encodeOpeningTag(buffer, 2);
49
+ baAsn1.encodeOpeningTag(buffer, 0);
50
+ switch (data.changeOfValueTag) {
51
+ case baEnum.CovTypes.REAL:
52
+ baAsn1.encodeContextReal(buffer, 1, data.changeOfValueChangeValue);
53
+ break;
54
+ case baEnum.CovTypes.BIT_STRING:
55
+ baAsn1.encodeContextBitstring(buffer, 0, data.changeOfValueChangedBits);
56
+ break;
57
+ default:
58
+ throw new Error('NotImplemented');
59
+ }
60
+ baAsn1.encodeClosingTag(buffer, 0);
61
+ baAsn1.encodeContextBitstring(buffer, 1, data.changeOfValueStatusFlags);
62
+ baAsn1.encodeClosingTag(buffer, 2);
63
+ break;
64
+ case baEnum.EventType.FLOATING_LIMIT:
65
+ baAsn1.encodeOpeningTag(buffer, 4);
66
+ baAsn1.encodeContextReal(buffer, 0, data.floatingLimitReferenceValue);
67
+ baAsn1.encodeContextBitstring(buffer, 1, data.floatingLimitStatusFlags);
68
+ baAsn1.encodeContextReal(buffer, 2, data.floatingLimitSetPointValue);
69
+ baAsn1.encodeContextReal(buffer, 3, data.floatingLimitErrorLimit);
70
+ baAsn1.encodeClosingTag(buffer, 4);
71
+ break;
72
+ case baEnum.EventType.OUT_OF_RANGE:
73
+ baAsn1.encodeOpeningTag(buffer, 5);
74
+ baAsn1.encodeContextReal(buffer, 0, data.outOfRangeExceedingValue);
75
+ baAsn1.encodeContextBitstring(buffer, 1, data.outOfRangeStatusFlags);
76
+ baAsn1.encodeContextReal(buffer, 2, data.outOfRangeDeadband);
77
+ baAsn1.encodeContextReal(buffer, 3, data.outOfRangeExceededLimit);
78
+ baAsn1.encodeClosingTag(buffer, 5);
79
+ break;
80
+ case baEnum.EventType.CHANGE_OF_LIFE_SAFETY:
81
+ baAsn1.encodeOpeningTag(buffer, 8);
82
+ baAsn1.encodeContextEnumerated(buffer, 0, data.changeOfLifeSafetyNewState);
83
+ baAsn1.encodeContextEnumerated(buffer, 1, data.changeOfLifeSafetyNewMode);
84
+ baAsn1.encodeContextBitstring(buffer, 2, data.changeOfLifeSafetyStatusFlags);
85
+ baAsn1.encodeContextEnumerated(buffer, 3, data.changeOfLifeSafetyOperationExpected);
86
+ baAsn1.encodeClosingTag(buffer, 8);
87
+ break;
88
+ case baEnum.EventType.BUFFER_READY:
89
+ baAsn1.encodeOpeningTag(buffer, 10);
90
+ baAsn1.bacappEncodeContextDeviceObjPropertyRef(buffer, 0, data.bufferReadyBufferProperty);
91
+ baAsn1.encodeContextUnsigned(buffer, 1, data.bufferReadyPreviousNotification);
92
+ baAsn1.encodeContextUnsigned(buffer, 2, data.bufferReadyCurrentNotification);
93
+ baAsn1.encodeClosingTag(buffer, 10);
94
+ break;
95
+ case baEnum.EventType.UNSIGNED_RANGE:
96
+ baAsn1.encodeOpeningTag(buffer, 11);
97
+ baAsn1.encodeContextUnsigned(buffer, 0, data.unsignedRangeExceedingValue);
98
+ baAsn1.encodeContextBitstring(buffer, 1, data.unsignedRangeStatusFlags);
99
+ baAsn1.encodeContextUnsigned(buffer, 2, data.unsignedRangeExceededLimit);
100
+ baAsn1.encodeClosingTag(buffer, 11);
101
+ break;
102
+ case baEnum.EventType.EXTENDED:
103
+ case baEnum.EventType.COMMAND_FAILURE:
104
+ throw new Error('NotImplemented');
105
+ default:
106
+ throw new Error('NotImplemented');
107
+ }
108
+ baAsn1.encodeClosingTag(buffer, 12);
109
+ break;
110
+ case baEnum.NotifyType.ACK_NOTIFICATION:
111
+ throw new Error('NotImplemented');
112
+ default:
113
+ break;
114
+ }
115
+ };
116
+ exports.encode = encode;
117
+ const decode = (buffer, offset) => {
118
+ let len = 0;
119
+ let result;
120
+ let decodedValue;
121
+ const eventData = {};
122
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 0))
123
+ return;
124
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
125
+ len += result.len;
126
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
127
+ len += decodedValue.len;
128
+ eventData.processId = decodedValue.value;
129
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 1))
130
+ return;
131
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
132
+ len += result.len;
133
+ decodedValue = baAsn1.decodeObjectId(buffer, offset + len);
134
+ len += decodedValue.len;
135
+ eventData.initiatingObjectId = { type: decodedValue.objectType, instance: decodedValue.instance };
136
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 2))
137
+ return;
138
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
139
+ len += result.len;
140
+ decodedValue = baAsn1.decodeObjectId(buffer, offset + len);
141
+ len += decodedValue.len;
142
+ eventData.eventObjectId = { type: decodedValue.objectType, instance: decodedValue.instance };
143
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 3))
144
+ return;
145
+ len += 2;
146
+ decodedValue = baAsn1.decodeApplicationDate(buffer, offset + len);
147
+ len += decodedValue.len;
148
+ const date = decodedValue.value;
149
+ decodedValue = baAsn1.decodeApplicationTime(buffer, offset + len);
150
+ len += decodedValue.len;
151
+ const time = decodedValue.value;
152
+ eventData.timeStamp = {};
153
+ eventData.timeStamp = new Date(date.getFullYear(), date.getMonth(), date.getDate(), time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());
154
+ len += 2;
155
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 4))
156
+ return;
157
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
158
+ len += result.len;
159
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
160
+ len += decodedValue.len;
161
+ eventData.notificationClass = decodedValue.value;
162
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 5))
163
+ return;
164
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
165
+ len += result.len;
166
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
167
+ len += decodedValue.len;
168
+ eventData.priority = decodedValue.value;
169
+ if (eventData.priority > 0xFF)
170
+ return;
171
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 6))
172
+ return;
173
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
174
+ len += result.len;
175
+ decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
176
+ len += decodedValue.len;
177
+ eventData.eventType = decodedValue.value;
178
+ if (baAsn1.decodeIsContextTag(buffer, offset + len, 7)) {
179
+ decodedValue = baAsn1.decodeContextCharacterString(buffer, offset + len, 20000, 7);
180
+ len += decodedValue.len;
181
+ eventData.messageText = decodedValue.value;
182
+ }
183
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 8))
184
+ return;
185
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
186
+ len += result.len;
187
+ decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
188
+ len += decodedValue.len;
189
+ eventData.notifyType = decodedValue.value;
190
+ switch (eventData.notifyType) {
191
+ case baEnum.NotifyType.ALARM:
192
+ case baEnum.NotifyType.EVENT:
193
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
194
+ len += result.len;
195
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, 1);
196
+ len += decodedValue.len;
197
+ eventData.ackRequired = (decodedValue.value > 0);
198
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 10))
199
+ return;
200
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
201
+ len += result.len;
202
+ decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
203
+ len += decodedValue.len;
204
+ eventData.fromState = decodedValue.value;
205
+ break;
206
+ default:
207
+ break;
208
+ }
209
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 11))
210
+ return;
211
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
212
+ len += result.len;
213
+ decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
214
+ len += decodedValue.len;
215
+ eventData.toState = decodedValue.value;
216
+ eventData.len = len;
217
+ return eventData;
218
+ };
219
+ exports.decode = decode;