00001 #ifndef PIPELINETEST_H
00002 #define PIPELINETEST_H
00003
00004 #include "../ipc/TestRequest.h"
00005 #include "../ipc/CalibrationController.h"
00006 #include "../ipc/ScanLibrary.h"
00007 #include "../ipc/Sct_CalibrationController.hh"
00008 #include "../CalibrationControllerImpl.h"
00009
00010 #include "../SctApiException.h"
00011 #include "Sct/LogicErrors.h"
00012
00013 #include <CommonWithDsp/ABCD/ABCDscans.h>
00014 #include <iostream>
00015 #include <vector>
00016
00017 using namespace Sct;
00018 using namespace std;
00019 using namespace SctCalibrationController::Ipc;
00020 using namespace SctCalibrationController;
00021
00022 namespace SctCalibrationController {
00023 namespace Scripts {
00024
00025 class PipelineTest : public TestRequestImpl {
00026 public:
00027 static PipelineTest& instance() {
00028 static PipelineTest rc;
00029 return rc;
00030 }
00031
00032 virtual void startTest(Sct_SctApi_T_SctApi& inapi, string& name, unsigned short& testVariable, unsigned long& nScans, vector<double>& testPoints) {
00033 this->api = &inapi;
00034
00035 Sct_SctApiStatus status;
00036 api->modifyABCDVar(&status, ST_COMPRESSION, 1);
00037 if (status.returnCode != 0)
00038 throw SctApiException(status.returnCode, "PipelineTest::startTest", __FILE__, __LINE__);
00039
00040 api->modifyABCDVar(&status, ST_EDGE_DETECT, 0);
00041 if (status.returnCode != 0)
00042 throw SctApiException(status.returnCode, "PipelineTest::startTest", __FILE__, __LINE__);
00043
00044 api->modifyABCDVar(&status, ST_SEND_MASK, 0);
00045 if (status.returnCode != 0)
00046 throw SctApiException(status.returnCode, "PipelineTest::startTest", __FILE__, __LINE__);
00047
00048 name = "PipelineTest";
00049 nScans = 2;
00050 testPoints.push_back(0);
00051 testPoints.push_back(1);
00052 testVariable=ST_MASK;
00053 }
00054
00055 virtual Sct_SctApi_T_Scan* getNextScan(unsigned long index) {
00056 if (api == 0)
00057 throw InvariantViolatedError("Api pointer is 0 in getNextScan!", __FILE__, __LINE__);
00058
00059
00060 Sct_SctApiStatus status;
00061 api->modifyABCDVar(&status, ST_MASK, 3.0*(1-index) );
00062 if (status.returnCode != 0)
00063 throw SctApiException(status.returnCode, "PipelineTest::getNextScan", __FILE__, __LINE__);
00064
00065
00066 Sct_SctApi_T_Scan* s = api->defaultScan(&status);
00067 if (status.returnCode != 0)
00068 throw SctApiException(status.returnCode, "PipelineTest::getNextScan", __FILE__, __LINE__);
00069
00070 s->setNTrigs(&status, 100);
00071 if (status.returnCode != 0)
00072 throw SctApiException(status.returnCode, "PipelineTest::getNextScan", __FILE__, __LINE__);
00073
00074
00075 Sct_SctApi_T_Trigger* t = s->getTrigger1(&status);
00076 if (status.returnCode != 0)
00077 throw SctApiException(status.returnCode, "PipelineTest::getNextScan", __FILE__, __LINE__);
00078
00079
00080 t->softPulseL1A(&status, 140, 129);
00081 if (status.returnCode != 0)
00082 throw SctApiException(status.returnCode, "PipelineTest::getNextScan", __FILE__, __LINE__);
00083
00084
00085 t->setCommIncr(&status, 1, 1);
00086 if (status.returnCode != 0)
00087 throw SctApiException(status.returnCode, "PipelineTest::getNextScan", __FILE__, __LINE__);
00088
00089
00090 s->configure(&status, ST_ELAPSED, 140, 151, 1);
00091 if (status.returnCode != 0)
00092 throw SctApiException(status.returnCode, "PipelineTest::getNextScan", __FILE__, __LINE__);
00093
00094 return s;
00095 }
00096
00097 virtual bool canFeedback() {
00098 return false;
00099 }
00100
00101 virtual void endTest() {
00102 if (api == 0)
00103 throw InvariantViolatedError("Api pointer is 0 in endTest!", __FILE__, __LINE__);
00104
00105 Sct_SctApiStatus status;
00106 api->modifyABCDVar(&status, ST_MASK, 0);
00107 if (status.returnCode != 0)
00108 throw SctApiException(status.returnCode, "PipelineTest::getNextScan", __FILE__, __LINE__);
00109
00110
00111 api = 0;
00112 }
00113
00114 private:
00115 PipelineTest() {}
00116 Sct_SctApi_T_SctApi* api;
00117 };
00118 }
00119 }
00120 #endif //PIPELINETEST_H