/******************************************************************************* * PuServer.cc PuServer process * T.Barnaby, BEAM Ltd, 2007-02-07 ******************************************************************************* */ #include #include #include #include #include #include #include PuServer::PuServer(Control& control, UInt32 number, int physNumber) : ocontrol(control){ onumber = number; ophysNumber = physNumber; } PuServer::~PuServer(){ } BError PuServer::init(){ BError err; BString url; if(ocontrol.boapnsHost() != ""){ url = BString("//") + ocontrol.boapnsHost() + "/"; } opuControl.connectService(url + "puControl-" + ophysNumber); opuProcess.connectService(url + "puProcess-" + ophysNumber); err = opuProcess.addEventServer(url + "tmsEvent"); return err; } UInt32 PuServer::getNumber(){ return onumber; } BError PuServer::handleError(BError err, int e){ BError errRet; dprintf(DBG_MISC, "PuServer::handleError: %d\n", err.getErrorNo()); if((err.getErrorNo() == -EPIPE) && (e < 2)){ // Try a reconnect opuControl.disconnectService(); opuProcess.disconnectService(); init(); } else if(err.getErrorNo() == -ECONNREFUSED){ errRet.set(err.getErrorNo(), BString("PuConnection Error: ") + err.getString()); } else { errRet = err; } return errRet; } BError PuServer::configure(ConfigInfo configInfo){ BError err; int n = 0; while(err = opuControl.configure(configInfo)){ if(err = handleError(err, n++)) break; } return err; } BError PuServer::test(BList& errors){ BError err; int n = 0; while(err = opuControl.test(errors)){ if(err = handleError(err, n++)) break; } return err; } BError PuServer::getStatus(BList& statusList){ BError err; int n = 0; while(err = opuControl.getStatus(statusList)){ if(err = handleError(err, n++)) break; } return err; } BError PuServer::getStatistics(BList& statsList){ BError err; int n = 0; while(err = opuControl.getStatistics(statsList)){ if(err = handleError(err, n++)) break; } return err; } // Test functions BError PuServer::setTestMode(PuChannel puChannel, UInt32 testOutput, UInt32 timingDisableMask){ BError err; int n = 0; while(err = opuControl.setTestMode(puChannel, testOutput, timingDisableMask)){ if(err = handleError(err, n++)) break; } return err; } BError PuServer::setTimingSignals(PuChannel puChannel, UInt32 timingSignals){ BError err; int n = 0; while(err = opuControl.setTimingSignals(puChannel, timingSignals)){ if(err = handleError(err, n++)) break; } return err; } BError PuServer::captureTestData(PuChannel puChannel, TestCaptureInfo captureInfo, BArray& data){ BError err; int n = 0; while(err = opuControl.captureTestData(puChannel, captureInfo, data)){ if(err = handleError(err, n++)) break; } return err; } BError PuServer::setTestData(PuChannel puChannel, Int32 on, BArray data){ BError err; int n = 0; while(err = opuControl.setTestData(puChannel, on, data)){ if(err = handleError(err, n++)) break; } return err; } BError PuServer::setPupeConfig(PuChannel puPhysChannel, PupeConfig pupeConfig){ BError err; int n = 0; while(err = opuControl.setPupeConfig(puPhysChannel, pupeConfig)){ if(err = handleError(err, n++)) break; } return err; } BError PuServer::setControlInfo(CycleParam params){ BError err; int n = 0; while(err = opuProcess.setControlInfo(params)){ if(err = handleError(err, n++)) break; } return err; } BError PuServer::setNextCycle(UInt32 cycleNumber, BString cycleType){ BError err; int n = 0; while(err = opuProcess.setNextCycle(cycleNumber, cycleType)){ if(err = handleError(err, n++)) break; } return err; } BError PuServer::getStatus(PuChannel puChannel, PuStatus& puStatus){ BError err; int n = 0; while(err = opuProcess.getStatus(puChannel, puStatus)){ if(err = handleError(err, n++)) break; } return err; } BError PuServer::getData(PuChannel puChannel, DataInfo dataInfo, Data& data){ BError err; int n = 0; while(err = opuProcess.getData(puChannel, dataInfo, data)){ if(err = handleError(err, n++)) break; } return err; } BError PuServer::requestData(PuChannel puChannel, DataInfo dataInfo){ BError err; int n = 0; while(err = opuProcess.requestData(puChannel, dataInfo)){ if(err = handleError(err, n++)) break; } return err; }