From 0026ea3b1a6588f3e40b8276162f54b2a22bc7ae Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期一, 19 一月 2026 14:32:27 +0800
Subject: [PATCH] 1.修复 : 多 PJ 支持仍是单槽实现:isProcessJobsEmpty/validate 仍只允许 1 个 PJ/CJ;Host 一次下多 PJ 或运行中追加 PJ 会被拒绝/无明确反馈。需要:协议上明示只支持 1,或补齐 ACK/NAK 与队列管理、PJobSpace 动态更新。

---
 SourceCode/Bond/Servo/PortConfigurationDlg.cpp |   62 +++++++++++++++++++++++++++++--
 1 files changed, 58 insertions(+), 4 deletions(-)

diff --git a/SourceCode/Bond/Servo/PortConfigurationDlg.cpp b/SourceCode/Bond/Servo/PortConfigurationDlg.cpp
index 62ad3a0..27bc7a8 100644
--- a/SourceCode/Bond/Servo/PortConfigurationDlg.cpp
+++ b/SourceCode/Bond/Servo/PortConfigurationDlg.cpp
@@ -438,14 +438,68 @@
 {
     int selPort = (0 <= m_nCurSelPort && m_nCurSelPort <= 3) ? m_nCurSelPort
         : m_comboPort.GetCurSel();
-    if (selPort < 0 || selPort >= 4) return;
-    m_pPort[selPort]->sendCassetteCtrlCmd(CCC_PROCESS_START, nullptr, 0, 0, 0, nullptr, nullptr);
+    if (selPort < 0 || selPort >= 4) {
+        LOGE("ProcessStart invalid port index: %d", selPort);
+        return;
+    }
+
+    SERVO::CLoadPort* pPort = m_pPort[selPort];
+    if (pPort == nullptr) {
+        LOGE("ProcessStart port pointer is null, index: %d", selPort);
+        return;
+    }
+
+    constexpr short cmd = CCC_PROCESS_START;
+    LOGI("ProcessStart request: port=%d, cmd=%d", selPort + 1, cmd);
+    int ret = pPort->sendCassetteCtrlCmd(cmd, nullptr, 0, 0, 0, nullptr,
+        [selPort](int code) -> int {
+            if (code == WOK) {
+                LOGI("ProcessStart write complete: port=%d, code=WOK", selPort + 1);
+            }
+            else {
+                LOGE("ProcessStart write failed: port=%d, code=%d", selPort + 1, code);
+            }
+            return 0;
+        });
+    if (ret != 0) {
+        LOGE("ProcessStart sendCassetteCtrlCmd immediate failure: port=%d, ret=%d", selPort + 1, ret);
+    }
+    else {
+        LOGI("ProcessStart sendCassetteCtrlCmd dispatched: port=%d", selPort + 1);
+    }
 }
 
 void CPortConfigurationDlg::OnBnClickedButtonProcessCancel()
 {
     int selPort = (0 <= m_nCurSelPort && m_nCurSelPort <= 3) ? m_nCurSelPort
         : m_comboPort.GetCurSel();
-    if (selPort < 0 || selPort >= 4) return;
-    m_pPort[selPort]->sendCassetteCtrlCmd(CCC_PROCESS_CANCEL, nullptr, 0, 0, 0, nullptr, nullptr);
+    if (selPort < 0 || selPort >= 4) {
+        LOGE("ProcessCancel invalid port index: %d", selPort);
+        return;
+    }
+
+    SERVO::CLoadPort* pPort = m_pPort[selPort];
+    if (pPort == nullptr) {
+        LOGE("ProcessCancel port pointer is null, index: %d", selPort);
+        return;
+    }
+
+    constexpr short cmd = CCC_PROCESS_CANCEL;
+    LOGI("ProcessCancel request: port=%d, cmd=%d", selPort + 1, cmd);
+    int ret = pPort->sendCassetteCtrlCmd(cmd, nullptr, 0, 0, 0, nullptr,
+        [selPort](int code) -> int {
+            if (code == WOK) {
+                LOGI("ProcessCancel write complete: port=%d, code=WOK", selPort + 1);
+            }
+            else {
+                LOGE("ProcessCancel write failed: port=%d, code=%d", selPort + 1, code);
+            }
+            return 0;
+        });
+    if (ret != 0) {
+        LOGE("ProcessCancel sendCassetteCtrlCmd immediate failure: port=%d, ret=%d", selPort + 1, ret);
+    }
+    else {
+        LOGI("ProcessCancel sendCassetteCtrlCmd dispatched: port=%d", selPort + 1);
+    }
 }

--
Gitblit v1.9.3