| | |
| | | // JOB Data Request |
| | | CEqReadStep* pStep = new CEqReadStep(0x0, 0, |
| | | [&](void* pFrom, int code, const char* pszData, size_t size) -> int { |
| | | if (code == ROK && pszData != nullptr && size > 0) { |
| | | if (code == ROK /* && pszData != nullptr && size > 0*/) { |
| | | // 由于EFEM没有发送参数到master, 我们只需要返回数据 |
| | | // Cassette Sequence No和Job Sequence No根据上一次调试缓存而来 |
| | | // decodeJobDataRequest((CStep*)pFrom, pszData, size); |
| | |
| | | } |
| | | |
| | | // 更新信号到LoadPort, Robot, Aligner, Fliper |
| | | m_pPort[0]->setLinkSignalBlock(0, &m_bLinkSignal[0][0]); |
| | | m_pPort[1]->setLinkSignalBlock(0, &m_bLinkSignal[1][0]); |
| | | m_pPort[2]->setLinkSignalBlock(0, &m_bLinkSignal[2][0]); |
| | | m_pPort[3]->setLinkSignalBlock(0, &m_bLinkSignal[3][0]); |
| | | m_pArmTray[0]->setLinkSignalBlock(0, &m_bLinkSignal[4][0]); |
| | | m_pArmTray[1]->setLinkSignalBlock(0, &m_bLinkSignal[5][0]); |
| | | m_pAligner->setLinkSignalBlock(0, &m_bLinkSignal[6][0]); |
| | | m_pFliper->setLinkSignalBlock(0, &m_bLinkSignal[7][0]); |
| | | m_pPort[0]->setLinkSignalUpstreamBlock(0, &m_bLinkSignalToUpstream[0][0]); |
| | | m_pPort[1]->setLinkSignalUpstreamBlock(0, &m_bLinkSignalToUpstream[1][0]); |
| | | m_pPort[2]->setLinkSignalUpstreamBlock(0, &m_bLinkSignalToUpstream[2][0]); |
| | | m_pPort[3]->setLinkSignalUpstreamBlock(0, &m_bLinkSignalToUpstream[3][0]); |
| | | m_pArmTray[0]->setLinkSignalUpstreamBlock(0, &m_bLinkSignalToUpstream[4][0]); |
| | | m_pArmTray[1]->setLinkSignalUpstreamBlock(0, &m_bLinkSignalToUpstream[5][0]); |
| | | m_pAligner->setLinkSignalUpstreamBlock(0, &m_bLinkSignalToUpstream[6][0]); |
| | | m_pFliper->setLinkSignalUpstreamBlock(0, &m_bLinkSignalToUpstream[7][0]); |
| | | |
| | | m_pPort[0]->setLinkSignalDownstreamBlock(0, &m_bLinkSignalToDownstream[0][0]); |
| | | m_pPort[1]->setLinkSignalDownstreamBlock(0, &m_bLinkSignalToDownstream[1][0]); |
| | | m_pPort[2]->setLinkSignalDownstreamBlock(0, &m_bLinkSignalToDownstream[2][0]); |
| | | m_pPort[3]->setLinkSignalDownstreamBlock(0, &m_bLinkSignalToDownstream[3][0]); |
| | | m_pArmTray[0]->setLinkSignalDownstreamBlock(0, &m_bLinkSignalToDownstream[4][0]); |
| | | m_pArmTray[1]->setLinkSignalDownstreamBlock(0, &m_bLinkSignalToDownstream[5][0]); |
| | | m_pAligner->setLinkSignalDownstreamBlock(0, &m_bLinkSignalToDownstream[6][0]); |
| | | m_pFliper->setLinkSignalDownstreamBlock(0, &m_bLinkSignalToDownstream[7][0]); |
| | | } |
| | | |
| | | int CEFEM::onReceivedJob(int port, CJobDataS* pJobDataS) |
| | |
| | | |
| | | int CEFEM::onFetchedOutJob(int port, CJobDataB* pJobDataB) |
| | | { |
| | | if (port == 1) { |
| | | return m_pPort[0]->onFetchedOutJob(port, pJobDataB); |
| | | } |
| | | if (port == 2) { |
| | | return m_pPort[1]->onFetchedOutJob(port, pJobDataB); |
| | | } |
| | | if (port == 3) { |
| | | return m_pPort[2]->onFetchedOutJob(port, pJobDataB); |
| | | } |
| | | if (port == 4) { |
| | | return m_pPort[3]->onFetchedOutJob(port, pJobDataB); |
| | | } |
| | | if (port == 5) { |
| | | return m_pArmTray[0]->onFetchedOutJob(port, pJobDataB); |
| | | } |
| | | if (port == 6) { |
| | | return m_pArmTray[1]->onFetchedOutJob(port, pJobDataB); |
| | | } |
| | | if (port == 7) { |
| | | return m_pAligner->onFetchedOutJob(port, pJobDataB); |
| | | } |
| | | if (port == 8) { |
| | | return m_pFliper->onFetchedOutJob(port, pJobDataB); |
| | | // 转发到子单元设备 |
| | | CEquipment* pEqs[] = { m_pPort[0], m_pPort[1], m_pPort[2], m_pPort[3], m_pArmTray[0], m_pArmTray[1], |
| | | m_pAligner, m_pFliper }; |
| | | if (1 <= port && port <= 8) { |
| | | pEqs[port - 1]->onFetchedOutJob(port, pJobDataB); |
| | | } |
| | | |
| | | return -1; |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CEFEM::onStoredJob(int port, CJobDataB* pJobDataB) |
| | | { |
| | | if (port == 1) { |
| | | return m_pPort[0]->onStoredJob(port, pJobDataB); |
| | | } |
| | | if (port == 2) { |
| | | return m_pPort[1]->onStoredJob(port, pJobDataB); |
| | | } |
| | | if (port == 3) { |
| | | return m_pPort[2]->onStoredJob(port, pJobDataB); |
| | | } |
| | | if (port == 4) { |
| | | return m_pPort[3]->onStoredJob(port, pJobDataB); |
| | | } |
| | | if (port == 5) { |
| | | return m_pArmTray[0]->onStoredJob(port, pJobDataB); |
| | | } |
| | | if (port == 6) { |
| | | return m_pArmTray[1]->onStoredJob(port, pJobDataB); |
| | | } |
| | | if (port == 7) { |
| | | return m_pAligner->onStoredJob(port, pJobDataB); |
| | | } |
| | | if (port == 8) { |
| | | return m_pFliper->onStoredJob(port, pJobDataB); |
| | | // 转发到子单元设备 |
| | | CEquipment* pEqs[] = { m_pPort[0], m_pPort[1], m_pPort[2], m_pPort[3], m_pArmTray[0], m_pArmTray[1], |
| | | m_pAligner, m_pFliper }; |
| | | if (1 <= port && port <= 8) { |
| | | pEqs[port - 1]->onStoredJob(port, pJobDataB); |
| | | } |
| | | |
| | | return -1; |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CEFEM::getIndexerOperationModeBaseValue() |