| | |
| | | } \ |
| | | } |
| | | |
| | | #define CHECK_WRITE_STEP_SIGNAL2(addr, data, size) { \ |
| | | BOOL bFlag = isBitOn(data, size, addr); \ |
| | | SERVO::CStep* pStep = getStep(addr); \ |
| | | if (pStep != nullptr) { \ |
| | | ((CWriteStep*)pStep)->onRecvSignal(bFlag ? addr : 0); \ |
| | | } \ |
| | | } |
| | | |
| | | namespace SERVO { |
| | | CLoadPort::CLoadPort() : CEquipment() |
| | | { |
| | |
| | | [&](void* pFrom, int code, const char* pszData, size_t size) -> int { |
| | | if (code == ROK && pszData != nullptr && size > 0) { |
| | | decodePortStatusReport((CStep*)pFrom, pszData, size); |
| | | return 0; |
| | | } |
| | | return -1; |
| | | }); |
| | |
| | | static int cassetteTypeReply[] = { STEP_ID_PROT1_CASSETTE_TYPE_CHANGE_REPLY, STEP_ID_PROT2_CASSETTE_TYPE_CHANGE_REPLY, |
| | | STEP_ID_PROT3_CASSETTE_TYPE_CHANGE_REPLY, STEP_ID_PROT4_CASSETTE_TYPE_CHANGE_REPLY }; |
| | | |
| | | CHECK_READ_STEP_SIGNAL2(typeReply[m_nIndex], pszData, size); |
| | | CHECK_READ_STEP_SIGNAL2(modeReply[m_nIndex], pszData, size); |
| | | CHECK_READ_STEP_SIGNAL2(transferModeReply[m_nIndex], pszData, size); |
| | | CHECK_READ_STEP_SIGNAL2(enableModeReply[m_nIndex], pszData, size); |
| | | CHECK_READ_STEP_SIGNAL2(typeAutoReply[m_nIndex], pszData, size); |
| | | CHECK_READ_STEP_SIGNAL2(cassetteTypeReply[m_nIndex], pszData, size); |
| | | CHECK_WRITE_STEP_SIGNAL2(typeReply[m_nIndex], pszData, size); |
| | | CHECK_WRITE_STEP_SIGNAL2(modeReply[m_nIndex], pszData, size); |
| | | CHECK_WRITE_STEP_SIGNAL2(transferModeReply[m_nIndex], pszData, size); |
| | | CHECK_WRITE_STEP_SIGNAL2(enableModeReply[m_nIndex], pszData, size); |
| | | CHECK_WRITE_STEP_SIGNAL2(typeAutoReply[m_nIndex], pszData, size); |
| | | CHECK_WRITE_STEP_SIGNAL2(cassetteTypeReply[m_nIndex], pszData, size); |
| | | } |
| | | |
| | | int CLoadPort::decodePortStatusReport(CStep* pStep, const char* pszData, size_t size) |
| | |
| | | |
| | | // 缓存Attribute,用于调试时显示信息 |
| | | unsigned int weight = 201; |
| | | CAttributeVector attrubutes; |
| | | CAttributeVector& attrubutes = pStep->attributeVector(); |
| | | m_portStatusReport.getAttributeVector(attrubutes, weight); |
| | | pStep->addAttributeVector(attrubutes); |
| | | |
| | | |
| | | LOGI("<CCassetteTranserStateStep>decodePortStatusReport<Status:%d, CassetteSequenceNo:%d>", |
| | | m_portStatusReport.getPortStatus(), m_portStatusReport.getCassetteSequenceNo()); |
| | |
| | | { |
| | | char szBuffer[64]; |
| | | for (const auto& slot : config.vecSlot) { |
| | | if (!slot.isEnabled) continue; |
| | | |
| | | int nSlotIndex = slot.nSlotID - 1; |
| | | if (nSlotIndex < 0 || nSlotIndex >= SLOT_MAX) { |
| | | continue; |
| | | } |
| | | |
| | | m_slot[nSlotIndex].enable(); |
| | | |
| | | if (!m_slot[nSlotIndex].isEnable()) continue; |
| | | if (!slot.isEnabled) { |
| | | m_slot[nSlotIndex].setContext(nullptr); |
| | | continue; |
| | | } |
| | | |
| | | CJobDataS js; |
| | | js.setCassetteSequenceNo(getNextCassetteSequenceNo()); |