From da9df9d46ed3fc50e0c03497bd9f76b8aa1a4595 Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期三, 14 一月 2026 15:37:48 +0800
Subject: [PATCH] 1.修复以下问题: 作业前置条件不足导致 PJ 验证失败:onPRJobMultiCreate 调 CMaster::setProcessJobs,CProcessJob::validate 要求“当前没有其它 PJ”(issue 1000),且 carrierPresent/slotUsable 必须为真。只要本地还有未结批的 PJ/CJ 或载具/槽位状态未就绪(ID 未绑、Slot 未使能),Host 发送的 CreateMultiPJ 会直接被丢弃(返回 size=0),但当前代码没有向 Host 回 ACK/NAK,Host 会误以为创建成功。
---
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