zwave-js
Version:
Z-Wave driver written entirely in JavaScript/TypeScript
660 lines • 31.1 kB
TypeScript
import { type CCAPIHost, CommandClass, type InterviewContext, type InterviewOptions, type PersistValuesContext, type Powerlevel, type RefreshValueTimeouts, type RefreshValuesContext, type SchedulePollOptions, type UserPreferences } from "@zwave-js/cc";
import { ConfigManager, type DeviceConfig } from "@zwave-js/config";
import { type CCId, CommandClasses, type LogConfig, type LogNodeOptions, type MaybeNotKnown, SecurityClass, SecurityManager, SecurityManager2, type SendCommandOptions, type SendCommandReturnType, type SendMessageOptions, TransmitStatus, type ValueDB, type ValueID } from "@zwave-js/core";
import { type BootloaderChunk, type CLIChunk, FunctionType, Message, MessageHeaders, type ZWaveSerialBindingFactory, type ZWaveSerialPortImplementation } from "@zwave-js/serial";
import { type ContainsCC, SendDataBridgeRequest, type SendDataMessage, SendDataMulticastBridgeRequest, SendDataMulticastRequest, SendDataRequest } from "@zwave-js/serial/serialapi";
import { type BytesView, type Timer, TypedEventTarget } from "@zwave-js/shared";
import { ZWaveController } from "../controller/Controller.js";
import { type FirmwareUpdateInfo } from "../controller/_Types.js";
import type { Endpoint } from "../node/Endpoint.js";
import type { ZWaveNode } from "../node/Node.js";
import { type ZWaveNodeEventCallbacks } from "../node/_Types.js";
import { type AppInfo } from "../telemetry/statistics.js";
import { Bootloader } from "./Bootloader.js";
import { DriverMode } from "./DriverMode.js";
import { EndDeviceCLI } from "./EndDeviceCLI.js";
import { TaskScheduler } from "./Task.js";
import { Transaction } from "./Transaction.js";
import type { EditableZWaveOptions, PartialZWaveOptions, ZWaveOptions } from "./ZWaveOptions.js";
import { type OTWFirmwareUpdateProgress, type OTWFirmwareUpdateResult } from "./_Types.js";
export declare const libVersion: string;
export declare const libName: string;
/**
* Function signature for a message handler. The return type signals if the
* message was handled (`true`) or further handlers should be called (`false`)
*/
export type RequestHandler<T extends Message = Message> = (msg: T) => boolean | Promise<boolean>;
interface AwaitedThing<T> {
handler: (thing: T) => void;
timeout?: Timer;
predicate: (msg: T) => boolean;
refreshPredicate?: (msg: T) => boolean;
}
export type AwaitedBootloaderChunkEntry = AwaitedThing<BootloaderChunk>;
type PrefixedNodeEvents = {
[K in keyof ZWaveNodeEventCallbacks as K extends string ? `node ${K}` : never]: ZWaveNodeEventCallbacks[K];
};
export interface DriverEventCallbacks extends PrefixedNodeEvents {
"driver ready": () => void;
"bootloader ready": () => void;
"cli ready": () => void;
"all nodes ready": () => void;
"firmware update progress": (progress: OTWFirmwareUpdateProgress) => void;
"firmware update finished": (result: OTWFirmwareUpdateResult) => void;
error: (err: Error) => void;
}
export type DriverEvents = Extract<keyof DriverEventCallbacks, string>;
/**
* The driver is the core of this library. It controls the serial interface,
* handles transmission and receipt of messages and manages the network cache.
* Any action you want to perform on the Z-Wave network must go through a driver
* instance or its associated nodes.
*/
export declare class Driver extends TypedEventTarget<DriverEventCallbacks> implements CCAPIHost, InterviewContext, RefreshValuesContext, PersistValuesContext {
private port;
constructor(port: string | ZWaveSerialPortImplementation | ZWaveSerialBindingFactory, ...optionsAndPresets: (PartialZWaveOptions | undefined)[]);
private serialFactory;
/** The serial port instance */
private serial;
private messageEncodingContext;
private getEncodingContext;
private getMessageParsingContext;
private getCCParsingContext;
private queue;
private immediateQueue;
private serialAPIQueue;
private requeueTimers;
private _lastTransactionEnd;
private _lastPollCommandTime;
private _pollDelayTimer;
/** Gives access to the transaction queues, ordered by priority */
private get queues();
private initTransactionQueues;
private destroyTransactionQueues;
private _scheduler;
get scheduler(): TaskScheduler;
private queuePaused;
/** Used to immediately abort ongoing Serial API commands */
private abortSerialAPICommand;
private initSerialAPIQueue;
private destroySerialAPIQueue;
private _queuesBusyFlags;
private _queueIdle;
/** Whether the queue is currently idle */
get queueIdle(): boolean;
private set queueIdle(value);
/** A map of handlers for all sorts of requests */
private requestHandlers;
/** A list of awaited message headers */
private awaitedMessageHeaders;
/** A list of awaited messages */
private awaitedMessages;
/** A list of awaited commands */
private awaitedCommands;
/** A list of awaited chunks from the bootloader */
private awaitedBootloaderChunks;
/** A list of awaited chunks from the end device CLI */
private awaitedCLIChunks;
/** A list of promises waiting for the queues to become idle */
private awaitedIdle;
/** A map of Node ID -> ongoing sessions */
private nodeSessions;
private ensureNodeSessions;
private _requestStorage;
readonly cacheDir: string;
private _valueDB;
private _metadataDB;
private _networkCache;
private _configManager;
get configManager(): ConfigManager;
get configVersion(): string;
private _logContainer;
private _driverLog;
private _controllerLog;
logNode(nodeId: number, message: string, level?: LogNodeOptions["level"]): void;
logNode(nodeId: number, options: LogNodeOptions): void;
private _controller;
/** Encapsulates information about the Z-Wave controller and provides access to its nodes */
get controller(): ZWaveController;
/** While in bootloader mode, this encapsulates information about the bootloader and its state */
private _bootloader;
get bootloader(): Bootloader;
private _cli;
/** While in end device CLI mode, this encapsulates information about the CLI and its state */
get cli(): EndDeviceCLI;
/** Determines which kind of Z-Wave application the driver is currently communicating with */
get mode(): DriverMode;
private _recoveryPhase;
private _securityManager;
/**
* **!!! INTERNAL !!!**
*
* Not intended to be used by applications
*/
get securityManager(): SecurityManager | undefined;
private _securityManager2;
/**
* **!!! INTERNAL !!!**
*
* Not intended to be used by applications
*/
get securityManager2(): SecurityManager2 | undefined;
private _securityManagerLR;
/**
* **!!! INTERNAL !!!**
*
* Not intended to be used by applications
*/
get securityManagerLR(): SecurityManager2 | undefined;
private _learnModeAuthenticatedKeyPair;
/**
* **!!! INTERNAL !!!**
*
* Not intended to be used by applications. Use `controller.homeId` instead!
*/
get homeId(): number;
/**
* **!!! INTERNAL !!!**
*
* Not intended to be used by applications. Use `controller.ownNodeId` instead!
*/
get ownNodeId(): number;
tryGetNode(msg: Message): ZWaveNode | undefined;
tryGetEndpoint(cc: CommandClass): Endpoint | undefined;
/**
* **!!! INTERNAL !!!**
*
* Not intended to be used by applications
*/
getValueDB(nodeId: number): ValueDB;
/**
* **!!! INTERNAL !!!**
*
* Not intended to be used by applications
*/
tryGetValueDB(nodeId: number): ValueDB | undefined;
getDeviceConfig(nodeId: number): DeviceConfig | undefined;
lookupManufacturer(manufacturerId: number): string | undefined;
getHighestSecurityClass(nodeId: number): MaybeNotKnown<SecurityClass>;
hasSecurityClass(nodeId: number, securityClass: SecurityClass): MaybeNotKnown<boolean>;
/**
* **!!! INTERNAL !!!**
*
* Not intended to be used by applications
*/
setSecurityClass(nodeId: number, securityClass: SecurityClass, granted: boolean): void;
/** Updates the logging configuration without having to restart the driver. */
updateLogConfig(config: Partial<LogConfig>): void;
/** Returns the current logging configuration. */
getLogConfig(): LogConfig;
/** Updates the preferred sensor scales to use for node queries */
setPreferredScales(scales: ZWaveOptions["preferences"]["scales"]): void;
/**
* **!!! INTERNAL !!!**
*
* Not intended to be used by applications
*/
getUserPreferences(): UserPreferences;
/**
* **!!! INTERNAL !!!**
*
* Not intended to be used by applications
*/
getInterviewOptions(): InterviewOptions;
/**
* **!!! INTERNAL !!!**
*
* Not intended to be used by applications
*/
getRefreshValueTimeouts(): RefreshValueTimeouts;
/**
* Enumerates all existing serial ports.
* @param local Whether to include local serial ports
* @param remote Whether to discover remote serial ports using an mDNS query for the `_zwave._tcp` domain
*/
static enumerateSerialPorts({ local, remote }?: {
local?: boolean;
remote?: boolean;
}): Promise<string[]>;
/** Updates a subset of the driver options on the fly */
updateOptions(options: EditableZWaveOptions): void;
private _options;
get options(): Readonly<ZWaveOptions>;
/**
* The host bindings used to access file system etc.
*/
private bindings;
private _wasStarted;
private _isOpen;
/** Start the driver */
start(): Promise<void>;
private detectMode;
private _controllerInterviewed;
private _nodesReady;
private _nodesReadyEventEmitted;
private _isOpeningSerialPort;
private openSerialport;
/** Indicates whether all nodes are ready, i.e. the "all nodes ready" event has been emitted */
get allNodesReady(): boolean;
private getJsonlDBOptions;
private initNetworkCache;
private initValueDBs;
private performCacheMigration;
private initializeControllerAndNodes;
private autoRefreshNodeValueTimers;
private retryNodeInterviewTimeouts;
/** Adds the necessary event handlers for a node instance */
private addNodeEventHandlers;
/** Removes a node's event handlers that were added with addNodeEventHandlers */
private removeNodeEventHandlers;
/** Is called when a node wakes up */
private onNodeWakeUp;
/** Is called when a node goes to sleep */
private onNodeSleep;
/** Is called when a previously dead node starts communicating again */
private onNodeAlive;
/** Is called when a node is marked as dead */
private onNodeDead;
/** Is called when a node is ready to be used */
private onNodeReady;
/** Checks if all nodes are ready and emits the "all nodes ready" event if they are */
private checkAllNodesReady;
private _statisticsEnabled;
/** Whether reporting usage statistics is currently enabled */
get statisticsEnabled(): boolean;
private statisticsAppInfo;
private userAgentComponents;
/**
* Updates individual components of the user agent. Versions for individual applications can be added or removed.
* @param components An object with application/module/component names and their versions. Set a version to `null` or `undefined` explicitly to remove it from the user agent.
*/
updateUserAgent(components: Record<string, string | null | undefined>): void;
/**
* Returns the effective user agent string for the given components.
* The driver name and version is automatically prepended and the statisticsAppInfo data is automatically appended if no components were given.
*/
private getEffectiveUserAgentString;
private _userAgent;
/** Returns the user agent string used for service requests */
get userAgent(): string;
/** Returns the user agent string combined with the additional components (if given) */
getUserAgentStringWithComponents(components?: Record<string, string | null | undefined>): string;
/**
* Enable sending usage statistics. Although this does not include any sensitive information, we expect that you
* inform your users before enabling statistics.
*/
enableStatistics(appInfo: Pick<AppInfo, "applicationName" | "applicationVersion">): void;
/**
* Disable sending usage statistics
*/
disableStatistics(): void;
private statisticsTimeout;
private compileAndSendStatistics;
/** Is called when a node interview is completed */
private onNodeInterviewCompleted;
/** This is called when a new node was found and is being added to the network */
private onNodeFound;
/** This is called when a new node has been added to the network */
private onNodeAdded;
/** This is called when a node was removed from the network */
private onNodeRemoved;
private onControllerStatusChanged;
private onNetworkFound;
private onNetworkJoined;
private onNetworkLeft;
private recreateNetworkCacheAndValueDBs;
/**
* Returns the time in seconds to actually wait after a firmware upgrade, depending on what the device said.
* This number will always be a bit greater than the advertised duration, because devices have been found to take longer to actually reboot.
*/
getConservativeWaitTimeAfterFirmwareUpdate(advertisedWaitTime: number | undefined): number;
private onNodeFirmwareUpdated;
/** This is called when a node emits a `"notification"` event */
private onNodeNotification;
/** Checks if there are any pending messages for the given node */
private hasPendingMessages;
/** Checks if there are any pending transactions that match the given predicate */
hasPendingTransactions(predicate: (t: Transaction) => boolean): boolean;
/**
* Retrieves the maximum version of a command class the given endpoint supports.
* Returns 0 when the CC is not supported. Also returns 0 when the node was not found.
* Falls back to querying the root endpoint if an endpoint was not found on the node
*
* @param cc The command class whose version should be retrieved
* @param nodeId The node for which the CC version should be retrieved
* @param endpointIndex The endpoint in question
*/
getSupportedCCVersion(cc: CommandClasses, nodeId: number, endpointIndex?: number): number;
/**
* Retrieves the maximum version of a command class that can be used to communicate with a node.
* Returns the highest implemented version if the node's CC version is unknown.
* Returns `undefined` for CCs that are not implemented in this library yet.
*
* @param cc The command class whose version should be retrieved
* @param nodeId The node for which the CC version should be retrieved
* @param endpointIndex The endpoint for which the CC version should be retrieved
*/
getSafeCCVersion(cc: CommandClasses, nodeId: number, endpointIndex?: number): number | undefined;
/**
* Determines whether a CC must be secure for a given node and endpoint.
*
* @param ccId The command class in question
* @param nodeId The node for which the CC security should be determined
* @param endpointIndex The endpoint for which the CC security should be determined
*/
isCCSecure(ccId: CommandClasses, nodeId: number, endpointIndex?: number): boolean;
/**
* **!!! INTERNAL !!!**
*
* Not intended to be used by applications.
* Needed for compatibility with CCAPIHost
*/
schedulePoll(nodeId: number, valueId: ValueID, options: SchedulePollOptions): boolean;
private isSoftResetting;
private maySoftReset;
/**
* Soft-resets the controller if the feature is enabled
*/
trySoftReset(): Promise<void>;
/**
* Instruct the controller to soft-reset.
*
* **Warning:** USB modules will reconnect, meaning that they might get a new address.
*
* **Warning:** This call will throw if soft-reset is not enabled.
*/
softReset(): Promise<void>;
private softResetInternal;
/** Soft-reset the Z-Wave module and restart the driver instance */
softResetAndRestart(): Promise<void>;
/**
* Checks whether recovering an unresponsive controller is enabled
* and whether the driver is in a state where it makes sense.
*/
private mayRecoverUnresponsiveController;
private ensureSerialAPI;
private _ensureCLIReadyPromise;
private ensureCLIReady;
/**
* Performs a hard reset on the controller. This wipes out all configuration!
*
* The returned Promise resolves when the hard reset has been performed.
* It does not wait for the initialization process which is started afterwards.
*/
hardReset(): Promise<void>;
/**
* Instructs the Z-Wave API to shut down in order to safely remove the power.
* This will destroy the driver instance if it succeeds.
*/
shutdown(): Promise<boolean>;
private _destroyPromise;
private get wasDestroyed();
/**
* Ensures that the driver is ready to communicate (serial port open and not destroyed).
* If desired, also checks that the controller interview has been completed.
*/
private ensureReady;
/** Indicates whether the driver is ready, i.e. the "driver ready" event was emitted */
get ready(): boolean;
private destroyWithMessage;
/**
* Terminates the driver instance and closes the underlying serial connection.
* Must be called under any circumstances.
*/
destroy(): Promise<void>;
private destroyController;
private closeDatabases;
private clearAllTimeouts;
private handleSerialData;
private handleSerialPortClosedUnexpectedly;
private serialport_onData;
/** Handles a decoding error and returns the desired reply to the stick */
private handleDecodeError;
private mustReplyWithSecurityS2MOS;
private handleSecurityS2DecodeError;
/** Checks if a transaction failed because a node didn't respond in time */
private isMissingNodeACK;
private shouldRequestWakeupOnDemand;
private partialCCSessions;
private getPartialCCSession;
private assemblePartialCCs;
private handleTransportServiceCommand;
private handleUnsolicitedMessage;
private handleSerialAPIStartedUnexpectedly;
/**
* Registers a handler for messages that are not handled by the driver as part of a message exchange.
* The handler function needs to return a boolean indicating if the message has been handled.
* Registered handlers are called in sequence until a handler returns `true`.
*
* @param fnType The function type to register the handler for
* @param handler The request handler callback
* @param oneTime Whether the handler should be removed after its first successful invocation
*/
registerRequestHandler<T extends Message>(fnType: FunctionType, handler: RequestHandler<T>, oneTime?: boolean): void;
/**
* Unregisters a message handler that has been added with `registerRequestHandler`
* @param fnType The function type to unregister the handler for
* @param handler The previously registered request handler callback
*/
unregisterRequestHandler(fnType: FunctionType, handler: RequestHandler): void;
/**
* Checks whether a CC has a lower than expected security level and needs to be discarded
*/
private isSecurityLevelTooLow;
/** Checks whether a CC should be discarded */
private shouldDiscardCC;
/**
* Is called when a Response-type message was received
*/
private handleResponse;
private handleRequest;
private hasLoggedNoNetworkKey;
private handleSecurityNonceGet;
/**
* Is called when a nonce report is received that does not belong to any transaction.
* The received nonce reports are stored as "free" nonces
*/
private handleSecurityNonceReport;
private handleSecurityCommandsSupportedGet;
private handleSecurity2NonceGet;
/**
* Is called when a nonce report is received that does not belong to any transaction.
*/
private handleSecurity2NonceReport;
private handleSecurity2CommandsSupportedGet;
/**
* Returns the next callback ID. Callback IDs are used to correlate requests
* to the controller/nodes with its response
*/
readonly getNextCallbackId: () => number;
private readonly supervisionSessionIDs;
/**
* Returns the next session ID for Supervision CC
*/
getNextSupervisionSessionId(nodeId: number): number;
/**
* Returns the next session ID for Transport Service CC
*/
readonly getNextTransportServiceSessionId: () => number;
private encapsulateCommands;
unwrapCommands(msg: Message & ContainsCC): void;
private shouldPersistCCValues;
/** Persists the values contained in a Command Class in the corresponding nodes's value DB */
private persistCCValues;
/**
* Gets called whenever any Serial API command succeeded or a SendData command had a negative callback.
*/
private handleSerialAPICommandResult;
private shouldUseLowPriorityForSupervisionReport;
private mayStartTransaction;
private markQueueBusy;
private drainTransactionQueue;
private executeTransaction;
/**
* Provides access to the result Promise for the currently executed serial API command
*/
private _currentSerialAPICommandPromise;
private drainSerialAPIQueue;
private triggerQueues;
/** Puts a message on the serial API queue and returns or throws the command result */
private queueSerialAPICommand;
private mayRetrySerialAPICommand;
private executeSerialAPICommand;
private getQueueForTransaction;
/**
* Sends a message to the Z-Wave stick.
* @param msg The message to send
* @param options (optional) Options regarding the message transmission
*/
sendMessage<TResponse extends Message = Message>(msg: Message, options?: SendMessageOptions): Promise<TResponse>;
/** Wraps a CC in the correct SendData message to use for sending */
createSendDataMessage(command: CommandClass, options?: Omit<SendCommandOptions, keyof SendMessageOptions>): SendDataMessage & ContainsCC;
private sendCommandInternal;
private sendSupervisedCommand;
/**
* Sends a command to a Z-Wave node. The return value depends on several factors:
* * If the node returns a command in response, that command will be the return value.
* * If the command is a SET-type command and Supervision CC can and should be used, a {@link SupervisionResult} will be returned.
* * If the command expects no response **or** the response times out, nothing will be returned.
*
* @param command The command to send. It will be encapsulated in a SendData[Multicast]Request.
* @param options (optional) Options regarding the message transmission
*/
sendCommand<TResponse extends CCId | undefined = undefined>(command: CommandClass, options?: SendCommandOptions): Promise<SendCommandReturnType<TResponse>>;
private abortSendData;
/**
* Sends a low-level message like ACK, NAK or CAN immediately
* @param header The low-level message to send
*/
private writeHeader;
private writeSerial;
waitForMessageHeader<T extends MessageHeaders>(predicate: (header: MessageHeaders) => header is T, timeout?: number, abortSignal?: AbortSignal): Promise<T>;
waitForMessageHeader(predicate: (header: MessageHeaders) => boolean, timeout?: number, abortSignal?: AbortSignal): Promise<MessageHeaders>;
waitForMessage<T extends Message>(predicate: (msg: Message) => msg is T, timeout?: number, refreshPredicate?: (msg: Message) => boolean, abortSignal?: AbortSignal): Promise<T>;
waitForMessage<T extends Message>(predicate: (msg: Message) => boolean, timeout?: number, refreshPredicate?: (msg: Message) => boolean, abortSignal?: AbortSignal): Promise<T>;
waitForCommand<T extends CCId, U extends T>(predicate: (cc: CCId) => cc is U, timeout?: number, abortSignal?: AbortSignal): Promise<U>;
waitForCommand<T extends CCId>(predicate: (cc: CCId) => boolean, timeout?: number, abortSignal?: AbortSignal): Promise<T>;
/**
* Waits until the driver queues become idle or an optional timeout has elapsed.
* @param timeout The number of milliseconds to wait. If the timeout elapses, the returned promise will be rejected
* @param abortSignal An optional abort signal to cancel the wait
*/
waitForIdle(timeout?: number, abortSignal?: AbortSignal): Promise<void>;
/**
* Calls the given handler function every time a CommandClass is received that matches the given predicate.
* @param predicate A predicate function to test all incoming command classes
*/
registerCommandHandler<T extends CCId>(predicate: (cc: CCId) => boolean, handler: (cc: T) => void): {
unregister: () => void;
};
private handleFailedTransaction;
private rejectTransaction;
private resolveTransaction;
/** Checks if a message is allowed to go into the wakeup queue */
private mayMoveToWakeupQueue;
/** Moves all messages for a given node into the wakeup queue */
private moveMessagesToWakeupQueue;
/**
* Pauses the send queue, avoiding commands to be sent to the controller
*/
private pauseSendQueue;
/**
* Unpauses the send queue, allowing commands to be sent to the controller again
*/
private unpauseSendQueue;
private reduceQueues;
private reduceQueue;
private cachePurge;
/**
* Restores a previously stored Z-Wave network state from cache to speed up the startup process
*/
restoreNetworkStructureFromCache(): Promise<void>;
private sendNodeToSleepTimers;
/** Computes the maximum net CC payload size for the given CC or SendDataRequest */
computeNetCCPayloadSize(commandOrMsg: CommandClass | ((SendDataRequest | SendDataBridgeRequest) & ContainsCC), ignoreEncapsulation?: boolean): number;
/** Computes the maximum payload size that can be transmitted with the given message */
getMaxPayloadLength(msg: SendDataMessage): number;
exceedsMaxPayloadLength(msg: SendDataMessage): Promise<boolean>;
/** Determines time in milliseconds to wait for a report from a node */
getReportTimeout(msg: Message): number;
/** Returns the preferred constructor to use for singlecast SendData commands */
getSendDataSinglecastConstructor(): typeof SendDataRequest | typeof SendDataBridgeRequest;
/** Returns the preferred constructor to use for multicast SendData commands */
getSendDataMulticastConstructor(): typeof SendDataMulticastRequest | typeof SendDataMulticastBridgeRequest;
/**
* Checks whether there is a compatible update for the currently installed config package.
* Returns the new version if there is an update, `undefined` otherwise.
*/
checkForConfigUpdates(silent?: boolean): Promise<string | undefined>;
private _installConfigUpdatePromise;
/**
* Installs an update for the embedded configuration DB if there is a compatible one.
* Returns `true` when an update was installed, `false` otherwise.
*
* **Note:** Bugfixes and changes to device configuration generally require a restart or re-interview to take effect.
*/
installConfigUpdate(): Promise<boolean>;
private installConfigUpdateInternal;
private _otwFirmwareUpdateInProgress;
/**
* Returns whether a firmware update is in progress for the Z-Wave module.
*/
isOTWFirmwareUpdateInProgress(): boolean;
/**
* Updates the firmware of the controller using the given firmware file.
* The file can be provided as binary data or as a {@link FirmwareUpdateInfo} object as returned
* from the firmware update service. The latter will be downloaded automatically.
*
* The return value indicates whether the update was successful.
* **WARNING:** After a successful update, the Z-Wave driver will destroy itself so it can be restarted.
*
* **WARNING:** A failure during this process may put your controller in recovery mode, rendering it unusable until a correct firmware image is uploaded. Use at your own risk!
*/
firmwareUpdateOTW(data: BytesView | FirmwareUpdateInfo): Promise<OTWFirmwareUpdateResult>;
private extractOTWUpdateInfo;
private firmwareUpdateOTW500;
private firmwareUpdateOTW700;
private firmwareUpdateOTW700Internal;
private _enteringBootloader;
private _enterBootloaderPromise;
enterBootloader(): Promise<void>;
private enterBootloaderFromSerialAPI;
private enterBootloaderFromCLI;
private leaveBootloaderInternal;
/**
* Leaves the bootloader by running the application.
*/
leaveBootloader(): Promise<void>;
private serialport_onBootloaderData;
waitForBootloaderChunk<T extends BootloaderChunk>(predicate: (chunk: BootloaderChunk) => chunk is T, timeout?: number, abortSignal?: AbortSignal): Promise<T>;
waitForBootloaderChunk<T extends BootloaderChunk>(predicate: (chunk: BootloaderChunk) => boolean, timeout?: number, abortSignal?: AbortSignal): Promise<T>;
waitForCLIChunk<T extends CLIChunk>(predicate: (chunk: CLIChunk) => chunk is T, timeout?: number, abortSignal?: AbortSignal): Promise<T>;
waitForCLIChunk<T extends CLIChunk>(predicate: (chunk: CLIChunk) => boolean, timeout?: number, abortSignal?: AbortSignal): Promise<T>;
private serialport_onCLIData;
private pollBackgroundRSSITimer;
private lastBackgroundRSSITimestamp;
private hfBackgroundRSSIEndTimestamp;
private handleQueueIdleChange;
private setBackgroundRSSITimer;
private clearBackgroundRSSITimer;
/** Enable frequent RSSI monitoring for the given amount of milliseconds. During this time, the background RSSI will be measured every 2 seconds. */
enableFrequentRSSIMonitoring(durationMs: number): void;
/** Disable frequent RSSI monitoring */
disableFrequentRSSIMonitoring(): void;
get isFrequentRSSIMonitoringEnabled(): boolean;
private _powerlevelTestNodeContext;
/** Sends a NOP Power frame to the given node and returns the transmit status if the frame was sent */
sendTestFrame(nodeId: number, powerlevel: Powerlevel): Promise<TransmitStatus | undefined>;
/**
* Resets the S2 singlecast encryption state (SPAN) for the given node, which forces
* a re-synchronization on the next communication attempt.
*/
resetSPAN(nodeId: number): void;
/**
* Resets the S2 singlecast encryption state (SPAN) for all nodes, which forces
* a re-synchronization on the next communication attempt.
*/
resetAllSPANs(): void;
}
export {};
//# sourceMappingURL=Driver.d.ts.map