@bitpoolos/edge-bacnet 1.1.7 → 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 (123) hide show
  1. package/README.md +2 -2
  2. package/bacnet_client.js +331 -168
  3. package/bacnet_device.js +50 -16
  4. package/bacnet_gateway.html +119 -15
  5. package/bacnet_gateway.js +388 -395
  6. package/bacnet_read.html +32 -11
  7. package/bacnet_read.js +1 -1
  8. package/bacnet_server.js +86 -24
  9. package/common.js +26 -19
  10. package/examples/1-Discover-Read.json +1 -1
  11. package/examples/2-Discover-Write.json +1 -1
  12. package/examples/3-Discover-Read-Write.json +1 -1
  13. package/package.json +3 -3
  14. package/resources/{node-bacnet/LICENSE.md → node-bacstack-ts/LICENSE} +3 -4
  15. package/resources/node-bacstack-ts/README.md +75 -0
  16. package/resources/{node-bacnet → node-bacstack-ts/dist}/index.js +0 -2
  17. package/resources/node-bacstack-ts/dist/lib/apdu.js +193 -0
  18. package/resources/node-bacstack-ts/dist/lib/asn1.js +1660 -0
  19. package/resources/node-bacstack-ts/dist/lib/bvlc.js +47 -0
  20. package/resources/node-bacstack-ts/dist/lib/client.js +1454 -0
  21. package/resources/node-bacstack-ts/dist/lib/enum.js +2114 -0
  22. package/resources/node-bacstack-ts/dist/lib/npdu.js +112 -0
  23. package/resources/node-bacstack-ts/dist/lib/services/add-list-element.js +58 -0
  24. package/resources/node-bacstack-ts/dist/lib/services/alarm-acknowledge.js +93 -0
  25. package/resources/node-bacstack-ts/dist/lib/services/alarm-summary.js +42 -0
  26. package/resources/node-bacstack-ts/dist/lib/services/atomic-read-file.js +157 -0
  27. package/resources/node-bacstack-ts/dist/lib/services/atomic-write-file.js +136 -0
  28. package/resources/node-bacstack-ts/dist/lib/services/cov-notify.js +119 -0
  29. package/resources/node-bacstack-ts/dist/lib/services/create-object.js +104 -0
  30. package/resources/node-bacstack-ts/dist/lib/services/delete-object.js +21 -0
  31. package/resources/node-bacstack-ts/dist/lib/services/device-communication-control.js +46 -0
  32. package/resources/node-bacstack-ts/dist/lib/services/error.js +27 -0
  33. package/resources/node-bacstack-ts/dist/lib/services/event-information.js +100 -0
  34. package/resources/node-bacstack-ts/dist/lib/services/event-notify-data.js +219 -0
  35. package/resources/node-bacstack-ts/dist/lib/services/get-enrollment-summary.js +172 -0
  36. package/resources/node-bacstack-ts/dist/lib/services/get-event-information.js +135 -0
  37. package/resources/node-bacstack-ts/dist/lib/services/i-am-broadcast.js +59 -0
  38. package/resources/node-bacstack-ts/dist/lib/services/i-have-broadcast.js +34 -0
  39. package/resources/node-bacstack-ts/dist/lib/services/index.js +32 -0
  40. package/resources/node-bacstack-ts/dist/lib/services/life-safety-operation.js +40 -0
  41. package/resources/node-bacstack-ts/dist/lib/services/private-transfer.js +43 -0
  42. package/resources/node-bacstack-ts/dist/lib/services/read-property-multiple.js +44 -0
  43. package/resources/node-bacstack-ts/dist/lib/services/read-property.js +122 -0
  44. package/resources/node-bacstack-ts/dist/lib/services/read-range.js +201 -0
  45. package/resources/node-bacstack-ts/dist/lib/services/reinitialize-device.js +35 -0
  46. package/resources/node-bacstack-ts/dist/lib/services/subscribe-cov.js +55 -0
  47. package/resources/node-bacstack-ts/dist/lib/services/subscribe-property.js +93 -0
  48. package/resources/node-bacstack-ts/dist/lib/services/time-sync.js +31 -0
  49. package/resources/node-bacstack-ts/dist/lib/services/who-has.js +56 -0
  50. package/resources/node-bacstack-ts/dist/lib/services/who-is.js +45 -0
  51. package/resources/node-bacstack-ts/dist/lib/services/write-property-multiple.js +105 -0
  52. package/resources/node-bacstack-ts/dist/lib/services/write-property.js +90 -0
  53. package/resources/node-bacstack-ts/dist/lib/transport.js +49 -0
  54. package/resources/node-bacstack-ts/dist/lib/types.js +2 -0
  55. package/resources/node-bacstack-ts/package.json +94 -0
  56. package/resources/node-bacnet/CHANGELOG.md +0 -481
  57. package/resources/node-bacnet/README.md +0 -91
  58. package/resources/node-bacnet/docs/Client.html +0 -4422
  59. package/resources/node-bacnet/docs/bacnet-icon-quad.png +0 -0
  60. package/resources/node-bacnet/docs/bacnet-icon-quad128.png +0 -0
  61. package/resources/node-bacnet/docs/bacnet-icon-quad64.png +0 -0
  62. package/resources/node-bacnet/docs/bacnet-icon-small.xcf +0 -0
  63. package/resources/node-bacnet/docs/bacnet-icon.xcf +0 -0
  64. package/resources/node-bacnet/docs/bacnet.html +0 -7032
  65. package/resources/node-bacnet/docs/client.js.html +0 -1759
  66. package/resources/node-bacnet/docs/enum.js.html +0 -2530
  67. package/resources/node-bacnet/docs/global.html +0 -2068
  68. package/resources/node-bacnet/docs/images/mocha-logo.svg +0 -65
  69. package/resources/node-bacnet/docs/index.html +0 -283
  70. package/resources/node-bacnet/docs/scripts/collapse.js +0 -11
  71. package/resources/node-bacnet/docs/scripts/jquery-3.1.1.min.js +0 -4
  72. package/resources/node-bacnet/docs/scripts/linenumber.js +0 -26
  73. package/resources/node-bacnet/docs/scripts/prettify/Apache-License-2.0.txt +0 -202
  74. package/resources/node-bacnet/docs/scripts/prettify/lang-css.js +0 -2
  75. package/resources/node-bacnet/docs/scripts/prettify/prettify.js +0 -28
  76. package/resources/node-bacnet/docs/scripts/search.js +0 -47
  77. package/resources/node-bacnet/docs/services_i-am.js.html +0 -157
  78. package/resources/node-bacnet/docs/services_time-sync.js.html +0 -118
  79. package/resources/node-bacnet/docs/services_who-is.js.html +0 -138
  80. package/resources/node-bacnet/docs/styles/jsdoc.css +0 -683
  81. package/resources/node-bacnet/docs/styles/prettify.css +0 -82
  82. package/resources/node-bacnet/examples/discover-devices.js +0 -66
  83. package/resources/node-bacnet/examples/read-device.js +0 -510
  84. package/resources/node-bacnet/examples/subscribe-cov.js +0 -75
  85. package/resources/node-bacnet/lib/apdu.js +0 -209
  86. package/resources/node-bacnet/lib/asn1.js +0 -1733
  87. package/resources/node-bacnet/lib/bvlc.js +0 -90
  88. package/resources/node-bacnet/lib/client.js +0 -1695
  89. package/resources/node-bacnet/lib/enum.js +0 -2463
  90. package/resources/node-bacnet/lib/npdu.js +0 -123
  91. package/resources/node-bacnet/lib/services/add-list-element.js +0 -64
  92. package/resources/node-bacnet/lib/services/alarm-acknowledge.js +0 -90
  93. package/resources/node-bacnet/lib/services/alarm-summary.js +0 -42
  94. package/resources/node-bacnet/lib/services/atomic-read-file.js +0 -162
  95. package/resources/node-bacnet/lib/services/atomic-write-file.js +0 -138
  96. package/resources/node-bacnet/lib/services/cov-notify.js +0 -126
  97. package/resources/node-bacnet/lib/services/create-object.js +0 -106
  98. package/resources/node-bacnet/lib/services/delete-object.js +0 -23
  99. package/resources/node-bacnet/lib/services/device-communication-control.js +0 -48
  100. package/resources/node-bacnet/lib/services/error.js +0 -33
  101. package/resources/node-bacnet/lib/services/event-information.js +0 -99
  102. package/resources/node-bacnet/lib/services/event-notify-data.js +0 -229
  103. package/resources/node-bacnet/lib/services/get-enrollment-summary.js +0 -178
  104. package/resources/node-bacnet/lib/services/get-event-information.js +0 -144
  105. package/resources/node-bacnet/lib/services/i-am.js +0 -90
  106. package/resources/node-bacnet/lib/services/i-have.js +0 -34
  107. package/resources/node-bacnet/lib/services/index.js +0 -34
  108. package/resources/node-bacnet/lib/services/life-safety-operation.js +0 -40
  109. package/resources/node-bacnet/lib/services/private-transfer.js +0 -43
  110. package/resources/node-bacnet/lib/services/read-property-multiple.js +0 -50
  111. package/resources/node-bacnet/lib/services/read-property.js +0 -130
  112. package/resources/node-bacnet/lib/services/read-range.js +0 -201
  113. package/resources/node-bacnet/lib/services/register-foreign-device.js +0 -18
  114. package/resources/node-bacnet/lib/services/reinitialize-device.js +0 -37
  115. package/resources/node-bacnet/lib/services/subscribe-cov.js +0 -57
  116. package/resources/node-bacnet/lib/services/subscribe-property.js +0 -97
  117. package/resources/node-bacnet/lib/services/time-sync.js +0 -51
  118. package/resources/node-bacnet/lib/services/who-has.js +0 -54
  119. package/resources/node-bacnet/lib/services/who-is.js +0 -71
  120. package/resources/node-bacnet/lib/services/write-property-multiple.js +0 -117
  121. package/resources/node-bacnet/lib/services/write-property.js +0 -94
  122. package/resources/node-bacnet/lib/transport.js +0 -82
  123. package/resources/node-bacnet/package.json +0 -92
@@ -0,0 +1,122 @@
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, objectType, objectInstance, propertyId, arrayIndex) => {
7
+ if (objectType <= baEnum.ASN1_MAX_OBJECT) {
8
+ baAsn1.encodeContextObjectId(buffer, 0, objectType, objectInstance);
9
+ }
10
+ if (propertyId <= baEnum.ASN1_MAX_PROPERTY_ID) {
11
+ baAsn1.encodeContextEnumerated(buffer, 1, propertyId);
12
+ }
13
+ if (arrayIndex !== baEnum.ASN1_ARRAY_ALL) {
14
+ baAsn1.encodeContextUnsigned(buffer, 2, arrayIndex || baEnum.ASN1_ARRAY_ALL);
15
+ }
16
+ };
17
+ exports.encode = encode;
18
+ const decode = (buffer, offset, apduLen) => {
19
+ let len = 0;
20
+ let result;
21
+ let decodedValue;
22
+ if (apduLen < 7)
23
+ return;
24
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 0))
25
+ return;
26
+ len++;
27
+ decodedValue = baAsn1.decodeObjectId(buffer, offset + len);
28
+ len += decodedValue.len;
29
+ const objectId = { type: decodedValue.objectType, instance: decodedValue.instance };
30
+ const property = {};
31
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
32
+ len += result.len;
33
+ if (result.tagNumber !== 1)
34
+ return;
35
+ decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
36
+ len += decodedValue.len;
37
+ property.id = decodedValue.value;
38
+ property.index = baEnum.ASN1_ARRAY_ALL;
39
+ if (len < apduLen) {
40
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
41
+ len += result.len;
42
+ if ((result.tagNumber === 2) && (len < apduLen)) {
43
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
44
+ len += decodedValue.len;
45
+ property.index = decodedValue.value;
46
+ }
47
+ else {
48
+ return;
49
+ }
50
+ }
51
+ if (len < apduLen)
52
+ return;
53
+ return {
54
+ len: len,
55
+ objectId: objectId,
56
+ property: property
57
+ };
58
+ };
59
+ exports.decode = decode;
60
+ const encodeAcknowledge = (buffer, objectId, propertyId, arrayIndex, values) => {
61
+ baAsn1.encodeContextObjectId(buffer, 0, objectId.type, objectId.instance);
62
+ baAsn1.encodeContextEnumerated(buffer, 1, propertyId);
63
+ if (arrayIndex !== baEnum.ASN1_ARRAY_ALL) {
64
+ baAsn1.encodeContextUnsigned(buffer, 2, arrayIndex);
65
+ }
66
+ baAsn1.encodeOpeningTag(buffer, 3);
67
+ values.forEach((value) => baAsn1.bacappEncodeApplicationData(buffer, value));
68
+ baAsn1.encodeClosingTag(buffer, 3);
69
+ };
70
+ exports.encodeAcknowledge = encodeAcknowledge;
71
+ const decodeAcknowledge = (buffer, offset, apduLen) => {
72
+ let result;
73
+ let decodedValue;
74
+ const objectId = {};
75
+ const property = {};
76
+ if (!baAsn1.decodeIsContextTag(buffer, offset, 0))
77
+ return;
78
+ let len = 1;
79
+ result = baAsn1.decodeObjectId(buffer, offset + len);
80
+ len += result.len;
81
+ objectId.type = result.objectType;
82
+ objectId.instance = result.instance;
83
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
84
+ len += result.len;
85
+ if (result.tagNumber !== 1)
86
+ return;
87
+ result = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
88
+ len += result.len;
89
+ property.id = result.value;
90
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
91
+ if (result.tagNumber === 2) {
92
+ len += result.len;
93
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
94
+ len += decodedValue.len;
95
+ property.index = decodedValue.value;
96
+ }
97
+ else {
98
+ property.index = baEnum.ASN1_ARRAY_ALL;
99
+ }
100
+ const values = [];
101
+ if (!baAsn1.decodeIsOpeningTagNumber(buffer, offset + len, 3))
102
+ return;
103
+ len++;
104
+ while ((apduLen - len) > 1) {
105
+ result = baAsn1.bacappDecodeApplicationData(buffer, offset + len, apduLen + offset, objectId.type, property.id);
106
+ if (!result)
107
+ return;
108
+ len += result.len;
109
+ delete result.len;
110
+ values.push(result);
111
+ }
112
+ if (!baAsn1.decodeIsClosingTagNumber(buffer, offset + len, 3))
113
+ return;
114
+ len++;
115
+ return {
116
+ len: len,
117
+ objectId: objectId,
118
+ property: property,
119
+ values: values
120
+ };
121
+ };
122
+ exports.decodeAcknowledge = decodeAcknowledge;
@@ -0,0 +1,201 @@
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, objectId, propertyId, arrayIndex, requestType, position, time, count) => {
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
+ switch (requestType) {
13
+ case baEnum.ReadRangeType.BY_POSITION:
14
+ baAsn1.encodeOpeningTag(buffer, 3);
15
+ baAsn1.encodeApplicationUnsigned(buffer, position);
16
+ baAsn1.encodeApplicationSigned(buffer, count);
17
+ baAsn1.encodeClosingTag(buffer, 3);
18
+ break;
19
+ case baEnum.ReadRangeType.BY_SEQUENCE_NUMBER:
20
+ baAsn1.encodeOpeningTag(buffer, 6);
21
+ baAsn1.encodeApplicationUnsigned(buffer, position);
22
+ baAsn1.encodeApplicationSigned(buffer, count);
23
+ baAsn1.encodeClosingTag(buffer, 6);
24
+ break;
25
+ case baEnum.ReadRangeType.BY_TIME_REFERENCE_TIME_COUNT:
26
+ baAsn1.encodeOpeningTag(buffer, 7);
27
+ baAsn1.encodeApplicationDate(buffer, time);
28
+ baAsn1.encodeApplicationTime(buffer, time);
29
+ baAsn1.encodeApplicationSigned(buffer, count);
30
+ baAsn1.encodeClosingTag(buffer, 7);
31
+ break;
32
+ default:
33
+ break;
34
+ }
35
+ };
36
+ exports.encode = encode;
37
+ const decode = (buffer, offset, apduLen) => {
38
+ let len = 0;
39
+ let result;
40
+ let decodedValue;
41
+ let requestType;
42
+ let position;
43
+ let time;
44
+ let count;
45
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 0))
46
+ return;
47
+ len++;
48
+ decodedValue = baAsn1.decodeObjectId(buffer, offset + len);
49
+ len += decodedValue.len;
50
+ const objectId = { type: decodedValue.objectType, instance: decodedValue.instance };
51
+ const property = {};
52
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
53
+ len += result.len;
54
+ if (result.tagNumber !== 1)
55
+ return;
56
+ decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
57
+ len += decodedValue.len;
58
+ property.id = decodedValue.value;
59
+ if (len < apduLen && baAsn1.decodeIsContextTag(buffer, offset + len, 2)) {
60
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
61
+ len += result.len;
62
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
63
+ len += decodedValue.len;
64
+ property.index = decodedValue.value;
65
+ }
66
+ else {
67
+ property.index = baEnum.ASN1_ARRAY_ALL;
68
+ }
69
+ if (len < apduLen) {
70
+ result = baAsn1.decodeTagNumber(buffer, offset + len);
71
+ len += result.len;
72
+ switch (result.tagNumber) {
73
+ case 3: {
74
+ requestType = baEnum.ReadRangeType.BY_POSITION;
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
+ position = decodedValue.value;
80
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
81
+ len += result.len;
82
+ decodedValue = baAsn1.decodeSigned(buffer, offset + len, result.value);
83
+ len += decodedValue.len;
84
+ count = decodedValue.value;
85
+ break;
86
+ }
87
+ case 6: {
88
+ requestType = baEnum.ReadRangeType.BY_SEQUENCE_NUMBER;
89
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
90
+ len += result.len;
91
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
92
+ len += decodedValue.len;
93
+ position = decodedValue.value;
94
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
95
+ len += result.len;
96
+ decodedValue = baAsn1.decodeSigned(buffer, offset + len, result.value);
97
+ len += decodedValue.len;
98
+ count = decodedValue.value;
99
+ break;
100
+ }
101
+ case 7: {
102
+ requestType = baEnum.ReadRangeType.BY_TIME_REFERENCE_TIME_COUNT;
103
+ decodedValue = baAsn1.decodeApplicationDate(buffer, offset + len);
104
+ len += decodedValue.len;
105
+ const tmpDate = decodedValue.value;
106
+ decodedValue = baAsn1.decodeApplicationTime(buffer, offset + len);
107
+ len += decodedValue.len;
108
+ const tmpTime = decodedValue.value;
109
+ time = new Date(tmpDate.getYear(), tmpDate.getMonth(), tmpDate.getDate(), tmpTime.getHours(), tmpTime.getMinutes(), tmpTime.getSeconds(), tmpTime.getMilliseconds());
110
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
111
+ len += result.len;
112
+ decodedValue = baAsn1.decodeSigned(buffer, offset + len, result.value);
113
+ len += decodedValue.len;
114
+ count = decodedValue.value;
115
+ break;
116
+ }
117
+ default:
118
+ return;
119
+ }
120
+ result = baAsn1.decodeTagNumber(buffer, offset + len);
121
+ len += result.len;
122
+ }
123
+ return {
124
+ len: len,
125
+ objectId: objectId,
126
+ property: property,
127
+ requestType: requestType,
128
+ position: position,
129
+ time: time,
130
+ count: count
131
+ };
132
+ };
133
+ exports.decode = decode;
134
+ const encodeAcknowledge = (buffer, objectId, propertyId, arrayIndex, resultFlags, itemCount, applicationData, requestType, firstSequence) => {
135
+ baAsn1.encodeContextObjectId(buffer, 0, objectId.type, objectId.instance);
136
+ baAsn1.encodeContextEnumerated(buffer, 1, propertyId);
137
+ if (arrayIndex !== baEnum.ASN1_ARRAY_ALL) {
138
+ baAsn1.encodeContextUnsigned(buffer, 2, arrayIndex);
139
+ }
140
+ baAsn1.encodeContextBitstring(buffer, 3, resultFlags);
141
+ baAsn1.encodeContextUnsigned(buffer, 4, itemCount);
142
+ baAsn1.encodeOpeningTag(buffer, 5);
143
+ if (itemCount !== 0) {
144
+ applicationData.copy(buffer.buffer, buffer.offset, 0, applicationData.length);
145
+ buffer.offset += applicationData.length;
146
+ }
147
+ baAsn1.encodeClosingTag(buffer, 5);
148
+ if (itemCount !== 0 && requestType && requestType !== baEnum.ReadRangeType.BY_POSITION) {
149
+ baAsn1.encodeContextUnsigned(buffer, 6, firstSequence);
150
+ }
151
+ };
152
+ exports.encodeAcknowledge = encodeAcknowledge;
153
+ const decodeAcknowledge = (buffer, offset, apduLen) => {
154
+ let len = 0;
155
+ let result;
156
+ let decodedValue;
157
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 0))
158
+ return;
159
+ len++;
160
+ decodedValue = baAsn1.decodeObjectId(buffer, offset + len);
161
+ len += decodedValue.len;
162
+ const objectId = { type: decodedValue.objectType, instance: decodedValue.instance };
163
+ const property = { index: baEnum.ASN1_ARRAY_ALL };
164
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
165
+ len += result.len;
166
+ if (result.tagNumber !== 1)
167
+ return;
168
+ decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
169
+ len += decodedValue.len;
170
+ property.id = decodedValue.value;
171
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
172
+ if ((result.tagNumber === 2) && (len < apduLen)) {
173
+ len += result.len;
174
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
175
+ len += decodedValue.len;
176
+ property.index = decodedValue.value;
177
+ }
178
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
179
+ len += result.len;
180
+ decodedValue = baAsn1.decodeBitstring(buffer, offset + len, result.value);
181
+ len += decodedValue.len;
182
+ const resultFlag = decodedValue.value;
183
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
184
+ len += result.len;
185
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
186
+ len += decodedValue.len;
187
+ const itemCount = decodedValue.value;
188
+ if (!(baAsn1.decodeIsOpeningTag(buffer, offset + len)))
189
+ return;
190
+ len++;
191
+ const rangeBuffer = buffer.slice(offset + len, apduLen - 3);
192
+ return {
193
+ objectId: objectId,
194
+ property: property,
195
+ resultFlag: resultFlag,
196
+ itemCount: itemCount,
197
+ rangeBuffer: rangeBuffer,
198
+ len: len
199
+ };
200
+ };
201
+ exports.decodeAcknowledge = decodeAcknowledge;
@@ -0,0 +1,35 @@
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, state, password) => {
6
+ baAsn1.encodeContextEnumerated(buffer, 0, state);
7
+ if (password && password !== '') {
8
+ baAsn1.encodeContextCharacterString(buffer, 1, password);
9
+ }
10
+ };
11
+ exports.encode = encode;
12
+ const decode = (buffer, offset, apduLen) => {
13
+ let len = 0;
14
+ const value = {};
15
+ let result;
16
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 0))
17
+ return;
18
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
19
+ len += result.len;
20
+ let decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
21
+ value.state = decodedValue.value;
22
+ len += decodedValue.len;
23
+ if (len < apduLen) {
24
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 1))
25
+ return;
26
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
27
+ len += result.len;
28
+ decodedValue = baAsn1.decodeCharacterString(buffer, offset + len, apduLen - (offset + len), result.value);
29
+ value.password = decodedValue.value;
30
+ len += decodedValue.len;
31
+ }
32
+ value.len = len;
33
+ return value;
34
+ };
35
+ exports.decode = decode;
@@ -0,0 +1,55 @@
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, subscriberProcessId, monitoredObjectId, cancellationRequest, issueConfirmedNotifications, lifetime) => {
6
+ baAsn1.encodeContextUnsigned(buffer, 0, subscriberProcessId);
7
+ baAsn1.encodeContextObjectId(buffer, 1, monitoredObjectId.type, monitoredObjectId.instance);
8
+ if (!cancellationRequest) {
9
+ baAsn1.encodeContextBoolean(buffer, 2, issueConfirmedNotifications);
10
+ baAsn1.encodeContextUnsigned(buffer, 3, lifetime);
11
+ }
12
+ };
13
+ exports.encode = encode;
14
+ const decode = (buffer, offset, apduLen) => {
15
+ let len = 0;
16
+ const value = {};
17
+ let result;
18
+ let decodedValue;
19
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 0))
20
+ return;
21
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
22
+ len += result.len;
23
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
24
+ len += decodedValue.len;
25
+ value.subscriberProcessId = decodedValue.value;
26
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 1))
27
+ return;
28
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
29
+ len += result.len;
30
+ decodedValue = baAsn1.decodeObjectId(buffer, offset + len);
31
+ len += decodedValue.len;
32
+ value.monitoredObjectId = { type: decodedValue.objectType, instance: decodedValue.instance };
33
+ value.cancellationRequest = true;
34
+ if (len < apduLen) {
35
+ value.issueConfirmedNotifications = false;
36
+ if (baAsn1.decodeIsContextTag(buffer, offset + len, 2)) {
37
+ value.cancellationRequest = false;
38
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
39
+ len += result.len;
40
+ value.issueConfirmedNotifications = buffer[offset + len] > 0;
41
+ len++;
42
+ }
43
+ value.lifetime = 0;
44
+ if (baAsn1.decodeIsContextTag(buffer, offset + len, 3)) {
45
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
46
+ len += result.len;
47
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
48
+ len += decodedValue.len;
49
+ value.lifetime = decodedValue.value;
50
+ }
51
+ }
52
+ value.len = len;
53
+ return value;
54
+ };
55
+ 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, subscriberProcessId, monitoredObjectId, cancellationRequest, issueConfirmedNotifications, lifetime, monitoredProperty, covIncrementPresent, covIncrement) => {
7
+ baAsn1.encodeContextUnsigned(buffer, 0, subscriberProcessId);
8
+ baAsn1.encodeContextObjectId(buffer, 1, monitoredObjectId.type, monitoredObjectId.instance);
9
+ if (!cancellationRequest) {
10
+ baAsn1.encodeContextBoolean(buffer, 2, issueConfirmedNotifications);
11
+ baAsn1.encodeContextUnsigned(buffer, 3, lifetime);
12
+ }
13
+ baAsn1.encodeOpeningTag(buffer, 4);
14
+ baAsn1.encodeContextEnumerated(buffer, 0, monitoredProperty.id);
15
+ if (monitoredProperty.index !== baEnum.ASN1_ARRAY_ALL) {
16
+ baAsn1.encodeContextUnsigned(buffer, 1, monitoredProperty.index);
17
+ }
18
+ baAsn1.encodeClosingTag(buffer, 4);
19
+ if (covIncrementPresent) {
20
+ baAsn1.encodeContextReal(buffer, 5, covIncrement);
21
+ }
22
+ };
23
+ exports.encode = encode;
24
+ const decode = (buffer, offset) => {
25
+ let len = 0;
26
+ const value = {};
27
+ let result;
28
+ let decodedValue;
29
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 0))
30
+ return;
31
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
32
+ len += result.len;
33
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
34
+ len += decodedValue.len;
35
+ value.subscriberProcessId = decodedValue.value;
36
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 1))
37
+ return;
38
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
39
+ len += result.len;
40
+ decodedValue = baAsn1.decodeObjectId(buffer, offset + len);
41
+ len += decodedValue.len;
42
+ value.monitoredObjectId = { type: decodedValue.objectType, instance: decodedValue.instance };
43
+ value.cancellationRequest = true;
44
+ value.issueConfirmedNotifications = false;
45
+ if (baAsn1.decodeIsContextTag(buffer, offset + len, 2)) {
46
+ value.cancellationRequest = false;
47
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
48
+ len += result.len;
49
+ value.issueConfirmedNotifications = buffer[offset + len] > 0;
50
+ len++;
51
+ }
52
+ value.lifetime = 0;
53
+ if (baAsn1.decodeIsContextTag(buffer, offset + len, 3)) {
54
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
55
+ len += result.len;
56
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
57
+ len += decodedValue.len;
58
+ value.lifetime = decodedValue.value;
59
+ }
60
+ if (!baAsn1.decodeIsOpeningTagNumber(buffer, offset + len, 4))
61
+ return;
62
+ len++;
63
+ value.monitoredProperty = {};
64
+ if (!baAsn1.decodeIsContextTag(buffer, offset + len, 0))
65
+ return;
66
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
67
+ len += result.len;
68
+ decodedValue = baAsn1.decodeEnumerated(buffer, offset + len, result.value);
69
+ len += decodedValue.len;
70
+ value.monitoredProperty.id = decodedValue.value;
71
+ value.monitoredProperty.index = baEnum.ASN1_ARRAY_ALL;
72
+ if (baAsn1.decodeIsContextTag(buffer, offset + len, 1)) {
73
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
74
+ len += result.len;
75
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
76
+ len += decodedValue.len;
77
+ value.monitoredProperty.index = decodedValue.value;
78
+ }
79
+ if (!baAsn1.decodeIsClosingTagNumber(buffer, offset + len, 4))
80
+ return;
81
+ len++;
82
+ value.covIncrement = 0;
83
+ if (baAsn1.decodeIsContextTag(buffer, offset + len, 5)) {
84
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
85
+ len += result.len;
86
+ decodedValue = baAsn1.decodeReal(buffer, offset + len);
87
+ len += decodedValue.len;
88
+ value.covIncrement = decodedValue.value;
89
+ }
90
+ value.len = len;
91
+ return value;
92
+ };
93
+ exports.decode = decode;
@@ -0,0 +1,31 @@
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, time) => {
7
+ baAsn1.encodeApplicationDate(buffer, time);
8
+ baAsn1.encodeApplicationTime(buffer, time);
9
+ };
10
+ exports.encode = encode;
11
+ const decode = (buffer, offset) => {
12
+ let len = 0;
13
+ let result;
14
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
15
+ len += result.len;
16
+ if (result.tagNumber !== baEnum.ApplicationTags.DATE)
17
+ return;
18
+ const date = baAsn1.decodeDate(buffer, offset + len);
19
+ len += date.len;
20
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
21
+ len += result.len;
22
+ if (result.tagNumber !== baEnum.ApplicationTags.TIME)
23
+ return;
24
+ const time = baAsn1.decodeBacnetTime(buffer, offset + len);
25
+ len += time.len;
26
+ return {
27
+ len: len,
28
+ value: new Date(date.value.getFullYear(), date.value.getMonth(), date.value.getDate(), time.value.getHours(), time.value.getMinutes(), time.value.getSeconds(), time.value.getMilliseconds())
29
+ };
30
+ };
31
+ exports.decode = decode;
@@ -0,0 +1,56 @@
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, lowLimit, highLimit, objectId, objectName) => {
7
+ if ((lowLimit >= 0) && (lowLimit <= baEnum.ASN1_MAX_INSTANCE) && (highLimit >= 0) && (highLimit <= baEnum.ASN1_MAX_INSTANCE)) {
8
+ baAsn1.encodeContextUnsigned(buffer, 0, lowLimit);
9
+ baAsn1.encodeContextUnsigned(buffer, 1, highLimit);
10
+ }
11
+ if (objectName && objectName !== '') {
12
+ baAsn1.encodeContextCharacterString(buffer, 3, objectName);
13
+ }
14
+ else {
15
+ baAsn1.encodeContextObjectId(buffer, 2, objectId.type, objectId.instance);
16
+ }
17
+ };
18
+ exports.encode = encode;
19
+ const decode = (buffer, offset, apduLen) => {
20
+ let len = 0;
21
+ const value = {};
22
+ let decodedValue;
23
+ let result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
24
+ len += result.len;
25
+ if (result.tagNumber === 0) {
26
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
27
+ len += decodedValue.len;
28
+ if (decodedValue.value <= baEnum.ASN1_MAX_INSTANCE) {
29
+ value.lowLimit = decodedValue.value;
30
+ }
31
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
32
+ len += result.len;
33
+ }
34
+ if (result.tagNumber === 1) {
35
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
36
+ len += decodedValue.len;
37
+ if (decodedValue.value <= baEnum.ASN1_MAX_INSTANCE) {
38
+ value.highLimit = decodedValue.value;
39
+ }
40
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
41
+ len += result.len;
42
+ }
43
+ if (result.tagNumber === 2) {
44
+ decodedValue = baAsn1.decodeObjectId(buffer, offset + len);
45
+ len += decodedValue.len;
46
+ value.objectId = { type: decodedValue.objectType, instance: decodedValue.instance };
47
+ }
48
+ if (result.tagNumber === 3) {
49
+ decodedValue = baAsn1.decodeCharacterString(buffer, offset + len, apduLen - (offset + len), result.value);
50
+ len += decodedValue.len;
51
+ value.objectName = decodedValue.value;
52
+ }
53
+ value.len = len;
54
+ return value;
55
+ };
56
+ exports.decode = decode;
@@ -0,0 +1,45 @@
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, lowLimit, highLimit) => {
7
+ if ((lowLimit >= 0) && (lowLimit <= baEnum.ASN1_MAX_INSTANCE) && (highLimit >= 0) && (highLimit <= baEnum.ASN1_MAX_INSTANCE)) {
8
+ baAsn1.encodeContextUnsigned(buffer, 0, lowLimit);
9
+ baAsn1.encodeContextUnsigned(buffer, 1, highLimit);
10
+ }
11
+ };
12
+ exports.encode = encode;
13
+ const decode = (buffer, offset, apduLen) => {
14
+ let len = 0;
15
+ const value = {};
16
+ if (apduLen <= 0)
17
+ return {};
18
+ let result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
19
+ len += result.len;
20
+ if (result.tagNumber !== 0)
21
+ return;
22
+ if (apduLen <= len)
23
+ return;
24
+ let decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
25
+ len += decodedValue.len;
26
+ if (decodedValue.value <= baEnum.ASN1_MAX_INSTANCE) {
27
+ value.lowLimit = decodedValue.value;
28
+ }
29
+ if (apduLen <= len)
30
+ return;
31
+ result = baAsn1.decodeTagNumberAndValue(buffer, offset + len);
32
+ len += result.len;
33
+ if (result.tagNumber !== 1)
34
+ return;
35
+ if (apduLen <= len)
36
+ return;
37
+ decodedValue = baAsn1.decodeUnsigned(buffer, offset + len, result.value);
38
+ len += decodedValue.len;
39
+ if (decodedValue.value <= baEnum.ASN1_MAX_INSTANCE) {
40
+ value.highLimit = decodedValue.value;
41
+ }
42
+ value.len = len;
43
+ return value;
44
+ };
45
+ exports.decode = decode;