@bitpoolos/edge-bacnet 1.6.7 → 1.6.9

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 (48) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/bacnet_client.js +181 -28
  3. package/bacnet_device.js +16 -15
  4. package/bacnet_gateway.html +82 -0
  5. package/bacnet_gateway.js +3 -1
  6. package/bacnet_write.html +2 -1
  7. package/common.js +8 -1
  8. package/package.json +1 -1
  9. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -41
  10. package/resources/node-bacstack-ts/dist/index.js +0 -3
  11. package/resources/node-bacstack-ts/dist/lib/apdu.js +0 -193
  12. package/resources/node-bacstack-ts/dist/lib/asn1.js +0 -1671
  13. package/resources/node-bacstack-ts/dist/lib/bvlc.js +0 -47
  14. package/resources/node-bacstack-ts/dist/lib/client.js +0 -1553
  15. package/resources/node-bacstack-ts/dist/lib/enum.js +0 -2114
  16. package/resources/node-bacstack-ts/dist/lib/npdu.js +0 -112
  17. package/resources/node-bacstack-ts/dist/lib/services/add-list-element.js +0 -58
  18. package/resources/node-bacstack-ts/dist/lib/services/alarm-acknowledge.js +0 -93
  19. package/resources/node-bacstack-ts/dist/lib/services/alarm-summary.js +0 -42
  20. package/resources/node-bacstack-ts/dist/lib/services/atomic-read-file.js +0 -157
  21. package/resources/node-bacstack-ts/dist/lib/services/atomic-write-file.js +0 -136
  22. package/resources/node-bacstack-ts/dist/lib/services/cov-notify.js +0 -119
  23. package/resources/node-bacstack-ts/dist/lib/services/create-object.js +0 -104
  24. package/resources/node-bacstack-ts/dist/lib/services/delete-object.js +0 -21
  25. package/resources/node-bacstack-ts/dist/lib/services/device-communication-control.js +0 -46
  26. package/resources/node-bacstack-ts/dist/lib/services/error.js +0 -27
  27. package/resources/node-bacstack-ts/dist/lib/services/event-information.js +0 -100
  28. package/resources/node-bacstack-ts/dist/lib/services/event-notify-data.js +0 -219
  29. package/resources/node-bacstack-ts/dist/lib/services/get-enrollment-summary.js +0 -172
  30. package/resources/node-bacstack-ts/dist/lib/services/get-event-information.js +0 -135
  31. package/resources/node-bacstack-ts/dist/lib/services/i-am-broadcast.js +0 -59
  32. package/resources/node-bacstack-ts/dist/lib/services/i-have-broadcast.js +0 -34
  33. package/resources/node-bacstack-ts/dist/lib/services/index.js +0 -32
  34. package/resources/node-bacstack-ts/dist/lib/services/life-safety-operation.js +0 -40
  35. package/resources/node-bacstack-ts/dist/lib/services/private-transfer.js +0 -43
  36. package/resources/node-bacstack-ts/dist/lib/services/read-property-multiple.js +0 -44
  37. package/resources/node-bacstack-ts/dist/lib/services/read-property.js +0 -122
  38. package/resources/node-bacstack-ts/dist/lib/services/read-range.js +0 -201
  39. package/resources/node-bacstack-ts/dist/lib/services/reinitialize-device.js +0 -35
  40. package/resources/node-bacstack-ts/dist/lib/services/subscribe-cov.js +0 -55
  41. package/resources/node-bacstack-ts/dist/lib/services/subscribe-property.js +0 -93
  42. package/resources/node-bacstack-ts/dist/lib/services/time-sync.js +0 -31
  43. package/resources/node-bacstack-ts/dist/lib/services/who-has.js +0 -56
  44. package/resources/node-bacstack-ts/dist/lib/services/who-is.js +0 -45
  45. package/resources/node-bacstack-ts/dist/lib/services/write-property-multiple.js +0 -105
  46. package/resources/node-bacstack-ts/dist/lib/services/write-property.js +0 -90
  47. package/resources/node-bacstack-ts/dist/lib/transport.js +0 -86
  48. package/resources/node-bacstack-ts/dist/lib/types.js +0 -2
@@ -1,119 +0,0 @@
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;
@@ -1,104 +0,0 @@
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;
@@ -1,21 +0,0 @@
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;
@@ -1,46 +0,0 @@
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;
@@ -1,27 +0,0 @@
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;
@@ -1,100 +0,0 @@
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;
@@ -1,219 +0,0 @@
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;