#include "IOController.h" IOController::IOController() { } IOController::~IOController() { } bool IOController::controllerInitialization(unsigned int serialNum) { return controlCom(serialNum, 1); } bool IOController::controlCom(unsigned int IONum, unsigned int state) { std::string comName; switch (IONum) { case 1: comName = "Com1"; break; case 2: comName = "Com2"; break; case 3: comName = "Com3"; break; case 4: comName = "Com4"; break; case 5: comName = "Com5"; break; case 6: comName = "Com6"; break; case 7: comName = "Com7"; break; case 8: comName = "Com8"; break; default: break; } m_comName = comName; m_mpComsState[comName] = false; void* handle; int nRet = MV_IO_CreateHandle(&handle); if (nRet != MV_OK) { //throw nRet; return false; } else { m_mpComsHandle[comName] = handle; } if (state == 1) { if (!connectCom(m_mpComsHandle[comName], comName)) { return false; } } else if (state == 0) { if (!closeCom(m_mpComsHandle[comName], comName)) { return false; } } return true; } bool IOController::connectCom(void* handle, std::string comName) { MV_IO_SERIAL stSerial; memset(&stSerial, 0, sizeof(MV_IO_SERIAL)); strcpy(stSerial.strComName, comName.c_str()); //m_mpStIOSerial[comName] = stSerial; int nRet = MV_IO_Open(m_mpComsHandle[comName], &stSerial); if (nRet != MV_OK) { //throw nRet; return false; } m_mpComsState[comName] = true; return true; } bool IOController::closeCom(void* handle, std::string comName) { return true; } bool IOController::controlPort(unsigned int portNum, unsigned int state) { MV_IO_PORT_NUMBER stPortNumber; switch(portNum) { case 1: stPortNumber = MV_IO_PORT_1; break; case2: stPortNumber = MV_IO_PORT_2; break; case 3: stPortNumber = MV_IO_PORT_3; break; case 4: stPortNumber = MV_IO_PORT_4; break; case 5: stPortNumber = MV_IO_PORT_5; break; case 6: stPortNumber = MV_IO_PORT_6; break; case 7: stPortNumber = MV_IO_PORT_7; break; case 8: stPortNumber = MV_IO_PORT_8; break; default: break; } if (state == 1) { if (!openPort(m_comName, stPortNumber)) { return false; } } else if (state == 0) { if (!closePort(m_comName, stPortNumber)) { return false; } } return true; } bool IOController::openPort(std::string comName, MV_IO_PORT_NUMBER portNum) { MV_IO_SET_OUTPUT stOutput; memset(&stOutput, 0, sizeof(MV_IO_SET_OUTPUT)); stOutput.nPort = portNum; stOutput.nType = MV_IO_PATTERN_SINGLE; stOutput.nDurationTime = 0; stOutput.nValidLevel = 1; //高电平 if ((m_mpComsHandle.find(comName) == m_mpComsHandle.end())|| (!m_mpComsState[comName])) { return false; } int nRet = MV_IO_SetOutput(m_mpComsHandle[comName], &stOutput); if (nRet != MV_OK) { //throw nRet; return false; } return true; } bool IOController::closePort(std::string comName, MV_IO_PORT_NUMBER portNum) { MV_IO_SET_OUTPUT stOutput; memset(&stOutput, 0, sizeof(MV_IO_SET_OUTPUT)); stOutput.nPort = portNum; stOutput.nType = MV_IO_PATTERN_SINGLE; // stOutput.nDurationTime = 3000; stOutput.nValidLevel = 0; //低电平 if ((m_mpComsHandle.find(comName) == m_mpComsHandle.end()) || (!m_mpComsState[comName])) { return false; } int nRet = MV_IO_SetOutput(m_mpComsHandle[comName], &stOutput); if (nRet != MV_OK) { //throw nRet; return false; } return true; } bool IOController::getPortState(unsigned int portNum, unsigned int& state) { MV_IO_PORT_NUMBER stPortNumber; switch (portNum) { case 1: stPortNumber = MV_IO_PORT_1; break; case2: stPortNumber = MV_IO_PORT_2; break; case 3: stPortNumber = MV_IO_PORT_3; break; case 4: stPortNumber = MV_IO_PORT_4; break; case 5: stPortNumber = MV_IO_PORT_5; break; case 6: stPortNumber = MV_IO_PORT_6; break; case 7: stPortNumber = MV_IO_PORT_7; break; case 8: stPortNumber = MV_IO_PORT_8; break; default: break; } if (m_mpComsHandle.find(m_comName) == m_mpComsHandle.end()) { return false; } MV_IO_SET_OUTPUT stSetOutput; int nRet = MV_IO_GetPortOutputParam(m_mpComsHandle[m_comName], &stSetOutput); if (nRet != MV_OK) { //throw nRet; return false; } state = stSetOutput.nValidLevel; return true; }