SourceCode/Bond/Servo/CEquipment.cpp
@@ -27,6 +27,7 @@
      m_pArm = nullptr;
      m_processState = PROCESS_STATE::Ready;
      m_blockReadBit = { 0 };
      m_nTestFlag = 0;
      InitializeCriticalSection(&m_criticalSection);
   }
@@ -1188,28 +1189,39 @@
      return 0;
   }
   int CEquipment::recipeParameterRequest(short masterRecipeId, short localRecipeId, short unitNo)
   int CEquipment::recipeParameterRequest(short masterRecipeId, short localRecipeId, short unitNo, ONSYNCINGSTATECHANGED block)
   {
      SERVO::CEqWriteStep* pStep = (SERVO::CEqWriteStep*)getStepWithName(STEP_EQ_MASTER_RECIPE_LIST_REQ);
      LOGI("<CEquipment-%s>正在请求单元<%d>主配参数列表", m_strName.c_str(), unitNo);
      m_recipesManager.setOnSyncingStateChanged(block);
      if (m_recipesManager.syncing() != 0) {
         return -2;
      }
      SERVO::CEqWriteStep* pStep = (SERVO::CEqWriteStep*)getStepWithName(STEP_EQ_RECIPE_PARAMETER_REQ);
      if (pStep == nullptr) {
         return -1;
      }
      LOGI("<CEquipment-%s>正在请求单元<%d>主配方列表", m_strName.c_str(), unitNo);
      if (m_recipesManager.syncing() != 0) {
         return -2;
      }
      pStep->writeShort(unitNo, [&, unitNo](int code) -> int {
      char szBuffer[14 * 2] = {0};
      int index = 0;
      memcpy(&szBuffer[index], &masterRecipeId, sizeof(short));
      index += sizeof(short);
      memcpy(&szBuffer[index], &localRecipeId, sizeof(short));
      index += sizeof(short);
      memcpy(&szBuffer[index], &unitNo, sizeof(short));
      pStep->writeDataEx(szBuffer, 14 * 2, [&, unitNo](int code) -> int {
         if (code == WOK) {
            LOGI("<CEquipment-%s>请求单元<%d>主配方列表成功,正在等待数据.", m_strName.c_str(), unitNo);
            LOGI("<CEquipment-%s>请求单元<%d>主配方参数列表成功,正在等待数据.", m_strName.c_str(), unitNo);
         }
         else {
            m_recipesManager.syncFailed();
            LOGI("<CEquipment-%s>请求单元<%d>主配方列表失败,code:%d", m_strName.c_str(), unitNo, code);
            LOGI("<CEquipment-%s>请求单元<%d>主配方参数列表失败,code:%d", m_strName.c_str(), unitNo, code);
         }
         return 0;
         });
      });
      return 0;
   }
@@ -1325,26 +1337,35 @@
      return nullptr;
   }
   CSlot* CEquipment::getProcessedSlot(MaterialsType putSlotType)
   CSlot* CEquipment::getProcessedSlot(MaterialsType putSlotType, BOOL bJobMode/* = FALSE*/)
   {
      for (int i = 0; i < SLOT_MAX; i++) {
         if (m_nTestFlag == 1) LOGI("getProcessedSlot 001");
         if (!m_slot[i].isEnable()) continue;
         if (m_nTestFlag == 1) LOGI("getProcessedSlot 002");
         if (m_slot[i].isLock()) continue;
         if (m_nTestFlag == 1) LOGI("getProcessedSlot 003");
         CGlass* pGlass = (CGlass*)m_slot[i].getContext();
         if (!isSlotProcessed(i)) continue;
         if (m_nTestFlag == 1) LOGI("getProcessedSlot 004");
         if (pGlass == nullptr) continue;
         if (m_nTestFlag == 1) LOGI("getProcessedSlot 005");
         if (!pGlass->isScheduledForProcessing()) continue;
         if (m_nTestFlag == 1) LOGI("getProcessedSlot 006");
         if (bJobMode && pGlass->getProcessJob() == nullptr) continue;
         if (m_nTestFlag == 1) LOGI("getProcessedSlot 007");
         if(pGlass->getInspResult(m_nID, 0) == InspResult::Fail) continue;
         int lsPath = m_slot[i].getLinkSignalPath();
         if(!m_bLinkSignalToUpstream[lsPath][SIGNAL_UPSTREAM_INLINE]
            || m_bLinkSignalToUpstream[lsPath][SIGNAL_UPSTREAM_TROUBLE]
            || !m_bLinkSignalToUpstream[lsPath][SIGNAL_INTERLOCK]
            || !m_bLinkSignalToUpstream[lsPath][SIGNAL_SEND_ABLE] ) continue;
         if (m_nTestFlag == 1) LOGI("getProcessedSlot 008");
         MaterialsType glassType = pGlass->getType();
         if (glassType == MaterialsType::G1 && putSlotType == MaterialsType::G2) continue;
         if (m_nTestFlag == 1) LOGI("getProcessedSlot 009");
         if (glassType == MaterialsType::G2 && putSlotType == MaterialsType::G1) continue;
         if (m_nTestFlag == 1) LOGI("getProcessedSlot 00a");
         return &m_slot[i];
      }
@@ -1442,6 +1463,13 @@
      if (m_slot[slotIndex].getContext() != nullptr) return FALSE;
      return TRUE;
   }
   BOOL CEquipment::slotHasGlass(int slotIndex/* = 0*/)
   {
      ASSERT(slotIndex < 8);
      CGlass* pGlass = (CGlass*)m_slot[slotIndex].getContext();
      return (pGlass != nullptr);
   }
   int CEquipment::removeGlass(int slotNo)
@@ -1654,7 +1682,7 @@
   int CEquipment::decodeVCREventReport(CStep* pStep, const char* pszData, size_t size)
   {
      CVcrEventReport vcrEventReport;
      vcrEventReport.unserialize(pszData, size);
      vcrEventReport.unserialize(pszData, (int)size);
      LOGI("<CEquipment-%s>decodeVCREventReport<Result:%d, GlassId:%s>\n", m_strName.c_str(),
         vcrEventReport.getVcrResult(),
         vcrEventReport.getGlassId().c_str());
@@ -1716,7 +1744,7 @@
      std::string strSvTimeRecord, strSvData;
      CToolUnits::convertString(&pszData[index], 8 * 2, strSvTimeRecord);
      index += 128 * 2;
      CToolUnits::convertString(&pszData[index], 640 * 2, strSvData);
      CToolUnits::convertString(&pszData[index], 100 * 2, strSvData);
      index += 256 * 2;
@@ -2058,4 +2086,17 @@
      return InspResult::NotInspected;
   }
   float CEquipment::toFloat(const char* pszAddr)
   {
      BYTE szBuffer[4];
      szBuffer[0] = pszAddr[0];
      szBuffer[1] = pszAddr[1];
      szBuffer[2] = pszAddr[2];
      szBuffer[3] = pszAddr[3];
      float f = 0.0;
      memcpy(&f, szBuffer, 4);
      return f;
   }
}