@zwave-js/cc 15.15.3 → 15.16.0

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 (108) hide show
  1. package/build/cjs/cc/BatteryCC.js +4 -0
  2. package/build/cjs/cc/BatteryCC.js.map +2 -2
  3. package/build/cjs/cc/ConfigurationCC.d.ts +6 -0
  4. package/build/cjs/cc/ConfigurationCC.js +49 -1
  5. package/build/cjs/cc/ConfigurationCC.js.map +2 -2
  6. package/build/cjs/cc/EntryControlCC.d.ts +2 -2
  7. package/build/cjs/cc/EntryControlCC.js.map +2 -2
  8. package/build/cjs/cc/FirmwareUpdateMetaDataCC.d.ts +4 -4
  9. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js.map +2 -2
  10. package/build/cjs/cc/ManufacturerProprietaryCC.d.ts +4 -4
  11. package/build/cjs/cc/ManufacturerProprietaryCC.js.map +2 -2
  12. package/build/cjs/cc/MeterCC.js.map +2 -2
  13. package/build/cjs/cc/MultiChannelAssociationCC.js.map +2 -2
  14. package/build/cjs/cc/NodeNamingCC.js.map +2 -2
  15. package/build/cjs/cc/NotificationCC.d.ts +3 -3
  16. package/build/cjs/cc/NotificationCC.js.map +2 -2
  17. package/build/cjs/cc/Security2CC.d.ts +14 -14
  18. package/build/cjs/cc/Security2CC.js.map +2 -2
  19. package/build/cjs/cc/SecurityCC.d.ts +10 -10
  20. package/build/cjs/cc/SecurityCC.js.map +2 -2
  21. package/build/cjs/cc/ThermostatModeCC.d.ts +6 -6
  22. package/build/cjs/cc/ThermostatModeCC.js.map +2 -2
  23. package/build/cjs/cc/TransportServiceCC.d.ts +7 -7
  24. package/build/cjs/cc/TransportServiceCC.js.map +2 -2
  25. package/build/cjs/cc/UserCodeCC.d.ts +6 -6
  26. package/build/cjs/cc/UserCodeCC.js.map +2 -2
  27. package/build/cjs/cc/VersionCC.js.map +2 -2
  28. package/build/cjs/cc/ZWaveProtocolCC.d.ts +3 -3
  29. package/build/cjs/cc/ZWaveProtocolCC.js.map +2 -2
  30. package/build/cjs/lib/CommandClass.d.ts +4 -4
  31. package/build/cjs/lib/CommandClass.js.map +2 -2
  32. package/build/cjs/lib/NotificationEventPayload.d.ts +2 -1
  33. package/build/cjs/lib/NotificationEventPayload.js.map +2 -2
  34. package/build/cjs/lib/Security2/Extension.d.ts +12 -12
  35. package/build/cjs/lib/Security2/Extension.js.map +2 -2
  36. package/build/cjs/lib/_Types.d.ts +2 -1
  37. package/build/cjs/lib/_Types.js.map +2 -2
  38. package/build/cjs/lib/serializers.d.ts +4 -4
  39. package/build/cjs/lib/serializers.js.map +2 -2
  40. package/build/cjs/lib/traits.d.ts +5 -0
  41. package/build/esm/cc/BatteryCC.d.ts.map +1 -1
  42. package/build/esm/cc/BatteryCC.js +3 -0
  43. package/build/esm/cc/BatteryCC.js.map +1 -1
  44. package/build/esm/cc/ConfigurationCC.d.ts +6 -0
  45. package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
  46. package/build/esm/cc/ConfigurationCC.js +62 -1
  47. package/build/esm/cc/ConfigurationCC.js.map +1 -1
  48. package/build/esm/cc/EntryControlCC.d.ts +2 -2
  49. package/build/esm/cc/EntryControlCC.d.ts.map +1 -1
  50. package/build/esm/cc/EntryControlCC.js.map +1 -1
  51. package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts +4 -4
  52. package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts.map +1 -1
  53. package/build/esm/cc/FirmwareUpdateMetaDataCC.js.map +1 -1
  54. package/build/esm/cc/ManufacturerProprietaryCC.d.ts +4 -4
  55. package/build/esm/cc/ManufacturerProprietaryCC.d.ts.map +1 -1
  56. package/build/esm/cc/ManufacturerProprietaryCC.js.map +1 -1
  57. package/build/esm/cc/MeterCC.d.ts.map +1 -1
  58. package/build/esm/cc/MeterCC.js.map +1 -1
  59. package/build/esm/cc/MultiChannelAssociationCC.d.ts.map +1 -1
  60. package/build/esm/cc/MultiChannelAssociationCC.js.map +1 -1
  61. package/build/esm/cc/NodeNamingCC.d.ts.map +1 -1
  62. package/build/esm/cc/NodeNamingCC.js.map +1 -1
  63. package/build/esm/cc/NotificationCC.d.ts +3 -3
  64. package/build/esm/cc/NotificationCC.d.ts.map +1 -1
  65. package/build/esm/cc/NotificationCC.js.map +1 -1
  66. package/build/esm/cc/Security2CC.d.ts +14 -14
  67. package/build/esm/cc/Security2CC.d.ts.map +1 -1
  68. package/build/esm/cc/Security2CC.js +1 -1
  69. package/build/esm/cc/Security2CC.js.map +1 -1
  70. package/build/esm/cc/SecurityCC.d.ts +10 -10
  71. package/build/esm/cc/SecurityCC.d.ts.map +1 -1
  72. package/build/esm/cc/SecurityCC.js +1 -1
  73. package/build/esm/cc/SecurityCC.js.map +1 -1
  74. package/build/esm/cc/ThermostatModeCC.d.ts +6 -6
  75. package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -1
  76. package/build/esm/cc/ThermostatModeCC.js +1 -1
  77. package/build/esm/cc/ThermostatModeCC.js.map +1 -1
  78. package/build/esm/cc/TransportServiceCC.d.ts +7 -7
  79. package/build/esm/cc/TransportServiceCC.d.ts.map +1 -1
  80. package/build/esm/cc/TransportServiceCC.js.map +1 -1
  81. package/build/esm/cc/UserCodeCC.d.ts +6 -6
  82. package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
  83. package/build/esm/cc/UserCodeCC.js.map +1 -1
  84. package/build/esm/cc/VersionCC.d.ts.map +1 -1
  85. package/build/esm/cc/VersionCC.js +1 -1
  86. package/build/esm/cc/VersionCC.js.map +1 -1
  87. package/build/esm/cc/ZWaveProtocolCC.d.ts +3 -3
  88. package/build/esm/cc/ZWaveProtocolCC.d.ts.map +1 -1
  89. package/build/esm/cc/ZWaveProtocolCC.js.map +1 -1
  90. package/build/esm/lib/CommandClass.d.ts +4 -4
  91. package/build/esm/lib/CommandClass.d.ts.map +1 -1
  92. package/build/esm/lib/CommandClass.js.map +1 -1
  93. package/build/esm/lib/NotificationEventPayload.d.ts +2 -1
  94. package/build/esm/lib/NotificationEventPayload.d.ts.map +1 -1
  95. package/build/esm/lib/NotificationEventPayload.js.map +1 -1
  96. package/build/esm/lib/Security2/Extension.d.ts +12 -12
  97. package/build/esm/lib/Security2/Extension.d.ts.map +1 -1
  98. package/build/esm/lib/Security2/Extension.js +1 -1
  99. package/build/esm/lib/Security2/Extension.js.map +1 -1
  100. package/build/esm/lib/_Types.d.ts +2 -1
  101. package/build/esm/lib/_Types.d.ts.map +1 -1
  102. package/build/esm/lib/_Types.js.map +1 -1
  103. package/build/esm/lib/serializers.d.ts +4 -4
  104. package/build/esm/lib/serializers.d.ts.map +1 -1
  105. package/build/esm/lib/serializers.js.map +1 -1
  106. package/build/esm/lib/traits.d.ts +5 -0
  107. package/build/esm/lib/traits.d.ts.map +1 -1
  108. package/package.json +10 -10
@@ -1,6 +1,6 @@
1
1
  import type { CCEncodingContext, CCParsingContext } from "@zwave-js/cc";
2
2
  import { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, type SupervisionResult, type WithAddress } from "@zwave-js/core";
3
- import { Bytes } from "@zwave-js/shared";
3
+ import { Bytes, type BytesView } from "@zwave-js/shared";
4
4
  import { CCAPI, POLL_VALUE, type PollValueImplementation, SET_VALUE, type SetValueImplementation } from "../lib/API.js";
5
5
  import { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext } from "../lib/CommandClass.js";
6
6
  import { EntryControlCommand, EntryControlDataTypes, EntryControlEventTypes } from "../lib/_Types.js";
@@ -167,7 +167,7 @@ export declare class EntryControlCCNotification extends EntryControlCC {
167
167
  readonly sequenceNumber: number;
168
168
  readonly dataType: EntryControlDataTypes;
169
169
  readonly eventType: EntryControlEventTypes;
170
- readonly eventData?: Uint8Array | string;
170
+ readonly eventData?: BytesView | string;
171
171
  toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
172
172
  }
173
173
  export interface EntryControlCCKeySupportedReportOptions {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cc/EntryControlCC.ts"],
4
- "sourcesContent": ["import type { CCEncodingContext, CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\tCommandClasses,\n\ttype GetValueDB,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype MessageRecord,\n\ttype SupervisionResult,\n\tValueMetadata,\n\ttype WithAddress,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tgetCCName,\n\tparseBitMask,\n\tsupervisedCommandSucceeded,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport { Bytes, buffer2hex, pick } from \"@zwave-js/shared\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport {\n\tCCAPI,\n\tPOLL_VALUE,\n\ttype PollValueImplementation,\n\tSET_VALUE,\n\ttype SetValueImplementation,\n\tthrowUnsupportedProperty,\n\tthrowWrongValueType,\n} from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype PersistValuesContext,\n\ttype RefreshValuesContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport {\n\tEntryControlCommand,\n\tEntryControlDataTypes,\n\tEntryControlEventTypes,\n} from \"../lib/_Types.js\";\nimport * as ccUtils from \"../lib/utils.js\";\n\nexport const EntryControlCCValues = V.defineCCValues(\n\tCommandClasses[\"Entry Control\"],\n\t{\n\t\t...V.staticProperty(\n\t\t\t\"keyCacheSize\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.UInt8,\n\t\t\t\tlabel: \"Key cache size\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"Number of character that must be stored before sending\",\n\t\t\t\tmin: 1,\n\t\t\t\tmax: 32,\n\t\t\t} as const,\n\t\t),\n\t\t...V.staticProperty(\n\t\t\t\"keyCacheTimeout\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.UInt8,\n\t\t\t\tlabel: \"Key cache timeout\",\n\t\t\t\tunit: \"seconds\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"How long the key cache must wait for additional characters\",\n\t\t\t\tmin: 1,\n\t\t\t\tmax: 10,\n\t\t\t} as const,\n\t\t),\n\t\t...V.staticProperty(\"supportedDataTypes\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.staticProperty(\"supportedEventTypes\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.staticProperty(\"supportedKeys\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t},\n);\n\n@API(CommandClasses[\"Entry Control\"])\nexport class EntryControlCCAPI extends CCAPI {\n\tpublic supportsCommand(cmd: EntryControlCommand): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase EntryControlCommand.KeySupportedGet:\n\t\t\tcase EntryControlCommand.EventSupportedGet:\n\t\t\tcase EntryControlCommand.ConfigurationGet:\n\t\t\t\treturn this.isSinglecast();\n\t\t\tcase EntryControlCommand.ConfigurationSet:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getSupportedKeys() {\n\t\tthis.assertSupportsCommand(\n\t\t\tEntryControlCommand,\n\t\t\tEntryControlCommand.KeySupportedGet,\n\t\t);\n\n\t\tconst cc = new EntryControlCCKeySupportedGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tEntryControlCCKeySupportedReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.supportedKeys;\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getEventCapabilities() {\n\t\tthis.assertSupportsCommand(\n\t\t\tEntryControlCommand,\n\t\t\tEntryControlCommand.EventSupportedGet,\n\t\t);\n\n\t\tconst cc = new EntryControlCCEventSupportedGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tEntryControlCCEventSupportedReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"supportedDataTypes\",\n\t\t\t\t\"supportedEventTypes\",\n\t\t\t\t\"minKeyCacheSize\",\n\t\t\t\t\"maxKeyCacheSize\",\n\t\t\t\t\"minKeyCacheTimeout\",\n\t\t\t\t\"maxKeyCacheTimeout\",\n\t\t\t]);\n\t\t}\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getConfiguration() {\n\t\tthis.assertSupportsCommand(\n\t\t\tEntryControlCommand,\n\t\t\tEntryControlCommand.ConfigurationGet,\n\t\t);\n\n\t\tconst cc = new EntryControlCCConfigurationGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tEntryControlCCConfigurationReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\"keyCacheSize\", \"keyCacheTimeout\"]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async setConfiguration(\n\t\tkeyCacheSize: number,\n\t\tkeyCacheTimeout: number,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tEntryControlCommand,\n\t\t\tEntryControlCommand.ConfigurationGet,\n\t\t);\n\n\t\tconst cc = new EntryControlCCConfigurationSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tkeyCacheSize,\n\t\t\tkeyCacheTimeout,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\tprotected override get [SET_VALUE](): SetValueImplementation {\n\t\treturn async function(this: EntryControlCCAPI, { property }, value) {\n\t\t\tif (property !== \"keyCacheSize\" && property !== \"keyCacheTimeout\") {\n\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t\tif (typeof value !== \"number\") {\n\t\t\t\tthrowWrongValueType(\n\t\t\t\t\tthis.ccId,\n\t\t\t\t\tproperty,\n\t\t\t\t\t\"number\",\n\t\t\t\t\ttypeof value,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tlet keyCacheSize = value;\n\t\t\tlet keyCacheTimeout = 2;\n\t\t\tif (property === \"keyCacheTimeout\") {\n\t\t\t\tkeyCacheTimeout = value;\n\n\t\t\t\tconst oldKeyCacheSize = this.tryGetValueDB()?.getValue<number>(\n\t\t\t\t\tEntryControlCCValues.keyCacheSize.endpoint(\n\t\t\t\t\t\tthis.endpoint.index,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tif (oldKeyCacheSize == undefined) {\n\t\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t\t`The \"keyCacheTimeout\" property cannot be changed before the key cache size is known!`,\n\t\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tkeyCacheSize = oldKeyCacheSize;\n\t\t\t}\n\t\t\tconst result = await this.setConfiguration(\n\t\t\t\tkeyCacheSize,\n\t\t\t\tkeyCacheTimeout,\n\t\t\t);\n\n\t\t\t// Verify the change after a short delay, unless the command was supervised and successful\n\t\t\tif (this.isSinglecast() && !supervisedCommandSucceeded(result)) {\n\t\t\t\tthis.schedulePoll({ property }, value, { transition: \"fast\" });\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\t}\n\n\tprotected get [POLL_VALUE](): PollValueImplementation {\n\t\treturn async function(this: EntryControlCCAPI, { property }) {\n\t\t\tswitch (property) {\n\t\t\t\tcase \"keyCacheSize\":\n\t\t\t\tcase \"keyCacheTimeout\":\n\t\t\t\t\treturn (await this.getConfiguration())?.[property];\n\t\t\t}\n\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t};\n\t}\n}\n\n@commandClass(CommandClasses[\"Entry Control\"])\n@implementedVersion(1)\n@ccValues(EntryControlCCValues)\nexport class EntryControlCC extends CommandClass {\n\tdeclare ccCommand: EntryControlCommand;\n\n\tpublic determineRequiredCCInterviews(): readonly CommandClasses[] {\n\t\treturn [\n\t\t\t...super.determineRequiredCCInterviews(),\n\t\t\tCommandClasses.Association,\n\t\t\tCommandClasses[\"Multi Channel Association\"],\n\t\t\tCommandClasses[\"Association Group Information\"],\n\t\t];\n\t}\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Entry Control\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\t// If one Association group issues Entry Control notifications,\n\t\t// we must associate ourselves with that channel\n\t\ttry {\n\t\t\tawait ccUtils.assignLifelineIssueingCommand(\n\t\t\t\tctx,\n\t\t\t\tendpoint,\n\t\t\t\tthis.ccId,\n\t\t\t\tEntryControlCommand.Notification,\n\t\t\t);\n\t\t} catch {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: endpoint.index,\n\t\t\t\tmessage: `Configuring associations to receive ${\n\t\t\t\t\tgetCCName(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t)\n\t\t\t\t} commands failed!`,\n\t\t\t\tlevel: \"warn\",\n\t\t\t});\n\t\t}\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"requesting entry control supported keys...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\n\t\tconst supportedKeys = await api.getSupportedKeys();\n\t\tif (supportedKeys) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage:\n\t\t\t\t\t`received entry control supported keys: ${supportedKeys.toString()}`,\n\t\t\t\tdirection: \"inbound\",\n\t\t\t});\n\t\t}\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"requesting entry control supported events...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\n\t\tconst eventCapabilities = await api.getEventCapabilities();\n\t\tif (eventCapabilities) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: `received entry control supported keys:\ndata types: ${\n\t\t\t\t\teventCapabilities.supportedDataTypes\n\t\t\t\t\t\t.map((e) => EntryControlDataTypes[e])\n\t\t\t\t\t\t.toString()\n\t\t\t\t}\nevent types: ${\n\t\t\t\t\teventCapabilities.supportedEventTypes\n\t\t\t\t\t\t.map((e) => EntryControlEventTypes[e])\n\t\t\t\t\t\t.toString()\n\t\t\t\t}\nmin key cache size: ${eventCapabilities.minKeyCacheSize}\nmax key cache size: ${eventCapabilities.maxKeyCacheSize}\nmin key cache timeout: ${eventCapabilities.minKeyCacheTimeout} seconds\nmax key cache timeout: ${eventCapabilities.maxKeyCacheTimeout} seconds`,\n\t\t\t\tdirection: \"inbound\",\n\t\t\t});\n\t\t}\n\n\t\tawait this.refreshValues(ctx);\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n\n\tpublic async refreshValues(\n\t\tctx: RefreshValuesContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Entry Control\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"requesting entry control configuration...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\n\t\tconst conf = await api.getConfiguration();\n\t\tif (conf) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: `received entry control configuration:\nkey cache size: ${conf.keyCacheSize}\nkey cache timeout: ${conf.keyCacheTimeout} seconds`,\n\t\t\t\tdirection: \"inbound\",\n\t\t\t});\n\t\t}\n\t}\n}\n\n// @publicAPI\nexport interface EntryControlCCNotificationOptions {\n\tsequenceNumber: number;\n\tdataType: EntryControlDataTypes;\n\teventType: EntryControlEventTypes;\n\teventData?: string | Bytes;\n}\n\n@CCCommand(EntryControlCommand.Notification)\nexport class EntryControlCCNotification extends EntryControlCC {\n\tpublic constructor(\n\t\toptions: WithAddress<EntryControlCCNotificationOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.sequenceNumber = options.sequenceNumber;\n\t\tthis.dataType = options.dataType;\n\t\tthis.eventType = options.eventType;\n\t\tthis.eventData = options.eventData;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): EntryControlCCNotification {\n\t\tvalidatePayload(raw.payload.length >= 4);\n\t\tconst sequenceNumber = raw.payload[0];\n\t\tlet dataType: EntryControlDataTypes = raw.payload[1] & 0b11;\n\t\tconst eventType: EntryControlEventTypes = raw.payload[2];\n\t\tconst eventDataLength = raw.payload[3];\n\t\tvalidatePayload(eventDataLength >= 0 && eventDataLength <= 32);\n\t\tconst offset = 4;\n\t\tvalidatePayload(raw.payload.length >= offset + eventDataLength);\n\t\tlet eventData: string | Bytes | undefined;\n\t\tif (eventDataLength > 0) {\n\t\t\t// We shouldn't need to check this, since the specs are pretty clear which format to expect.\n\t\t\t// But as always - manufacturers don't care and send ASCII data with 0 bytes...\n\n\t\t\t// We also need to disable the strict validation for some devices to make them work\n\t\t\tconst noStrictValidation = !!ctx.getDeviceConfig?.(\n\t\t\t\tctx.sourceNodeId,\n\t\t\t)?.compat?.disableStrictEntryControlDataValidation;\n\n\t\t\teventData = Bytes.from(\n\t\t\t\traw.payload.subarray(offset, offset + eventDataLength),\n\t\t\t);\n\t\t\tswitch (dataType) {\n\t\t\t\tcase EntryControlDataTypes.Raw:\n\t\t\t\t\t// RAW 1 to 32 bytes of arbitrary binary data\n\t\t\t\t\tif (!noStrictValidation) {\n\t\t\t\t\t\tvalidatePayload(\n\t\t\t\t\t\t\teventDataLength >= 1 && eventDataLength <= 32,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase EntryControlDataTypes.ASCII:\n\t\t\t\t\t// ASCII 1 to 32 ASCII encoded characters. ASCII codes MUST be in the value range 0x00-0xF7.\n\t\t\t\t\t// The string MUST be padded with the value 0xFF to fit 16 byte blocks when sent in a notification.\n\t\t\t\t\tif (!noStrictValidation) {\n\t\t\t\t\t\tvalidatePayload(\n\t\t\t\t\t\t\teventDataLength === 16 || eventDataLength === 32,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// Trim 0xff padding bytes\n\t\t\t\t\tlet paddingStart = eventDataLength;\n\t\t\t\t\twhile (\n\t\t\t\t\t\tpaddingStart > 0\n\t\t\t\t\t\t&& eventData[paddingStart - 1] === 0xff\n\t\t\t\t\t) {\n\t\t\t\t\t\tpaddingStart--;\n\t\t\t\t\t}\n\t\t\t\t\teventData = eventData.subarray(0, paddingStart).toString(\n\t\t\t\t\t\t\"ascii\",\n\t\t\t\t\t);\n\n\t\t\t\t\tif (!noStrictValidation) {\n\t\t\t\t\t\tvalidatePayload(/^[\\u0000-\\u007f]+$/.test(eventData));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase EntryControlDataTypes.MD5:\n\t\t\t\t\t// MD5 16 byte binary data encoded as a MD5 hash value.\n\t\t\t\t\tif (!noStrictValidation) {\n\t\t\t\t\t\tvalidatePayload(eventDataLength === 16);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t} else {\n\t\t\tdataType = EntryControlDataTypes.None;\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsequenceNumber,\n\t\t\tdataType,\n\t\t\teventType,\n\t\t\teventData,\n\t\t});\n\t}\n\n\tpublic readonly sequenceNumber: number;\n\tpublic readonly dataType: EntryControlDataTypes;\n\tpublic readonly eventType: EntryControlEventTypes;\n\tpublic readonly eventData?: Uint8Array | string;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"sequence number\": this.sequenceNumber,\n\t\t\t\"data type\": this.dataType,\n\t\t\t\"event type\": this.eventType,\n\t\t};\n\t\tif (this.eventData) {\n\t\t\tswitch (this.eventType) {\n\t\t\t\tcase EntryControlEventTypes.CachedKeys:\n\t\t\t\tcase EntryControlEventTypes.Enter:\n\t\t\t\t\t// The event data is likely the user's PIN code, hide it from logs\n\t\t\t\t\tmessage[\"event data\"] = \"*\".repeat(this.eventData.length);\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tmessage[\"event data\"] = typeof this.eventData === \"string\"\n\t\t\t\t\t\t? this.eventData\n\t\t\t\t\t\t: buffer2hex(this.eventData);\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface EntryControlCCKeySupportedReportOptions {\n\tsupportedKeys: number[];\n}\n\n@CCCommand(EntryControlCommand.KeySupportedReport)\n@ccValueProperty(\"supportedKeys\", EntryControlCCValues.supportedKeys)\nexport class EntryControlCCKeySupportedReport extends EntryControlCC {\n\tpublic constructor(\n\t\toptions: WithAddress<EntryControlCCKeySupportedReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.supportedKeys = options.supportedKeys;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): EntryControlCCKeySupportedReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst length = raw.payload[0];\n\t\tvalidatePayload(raw.payload.length >= 1 + length);\n\t\tconst supportedKeys = parseBitMask(\n\t\t\traw.payload.subarray(1, 1 + length),\n\t\t\t0,\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsupportedKeys,\n\t\t});\n\t}\n\n\tpublic readonly supportedKeys: readonly number[];\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: { \"supported keys\": this.supportedKeys.toString() },\n\t\t};\n\t}\n}\n\n@CCCommand(EntryControlCommand.KeySupportedGet)\n@expectedCCResponse(EntryControlCCKeySupportedReport)\nexport class EntryControlCCKeySupportedGet extends EntryControlCC {}\n\n// @publicAPI\nexport interface EntryControlCCEventSupportedReportOptions {\n\tsupportedDataTypes: EntryControlDataTypes[];\n\tsupportedEventTypes: EntryControlEventTypes[];\n\tminKeyCacheSize: number;\n\tmaxKeyCacheSize: number;\n\tminKeyCacheTimeout: number;\n\tmaxKeyCacheTimeout: number;\n}\n\n@CCCommand(EntryControlCommand.EventSupportedReport)\n@ccValueProperty(\"supportedDataTypes\", EntryControlCCValues.supportedDataTypes)\n@ccValueProperty(\n\t\"supportedEventTypes\",\n\tEntryControlCCValues.supportedEventTypes,\n)\nexport class EntryControlCCEventSupportedReport extends EntryControlCC {\n\tpublic constructor(\n\t\toptions: WithAddress<EntryControlCCEventSupportedReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.supportedDataTypes = options.supportedDataTypes;\n\t\tthis.supportedEventTypes = options.supportedEventTypes;\n\t\tthis.minKeyCacheSize = options.minKeyCacheSize;\n\t\tthis.maxKeyCacheSize = options.maxKeyCacheSize;\n\t\tthis.minKeyCacheTimeout = options.minKeyCacheTimeout;\n\t\tthis.maxKeyCacheTimeout = options.maxKeyCacheTimeout;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): EntryControlCCEventSupportedReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst dataTypeLength = raw.payload[0] & 0b11;\n\t\tlet offset = 1;\n\t\tvalidatePayload(raw.payload.length >= offset + dataTypeLength);\n\t\tconst supportedDataTypes: EntryControlDataTypes[] = parseBitMask(\n\t\t\traw.payload.subarray(offset, offset + dataTypeLength),\n\t\t\tEntryControlDataTypes.None,\n\t\t);\n\t\toffset += dataTypeLength;\n\t\tvalidatePayload(raw.payload.length >= offset + 1);\n\t\tconst eventTypeLength = raw.payload[offset] & 0b11111;\n\t\toffset += 1;\n\t\tvalidatePayload(raw.payload.length >= offset + eventTypeLength);\n\t\tconst supportedEventTypes: EntryControlEventTypes[] = parseBitMask(\n\t\t\traw.payload.subarray(offset, offset + eventTypeLength),\n\t\t\tEntryControlEventTypes.Caching,\n\t\t);\n\t\toffset += eventTypeLength;\n\t\tvalidatePayload(raw.payload.length >= offset + 4);\n\t\tconst minKeyCacheSize = raw.payload[offset];\n\t\tvalidatePayload(\n\t\t\tminKeyCacheSize >= 1 && minKeyCacheSize <= 32,\n\t\t);\n\t\tconst maxKeyCacheSize = raw.payload[offset + 1];\n\t\tvalidatePayload(\n\t\t\tmaxKeyCacheSize >= minKeyCacheSize\n\t\t\t\t&& maxKeyCacheSize <= 32,\n\t\t);\n\t\tconst minKeyCacheTimeout = raw.payload[offset + 2];\n\t\tconst maxKeyCacheTimeout = raw.payload[offset + 3];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsupportedDataTypes,\n\t\t\tsupportedEventTypes,\n\t\t\tminKeyCacheSize,\n\t\t\tmaxKeyCacheSize,\n\t\t\tminKeyCacheTimeout,\n\t\t\tmaxKeyCacheTimeout,\n\t\t});\n\t}\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\t// Store min/max cache size and timeout as metadata\n\t\tconst keyCacheSizeValue = EntryControlCCValues.keyCacheSize;\n\t\tthis.setMetadata(ctx, keyCacheSizeValue, {\n\t\t\t...keyCacheSizeValue.meta,\n\t\t\tmin: this.minKeyCacheSize,\n\t\t\tmax: this.maxKeyCacheSize,\n\t\t});\n\n\t\tconst keyCacheTimeoutValue = EntryControlCCValues.keyCacheTimeout;\n\t\tthis.setMetadata(ctx, keyCacheTimeoutValue, {\n\t\t\t...keyCacheTimeoutValue.meta,\n\t\t\tmin: this.minKeyCacheTimeout,\n\t\t\tmax: this.maxKeyCacheTimeout,\n\t\t});\n\n\t\treturn true;\n\t}\n\n\tpublic readonly supportedDataTypes: readonly EntryControlDataTypes[];\n\n\tpublic readonly supportedEventTypes: readonly EntryControlEventTypes[];\n\n\tpublic readonly minKeyCacheSize: number;\n\tpublic readonly maxKeyCacheSize: number;\n\tpublic readonly minKeyCacheTimeout: number;\n\tpublic readonly maxKeyCacheTimeout: number;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"supported data types\": this.supportedDataTypes\n\t\t\t\t\t.map((dt) => EntryControlDataTypes[dt])\n\t\t\t\t\t.toString(),\n\t\t\t\t\"supported event types\": this.supportedEventTypes\n\t\t\t\t\t.map((et) => EntryControlEventTypes[et])\n\t\t\t\t\t.toString(),\n\t\t\t\t\"min key cache size\": this.minKeyCacheSize,\n\t\t\t\t\"max key cache size\": this.maxKeyCacheSize,\n\t\t\t\t\"min key cache timeout\": this.minKeyCacheTimeout,\n\t\t\t\t\"max key cache timeout\": this.maxKeyCacheTimeout,\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(EntryControlCommand.EventSupportedGet)\n@expectedCCResponse(EntryControlCCEventSupportedReport)\nexport class EntryControlCCEventSupportedGet extends EntryControlCC {}\n\n// @publicAPI\nexport interface EntryControlCCConfigurationReportOptions {\n\tkeyCacheSize: number;\n\tkeyCacheTimeout: number;\n}\n\n@CCCommand(EntryControlCommand.ConfigurationReport)\n@ccValueProperty(\"keyCacheSize\", EntryControlCCValues.keyCacheSize)\n@ccValueProperty(\"keyCacheTimeout\", EntryControlCCValues.keyCacheTimeout)\nexport class EntryControlCCConfigurationReport extends EntryControlCC {\n\tpublic constructor(\n\t\toptions: WithAddress<EntryControlCCConfigurationReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.keyCacheSize = options.keyCacheSize;\n\t\tthis.keyCacheTimeout = options.keyCacheTimeout;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): EntryControlCCConfigurationReport {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst keyCacheSize = raw.payload[0];\n\t\tvalidatePayload(keyCacheSize >= 1 && keyCacheSize <= 32);\n\t\tconst keyCacheTimeout = raw.payload[1];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tkeyCacheSize,\n\t\t\tkeyCacheTimeout,\n\t\t});\n\t}\n\n\tpublic readonly keyCacheSize: number;\n\n\tpublic readonly keyCacheTimeout: number;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"key cache size\": this.keyCacheSize,\n\t\t\t\t\"key cache timeout\": this.keyCacheTimeout,\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(EntryControlCommand.ConfigurationGet)\n@expectedCCResponse(EntryControlCCConfigurationReport)\nexport class EntryControlCCConfigurationGet extends EntryControlCC {}\n\n// @publicAPI\nexport interface EntryControlCCConfigurationSetOptions {\n\tkeyCacheSize: number;\n\tkeyCacheTimeout: number;\n}\n\n@CCCommand(EntryControlCommand.ConfigurationSet)\n@useSupervision()\nexport class EntryControlCCConfigurationSet extends EntryControlCC {\n\tpublic constructor(\n\t\toptions: WithAddress<EntryControlCCConfigurationSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.keyCacheSize = options.keyCacheSize;\n\t\tthis.keyCacheTimeout = options.keyCacheTimeout;\n\t}\n\n\tpublic static from(\n\t\t_raw: CCRaw,\n\t\t_ctx: CCParsingContext,\n\t): EntryControlCCConfigurationSet {\n\t\t// TODO: Deserialize payload\n\t\tthrow new ZWaveError(\n\t\t\t`${this.name}: deserialization not implemented`,\n\t\t\tZWaveErrorCodes.Deserialization_NotImplemented,\n\t\t);\n\n\t\t// return new EntryControlCCConfigurationSet({\n\t\t// \tnodeId: ctx.sourceNodeId,\n\t\t// });\n\t}\n\n\tpublic readonly keyCacheSize: number;\n\tpublic readonly keyCacheTimeout: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.keyCacheSize, this.keyCacheTimeout]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"key cache size\": this.keyCacheSize,\n\t\t\t\t\"key cache timeout\": this.keyCacheTimeout,\n\t\t\t},\n\t\t};\n\t}\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { CCEncodingContext, CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\tCommandClasses,\n\ttype GetValueDB,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype MessageRecord,\n\ttype SupervisionResult,\n\tValueMetadata,\n\ttype WithAddress,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tgetCCName,\n\tparseBitMask,\n\tsupervisedCommandSucceeded,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport { Bytes, type BytesView, buffer2hex, pick } from \"@zwave-js/shared\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport {\n\tCCAPI,\n\tPOLL_VALUE,\n\ttype PollValueImplementation,\n\tSET_VALUE,\n\ttype SetValueImplementation,\n\tthrowUnsupportedProperty,\n\tthrowWrongValueType,\n} from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype PersistValuesContext,\n\ttype RefreshValuesContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport {\n\tEntryControlCommand,\n\tEntryControlDataTypes,\n\tEntryControlEventTypes,\n} from \"../lib/_Types.js\";\nimport * as ccUtils from \"../lib/utils.js\";\n\nexport const EntryControlCCValues = V.defineCCValues(\n\tCommandClasses[\"Entry Control\"],\n\t{\n\t\t...V.staticProperty(\n\t\t\t\"keyCacheSize\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.UInt8,\n\t\t\t\tlabel: \"Key cache size\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"Number of character that must be stored before sending\",\n\t\t\t\tmin: 1,\n\t\t\t\tmax: 32,\n\t\t\t} as const,\n\t\t),\n\t\t...V.staticProperty(\n\t\t\t\"keyCacheTimeout\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.UInt8,\n\t\t\t\tlabel: \"Key cache timeout\",\n\t\t\t\tunit: \"seconds\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"How long the key cache must wait for additional characters\",\n\t\t\t\tmin: 1,\n\t\t\t\tmax: 10,\n\t\t\t} as const,\n\t\t),\n\t\t...V.staticProperty(\"supportedDataTypes\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.staticProperty(\"supportedEventTypes\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.staticProperty(\"supportedKeys\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t},\n);\n\n@API(CommandClasses[\"Entry Control\"])\nexport class EntryControlCCAPI extends CCAPI {\n\tpublic supportsCommand(cmd: EntryControlCommand): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase EntryControlCommand.KeySupportedGet:\n\t\t\tcase EntryControlCommand.EventSupportedGet:\n\t\t\tcase EntryControlCommand.ConfigurationGet:\n\t\t\t\treturn this.isSinglecast();\n\t\t\tcase EntryControlCommand.ConfigurationSet:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getSupportedKeys() {\n\t\tthis.assertSupportsCommand(\n\t\t\tEntryControlCommand,\n\t\t\tEntryControlCommand.KeySupportedGet,\n\t\t);\n\n\t\tconst cc = new EntryControlCCKeySupportedGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tEntryControlCCKeySupportedReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.supportedKeys;\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getEventCapabilities() {\n\t\tthis.assertSupportsCommand(\n\t\t\tEntryControlCommand,\n\t\t\tEntryControlCommand.EventSupportedGet,\n\t\t);\n\n\t\tconst cc = new EntryControlCCEventSupportedGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tEntryControlCCEventSupportedReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"supportedDataTypes\",\n\t\t\t\t\"supportedEventTypes\",\n\t\t\t\t\"minKeyCacheSize\",\n\t\t\t\t\"maxKeyCacheSize\",\n\t\t\t\t\"minKeyCacheTimeout\",\n\t\t\t\t\"maxKeyCacheTimeout\",\n\t\t\t]);\n\t\t}\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getConfiguration() {\n\t\tthis.assertSupportsCommand(\n\t\t\tEntryControlCommand,\n\t\t\tEntryControlCommand.ConfigurationGet,\n\t\t);\n\n\t\tconst cc = new EntryControlCCConfigurationGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tEntryControlCCConfigurationReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\"keyCacheSize\", \"keyCacheTimeout\"]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async setConfiguration(\n\t\tkeyCacheSize: number,\n\t\tkeyCacheTimeout: number,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tEntryControlCommand,\n\t\t\tEntryControlCommand.ConfigurationGet,\n\t\t);\n\n\t\tconst cc = new EntryControlCCConfigurationSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tkeyCacheSize,\n\t\t\tkeyCacheTimeout,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\tprotected override get [SET_VALUE](): SetValueImplementation {\n\t\treturn async function(this: EntryControlCCAPI, { property }, value) {\n\t\t\tif (property !== \"keyCacheSize\" && property !== \"keyCacheTimeout\") {\n\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t\tif (typeof value !== \"number\") {\n\t\t\t\tthrowWrongValueType(\n\t\t\t\t\tthis.ccId,\n\t\t\t\t\tproperty,\n\t\t\t\t\t\"number\",\n\t\t\t\t\ttypeof value,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tlet keyCacheSize = value;\n\t\t\tlet keyCacheTimeout = 2;\n\t\t\tif (property === \"keyCacheTimeout\") {\n\t\t\t\tkeyCacheTimeout = value;\n\n\t\t\t\tconst oldKeyCacheSize = this.tryGetValueDB()?.getValue<number>(\n\t\t\t\t\tEntryControlCCValues.keyCacheSize.endpoint(\n\t\t\t\t\t\tthis.endpoint.index,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tif (oldKeyCacheSize == undefined) {\n\t\t\t\t\tthrow new ZWaveError(\n\t\t\t\t\t\t`The \"keyCacheTimeout\" property cannot be changed before the key cache size is known!`,\n\t\t\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tkeyCacheSize = oldKeyCacheSize;\n\t\t\t}\n\t\t\tconst result = await this.setConfiguration(\n\t\t\t\tkeyCacheSize,\n\t\t\t\tkeyCacheTimeout,\n\t\t\t);\n\n\t\t\t// Verify the change after a short delay, unless the command was supervised and successful\n\t\t\tif (this.isSinglecast() && !supervisedCommandSucceeded(result)) {\n\t\t\t\tthis.schedulePoll({ property }, value, { transition: \"fast\" });\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\t}\n\n\tprotected get [POLL_VALUE](): PollValueImplementation {\n\t\treturn async function(this: EntryControlCCAPI, { property }) {\n\t\t\tswitch (property) {\n\t\t\t\tcase \"keyCacheSize\":\n\t\t\t\tcase \"keyCacheTimeout\":\n\t\t\t\t\treturn (await this.getConfiguration())?.[property];\n\t\t\t}\n\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t};\n\t}\n}\n\n@commandClass(CommandClasses[\"Entry Control\"])\n@implementedVersion(1)\n@ccValues(EntryControlCCValues)\nexport class EntryControlCC extends CommandClass {\n\tdeclare ccCommand: EntryControlCommand;\n\n\tpublic determineRequiredCCInterviews(): readonly CommandClasses[] {\n\t\treturn [\n\t\t\t...super.determineRequiredCCInterviews(),\n\t\t\tCommandClasses.Association,\n\t\t\tCommandClasses[\"Multi Channel Association\"],\n\t\t\tCommandClasses[\"Association Group Information\"],\n\t\t];\n\t}\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Entry Control\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\t// If one Association group issues Entry Control notifications,\n\t\t// we must associate ourselves with that channel\n\t\ttry {\n\t\t\tawait ccUtils.assignLifelineIssueingCommand(\n\t\t\t\tctx,\n\t\t\t\tendpoint,\n\t\t\t\tthis.ccId,\n\t\t\t\tEntryControlCommand.Notification,\n\t\t\t);\n\t\t} catch {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: endpoint.index,\n\t\t\t\tmessage: `Configuring associations to receive ${\n\t\t\t\t\tgetCCName(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t)\n\t\t\t\t} commands failed!`,\n\t\t\t\tlevel: \"warn\",\n\t\t\t});\n\t\t}\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"requesting entry control supported keys...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\n\t\tconst supportedKeys = await api.getSupportedKeys();\n\t\tif (supportedKeys) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage:\n\t\t\t\t\t`received entry control supported keys: ${supportedKeys.toString()}`,\n\t\t\t\tdirection: \"inbound\",\n\t\t\t});\n\t\t}\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"requesting entry control supported events...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\n\t\tconst eventCapabilities = await api.getEventCapabilities();\n\t\tif (eventCapabilities) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: `received entry control supported keys:\ndata types: ${\n\t\t\t\t\teventCapabilities.supportedDataTypes\n\t\t\t\t\t\t.map((e) => EntryControlDataTypes[e])\n\t\t\t\t\t\t.toString()\n\t\t\t\t}\nevent types: ${\n\t\t\t\t\teventCapabilities.supportedEventTypes\n\t\t\t\t\t\t.map((e) => EntryControlEventTypes[e])\n\t\t\t\t\t\t.toString()\n\t\t\t\t}\nmin key cache size: ${eventCapabilities.minKeyCacheSize}\nmax key cache size: ${eventCapabilities.maxKeyCacheSize}\nmin key cache timeout: ${eventCapabilities.minKeyCacheTimeout} seconds\nmax key cache timeout: ${eventCapabilities.maxKeyCacheTimeout} seconds`,\n\t\t\t\tdirection: \"inbound\",\n\t\t\t});\n\t\t}\n\n\t\tawait this.refreshValues(ctx);\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n\n\tpublic async refreshValues(\n\t\tctx: RefreshValuesContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Entry Control\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"requesting entry control configuration...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\n\t\tconst conf = await api.getConfiguration();\n\t\tif (conf) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: `received entry control configuration:\nkey cache size: ${conf.keyCacheSize}\nkey cache timeout: ${conf.keyCacheTimeout} seconds`,\n\t\t\t\tdirection: \"inbound\",\n\t\t\t});\n\t\t}\n\t}\n}\n\n// @publicAPI\nexport interface EntryControlCCNotificationOptions {\n\tsequenceNumber: number;\n\tdataType: EntryControlDataTypes;\n\teventType: EntryControlEventTypes;\n\teventData?: string | Bytes;\n}\n\n@CCCommand(EntryControlCommand.Notification)\nexport class EntryControlCCNotification extends EntryControlCC {\n\tpublic constructor(\n\t\toptions: WithAddress<EntryControlCCNotificationOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.sequenceNumber = options.sequenceNumber;\n\t\tthis.dataType = options.dataType;\n\t\tthis.eventType = options.eventType;\n\t\tthis.eventData = options.eventData;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): EntryControlCCNotification {\n\t\tvalidatePayload(raw.payload.length >= 4);\n\t\tconst sequenceNumber = raw.payload[0];\n\t\tlet dataType: EntryControlDataTypes = raw.payload[1] & 0b11;\n\t\tconst eventType: EntryControlEventTypes = raw.payload[2];\n\t\tconst eventDataLength = raw.payload[3];\n\t\tvalidatePayload(eventDataLength >= 0 && eventDataLength <= 32);\n\t\tconst offset = 4;\n\t\tvalidatePayload(raw.payload.length >= offset + eventDataLength);\n\t\tlet eventData: string | Bytes | undefined;\n\t\tif (eventDataLength > 0) {\n\t\t\t// We shouldn't need to check this, since the specs are pretty clear which format to expect.\n\t\t\t// But as always - manufacturers don't care and send ASCII data with 0 bytes...\n\n\t\t\t// We also need to disable the strict validation for some devices to make them work\n\t\t\tconst noStrictValidation = !!ctx.getDeviceConfig?.(\n\t\t\t\tctx.sourceNodeId,\n\t\t\t)?.compat?.disableStrictEntryControlDataValidation;\n\n\t\t\teventData = Bytes.from(\n\t\t\t\traw.payload.subarray(offset, offset + eventDataLength),\n\t\t\t);\n\t\t\tswitch (dataType) {\n\t\t\t\tcase EntryControlDataTypes.Raw:\n\t\t\t\t\t// RAW 1 to 32 bytes of arbitrary binary data\n\t\t\t\t\tif (!noStrictValidation) {\n\t\t\t\t\t\tvalidatePayload(\n\t\t\t\t\t\t\teventDataLength >= 1 && eventDataLength <= 32,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase EntryControlDataTypes.ASCII:\n\t\t\t\t\t// ASCII 1 to 32 ASCII encoded characters. ASCII codes MUST be in the value range 0x00-0xF7.\n\t\t\t\t\t// The string MUST be padded with the value 0xFF to fit 16 byte blocks when sent in a notification.\n\t\t\t\t\tif (!noStrictValidation) {\n\t\t\t\t\t\tvalidatePayload(\n\t\t\t\t\t\t\teventDataLength === 16 || eventDataLength === 32,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\t// Trim 0xff padding bytes\n\t\t\t\t\tlet paddingStart = eventDataLength;\n\t\t\t\t\twhile (\n\t\t\t\t\t\tpaddingStart > 0\n\t\t\t\t\t\t&& eventData[paddingStart - 1] === 0xff\n\t\t\t\t\t) {\n\t\t\t\t\t\tpaddingStart--;\n\t\t\t\t\t}\n\t\t\t\t\teventData = eventData.subarray(0, paddingStart).toString(\n\t\t\t\t\t\t\"ascii\",\n\t\t\t\t\t);\n\n\t\t\t\t\tif (!noStrictValidation) {\n\t\t\t\t\t\tvalidatePayload(/^[\\u0000-\\u007f]+$/.test(eventData));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase EntryControlDataTypes.MD5:\n\t\t\t\t\t// MD5 16 byte binary data encoded as a MD5 hash value.\n\t\t\t\t\tif (!noStrictValidation) {\n\t\t\t\t\t\tvalidatePayload(eventDataLength === 16);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t} else {\n\t\t\tdataType = EntryControlDataTypes.None;\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsequenceNumber,\n\t\t\tdataType,\n\t\t\teventType,\n\t\t\teventData,\n\t\t});\n\t}\n\n\tpublic readonly sequenceNumber: number;\n\tpublic readonly dataType: EntryControlDataTypes;\n\tpublic readonly eventType: EntryControlEventTypes;\n\tpublic readonly eventData?: BytesView | string;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"sequence number\": this.sequenceNumber,\n\t\t\t\"data type\": this.dataType,\n\t\t\t\"event type\": this.eventType,\n\t\t};\n\t\tif (this.eventData) {\n\t\t\tswitch (this.eventType) {\n\t\t\t\tcase EntryControlEventTypes.CachedKeys:\n\t\t\t\tcase EntryControlEventTypes.Enter:\n\t\t\t\t\t// The event data is likely the user's PIN code, hide it from logs\n\t\t\t\t\tmessage[\"event data\"] = \"*\".repeat(this.eventData.length);\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tmessage[\"event data\"] = typeof this.eventData === \"string\"\n\t\t\t\t\t\t? this.eventData\n\t\t\t\t\t\t: buffer2hex(this.eventData);\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface EntryControlCCKeySupportedReportOptions {\n\tsupportedKeys: number[];\n}\n\n@CCCommand(EntryControlCommand.KeySupportedReport)\n@ccValueProperty(\"supportedKeys\", EntryControlCCValues.supportedKeys)\nexport class EntryControlCCKeySupportedReport extends EntryControlCC {\n\tpublic constructor(\n\t\toptions: WithAddress<EntryControlCCKeySupportedReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.supportedKeys = options.supportedKeys;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): EntryControlCCKeySupportedReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst length = raw.payload[0];\n\t\tvalidatePayload(raw.payload.length >= 1 + length);\n\t\tconst supportedKeys = parseBitMask(\n\t\t\traw.payload.subarray(1, 1 + length),\n\t\t\t0,\n\t\t);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsupportedKeys,\n\t\t});\n\t}\n\n\tpublic readonly supportedKeys: readonly number[];\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: { \"supported keys\": this.supportedKeys.toString() },\n\t\t};\n\t}\n}\n\n@CCCommand(EntryControlCommand.KeySupportedGet)\n@expectedCCResponse(EntryControlCCKeySupportedReport)\nexport class EntryControlCCKeySupportedGet extends EntryControlCC {}\n\n// @publicAPI\nexport interface EntryControlCCEventSupportedReportOptions {\n\tsupportedDataTypes: EntryControlDataTypes[];\n\tsupportedEventTypes: EntryControlEventTypes[];\n\tminKeyCacheSize: number;\n\tmaxKeyCacheSize: number;\n\tminKeyCacheTimeout: number;\n\tmaxKeyCacheTimeout: number;\n}\n\n@CCCommand(EntryControlCommand.EventSupportedReport)\n@ccValueProperty(\"supportedDataTypes\", EntryControlCCValues.supportedDataTypes)\n@ccValueProperty(\n\t\"supportedEventTypes\",\n\tEntryControlCCValues.supportedEventTypes,\n)\nexport class EntryControlCCEventSupportedReport extends EntryControlCC {\n\tpublic constructor(\n\t\toptions: WithAddress<EntryControlCCEventSupportedReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.supportedDataTypes = options.supportedDataTypes;\n\t\tthis.supportedEventTypes = options.supportedEventTypes;\n\t\tthis.minKeyCacheSize = options.minKeyCacheSize;\n\t\tthis.maxKeyCacheSize = options.maxKeyCacheSize;\n\t\tthis.minKeyCacheTimeout = options.minKeyCacheTimeout;\n\t\tthis.maxKeyCacheTimeout = options.maxKeyCacheTimeout;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): EntryControlCCEventSupportedReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst dataTypeLength = raw.payload[0] & 0b11;\n\t\tlet offset = 1;\n\t\tvalidatePayload(raw.payload.length >= offset + dataTypeLength);\n\t\tconst supportedDataTypes: EntryControlDataTypes[] = parseBitMask(\n\t\t\traw.payload.subarray(offset, offset + dataTypeLength),\n\t\t\tEntryControlDataTypes.None,\n\t\t);\n\t\toffset += dataTypeLength;\n\t\tvalidatePayload(raw.payload.length >= offset + 1);\n\t\tconst eventTypeLength = raw.payload[offset] & 0b11111;\n\t\toffset += 1;\n\t\tvalidatePayload(raw.payload.length >= offset + eventTypeLength);\n\t\tconst supportedEventTypes: EntryControlEventTypes[] = parseBitMask(\n\t\t\traw.payload.subarray(offset, offset + eventTypeLength),\n\t\t\tEntryControlEventTypes.Caching,\n\t\t);\n\t\toffset += eventTypeLength;\n\t\tvalidatePayload(raw.payload.length >= offset + 4);\n\t\tconst minKeyCacheSize = raw.payload[offset];\n\t\tvalidatePayload(\n\t\t\tminKeyCacheSize >= 1 && minKeyCacheSize <= 32,\n\t\t);\n\t\tconst maxKeyCacheSize = raw.payload[offset + 1];\n\t\tvalidatePayload(\n\t\t\tmaxKeyCacheSize >= minKeyCacheSize\n\t\t\t\t&& maxKeyCacheSize <= 32,\n\t\t);\n\t\tconst minKeyCacheTimeout = raw.payload[offset + 2];\n\t\tconst maxKeyCacheTimeout = raw.payload[offset + 3];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsupportedDataTypes,\n\t\t\tsupportedEventTypes,\n\t\t\tminKeyCacheSize,\n\t\t\tmaxKeyCacheSize,\n\t\t\tminKeyCacheTimeout,\n\t\t\tmaxKeyCacheTimeout,\n\t\t});\n\t}\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\t// Store min/max cache size and timeout as metadata\n\t\tconst keyCacheSizeValue = EntryControlCCValues.keyCacheSize;\n\t\tthis.setMetadata(ctx, keyCacheSizeValue, {\n\t\t\t...keyCacheSizeValue.meta,\n\t\t\tmin: this.minKeyCacheSize,\n\t\t\tmax: this.maxKeyCacheSize,\n\t\t});\n\n\t\tconst keyCacheTimeoutValue = EntryControlCCValues.keyCacheTimeout;\n\t\tthis.setMetadata(ctx, keyCacheTimeoutValue, {\n\t\t\t...keyCacheTimeoutValue.meta,\n\t\t\tmin: this.minKeyCacheTimeout,\n\t\t\tmax: this.maxKeyCacheTimeout,\n\t\t});\n\n\t\treturn true;\n\t}\n\n\tpublic readonly supportedDataTypes: readonly EntryControlDataTypes[];\n\n\tpublic readonly supportedEventTypes: readonly EntryControlEventTypes[];\n\n\tpublic readonly minKeyCacheSize: number;\n\tpublic readonly maxKeyCacheSize: number;\n\tpublic readonly minKeyCacheTimeout: number;\n\tpublic readonly maxKeyCacheTimeout: number;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"supported data types\": this.supportedDataTypes\n\t\t\t\t\t.map((dt) => EntryControlDataTypes[dt])\n\t\t\t\t\t.toString(),\n\t\t\t\t\"supported event types\": this.supportedEventTypes\n\t\t\t\t\t.map((et) => EntryControlEventTypes[et])\n\t\t\t\t\t.toString(),\n\t\t\t\t\"min key cache size\": this.minKeyCacheSize,\n\t\t\t\t\"max key cache size\": this.maxKeyCacheSize,\n\t\t\t\t\"min key cache timeout\": this.minKeyCacheTimeout,\n\t\t\t\t\"max key cache timeout\": this.maxKeyCacheTimeout,\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(EntryControlCommand.EventSupportedGet)\n@expectedCCResponse(EntryControlCCEventSupportedReport)\nexport class EntryControlCCEventSupportedGet extends EntryControlCC {}\n\n// @publicAPI\nexport interface EntryControlCCConfigurationReportOptions {\n\tkeyCacheSize: number;\n\tkeyCacheTimeout: number;\n}\n\n@CCCommand(EntryControlCommand.ConfigurationReport)\n@ccValueProperty(\"keyCacheSize\", EntryControlCCValues.keyCacheSize)\n@ccValueProperty(\"keyCacheTimeout\", EntryControlCCValues.keyCacheTimeout)\nexport class EntryControlCCConfigurationReport extends EntryControlCC {\n\tpublic constructor(\n\t\toptions: WithAddress<EntryControlCCConfigurationReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.keyCacheSize = options.keyCacheSize;\n\t\tthis.keyCacheTimeout = options.keyCacheTimeout;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): EntryControlCCConfigurationReport {\n\t\tvalidatePayload(raw.payload.length >= 2);\n\t\tconst keyCacheSize = raw.payload[0];\n\t\tvalidatePayload(keyCacheSize >= 1 && keyCacheSize <= 32);\n\t\tconst keyCacheTimeout = raw.payload[1];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tkeyCacheSize,\n\t\t\tkeyCacheTimeout,\n\t\t});\n\t}\n\n\tpublic readonly keyCacheSize: number;\n\n\tpublic readonly keyCacheTimeout: number;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"key cache size\": this.keyCacheSize,\n\t\t\t\t\"key cache timeout\": this.keyCacheTimeout,\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(EntryControlCommand.ConfigurationGet)\n@expectedCCResponse(EntryControlCCConfigurationReport)\nexport class EntryControlCCConfigurationGet extends EntryControlCC {}\n\n// @publicAPI\nexport interface EntryControlCCConfigurationSetOptions {\n\tkeyCacheSize: number;\n\tkeyCacheTimeout: number;\n}\n\n@CCCommand(EntryControlCommand.ConfigurationSet)\n@useSupervision()\nexport class EntryControlCCConfigurationSet extends EntryControlCC {\n\tpublic constructor(\n\t\toptions: WithAddress<EntryControlCCConfigurationSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.keyCacheSize = options.keyCacheSize;\n\t\tthis.keyCacheTimeout = options.keyCacheTimeout;\n\t}\n\n\tpublic static from(\n\t\t_raw: CCRaw,\n\t\t_ctx: CCParsingContext,\n\t): EntryControlCCConfigurationSet {\n\t\t// TODO: Deserialize payload\n\t\tthrow new ZWaveError(\n\t\t\t`${this.name}: deserialization not implemented`,\n\t\t\tZWaveErrorCodes.Deserialization_NotImplemented,\n\t\t);\n\n\t\t// return new EntryControlCCConfigurationSet({\n\t\t// \tnodeId: ctx.sourceNodeId,\n\t\t// });\n\t}\n\n\tpublic readonly keyCacheSize: number;\n\tpublic readonly keyCacheTimeout: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.keyCacheSize, this.keyCacheTimeout]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"key cache size\": this.keyCacheSize,\n\t\t\t\t\"key cache timeout\": this.keyCacheTimeout,\n\t\t\t},\n\t\t};\n\t}\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,6 +1,6 @@
1
1
  import type { CCEncodingContext, CCParsingContext } from "@zwave-js/cc";
2
2
  import { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, type WithAddress } from "@zwave-js/core";
3
- import { type AllOrNone, Bytes } from "@zwave-js/shared";
3
+ import { type AllOrNone, Bytes, type BytesView } from "@zwave-js/shared";
4
4
  import { PhysicalCCAPI } from "../lib/API.js";
5
5
  import { type CCRaw, CommandClass, type InterviewContext } from "../lib/CommandClass.js";
6
6
  import { FirmwareDownloadStatus, FirmwareUpdateActivationStatus, type FirmwareUpdateMetaData, FirmwareUpdateMetaDataCommand, FirmwareUpdateRequestStatus, FirmwareUpdateStatus } from "../lib/_Types.js";
@@ -180,7 +180,7 @@ export declare class FirmwareUpdateMetaDataCCAPI extends PhysicalCCAPI {
180
180
  /**
181
181
  * Sends a fragment of the new firmware to the device
182
182
  */
183
- sendFirmwareFragment(fragmentNumber: number, isLastFragment: boolean, data: Uint8Array): Promise<void>;
183
+ sendFirmwareFragment(fragmentNumber: number, isLastFragment: boolean, data: BytesView): Promise<void>;
184
184
  /** Activates a previously transferred firmware image */
185
185
  activateFirmware(options: FirmwareUpdateMetaDataCCActivationSetOptions): Promise<MaybeNotKnown<FirmwareUpdateActivationStatus>>;
186
186
  }
@@ -277,14 +277,14 @@ export declare class FirmwareUpdateMetaDataCCGet extends FirmwareUpdateMetaDataC
277
277
  export interface FirmwareUpdateMetaDataCCReportOptions {
278
278
  isLast: boolean;
279
279
  reportNumber: number;
280
- firmwareData: Uint8Array;
280
+ firmwareData: BytesView;
281
281
  }
282
282
  export declare class FirmwareUpdateMetaDataCCReport extends FirmwareUpdateMetaDataCC {
283
283
  constructor(options: WithAddress<FirmwareUpdateMetaDataCCReportOptions>);
284
284
  static from(_raw: CCRaw, _ctx: CCParsingContext): FirmwareUpdateMetaDataCCReport;
285
285
  isLast: boolean;
286
286
  reportNumber: number;
287
- firmwareData: Uint8Array;
287
+ firmwareData: BytesView;
288
288
  serialize(ctx: CCEncodingContext): Promise<Bytes>;
289
289
  toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry;
290
290
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cc/FirmwareUpdateMetaDataCC.ts"],
4
- "sourcesContent": ["import type { CCEncodingContext, CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\tCRC16_CCITT,\n\tCommandClasses,\n\ttype GetValueDB,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype MessageRecord,\n\ttype WithAddress,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport {\n\ttype AllOrNone,\n\tBytes,\n\tgetEnumMemberName,\n\tnum2hex,\n\tpick,\n} from \"@zwave-js/shared\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { CCAPI, PhysicalCCAPI } from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\tgetEffectiveCCVersion,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport {\n\tFirmwareDownloadStatus,\n\tFirmwareUpdateActivationStatus,\n\ttype FirmwareUpdateMetaData,\n\tFirmwareUpdateMetaDataCommand,\n\tFirmwareUpdateRequestStatus,\n\tFirmwareUpdateStatus,\n} from \"../lib/_Types.js\";\n\n// @noSetValueAPI There are no values to set here\n\nexport const FirmwareUpdateMetaDataCCValues = V.defineCCValues(\n\tCommandClasses[\"Firmware Update Meta Data\"],\n\t{\n\t\t...V.staticProperty(\"supportsActivation\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.staticProperty(\"firmwareUpgradable\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.staticProperty(\"additionalFirmwareIDs\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.staticProperty(\"continuesToFunction\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.staticProperty(\"supportsResuming\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.staticProperty(\"supportsNonSecureTransfer\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t},\n);\n\n@API(CommandClasses[\"Firmware Update Meta Data\"])\nexport class FirmwareUpdateMetaDataCCAPI extends PhysicalCCAPI {\n\tpublic supportsCommand(\n\t\tcmd: FirmwareUpdateMetaDataCommand,\n\t): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase FirmwareUpdateMetaDataCommand.MetaDataGet:\n\t\t\tcase FirmwareUpdateMetaDataCommand.MetaDataReport:\n\t\t\tcase FirmwareUpdateMetaDataCommand.RequestGet:\n\t\t\tcase FirmwareUpdateMetaDataCommand.RequestReport:\n\t\t\tcase FirmwareUpdateMetaDataCommand.Report:\n\t\t\tcase FirmwareUpdateMetaDataCommand.StatusReport:\n\t\t\t\treturn true;\n\n\t\t\tcase FirmwareUpdateMetaDataCommand.ActivationSet:\n\t\t\t\treturn (\n\t\t\t\t\tthis.version >= 4\n\t\t\t\t\t&& (this.version < 7\n\t\t\t\t\t\t|| this.tryGetValueDB()?.getValue(\n\t\t\t\t\t\t\t\tFirmwareUpdateMetaDataCCValues\n\t\t\t\t\t\t\t\t\t.supportsActivation.endpoint(\n\t\t\t\t\t\t\t\t\t\tthis.endpoint.index,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t) === true)\n\t\t\t\t);\n\n\t\t\tcase FirmwareUpdateMetaDataCommand.PrepareGet:\n\t\t\tcase FirmwareUpdateMetaDataCommand.PrepareReport:\n\t\t\t\treturn this.version >= 5;\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\t/**\n\t * Requests information about the current firmware on the device\n\t */\n\tpublic async getMetaData(): Promise<MaybeNotKnown<FirmwareUpdateMetaData>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tFirmwareUpdateMetaDataCommand,\n\t\t\tFirmwareUpdateMetaDataCommand.MetaDataGet,\n\t\t);\n\n\t\tconst cc = new FirmwareUpdateMetaDataCCMetaDataGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tFirmwareUpdateMetaDataCCMetaDataReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"manufacturerId\",\n\t\t\t\t\"firmwareId\",\n\t\t\t\t\"checksum\",\n\t\t\t\t\"firmwareUpgradable\",\n\t\t\t\t\"maxFragmentSize\",\n\t\t\t\t\"additionalFirmwareIDs\",\n\t\t\t\t\"hardwareVersion\",\n\t\t\t\t\"continuesToFunction\",\n\t\t\t\t\"supportsActivation\",\n\t\t\t\t\"supportsResuming\",\n\t\t\t\t\"supportsNonSecureTransfer\",\n\t\t\t]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async reportMetaData(\n\t\toptions: FirmwareUpdateMetaDataCCMetaDataReportOptions,\n\t): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tFirmwareUpdateMetaDataCommand,\n\t\t\tFirmwareUpdateMetaDataCommand.Report,\n\t\t);\n\n\t\tconst cc = new FirmwareUpdateMetaDataCCMetaDataReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...options,\n\t\t});\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t/**\n\t * Requests the device to start the firmware update process and waits for a response.\n\t * This response may time out on some devices, in which case the caller of this method\n\t * should wait manually.\n\t */\n\t@validateArgs()\n\tpublic requestUpdate(\n\t\toptions: FirmwareUpdateMetaDataCCRequestGetOptions,\n\t): Promise<FirmwareUpdateMetaDataCCRequestReport | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tFirmwareUpdateMetaDataCommand,\n\t\t\tFirmwareUpdateMetaDataCommand.RequestGet,\n\t\t);\n\n\t\tconst cc = new FirmwareUpdateMetaDataCCRequestGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...options,\n\t\t});\n\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t/**\n\t * Responds to a firmware update request\n\t */\n\t@validateArgs()\n\tpublic async respondToUpdateRequest(\n\t\toptions: FirmwareUpdateMetaDataCCRequestReportOptions,\n\t): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tFirmwareUpdateMetaDataCommand,\n\t\t\tFirmwareUpdateMetaDataCommand.RequestReport,\n\t\t);\n\n\t\tconst cc = new FirmwareUpdateMetaDataCCRequestReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...options,\n\t\t});\n\n\t\tawait this.host.sendCommand(cc, {\n\t\t\t...this.commandOptions,\n\t\t\t// Do not wait for Nonce Reports\n\t\t\ts2VerifyDelivery: false,\n\t\t});\n\t}\n\n\t/**\n\t * Responds to a firmware download request\n\t */\n\t@validateArgs()\n\tpublic async respondToDownloadRequest(\n\t\toptions: FirmwareUpdateMetaDataCCPrepareReportOptions,\n\t): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tFirmwareUpdateMetaDataCommand,\n\t\t\tFirmwareUpdateMetaDataCommand.PrepareReport,\n\t\t);\n\n\t\tconst cc = new FirmwareUpdateMetaDataCCPrepareReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...options,\n\t\t});\n\n\t\tawait this.host.sendCommand(cc, {\n\t\t\t...this.commandOptions,\n\t\t\t// Do not wait for Nonce Reports\n\t\t\ts2VerifyDelivery: false,\n\t\t});\n\t}\n\n\t/**\n\t * Sends a fragment of the new firmware to the device\n\t */\n\t@validateArgs()\n\tpublic async sendFirmwareFragment(\n\t\tfragmentNumber: number,\n\t\tisLastFragment: boolean,\n\t\tdata: Uint8Array,\n\t): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tFirmwareUpdateMetaDataCommand,\n\t\t\tFirmwareUpdateMetaDataCommand.Report,\n\t\t);\n\n\t\tconst cc = new FirmwareUpdateMetaDataCCReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\treportNumber: fragmentNumber,\n\t\t\tisLast: isLastFragment,\n\t\t\tfirmwareData: data,\n\t\t});\n\t\tawait this.host.sendCommand(cc, {\n\t\t\t...this.commandOptions,\n\t\t\t// Do not wait for Nonce Reports\n\t\t\ts2VerifyDelivery: false,\n\t\t});\n\t}\n\n\t/** Activates a previously transferred firmware image */\n\t@validateArgs()\n\tpublic async activateFirmware(\n\t\toptions: FirmwareUpdateMetaDataCCActivationSetOptions,\n\t): Promise<MaybeNotKnown<FirmwareUpdateActivationStatus>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tFirmwareUpdateMetaDataCommand,\n\t\t\tFirmwareUpdateMetaDataCommand.ActivationSet,\n\t\t);\n\n\t\tconst cc = new FirmwareUpdateMetaDataCCActivationSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...options,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tFirmwareUpdateMetaDataCCActivationReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.activationStatus;\n\t}\n}\n\n@commandClass(CommandClasses[\"Firmware Update Meta Data\"])\n@implementedVersion(8)\n@ccValues(FirmwareUpdateMetaDataCCValues)\nexport class FirmwareUpdateMetaDataCC extends CommandClass {\n\tdeclare ccCommand: FirmwareUpdateMetaDataCommand;\n\n\tpublic skipEndpointInterview(): boolean {\n\t\treturn true;\n\t}\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Firmware Update Meta Data\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"Querying firmware update capabilities...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\n\t\tconst caps = await api.getMetaData();\n\t\tif (caps) {\n\t\t\tlet logMessage = `Received firmware update capabilities:`;\n\t\t\tif (caps.firmwareUpgradable) {\n\t\t\t\tlogMessage += `\n firmware targets: ${[0, ...caps.additionalFirmwareIDs].join(\", \")}\n continues to function: ${caps.continuesToFunction}\n supports activation: ${caps.supportsActivation}`;\n\t\t\t\tif (caps.supportsResuming != undefined) {\n\t\t\t\t\tlogMessage += `\n supports resuming: ${caps.supportsResuming}`;\n\t\t\t\t}\n\t\t\t\tif (caps.supportsNonSecureTransfer != undefined) {\n\t\t\t\t\tlogMessage += `\n supports non-secure transfer: ${caps.supportsNonSecureTransfer}`;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlogMessage += `\\nfirmware upgradeable: false`;\n\t\t\t}\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: logMessage,\n\t\t\t\tdirection: \"inbound\",\n\t\t\t});\n\t\t} else {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"Firmware update capability query timed out\",\n\t\t\t\tdirection: \"inbound\",\n\t\t\t});\n\t\t}\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n}\n\n// @publicAPI\nexport interface FirmwareUpdateMetaDataCCMetaDataReportOptions {\n\tmanufacturerId: number;\n\tfirmwareId?: number;\n\tchecksum?: number;\n\tfirmwareUpgradable: boolean;\n\tmaxFragmentSize?: number;\n\tadditionalFirmwareIDs?: readonly number[];\n\thardwareVersion?: number;\n\tcontinuesToFunction?: MaybeNotKnown<boolean>;\n\tsupportsActivation?: MaybeNotKnown<boolean>;\n\tsupportsResuming?: MaybeNotKnown<boolean>;\n\tsupportsNonSecureTransfer?: MaybeNotKnown<boolean>;\n}\n\n@CCCommand(FirmwareUpdateMetaDataCommand.MetaDataReport)\n@ccValueProperty(\n\t\"firmwareUpgradable\",\n\tFirmwareUpdateMetaDataCCValues.firmwareUpgradable,\n)\n@ccValueProperty(\n\t\"additionalFirmwareIDs\",\n\tFirmwareUpdateMetaDataCCValues.additionalFirmwareIDs,\n)\n@ccValueProperty(\n\t\"continuesToFunction\",\n\tFirmwareUpdateMetaDataCCValues.continuesToFunction,\n)\n@ccValueProperty(\n\t\"supportsActivation\",\n\tFirmwareUpdateMetaDataCCValues.supportsActivation,\n)\n@ccValueProperty(\n\t\"supportsResuming\",\n\tFirmwareUpdateMetaDataCCValues.supportsResuming,\n)\n@ccValueProperty(\n\t\"supportsNonSecureTransfer\",\n\tFirmwareUpdateMetaDataCCValues.supportsNonSecureTransfer,\n)\nexport class FirmwareUpdateMetaDataCCMetaDataReport\n\textends FirmwareUpdateMetaDataCC\n\timplements FirmwareUpdateMetaData\n{\n\tpublic constructor(\n\t\toptions: WithAddress<FirmwareUpdateMetaDataCCMetaDataReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.manufacturerId = options.manufacturerId;\n\t\tthis.firmwareId = options.firmwareId ?? 0;\n\t\tthis.checksum = options.checksum ?? 0;\n\t\tthis.firmwareUpgradable = options.firmwareUpgradable;\n\t\tthis.maxFragmentSize = options.maxFragmentSize;\n\t\tthis.additionalFirmwareIDs = options.additionalFirmwareIDs ?? [];\n\t\tthis.hardwareVersion = options.hardwareVersion;\n\t\tthis.continuesToFunction = options.continuesToFunction;\n\t\tthis.supportsActivation = options.supportsActivation;\n\t\tthis.supportsResuming = options.supportsResuming;\n\t\tthis.supportsNonSecureTransfer = options.supportsNonSecureTransfer;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): FirmwareUpdateMetaDataCCMetaDataReport {\n\t\tvalidatePayload(raw.payload.length >= 6);\n\t\tconst manufacturerId = raw.payload.readUInt16BE(0);\n\t\tconst firmwareId = raw.payload.readUInt16BE(2);\n\t\tconst checksum = raw.payload.readUInt16BE(4);\n\n\t\t// V1/V2 only have a single firmware which must be upgradable\n\t\tconst firmwareUpgradable = raw.payload[6] === 0xff\n\t\t\t|| raw.payload[6] == undefined;\n\n\t\tlet maxFragmentSize: number | undefined;\n\t\tlet additionalFirmwareIDs: number[] | undefined;\n\t\tlet hardwareVersion: number | undefined;\n\t\tlet continuesToFunction: MaybeNotKnown<boolean>;\n\t\tlet supportsActivation: MaybeNotKnown<boolean>;\n\t\tlet supportsResuming: MaybeNotKnown<boolean>;\n\t\tlet supportsNonSecureTransfer: MaybeNotKnown<boolean>;\n\n\t\tif (raw.payload.length >= 10) {\n\t\t\t// V3+\n\t\t\tmaxFragmentSize = raw.payload.readUInt16BE(8);\n\t\t\t// Read variable length list of additional firmwares\n\t\t\tconst numAdditionalFirmwares = raw.payload[7];\n\t\t\tadditionalFirmwareIDs = [];\n\t\t\tvalidatePayload(\n\t\t\t\traw.payload.length >= 10 + 2 * numAdditionalFirmwares,\n\t\t\t);\n\t\t\tfor (let i = 0; i < numAdditionalFirmwares; i++) {\n\t\t\t\tadditionalFirmwareIDs.push(\n\t\t\t\t\traw.payload.readUInt16BE(10 + 2 * i),\n\t\t\t\t);\n\t\t\t}\n\t\t\t// Read hardware version (if it exists)\n\t\t\tlet offset = 10 + 2 * numAdditionalFirmwares;\n\t\t\tif (raw.payload.length >= offset + 1) {\n\t\t\t\t// V5+\n\t\t\t\thardwareVersion = raw.payload[offset];\n\t\t\t\toffset++;\n\t\t\t\tif (raw.payload.length >= offset + 1) {\n\t\t\t\t\t// V6+\n\t\t\t\t\tconst capabilities = raw.payload[offset];\n\t\t\t\t\toffset++;\n\n\t\t\t\t\tcontinuesToFunction = !!(capabilities & 0b1);\n\t\t\t\t\t// V7+\n\t\t\t\t\tsupportsActivation = !!(capabilities & 0b10);\n\t\t\t\t\t// V8+\n\t\t\t\t\tsupportsResuming = !!(capabilities & 0b1000);\n\t\t\t\t\tsupportsNonSecureTransfer = !!(capabilities & 0b100);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tmanufacturerId,\n\t\t\tfirmwareId,\n\t\t\tchecksum,\n\t\t\tfirmwareUpgradable,\n\t\t\tmaxFragmentSize,\n\t\t\tadditionalFirmwareIDs,\n\t\t\thardwareVersion,\n\t\t\tcontinuesToFunction,\n\t\t\tsupportsActivation,\n\t\t\tsupportsResuming,\n\t\t\tsupportsNonSecureTransfer,\n\t\t});\n\t}\n\n\tpublic readonly manufacturerId: number;\n\tpublic readonly firmwareId: number;\n\tpublic readonly checksum: number;\n\n\tpublic readonly firmwareUpgradable: boolean;\n\tpublic readonly maxFragmentSize?: number;\n\n\tpublic readonly additionalFirmwareIDs: readonly number[] = [];\n\tpublic readonly hardwareVersion?: number;\n\n\tpublic readonly continuesToFunction: MaybeNotKnown<boolean>;\n\n\tpublic readonly supportsActivation: MaybeNotKnown<boolean>;\n\n\tpublic readonly supportsResuming?: MaybeNotKnown<boolean>;\n\n\tpublic readonly supportsNonSecureTransfer?: MaybeNotKnown<boolean>;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.alloc(\n\t\t\t12 + 2 * this.additionalFirmwareIDs.length,\n\t\t);\n\t\tthis.payload.writeUInt16BE(this.manufacturerId, 0);\n\t\tthis.payload.writeUInt16BE(this.firmwareId, 2);\n\t\tthis.payload.writeUInt16BE(this.checksum, 4);\n\t\tthis.payload[6] = this.firmwareUpgradable ? 0xff : 0;\n\t\tthis.payload[7] = this.additionalFirmwareIDs.length;\n\t\tthis.payload.writeUInt16BE(this.maxFragmentSize ?? 0xff, 8);\n\t\tlet offset = 10;\n\t\tfor (const id of this.additionalFirmwareIDs) {\n\t\t\tthis.payload.writeUInt16BE(id, offset);\n\t\t\toffset += 2;\n\t\t}\n\t\tthis.payload[offset++] = this.hardwareVersion ?? 0xff;\n\t\tthis.payload[offset++] = (this.continuesToFunction ? 0b1 : 0)\n\t\t\t| (this.supportsActivation ? 0b10 : 0)\n\t\t\t| (this.supportsNonSecureTransfer ? 0b100 : 0)\n\t\t\t| (this.supportsResuming ? 0b1000 : 0);\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"manufacturer id\": this.manufacturerId,\n\t\t\t\"firmware id\": this.firmwareId,\n\t\t\tchecksum: this.checksum,\n\t\t\t\"firmware upgradable\": this.firmwareUpgradable,\n\t\t};\n\t\tif (this.maxFragmentSize != undefined) {\n\t\t\tmessage[\"max fragment size\"] = this.maxFragmentSize;\n\t\t}\n\t\tif (this.additionalFirmwareIDs.length) {\n\t\t\tmessage[\"additional firmware IDs\"] = JSON.stringify(\n\t\t\t\tthis.additionalFirmwareIDs,\n\t\t\t);\n\t\t}\n\t\tif (this.hardwareVersion != undefined) {\n\t\t\tmessage[\"hardware version\"] = this.hardwareVersion;\n\t\t}\n\t\tif (this.continuesToFunction != undefined) {\n\t\t\tmessage[\"continues to function\"] = this.continuesToFunction;\n\t\t}\n\t\tif (this.supportsActivation != undefined) {\n\t\t\tmessage[\"supports activation\"] = this.supportsActivation;\n\t\t}\n\t\tif (this.supportsResuming != undefined) {\n\t\t\tmessage[\"supports resuming\"] = this.supportsResuming;\n\t\t}\n\t\tif (this.supportsNonSecureTransfer != undefined) {\n\t\t\tmessage[\"supports non-secure transfer\"] =\n\t\t\t\tthis.supportsNonSecureTransfer;\n\t\t}\n\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n@CCCommand(FirmwareUpdateMetaDataCommand.MetaDataGet)\n@expectedCCResponse(FirmwareUpdateMetaDataCCMetaDataReport)\nexport class FirmwareUpdateMetaDataCCMetaDataGet\n\textends FirmwareUpdateMetaDataCC\n{}\n\n// @publicAPI\nexport interface FirmwareUpdateMetaDataCCRequestReportOptions {\n\tstatus: FirmwareUpdateRequestStatus;\n\tresume?: boolean;\n\tnonSecureTransfer?: boolean;\n}\n\n@CCCommand(FirmwareUpdateMetaDataCommand.RequestReport)\nexport class FirmwareUpdateMetaDataCCRequestReport\n\textends FirmwareUpdateMetaDataCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<FirmwareUpdateMetaDataCCRequestReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.status = options.status;\n\t\tthis.resume = options.resume;\n\t\tthis.nonSecureTransfer = options.nonSecureTransfer;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): FirmwareUpdateMetaDataCCRequestReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst status: FirmwareUpdateRequestStatus = raw.payload[0];\n\t\tlet resume: boolean | undefined;\n\t\tlet nonSecureTransfer: boolean | undefined;\n\t\tif (raw.payload.length >= 2) {\n\t\t\tresume = !!(raw.payload[1] & 0b100);\n\t\t\tnonSecureTransfer = !!(raw.payload[1] & 0b10);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tstatus,\n\t\t\tresume,\n\t\t\tnonSecureTransfer,\n\t\t});\n\t}\n\n\tpublic readonly status: FirmwareUpdateRequestStatus;\n\tpublic resume?: boolean;\n\tpublic nonSecureTransfer?: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.status,\n\t\t\t(this.resume ? 0b100 : 0) | (this.nonSecureTransfer ? 0b10 : 0),\n\t\t]);\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\tstatus: getEnumMemberName(\n\t\t\t\tFirmwareUpdateRequestStatus,\n\t\t\t\tthis.status,\n\t\t\t),\n\t\t};\n\t\tif (this.resume != undefined) {\n\t\t\tmessage.resume = this.resume;\n\t\t}\n\t\tif (this.nonSecureTransfer != undefined) {\n\t\t\tmessage[\"non-secure transfer\"] = this.nonSecureTransfer;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport type FirmwareUpdateMetaDataCCRequestGetOptions =\n\t& {\n\t\tmanufacturerId: number;\n\t\tfirmwareId: number;\n\t\tchecksum: number;\n\t}\n\t& AllOrNone<{\n\t\t// V3+\n\t\tfirmwareTarget: number;\n\t\tfragmentSize: number;\n\t\t// V4+\n\t\tactivation?: boolean;\n\t\t// V5+\n\t\thardwareVersion?: number;\n\t\t// V8+\n\t\tresume?: boolean;\n\t\tnonSecureTransfer?: boolean;\n\t}>;\n\n@CCCommand(FirmwareUpdateMetaDataCommand.RequestGet)\n// The response may take a while to be received on some devices, so manual waiting might be required\n@expectedCCResponse(FirmwareUpdateMetaDataCCRequestReport)\nexport class FirmwareUpdateMetaDataCCRequestGet\n\textends FirmwareUpdateMetaDataCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<FirmwareUpdateMetaDataCCRequestGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.manufacturerId = options.manufacturerId;\n\t\tthis.firmwareId = options.firmwareId;\n\t\tthis.checksum = options.checksum;\n\t\tif (\"firmwareTarget\" in options) {\n\t\t\tthis.firmwareTarget = options.firmwareTarget;\n\t\t\tthis.fragmentSize = options.fragmentSize;\n\t\t\tthis.activation = options.activation ?? false;\n\t\t\tthis.hardwareVersion = options.hardwareVersion;\n\t\t\tthis.resume = options.resume;\n\t\t\tthis.nonSecureTransfer = options.nonSecureTransfer;\n\t\t}\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): FirmwareUpdateMetaDataCCRequestGet {\n\t\tvalidatePayload(raw.payload.length >= 6);\n\t\tconst manufacturerId = raw.payload.readUInt16BE(0);\n\t\tconst firmwareId = raw.payload.readUInt16BE(2);\n\t\tconst checksum = raw.payload.readUInt16BE(4);\n\n\t\tif (raw.payload.length < 9) {\n\t\t\treturn new this({\n\t\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t\tmanufacturerId,\n\t\t\t\tfirmwareId,\n\t\t\t\tchecksum,\n\t\t\t});\n\t\t}\n\n\t\t// V3+\n\t\tconst firmwareTarget = raw.payload[6];\n\t\tconst fragmentSize = raw.payload.readUInt16BE(7);\n\n\t\tlet resume: boolean | undefined;\n\t\tlet nonSecureTransfer: boolean | undefined;\n\t\tlet activation: boolean | undefined;\n\t\tif (raw.payload.length >= 10) {\n\t\t\t// V4+\n\t\t\tactivation = !!(raw.payload[9] & 0b1);\n\t\t\tnonSecureTransfer = !!(raw.payload[9] & 0b10);\n\t\t\tresume = !!(raw.payload[9] & 0b100);\n\t\t}\n\n\t\tlet hardwareVersion: number | undefined;\n\t\tif (raw.payload.length >= 11) {\n\t\t\t// V5+\n\t\t\thardwareVersion = raw.payload[10];\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tmanufacturerId,\n\t\t\tfirmwareId,\n\t\t\tchecksum,\n\t\t\tfirmwareTarget,\n\t\t\tfragmentSize,\n\t\t\tactivation,\n\t\t\thardwareVersion,\n\t\t\tresume,\n\t\t\tnonSecureTransfer,\n\t\t});\n\t}\n\n\tpublic manufacturerId: number;\n\tpublic firmwareId: number;\n\tpublic checksum: number;\n\tpublic firmwareTarget?: number;\n\tpublic fragmentSize?: number;\n\tpublic activation?: boolean;\n\tpublic hardwareVersion?: number;\n\tpublic resume?: boolean;\n\tpublic nonSecureTransfer?: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.alloc(10, 0);\n\t\tthis.payload.writeUInt16BE(this.manufacturerId, 0);\n\t\tthis.payload.writeUInt16BE(this.firmwareId, 2);\n\t\tthis.payload.writeUInt16BE(this.checksum, 4);\n\t\tthis.payload[6] = this.firmwareTarget ?? 0;\n\t\t// 32 seems like a reasonable default fragment size,\n\t\t// but it should be specified anyways\n\t\tthis.payload.writeUInt16BE(this.fragmentSize ?? 32, 7);\n\t\tthis.payload[9] = (this.activation ? 0b1 : 0)\n\t\t\t| (this.nonSecureTransfer ? 0b10 : 0)\n\t\t\t| (this.resume ? 0b100 : 0);\n\t\t// Hardware version is not always set, but devices check it\n\t\tif (this.hardwareVersion != undefined) {\n\t\t\tthis.payload = Bytes.concat([\n\t\t\t\tthis.payload,\n\t\t\t\t[this.hardwareVersion],\n\t\t\t]);\n\t\t}\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"manufacturer id\": num2hex(this.manufacturerId),\n\t\t\t\"firmware id\": num2hex(this.firmwareId),\n\t\t\tchecksum: num2hex(this.checksum),\n\t\t};\n\t\tif (this.firmwareTarget != undefined) {\n\t\t\tmessage[\"firmware target\"] = this.firmwareTarget;\n\t\t}\n\t\tif (this.fragmentSize != undefined) {\n\t\t\tmessage[\"fragment size\"] = this.fragmentSize;\n\t\t}\n\t\tif (this.activation != undefined) {\n\t\t\tmessage.activation = this.activation;\n\t\t}\n\t\tif (this.resume != undefined) {\n\t\t\tmessage.resume = this.resume;\n\t\t}\n\t\tif (this.nonSecureTransfer != undefined) {\n\t\t\tmessage[\"non-secure transfer\"] = this.nonSecureTransfer;\n\t\t}\n\t\tif (this.hardwareVersion != undefined) {\n\t\t\tmessage[\"hardware version\"] = this.hardwareVersion;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface FirmwareUpdateMetaDataCCGetOptions {\n\tnumReports: number;\n\treportNumber: number;\n}\n\n@CCCommand(FirmwareUpdateMetaDataCommand.Get)\n// This is sent to us from the node, so we expect no response\nexport class FirmwareUpdateMetaDataCCGet extends FirmwareUpdateMetaDataCC {\n\tpublic constructor(\n\t\toptions: WithAddress<FirmwareUpdateMetaDataCCGetOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.numReports = options.numReports;\n\t\tthis.reportNumber = options.reportNumber;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): FirmwareUpdateMetaDataCCGet {\n\t\tvalidatePayload(raw.payload.length >= 3);\n\t\tconst numReports = raw.payload[0];\n\t\tconst reportNumber = raw.payload.readUInt16BE(1) & 0x7fff;\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tnumReports,\n\t\t\treportNumber,\n\t\t});\n\t}\n\n\tpublic readonly numReports: number;\n\tpublic readonly reportNumber: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = new Bytes(3);\n\t\tthis.payload[0] = this.numReports;\n\t\tthis.payload.writeUInt16BE(this.reportNumber & 0x7fff, 1);\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"total # of reports\": this.numReports,\n\t\t\t\t\"report number\": this.reportNumber,\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface FirmwareUpdateMetaDataCCReportOptions {\n\tisLast: boolean;\n\treportNumber: number;\n\tfirmwareData: Uint8Array;\n}\n\n@CCCommand(FirmwareUpdateMetaDataCommand.Report)\n// We send this in reply to the Get command and expect no response\nexport class FirmwareUpdateMetaDataCCReport extends FirmwareUpdateMetaDataCC {\n\tpublic constructor(\n\t\toptions: WithAddress<FirmwareUpdateMetaDataCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.reportNumber = options.reportNumber;\n\t\tthis.firmwareData = options.firmwareData;\n\t\tthis.isLast = options.isLast;\n\t}\n\n\tpublic static from(\n\t\t_raw: CCRaw,\n\t\t_ctx: CCParsingContext,\n\t): FirmwareUpdateMetaDataCCReport {\n\t\t// TODO: Deserialize payload\n\t\tthrow new ZWaveError(\n\t\t\t`${this.name}: deserialization not implemented`,\n\t\t\tZWaveErrorCodes.Deserialization_NotImplemented,\n\t\t);\n\n\t\t// return new FirmwareUpdateMetaDataCCReport({\n\t\t// \tnodeId: ctx.sourceNodeId,\n\t\t// });\n\t}\n\n\tpublic isLast: boolean;\n\tpublic reportNumber: number;\n\tpublic firmwareData: Uint8Array;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst commandBuffer = Bytes.concat([\n\t\t\tnew Bytes(2), // placeholder for report number\n\t\t\tthis.firmwareData,\n\t\t]);\n\t\tcommandBuffer.writeUInt16BE(\n\t\t\t(this.reportNumber & 0x7fff) | (this.isLast ? 0x8000 : 0),\n\t\t\t0,\n\t\t);\n\n\t\t// V1 devices would consider the checksum to be part of the firmware data\n\t\t// so it must not be included for those\n\t\tconst ccVersion = getEffectiveCCVersion(ctx, this);\n\t\tif (ccVersion >= 2) {\n\t\t\t// Compute and save the CRC16 in the payload\n\t\t\t// The CC header is included in the CRC computation\n\t\t\tlet crc = CRC16_CCITT(Bytes.from([this.ccId, this.ccCommand]));\n\t\t\tcrc = CRC16_CCITT(commandBuffer, crc);\n\t\t\tthis.payload = Bytes.concat([\n\t\t\t\tcommandBuffer,\n\t\t\t\tnew Bytes(2),\n\t\t\t]);\n\t\t\tthis.payload.writeUInt16BE(crc, this.payload.length - 2);\n\t\t} else {\n\t\t\tthis.payload = commandBuffer;\n\t\t}\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"report #\": this.reportNumber,\n\t\t\t\t\"is last\": this.isLast,\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface FirmwareUpdateMetaDataCCStatusReportOptions {\n\tstatus: FirmwareUpdateStatus;\n\twaitTime?: number;\n}\n\n@CCCommand(FirmwareUpdateMetaDataCommand.StatusReport)\nexport class FirmwareUpdateMetaDataCCStatusReport\n\textends FirmwareUpdateMetaDataCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<FirmwareUpdateMetaDataCCStatusReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.status = options.status;\n\t\tthis.waitTime = options.waitTime;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): FirmwareUpdateMetaDataCCStatusReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst status: FirmwareUpdateStatus = raw.payload[0];\n\t\tlet waitTime: number | undefined;\n\t\tif (raw.payload.length >= 3) {\n\t\t\twaitTime = raw.payload.readUInt16BE(1);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tstatus,\n\t\t\twaitTime,\n\t\t});\n\t}\n\n\tpublic readonly status: FirmwareUpdateStatus;\n\t/** The wait time in seconds before the node becomes available for communication after the update */\n\tpublic readonly waitTime?: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = new Bytes(3);\n\t\tthis.payload[0] = this.status;\n\t\tthis.payload.writeUInt16BE(this.waitTime ?? 0, 1);\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\tstatus: getEnumMemberName(FirmwareUpdateStatus, this.status),\n\t\t};\n\t\tif (this.waitTime != undefined) {\n\t\t\tmessage[\"wait time\"] = `${this.waitTime} seconds`;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface FirmwareUpdateMetaDataCCActivationReportOptions {\n\tmanufacturerId: number;\n\tfirmwareId: number;\n\tchecksum: number;\n\tfirmwareTarget: number;\n\tactivationStatus: FirmwareUpdateActivationStatus;\n\thardwareVersion?: number;\n}\n\n@CCCommand(FirmwareUpdateMetaDataCommand.ActivationReport)\nexport class FirmwareUpdateMetaDataCCActivationReport\n\textends FirmwareUpdateMetaDataCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<FirmwareUpdateMetaDataCCActivationReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.manufacturerId = options.manufacturerId;\n\t\tthis.firmwareId = options.firmwareId;\n\t\tthis.checksum = options.checksum;\n\t\tthis.firmwareTarget = options.firmwareTarget;\n\t\tthis.activationStatus = options.activationStatus;\n\t\tthis.hardwareVersion = options.hardwareVersion;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): FirmwareUpdateMetaDataCCActivationReport {\n\t\tvalidatePayload(raw.payload.length >= 8);\n\t\tconst manufacturerId = raw.payload.readUInt16BE(0);\n\t\tconst firmwareId = raw.payload.readUInt16BE(2);\n\t\tconst checksum = raw.payload.readUInt16BE(4);\n\t\tconst firmwareTarget = raw.payload[6];\n\t\tconst activationStatus: FirmwareUpdateActivationStatus = raw.payload[7];\n\t\tlet hardwareVersion: number | undefined;\n\t\tif (raw.payload.length >= 9) {\n\t\t\t// V5+\n\t\t\thardwareVersion = raw.payload[8];\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tmanufacturerId,\n\t\t\tfirmwareId,\n\t\t\tchecksum,\n\t\t\tfirmwareTarget,\n\t\t\tactivationStatus,\n\t\t\thardwareVersion,\n\t\t});\n\t}\n\n\tpublic readonly manufacturerId: number;\n\tpublic readonly firmwareId: number;\n\tpublic readonly checksum: number;\n\tpublic readonly firmwareTarget: number;\n\tpublic readonly activationStatus: FirmwareUpdateActivationStatus;\n\tpublic readonly hardwareVersion?: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = new Bytes(8);\n\t\tthis.payload.writeUInt16BE(this.manufacturerId, 0);\n\t\tthis.payload.writeUInt16BE(this.firmwareId, 2);\n\t\tthis.payload.writeUInt16BE(this.checksum, 4);\n\t\tthis.payload[6] = this.firmwareTarget;\n\t\tthis.payload[7] = this.activationStatus;\n\t\tif (this.hardwareVersion != undefined) {\n\t\t\tthis.payload = Bytes.concat([\n\t\t\t\tthis.payload,\n\t\t\t\t[this.hardwareVersion],\n\t\t\t]);\n\t\t}\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"manufacturer id\": num2hex(this.manufacturerId),\n\t\t\t\"firmware id\": num2hex(this.firmwareId),\n\t\t\tchecksum: num2hex(this.checksum),\n\t\t\t\"firmware target\": this.firmwareTarget,\n\t\t\t\"activation status\": getEnumMemberName(\n\t\t\t\tFirmwareUpdateActivationStatus,\n\t\t\t\tthis.activationStatus,\n\t\t\t),\n\t\t};\n\t\tif (this.hardwareVersion != undefined) {\n\t\t\tmessage.hardwareVersion = this.hardwareVersion;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface FirmwareUpdateMetaDataCCActivationSetOptions {\n\tmanufacturerId: number;\n\tfirmwareId: number;\n\tchecksum: number;\n\tfirmwareTarget: number;\n\t// V5+\n\thardwareVersion?: number;\n}\n\n@CCCommand(FirmwareUpdateMetaDataCommand.ActivationSet)\n@expectedCCResponse(FirmwareUpdateMetaDataCCActivationReport)\nexport class FirmwareUpdateMetaDataCCActivationSet\n\textends FirmwareUpdateMetaDataCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<FirmwareUpdateMetaDataCCActivationSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.manufacturerId = options.manufacturerId;\n\t\tthis.firmwareId = options.firmwareId;\n\t\tthis.checksum = options.checksum;\n\t\tthis.firmwareTarget = options.firmwareTarget;\n\t\tthis.hardwareVersion = options.hardwareVersion;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): FirmwareUpdateMetaDataCCActivationSet {\n\t\tvalidatePayload(raw.payload.length >= 7);\n\t\tconst manufacturerId = raw.payload.readUInt16BE(0);\n\t\tconst firmwareId = raw.payload.readUInt16BE(2);\n\t\tconst checksum = raw.payload.readUInt16BE(4);\n\t\tconst firmwareTarget = raw.payload[6];\n\t\tlet hardwareVersion: number | undefined;\n\t\tif (raw.payload.length >= 8) {\n\t\t\t// V5+\n\t\t\thardwareVersion = raw.payload[7];\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tmanufacturerId,\n\t\t\tfirmwareId,\n\t\t\tchecksum,\n\t\t\tfirmwareTarget,\n\t\t\thardwareVersion,\n\t\t});\n\t}\n\n\tpublic manufacturerId: number;\n\tpublic firmwareId: number;\n\tpublic checksum: number;\n\tpublic firmwareTarget: number;\n\tpublic hardwareVersion?: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = new Bytes(7);\n\t\tthis.payload.writeUInt16BE(this.manufacturerId, 0);\n\t\tthis.payload.writeUInt16BE(this.firmwareId, 2);\n\t\tthis.payload.writeUInt16BE(this.checksum, 4);\n\t\tthis.payload[6] = this.firmwareTarget;\n\t\tif (this.hardwareVersion != undefined) {\n\t\t\tthis.payload = Bytes.concat([\n\t\t\t\tthis.payload,\n\t\t\t\t[this.hardwareVersion],\n\t\t\t]);\n\t\t}\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"manufacturer id\": num2hex(this.manufacturerId),\n\t\t\t\"firmware id\": num2hex(this.firmwareId),\n\t\t\tchecksum: num2hex(this.checksum),\n\t\t\t\"firmware target\": this.firmwareTarget,\n\t\t};\n\t\tif (this.hardwareVersion != undefined) {\n\t\t\tmessage[\"hardware version\"] = this.hardwareVersion;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface FirmwareUpdateMetaDataCCPrepareReportOptions {\n\tstatus: FirmwareDownloadStatus;\n\tchecksum: number;\n}\n\n@CCCommand(FirmwareUpdateMetaDataCommand.PrepareReport)\nexport class FirmwareUpdateMetaDataCCPrepareReport\n\textends FirmwareUpdateMetaDataCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<FirmwareUpdateMetaDataCCPrepareReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.status = options.status;\n\t\tthis.checksum = options.checksum;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): FirmwareUpdateMetaDataCCPrepareReport {\n\t\tvalidatePayload(raw.payload.length >= 3);\n\t\tconst status: FirmwareDownloadStatus = raw.payload[0];\n\t\tconst checksum = raw.payload.readUInt16BE(1);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tstatus,\n\t\t\tchecksum,\n\t\t});\n\t}\n\n\tpublic readonly status: FirmwareDownloadStatus;\n\tpublic readonly checksum: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = new Bytes(3);\n\t\tthis.payload[0] = this.status;\n\t\tthis.payload.writeUInt16BE(this.checksum, 1);\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\tstatus: getEnumMemberName(FirmwareDownloadStatus, this.status),\n\t\t\t\tchecksum: num2hex(this.checksum),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface FirmwareUpdateMetaDataCCPrepareGetOptions {\n\tmanufacturerId: number;\n\tfirmwareId: number;\n\tfirmwareTarget: number;\n\tfragmentSize: number;\n\thardwareVersion: number;\n}\n\n@CCCommand(FirmwareUpdateMetaDataCommand.PrepareGet)\n@expectedCCResponse(FirmwareUpdateMetaDataCCPrepareReport)\nexport class FirmwareUpdateMetaDataCCPrepareGet\n\textends FirmwareUpdateMetaDataCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<FirmwareUpdateMetaDataCCPrepareGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.manufacturerId = options.manufacturerId;\n\t\tthis.firmwareId = options.firmwareId;\n\t\tthis.firmwareTarget = options.firmwareTarget;\n\t\tthis.fragmentSize = options.fragmentSize;\n\t\tthis.hardwareVersion = options.hardwareVersion;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): FirmwareUpdateMetaDataCCPrepareGet {\n\t\tvalidatePayload(raw.payload.length >= 8);\n\t\tconst manufacturerId = raw.payload.readUInt16BE(0);\n\t\tconst firmwareId = raw.payload.readUInt16BE(2);\n\t\tconst firmwareTarget = raw.payload[4];\n\t\tconst fragmentSize = raw.payload.readUInt16BE(5);\n\t\tconst hardwareVersion = raw.payload[7];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tmanufacturerId,\n\t\t\tfirmwareId,\n\t\t\tfirmwareTarget,\n\t\t\tfragmentSize,\n\t\t\thardwareVersion,\n\t\t});\n\t}\n\n\tpublic manufacturerId: number;\n\tpublic firmwareId: number;\n\tpublic firmwareTarget: number;\n\tpublic fragmentSize: number;\n\tpublic hardwareVersion: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = new Bytes(8);\n\t\tthis.payload.writeUInt16BE(this.manufacturerId, 0);\n\t\tthis.payload.writeUInt16BE(this.firmwareId, 2);\n\t\tthis.payload[4] = this.firmwareTarget;\n\t\tthis.payload.writeUInt16BE(this.fragmentSize, 5);\n\t\tthis.payload[7] = this.hardwareVersion;\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"manufacturer id\": num2hex(this.manufacturerId),\n\t\t\t\t\"firmware id\": num2hex(this.firmwareId),\n\t\t\t\t\"firmware target\": this.firmwareTarget,\n\t\t\t\t\"fragment size\": this.fragmentSize,\n\t\t\t\t\"hardware version\": this.hardwareVersion,\n\t\t\t},\n\t\t};\n\t}\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { CCEncodingContext, CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\tCRC16_CCITT,\n\tCommandClasses,\n\ttype GetValueDB,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype MessageRecord,\n\ttype WithAddress,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport {\n\ttype AllOrNone,\n\tBytes,\n\ttype BytesView,\n\tgetEnumMemberName,\n\tnum2hex,\n\tpick,\n} from \"@zwave-js/shared\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { CCAPI, PhysicalCCAPI } from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\tgetEffectiveCCVersion,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport {\n\tFirmwareDownloadStatus,\n\tFirmwareUpdateActivationStatus,\n\ttype FirmwareUpdateMetaData,\n\tFirmwareUpdateMetaDataCommand,\n\tFirmwareUpdateRequestStatus,\n\tFirmwareUpdateStatus,\n} from \"../lib/_Types.js\";\n\n// @noSetValueAPI There are no values to set here\n\nexport const FirmwareUpdateMetaDataCCValues = V.defineCCValues(\n\tCommandClasses[\"Firmware Update Meta Data\"],\n\t{\n\t\t...V.staticProperty(\"supportsActivation\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.staticProperty(\"firmwareUpgradable\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.staticProperty(\"additionalFirmwareIDs\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.staticProperty(\"continuesToFunction\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.staticProperty(\"supportsResuming\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t\t...V.staticProperty(\"supportsNonSecureTransfer\", undefined, {\n\t\t\tinternal: true,\n\t\t}),\n\t},\n);\n\n@API(CommandClasses[\"Firmware Update Meta Data\"])\nexport class FirmwareUpdateMetaDataCCAPI extends PhysicalCCAPI {\n\tpublic supportsCommand(\n\t\tcmd: FirmwareUpdateMetaDataCommand,\n\t): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase FirmwareUpdateMetaDataCommand.MetaDataGet:\n\t\t\tcase FirmwareUpdateMetaDataCommand.MetaDataReport:\n\t\t\tcase FirmwareUpdateMetaDataCommand.RequestGet:\n\t\t\tcase FirmwareUpdateMetaDataCommand.RequestReport:\n\t\t\tcase FirmwareUpdateMetaDataCommand.Report:\n\t\t\tcase FirmwareUpdateMetaDataCommand.StatusReport:\n\t\t\t\treturn true;\n\n\t\t\tcase FirmwareUpdateMetaDataCommand.ActivationSet:\n\t\t\t\treturn (\n\t\t\t\t\tthis.version >= 4\n\t\t\t\t\t&& (this.version < 7\n\t\t\t\t\t\t|| this.tryGetValueDB()?.getValue(\n\t\t\t\t\t\t\t\tFirmwareUpdateMetaDataCCValues\n\t\t\t\t\t\t\t\t\t.supportsActivation.endpoint(\n\t\t\t\t\t\t\t\t\t\tthis.endpoint.index,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t) === true)\n\t\t\t\t);\n\n\t\t\tcase FirmwareUpdateMetaDataCommand.PrepareGet:\n\t\t\tcase FirmwareUpdateMetaDataCommand.PrepareReport:\n\t\t\t\treturn this.version >= 5;\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\t/**\n\t * Requests information about the current firmware on the device\n\t */\n\tpublic async getMetaData(): Promise<MaybeNotKnown<FirmwareUpdateMetaData>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tFirmwareUpdateMetaDataCommand,\n\t\t\tFirmwareUpdateMetaDataCommand.MetaDataGet,\n\t\t);\n\n\t\tconst cc = new FirmwareUpdateMetaDataCCMetaDataGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tFirmwareUpdateMetaDataCCMetaDataReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"manufacturerId\",\n\t\t\t\t\"firmwareId\",\n\t\t\t\t\"checksum\",\n\t\t\t\t\"firmwareUpgradable\",\n\t\t\t\t\"maxFragmentSize\",\n\t\t\t\t\"additionalFirmwareIDs\",\n\t\t\t\t\"hardwareVersion\",\n\t\t\t\t\"continuesToFunction\",\n\t\t\t\t\"supportsActivation\",\n\t\t\t\t\"supportsResuming\",\n\t\t\t\t\"supportsNonSecureTransfer\",\n\t\t\t]);\n\t\t}\n\t}\n\n\t@validateArgs()\n\tpublic async reportMetaData(\n\t\toptions: FirmwareUpdateMetaDataCCMetaDataReportOptions,\n\t): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tFirmwareUpdateMetaDataCommand,\n\t\t\tFirmwareUpdateMetaDataCommand.Report,\n\t\t);\n\n\t\tconst cc = new FirmwareUpdateMetaDataCCMetaDataReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...options,\n\t\t});\n\t\tawait this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t/**\n\t * Requests the device to start the firmware update process and waits for a response.\n\t * This response may time out on some devices, in which case the caller of this method\n\t * should wait manually.\n\t */\n\t@validateArgs()\n\tpublic requestUpdate(\n\t\toptions: FirmwareUpdateMetaDataCCRequestGetOptions,\n\t): Promise<FirmwareUpdateMetaDataCCRequestReport | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tFirmwareUpdateMetaDataCommand,\n\t\t\tFirmwareUpdateMetaDataCommand.RequestGet,\n\t\t);\n\n\t\tconst cc = new FirmwareUpdateMetaDataCCRequestGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...options,\n\t\t});\n\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t/**\n\t * Responds to a firmware update request\n\t */\n\t@validateArgs()\n\tpublic async respondToUpdateRequest(\n\t\toptions: FirmwareUpdateMetaDataCCRequestReportOptions,\n\t): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tFirmwareUpdateMetaDataCommand,\n\t\t\tFirmwareUpdateMetaDataCommand.RequestReport,\n\t\t);\n\n\t\tconst cc = new FirmwareUpdateMetaDataCCRequestReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...options,\n\t\t});\n\n\t\tawait this.host.sendCommand(cc, {\n\t\t\t...this.commandOptions,\n\t\t\t// Do not wait for Nonce Reports\n\t\t\ts2VerifyDelivery: false,\n\t\t});\n\t}\n\n\t/**\n\t * Responds to a firmware download request\n\t */\n\t@validateArgs()\n\tpublic async respondToDownloadRequest(\n\t\toptions: FirmwareUpdateMetaDataCCPrepareReportOptions,\n\t): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tFirmwareUpdateMetaDataCommand,\n\t\t\tFirmwareUpdateMetaDataCommand.PrepareReport,\n\t\t);\n\n\t\tconst cc = new FirmwareUpdateMetaDataCCPrepareReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...options,\n\t\t});\n\n\t\tawait this.host.sendCommand(cc, {\n\t\t\t...this.commandOptions,\n\t\t\t// Do not wait for Nonce Reports\n\t\t\ts2VerifyDelivery: false,\n\t\t});\n\t}\n\n\t/**\n\t * Sends a fragment of the new firmware to the device\n\t */\n\t@validateArgs()\n\tpublic async sendFirmwareFragment(\n\t\tfragmentNumber: number,\n\t\tisLastFragment: boolean,\n\t\tdata: BytesView,\n\t): Promise<void> {\n\t\tthis.assertSupportsCommand(\n\t\t\tFirmwareUpdateMetaDataCommand,\n\t\t\tFirmwareUpdateMetaDataCommand.Report,\n\t\t);\n\n\t\tconst cc = new FirmwareUpdateMetaDataCCReport({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\treportNumber: fragmentNumber,\n\t\t\tisLast: isLastFragment,\n\t\t\tfirmwareData: data,\n\t\t});\n\t\tawait this.host.sendCommand(cc, {\n\t\t\t...this.commandOptions,\n\t\t\t// Do not wait for Nonce Reports\n\t\t\ts2VerifyDelivery: false,\n\t\t});\n\t}\n\n\t/** Activates a previously transferred firmware image */\n\t@validateArgs()\n\tpublic async activateFirmware(\n\t\toptions: FirmwareUpdateMetaDataCCActivationSetOptions,\n\t): Promise<MaybeNotKnown<FirmwareUpdateActivationStatus>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tFirmwareUpdateMetaDataCommand,\n\t\t\tFirmwareUpdateMetaDataCommand.ActivationSet,\n\t\t);\n\n\t\tconst cc = new FirmwareUpdateMetaDataCCActivationSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...options,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tFirmwareUpdateMetaDataCCActivationReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.activationStatus;\n\t}\n}\n\n@commandClass(CommandClasses[\"Firmware Update Meta Data\"])\n@implementedVersion(8)\n@ccValues(FirmwareUpdateMetaDataCCValues)\nexport class FirmwareUpdateMetaDataCC extends CommandClass {\n\tdeclare ccCommand: FirmwareUpdateMetaDataCommand;\n\n\tpublic skipEndpointInterview(): boolean {\n\t\treturn true;\n\t}\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Firmware Update Meta Data\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"Querying firmware update capabilities...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\n\t\tconst caps = await api.getMetaData();\n\t\tif (caps) {\n\t\t\tlet logMessage = `Received firmware update capabilities:`;\n\t\t\tif (caps.firmwareUpgradable) {\n\t\t\t\tlogMessage += `\n firmware targets: ${[0, ...caps.additionalFirmwareIDs].join(\", \")}\n continues to function: ${caps.continuesToFunction}\n supports activation: ${caps.supportsActivation}`;\n\t\t\t\tif (caps.supportsResuming != undefined) {\n\t\t\t\t\tlogMessage += `\n supports resuming: ${caps.supportsResuming}`;\n\t\t\t\t}\n\t\t\t\tif (caps.supportsNonSecureTransfer != undefined) {\n\t\t\t\t\tlogMessage += `\n supports non-secure transfer: ${caps.supportsNonSecureTransfer}`;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlogMessage += `\\nfirmware upgradeable: false`;\n\t\t\t}\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: logMessage,\n\t\t\t\tdirection: \"inbound\",\n\t\t\t});\n\t\t} else {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"Firmware update capability query timed out\",\n\t\t\t\tdirection: \"inbound\",\n\t\t\t});\n\t\t}\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n}\n\n// @publicAPI\nexport interface FirmwareUpdateMetaDataCCMetaDataReportOptions {\n\tmanufacturerId: number;\n\tfirmwareId?: number;\n\tchecksum?: number;\n\tfirmwareUpgradable: boolean;\n\tmaxFragmentSize?: number;\n\tadditionalFirmwareIDs?: readonly number[];\n\thardwareVersion?: number;\n\tcontinuesToFunction?: MaybeNotKnown<boolean>;\n\tsupportsActivation?: MaybeNotKnown<boolean>;\n\tsupportsResuming?: MaybeNotKnown<boolean>;\n\tsupportsNonSecureTransfer?: MaybeNotKnown<boolean>;\n}\n\n@CCCommand(FirmwareUpdateMetaDataCommand.MetaDataReport)\n@ccValueProperty(\n\t\"firmwareUpgradable\",\n\tFirmwareUpdateMetaDataCCValues.firmwareUpgradable,\n)\n@ccValueProperty(\n\t\"additionalFirmwareIDs\",\n\tFirmwareUpdateMetaDataCCValues.additionalFirmwareIDs,\n)\n@ccValueProperty(\n\t\"continuesToFunction\",\n\tFirmwareUpdateMetaDataCCValues.continuesToFunction,\n)\n@ccValueProperty(\n\t\"supportsActivation\",\n\tFirmwareUpdateMetaDataCCValues.supportsActivation,\n)\n@ccValueProperty(\n\t\"supportsResuming\",\n\tFirmwareUpdateMetaDataCCValues.supportsResuming,\n)\n@ccValueProperty(\n\t\"supportsNonSecureTransfer\",\n\tFirmwareUpdateMetaDataCCValues.supportsNonSecureTransfer,\n)\nexport class FirmwareUpdateMetaDataCCMetaDataReport\n\textends FirmwareUpdateMetaDataCC\n\timplements FirmwareUpdateMetaData\n{\n\tpublic constructor(\n\t\toptions: WithAddress<FirmwareUpdateMetaDataCCMetaDataReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.manufacturerId = options.manufacturerId;\n\t\tthis.firmwareId = options.firmwareId ?? 0;\n\t\tthis.checksum = options.checksum ?? 0;\n\t\tthis.firmwareUpgradable = options.firmwareUpgradable;\n\t\tthis.maxFragmentSize = options.maxFragmentSize;\n\t\tthis.additionalFirmwareIDs = options.additionalFirmwareIDs ?? [];\n\t\tthis.hardwareVersion = options.hardwareVersion;\n\t\tthis.continuesToFunction = options.continuesToFunction;\n\t\tthis.supportsActivation = options.supportsActivation;\n\t\tthis.supportsResuming = options.supportsResuming;\n\t\tthis.supportsNonSecureTransfer = options.supportsNonSecureTransfer;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): FirmwareUpdateMetaDataCCMetaDataReport {\n\t\tvalidatePayload(raw.payload.length >= 6);\n\t\tconst manufacturerId = raw.payload.readUInt16BE(0);\n\t\tconst firmwareId = raw.payload.readUInt16BE(2);\n\t\tconst checksum = raw.payload.readUInt16BE(4);\n\n\t\t// V1/V2 only have a single firmware which must be upgradable\n\t\tconst firmwareUpgradable = raw.payload[6] === 0xff\n\t\t\t|| raw.payload[6] == undefined;\n\n\t\tlet maxFragmentSize: number | undefined;\n\t\tlet additionalFirmwareIDs: number[] | undefined;\n\t\tlet hardwareVersion: number | undefined;\n\t\tlet continuesToFunction: MaybeNotKnown<boolean>;\n\t\tlet supportsActivation: MaybeNotKnown<boolean>;\n\t\tlet supportsResuming: MaybeNotKnown<boolean>;\n\t\tlet supportsNonSecureTransfer: MaybeNotKnown<boolean>;\n\n\t\tif (raw.payload.length >= 10) {\n\t\t\t// V3+\n\t\t\tmaxFragmentSize = raw.payload.readUInt16BE(8);\n\t\t\t// Read variable length list of additional firmwares\n\t\t\tconst numAdditionalFirmwares = raw.payload[7];\n\t\t\tadditionalFirmwareIDs = [];\n\t\t\tvalidatePayload(\n\t\t\t\traw.payload.length >= 10 + 2 * numAdditionalFirmwares,\n\t\t\t);\n\t\t\tfor (let i = 0; i < numAdditionalFirmwares; i++) {\n\t\t\t\tadditionalFirmwareIDs.push(\n\t\t\t\t\traw.payload.readUInt16BE(10 + 2 * i),\n\t\t\t\t);\n\t\t\t}\n\t\t\t// Read hardware version (if it exists)\n\t\t\tlet offset = 10 + 2 * numAdditionalFirmwares;\n\t\t\tif (raw.payload.length >= offset + 1) {\n\t\t\t\t// V5+\n\t\t\t\thardwareVersion = raw.payload[offset];\n\t\t\t\toffset++;\n\t\t\t\tif (raw.payload.length >= offset + 1) {\n\t\t\t\t\t// V6+\n\t\t\t\t\tconst capabilities = raw.payload[offset];\n\t\t\t\t\toffset++;\n\n\t\t\t\t\tcontinuesToFunction = !!(capabilities & 0b1);\n\t\t\t\t\t// V7+\n\t\t\t\t\tsupportsActivation = !!(capabilities & 0b10);\n\t\t\t\t\t// V8+\n\t\t\t\t\tsupportsResuming = !!(capabilities & 0b1000);\n\t\t\t\t\tsupportsNonSecureTransfer = !!(capabilities & 0b100);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tmanufacturerId,\n\t\t\tfirmwareId,\n\t\t\tchecksum,\n\t\t\tfirmwareUpgradable,\n\t\t\tmaxFragmentSize,\n\t\t\tadditionalFirmwareIDs,\n\t\t\thardwareVersion,\n\t\t\tcontinuesToFunction,\n\t\t\tsupportsActivation,\n\t\t\tsupportsResuming,\n\t\t\tsupportsNonSecureTransfer,\n\t\t});\n\t}\n\n\tpublic readonly manufacturerId: number;\n\tpublic readonly firmwareId: number;\n\tpublic readonly checksum: number;\n\n\tpublic readonly firmwareUpgradable: boolean;\n\tpublic readonly maxFragmentSize?: number;\n\n\tpublic readonly additionalFirmwareIDs: readonly number[] = [];\n\tpublic readonly hardwareVersion?: number;\n\n\tpublic readonly continuesToFunction: MaybeNotKnown<boolean>;\n\n\tpublic readonly supportsActivation: MaybeNotKnown<boolean>;\n\n\tpublic readonly supportsResuming?: MaybeNotKnown<boolean>;\n\n\tpublic readonly supportsNonSecureTransfer?: MaybeNotKnown<boolean>;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.alloc(\n\t\t\t12 + 2 * this.additionalFirmwareIDs.length,\n\t\t);\n\t\tthis.payload.writeUInt16BE(this.manufacturerId, 0);\n\t\tthis.payload.writeUInt16BE(this.firmwareId, 2);\n\t\tthis.payload.writeUInt16BE(this.checksum, 4);\n\t\tthis.payload[6] = this.firmwareUpgradable ? 0xff : 0;\n\t\tthis.payload[7] = this.additionalFirmwareIDs.length;\n\t\tthis.payload.writeUInt16BE(this.maxFragmentSize ?? 0xff, 8);\n\t\tlet offset = 10;\n\t\tfor (const id of this.additionalFirmwareIDs) {\n\t\t\tthis.payload.writeUInt16BE(id, offset);\n\t\t\toffset += 2;\n\t\t}\n\t\tthis.payload[offset++] = this.hardwareVersion ?? 0xff;\n\t\tthis.payload[offset++] = (this.continuesToFunction ? 0b1 : 0)\n\t\t\t| (this.supportsActivation ? 0b10 : 0)\n\t\t\t| (this.supportsNonSecureTransfer ? 0b100 : 0)\n\t\t\t| (this.supportsResuming ? 0b1000 : 0);\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"manufacturer id\": this.manufacturerId,\n\t\t\t\"firmware id\": this.firmwareId,\n\t\t\tchecksum: this.checksum,\n\t\t\t\"firmware upgradable\": this.firmwareUpgradable,\n\t\t};\n\t\tif (this.maxFragmentSize != undefined) {\n\t\t\tmessage[\"max fragment size\"] = this.maxFragmentSize;\n\t\t}\n\t\tif (this.additionalFirmwareIDs.length) {\n\t\t\tmessage[\"additional firmware IDs\"] = JSON.stringify(\n\t\t\t\tthis.additionalFirmwareIDs,\n\t\t\t);\n\t\t}\n\t\tif (this.hardwareVersion != undefined) {\n\t\t\tmessage[\"hardware version\"] = this.hardwareVersion;\n\t\t}\n\t\tif (this.continuesToFunction != undefined) {\n\t\t\tmessage[\"continues to function\"] = this.continuesToFunction;\n\t\t}\n\t\tif (this.supportsActivation != undefined) {\n\t\t\tmessage[\"supports activation\"] = this.supportsActivation;\n\t\t}\n\t\tif (this.supportsResuming != undefined) {\n\t\t\tmessage[\"supports resuming\"] = this.supportsResuming;\n\t\t}\n\t\tif (this.supportsNonSecureTransfer != undefined) {\n\t\t\tmessage[\"supports non-secure transfer\"] =\n\t\t\t\tthis.supportsNonSecureTransfer;\n\t\t}\n\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n@CCCommand(FirmwareUpdateMetaDataCommand.MetaDataGet)\n@expectedCCResponse(FirmwareUpdateMetaDataCCMetaDataReport)\nexport class FirmwareUpdateMetaDataCCMetaDataGet\n\textends FirmwareUpdateMetaDataCC\n{}\n\n// @publicAPI\nexport interface FirmwareUpdateMetaDataCCRequestReportOptions {\n\tstatus: FirmwareUpdateRequestStatus;\n\tresume?: boolean;\n\tnonSecureTransfer?: boolean;\n}\n\n@CCCommand(FirmwareUpdateMetaDataCommand.RequestReport)\nexport class FirmwareUpdateMetaDataCCRequestReport\n\textends FirmwareUpdateMetaDataCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<FirmwareUpdateMetaDataCCRequestReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.status = options.status;\n\t\tthis.resume = options.resume;\n\t\tthis.nonSecureTransfer = options.nonSecureTransfer;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): FirmwareUpdateMetaDataCCRequestReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst status: FirmwareUpdateRequestStatus = raw.payload[0];\n\t\tlet resume: boolean | undefined;\n\t\tlet nonSecureTransfer: boolean | undefined;\n\t\tif (raw.payload.length >= 2) {\n\t\t\tresume = !!(raw.payload[1] & 0b100);\n\t\t\tnonSecureTransfer = !!(raw.payload[1] & 0b10);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tstatus,\n\t\t\tresume,\n\t\t\tnonSecureTransfer,\n\t\t});\n\t}\n\n\tpublic readonly status: FirmwareUpdateRequestStatus;\n\tpublic resume?: boolean;\n\tpublic nonSecureTransfer?: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.status,\n\t\t\t(this.resume ? 0b100 : 0) | (this.nonSecureTransfer ? 0b10 : 0),\n\t\t]);\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\tstatus: getEnumMemberName(\n\t\t\t\tFirmwareUpdateRequestStatus,\n\t\t\t\tthis.status,\n\t\t\t),\n\t\t};\n\t\tif (this.resume != undefined) {\n\t\t\tmessage.resume = this.resume;\n\t\t}\n\t\tif (this.nonSecureTransfer != undefined) {\n\t\t\tmessage[\"non-secure transfer\"] = this.nonSecureTransfer;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport type FirmwareUpdateMetaDataCCRequestGetOptions =\n\t& {\n\t\tmanufacturerId: number;\n\t\tfirmwareId: number;\n\t\tchecksum: number;\n\t}\n\t& AllOrNone<{\n\t\t// V3+\n\t\tfirmwareTarget: number;\n\t\tfragmentSize: number;\n\t\t// V4+\n\t\tactivation?: boolean;\n\t\t// V5+\n\t\thardwareVersion?: number;\n\t\t// V8+\n\t\tresume?: boolean;\n\t\tnonSecureTransfer?: boolean;\n\t}>;\n\n@CCCommand(FirmwareUpdateMetaDataCommand.RequestGet)\n// The response may take a while to be received on some devices, so manual waiting might be required\n@expectedCCResponse(FirmwareUpdateMetaDataCCRequestReport)\nexport class FirmwareUpdateMetaDataCCRequestGet\n\textends FirmwareUpdateMetaDataCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<FirmwareUpdateMetaDataCCRequestGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.manufacturerId = options.manufacturerId;\n\t\tthis.firmwareId = options.firmwareId;\n\t\tthis.checksum = options.checksum;\n\t\tif (\"firmwareTarget\" in options) {\n\t\t\tthis.firmwareTarget = options.firmwareTarget;\n\t\t\tthis.fragmentSize = options.fragmentSize;\n\t\t\tthis.activation = options.activation ?? false;\n\t\t\tthis.hardwareVersion = options.hardwareVersion;\n\t\t\tthis.resume = options.resume;\n\t\t\tthis.nonSecureTransfer = options.nonSecureTransfer;\n\t\t}\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): FirmwareUpdateMetaDataCCRequestGet {\n\t\tvalidatePayload(raw.payload.length >= 6);\n\t\tconst manufacturerId = raw.payload.readUInt16BE(0);\n\t\tconst firmwareId = raw.payload.readUInt16BE(2);\n\t\tconst checksum = raw.payload.readUInt16BE(4);\n\n\t\tif (raw.payload.length < 9) {\n\t\t\treturn new this({\n\t\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\t\tmanufacturerId,\n\t\t\t\tfirmwareId,\n\t\t\t\tchecksum,\n\t\t\t});\n\t\t}\n\n\t\t// V3+\n\t\tconst firmwareTarget = raw.payload[6];\n\t\tconst fragmentSize = raw.payload.readUInt16BE(7);\n\n\t\tlet resume: boolean | undefined;\n\t\tlet nonSecureTransfer: boolean | undefined;\n\t\tlet activation: boolean | undefined;\n\t\tif (raw.payload.length >= 10) {\n\t\t\t// V4+\n\t\t\tactivation = !!(raw.payload[9] & 0b1);\n\t\t\tnonSecureTransfer = !!(raw.payload[9] & 0b10);\n\t\t\tresume = !!(raw.payload[9] & 0b100);\n\t\t}\n\n\t\tlet hardwareVersion: number | undefined;\n\t\tif (raw.payload.length >= 11) {\n\t\t\t// V5+\n\t\t\thardwareVersion = raw.payload[10];\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tmanufacturerId,\n\t\t\tfirmwareId,\n\t\t\tchecksum,\n\t\t\tfirmwareTarget,\n\t\t\tfragmentSize,\n\t\t\tactivation,\n\t\t\thardwareVersion,\n\t\t\tresume,\n\t\t\tnonSecureTransfer,\n\t\t});\n\t}\n\n\tpublic manufacturerId: number;\n\tpublic firmwareId: number;\n\tpublic checksum: number;\n\tpublic firmwareTarget?: number;\n\tpublic fragmentSize?: number;\n\tpublic activation?: boolean;\n\tpublic hardwareVersion?: number;\n\tpublic resume?: boolean;\n\tpublic nonSecureTransfer?: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.alloc(10, 0);\n\t\tthis.payload.writeUInt16BE(this.manufacturerId, 0);\n\t\tthis.payload.writeUInt16BE(this.firmwareId, 2);\n\t\tthis.payload.writeUInt16BE(this.checksum, 4);\n\t\tthis.payload[6] = this.firmwareTarget ?? 0;\n\t\t// 32 seems like a reasonable default fragment size,\n\t\t// but it should be specified anyways\n\t\tthis.payload.writeUInt16BE(this.fragmentSize ?? 32, 7);\n\t\tthis.payload[9] = (this.activation ? 0b1 : 0)\n\t\t\t| (this.nonSecureTransfer ? 0b10 : 0)\n\t\t\t| (this.resume ? 0b100 : 0);\n\t\t// Hardware version is not always set, but devices check it\n\t\tif (this.hardwareVersion != undefined) {\n\t\t\tthis.payload = Bytes.concat([\n\t\t\t\tthis.payload,\n\t\t\t\t[this.hardwareVersion],\n\t\t\t]);\n\t\t}\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"manufacturer id\": num2hex(this.manufacturerId),\n\t\t\t\"firmware id\": num2hex(this.firmwareId),\n\t\t\tchecksum: num2hex(this.checksum),\n\t\t};\n\t\tif (this.firmwareTarget != undefined) {\n\t\t\tmessage[\"firmware target\"] = this.firmwareTarget;\n\t\t}\n\t\tif (this.fragmentSize != undefined) {\n\t\t\tmessage[\"fragment size\"] = this.fragmentSize;\n\t\t}\n\t\tif (this.activation != undefined) {\n\t\t\tmessage.activation = this.activation;\n\t\t}\n\t\tif (this.resume != undefined) {\n\t\t\tmessage.resume = this.resume;\n\t\t}\n\t\tif (this.nonSecureTransfer != undefined) {\n\t\t\tmessage[\"non-secure transfer\"] = this.nonSecureTransfer;\n\t\t}\n\t\tif (this.hardwareVersion != undefined) {\n\t\t\tmessage[\"hardware version\"] = this.hardwareVersion;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface FirmwareUpdateMetaDataCCGetOptions {\n\tnumReports: number;\n\treportNumber: number;\n}\n\n@CCCommand(FirmwareUpdateMetaDataCommand.Get)\n// This is sent to us from the node, so we expect no response\nexport class FirmwareUpdateMetaDataCCGet extends FirmwareUpdateMetaDataCC {\n\tpublic constructor(\n\t\toptions: WithAddress<FirmwareUpdateMetaDataCCGetOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.numReports = options.numReports;\n\t\tthis.reportNumber = options.reportNumber;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): FirmwareUpdateMetaDataCCGet {\n\t\tvalidatePayload(raw.payload.length >= 3);\n\t\tconst numReports = raw.payload[0];\n\t\tconst reportNumber = raw.payload.readUInt16BE(1) & 0x7fff;\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tnumReports,\n\t\t\treportNumber,\n\t\t});\n\t}\n\n\tpublic readonly numReports: number;\n\tpublic readonly reportNumber: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = new Bytes(3);\n\t\tthis.payload[0] = this.numReports;\n\t\tthis.payload.writeUInt16BE(this.reportNumber & 0x7fff, 1);\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"total # of reports\": this.numReports,\n\t\t\t\t\"report number\": this.reportNumber,\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface FirmwareUpdateMetaDataCCReportOptions {\n\tisLast: boolean;\n\treportNumber: number;\n\tfirmwareData: BytesView;\n}\n\n@CCCommand(FirmwareUpdateMetaDataCommand.Report)\n// We send this in reply to the Get command and expect no response\nexport class FirmwareUpdateMetaDataCCReport extends FirmwareUpdateMetaDataCC {\n\tpublic constructor(\n\t\toptions: WithAddress<FirmwareUpdateMetaDataCCReportOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.reportNumber = options.reportNumber;\n\t\tthis.firmwareData = options.firmwareData;\n\t\tthis.isLast = options.isLast;\n\t}\n\n\tpublic static from(\n\t\t_raw: CCRaw,\n\t\t_ctx: CCParsingContext,\n\t): FirmwareUpdateMetaDataCCReport {\n\t\t// TODO: Deserialize payload\n\t\tthrow new ZWaveError(\n\t\t\t`${this.name}: deserialization not implemented`,\n\t\t\tZWaveErrorCodes.Deserialization_NotImplemented,\n\t\t);\n\n\t\t// return new FirmwareUpdateMetaDataCCReport({\n\t\t// \tnodeId: ctx.sourceNodeId,\n\t\t// });\n\t}\n\n\tpublic isLast: boolean;\n\tpublic reportNumber: number;\n\tpublic firmwareData: BytesView;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst commandBuffer = Bytes.concat([\n\t\t\tnew Bytes(2), // placeholder for report number\n\t\t\tthis.firmwareData,\n\t\t]);\n\t\tcommandBuffer.writeUInt16BE(\n\t\t\t(this.reportNumber & 0x7fff) | (this.isLast ? 0x8000 : 0),\n\t\t\t0,\n\t\t);\n\n\t\t// V1 devices would consider the checksum to be part of the firmware data\n\t\t// so it must not be included for those\n\t\tconst ccVersion = getEffectiveCCVersion(ctx, this);\n\t\tif (ccVersion >= 2) {\n\t\t\t// Compute and save the CRC16 in the payload\n\t\t\t// The CC header is included in the CRC computation\n\t\t\tlet crc = CRC16_CCITT(Bytes.from([this.ccId, this.ccCommand]));\n\t\t\tcrc = CRC16_CCITT(commandBuffer, crc);\n\t\t\tthis.payload = Bytes.concat([\n\t\t\t\tcommandBuffer,\n\t\t\t\tnew Bytes(2),\n\t\t\t]);\n\t\t\tthis.payload.writeUInt16BE(crc, this.payload.length - 2);\n\t\t} else {\n\t\t\tthis.payload = commandBuffer;\n\t\t}\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"report #\": this.reportNumber,\n\t\t\t\t\"is last\": this.isLast,\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface FirmwareUpdateMetaDataCCStatusReportOptions {\n\tstatus: FirmwareUpdateStatus;\n\twaitTime?: number;\n}\n\n@CCCommand(FirmwareUpdateMetaDataCommand.StatusReport)\nexport class FirmwareUpdateMetaDataCCStatusReport\n\textends FirmwareUpdateMetaDataCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<FirmwareUpdateMetaDataCCStatusReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.status = options.status;\n\t\tthis.waitTime = options.waitTime;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): FirmwareUpdateMetaDataCCStatusReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst status: FirmwareUpdateStatus = raw.payload[0];\n\t\tlet waitTime: number | undefined;\n\t\tif (raw.payload.length >= 3) {\n\t\t\twaitTime = raw.payload.readUInt16BE(1);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tstatus,\n\t\t\twaitTime,\n\t\t});\n\t}\n\n\tpublic readonly status: FirmwareUpdateStatus;\n\t/** The wait time in seconds before the node becomes available for communication after the update */\n\tpublic readonly waitTime?: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = new Bytes(3);\n\t\tthis.payload[0] = this.status;\n\t\tthis.payload.writeUInt16BE(this.waitTime ?? 0, 1);\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\tstatus: getEnumMemberName(FirmwareUpdateStatus, this.status),\n\t\t};\n\t\tif (this.waitTime != undefined) {\n\t\t\tmessage[\"wait time\"] = `${this.waitTime} seconds`;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface FirmwareUpdateMetaDataCCActivationReportOptions {\n\tmanufacturerId: number;\n\tfirmwareId: number;\n\tchecksum: number;\n\tfirmwareTarget: number;\n\tactivationStatus: FirmwareUpdateActivationStatus;\n\thardwareVersion?: number;\n}\n\n@CCCommand(FirmwareUpdateMetaDataCommand.ActivationReport)\nexport class FirmwareUpdateMetaDataCCActivationReport\n\textends FirmwareUpdateMetaDataCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<FirmwareUpdateMetaDataCCActivationReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.manufacturerId = options.manufacturerId;\n\t\tthis.firmwareId = options.firmwareId;\n\t\tthis.checksum = options.checksum;\n\t\tthis.firmwareTarget = options.firmwareTarget;\n\t\tthis.activationStatus = options.activationStatus;\n\t\tthis.hardwareVersion = options.hardwareVersion;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): FirmwareUpdateMetaDataCCActivationReport {\n\t\tvalidatePayload(raw.payload.length >= 8);\n\t\tconst manufacturerId = raw.payload.readUInt16BE(0);\n\t\tconst firmwareId = raw.payload.readUInt16BE(2);\n\t\tconst checksum = raw.payload.readUInt16BE(4);\n\t\tconst firmwareTarget = raw.payload[6];\n\t\tconst activationStatus: FirmwareUpdateActivationStatus = raw.payload[7];\n\t\tlet hardwareVersion: number | undefined;\n\t\tif (raw.payload.length >= 9) {\n\t\t\t// V5+\n\t\t\thardwareVersion = raw.payload[8];\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tmanufacturerId,\n\t\t\tfirmwareId,\n\t\t\tchecksum,\n\t\t\tfirmwareTarget,\n\t\t\tactivationStatus,\n\t\t\thardwareVersion,\n\t\t});\n\t}\n\n\tpublic readonly manufacturerId: number;\n\tpublic readonly firmwareId: number;\n\tpublic readonly checksum: number;\n\tpublic readonly firmwareTarget: number;\n\tpublic readonly activationStatus: FirmwareUpdateActivationStatus;\n\tpublic readonly hardwareVersion?: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = new Bytes(8);\n\t\tthis.payload.writeUInt16BE(this.manufacturerId, 0);\n\t\tthis.payload.writeUInt16BE(this.firmwareId, 2);\n\t\tthis.payload.writeUInt16BE(this.checksum, 4);\n\t\tthis.payload[6] = this.firmwareTarget;\n\t\tthis.payload[7] = this.activationStatus;\n\t\tif (this.hardwareVersion != undefined) {\n\t\t\tthis.payload = Bytes.concat([\n\t\t\t\tthis.payload,\n\t\t\t\t[this.hardwareVersion],\n\t\t\t]);\n\t\t}\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"manufacturer id\": num2hex(this.manufacturerId),\n\t\t\t\"firmware id\": num2hex(this.firmwareId),\n\t\t\tchecksum: num2hex(this.checksum),\n\t\t\t\"firmware target\": this.firmwareTarget,\n\t\t\t\"activation status\": getEnumMemberName(\n\t\t\t\tFirmwareUpdateActivationStatus,\n\t\t\t\tthis.activationStatus,\n\t\t\t),\n\t\t};\n\t\tif (this.hardwareVersion != undefined) {\n\t\t\tmessage.hardwareVersion = this.hardwareVersion;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface FirmwareUpdateMetaDataCCActivationSetOptions {\n\tmanufacturerId: number;\n\tfirmwareId: number;\n\tchecksum: number;\n\tfirmwareTarget: number;\n\t// V5+\n\thardwareVersion?: number;\n}\n\n@CCCommand(FirmwareUpdateMetaDataCommand.ActivationSet)\n@expectedCCResponse(FirmwareUpdateMetaDataCCActivationReport)\nexport class FirmwareUpdateMetaDataCCActivationSet\n\textends FirmwareUpdateMetaDataCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<FirmwareUpdateMetaDataCCActivationSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.manufacturerId = options.manufacturerId;\n\t\tthis.firmwareId = options.firmwareId;\n\t\tthis.checksum = options.checksum;\n\t\tthis.firmwareTarget = options.firmwareTarget;\n\t\tthis.hardwareVersion = options.hardwareVersion;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): FirmwareUpdateMetaDataCCActivationSet {\n\t\tvalidatePayload(raw.payload.length >= 7);\n\t\tconst manufacturerId = raw.payload.readUInt16BE(0);\n\t\tconst firmwareId = raw.payload.readUInt16BE(2);\n\t\tconst checksum = raw.payload.readUInt16BE(4);\n\t\tconst firmwareTarget = raw.payload[6];\n\t\tlet hardwareVersion: number | undefined;\n\t\tif (raw.payload.length >= 8) {\n\t\t\t// V5+\n\t\t\thardwareVersion = raw.payload[7];\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tmanufacturerId,\n\t\t\tfirmwareId,\n\t\t\tchecksum,\n\t\t\tfirmwareTarget,\n\t\t\thardwareVersion,\n\t\t});\n\t}\n\n\tpublic manufacturerId: number;\n\tpublic firmwareId: number;\n\tpublic checksum: number;\n\tpublic firmwareTarget: number;\n\tpublic hardwareVersion?: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = new Bytes(7);\n\t\tthis.payload.writeUInt16BE(this.manufacturerId, 0);\n\t\tthis.payload.writeUInt16BE(this.firmwareId, 2);\n\t\tthis.payload.writeUInt16BE(this.checksum, 4);\n\t\tthis.payload[6] = this.firmwareTarget;\n\t\tif (this.hardwareVersion != undefined) {\n\t\t\tthis.payload = Bytes.concat([\n\t\t\t\tthis.payload,\n\t\t\t\t[this.hardwareVersion],\n\t\t\t]);\n\t\t}\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"manufacturer id\": num2hex(this.manufacturerId),\n\t\t\t\"firmware id\": num2hex(this.firmwareId),\n\t\t\tchecksum: num2hex(this.checksum),\n\t\t\t\"firmware target\": this.firmwareTarget,\n\t\t};\n\t\tif (this.hardwareVersion != undefined) {\n\t\t\tmessage[\"hardware version\"] = this.hardwareVersion;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface FirmwareUpdateMetaDataCCPrepareReportOptions {\n\tstatus: FirmwareDownloadStatus;\n\tchecksum: number;\n}\n\n@CCCommand(FirmwareUpdateMetaDataCommand.PrepareReport)\nexport class FirmwareUpdateMetaDataCCPrepareReport\n\textends FirmwareUpdateMetaDataCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<FirmwareUpdateMetaDataCCPrepareReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\tthis.status = options.status;\n\t\tthis.checksum = options.checksum;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): FirmwareUpdateMetaDataCCPrepareReport {\n\t\tvalidatePayload(raw.payload.length >= 3);\n\t\tconst status: FirmwareDownloadStatus = raw.payload[0];\n\t\tconst checksum = raw.payload.readUInt16BE(1);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tstatus,\n\t\t\tchecksum,\n\t\t});\n\t}\n\n\tpublic readonly status: FirmwareDownloadStatus;\n\tpublic readonly checksum: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = new Bytes(3);\n\t\tthis.payload[0] = this.status;\n\t\tthis.payload.writeUInt16BE(this.checksum, 1);\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\tstatus: getEnumMemberName(FirmwareDownloadStatus, this.status),\n\t\t\t\tchecksum: num2hex(this.checksum),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface FirmwareUpdateMetaDataCCPrepareGetOptions {\n\tmanufacturerId: number;\n\tfirmwareId: number;\n\tfirmwareTarget: number;\n\tfragmentSize: number;\n\thardwareVersion: number;\n}\n\n@CCCommand(FirmwareUpdateMetaDataCommand.PrepareGet)\n@expectedCCResponse(FirmwareUpdateMetaDataCCPrepareReport)\nexport class FirmwareUpdateMetaDataCCPrepareGet\n\textends FirmwareUpdateMetaDataCC\n{\n\tpublic constructor(\n\t\toptions: WithAddress<FirmwareUpdateMetaDataCCPrepareGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.manufacturerId = options.manufacturerId;\n\t\tthis.firmwareId = options.firmwareId;\n\t\tthis.firmwareTarget = options.firmwareTarget;\n\t\tthis.fragmentSize = options.fragmentSize;\n\t\tthis.hardwareVersion = options.hardwareVersion;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): FirmwareUpdateMetaDataCCPrepareGet {\n\t\tvalidatePayload(raw.payload.length >= 8);\n\t\tconst manufacturerId = raw.payload.readUInt16BE(0);\n\t\tconst firmwareId = raw.payload.readUInt16BE(2);\n\t\tconst firmwareTarget = raw.payload[4];\n\t\tconst fragmentSize = raw.payload.readUInt16BE(5);\n\t\tconst hardwareVersion = raw.payload[7];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tmanufacturerId,\n\t\t\tfirmwareId,\n\t\t\tfirmwareTarget,\n\t\t\tfragmentSize,\n\t\t\thardwareVersion,\n\t\t});\n\t}\n\n\tpublic manufacturerId: number;\n\tpublic firmwareId: number;\n\tpublic firmwareTarget: number;\n\tpublic fragmentSize: number;\n\tpublic hardwareVersion: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = new Bytes(8);\n\t\tthis.payload.writeUInt16BE(this.manufacturerId, 0);\n\t\tthis.payload.writeUInt16BE(this.firmwareId, 2);\n\t\tthis.payload[4] = this.firmwareTarget;\n\t\tthis.payload.writeUInt16BE(this.fragmentSize, 5);\n\t\tthis.payload[7] = this.hardwareVersion;\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"manufacturer id\": num2hex(this.manufacturerId),\n\t\t\t\t\"firmware id\": num2hex(this.firmwareId),\n\t\t\t\t\"firmware target\": this.firmwareTarget,\n\t\t\t\t\"fragment size\": this.fragmentSize,\n\t\t\t\t\"hardware version\": this.hardwareVersion,\n\t\t\t},\n\t\t};\n\t}\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,6 +1,6 @@
1
1
  import type { CCEncodingContext, CCParsingContext } from "@zwave-js/cc";
2
2
  import { type WithAddress } from "@zwave-js/core";
3
- import { Bytes } from "@zwave-js/shared";
3
+ import { Bytes, type BytesView } from "@zwave-js/shared";
4
4
  import { CCAPI, type CCAPIEndpoint, type CCAPIHost } from "../lib/API.js";
5
5
  import { type CCRaw, CommandClass, type InterviewContext, type RefreshValuesContext } from "../lib/CommandClass.js";
6
6
  export type ManufacturerProprietaryCCConstructor<T extends typeof ManufacturerProprietaryCC = typeof ManufacturerProprietaryCC> = T & {
@@ -8,8 +8,8 @@ export type ManufacturerProprietaryCCConstructor<T extends typeof ManufacturerPr
8
8
  };
9
9
  export declare class ManufacturerProprietaryCCAPI extends CCAPI {
10
10
  constructor(host: CCAPIHost, endpoint: CCAPIEndpoint);
11
- sendData(manufacturerId: number, data?: Uint8Array): Promise<void>;
12
- sendAndReceiveData(manufacturerId: number, data?: Uint8Array): Promise<{
11
+ sendData(manufacturerId: number, data?: BytesView): Promise<void>;
12
+ sendAndReceiveData(manufacturerId: number, data?: BytesView): Promise<{
13
13
  manufacturerId: number | undefined;
14
14
  data: Bytes;
15
15
  } | undefined>;
@@ -17,7 +17,7 @@ export declare class ManufacturerProprietaryCCAPI extends CCAPI {
17
17
  export interface ManufacturerProprietaryCCOptions {
18
18
  manufacturerId?: number;
19
19
  unspecifiedExpectsResponse?: boolean;
20
- payload?: Uint8Array;
20
+ payload?: BytesView;
21
21
  }
22
22
  export declare class ManufacturerProprietaryCC extends CommandClass {
23
23
  ccCommand: undefined;