motion-master-client 0.0.421 → 0.0.423

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.
@@ -6,7 +6,7 @@ import { HardwareDescription, StackInfo } from './hardware-description';
6
6
  import { MotionMasterReqResSocket } from './motion-master-req-res-socket';
7
7
  import { UIFeaturesConfig } from './parameter';
8
8
  import { SystemLogLine } from './system-log-line';
9
- import { MotionMasterMessage, ParameterValueType, ParameterTypeValue, DeviceParameterValuesStatus, ParameterTypeValueKey, DeviceRefObj, DeviceRef, FullAutoTuningStatus, SystemVersionStatus, DeviceInfoStatus, DeviceParameterInfoStatus, GetDeviceParameterInfoRequest, GetDeviceParameterValuesRequest, GetMultiDeviceParameterValuesRequest, MultiDeviceParameterValuesStatus, SetDeviceParameterValuesRequest, SetMultiDeviceParameterValuesRequest, GetDeviceFileListRequest, DeviceFileListStatus, GetDeviceFileRequest, DeviceFileStatus, SetDeviceFileRequest, DeleteDeviceFileRequest, ResetDeviceFaultRequest, DeviceFaultResetStatus, StopDeviceRequest, DeviceStopStatus, StartDeviceFirmwareInstallationRequest, DeviceFirmwareInstallationStatus, GetDeviceLogRequest, DeviceLogStatus, StartCoggingTorqueRecordingRequest, CoggingTorqueRecordingStatus, GetCoggingTorqueDataRequest, CoggingTorqueDataStatus, StartOffsetDetectionRequest, OffsetDetectionStatus, StartPlantModelIdentificationRequest, PlantIdentificationStatus, ComputeAutoTuningGainsRequest, AutoTuningStatus, SetMotionControllerParametersRequest, MotionControllerStatus, EnableMotionControllerRequest, SetSignalGeneratorParametersRequest, SignalGeneratorStatus, StopSignalGeneratorRequest, StartMonitoringDeviceParameterValuesRequest, MonitoringParameterValuesStatus, StopMonitoringDeviceParameterValuesRequest, GetEthercatNetworkStateRequest, EthercatNetworkStateStatus, SetEthercatNetworkStateRequest, StartNarrowAngleCalibrationRequest, NarrowAngleCalibrationStatus, SetSystemClientTimeoutRequest, StartSystemIdentificationRequest, SystemIdentificationStatus, CirculoEncoderMagnetDistanceStatus, StartCirculoEncoderNarrowAngleCalibrationProcedureRequest, CirculoEncoderNarrowAngleCalibrationProcedureStatus, GetDeviceCiA402StateRequest, DeviceCiA402StateStatus, SetDeviceCiA402StateRequest, SystemLogStatus, StartDeviceSiiRestoreRequest, DeviceSiiRestoreStatus, StartOpenLoopFieldControlRequest, OpenLoopFieldControlStatus, ComputeFullAutoTuningGainsRequest, StartFullAutoTuningRequest, StopFullAutoTuningRequest, StartCirculoEncoderConfigurationRequest, CirculoEncoderConfigurationStatus, StopCirculoEncoderNarrowAngleCalibrationProcedureRequest, StartOsCommandRequest, OsCommandStatus, RestoreDefaultParametersType, DeviceParameterAddressValue, DeviceParameterIds, DeviceParameterInfo, RequestStatusMessage, UiPdoMapping, UiConfig, ExecuteForwardCallRequest, ForwardCallStatus, PlantModel, NotchFilter, LoadConfigStrategy, SystemInformationStatus, SetPdoModeRequest, PdoModeStatus, GetDeviceSiiRequest, DeviceSiiStatus, SmmAutomatedUpdate } from './types';
9
+ import { MotionMasterMessage, ParameterValueType, ParameterTypeValue, DeviceParameterValuesStatus, ParameterTypeValueKey, DeviceRefObj, DeviceRef, FullAutoTuningStatus, SystemVersionStatus, DeviceInfoStatus, DeviceParameterInfoStatus, GetDeviceParameterInfoRequest, GetDeviceParameterValuesRequest, GetMultiDeviceParameterValuesRequest, MultiDeviceParameterValuesStatus, SetDeviceParameterValuesRequest, SetMultiDeviceParameterValuesRequest, GetDeviceFileListRequest, DeviceFileListStatus, GetDeviceFileRequest, DeviceFileStatus, SetDeviceFileRequest, DeleteDeviceFileRequest, ResetDeviceFaultRequest, DeviceFaultResetStatus, StopDeviceRequest, DeviceStopStatus, StartDeviceFirmwareInstallationRequest, DeviceFirmwareInstallationStatus, GetDeviceLogRequest, DeviceLogStatus, StartCoggingTorqueRecordingRequest, CoggingTorqueRecordingStatus, GetCoggingTorqueDataRequest, CoggingTorqueDataStatus, StartOffsetDetectionRequest, OffsetDetectionStatus, StartPlantModelIdentificationRequest, PlantIdentificationStatus, ComputeAutoTuningGainsRequest, AutoTuningStatus, SetMotionControllerParametersRequest, MotionControllerStatus, EnableMotionControllerRequest, SetSignalGeneratorParametersRequest, SignalGeneratorStatus, StopSignalGeneratorRequest, StartMonitoringDeviceParameterValuesRequest, MonitoringParameterValuesStatus, StopMonitoringDeviceParameterValuesRequest, GetEthercatNetworkStateRequest, EthercatNetworkStateStatus, SetEthercatNetworkStateRequest, StartNarrowAngleCalibrationRequest, NarrowAngleCalibrationStatus, SetSystemClientTimeoutRequest, StartSystemIdentificationRequest, SystemIdentificationStatus, CirculoEncoderMagnetDistanceStatus, StartCirculoEncoderNarrowAngleCalibrationProcedureRequest, CirculoEncoderNarrowAngleCalibrationProcedureStatus, GetDeviceCiA402StateRequest, DeviceCiA402StateStatus, SetDeviceCiA402StateRequest, SystemLogStatus, StartDeviceSiiRestoreRequest, DeviceSiiRestoreStatus, StartOpenLoopFieldControlRequest, OpenLoopFieldControlStatus, ComputeFullAutoTuningGainsRequest, StartFullAutoTuningRequest, StopFullAutoTuningRequest, StartCirculoEncoderConfigurationRequest, CirculoEncoderConfigurationStatus, StopCirculoEncoderNarrowAngleCalibrationProcedureRequest, StartOsCommandRequest, OsCommandStatus, RestoreDefaultParametersType, DeviceParameterAddressValue, DeviceParameterIds, DeviceParameterInfo, RequestStatusMessage, UiPdoMapping, UiConfig, ExecuteForwardCallRequest, ForwardCallStatus, PlantModel, NotchFilter, LoadConfigStrategy, SystemInformationStatus, SetPdoModeRequest, PdoModeStatus, GetDeviceSiiRequest, DeviceSiiStatus, SmmAutomatedUpdate, SmmAutomatedUpdateProgress, SmmSoftwareUpdateProgress } from './types';
10
10
  import { Cia402State, ModesOfOperation } from './cia402';
11
11
  import { EncoderRegisterCommunicationOsCommandResponse, MotorPhaseOrderDetectionOsCommandResponse, OpenPhaseDetectionOsCommandResponse, OsCommandMode, OsCommandResponse, PhaseResistanceMeasurementOsCommandResponse, PhaseInductanceMeasurementOsCommandResponse, PolePairDetectionOsCommandResponse, CommutationOffsetMeasurementOsCommandResponse, IcMuCalibrationModeOsCommandResponse, OpenLoopFieldModeOsCommandResponse, HrdStreamingOsCommandResponse, TorqueConstantMeasurementOsCommandResponse, SkippedCyclesCounterOsCommandResponse, IgnoreBissStatusBitsOsCommandResponse, SystemIdentificationOsCommandResponse, KublerEncoderCommandOsCommandResponse, UseInternalEncoderVelocityOsCommandResponse, KublerEncoderRegisterCommunicationOsCommandResponse, SmmAcyclicHandlerOsCommandResponse, HrdStreamingOsCommandAction, HrdStreamingOsCommandDataIndex, SmmAcyclicHandlerLoadParametersForVerificationOsCommandResponse, ChirpSignalOptions, OsCommandAbortResult } from './os-command';
12
12
  import { IntegroVariant } from './integro-variant';
@@ -238,9 +238,25 @@ export declare class MotionMasterReqResClient {
238
238
  *
239
239
  * If the requested file content is empty, Motion Master will return a not found error. This is subject to change now that Motion Master reads the file error codes.
240
240
  *
241
- * SOMANET_CiA_402.xml and SOMANET_CiA_402.xml.zip files are stored in IndexedDB for faster access.
241
+ * The ESI file ("SOMANET_CiA_402.xml" or "SOMANET_CiA_402.xml.zip") is never read from the device, see {@link getEsiFromIndexedDB}.
242
242
  */
243
243
  getDeviceFile(props: GetDeviceFileRequest, requestTimeout: number, messageId?: string): Observable<DeviceFileStatus>;
244
+ /**
245
+ * Returns the ESI file cached in IndexedDB under the firmware version the device reports in 0x100A:00.
246
+ *
247
+ * The ESI file is never read from the device. Firmware installation no longer writes it to the device (see
248
+ * {@link installFirmwareAndCacheEsi}), and Motion Master does not remove a skipped file, so the file on the device may
249
+ * belong to an older firmware. Neither the file nor its ESI revision tells which firmware it belongs to.
250
+ * Caching it under the installed version would hide the correct ESI file for good.
251
+ *
252
+ * The ESI file gets into IndexedDB only from a firmware package: at firmware installation, see
253
+ * {@link cacheEsiFromFirmwarePackage}, or when a user loads it from a package in OBLAC Drives.
254
+ *
255
+ * Returns a failed status with the NOT_FOUND error code when the ESI file is not cached for the installed firmware,
256
+ * or when there is no IndexedDB, as outside the browser. Returns a failed status with the FAILED error code when the
257
+ * firmware version or IndexedDB can't be read.
258
+ */
259
+ private getEsiFromIndexedDB;
244
260
  private getDeviceFileUsingResolvedDeviceAddress;
245
261
  /**
246
262
  * Fixing a production screw-up that affects a very important customer. Added on February 29th, 2024.
@@ -315,8 +331,7 @@ export declare class MotionMasterReqResClient {
315
331
  * Extracts the ESI file (SOMANET_CiA_402.xml) from a firmware package and stores its unzipped content in
316
332
  * IndexedDB, keyed by the given firmware version.
317
333
  *
318
- * This is the install-time counterpart to the read-time caching in {@link getDeviceFile}: once the ESI is
319
- * cached here, OBLAC can resolve it from IndexedDB without reading it back from the drive. This is what
334
+ * IndexedDB is the only source of the ESI file: {@link getDeviceFile} never reads it from the drive. This is what
320
335
  * allows the ESI file (SOMANET_CiA_402.xml.zip) to be skipped during firmware installation, which avoids
321
336
  * slow and unreliable FoE transfers and works around devices (e.g. NetX) that reject writing that file.
322
337
  *
@@ -337,17 +352,18 @@ export declare class MotionMasterReqResClient {
337
352
  * user-overridable: when `props.skipFiles` is provided it is passed through unchanged, so a caller can choose to
338
353
  * still write the ESI by omitting it from that list.
339
354
  * - Extracts the ESI from the package and stores it in IndexedDB keyed by firmware version (see
340
- * {@link cacheEsiFromFirmwarePackage}) *before* the installation starts, so it can be resolved locally by
341
- * {@link getDeviceFile}. It must be cached up front because, with the ESI skipped on the drive, Motion Master
342
- * will try to read it back right after installation. This caching happens regardless of whether the ESI is
343
- * also written to the drive. A caching failure is logged but does not prevent installation.
355
+ * {@link cacheEsiFromFirmwarePackage}) *before* the installation starts, so {@link getDeviceFile} can return it
356
+ * as soon as the installation ends. IndexedDB is the only source of the ESI file: {@link getDeviceFile} never
357
+ * reads it from the drive, even when the ESI is also written there. A caching failure is logged but does not
358
+ * prevent installation; the ESI file is then not found until a user loads it from the package (Load ESI in
359
+ * OBLAC Drives).
344
360
  *
345
361
  * @param firmwareVersion - The firmware version to key the cached ESI by; this must match the value reported by
346
362
  * the device parameter 0x100a:00 after installation, which {@link getDeviceFile} uses.
347
363
  * For OBLAC firmware packages this is the version encoded in the package filename, see
348
364
  * {@link extractFirmwareVersionFromFirmwarePackageFilename}. When it cannot be determined
349
365
  * (e.g. an arbitrary package with an unrecognized filename), pass an empty value to skip
350
- * caching; the read path then falls back to the online source.
366
+ * caching; the ESI file is then not found unless it was cached before.
351
367
  */
352
368
  installFirmwareAndCacheEsi(firmwareVersion: string | undefined, props: StartDeviceFirmwareInstallationRequest, requestTimeout: number, messageId?: string): Observable<DeviceFirmwareInstallationStatus>;
353
369
  /**
@@ -1748,21 +1764,59 @@ export declare class MotionMasterReqResClient {
1748
1764
  /**
1749
1765
  * Changes the SMM password for the specified device.
1750
1766
  *
1767
+ * The sequence is: write `<newPassword><oldPassword>` to the fs-buffer and run CHANGE_PASSWORD. If, and only if, the
1768
+ * SMM accepts the change, log out from the SMM, trigger an SMM restart (unless `triggerRestart` is false) and then
1769
+ * wait `rebootDelay` milliseconds before completing, so the next SMM command a caller issues does not land in the
1770
+ * reboot.
1771
+ *
1772
+ * The logout has to come before the restart. When the SMM is restarted while the session is still open, it stores
1773
+ * neither the new nor the old password, although it accepted the change, and only the master password gets in again.
1774
+ * After an accepted change the session is therefore closed; log in again with the new password to continue.
1775
+ *
1751
1776
  * @param deviceRef - A reference to the target device.
1752
1777
  * @param oldPassword - The current SMM password.
1753
- * @param newPassword - The new password to set for the SMM.
1754
- * @param commandTimeout - The timeout in milliseconds for the command to complete.
1778
+ * @param newPassword - The new password to set for the SMM, 4 to 24 printable ASCII characters.
1779
+ * @param commandTimeout - The timeout in milliseconds for the CHANGE_PASSWORD command. On firmware below 5.2.0 it also
1780
+ * covers the FoE write of the fs-buffer, because the buffer is written before the command is issued. If it runs out
1781
+ * while the SMM is still storing the password, the client gives up, the SMM is not restarted, and the result of the
1782
+ * change is unknown. Defaults to 12000: the drive gives up on the SMM after 10 s, so do not set it lower, and do not
1783
+ * retry after a timeout, the SMM may still be running the change.
1755
1784
  * @param responsePollingInterval - The interval in milliseconds between polling for the response.
1756
- *
1757
- * @throws {Error} If the password change attempt fails.
1785
+ * @param triggerRestart - Whether to restart the SMM after an accepted change and the logout. Defaults to true. The
1786
+ * firmware requires a restart after a password change, so pass false only if you restart the SMM yourself (with
1787
+ * {@link triggerSmmRestart}) before issuing any other SMM command. The logout happens either way, so your restart
1788
+ * comes after it.
1789
+ * @param rebootDelay - How long to wait after the restart command completes, in milliseconds, before the observable
1790
+ * completes. Defaults to 3000, the `SMM_REBOOT_DELAY` the firmware test reference uses. Ignored when
1791
+ * `triggerRestart` is false.
1792
+ *
1793
+ * @throws {Error} If a password is not 1 (old) or 4 (new) to 24 printable ASCII characters, if the SMM rejects the
1794
+ * change (the SMM is then not restarted and the session stays open), if the logout after an accepted change fails
1795
+ * (the SMM is then not restarted), or if the restart fails.
1758
1796
  *
1759
1797
  * @remarks
1760
- * A prior successful login is required before changing the password.
1761
- * The new password must be at least 4 characters long.
1798
+ * Completion means the SMM accepted the change. It does not prove that the SMM stored the intended password; only a
1799
+ * login with the new password does.
1800
+ *
1801
+ * Rules a caller has to follow, because the SMM and the drive do not enforce them for you:
1802
+ *
1803
+ * - A login for parameter download must be open. A login fails while a session is already open, so log out first:
1804
+ * use {@link reloginToSmmForParameterDownload}. The SMM closes a session after 5 minutes.
1805
+ * - The OS command object (0x1023) and the fs-buffer are a single slot per device. Nothing else may issue OS commands
1806
+ * to the same device during the sequence: no second script, no Motion Master Console on the OS Commands page, no
1807
+ * other tool. Issue SMM functions one at a time and wait for each to complete.
1808
+ * - When the SMM rejects the change, the response does not say why: a wrong old password, a missing or expired
1809
+ * session and an SMM that is still booting all produce the same "the SMM rejected the request (status 2)".
1810
+ */
1811
+ changeSmmPassword(deviceRef: DeviceRef, oldPassword: string, newPassword: string, commandTimeout?: number, responsePollingInterval?: number, triggerRestart?: boolean, rebootDelay?: number): Observable<void>;
1812
+ /**
1813
+ * Runs an SMM sequence and then logs out from the SMM, on completion and on error alike.
1762
1814
  *
1763
- * This function sends an acyclic command to update the password. If successful, it triggers an SMM restart.
1815
+ * Unlike a `finalize(() => logout.subscribe())`, the logout is part of the returned observable: the result is
1816
+ * delivered only after the logout has finished, so a caller's next SMM command cannot run alongside it on the
1817
+ * device's single OS command slot. A failing logout does not replace the sequence's own result or error.
1764
1818
  */
1765
- changeSmmPassword(deviceRef: DeviceRef, oldPassword: string, newPassword: string, commandTimeout?: number, responsePollingInterval?: number): Observable<void>;
1819
+ private logoutFromSmmAfter;
1766
1820
  /**
1767
1821
  * Triggers an SMM restart for the specified device.
1768
1822
  *
@@ -1833,6 +1887,34 @@ export declare class MotionMasterReqResClient {
1833
1887
  * The commands execute only when subscribed to, ensuring a strict sequence.
1834
1888
  */
1835
1889
  updateSmmSoftware(deviceRef: DeviceRef, username: string, password: string, buffer: Uint8Array, crc: number, chunkSize?: number, commandTimeout?: number, responsePollingInterval?: number, fsBufferReadWriteTimeout?: number): Observable<void>;
1890
+ /**
1891
+ * Performs a complete SMM software update like {@link updateSmmSoftware}, reporting progress as it goes.
1892
+ *
1893
+ * A {@link SmmSoftwareUpdateProgress} value is emitted when each stage starts, once per transmitted chunk,
1894
+ * and a final `done` value after the SMM restart has been triggered. Use it to show the user what the
1895
+ * update is doing; transmitting a large software file can take many minutes.
1896
+ *
1897
+ * Parameters are the same as for {@link updateSmmSoftware}.
1898
+ *
1899
+ * @throws {Error} If `buffer` is empty or `chunkSize` is not a positive integer. Nothing is sent to the device then.
1900
+ * @throws {Error} If any step in the software update process fails.
1901
+ */
1902
+ updateSmmSoftwareWithProgress(deviceRef: DeviceRef, username: string, password: string, buffer: Uint8Array, crc: number, chunkSize?: number, commandTimeout?: number, responsePollingInterval?: number, fsBufferReadWriteTimeout?: number): Observable<SmmSoftwareUpdateProgress>;
1903
+ /**
1904
+ * Waits until the SMM reports the expected software version.
1905
+ *
1906
+ * After an SMM software update the SMM restarts and boots the new software, which can take around 30 s.
1907
+ * Reads may fail or return the previous version during that time, so the version is polled until it
1908
+ * matches or the timeout expires.
1909
+ *
1910
+ * @param deviceRef - Reference to the target device.
1911
+ * @param expectedVersion - The expected SMM software version, bitwise encoded (e.g. 25344 for v99.0).
1912
+ * @param timeout - (Optional) How long to wait, in ms. Defaults to 90,000 ms.
1913
+ * @param pollingInterval - (Optional) Delay between reads, in ms. Defaults to 2000 ms.
1914
+ *
1915
+ * @throws {Error} If the SMM does not report the expected version within `timeout`.
1916
+ */
1917
+ waitForSmmFirmwareVersion(deviceRef: DeviceRef, expectedVersion: number, timeout?: number, pollingInterval?: number): Observable<void>;
1836
1918
  /**
1837
1919
  * Resolves whether an automated SMM software update is allowed for the specified device.
1838
1920
  *
@@ -1843,7 +1925,8 @@ export declare class MotionMasterReqResClient {
1843
1925
  *
1844
1926
  * The automation is only permitted when **all** of the following conditions are met:
1845
1927
  * - The device is a recognized Somanet product (`isValidProduct`).
1846
- * - The device belongs to the Circulo product family (`isCirculo`).
1928
+ * - The device belongs to the Circulo product family (`isCirculo`). ACTILINK-JD / JD Duo devices are judged
1929
+ * by the underlying Circulo from their hardware description, see {@link resolveEncoderProductId}.
1847
1930
  * - The binary is encrypted (`isBinaryEncrypted`).
1848
1931
  * - The binary targets one of the supported SMM versions — v1.4 (260) or v2.56 (568) (`isAllowedBinaryVersion`).
1849
1932
  * - If targeting v2.56, the device SoC firmware version is ≥ 5.5.0 (`canInstallV256`).
@@ -1858,7 +1941,7 @@ export declare class MotionMasterReqResClient {
1858
1941
  *
1859
1942
  * @returns A promise that resolves to an {@link SmmAutomatedUpdate} object containing:
1860
1943
  * - `isValidProduct` — Whether the device maps to a known Somanet product.
1861
- * - `isCirculo` — Whether the device belongs to the Circulo product family.
1944
+ * - `isCirculo` — Whether the device is a Circulo or a Circulo-based ACTILINK-JD / JD Duo.
1862
1945
  * - `isCirculo7` — Whether the device is a Circulo 7.
1863
1946
  * - `isCirculo9` — Whether the device is a Circulo 9.
1864
1947
  * - `isDeviceLw1` — Whether the device SMM firmware is below v1.3 (version < 259).
@@ -1873,7 +1956,8 @@ export declare class MotionMasterReqResClient {
1873
1956
  */
1874
1957
  resolveSmmAutomatedUpdateConditions(deviceRef: DeviceRef, buffer: Uint8Array): Promise<SmmAutomatedUpdate>;
1875
1958
  /**
1876
- * Performs an automated, multi-step SMM software update to an encrypted firmware version on a Circulo device.
1959
+ * Performs an automated, multi-step SMM software update to an encrypted firmware version on a Circulo device,
1960
+ * or a Circulo-based ACTILINK-JD / JD Duo (judged by the underlying Circulo).
1877
1961
  *
1878
1962
  * Before installing the target binary, this method evaluates the device state by calling
1879
1963
  * {@link resolveSmmAutomatedUpdateConditions}. Based on the result, it determines which
@@ -1887,20 +1971,29 @@ export declare class MotionMasterReqResClient {
1887
1971
  * - **v99.0 + Circulo 9**: v77.1 → target
1888
1972
  * - **v77.0 or v77.1**: target only
1889
1973
  *
1890
- * If the device does not support streaming, `commandTimeout` is automatically extended to 420,000 ms.
1974
+ * After each installation the SMM restarts. The next step starts only once the SMM reports the
1975
+ * version that was just installed (see {@link waitForSmmFirmwareVersion}), so a failed or
1976
+ * unfinished installation stops the sequence with an error instead of continuing blindly.
1977
+ *
1978
+ * Transfer settings that are not given are resolved from the device firmware with
1979
+ * {@link resolveSmmSoftwareUpdateTimings}. On firmware without fs-buffer streaming (< v5.2.0),
1980
+ * `chunkSize` is always 1000 and `commandTimeout` is at least 420,000 ms.
1891
1981
  *
1892
1982
  * @param deviceRef - Reference to the target device.
1893
1983
  * @param username - Username used for SMM authentication.
1894
1984
  * @param password - Password used for SMM authentication.
1895
1985
  * @param buffer - The target encrypted firmware binary as a `Uint8Array`.
1896
1986
  * @param crc - CRC32 checksum of the target firmware binary for integrity verification.
1897
- * @param chunkSize - (Optional) Size of each data chunk transmitted per step, in bytes. Defaults to 1000.
1898
- * @param commandTimeout - (Optional) Timeout for each OS command in ms. Automatically overridden to 420,000 ms
1899
- * if the device does not support streaming. Defaults to 30,000 ms.
1987
+ * @param chunkSize - (Optional) Size of each data chunk transmitted per step, in bytes.
1988
+ * Defaults to 1,000,000 with streaming (one command per file) and 1000 without.
1989
+ * @param commandTimeout - (Optional) Timeout for each OS command in ms.
1990
+ * Defaults to 180,000 ms with streaming and 420,000 ms without.
1900
1991
  * @param responsePollingInterval - (Optional) Polling interval for command responses in ms. Defaults to 1000 ms.
1901
- * @param fsBufferReadWriteTimeout - (Optional) Timeout for fs-buffer read/write operations in ms. Defaults to 120,000 ms.
1992
+ * @param fsBufferReadWriteTimeout - (Optional) Timeout for fs-buffer read/write operations in ms.
1993
+ * Defaults to 150,000 ms with streaming and 5000 ms without.
1902
1994
  *
1903
- * @returns An `Observable<void>` that completes when the full installation sequence finishes successfully.
1995
+ * @returns An `Observable` of {@link SmmAutomatedUpdateProgress} that reports each step and stage,
1996
+ * and completes when the full installation sequence finishes successfully.
1904
1997
  *
1905
1998
  * @throws {Error} With message `'Unknown product. Cannot perform SMM software update.'` if the device
1906
1999
  * serial number does not map to a known Somanet product.
@@ -1908,9 +2001,9 @@ export declare class MotionMasterReqResClient {
1908
2001
  * e.g. the device is not a Circulo, the binary is not encrypted, the target version is
1909
2002
  * unsupported, the SoC firmware is below v5.5.0 (for SMM v2.56), or the device is
1910
2003
  * already on SMM v1.3+.
1911
- * @throws {Error} If any individual firmware installation step fails during execution.
2004
+ * @throws {Error} If any installation step fails, or the SMM does not report the installed version afterwards.
1912
2005
  */
1913
- updateSmmSoftwareToEncrypted(deviceRef: DeviceRef, username: string, password: string, buffer: Uint8Array, crc: number, chunkSize?: number, commandTimeout?: number, responsePollingInterval?: number, fsBufferReadWriteTimeout?: number): Observable<void>;
2006
+ updateSmmSoftwareToEncrypted(deviceRef: DeviceRef, username: string, password: string, buffer: Uint8Array, crc: number, chunkSize?: number, commandTimeout?: number, responsePollingInterval?: number, fsBufferReadWriteTimeout?: number): Observable<SmmAutomatedUpdateProgress>;
1914
2007
  /**
1915
2008
  * Transmits SMM parameters to the specified device.
1916
2009
  *