226{
227 Logger::info(L"ED785Worker - 워커 스레드 시작");
228
229
231 {
232 Logger::error(L"ED785Worker - 초기화 실패, 워커 스레드 종료");
234 return;
235 }
236
237
239 {
240
241 MSG msg;
242 while (PeekMessageW(&msg, nullptr, 0, 0, PM_REMOVE))
243 {
244 TranslateMessage(&msg);
245 DispatchMessageW(&msg);
246 }
247
248
250 bool hasRequest = false;
251 {
254 {
257 hasRequest = true;
258 }
259 }
260
261
262 if (hasRequest)
263 {
264 wchar_t logBuf[256];
265 swprintf_s(logBuf, L"ED785Worker - 명령 전송: CMD=0x%02X GCD=0x%02X JCD=0x%02X",
266 req.cmd, req.gcd, req.jcd);
267 Logger::info(logBuf);
268
269
270 {
274 }
275
276
277 byte sendData[8192] = {0};
278 byte errMsg[512] = {0};
279
280
281 size_t copyLen = (req.payload.size() < sizeof(sendData)) ? req.payload.size() : sizeof(sendData);
282 if (copyLen > 0)
283 memcpy(sendData, req.payload.data(), copyLen);
284
285 int cmdResult =
m_ed785->KReqCmd(req.cmd, req.gcd, req.jcd, sendData, errMsg);
286 if (cmdResult != 0)
287 {
288 wchar_t warnBuf[128];
289 swprintf_s(warnBuf, L"ED785Worker - KReqCmd 실패: %d", cmdResult);
290 Logger::warn(warnBuf);
291
293 {
296 resp.gcd = req.gcd;
297 resp.jcd = req.jcd;
298 resp.rcd = 0xFF;
299 resp.data.resize(512);
300 memcpy(resp.data.data(), errMsg, 512);
301 resp.dataLen = strlen(reinterpret_cast<char *>(errMsg));
302 resp.hexLen = 0;
304 }
305
306
307 {
311 }
312 continue;
313 }
314
315 Logger::debug(L"ED785Worker - KReqCmd 전송 완료, 응답 대기 시작");
316 }
317
318
319 int cmd = 0, gcd = 0, jcd = 0, rcd = 0;
320 byte rdata[8192] = {0};
321 byte hexdata[8192] = {0};
322
323 int eventResult =
m_ed785->KGetEvent(cmd, gcd, jcd, rcd, rdata, hexdata);
324
325#pragma region TEST LINE
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361#pragma endregion
362
363
364 static int pollCount = 0;
365 if (++pollCount % 50 == 0)
366 {
367 wchar_t pollLogBuf[128];
368 swprintf_s(pollLogBuf, L"ED785Worker - KGetEvent 폴링 중 (결과: %d)", eventResult);
369
370 }
371
372 if (eventResult != -1)
373 {
374
375 wchar_t eventLogBuf[256];
376 swprintf_s(eventLogBuf, L"ED785Worker - 이벤트 수신: CMD=0x%02X GCD=0x%02X JCD=0x%02X RCD=0x%02X",
377 cmd, gcd, jcd, rcd);
378 Logger::debug(eventLogBuf);
379
380
383 resp.gcd = gcd;
384 resp.jcd = jcd;
385 resp.rcd = rcd;
386
387
388 resp.data.resize(8192);
389 memcpy(resp.data.data(), rdata, 8192);
390 resp.dataLen = strlen(reinterpret_cast<char *>(rdata));
391
392
393 resp.hex.resize(8192);
394 memcpy(resp.hex.data(), hexdata, 8192);
395
396
397 resp.hexLen = 0;
398 for (int i = 8191; i >= 0; --i)
399 {
400 if (hexdata[i] != 0)
401 {
402 resp.hexLen = i + 1;
403 break;
404 }
405 }
406
407
410
411
412 {
416 }
417 }
418 else
419 {
420
422 }
423 }
424
425
427 Logger::info(L"ED785Worker - 워커 스레드 종료");
428}
static constexpr uint32_t POLL_INTERVAL_MS
Definition ED785Worker.cpp:8
int m_expectJcd
Definition ED785Worker.h:87
int m_expectGcd
Definition ED785Worker.h:86
std::mutex m_currentMutex
Definition ED785Worker.h:85
bool initializeED785(int comPort, int baudRate)
Definition ED785Worker.cpp:145
void shutdownED785()
Definition ED785Worker.cpp:205
Definition ED785Worker.h:22