chenluhua1980
昨天 a79fcf6a937e1bfe57014d2c99f1bb9f98bfa892
SourceCode/Bond/Servo/CLoadPort.cpp
@@ -377,6 +377,7 @@
            portStatusReport.setCassetteId("CID1001");
            int nRet = portStatusReport.serialize(szBuffer, 64);
            decodePortStatusReport(pStep, szBuffer, 64);
            LOGI("<CLoadPort>Port1载入模拟数据, id:CID1001 map: 0xf");
         }
      }
      if (m_nIndex == 1) {
@@ -391,6 +392,7 @@
            portStatusReport.setCassetteId("CID1004");
            int nRet = portStatusReport.serialize(szBuffer, 64);
            decodePortStatusReport(pStep, szBuffer, 64);
            LOGI("<CLoadPort>Port2载入模拟数据, id:CID1004 map: 0xff");
         }
      }
      */
@@ -456,6 +458,11 @@
      memcpy(&szBuffer[26], &slotProcess, sizeof(short));
      memcpy(&szBuffer[36], &jopCount, sizeof(short));
      LOGI("<CLoadPort-%d>sendCassetteCtrlCmd cmd=%d, jobExistence0=%d, jobExistence1=%d, slotProcess=%d, jobCount=%d",
         m_nIndex, (int)cmd,
         (jobExistence != nullptr && jobExistenceSize >= 1) ? (int)jobExistence[0] : -1,
         (jobExistence != nullptr && jobExistenceSize >= 2) ? (int)jobExistence[1] : -1,
         (int)slotProcess, (int)jopCount);
      if (pJobDataA != nullptr) {
         pJobDataA->serialize(&szBuffer[38], 1024 - 38);
      }
@@ -559,6 +566,11 @@
   std::string& CLoadPort::getCassetteId()
   {
      return m_portStatusReport.getCassetteId();
   }
   void CLoadPort::simulateSetCassetteId(const char* pszCarrierId)
   {
      m_portStatusReport.setCassetteId(pszCarrierId);
   }
   int CLoadPort::getLoadingCassetteType()
@@ -937,25 +949,13 @@
      // 当port状态为InUse, 比较map
      if (m_portStatusReport.getPortStatus() == PORT_INUSE) {
         if (m_isCompareMapsBeforeProceeding) {
            short scanMap = getScanCassetteMap();
            short downloadMap = getDownloadCassetteMap();
            if (scanMap == downloadMap) {
               generateGlassList(scanMap);
               this->sendCassetteCtrlCmd(CCC_PROCESS_START, nullptr, 0, 0, 0, nullptr, nullptr);
            }
            else {
               this->sendCassetteCtrlCmd(CCC_PROCESS_CANCEL, nullptr, 0, 0, 0, nullptr, nullptr);
         // 生成玻璃列表:来自 EFEM 扫描到的 map
         generateGlassList(getScanCassetteMap());
               // 抛出到应用层做提示
               if (m_listener.onMapMismatch != nullptr) {
                  m_listener.onMapMismatch(this, scanMap, downloadMap);
               }
            }
         }
         else {
            // 抛出到应用层做选择要加工的片子
            generateGlassList(getScanCassetteMap());
         // CompareMapsBeforeProceeding:不在此处自动 Start/Cancel,改为等待 Host 决策(ProceedWithCarrier/ProceedWithSlotMap/CarrierRelease)
         // Host 决策入口:S3F17 CarrierAction -> listener.onCarrierAction -> CMaster::proceedWithCarrier()/carrierRelease()
         if (m_isCompareMapsBeforeProceeding) {
            // 这里仅等待,具体上报由上层在 PORT_INUSE 事件中触发(S6F11 CheckSlotMap)
         }
      }
      if (m_listener.onPortStatusChanged != nullptr) {
@@ -973,8 +973,9 @@
         m_portStatusReport.getPortStatus(), m_portStatusReport.getCassetteSequenceNo(), 
         m_portStatusReport.getCassetteId().c_str());
      if (m_portStatusReport.getPortStatus() == 3) {
         LOGI("<CCassetteTranserStateStep>InUse<JobExistenceSlot:%d>",
            m_portStatusReport.getJobExistenceSlot());
         LOGI("<CCassetteTranserStateStep>InUse<JobExistenceSlot:%d, mapW1:%d>",
            m_portStatusReport.getJobExistenceSlot(),
            (int)portStatusReport.getJobExistenceSlot());
      }
@@ -1324,4 +1325,9 @@
   {
      m_isCompareMapsBeforeProceeding = bCompare;
   }
   BOOL CLoadPort::isCompareMapsBeforeProceeding() const
   {
      return m_isCompareMapsBeforeProceeding;
   }
}