@samlab-corp/sfm-node 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +479 -0
  3. package/dist/commands/data.d.ts +29 -0
  4. package/dist/commands/data.d.ts.map +1 -0
  5. package/dist/commands/data.js +176 -0
  6. package/dist/commands/data.js.map +1 -0
  7. package/dist/commands/fingerprint.d.ts +132 -0
  8. package/dist/commands/fingerprint.d.ts.map +1 -0
  9. package/dist/commands/fingerprint.js +580 -0
  10. package/dist/commands/fingerprint.js.map +1 -0
  11. package/dist/commands/firmware.d.ts +37 -0
  12. package/dist/commands/firmware.d.ts.map +1 -0
  13. package/dist/commands/firmware.js +152 -0
  14. package/dist/commands/firmware.js.map +1 -0
  15. package/dist/commands/freescan.d.ts +68 -0
  16. package/dist/commands/freescan.d.ts.map +1 -0
  17. package/dist/commands/freescan.js +202 -0
  18. package/dist/commands/freescan.js.map +1 -0
  19. package/dist/commands/index.d.ts +88 -0
  20. package/dist/commands/index.d.ts.map +1 -0
  21. package/dist/commands/index.js +104 -0
  22. package/dist/commands/index.js.map +1 -0
  23. package/dist/commands/system.d.ts +82 -0
  24. package/dist/commands/system.d.ts.map +1 -0
  25. package/dist/commands/system.js +191 -0
  26. package/dist/commands/system.js.map +1 -0
  27. package/dist/constants/crypto.d.ts +11 -0
  28. package/dist/constants/crypto.d.ts.map +1 -0
  29. package/dist/constants/crypto.js +10 -0
  30. package/dist/constants/crypto.js.map +1 -0
  31. package/dist/constants/index.d.ts +6 -0
  32. package/dist/constants/index.d.ts.map +1 -0
  33. package/dist/constants/index.js +4 -0
  34. package/dist/constants/index.js.map +1 -0
  35. package/dist/constants/packet.d.ts +17 -0
  36. package/dist/constants/packet.d.ts.map +1 -0
  37. package/dist/constants/packet.js +17 -0
  38. package/dist/constants/packet.js.map +1 -0
  39. package/dist/constants/protocol.d.ts +653 -0
  40. package/dist/constants/protocol.d.ts.map +1 -0
  41. package/dist/constants/protocol.js +422 -0
  42. package/dist/constants/protocol.js.map +1 -0
  43. package/dist/core/client.d.ts +118 -0
  44. package/dist/core/client.d.ts.map +1 -0
  45. package/dist/core/client.js +320 -0
  46. package/dist/core/client.js.map +1 -0
  47. package/dist/core/crypto.d.ts +86 -0
  48. package/dist/core/crypto.d.ts.map +1 -0
  49. package/dist/core/crypto.js +248 -0
  50. package/dist/core/crypto.js.map +1 -0
  51. package/dist/core/errors.d.ts +25 -0
  52. package/dist/core/errors.d.ts.map +1 -0
  53. package/dist/core/errors.js +66 -0
  54. package/dist/core/errors.js.map +1 -0
  55. package/dist/core/index.d.ts +15 -0
  56. package/dist/core/index.d.ts.map +1 -0
  57. package/dist/core/index.js +10 -0
  58. package/dist/core/index.js.map +1 -0
  59. package/dist/core/packet.d.ts +126 -0
  60. package/dist/core/packet.d.ts.map +1 -0
  61. package/dist/core/packet.js +267 -0
  62. package/dist/core/packet.js.map +1 -0
  63. package/dist/core/serial.d.ts +123 -0
  64. package/dist/core/serial.d.ts.map +1 -0
  65. package/dist/core/serial.js +421 -0
  66. package/dist/core/serial.js.map +1 -0
  67. package/dist/core/tcp.d.ts +58 -0
  68. package/dist/core/tcp.d.ts.map +1 -0
  69. package/dist/core/tcp.js +219 -0
  70. package/dist/core/tcp.js.map +1 -0
  71. package/dist/index.d.ts +19 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +16 -0
  74. package/dist/index.js.map +1 -0
  75. package/package.json +49 -0
@@ -0,0 +1,82 @@
1
+ /**
2
+ * System/parameter/diagnostic commands
3
+ */
4
+ import { SFM_PARAM } from "../constants";
5
+ import type { SfmParamAliasMap } from "../constants";
6
+ import type { SfmClient } from "../core";
7
+ import type { DataCommands } from "./data";
8
+ export interface SystemStatusResult {
9
+ success: boolean;
10
+ /** Module status: 0x30=ALIVE, 0x34=BUSY */
11
+ moduleStatus?: number;
12
+ moduleStatusLabel?: string;
13
+ /** Sensor status (SFM Slim): 0x30=ALIVE, 0x31=ERROR */
14
+ sensorStatus?: number;
15
+ sensorStatusLabel?: string;
16
+ error: string | null;
17
+ }
18
+ export interface ParamResult {
19
+ value: number;
20
+ error: string | null;
21
+ }
22
+ export interface CommandResult {
23
+ success: boolean;
24
+ error: string | null;
25
+ }
26
+ export interface SelfTestResult {
27
+ success: boolean;
28
+ sent: number;
29
+ received: number;
30
+ elapsed: number;
31
+ error: string | null;
32
+ }
33
+ export declare class SystemCommands {
34
+ private client;
35
+ private data;
36
+ constructor(client: SfmClient);
37
+ /** @internal Set DataCommands reference (avoid circular dependency) */
38
+ _setDataCommands(data: DataCommands): void;
39
+ /**
40
+ * Get system status (SS: 0x04)
41
+ */
42
+ getSystemStatus(): Promise<SystemStatusResult>;
43
+ /**
44
+ * Read system parameter (SR: 0x03)
45
+ */
46
+ getParam(key: keyof typeof SFM_PARAM): Promise<ParamResult>;
47
+ /**
48
+ * Get device info (firmware version, build number, serial number)
49
+ *
50
+ * SR(0x03) 응답의 Size 필드(4바이트)에 값이 담김:
51
+ * - FIRMWARE_VERSION(0x6E): 4bytes character (예: "3.10")
52
+ * - BUILD_NUMBER(0x89): 바이트별 숫자 → "major.minor.patch.build" (예: 0x13070920 → "19.7.9.32")
53
+ * - SERIAL_NUMBER(0x6F): UInt32LE 정수
54
+ */
55
+ getDeviceInfo(): Promise<{
56
+ firmwareVersion: string;
57
+ buildNumber: string;
58
+ serialNumber: number;
59
+ error: string | null;
60
+ }>;
61
+ /**
62
+ * Write system parameter (SW: 0x01)
63
+ */
64
+ setParam<K extends keyof typeof SFM_PARAM>(key: K, value: K extends keyof SfmParamAliasMap ? SfmParamAliasMap[K] : number): Promise<CommandResult>;
65
+ /**
66
+ * Save system parameters to flash (SF: 0x02)
67
+ */
68
+ saveParam(): Promise<CommandResult>;
69
+ /**
70
+ * Write system parameter + save to flash (SW + SF)
71
+ */
72
+ writeConfig<K extends keyof typeof SFM_PARAM>(key: K, value: K extends keyof SfmParamAliasMap ? SfmParamAliasMap[K] : number): Promise<CommandResult>;
73
+ /**
74
+ * Module reset (RS: 0xD0)
75
+ */
76
+ reset(): Promise<CommandResult>;
77
+ /**
78
+ * Communication self-test
79
+ */
80
+ selfTest(command?: number, dataSize?: number): Promise<SelfTestResult>;
81
+ }
82
+ //# sourceMappingURL=system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../src/commands/system.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAsB,SAAS,EAAqB,MAAM,cAAc,CAAC;AAChF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAE3C,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,qBAAa,cAAc;IAGb,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,IAAI,CAA6B;gBAErB,MAAM,EAAE,SAAS;IAErC,uEAAuE;IACvE,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAI1C;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,kBAAkB,CAAC;IA6BpD;;OAEG;IACG,QAAQ,CAAC,GAAG,EAAE,MAAM,OAAO,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;IAajE;;;;;;;OAOG;IACG,aAAa,IAAI,OAAO,CAAC;QAC7B,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;KACtB,CAAC;IA2CF;;OAEG;IACG,QAAQ,CAAC,CAAC,SAAS,MAAM,OAAO,SAAS,EAC7C,GAAG,EAAE,CAAC,EACN,KAAK,EAAE,CAAC,SAAS,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,CAAC,CAAC,GAAG,MAAM,GACrE,OAAO,CAAC,aAAa,CAAC;IAsBzB;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC;IAWzC;;OAEG;IACG,WAAW,CAAC,CAAC,SAAS,MAAM,OAAO,SAAS,EAChD,GAAG,EAAE,CAAC,EACN,KAAK,EAAE,CAAC,SAAS,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,CAAC,CAAC,GAAG,MAAM,GACrE,OAAO,CAAC,aAAa,CAAC;IAOzB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,aAAa,CAAC;IAQrC;;OAEG;IACG,QAAQ,CAAC,OAAO,SAAO,EAAE,QAAQ,SAAU,GAAG,OAAO,CAAC,cAAc,CAAC;CAqC5E"}
@@ -0,0 +1,191 @@
1
+ /**
2
+ * System/parameter/diagnostic commands
3
+ */
4
+ import { SFM_ERROR, SFM_CMD, SFM_PARAM, resolveParamAlias } from "../constants";
5
+ export class SystemCommands {
6
+ constructor(client) {
7
+ this.client = client;
8
+ this.data = null;
9
+ }
10
+ /** @internal Set DataCommands reference (avoid circular dependency) */
11
+ _setDataCommands(data) {
12
+ this.data = data;
13
+ }
14
+ /**
15
+ * Get system status (SS: 0x04)
16
+ */
17
+ async getSystemStatus() {
18
+ const response = await this.client.sendCommand(SFM_CMD.SS, 0, 0, 0);
19
+ if (!response.valid) {
20
+ return { success: false, error: response.error || "unknown error" };
21
+ }
22
+ const moduleStatus = response.param ?? 0;
23
+ const sensorStatus = response.size ?? 0;
24
+ const MODULE_LABELS = {
25
+ 0x30: "ALIVE",
26
+ 0x34: "BUSY",
27
+ };
28
+ const SENSOR_LABELS = {
29
+ 0x30: "ALIVE",
30
+ 0x31: "ERROR",
31
+ };
32
+ return {
33
+ success: response.flag === SFM_ERROR.SUCCESS,
34
+ moduleStatus,
35
+ moduleStatusLabel: MODULE_LABELS[moduleStatus] ??
36
+ `Unknown (0x${moduleStatus.toString(16)})`,
37
+ sensorStatus,
38
+ sensorStatusLabel: SENSOR_LABELS[sensorStatus] ??
39
+ `Unknown (0x${sensorStatus.toString(16)})`,
40
+ error: null,
41
+ };
42
+ }
43
+ /**
44
+ * Read system parameter (SR: 0x03)
45
+ */
46
+ async getParam(key) {
47
+ const paramId = SFM_PARAM[key].id;
48
+ const response = await this.client.sendCommand(SFM_CMD.SR, 0, 0, paramId);
49
+ if (!response.valid) {
50
+ return { value: 0, error: response.error || "unknown error" };
51
+ }
52
+ return {
53
+ value: response.size ?? 0,
54
+ error: response.flag !== SFM_ERROR.SUCCESS ? `Read param failed` : null,
55
+ };
56
+ }
57
+ /**
58
+ * Get device info (firmware version, build number, serial number)
59
+ *
60
+ * SR(0x03) 응답의 Size 필드(4바이트)에 값이 담김:
61
+ * - FIRMWARE_VERSION(0x6E): 4bytes character (예: "3.10")
62
+ * - BUILD_NUMBER(0x89): 바이트별 숫자 → "major.minor.patch.build" (예: 0x13070920 → "19.7.9.32")
63
+ * - SERIAL_NUMBER(0x6F): UInt32LE 정수
64
+ */
65
+ async getDeviceInfo() {
66
+ const readSizeField = async (paramId) => {
67
+ const response = await this.client.sendCommand(SFM_CMD.SR, 0, 0, paramId);
68
+ if (!response.valid || response.flag !== SFM_ERROR.SUCCESS) {
69
+ return null;
70
+ }
71
+ return (response.size ?? 0) >>> 0;
72
+ };
73
+ try {
74
+ const fwRaw = await readSizeField(SFM_PARAM.FIRMWARE_VERSION.id);
75
+ const buildRaw = await readSizeField(SFM_PARAM.BUILD_NUMBER.id);
76
+ const snRaw = await readSizeField(SFM_PARAM.SERIAL_NUMBER.id);
77
+ // 모듈명: Size 4바이트 → ASCII
78
+ let firmwareVersion = "";
79
+ if (fwRaw != null) {
80
+ const buf = Buffer.alloc(4);
81
+ buf.writeUInt32LE(fwRaw, 0);
82
+ firmwareVersion = buf.toString("ascii").replace(/\0/g, "");
83
+ }
84
+ // 빌드 번호: 각 바이트를 10진수로 → "b0.b1.b2.b3"
85
+ let buildNumber = "";
86
+ if (buildRaw != null) {
87
+ const buf = Buffer.alloc(4);
88
+ buf.writeUInt32LE(buildRaw, 0);
89
+ buildNumber = `${buf[0]}.${buf[1]}.${buf[2]}.${buf[3]}`;
90
+ }
91
+ const serialNumber = snRaw ?? 0;
92
+ return { firmwareVersion, buildNumber, serialNumber, error: null };
93
+ }
94
+ catch (err) {
95
+ return {
96
+ firmwareVersion: "",
97
+ buildNumber: "",
98
+ serialNumber: 0,
99
+ error: err.message,
100
+ };
101
+ }
102
+ }
103
+ /**
104
+ * Write system parameter (SW: 0x01)
105
+ */
106
+ async setParam(key, value) {
107
+ const paramId = SFM_PARAM[key].id;
108
+ const v = value;
109
+ const resolved = typeof v === "string"
110
+ ? resolveParamAlias(key, v)
111
+ : v;
112
+ const response = await this.client.sendCommand(SFM_CMD.SW, 0, resolved, paramId);
113
+ if (!response.valid) {
114
+ return { success: false, error: response.error || "unknown error" };
115
+ }
116
+ return {
117
+ success: response.flag === SFM_ERROR.SUCCESS,
118
+ error: response.flag !== SFM_ERROR.SUCCESS ? "Write param failed" : null,
119
+ };
120
+ }
121
+ /**
122
+ * Save system parameters to flash (SF: 0x02)
123
+ */
124
+ async saveParam() {
125
+ const response = await this.client.sendCommand(SFM_CMD.SF, 0, 0, 0);
126
+ if (!response.valid) {
127
+ return { success: false, error: response.error || "unknown error" };
128
+ }
129
+ return {
130
+ success: response.flag === SFM_ERROR.SUCCESS,
131
+ error: response.flag !== SFM_ERROR.SUCCESS ? "Save param failed" : null,
132
+ };
133
+ }
134
+ /**
135
+ * Write system parameter + save to flash (SW + SF)
136
+ */
137
+ async writeConfig(key, value) {
138
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
139
+ const writeResult = await this.setParam(key, value);
140
+ if (!writeResult.success)
141
+ return writeResult;
142
+ return this.saveParam();
143
+ }
144
+ /**
145
+ * Module reset (RS: 0xD0)
146
+ */
147
+ async reset() {
148
+ const response = await this.client.sendCommand(SFM_CMD.RS, 0, 0, 0);
149
+ if (!response.valid) {
150
+ return { success: false, error: response.error || "unknown error" };
151
+ }
152
+ return { success: response.flag === SFM_ERROR.SUCCESS, error: null };
153
+ }
154
+ /**
155
+ * Communication self-test
156
+ */
157
+ async selfTest(command = 0xd3, dataSize = 0x10000) {
158
+ if (!this.data) {
159
+ throw new Error("DataCommands not initialized");
160
+ }
161
+ const testData = Buffer.alloc(dataSize);
162
+ for (let i = 0; i < dataSize; i++) {
163
+ testData[i] = i & 0xff;
164
+ }
165
+ const startTime = Date.now();
166
+ try {
167
+ await this.data.send(command, testData, 0x4000);
168
+ const received = await this.data.recv(command, dataSize);
169
+ const elapsed = Date.now() - startTime;
170
+ const match = testData.equals(received);
171
+ return {
172
+ success: match,
173
+ sent: dataSize,
174
+ received: received.length,
175
+ elapsed,
176
+ error: match ? null : "Data mismatch",
177
+ };
178
+ }
179
+ catch (err) {
180
+ const elapsed = Date.now() - startTime;
181
+ return {
182
+ success: false,
183
+ sent: dataSize,
184
+ received: 0,
185
+ elapsed,
186
+ error: err.message,
187
+ };
188
+ }
189
+ }
190
+ }
191
+ //# sourceMappingURL=system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/commands/system.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * SFM Protocol Manual V3.6.0
3
+ * 암호화 관련 상수
4
+ */
5
+ export declare const ENCRYPTION_MODE: {
6
+ readonly RIJNDAEL_ECB: 0;
7
+ readonly AES256_ECB: 1;
8
+ readonly AES256_CBC: 17;
9
+ };
10
+ export type EncryptionMode = (typeof ENCRYPTION_MODE)[keyof typeof ENCRYPTION_MODE];
11
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/constants/crypto.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,eAAe;;;;CAIlB,CAAC;AAEX,MAAM,MAAM,cAAc,GACxB,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * SFM Protocol Manual V3.6.0
3
+ * 암호화 관련 상수
4
+ */
5
+ export const ENCRYPTION_MODE = {
6
+ RIJNDAEL_ECB: 0x00,
7
+ AES256_ECB: 0x01,
8
+ AES256_CBC: 0x11,
9
+ };
10
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/constants/crypto.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,YAAY,EAAE,IAAI;IAClB,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,IAAI;CACR,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { SFM_ERROR, SFM_FLAG, COMM_ERROR, SFM_CMD, SFM_PARAM, FIRMWARE_MAGIC, resolveParamAlias, } from "./protocol";
2
+ export type { SfmParamKey, SfmParamAliasMap } from "./protocol";
3
+ export { START_CODE, END_CODE, PACKET_SIZE } from "./packet";
4
+ export { ENCRYPTION_MODE } from "./crypto";
5
+ export type { EncryptionMode } from "./crypto";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,QAAQ,EACR,UAAU,EACV,OAAO,EACP,SAAS,EACT,cAAc,EACd,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { SFM_ERROR, SFM_FLAG, COMM_ERROR, SFM_CMD, SFM_PARAM, FIRMWARE_MAGIC, resolveParamAlias, } from "./protocol";
2
+ export { START_CODE, END_CODE, PACKET_SIZE } from "./packet";
3
+ export { ENCRYPTION_MODE } from "./crypto";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,QAAQ,EACR,UAAU,EACV,OAAO,EACP,SAAS,EACT,cAAc,EACd,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * SFM Protocol Manual V3.6.0
3
+ * 패킷 구조 상수 (시작/종료 코드, 패킷 크기)
4
+ */
5
+ export declare const START_CODE: {
6
+ readonly NORMAL: 64;
7
+ readonly NETWORK: 65;
8
+ readonly SECURE_SEND: 80;
9
+ readonly SECURE_RECV: 81;
10
+ };
11
+ export declare const END_CODE = 10;
12
+ export declare const PACKET_SIZE: {
13
+ readonly NORMAL: 13;
14
+ readonly NETWORK: 15;
15
+ readonly SECURE: 35;
16
+ };
17
+ //# sourceMappingURL=packet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packet.d.ts","sourceRoot":"","sources":["../../src/constants/packet.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,UAAU;;;;;CAKb,CAAC;AAEX,eAAO,MAAM,QAAQ,KAAO,CAAC;AAE7B,eAAO,MAAM,WAAW;;;;CAId,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * SFM Protocol Manual V3.6.0
3
+ * 패킷 구조 상수 (시작/종료 코드, 패킷 크기)
4
+ */
5
+ export const START_CODE = {
6
+ NORMAL: 0x40,
7
+ NETWORK: 0x41,
8
+ SECURE_SEND: 0x50,
9
+ SECURE_RECV: 0x51,
10
+ };
11
+ export const END_CODE = 0x0a;
12
+ export const PACKET_SIZE = {
13
+ NORMAL: 13, // Start(1) + Command(1) + Param(4) + Size(4) + Flag(1) + Checksum(1) + End(1)
14
+ NETWORK: 15, // Start(1) + TermID(2) + Command(1) + Param(4) + Size(4) + Flag(1) + Checksum(1) + End(1)
15
+ SECURE: 35, // Marker(1) + Encrypted(32) + Checksum(1) + End(1)
16
+ };
17
+ //# sourceMappingURL=packet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packet.js","sourceRoot":"","sources":["../../src/constants/packet.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,IAAI;CACT,CAAC;AAEX,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC;AAE7B,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE,EAAE,EAAE,8EAA8E;IAC1F,OAAO,EAAE,EAAE,EAAE,0FAA0F;IACvG,MAAM,EAAE,EAAE,EAAE,mDAAmD;CACvD,CAAC"}