@samlab-corp/sfm-node 0.2.0 → 0.3.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/dist/commands/data.d.ts +4 -4
- package/dist/commands/data.js +12 -12
- package/dist/commands/data.js.map +1 -1
- package/dist/commands/fingerprint.d.ts +23 -23
- package/dist/commands/fingerprint.d.ts.map +1 -1
- package/dist/commands/fingerprint.js +114 -114
- package/dist/commands/fingerprint.js.map +1 -1
- package/dist/commands/firmware.d.ts +5 -5
- package/dist/commands/firmware.d.ts.map +1 -1
- package/dist/commands/firmware.js +32 -32
- package/dist/commands/firmware.js.map +1 -1
- package/dist/commands/freescan.d.ts +16 -16
- package/dist/commands/freescan.d.ts.map +1 -1
- package/dist/commands/freescan.js +41 -41
- package/dist/commands/freescan.js.map +1 -1
- package/dist/commands/index.d.ts +12 -12
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +14 -14
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/system.d.ts +12 -12
- package/dist/commands/system.d.ts.map +1 -1
- package/dist/commands/system.js +14 -14
- package/dist/commands/system.js.map +1 -1
- package/dist/constants/protocol.d.ts +25 -0
- package/dist/constants/protocol.d.ts.map +1 -1
- package/dist/constants/protocol.js +26 -1
- package/dist/constants/protocol.js.map +1 -1
- package/dist/core/client.d.ts +33 -21
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +72 -52
- package/dist/core/client.js.map +1 -1
- package/dist/core/crypto.d.ts +19 -19
- package/dist/core/crypto.js +26 -26
- package/dist/core/crypto.js.map +1 -1
- package/dist/core/errors.d.ts +6 -6
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +46 -32
- package/dist/core/errors.js.map +1 -1
- package/dist/core/index.d.ts +3 -3
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +5 -2
- package/dist/core/index.js.map +1 -1
- package/dist/core/packet.d.ts +81 -41
- package/dist/core/packet.d.ts.map +1 -1
- package/dist/core/packet.js +256 -60
- package/dist/core/packet.js.map +1 -1
- package/dist/core/serial.d.ts +37 -27
- package/dist/core/serial.d.ts.map +1 -1
- package/dist/core/serial.js +91 -62
- package/dist/core/serial.js.map +1 -1
- package/dist/core/tcp.d.ts +14 -14
- package/dist/core/tcp.js +17 -17
- package/dist/core/tcp.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serial.d.ts","sourceRoot":"","sources":["../../src/core/serial.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQxC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,
|
|
1
|
+
{"version":3,"file":"serial.d.ts","sourceRoot":"","sources":["../../src/core/serial.ts"],"names":[],"mappings":"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"}
|
package/dist/core/serial.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* SFM
|
|
3
|
+
* SFM 시리얼 포트 통신 모듈
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* Ghidra 디컴파일 분석 기반 - FUN_140010350 (Open), FUN_140010280 (Close),
|
|
6
6
|
* FUN_140010420 (Read), FUN_140010770 (Write)
|
|
7
7
|
*
|
|
8
|
-
*
|
|
8
|
+
* 시리얼 설정:
|
|
9
9
|
* BaudRate: 115200 (0x1C200)
|
|
10
10
|
* ByteSize: 8
|
|
11
11
|
* Parity: None
|
|
@@ -16,16 +16,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
16
16
|
exports.SfmSerial = void 0;
|
|
17
17
|
const serialport_1 = require("serialport");
|
|
18
18
|
const DEFAULT_BAUD_RATE = 115200;
|
|
19
|
-
const WRITE_CHUNK_SIZE = 0x40; // 64
|
|
19
|
+
const WRITE_CHUNK_SIZE = 0x40; // 64바이트 쓰기 청크 (FUN_140010770 기반)
|
|
20
20
|
const READ_TIMEOUT_MS = 3000;
|
|
21
21
|
const INTER_CHAR_TIMEOUT_MS = 50; // ReadIntervalTimeout (FUN_140010630 line 862)
|
|
22
|
-
const WRITE_STALL_LIMIT = 30; // 0x1e
|
|
22
|
+
const WRITE_STALL_LIMIT = 30; // 0x1e 재시도 후 중단 (FUN_140010770 lines 773-775)
|
|
23
23
|
class SfmSerial {
|
|
24
24
|
constructor(options = {}) {
|
|
25
25
|
this._reconnecting = false;
|
|
26
26
|
this._reconnectTimer = null;
|
|
27
27
|
this.port = null;
|
|
28
|
-
this.portPath = options.path ||
|
|
28
|
+
this.portPath = options.path || "";
|
|
29
29
|
this.baudRate = options.baudRate || DEFAULT_BAUD_RATE;
|
|
30
30
|
this.isOpen = false;
|
|
31
31
|
this._readBuffer = Buffer.alloc(0);
|
|
@@ -34,47 +34,49 @@ class SfmSerial {
|
|
|
34
34
|
this._readTimer = null;
|
|
35
35
|
this._interCharTimer = null;
|
|
36
36
|
this._onDisconnect = null;
|
|
37
|
-
this._autoReconnect = options.autoReconnect?.enabled
|
|
38
|
-
|
|
37
|
+
this._autoReconnect = options.autoReconnect?.enabled
|
|
38
|
+
? options.autoReconnect
|
|
39
|
+
: null;
|
|
40
|
+
// CommTimeouts 상세 설정 (FUN_140010630 lines 860-868)
|
|
39
41
|
this.interCharTimeout = options.interCharTimeout ?? INTER_CHAR_TIMEOUT_MS;
|
|
40
42
|
}
|
|
41
|
-
/**
|
|
43
|
+
/** 자동 재연결 옵션 설정 (생성자/내부 사용) */
|
|
42
44
|
setAutoReconnect(options) {
|
|
43
45
|
this._autoReconnect = options?.enabled ? options : null;
|
|
44
46
|
if (!options?.enabled) {
|
|
45
47
|
this._stopReconnect();
|
|
46
48
|
}
|
|
47
49
|
}
|
|
48
|
-
/**
|
|
50
|
+
/** 자동 재연결 콜백만 설정 (기존 enabled/maxRetries/interval 유지) */
|
|
49
51
|
setAutoReconnectCallbacks(callbacks) {
|
|
50
52
|
if (this._autoReconnect) {
|
|
51
53
|
Object.assign(this._autoReconnect, callbacks);
|
|
52
54
|
}
|
|
53
55
|
}
|
|
54
|
-
/**
|
|
56
|
+
/** 재연결 진행 중 여부 */
|
|
55
57
|
get isReconnecting() {
|
|
56
58
|
return this._reconnecting;
|
|
57
59
|
}
|
|
58
|
-
/**
|
|
60
|
+
/** 연결 해제 콜백 설정 */
|
|
59
61
|
setOnDisconnect(callback) {
|
|
60
62
|
this._onDisconnect = callback;
|
|
61
63
|
}
|
|
62
64
|
/**
|
|
63
|
-
*
|
|
64
|
-
* (
|
|
65
|
+
* 사용 가능한 시리얼 포트 목록 조회
|
|
66
|
+
* (레지스트리 HARDWARE\DEVICEMAP\SERIALCOMM 대응)
|
|
65
67
|
*/
|
|
66
68
|
static async listPorts() {
|
|
67
69
|
const ports = await serialport_1.SerialPort.list();
|
|
68
|
-
return ports.map(p => ({
|
|
70
|
+
return ports.map((p) => ({
|
|
69
71
|
path: p.path,
|
|
70
|
-
manufacturer: p.manufacturer ||
|
|
71
|
-
serialNumber: p.serialNumber ||
|
|
72
|
-
vendorId: p.vendorId ||
|
|
73
|
-
productId: p.productId ||
|
|
72
|
+
manufacturer: p.manufacturer || "",
|
|
73
|
+
serialNumber: p.serialNumber || "",
|
|
74
|
+
vendorId: p.vendorId || "",
|
|
75
|
+
productId: p.productId || "",
|
|
74
76
|
}));
|
|
75
77
|
}
|
|
76
78
|
/**
|
|
77
|
-
*
|
|
79
|
+
* 시리얼 포트 열기
|
|
78
80
|
* (FUN_140010350: CreateFileA + SetCommState + SetCommTimeouts)
|
|
79
81
|
*/
|
|
80
82
|
async open(path) {
|
|
@@ -83,25 +85,25 @@ class SfmSerial {
|
|
|
83
85
|
}
|
|
84
86
|
this.portPath = path || this.portPath;
|
|
85
87
|
if (!this.portPath) {
|
|
86
|
-
throw new Error(
|
|
88
|
+
throw new Error("Port path must be specified");
|
|
87
89
|
}
|
|
88
90
|
return new Promise((resolve, reject) => {
|
|
89
91
|
this.port = new serialport_1.SerialPort({
|
|
90
92
|
path: this.portPath,
|
|
91
93
|
baudRate: this.baudRate,
|
|
92
94
|
dataBits: 8,
|
|
93
|
-
parity:
|
|
95
|
+
parity: "none",
|
|
94
96
|
stopBits: 1,
|
|
95
|
-
rtscts: true, // RTS/CTS
|
|
97
|
+
rtscts: true, // RTS/CTS 흐름 제어 (DCB bits 0xfffffcff | 3)
|
|
96
98
|
autoOpen: false,
|
|
97
99
|
});
|
|
98
|
-
this.port.on(
|
|
100
|
+
this.port.on("data", (data) => {
|
|
99
101
|
this._readBuffer = Buffer.concat([this._readBuffer, data]);
|
|
100
102
|
if (this._readResolve) {
|
|
101
103
|
this._resolveRead();
|
|
102
104
|
}
|
|
103
105
|
});
|
|
104
|
-
this.port.on(
|
|
106
|
+
this.port.on("error", (err) => {
|
|
105
107
|
if (this._readReject) {
|
|
106
108
|
this._readReject(err);
|
|
107
109
|
this._readResolve = null;
|
|
@@ -113,12 +115,12 @@ class SfmSerial {
|
|
|
113
115
|
this._handleUnexpectedDisconnect(err);
|
|
114
116
|
}
|
|
115
117
|
});
|
|
116
|
-
this.port.on(
|
|
118
|
+
this.port.on("close", () => {
|
|
117
119
|
if (this.isOpen) {
|
|
118
120
|
this.isOpen = false;
|
|
119
121
|
this._readBuffer = Buffer.alloc(0);
|
|
120
122
|
if (this._readReject) {
|
|
121
|
-
this._readReject(new Error(
|
|
123
|
+
this._readReject(new Error("Serial port disconnected"));
|
|
122
124
|
this._readResolve = null;
|
|
123
125
|
this._readReject = null;
|
|
124
126
|
}
|
|
@@ -133,24 +135,26 @@ class SfmSerial {
|
|
|
133
135
|
return;
|
|
134
136
|
}
|
|
135
137
|
this.isOpen = true;
|
|
136
|
-
// DTR
|
|
138
|
+
// DTR 신호 설정 (FUN_140010630 line 886: EscapeCommFunction(handle, 5) = SETDTR)
|
|
137
139
|
this.port.set({ dtr: true }, () => {
|
|
138
|
-
// PurgeComm(hFile, 0xF) -
|
|
139
|
-
this.purgeAll()
|
|
140
|
+
// PurgeComm(hFile, 0xF) - TX/RX 모두 클리어
|
|
141
|
+
this.purgeAll()
|
|
142
|
+
.then(() => resolve())
|
|
143
|
+
.catch(() => resolve());
|
|
140
144
|
});
|
|
141
145
|
});
|
|
142
146
|
});
|
|
143
147
|
}
|
|
144
148
|
/**
|
|
145
|
-
*
|
|
149
|
+
* 시리얼 포트 닫기
|
|
146
150
|
* (FUN_140010280: PurgeComm + CloseHandle)
|
|
147
151
|
*/
|
|
148
152
|
async close() {
|
|
149
153
|
if (!this.isOpen || !this.port)
|
|
150
154
|
return;
|
|
151
|
-
this.isOpen = false; //
|
|
152
|
-
this._stopReconnect(); //
|
|
153
|
-
//
|
|
155
|
+
this.isOpen = false; // close 이벤트에서 _onDisconnect 호출 방지
|
|
156
|
+
this._stopReconnect(); // 재연결 타이머 정리
|
|
157
|
+
// 대기 중인 읽기 타이머/프로미스 정리
|
|
154
158
|
if (this._readTimer) {
|
|
155
159
|
clearTimeout(this._readTimer);
|
|
156
160
|
this._readTimer = null;
|
|
@@ -160,31 +164,43 @@ class SfmSerial {
|
|
|
160
164
|
this._interCharTimer = null;
|
|
161
165
|
}
|
|
162
166
|
if (this._readReject) {
|
|
163
|
-
this._readReject(new Error(
|
|
167
|
+
this._readReject(new Error("Port closed"));
|
|
164
168
|
this._readResolve = null;
|
|
165
169
|
this._readReject = null;
|
|
166
170
|
}
|
|
167
171
|
try {
|
|
168
172
|
await this.purgeAll();
|
|
169
173
|
}
|
|
170
|
-
catch {
|
|
174
|
+
catch {
|
|
175
|
+
/* 포트가 이미 에러 상태일 수 있음 */
|
|
176
|
+
}
|
|
171
177
|
return new Promise((resolve) => {
|
|
172
|
-
this.port.removeAllListeners(); //
|
|
178
|
+
this.port.removeAllListeners(); // 이벤트 리스너 정리
|
|
173
179
|
this.port.close(() => {
|
|
174
180
|
this._readBuffer = Buffer.alloc(0);
|
|
175
|
-
this.port = null; //
|
|
176
|
-
//
|
|
181
|
+
this.port = null; // 참조 해제
|
|
182
|
+
// OS가 fd 잠금을 완전히 해제할 시간 확보
|
|
177
183
|
setTimeout(resolve, 100);
|
|
178
184
|
});
|
|
179
185
|
});
|
|
180
186
|
}
|
|
181
187
|
/**
|
|
182
|
-
*
|
|
183
|
-
* (FUN_140010770: 64
|
|
188
|
+
* 데이터 쓰기 (청크 분할)
|
|
189
|
+
* (FUN_140010770: 64바이트 청크 WriteFile)
|
|
190
|
+
*
|
|
191
|
+
* 시리얼 포트에 데이터를 한 번에 보내지 않고 64바이트(WRITE_CHUNK_SIZE)씩
|
|
192
|
+
* 쪼개서 전송한다. 각 청크 전송 후 drain()으로 하드웨어 전송 완료를 대기한다.
|
|
193
|
+
*
|
|
194
|
+
* 64바이트 단위로 분할하는 이유:
|
|
195
|
+
* - USB-Serial 변환기(FTDI, CH340 등)의 USB bulk transfer 단위가 64바이트
|
|
196
|
+
* - 시리얼 TX FIFO 버퍼 크기 제한으로 큰 데이터를 한 번에 넣으면 overflow 가능
|
|
197
|
+
*
|
|
198
|
+
* 일반 패킷(13바이트)은 1회로 끝나지만, 템플릿 데이터(지문 등) 전송 시
|
|
199
|
+
* 수백~수천 바이트가 될 수 있어 분할 전송이 필요하다.
|
|
184
200
|
*/
|
|
185
201
|
async write(data) {
|
|
186
202
|
if (!this.isOpen)
|
|
187
|
-
throw new Error(
|
|
203
|
+
throw new Error("Port is not open");
|
|
188
204
|
const buf = Buffer.isBuffer(data) ? data : Buffer.from(data);
|
|
189
205
|
let offset = 0;
|
|
190
206
|
while (offset < buf.length) {
|
|
@@ -216,13 +232,13 @@ class SfmSerial {
|
|
|
216
232
|
}
|
|
217
233
|
}
|
|
218
234
|
/**
|
|
219
|
-
*
|
|
220
|
-
* (FUN_140010420:
|
|
235
|
+
* 데이터 읽기
|
|
236
|
+
* (FUN_140010420: 타임아웃 포함 ReadFile)
|
|
221
237
|
*/
|
|
222
238
|
async read(expectedLength, timeoutMs = READ_TIMEOUT_MS) {
|
|
223
239
|
if (!this.isOpen)
|
|
224
|
-
throw new Error(
|
|
225
|
-
//
|
|
240
|
+
throw new Error("Port is not open");
|
|
241
|
+
// 버퍼에 충분한 데이터가 이미 있으면 즉시 반환
|
|
226
242
|
if (this._readBuffer.length >= expectedLength) {
|
|
227
243
|
const result = this._readBuffer.subarray(0, expectedLength);
|
|
228
244
|
this._readBuffer = this._readBuffer.subarray(expectedLength);
|
|
@@ -243,6 +259,7 @@ class SfmSerial {
|
|
|
243
259
|
this._readResolve = () => {
|
|
244
260
|
if (settled)
|
|
245
261
|
return;
|
|
262
|
+
// 예상되는 문자
|
|
246
263
|
if (this._readBuffer.length >= expectedLength) {
|
|
247
264
|
settled = true;
|
|
248
265
|
cleanup();
|
|
@@ -251,15 +268,27 @@ class SfmSerial {
|
|
|
251
268
|
resolve(Buffer.from(result));
|
|
252
269
|
return;
|
|
253
270
|
}
|
|
254
|
-
//
|
|
255
|
-
//
|
|
271
|
+
// 문자 간 타임아웃 (Windows ReadIntervalTimeout 재현)
|
|
272
|
+
//
|
|
273
|
+
// 목적: 요청한 바이트 수(expectedLength)보다 적은 데이터만 도착하고
|
|
274
|
+
// 디바이스가 나머지를 보내지 않는 비정상 상황에서,
|
|
275
|
+
// 전체 타임아웃(3초)까지 기다리지 않고 빠르게 부분 데이터를 반환한다.
|
|
276
|
+
//
|
|
277
|
+
// 동작: data 이벤트가 올 때마다 타이머를 리셋(50ms)하고,
|
|
278
|
+
// 50ms 동안 추가 데이터가 없으면 "더 이상 안 온다"고 판단하여
|
|
279
|
+
// 현재까지 쌓인 버퍼를 그대로 반환한다.
|
|
280
|
+
//
|
|
281
|
+
// 발생 시나리오: 패킷 손상, 디바이스 오류, 통신 중 연결 불안정 등
|
|
282
|
+
// 정상 통신에서는 expectedLength를 충족하여 위 블록에서 즉시 반환되므로
|
|
283
|
+
// 이 경로를 타지 않는다.
|
|
256
284
|
if (this._readBuffer.length > 0 && this.interCharTimeout > 0) {
|
|
257
285
|
if (this._interCharTimer)
|
|
258
286
|
clearTimeout(this._interCharTimer);
|
|
259
287
|
this._interCharTimer = setTimeout(() => {
|
|
260
288
|
if (settled)
|
|
261
289
|
return;
|
|
262
|
-
if (this._readBuffer.length > 0 &&
|
|
290
|
+
if (this._readBuffer.length > 0 &&
|
|
291
|
+
this._readBuffer.length < expectedLength) {
|
|
263
292
|
settled = true;
|
|
264
293
|
cleanup();
|
|
265
294
|
const available = Buffer.from(this._readBuffer);
|
|
@@ -276,7 +305,7 @@ class SfmSerial {
|
|
|
276
305
|
cleanup();
|
|
277
306
|
reject(err);
|
|
278
307
|
};
|
|
279
|
-
//
|
|
308
|
+
// 전체 타임아웃
|
|
280
309
|
this._readTimer = setTimeout(() => {
|
|
281
310
|
if (settled)
|
|
282
311
|
return;
|
|
@@ -291,23 +320,23 @@ class SfmSerial {
|
|
|
291
320
|
reject(new Error(`Read timeout (${timeoutMs}ms)`));
|
|
292
321
|
}
|
|
293
322
|
}, timeoutMs);
|
|
294
|
-
//
|
|
323
|
+
// 이미 도착한 데이터 확인
|
|
295
324
|
this._readResolve();
|
|
296
325
|
});
|
|
297
326
|
}
|
|
298
327
|
/**
|
|
299
|
-
*
|
|
328
|
+
* 단일 바이트 읽기 (핸드셰이크용)
|
|
300
329
|
*/
|
|
301
330
|
async readByte(timeoutMs = READ_TIMEOUT_MS) {
|
|
302
331
|
const buf = await this.read(1, timeoutMs);
|
|
303
332
|
return buf[0];
|
|
304
333
|
}
|
|
305
334
|
/**
|
|
306
|
-
*
|
|
335
|
+
* 특정 문자열까지 읽기 (펌웨어 업그레이드 핸드셰이크용)
|
|
307
336
|
*/
|
|
308
337
|
async readUntil(marker, timeoutMs = 5000) {
|
|
309
338
|
const startTime = Date.now();
|
|
310
|
-
let accumulated =
|
|
339
|
+
let accumulated = "";
|
|
311
340
|
while (Date.now() - startTime < timeoutMs) {
|
|
312
341
|
try {
|
|
313
342
|
const byte = await this.readByte(100);
|
|
@@ -317,13 +346,13 @@ class SfmSerial {
|
|
|
317
346
|
}
|
|
318
347
|
}
|
|
319
348
|
catch {
|
|
320
|
-
//
|
|
349
|
+
// 단일 바이트 타임아웃, 계속
|
|
321
350
|
}
|
|
322
351
|
}
|
|
323
352
|
throw new Error(`Marker wait timeout: "${marker}" (${timeoutMs}ms)`);
|
|
324
353
|
}
|
|
325
354
|
/**
|
|
326
|
-
*
|
|
355
|
+
* RX 버퍼 클리어 (PurgeComm(hFile, 0xA) - PURGE_RXABORT | PURGE_RXCLEAR)
|
|
327
356
|
* (FUN_1400101f0)
|
|
328
357
|
*/
|
|
329
358
|
async purgeRX() {
|
|
@@ -337,7 +366,7 @@ class SfmSerial {
|
|
|
337
366
|
}
|
|
338
367
|
}
|
|
339
368
|
/**
|
|
340
|
-
*
|
|
369
|
+
* TX 버퍼 클리어 (PurgeComm(hFile, 0x5) - PURGE_TXABORT | PURGE_TXCLEAR)
|
|
341
370
|
* (FUN_140010230)
|
|
342
371
|
*/
|
|
343
372
|
async purgeTX() {
|
|
@@ -350,7 +379,7 @@ class SfmSerial {
|
|
|
350
379
|
}
|
|
351
380
|
}
|
|
352
381
|
/**
|
|
353
|
-
*
|
|
382
|
+
* TX/RX 모두 클리어 (PurgeComm(hFile, 0xF))
|
|
354
383
|
*/
|
|
355
384
|
async purgeAll() {
|
|
356
385
|
await this.purgeTX();
|
|
@@ -371,7 +400,7 @@ class SfmSerial {
|
|
|
371
400
|
let attempt = 0;
|
|
372
401
|
const tryReconnect = async () => {
|
|
373
402
|
if (!this._reconnecting)
|
|
374
|
-
return; // stopReconnect
|
|
403
|
+
return; // stopReconnect 호출됨
|
|
375
404
|
const maxRetries = this._autoReconnect?.maxRetries ?? 5;
|
|
376
405
|
const interval = this._autoReconnect?.interval ?? 2000;
|
|
377
406
|
attempt++;
|
|
@@ -379,7 +408,7 @@ class SfmSerial {
|
|
|
379
408
|
try {
|
|
380
409
|
await this.open();
|
|
381
410
|
if (!this._reconnecting)
|
|
382
|
-
return; //
|
|
411
|
+
return; // open() 중 stopReconnect 호출됨
|
|
383
412
|
this._reconnecting = false;
|
|
384
413
|
if (this._reconnectTimer) {
|
|
385
414
|
clearTimeout(this._reconnectTimer);
|
|
@@ -389,14 +418,14 @@ class SfmSerial {
|
|
|
389
418
|
}
|
|
390
419
|
catch (err) {
|
|
391
420
|
if (!this._reconnecting)
|
|
392
|
-
return; //
|
|
421
|
+
return; // open() 중 stopReconnect 호출됨
|
|
393
422
|
if (maxRetries > 0 && attempt >= maxRetries) {
|
|
394
423
|
this._reconnecting = false;
|
|
395
424
|
if (this._reconnectTimer) {
|
|
396
425
|
clearTimeout(this._reconnectTimer);
|
|
397
426
|
this._reconnectTimer = null;
|
|
398
427
|
}
|
|
399
|
-
const failError = new Error(`Reconnect failed: gave up after ${maxRetries} attempts (cause: ${originalError?.message ||
|
|
428
|
+
const failError = new Error(`Reconnect failed: gave up after ${maxRetries} attempts (cause: ${originalError?.message || "unknown"})`);
|
|
400
429
|
this._autoReconnect?.onFailed?.(failError);
|
|
401
430
|
this._onDisconnect?.(originalError);
|
|
402
431
|
}
|
package/dist/core/serial.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serial.js","sourceRoot":"","sources":["../../src/core/serial.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"serial.js","sourceRoot":"","sources":["../../src/core/serial.ts"],"names":[],"mappings":"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"}
|
package/dist/core/tcp.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* SFM TCP/IP
|
|
2
|
+
* SFM TCP/IP 통신 모듈
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* 시리얼 포트와 동일한 패킷 프로토콜을 TCP 소켓으로 전송한다.
|
|
5
|
+
* SfmSerial과 동일한 인터페이스(open, close, read, write)를 제공하여
|
|
6
|
+
* SfmClient에서 투명하게 대체 가능하다.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
* - "TCP Port" @ 14004f280: TCP
|
|
10
|
-
* -
|
|
8
|
+
* 디컴파일 분석:
|
|
9
|
+
* - "TCP Port" @ 14004f280: TCP 포트 설정 문자열
|
|
10
|
+
* - 프로토콜 패킷 구조는 시리얼과 동일 (13/15/35바이트)
|
|
11
11
|
*/
|
|
12
12
|
export interface SfmTcpOptions {
|
|
13
13
|
host?: string;
|
|
@@ -24,31 +24,31 @@ export declare class SfmTcp {
|
|
|
24
24
|
private _readTimer;
|
|
25
25
|
constructor(options?: SfmTcpOptions);
|
|
26
26
|
/**
|
|
27
|
-
*
|
|
27
|
+
* TCP 연결 열기
|
|
28
28
|
*/
|
|
29
29
|
open(hostOrPath?: string): Promise<void>;
|
|
30
30
|
/**
|
|
31
|
-
*
|
|
31
|
+
* TCP 연결 닫기
|
|
32
32
|
*/
|
|
33
33
|
close(): Promise<void>;
|
|
34
34
|
/**
|
|
35
|
-
*
|
|
35
|
+
* 데이터 쓰기 (TCP는 청크 분할 불필요, 인터페이스 호환용)
|
|
36
36
|
*/
|
|
37
37
|
write(data: Buffer | Uint8Array): Promise<void>;
|
|
38
38
|
/**
|
|
39
|
-
*
|
|
39
|
+
* 데이터 읽기 (SfmSerial.read와 동일한 인터페이스)
|
|
40
40
|
*/
|
|
41
41
|
read(expectedLength: number, timeoutMs?: number): Promise<Buffer>;
|
|
42
42
|
/**
|
|
43
|
-
*
|
|
43
|
+
* 단일 바이트 읽기
|
|
44
44
|
*/
|
|
45
45
|
readByte(timeoutMs?: number): Promise<number>;
|
|
46
46
|
/**
|
|
47
|
-
*
|
|
47
|
+
* 특정 문자열까지 읽기
|
|
48
48
|
*/
|
|
49
49
|
readUntil(marker: string, timeoutMs?: number): Promise<string>;
|
|
50
50
|
/**
|
|
51
|
-
*
|
|
51
|
+
* RX 버퍼 클리어
|
|
52
52
|
*/
|
|
53
53
|
purgeRX(): Promise<void>;
|
|
54
54
|
purgeTX(): Promise<void>;
|
package/dist/core/tcp.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* SFM TCP/IP
|
|
3
|
+
* SFM TCP/IP 통신 모듈
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* 시리얼 포트와 동일한 패킷 프로토콜을 TCP 소켓으로 전송한다.
|
|
6
|
+
* SfmSerial과 동일한 인터페이스(open, close, read, write)를 제공하여
|
|
7
|
+
* SfmClient에서 투명하게 대체 가능하다.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
* - "TCP Port" @ 14004f280: TCP
|
|
11
|
-
* -
|
|
9
|
+
* 디컴파일 분석:
|
|
10
|
+
* - "TCP Port" @ 14004f280: TCP 포트 설정 문자열
|
|
11
|
+
* - 프로토콜 패킷 구조는 시리얼과 동일 (13/15/35바이트)
|
|
12
12
|
*/
|
|
13
13
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
14
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
@@ -31,13 +31,13 @@ class SfmTcp {
|
|
|
31
31
|
this._readTimer = null;
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
|
-
*
|
|
34
|
+
* TCP 연결 열기
|
|
35
35
|
*/
|
|
36
36
|
async open(hostOrPath) {
|
|
37
37
|
if (this.isOpen) {
|
|
38
38
|
await this.close();
|
|
39
39
|
}
|
|
40
|
-
//
|
|
40
|
+
// host:port 형식 지원
|
|
41
41
|
if (hostOrPath) {
|
|
42
42
|
const parts = hostOrPath.split(':');
|
|
43
43
|
this.host = parts[0];
|
|
@@ -94,7 +94,7 @@ class SfmTcp {
|
|
|
94
94
|
});
|
|
95
95
|
}
|
|
96
96
|
/**
|
|
97
|
-
*
|
|
97
|
+
* TCP 연결 닫기
|
|
98
98
|
*/
|
|
99
99
|
async close() {
|
|
100
100
|
if (!this.isOpen || !this.socket)
|
|
@@ -108,7 +108,7 @@ class SfmTcp {
|
|
|
108
108
|
});
|
|
109
109
|
}
|
|
110
110
|
/**
|
|
111
|
-
*
|
|
111
|
+
* 데이터 쓰기 (TCP는 청크 분할 불필요, 인터페이스 호환용)
|
|
112
112
|
*/
|
|
113
113
|
async write(data) {
|
|
114
114
|
if (!this.isOpen)
|
|
@@ -123,7 +123,7 @@ class SfmTcp {
|
|
|
123
123
|
});
|
|
124
124
|
}
|
|
125
125
|
/**
|
|
126
|
-
*
|
|
126
|
+
* 데이터 읽기 (SfmSerial.read와 동일한 인터페이스)
|
|
127
127
|
*/
|
|
128
128
|
async read(expectedLength, timeoutMs = READ_TIMEOUT_MS) {
|
|
129
129
|
if (!this.isOpen)
|
|
@@ -178,14 +178,14 @@ class SfmTcp {
|
|
|
178
178
|
});
|
|
179
179
|
}
|
|
180
180
|
/**
|
|
181
|
-
*
|
|
181
|
+
* 단일 바이트 읽기
|
|
182
182
|
*/
|
|
183
183
|
async readByte(timeoutMs = READ_TIMEOUT_MS) {
|
|
184
184
|
const buf = await this.read(1, timeoutMs);
|
|
185
185
|
return buf[0];
|
|
186
186
|
}
|
|
187
187
|
/**
|
|
188
|
-
*
|
|
188
|
+
* 특정 문자열까지 읽기
|
|
189
189
|
*/
|
|
190
190
|
async readUntil(marker, timeoutMs = 5000) {
|
|
191
191
|
const startTime = Date.now();
|
|
@@ -199,19 +199,19 @@ class SfmTcp {
|
|
|
199
199
|
}
|
|
200
200
|
}
|
|
201
201
|
catch {
|
|
202
|
-
//
|
|
202
|
+
// 단일 바이트 타임아웃, 계속
|
|
203
203
|
}
|
|
204
204
|
}
|
|
205
205
|
throw new Error(`Marker wait timeout: "${marker}" (${timeoutMs}ms)`);
|
|
206
206
|
}
|
|
207
207
|
/**
|
|
208
|
-
*
|
|
208
|
+
* RX 버퍼 클리어
|
|
209
209
|
*/
|
|
210
210
|
async purgeRX() {
|
|
211
211
|
this._readBuffer = Buffer.alloc(0);
|
|
212
212
|
}
|
|
213
213
|
async purgeTX() {
|
|
214
|
-
// TCP
|
|
214
|
+
// TCP는 별도 TX 퍼지 불필요
|
|
215
215
|
}
|
|
216
216
|
async purgeAll() {
|
|
217
217
|
await this.purgeRX();
|