| | |
| | | return ERROR_CODE_INVALID_DATA; |
| | | } |
| | | |
| | | // 解析各位状态 |
| | | // 解析各位状态 |
| | | const short nBuffer = vecLedBuffer[0]; |
| | | outLedStatus.bExtPw = (nBuffer & (1 << 15)) != 0; |
| | | outLedStatus.bRd = (nBuffer & (1 << 6)) != 0; |
| | |
| | | |
| | | CCLinkIEControlMode CCCLinkIEControl::ConvertToCCLinkIEControlMode(const short nMode) { |
| | | switch (static_cast<CCLinkIEControlMode>(nMode)) { |
| | | case CCLinkIEControlMode::ONLINE: return CCLinkIEControlMode::ONLINE; // 在线 |
| | | case CCLinkIEControlMode::OFFLINE: return CCLinkIEControlMode::OFFLINE; // 离线 |
| | | case CCLinkIEControlMode::INTER_STATION_TEST: return CCLinkIEControlMode::INTER_STATION_TEST; // 站间测试 |
| | | case CCLinkIEControlMode::LINE_TEST: return CCLinkIEControlMode::LINE_TEST; // 线路测试 |
| | | case CCLinkIEControlMode::LOOPBACK_TEST: return CCLinkIEControlMode::LOOPBACK_TEST; // 自回送测试 |
| | | case CCLinkIEControlMode::HW_TEST: return CCLinkIEControlMode::HW_TEST; // H/W测试 |
| | | case CCLinkIEControlMode::BUS_IF_TEST: return CCLinkIEControlMode::BUS_IF_TEST; // 总线I/F测试 |
| | | case CCLinkIEControlMode::ONLINE: return CCLinkIEControlMode::ONLINE; // 在线 |
| | | case CCLinkIEControlMode::OFFLINE: return CCLinkIEControlMode::OFFLINE; // 离线 |
| | | case CCLinkIEControlMode::INTER_STATION_TEST: return CCLinkIEControlMode::INTER_STATION_TEST; // 站间测试 |
| | | case CCLinkIEControlMode::LINE_TEST: return CCLinkIEControlMode::LINE_TEST; // 线路测试 |
| | | case CCLinkIEControlMode::LOOPBACK_TEST: return CCLinkIEControlMode::LOOPBACK_TEST; // 自回送测试 |
| | | case CCLinkIEControlMode::HW_TEST: return CCLinkIEControlMode::HW_TEST; // H/W测试 |
| | | case CCLinkIEControlMode::BUS_IF_TEST: return CCLinkIEControlMode::BUS_IF_TEST; // 总线I/F测试 |
| | | default: return CCLinkIEControlMode::UNKNOWN; |
| | | } |
| | | } |
| | | |
| | | int CCCLinkIEControl::ValidateBoardStatus(const BoardStatus& status) { |
| | | if (status.nStationValue < 1 || status.nStationValue > 120) { |
| | | return ERROR_CODE_STATION_OUT_OF_RANGE; // 站号超出范围 |
| | | return ERROR_CODE_STATION_OUT_OF_RANGE; // 站号超出范围 |
| | | } |
| | | if (status.nGroupValue < 0 || status.nGroupValue > 32) { |
| | | return ERROR_CODE_GROUP_OUT_OF_RANGE; // 组超出范围 |
| | | return ERROR_CODE_GROUP_OUT_OF_RANGE; // 组超出范围 |
| | | } |
| | | if (status.nNetworkValue < 1 || status.nNetworkValue > 239) { |
| | | return ERROR_CODE_NETWORK_OUT_OF_RANGE; // 网络号超出范围 |
| | | return ERROR_CODE_NETWORK_OUT_OF_RANGE; // 网络号超出范围 |
| | | } |
| | | return 0; // 校验通过 |
| | | return 0; // 校验通过 |
| | | } |
| | | |
| | | int CCCLinkIEControl::ReadData2(const StationIdentifier& station, short devType, short devNo, short size, void* pData) |
| | | { |
| | | // 验证站点参数和数据有效性 |
| | | int nRet = ValidateStationAndSize(station, size); |
| | | if (nRet != 0) { |
| | | UpdateLastError(nRet); |
| | | return nRet; |
| | | } |
| | | |
| | | // 确保线程安全的最小锁定范围 |
| | | { |
| | | std::lock_guard<std::mutex> lock(m_mtx); |
| | | nRet = mdReceive(m_nPath, CombineStation(station), devType, devNo, &size, pData); |
| | | } |
| | | |
| | | if (nRet != 0) { |
| | | UpdateLastError(nRet); |
| | | } |
| | | |
| | | return nRet; |
| | | } |