| | |
| | | #include "ToolUnits.h" |
| | | |
| | | |
| | | #define CHECK_READ_STEP_SIGNAL(addr, data, size) { \ |
| | | BOOL bFlag = isBitOn(data, size, addr); \ |
| | | SERVO::CStep* pStep = getStep(addr); \ |
| | | if (pStep != nullptr) { \ |
| | | ((CReadStep*)pStep)->onReadSignal(bFlag ? addr : 0); \ |
| | | } \ |
| | | } |
| | | |
| | | #define CHECK_WRITE_STEP_SIGNAL(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 { |
| | | |
| | | CEquipment::CEquipment() : m_nID(0), m_strName(""), m_strDescription(""), m_station(0, 255) |
| | | { |
| | | m_listener = { nullptr, nullptr, nullptr }; |
| | | m_alive = {FALSE, 0, FALSE}; |
| | | m_listener = { nullptr, nullptr, nullptr, nullptr }; |
| | | m_alive = { FALSE, 0, FALSE }; |
| | | m_bCimState = FALSE; |
| | | m_bUpstreamInline = FALSE; |
| | | m_bDownstreamInline = FALSE; |
| | |
| | | { |
| | | m_listener.onAlive = listener.onAlive; |
| | | m_listener.onCimStateChanged = listener.onCimStateChanged; |
| | | m_listener.onAlarm = listener.onAlarm; |
| | | m_listener.onDataChanged = listener.onDataChanged; |
| | | } |
| | | |
| | |
| | | auto iter = m_mapStep.find(addr); |
| | | if (iter != m_mapStep.end()) return -1; |
| | | pStep->setEquipment(this); |
| | | pStep->setID(addr); |
| | | pStep->setCcLink(m_pCclink); |
| | | m_mapStep[addr] = pStep; |
| | | return 0; |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | // CIM State |
| | | bFlag = isBitOn(pszData, size, ++index); |
| | | if (!equalBool(m_bCimState, bFlag)) { |
| | |
| | | // Equipment Status Change Report(0x361) |
| | | // Equipment Alarm Change Report(0x362 ~ 0x366) |
| | | for (int i = 0; i < 7; i++) { |
| | | checkReadStepSignalStepSignal(0x360 + i, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(0x360 + i, pszData, size); |
| | | } |
| | | |
| | | |
| | | // CIM Mode |
| | | checkWriteStepSignalStepSignal(0x350, pszData, size); |
| | | CHECK_WRITE_STEP_SIGNAL(0x350, pszData, size); |
| | | |
| | | // CIM Message Set |
| | | CHECK_WRITE_STEP_SIGNAL(0x351, pszData, size); |
| | | |
| | | // CIM Message Clear |
| | | CHECK_WRITE_STEP_SIGNAL(0x352, pszData, size); |
| | | |
| | | // CIM Message Confirm |
| | | CHECK_READ_STEP_SIGNAL(0x369, pszData, size); |
| | | |
| | | |
| | | // EQ Mode |
| | | CHECK_WRITE_STEP_SIGNAL(0x355, pszData, size); |
| | | |
| | | // Port1 ~ Port4 |
| | | checkReadStepSignalStepSignal(0x3e0, pszData, size); |
| | | checkReadStepSignalStepSignal(0x3e1, pszData, size); |
| | | checkReadStepSignalStepSignal(0x3e2, pszData, size); |
| | | checkReadStepSignalStepSignal(0x3e3, pszData, size); |
| | | checkReadStepSignalStepSignal(0x3e8, pszData, size); |
| | | checkReadStepSignalStepSignal(0x3e9, pszData, size); |
| | | checkReadStepSignalStepSignal(0x3ea, pszData, size); |
| | | checkReadStepSignalStepSignal(0x3eb, pszData, size); |
| | | checkReadStepSignalStepSignal(0x3f0, pszData, size); |
| | | checkReadStepSignalStepSignal(0x3f1, pszData, size); |
| | | checkReadStepSignalStepSignal(0x3f2, pszData, size); |
| | | checkReadStepSignalStepSignal(0x3f3, pszData, size); |
| | | checkReadStepSignalStepSignal(0x3f8, pszData, size); |
| | | checkReadStepSignalStepSignal(0x3f9, pszData, size); |
| | | checkReadStepSignalStepSignal(0x3fa, pszData, size); |
| | | checkReadStepSignalStepSignal(0x3fb, pszData, size); |
| | | checkReadStepSignalStepSignal(0x400, pszData, size); |
| | | checkReadStepSignalStepSignal(0x401, pszData, size); |
| | | checkReadStepSignalStepSignal(0x402, pszData, size); |
| | | checkReadStepSignalStepSignal(0x403, pszData, size); |
| | | checkReadStepSignalStepSignal(0x408, pszData, size); |
| | | checkReadStepSignalStepSignal(0x409, pszData, size); |
| | | checkReadStepSignalStepSignal(0x40a, pszData, size); |
| | | checkReadStepSignalStepSignal(0x40b, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(0x3e0, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(0x3e1, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(0x3e2, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(0x3e3, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(0x3e8, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(0x3e9, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(0x3ea, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(0x3eb, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(0x3f0, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(0x3f1, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(0x3f2, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(0x3f3, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(0x3f8, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(0x3f9, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(0x3fa, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(0x3fb, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(0x400, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(0x401, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(0x402, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(0x403, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(0x408, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(0x409, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(0x40a, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(0x40b, pszData, size); |
| | | |
| | | // CEqCassetteTranserStateStep |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PORT1_CASSETTIE_EMPTY, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PORT1_CASSETTIE_LOAD_READY, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PORT1_CASSETTIE_LOADED, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PORT1_CASSETTIE_INUSE, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PORT1_CASSETTIE_UNLOAD_READY, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PORT1_CASSETTIE_BLOCKED, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PORT2_CASSETTIE_EMPTY, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PORT2_CASSETTIE_LOAD_READY, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PORT2_CASSETTIE_LOADED, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PORT2_CASSETTIE_INUSE, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PORT2_CASSETTIE_UNLOAD_READY, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PORT2_CASSETTIE_BLOCKED, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PORT3_CASSETTIE_EMPTY, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PORT3_CASSETTIE_LOAD_READY, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PORT3_CASSETTIE_LOADED, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PORT3_CASSETTIE_INUSE, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PORT3_CASSETTIE_UNLOAD_READY, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PORT3_CASSETTIE_BLOCKED, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PORT4_CASSETTIE_EMPTY, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PORT4_CASSETTIE_LOAD_READY, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PORT4_CASSETTIE_LOADED, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PORT4_CASSETTIE_INUSE, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PORT4_CASSETTIE_UNLOAD_READY, pszData, size); |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PORT4_CASSETTIE_BLOCKED, pszData, size); |
| | | } |
| | | |
| | | BOOL CEquipment::isBitOn(const char* pszData, size_t size, int index) |
| | |
| | | { |
| | | if (index >= VCR_MAX) return FALSE; |
| | | return m_bVCREnable[index]; |
| | | } |
| | | |
| | | int CEquipment::onStepEvent(CStep* pStep, int code) |
| | | { |
| | | if (code == STEP_EVENT_READDATA) { |
| | | if (isAlarmStep(pStep)) { |
| | | SERVO::CEqAlarmStep* pEqAlarmStep = (SERVO::CEqAlarmStep*)pStep; |
| | | int state = pEqAlarmStep->getAlarmState(); |
| | | ASSERT(state == 0 || state == 1); |
| | | if (m_listener.onAlarm != nullptr) { |
| | | m_listener.onAlarm(this, state, |
| | | pEqAlarmStep->getAlarmId(), |
| | | pEqAlarmStep->getUnitId(), |
| | | pEqAlarmStep->getAlarmLevel()); |
| | | } |
| | | |
| | | return 1; |
| | | } |
| | | else if (isCimMessageConfirmStep(pStep)) { |
| | | SERVO::CEqReadIntStep* pEqReadIntStep = (SERVO::CEqReadIntStep*)pStep; |
| | | int value = pEqReadIntStep->getValue(); |
| | | // 此处将value按高低位拆分为message id和panel no. |
| | | // 可能还需要上报到cim |
| | | short msgId, panelNo; |
| | | msgId = (value & 0xffff0000 >> 16); |
| | | panelNo = (value & 0xffff); |
| | | LOGI("Cim Message Confirm(msgID = %d, panel no.=%d).", msgId, panelNo); |
| | | } |
| | | } |
| | | |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | CPin* CEquipment::addPin(PinType type, char* pszName) |
| | |
| | | return pGlass; |
| | | } |
| | | |
| | | void CEquipment::checkReadStepSignalStepSignal(unsigned int addr, const char* pszData, size_t size) |
| | | bool CEquipment::isAlarmStep(SERVO::CStep* pStep) |
| | | { |
| | | BOOL bFlag = isBitOn(pszData, size, addr); |
| | | SERVO::CStep* pStep = getStep(addr); |
| | | if (pStep != nullptr) { |
| | | ((CReadStep*)pStep)->onReadSignal(bFlag ? 1 : 0); |
| | | } |
| | | return CToolUnits::startsWith(pStep->getName(), STEP_ALARM_START); |
| | | } |
| | | |
| | | void CEquipment::checkWriteStepSignalStepSignal(unsigned int addr, const char* pszData, size_t size) |
| | | bool CEquipment::isCassetteTransferStateStep(SERVO::CStep* pStep) |
| | | { |
| | | BOOL bFlag = isBitOn(pszData, size, addr); |
| | | SERVO::CStep* pStep = getStep(addr); |
| | | if (pStep != nullptr) { |
| | | ((CWriteStep*)pStep)->onRecvSignal(bFlag); |
| | | } |
| | | return CToolUnits::startsWith(pStep->getName(), "EQPort") |
| | | && pStep->getName().find("Cassette") != std::string::npos; |
| | | } |
| | | } |
| | | |
| | | bool CEquipment::isCimMessageConfirmStep(SERVO::CStep* pStep) |
| | | { |
| | | return pStep->getName().compare(STEP_EQ_CIM_MESSAGE_CONFIRM) == 0; |
| | | } |
| | | |
| | | int CEquipment::setEqMode(short mode) |
| | | { |
| | | SERVO::CEqModeChangeStep* pStep = (SERVO::CEqModeChangeStep*)getStepWithName(STEP_EQ_MODE_CHANGE); |
| | | if (pStep == nullptr) { |
| | | return -1; |
| | | } |
| | | |
| | | return pStep->setEqMode(mode); |
| | | } |
| | | |
| | | int CEquipment::setCimMode(BOOL bOn) |
| | | { |
| | | SERVO::CEqCimModeChangeStep* pStep = (SERVO::CEqCimModeChangeStep*)getStepWithName(STEP_CIM_MODE_CHANGE); |
| | | if (pStep == nullptr) { |
| | | return -1; |
| | | } |
| | | |
| | | if (bOn) |
| | | return pStep->cimOn(); |
| | | else |
| | | return pStep->cimOff(); |
| | | } |
| | | |
| | | int CEquipment::setCimMessage(const char* pszMessage, short id, short nTouchPanelNo) |
| | | { |
| | | SERVO::CEqCimMessageCmdStep* pStep = (SERVO::CEqCimMessageCmdStep*)getStepWithName(STEP_CIM_MESSAGE_CMD); |
| | | if (pStep == nullptr) { |
| | | return -1; |
| | | } |
| | | |
| | | return pStep->setCimMessage(pszMessage, id, nTouchPanelNo); |
| | | } |
| | | |
| | | int CEquipment::clearCimMessage(short id, short nTouchPanelNo) |
| | | { |
| | | SERVO::CEqCimMessageClearStep* pStep = (SERVO::CEqCimMessageClearStep*)getStepWithName(STEP_CIM_MESSAGE_CLEAR); |
| | | if (pStep == nullptr) { |
| | | return -1; |
| | | } |
| | | |
| | | return pStep->clearCimMessage(id, nTouchPanelNo); |
| | | } |
| | | |
| | | int CEquipment::setDateTime(short year, short month, short day, short hour, short minute, short second) |
| | | { |
| | | SERVO::CEqDateTimeSetCmdStep* pStep = (SERVO::CEqDateTimeSetCmdStep*)getStepWithName(STEP_DATETIME_SET_CMD); |
| | | if (pStep == nullptr) { |
| | | return -1; |
| | | } |
| | | |
| | | return pStep->setDateTime(year, month, day, hour, minute, second); |
| | | } |
| | | } |