@ya-modbus/cli 0.6.1 → 0.7.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.
- package/CHANGELOG.md +4 -2
- package/dist/cjs/bin/ya-modbus.d.ts.map +1 -0
- package/dist/cjs/bin/ya-modbus.js +12 -0
- package/dist/cjs/bin/ya-modbus.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/src/commands/discover.d.ts.map +1 -0
- package/dist/cjs/src/commands/discover.js +196 -0
- package/dist/cjs/src/commands/discover.js.map +1 -0
- package/dist/cjs/src/commands/list-devices.d.ts.map +1 -0
- package/dist/cjs/src/commands/list-devices.js +79 -0
- package/dist/cjs/src/commands/list-devices.js.map +1 -0
- package/dist/cjs/src/commands/read.d.ts.map +1 -0
- package/dist/cjs/src/commands/read.js +79 -0
- package/dist/cjs/src/commands/read.js.map +1 -0
- package/dist/cjs/src/commands/show-defaults.d.ts.map +1 -0
- package/dist/cjs/src/commands/show-defaults.js +51 -0
- package/dist/cjs/src/commands/show-defaults.js.map +1 -0
- package/dist/cjs/src/commands/write.d.ts.map +1 -0
- package/dist/cjs/src/commands/write.js +65 -0
- package/dist/cjs/src/commands/write.js.map +1 -0
- package/dist/cjs/src/discovery/constants.d.ts.map +1 -0
- package/dist/cjs/src/discovery/constants.js +48 -0
- package/dist/cjs/src/discovery/constants.js.map +1 -0
- package/dist/cjs/src/discovery/device-identifier.d.ts.map +1 -0
- package/dist/cjs/src/discovery/device-identifier.js +196 -0
- package/dist/cjs/src/discovery/device-identifier.js.map +1 -0
- package/dist/cjs/src/discovery/parameter-generator-utils.d.ts.map +1 -0
- package/dist/cjs/src/discovery/parameter-generator-utils.js +63 -0
- package/dist/cjs/src/discovery/parameter-generator-utils.js.map +1 -0
- package/dist/cjs/src/discovery/parameter-generator.d.ts.map +1 -0
- package/dist/cjs/src/discovery/parameter-generator.js +188 -0
- package/dist/cjs/src/discovery/parameter-generator.js.map +1 -0
- package/dist/cjs/src/discovery/progress.d.ts.map +1 -0
- package/dist/cjs/src/discovery/progress.js +59 -0
- package/dist/cjs/src/discovery/progress.js.map +1 -0
- package/dist/cjs/src/discovery/scanner.d.ts.map +1 -0
- package/dist/cjs/src/discovery/scanner.js +147 -0
- package/dist/cjs/src/discovery/scanner.js.map +1 -0
- package/dist/cjs/src/formatters/discovery-results.d.ts.map +1 -0
- package/dist/cjs/src/formatters/discovery-results.js +62 -0
- package/dist/cjs/src/formatters/discovery-results.js.map +1 -0
- package/dist/cjs/src/formatters/json.d.ts.map +1 -0
- package/dist/cjs/src/formatters/json.js +36 -0
- package/dist/cjs/src/formatters/json.js.map +1 -0
- package/dist/cjs/src/formatters/performance.d.ts.map +1 -0
- package/dist/cjs/src/formatters/performance.js +28 -0
- package/dist/cjs/src/formatters/performance.js.map +1 -0
- package/dist/cjs/src/formatters/table.d.ts.map +1 -0
- package/dist/cjs/src/formatters/table.js +95 -0
- package/dist/cjs/src/formatters/table.js.map +1 -0
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/cjs/src/index.js +157 -0
- package/dist/cjs/src/index.js.map +1 -0
- package/dist/cjs/src/utils/commands.d.ts.map +1 -0
- package/dist/cjs/src/utils/commands.js +421 -0
- package/dist/cjs/src/utils/commands.js.map +1 -0
- package/dist/cjs/src/utils/object-utils.d.ts.map +1 -0
- package/dist/cjs/src/utils/object-utils.js +31 -0
- package/dist/cjs/src/utils/object-utils.js.map +1 -0
- package/dist/cjs/src/utils/validation.d.ts.map +1 -0
- package/dist/cjs/src/utils/validation.js +165 -0
- package/dist/cjs/src/utils/validation.js.map +1 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/esm/bin/ya-modbus.d.ts +9 -0
- package/dist/esm/bin/ya-modbus.d.ts.map +1 -0
- package/dist/esm/bin/ya-modbus.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/src/commands/discover.d.ts +25 -0
- package/dist/esm/src/commands/discover.d.ts.map +1 -0
- package/dist/esm/src/commands/discover.js.map +1 -0
- package/dist/esm/src/commands/list-devices.d.ts +21 -0
- package/dist/esm/src/commands/list-devices.d.ts.map +1 -0
- package/dist/esm/src/commands/list-devices.js.map +1 -0
- package/dist/esm/src/commands/read.d.ts +25 -0
- package/dist/esm/src/commands/read.d.ts.map +1 -0
- package/dist/esm/src/commands/read.js.map +1 -0
- package/dist/esm/src/commands/show-defaults.d.ts +21 -0
- package/dist/esm/src/commands/show-defaults.d.ts.map +1 -0
- package/dist/esm/src/commands/show-defaults.js.map +1 -0
- package/dist/esm/src/commands/write.d.ts +26 -0
- package/dist/esm/src/commands/write.d.ts.map +1 -0
- package/dist/esm/src/commands/write.js.map +1 -0
- package/dist/esm/src/discovery/constants.d.ts +37 -0
- package/dist/esm/src/discovery/constants.d.ts.map +1 -0
- package/dist/esm/src/discovery/constants.js.map +1 -0
- package/dist/esm/src/discovery/device-identifier.d.ts +52 -0
- package/dist/esm/src/discovery/device-identifier.d.ts.map +1 -0
- package/dist/esm/src/discovery/device-identifier.js.map +1 -0
- package/dist/esm/src/discovery/parameter-generator-utils.d.ts +29 -0
- package/dist/esm/src/discovery/parameter-generator-utils.d.ts.map +1 -0
- package/dist/esm/src/discovery/parameter-generator-utils.js.map +1 -0
- package/dist/esm/src/discovery/parameter-generator.d.ts +97 -0
- package/dist/esm/src/discovery/parameter-generator.d.ts.map +1 -0
- package/dist/esm/src/discovery/parameter-generator.js.map +1 -0
- package/dist/esm/src/discovery/progress.d.ts +24 -0
- package/dist/esm/src/discovery/progress.d.ts.map +1 -0
- package/dist/{src → esm/src}/discovery/progress.js +2 -4
- package/dist/esm/src/discovery/progress.js.map +1 -0
- package/dist/esm/src/discovery/scanner.d.ts +46 -0
- package/dist/esm/src/discovery/scanner.d.ts.map +1 -0
- package/dist/esm/src/discovery/scanner.js.map +1 -0
- package/dist/esm/src/formatters/discovery-results.d.ts +10 -0
- package/dist/esm/src/formatters/discovery-results.d.ts.map +1 -0
- package/dist/esm/src/formatters/discovery-results.js.map +1 -0
- package/dist/esm/src/formatters/json.d.ts +30 -0
- package/dist/esm/src/formatters/json.d.ts.map +1 -0
- package/dist/esm/src/formatters/json.js.map +1 -0
- package/dist/esm/src/formatters/performance.d.ts +19 -0
- package/dist/esm/src/formatters/performance.d.ts.map +1 -0
- package/dist/esm/src/formatters/performance.js.map +1 -0
- package/dist/esm/src/formatters/table.d.ts +10 -0
- package/dist/esm/src/formatters/table.d.ts.map +1 -0
- package/dist/esm/src/formatters/table.js.map +1 -0
- package/dist/esm/src/index.d.ts +5 -0
- package/dist/esm/src/index.d.ts.map +1 -0
- package/dist/esm/src/index.js.map +1 -0
- package/dist/esm/src/utils/commands.d.ts +191 -0
- package/dist/esm/src/utils/commands.d.ts.map +1 -0
- package/dist/esm/src/utils/commands.js.map +1 -0
- package/dist/esm/src/utils/object-utils.d.ts +20 -0
- package/dist/esm/src/utils/object-utils.d.ts.map +1 -0
- package/dist/esm/src/utils/object-utils.js.map +1 -0
- package/dist/esm/src/utils/validation.d.ts +70 -0
- package/dist/esm/src/utils/validation.d.ts.map +1 -0
- package/dist/{src → esm/src}/utils/validation.js +0 -3
- package/dist/esm/src/utils/validation.js.map +1 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
- package/package.json +26 -9
- package/dist/bin/ya-modbus.d.ts.map +0 -1
- package/dist/bin/ya-modbus.js.map +0 -1
- package/dist/src/commands/discover.d.ts.map +0 -1
- package/dist/src/commands/discover.js.map +0 -1
- package/dist/src/commands/list-devices.d.ts.map +0 -1
- package/dist/src/commands/list-devices.js.map +0 -1
- package/dist/src/commands/read.d.ts.map +0 -1
- package/dist/src/commands/read.js.map +0 -1
- package/dist/src/commands/show-defaults.d.ts.map +0 -1
- package/dist/src/commands/show-defaults.js.map +0 -1
- package/dist/src/commands/write.d.ts.map +0 -1
- package/dist/src/commands/write.js.map +0 -1
- package/dist/src/discovery/constants.d.ts.map +0 -1
- package/dist/src/discovery/constants.js.map +0 -1
- package/dist/src/discovery/device-identifier.d.ts.map +0 -1
- package/dist/src/discovery/device-identifier.js.map +0 -1
- package/dist/src/discovery/parameter-generator-utils.d.ts.map +0 -1
- package/dist/src/discovery/parameter-generator-utils.js.map +0 -1
- package/dist/src/discovery/parameter-generator.d.ts.map +0 -1
- package/dist/src/discovery/parameter-generator.js.map +0 -1
- package/dist/src/discovery/progress.d.ts.map +0 -1
- package/dist/src/discovery/progress.js.map +0 -1
- package/dist/src/discovery/scanner.d.ts.map +0 -1
- package/dist/src/discovery/scanner.js.map +0 -1
- package/dist/src/formatters/discovery-results.d.ts.map +0 -1
- package/dist/src/formatters/discovery-results.js.map +0 -1
- package/dist/src/formatters/json.d.ts.map +0 -1
- package/dist/src/formatters/json.js.map +0 -1
- package/dist/src/formatters/performance.d.ts.map +0 -1
- package/dist/src/formatters/performance.js.map +0 -1
- package/dist/src/formatters/table.d.ts.map +0 -1
- package/dist/src/formatters/table.js.map +0 -1
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js.map +0 -1
- package/dist/src/utils/commands.d.ts.map +0 -1
- package/dist/src/utils/commands.js.map +0 -1
- package/dist/src/utils/object-utils.d.ts.map +0 -1
- package/dist/src/utils/object-utils.js.map +0 -1
- package/dist/src/utils/validation.d.ts.map +0 -1
- package/dist/src/utils/validation.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- /package/dist/{bin → cjs/bin}/ya-modbus.d.ts +0 -0
- /package/dist/{src → cjs/src}/commands/discover.d.ts +0 -0
- /package/dist/{src → cjs/src}/commands/list-devices.d.ts +0 -0
- /package/dist/{src → cjs/src}/commands/read.d.ts +0 -0
- /package/dist/{src → cjs/src}/commands/show-defaults.d.ts +0 -0
- /package/dist/{src → cjs/src}/commands/write.d.ts +0 -0
- /package/dist/{src → cjs/src}/discovery/constants.d.ts +0 -0
- /package/dist/{src → cjs/src}/discovery/device-identifier.d.ts +0 -0
- /package/dist/{src → cjs/src}/discovery/parameter-generator-utils.d.ts +0 -0
- /package/dist/{src → cjs/src}/discovery/parameter-generator.d.ts +0 -0
- /package/dist/{src → cjs/src}/discovery/progress.d.ts +0 -0
- /package/dist/{src → cjs/src}/discovery/scanner.d.ts +0 -0
- /package/dist/{src → cjs/src}/formatters/discovery-results.d.ts +0 -0
- /package/dist/{src → cjs/src}/formatters/json.d.ts +0 -0
- /package/dist/{src → cjs/src}/formatters/performance.d.ts +0 -0
- /package/dist/{src → cjs/src}/formatters/table.d.ts +0 -0
- /package/dist/{src → cjs/src}/index.d.ts +0 -0
- /package/dist/{src → cjs/src}/utils/commands.d.ts +0 -0
- /package/dist/{src → cjs/src}/utils/object-utils.d.ts +0 -0
- /package/dist/{src → cjs/src}/utils/validation.d.ts +0 -0
- /package/dist/{bin → esm/bin}/ya-modbus.js +0 -0
- /package/dist/{src → esm/src}/commands/discover.js +0 -0
- /package/dist/{src → esm/src}/commands/list-devices.js +0 -0
- /package/dist/{src → esm/src}/commands/read.js +0 -0
- /package/dist/{src → esm/src}/commands/show-defaults.js +0 -0
- /package/dist/{src → esm/src}/commands/write.js +0 -0
- /package/dist/{src → esm/src}/discovery/constants.js +0 -0
- /package/dist/{src → esm/src}/discovery/device-identifier.js +0 -0
- /package/dist/{src → esm/src}/discovery/parameter-generator-utils.js +0 -0
- /package/dist/{src → esm/src}/discovery/parameter-generator.js +0 -0
- /package/dist/{src → esm/src}/discovery/scanner.js +0 -0
- /package/dist/{src → esm/src}/formatters/discovery-results.js +0 -0
- /package/dist/{src → esm/src}/formatters/json.js +0 -0
- /package/dist/{src → esm/src}/formatters/performance.js +0 -0
- /package/dist/{src → esm/src}/formatters/table.js +0 -0
- /package/dist/{src → esm/src}/index.js +0 -0
- /package/dist/{src → esm/src}/utils/commands.js +0 -0
- /package/dist/{src → esm/src}/utils/object-utils.js +0 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.identifyDevice = identifyDevice;
|
|
4
|
+
/**
|
|
5
|
+
* FC43 Read Device ID Code values (MEI type)
|
|
6
|
+
* See Modbus specification 6.21 - Read Device Identification (FC43/0x2B)
|
|
7
|
+
*/
|
|
8
|
+
const FC43_READ_DEVICE_ID_CODE = {
|
|
9
|
+
/** Basic device identification (VendorName, ProductCode, Revision) */
|
|
10
|
+
BASIC: 1,
|
|
11
|
+
/** Regular device identification (adds additional standard objects) */
|
|
12
|
+
REGULAR: 2,
|
|
13
|
+
/** Extended device identification (includes vendor-specific objects) */
|
|
14
|
+
EXTENDED: 3,
|
|
15
|
+
/** Specific individual object request */
|
|
16
|
+
SPECIFIC: 4,
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* FC43 Object ID values for device identification
|
|
20
|
+
* See Modbus specification 6.21 - Read Device Identification object IDs
|
|
21
|
+
*/
|
|
22
|
+
const FC43_OBJECT_ID = {
|
|
23
|
+
/** Vendor/manufacturer name */
|
|
24
|
+
VENDOR_NAME: 0,
|
|
25
|
+
/** Product code/identifier */
|
|
26
|
+
PRODUCT_CODE: 1,
|
|
27
|
+
/** Major/minor revision number */
|
|
28
|
+
MAJOR_MINOR_REVISION: 2,
|
|
29
|
+
/** Vendor URL */
|
|
30
|
+
VENDOR_URL: 3,
|
|
31
|
+
/** Product name/model */
|
|
32
|
+
PRODUCT_NAME: 4,
|
|
33
|
+
/** Model name */
|
|
34
|
+
MODEL_NAME: 5,
|
|
35
|
+
/** User application name */
|
|
36
|
+
USER_APPLICATION_NAME: 6,
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Check if error is a Modbus exception (device present but unsupported function/address)
|
|
40
|
+
*/
|
|
41
|
+
function isModbusException(error) {
|
|
42
|
+
if (error && typeof error === 'object' && 'modbusCode' in error) {
|
|
43
|
+
const code = error.modbusCode;
|
|
44
|
+
return typeof code === 'number' ? code : undefined;
|
|
45
|
+
}
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Check if error is a timeout (device not responding)
|
|
50
|
+
*
|
|
51
|
+
* The modbus-serial library can return timeout errors in different formats:
|
|
52
|
+
* - Error with message containing "timeout" (most common)
|
|
53
|
+
* - Error with errno='ETIMEDOUT' (serial port timeout)
|
|
54
|
+
* - Error with code='ETIMEDOUT' (TCP socket timeout)
|
|
55
|
+
*
|
|
56
|
+
* We check all three formats to handle different error sources reliably.
|
|
57
|
+
*/
|
|
58
|
+
function isTimeout(error) {
|
|
59
|
+
if (!error || typeof error !== 'object') {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
const err = error;
|
|
63
|
+
return Boolean((err.message?.toLowerCase().includes('timeout') ?? false) ||
|
|
64
|
+
err.errno === 'ETIMEDOUT' ||
|
|
65
|
+
err.code === 'ETIMEDOUT');
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Check if error is a CRC error (wrong serial parameters)
|
|
69
|
+
*
|
|
70
|
+
* The modbus-serial library can return CRC errors in different formats:
|
|
71
|
+
* - Error with message containing "crc" (most common, e.g., "CRC error")
|
|
72
|
+
* - Error with errno='CRC' (serial port CRC validation failure)
|
|
73
|
+
*
|
|
74
|
+
* CRC errors indicate wrong serial parameters (baud rate, parity, etc.)
|
|
75
|
+
* and are distinguished from timeouts to guide parameter tuning.
|
|
76
|
+
*/
|
|
77
|
+
function isCRCError(error) {
|
|
78
|
+
if (!error || typeof error !== 'object') {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
const err = error;
|
|
82
|
+
return Boolean((err.message?.toLowerCase().includes('crc') ?? false) || err.errno === 'CRC');
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Try to identify device using FC43 (Read Device Identification)
|
|
86
|
+
*
|
|
87
|
+
* FC43/14 is the standard MEI (Modbus Encapsulated Interface) for device identification.
|
|
88
|
+
* Not all devices support this - device-level support is handled via exception codes.
|
|
89
|
+
*
|
|
90
|
+
* Any Modbus response (including exceptions) indicates a device is present.
|
|
91
|
+
* Throws for timeout/CRC errors which indicate no device with these parameters.
|
|
92
|
+
*
|
|
93
|
+
* @param client - Configured ModbusRTU client
|
|
94
|
+
* @param startTime - Start time for response time calculation
|
|
95
|
+
* @throws Error for timeout, CRC, or other communication failures
|
|
96
|
+
* @returns DeviceIdentificationResult with present: true guaranteed
|
|
97
|
+
*/
|
|
98
|
+
async function tryFC43(client, startTime) {
|
|
99
|
+
try {
|
|
100
|
+
const response = await client.readDeviceIdentification(FC43_READ_DEVICE_ID_CODE.BASIC, FC43_OBJECT_ID.VENDOR_NAME);
|
|
101
|
+
// Build result object with response time
|
|
102
|
+
const result = {
|
|
103
|
+
present: true,
|
|
104
|
+
responseTimeMs: performance.now() - startTime,
|
|
105
|
+
supportsFC43: true,
|
|
106
|
+
};
|
|
107
|
+
// modbus-serial returns { data: { 0: "vendor", 1: "product", 2: "revision" }, conformityLevel }
|
|
108
|
+
if (response.data && typeof response.data === 'object') {
|
|
109
|
+
const data = response.data;
|
|
110
|
+
const vendorName = data[FC43_OBJECT_ID.VENDOR_NAME];
|
|
111
|
+
if (vendorName !== undefined) {
|
|
112
|
+
result.vendorName = vendorName;
|
|
113
|
+
}
|
|
114
|
+
const productCode = data[FC43_OBJECT_ID.PRODUCT_CODE];
|
|
115
|
+
if (productCode !== undefined) {
|
|
116
|
+
result.productCode = productCode;
|
|
117
|
+
}
|
|
118
|
+
const revision = data[FC43_OBJECT_ID.MAJOR_MINOR_REVISION];
|
|
119
|
+
if (revision !== undefined) {
|
|
120
|
+
result.revision = revision;
|
|
121
|
+
}
|
|
122
|
+
// Note: modelName requires requesting FC43_OBJECT_ID.MODEL_NAME specifically
|
|
123
|
+
}
|
|
124
|
+
return result;
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
const responseTime = performance.now() - startTime;
|
|
128
|
+
const exceptionCode = isModbusException(error);
|
|
129
|
+
if (exceptionCode !== undefined) {
|
|
130
|
+
// Exception means device is present but doesn't support FC43 or the specific registers
|
|
131
|
+
// This is still a successful device detection - we found a device, just don't know what it is
|
|
132
|
+
return {
|
|
133
|
+
present: true,
|
|
134
|
+
responseTimeMs: responseTime,
|
|
135
|
+
supportsFC43: false,
|
|
136
|
+
exceptionCode,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
// Timeout, CRC, or other communication error - let caller handle it
|
|
140
|
+
throw error;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Attempt to identify a Modbus device at the current client configuration
|
|
145
|
+
*
|
|
146
|
+
* Uses FC43 (Read Device Identification) to probe for device presence.
|
|
147
|
+
* Any Modbus response (including exceptions) indicates a device is present.
|
|
148
|
+
* Only timeouts and CRC errors mean no device with these parameters.
|
|
149
|
+
*
|
|
150
|
+
* @param client - Configured ModbusRTU client (address, serial params, and timeout already set)
|
|
151
|
+
* @returns Device identification result
|
|
152
|
+
*
|
|
153
|
+
* @example
|
|
154
|
+
* ```typescript
|
|
155
|
+
* const client = new ModbusRTU()
|
|
156
|
+
* await client.connectRTUBuffered('/dev/ttyUSB0', { baudRate: 9600 })
|
|
157
|
+
* client.setID(1)
|
|
158
|
+
* client.setTimeout(1000)
|
|
159
|
+
*
|
|
160
|
+
* const result = await identifyDevice(client)
|
|
161
|
+
* if (result.present) {
|
|
162
|
+
* console.log(`Found device: ${result.vendorName ?? 'Unknown'}`)
|
|
163
|
+
* }
|
|
164
|
+
* ```
|
|
165
|
+
*/
|
|
166
|
+
async function identifyDevice(client) {
|
|
167
|
+
const startTime = performance.now();
|
|
168
|
+
try {
|
|
169
|
+
// Try FC43 (provides device identification)
|
|
170
|
+
return await tryFC43(client, startTime);
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
// Communication error - classify and return appropriate result
|
|
174
|
+
const responseTime = performance.now() - startTime;
|
|
175
|
+
if (isTimeout(error)) {
|
|
176
|
+
return {
|
|
177
|
+
present: false,
|
|
178
|
+
timeout: true,
|
|
179
|
+
responseTimeMs: responseTime,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
if (isCRCError(error)) {
|
|
183
|
+
return {
|
|
184
|
+
present: false,
|
|
185
|
+
crcError: true,
|
|
186
|
+
responseTimeMs: responseTime,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
// Other error (network, etc.) - treat as not present
|
|
190
|
+
return {
|
|
191
|
+
present: false,
|
|
192
|
+
responseTimeMs: responseTime,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=device-identifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-identifier.js","sourceRoot":"","sources":["../../../../src/discovery/device-identifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parameter-generator-utils.d.ts","sourceRoot":"","sources":["../../../../src/discovery/parameter-generator-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,qBAAqB,EACtB,MAAM,yBAAyB,CAAA;AAahC,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAEnF;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,iBAAiB,EAC3B,eAAe,CAAC,EAAE,qBAAqB,GACtC;IACD,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAA;IAC9B,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3B,QAAQ,EAAE,SAAS,QAAQ,EAAE,CAAA;IAC7B,QAAQ,EAAE,SAAS,QAAQ,EAAE,CAAA;IAC7B,YAAY,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACxC,CA+BA;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAc5E"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getParameterArrays = getParameterArrays;
|
|
4
|
+
exports.countParameterCombinations = countParameterCombinations;
|
|
5
|
+
const constants_js_1 = require("./constants.js");
|
|
6
|
+
/**
|
|
7
|
+
* Get parameter arrays based on strategy and configuration
|
|
8
|
+
*/
|
|
9
|
+
function getParameterArrays(strategy, supportedConfig) {
|
|
10
|
+
if (strategy === 'quick' && supportedConfig) {
|
|
11
|
+
// Quick mode with driver config: use supported values or fall back to common
|
|
12
|
+
return {
|
|
13
|
+
baudRates: supportedConfig.validBaudRates ?? constants_js_1.COMMON_BAUD_RATES,
|
|
14
|
+
parities: supportedConfig.validParity ?? constants_js_1.STANDARD_PARITY,
|
|
15
|
+
dataBits: supportedConfig.validDataBits ?? constants_js_1.STANDARD_DATA_BITS,
|
|
16
|
+
stopBits: supportedConfig.validStopBits ?? constants_js_1.STANDARD_STOP_BITS,
|
|
17
|
+
addressRange: supportedConfig.validAddressRange ?? [constants_js_1.MIN_SLAVE_ID, constants_js_1.MAX_SLAVE_ID],
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
if (strategy === 'thorough') {
|
|
21
|
+
// Thorough mode: use supported config if provided, otherwise standard Modbus
|
|
22
|
+
return {
|
|
23
|
+
baudRates: supportedConfig?.validBaudRates ?? constants_js_1.STANDARD_BAUD_RATES,
|
|
24
|
+
parities: supportedConfig?.validParity ?? constants_js_1.STANDARD_PARITY,
|
|
25
|
+
dataBits: supportedConfig?.validDataBits ?? constants_js_1.STANDARD_DATA_BITS,
|
|
26
|
+
stopBits: supportedConfig?.validStopBits ?? constants_js_1.STANDARD_STOP_BITS,
|
|
27
|
+
addressRange: supportedConfig?.validAddressRange ?? [constants_js_1.MIN_SLAVE_ID, constants_js_1.MAX_SLAVE_ID],
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
// Quick mode without driver config: use common parameters
|
|
31
|
+
return {
|
|
32
|
+
baudRates: constants_js_1.COMMON_BAUD_RATES,
|
|
33
|
+
parities: constants_js_1.STANDARD_PARITY,
|
|
34
|
+
dataBits: constants_js_1.COMMON_DATA_BITS,
|
|
35
|
+
stopBits: constants_js_1.COMMON_STOP_BITS,
|
|
36
|
+
addressRange: [constants_js_1.MIN_SLAVE_ID, constants_js_1.MAX_SLAVE_ID],
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Count the total number of parameter combinations without materializing them
|
|
41
|
+
*
|
|
42
|
+
* This is much more efficient than Array.from(generateParameterCombinations()).length
|
|
43
|
+
* as it calculates the count mathematically instead of generating all combinations.
|
|
44
|
+
*
|
|
45
|
+
* @param options - Generator options
|
|
46
|
+
* @returns Total number of combinations that will be generated
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* const count = countParameterCombinations({ strategy: 'quick' })
|
|
51
|
+
* console.log(`Will test ${count} combinations`) // Will test 3952 combinations
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
function countParameterCombinations(options) {
|
|
55
|
+
const { strategy, supportedConfig } = options;
|
|
56
|
+
const { baudRates, parities, dataBits, stopBits, addressRange } = getParameterArrays(strategy, supportedConfig);
|
|
57
|
+
// Calculate address count
|
|
58
|
+
const [minId, maxId] = addressRange;
|
|
59
|
+
const addressCount = maxId - minId + 1;
|
|
60
|
+
// Total combinations = addresses × baud rates × parities × data bits × stop bits
|
|
61
|
+
return addressCount * baudRates.length * parities.length * dataBits.length * stopBits.length;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=parameter-generator-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parameter-generator-utils.js","sourceRoot":"","sources":["../../../../src/discovery/parameter-generator-utils.ts"],"names":[],"mappings":";;AAwBA,gDAwCC;AAiBD,gEAcC;AAvFD,iDAUuB;AAGvB;;GAEG;AACH,SAAgB,kBAAkB,CAChC,QAA2B,EAC3B,eAAuC;IAQvC,IAAI,QAAQ,KAAK,OAAO,IAAI,eAAe,EAAE,CAAC;QAC5C,6EAA6E;QAC7E,OAAO;YACL,SAAS,EAAE,eAAe,CAAC,cAAc,IAAI,gCAAiB;YAC9D,QAAQ,EAAE,eAAe,CAAC,WAAW,IAAI,8BAAe;YACxD,QAAQ,EAAE,eAAe,CAAC,aAAa,IAAI,iCAAkB;YAC7D,QAAQ,EAAE,eAAe,CAAC,aAAa,IAAI,iCAAkB;YAC7D,YAAY,EAAE,eAAe,CAAC,iBAAiB,IAAI,CAAC,2BAAY,EAAE,2BAAY,CAAC;SAChF,CAAA;IACH,CAAC;IAED,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,6EAA6E;QAC7E,OAAO;YACL,SAAS,EAAE,eAAe,EAAE,cAAc,IAAI,kCAAmB;YACjE,QAAQ,EAAE,eAAe,EAAE,WAAW,IAAI,8BAAe;YACzD,QAAQ,EAAE,eAAe,EAAE,aAAa,IAAI,iCAAkB;YAC9D,QAAQ,EAAE,eAAe,EAAE,aAAa,IAAI,iCAAkB;YAC9D,YAAY,EAAE,eAAe,EAAE,iBAAiB,IAAI,CAAC,2BAAY,EAAE,2BAAY,CAAC;SACjF,CAAA;IACH,CAAC;IAED,0DAA0D;IAC1D,OAAO;QACL,SAAS,EAAE,gCAAiB;QAC5B,QAAQ,EAAE,8BAAe;QACzB,QAAQ,EAAE,+BAAgB;QAC1B,QAAQ,EAAE,+BAAgB;QAC1B,YAAY,EAAE,CAAC,2BAAY,EAAE,2BAAY,CAAC;KAC3C,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAgB,0BAA0B,CAAC,OAAyB;IAClE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,OAAO,CAAA;IAE7C,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,kBAAkB,CAClF,QAAQ,EACR,eAAe,CAChB,CAAA;IAED,0BAA0B;IAC1B,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,YAAY,CAAA;IACnC,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,CAAC,CAAA;IAEtC,iFAAiF;IACjF,OAAO,YAAY,GAAG,SAAS,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;AAC9F,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parameter-generator.d.ts","sourceRoot":"","sources":["../../../../src/discovery/parameter-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,QAAQ,EACR,mBAAmB,EACnB,MAAM,EACN,QAAQ,EACR,qBAAqB,EACtB,MAAM,yBAAyB,CAAA;AAKhC;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,QAAQ,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,EAAE,QAAQ,CAAA;CACnB;AAED;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,UAAU,CAAA;AAEpD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,QAAQ,EAAE,iBAAiB,CAAA;IAE3B,gEAAgE;IAChE,aAAa,CAAC,EAAE,mBAAmB,CAAA;IAEnC,0DAA0D;IAC1D,eAAe,CAAC,EAAE,qBAAqB,CAAA;CACxC;AAqED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,iEAAiE;IACjE,YAAY,EAAE;QACZ,QAAQ,EAAE,QAAQ,CAAA;QAClB,MAAM,EAAE,MAAM,CAAA;QACd,QAAQ,EAAE,QAAQ,CAAA;QAClB,QAAQ,EAAE,QAAQ,CAAA;KACnB,CAAA;IACD,qFAAqF;IACrF,YAAY,EAAE,oBAAoB,EAAE,CAAA;CACrC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAiB,uBAAuB,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CAAC,cAAc,CAAC,CA8C7F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAiB,6BAA6B,CAC5C,OAAO,EAAE,gBAAgB,GACxB,SAAS,CAAC,oBAAoB,CAAC,CAsCjC"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateParameterGroups = generateParameterGroups;
|
|
4
|
+
exports.generateParameterCombinations = generateParameterCombinations;
|
|
5
|
+
const constants_js_1 = require("./constants.js");
|
|
6
|
+
const parameter_generator_utils_js_1 = require("./parameter-generator-utils.js");
|
|
7
|
+
/**
|
|
8
|
+
* Clamp slave ID to valid Modbus range [1, 247]
|
|
9
|
+
*/
|
|
10
|
+
function clampSlaveId(id) {
|
|
11
|
+
return Math.max(constants_js_1.MIN_SLAVE_ID, Math.min(constants_js_1.MAX_SLAVE_ID, id));
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Generate ordered list of slave IDs to test
|
|
15
|
+
*
|
|
16
|
+
* Priority order:
|
|
17
|
+
* 1. Default address (if provided)
|
|
18
|
+
* 2. Address 1 (most common)
|
|
19
|
+
* 3. Address 2
|
|
20
|
+
* 4. Remaining addresses sequentially (3, 4, 5, ...)
|
|
21
|
+
*/
|
|
22
|
+
function* generateSlaveIds(range, defaultAddress) {
|
|
23
|
+
const [minId, maxId] = range;
|
|
24
|
+
const start = clampSlaveId(minId);
|
|
25
|
+
const end = clampSlaveId(maxId);
|
|
26
|
+
const yielded = new Set();
|
|
27
|
+
// Helper to yield if not already yielded and in range
|
|
28
|
+
function* yieldIfValid(id) {
|
|
29
|
+
const clamped = clampSlaveId(id);
|
|
30
|
+
if (clamped >= start && clamped <= end && !yielded.has(clamped)) {
|
|
31
|
+
yielded.add(clamped);
|
|
32
|
+
yield clamped;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// 1. Default address first
|
|
36
|
+
if (defaultAddress !== undefined) {
|
|
37
|
+
yield* yieldIfValid(defaultAddress);
|
|
38
|
+
}
|
|
39
|
+
// 2. Common addresses (1, 2)
|
|
40
|
+
yield* yieldIfValid(1);
|
|
41
|
+
yield* yieldIfValid(2);
|
|
42
|
+
// 3. Remaining addresses sequentially
|
|
43
|
+
for (let id = start; id <= end; id++) {
|
|
44
|
+
if (!yielded.has(id)) {
|
|
45
|
+
yielded.add(id);
|
|
46
|
+
yield id;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Prioritize default configuration values in parameter arrays
|
|
52
|
+
*
|
|
53
|
+
* Moves default values to the front of arrays while preserving uniqueness
|
|
54
|
+
*/
|
|
55
|
+
function prioritizeDefaults(array, defaultValue) {
|
|
56
|
+
if (defaultValue === undefined || !array.includes(defaultValue)) {
|
|
57
|
+
return array;
|
|
58
|
+
}
|
|
59
|
+
// Move default to front, remove duplicates
|
|
60
|
+
return [defaultValue, ...array.filter((v) => v !== defaultValue)];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Generate parameter combinations grouped by serial configuration
|
|
64
|
+
*
|
|
65
|
+
* This is a memory-efficient alternative to materializing all combinations.
|
|
66
|
+
* Instead of creating all ~1500+ combinations at once, this generator yields
|
|
67
|
+
* groups of ~247 combinations at a time (one per serial config).
|
|
68
|
+
*
|
|
69
|
+
* Each group shares the same serial parameters (baud, parity, data bits, stop bits)
|
|
70
|
+
* but has different slave IDs. This matches how the scanner works - it creates
|
|
71
|
+
* one connection per serial config and tests all slave IDs with that connection.
|
|
72
|
+
*
|
|
73
|
+
* @param options - Generation options
|
|
74
|
+
* @yields Parameter groups to test
|
|
75
|
+
*
|
|
76
|
+
* @example Iterate over groups without materializing all combinations
|
|
77
|
+
* ```typescript
|
|
78
|
+
* for (const group of generateParameterGroups(options)) {
|
|
79
|
+
* // Only this group's ~247 combinations are in memory
|
|
80
|
+
* const { serialParams, combinations } = group
|
|
81
|
+
* // ... use combinations ...
|
|
82
|
+
* }
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
function* generateParameterGroups(options) {
|
|
86
|
+
const { strategy, defaultConfig, supportedConfig } = options;
|
|
87
|
+
// Get parameter arrays
|
|
88
|
+
let { baudRates, parities, dataBits, stopBits } = (0, parameter_generator_utils_js_1.getParameterArrays)(strategy, supportedConfig);
|
|
89
|
+
const { addressRange } = (0, parameter_generator_utils_js_1.getParameterArrays)(strategy, supportedConfig);
|
|
90
|
+
// Prioritize default values to test them first
|
|
91
|
+
if (defaultConfig) {
|
|
92
|
+
baudRates = prioritizeDefaults(baudRates, defaultConfig.baudRate);
|
|
93
|
+
parities = prioritizeDefaults(parities, defaultConfig.parity);
|
|
94
|
+
dataBits = prioritizeDefaults(dataBits, defaultConfig.dataBits);
|
|
95
|
+
stopBits = prioritizeDefaults(stopBits, defaultConfig.stopBits);
|
|
96
|
+
}
|
|
97
|
+
// Generate slave IDs once (reused for each serial config)
|
|
98
|
+
const slaveIds = Array.from(generateSlaveIds(addressRange, defaultConfig?.defaultAddress));
|
|
99
|
+
// Generate groups: iterate serial params (baud × parity × data × stop)
|
|
100
|
+
// For each serial config, create a group with all slave IDs
|
|
101
|
+
for (const baudRate of baudRates) {
|
|
102
|
+
for (const parity of parities) {
|
|
103
|
+
for (const dataBits_ of dataBits) {
|
|
104
|
+
for (const stopBits_ of stopBits) {
|
|
105
|
+
// Build combinations for this serial config
|
|
106
|
+
const combinations = slaveIds.map((slaveId) => ({
|
|
107
|
+
slaveId,
|
|
108
|
+
baudRate,
|
|
109
|
+
parity,
|
|
110
|
+
dataBits: dataBits_,
|
|
111
|
+
stopBits: stopBits_,
|
|
112
|
+
}));
|
|
113
|
+
yield {
|
|
114
|
+
serialParams: {
|
|
115
|
+
baudRate,
|
|
116
|
+
parity,
|
|
117
|
+
dataBits: dataBits_,
|
|
118
|
+
stopBits: stopBits_,
|
|
119
|
+
},
|
|
120
|
+
combinations,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Generate all parameter combinations for Modbus device discovery
|
|
129
|
+
*
|
|
130
|
+
* Produces combinations in priority order:
|
|
131
|
+
* 1. Default configuration (if provided) tested first
|
|
132
|
+
* 2. Common slave addresses (1, 2) before others
|
|
133
|
+
* 3. Common baud rates before exotic ones
|
|
134
|
+
*
|
|
135
|
+
* @param options - Generation options
|
|
136
|
+
* @yields Parameter combinations to test
|
|
137
|
+
*
|
|
138
|
+
* @example Quick discovery with driver config
|
|
139
|
+
* ```typescript
|
|
140
|
+
* const combinations = generateParameterCombinations({
|
|
141
|
+
* strategy: 'quick',
|
|
142
|
+
* defaultConfig: { baudRate: 9600, parity: 'even', ... },
|
|
143
|
+
* supportedConfig: { validBaudRates: [9600, 19200], ... }
|
|
144
|
+
* })
|
|
145
|
+
* ```
|
|
146
|
+
*
|
|
147
|
+
* @example Thorough discovery without driver
|
|
148
|
+
* ```typescript
|
|
149
|
+
* const combinations = generateParameterCombinations({
|
|
150
|
+
* strategy: 'thorough'
|
|
151
|
+
* })
|
|
152
|
+
* ```
|
|
153
|
+
*/
|
|
154
|
+
function* generateParameterCombinations(options) {
|
|
155
|
+
const { strategy, defaultConfig, supportedConfig } = options;
|
|
156
|
+
// Get parameter arrays
|
|
157
|
+
let { baudRates, parities, dataBits, stopBits } = (0, parameter_generator_utils_js_1.getParameterArrays)(strategy, supportedConfig);
|
|
158
|
+
const { addressRange } = (0, parameter_generator_utils_js_1.getParameterArrays)(strategy, supportedConfig);
|
|
159
|
+
// Prioritize default values to test them first
|
|
160
|
+
if (defaultConfig) {
|
|
161
|
+
baudRates = prioritizeDefaults(baudRates, defaultConfig.baudRate);
|
|
162
|
+
parities = prioritizeDefaults(parities, defaultConfig.parity);
|
|
163
|
+
dataBits = prioritizeDefaults(dataBits, defaultConfig.dataBits);
|
|
164
|
+
stopBits = prioritizeDefaults(stopBits, defaultConfig.stopBits);
|
|
165
|
+
}
|
|
166
|
+
// Generate combinations in priority order:
|
|
167
|
+
// - Default config combination first
|
|
168
|
+
// - Then iterate: slave IDs (prioritized) × baud rates (prioritized) × parity × data × stop
|
|
169
|
+
const slaveIds = Array.from(generateSlaveIds(addressRange, defaultConfig?.defaultAddress));
|
|
170
|
+
for (const slaveId of slaveIds) {
|
|
171
|
+
for (const baudRate of baudRates) {
|
|
172
|
+
for (const parity of parities) {
|
|
173
|
+
for (const dataBits_ of dataBits) {
|
|
174
|
+
for (const stopBits_ of stopBits) {
|
|
175
|
+
yield {
|
|
176
|
+
slaveId,
|
|
177
|
+
baudRate,
|
|
178
|
+
parity,
|
|
179
|
+
dataBits: dataBits_,
|
|
180
|
+
stopBits: stopBits_,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=parameter-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parameter-generator.js","sourceRoot":"","sources":["../../../../src/discovery/parameter-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../../../src/discovery/progress.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,eAAe;IAKd,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAJ9C,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,cAAc,CAAY;IAClC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAe;gBAEnB,iBAAiB,EAAE,MAAM;IAItD;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAyB5D;;OAEG;IACH,OAAO,CAAC,cAAc;CAgBvB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProgressTracker = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Simple progress tracker for discovery operations
|
|
6
|
+
*/
|
|
7
|
+
class ProgressTracker {
|
|
8
|
+
constructor(totalCombinations) {
|
|
9
|
+
this.totalCombinations = totalCombinations;
|
|
10
|
+
this.lastUpdateTime = 0;
|
|
11
|
+
this.updateIntervalMs = 1000; // Update every second
|
|
12
|
+
this.startTime = Date.now();
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Update progress and return formatted status string
|
|
16
|
+
* Only returns a new string if enough time has passed since last update
|
|
17
|
+
*
|
|
18
|
+
* @param current - Current combination index
|
|
19
|
+
* @param devicesFound - Number of devices found so far
|
|
20
|
+
* @returns Progress string or null if no update needed
|
|
21
|
+
*/
|
|
22
|
+
update(current, devicesFound) {
|
|
23
|
+
const now = Date.now();
|
|
24
|
+
// Throttle updates to avoid excessive console output
|
|
25
|
+
if (now - this.lastUpdateTime < this.updateIntervalMs && current < this.totalCombinations) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
this.lastUpdateTime = now;
|
|
29
|
+
const percentage = Math.round((current / this.totalCombinations) * 100);
|
|
30
|
+
const elapsed = Math.floor((now - this.startTime) / 1000);
|
|
31
|
+
// Calculate ETA
|
|
32
|
+
let eta = '';
|
|
33
|
+
if (current > 0 && current < this.totalCombinations && elapsed > 0) {
|
|
34
|
+
const rate = current / elapsed;
|
|
35
|
+
const remaining = this.totalCombinations - current;
|
|
36
|
+
const etaSeconds = Math.round(remaining / rate);
|
|
37
|
+
eta = ` | ETA: ${this.formatDuration(etaSeconds)}`;
|
|
38
|
+
}
|
|
39
|
+
return `Progress: ${percentage}% (${current}/${this.totalCombinations}) | Devices found: ${devicesFound} | Elapsed: ${this.formatDuration(elapsed)}${eta}`;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Format duration in seconds to human-readable string
|
|
43
|
+
*/
|
|
44
|
+
formatDuration(seconds) {
|
|
45
|
+
if (seconds < 60) {
|
|
46
|
+
return `${seconds}s`;
|
|
47
|
+
}
|
|
48
|
+
const minutes = Math.floor(seconds / 60);
|
|
49
|
+
const remainingSeconds = seconds % 60;
|
|
50
|
+
if (minutes < 60) {
|
|
51
|
+
return `${minutes}m ${remainingSeconds}s`;
|
|
52
|
+
}
|
|
53
|
+
const hours = Math.floor(minutes / 60);
|
|
54
|
+
const remainingMinutes = minutes % 60;
|
|
55
|
+
return `${hours}h ${remainingMinutes}m`;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.ProgressTracker = ProgressTracker;
|
|
59
|
+
//# sourceMappingURL=progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../../../src/discovery/progress.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAa,eAAe;IAK1B,YAA6B,iBAAyB;QAAzB,sBAAiB,GAAjB,iBAAiB,CAAQ;QAH9C,mBAAc,GAAW,CAAC,CAAA;QACjB,qBAAgB,GAAW,IAAI,CAAA,CAAC,sBAAsB;QAGrE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC7B,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,OAAe,EAAE,YAAoB;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAEtB,qDAAqD;QACrD,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,IAAI,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC1F,OAAO,IAAI,CAAA;QACb,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,GAAG,CAAA;QAEzB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC,CAAA;QACvE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAA;QAEzD,gBAAgB;QAChB,IAAI,GAAG,GAAG,EAAE,CAAA;QACZ,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,IAAI,CAAC,iBAAiB,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,GAAG,OAAO,GAAG,OAAO,CAAA;YAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAA;YAClD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,CAAA;YAC/C,GAAG,GAAG,WAAW,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAA;QACpD,CAAC;QAED,OAAO,aAAa,UAAU,MAAM,OAAO,IAAI,IAAI,CAAC,iBAAiB,sBAAsB,YAAY,eAAe,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,GAAG,EAAE,CAAA;IAC5J,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,OAAe;QACpC,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;YACjB,OAAO,GAAG,OAAO,GAAG,CAAA;QACtB,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;QACxC,MAAM,gBAAgB,GAAG,OAAO,GAAG,EAAE,CAAA;QAErC,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;YACjB,OAAO,GAAG,OAAO,KAAK,gBAAgB,GAAG,CAAA;QAC3C,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;QACtC,MAAM,gBAAgB,GAAG,OAAO,GAAG,EAAE,CAAA;QACrC,OAAO,GAAG,KAAK,KAAK,gBAAgB,GAAG,CAAA;IACzC,CAAC;CACF;AA7DD,0CA6DC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../../../src/discovery/scanner.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,0BAA0B,EAAE,MAAM,wBAAwB,CAAA;AAExF,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EAC1B,MAAM,0BAA0B,CAAA;AAEjC;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,oBAAoB;IAC5D,mCAAmC;IACnC,cAAc,EAAE,0BAA0B,CAAA;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAA;IAEZ,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAA;IAEf,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAA;IAEf,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAA;IAE3E,4BAA4B;IAC5B,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAA;IAElD,+DAA+D;IAC/D,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,WAAW,KAAK,IAAI,CAAA;CAClG;AAsCD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,cAAc,CAClC,gBAAgB,EAAE,gBAAgB,EAClC,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAsH7B"}
|