| | |
| | | portStatusReport.setCassetteId("CID1001"); |
| | | int nRet = portStatusReport.serialize(szBuffer, 64); |
| | | decodePortStatusReport(pStep, szBuffer, 64); |
| | | LOGI("<CLoadPort>Port1载入模拟数据, id:CID1001 map: 0xf"); |
| | | } |
| | | } |
| | | if (m_nIndex == 1) { |
| | |
| | | portStatusReport.setCassetteId("CID1004"); |
| | | int nRet = portStatusReport.serialize(szBuffer, 64); |
| | | decodePortStatusReport(pStep, szBuffer, 64); |
| | | LOGI("<CLoadPort>Port2载入模拟数据, id:CID1004 map: 0xff"); |
| | | } |
| | | } |
| | | */ |
| | |
| | | |
| | | 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); |
| | | } |
| | |
| | | std::string& CLoadPort::getCassetteId() |
| | | { |
| | | return m_portStatusReport.getCassetteId(); |
| | | } |
| | | |
| | | void CLoadPort::simulateSetCassetteId(const char* pszCarrierId) |
| | | { |
| | | m_portStatusReport.setCassetteId(pszCarrierId); |
| | | } |
| | | |
| | | int CLoadPort::getLoadingCassetteType() |
| | |
| | | |
| | | // 当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) { |
| | |
| | | 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()); |
| | | } |
| | | |
| | | |
| | |
| | | { |
| | | m_isCompareMapsBeforeProceeding = bCompare; |
| | | } |
| | | |
| | | BOOL CLoadPort::isCompareMapsBeforeProceeding() const |
| | | { |
| | | return m_isCompareMapsBeforeProceeding; |
| | | } |
| | | } |