From a79fcf6a937e1bfe57014d2c99f1bb9f98bfa892 Mon Sep 17 00:00:00 2001
From: chenluhua1980 <Chenluhua@qq.com>
Date: 星期二, 10 二月 2026 10:20:17 +0800
Subject: [PATCH] 1.完善日志; 2.背景图表配置 3.更改EAP通讯端口和设备名;
---
SourceCode/Bond/Servo/PortConfigurationDlg.cpp | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 108 insertions(+), 4 deletions(-)
diff --git a/SourceCode/Bond/Servo/PortConfigurationDlg.cpp b/SourceCode/Bond/Servo/PortConfigurationDlg.cpp
index 62ad3a0..e8e197d 100644
--- a/SourceCode/Bond/Servo/PortConfigurationDlg.cpp
+++ b/SourceCode/Bond/Servo/PortConfigurationDlg.cpp
@@ -438,14 +438,118 @@
{
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);
+ short jobExistence[12] = { 0 };
+ short slotProcess = 0;
+ short jobCount = 0; // 0 = Process All Glass (per spec)
+ bool anyScheduled = false;
+
+ // Prefer hardware scan map for job existence (first 16 slots).
+ const short scanMap = pPort->getScanCassetteMap();
+ if (scanMap != 0) {
+ jobExistence[0] = scanMap;
+ }
+
+ // Build existence/selected maps from current glass list (up to 192 slots).
+ const int maxSlots = 12 * 16;
+ const int totalSlots = (SLOT_MAX < maxSlots) ? SLOT_MAX : maxSlots;
+ for (int slot = 1; slot <= totalSlots; ++slot) {
+ SERVO::CGlass* pGlass = pPort->getGlassFromSlot(slot);
+ if (pGlass == nullptr) continue;
+
+ const int wordIndex = (slot - 1) / 16;
+ const int bitIndex = (slot - 1) % 16;
+ jobExistence[wordIndex] = (short)(jobExistence[wordIndex] | (1 << bitIndex));
+
+ if (slot <= 16 && pGlass->isScheduledForProcessing()) {
+ slotProcess = (short)(slotProcess | (1 << bitIndex));
+ anyScheduled = true;
+ }
+ }
+
+ // If no slot explicitly selected, default to all existing in the first word.
+ if (!anyScheduled) {
+ slotProcess = jobExistence[0];
+ }
+
+ bool hasExistence = false;
+ for (short w : jobExistence) {
+ if (w != 0) { hasExistence = true; break; }
+ }
+ const int portStatus = pPort->getPortStatus();
+ if (!hasExistence) {
+ LOGE("ProcessStart blocked: no JobExistence map (port=%d, portStatus=%d, scanMap=%d, cassetteId=%s).",
+ selPort + 1, portStatus, scanMap, pPort->getCassetteId().c_str());
+ return;
+ }
+ if (portStatus != PORT_INUSE) {
+ LOGW("ProcessStart warning: port status is %d (expected INUSE).", portStatus);
+ }
+ LOGI("ProcessStart payload: port=%d, cassetteId=%s, scanMap=%d, jobExistence0=%d, jobExistence1=%d, slotProcess=%d, anyScheduled=%d",
+ selPort + 1, pPort->getCassetteId().c_str(), scanMap,
+ (int)jobExistence[0], (int)jobExistence[1], (int)slotProcess, anyScheduled ? 1 : 0);
+
+ int ret = pPort->sendCassetteCtrlCmd(cmd, jobExistence, 12, slotProcess, jobCount, 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