123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463 |
- #include "stdafx.h"
- #include "Detector_Rayence.h"
- #include "CCOS.Dev.FPD.Rayence.h"
- extern Log4CPP::Logger* gLogger;
- Detector_Rayence* g_pDetector = nullptr;
- Detector_Rayence* g_pRayenceInstance = nullptr;
- LogicClient* m_pSynClient;
- void CALLBACK G_Rayence_InfoMessage(int nCode, TCHAR* szMessage)
- {
- g_pRayenceInstance->CALLBACK_InfoMessage(nCode, szMessage);
- }
- void CALLBACK G_Rayence_OnEvent(tVDACQ_CallBackRec* ACBR)
- {
- g_pRayenceInstance->CALLBACK_Acquisition(ACBR);
- }
- void CALLBACK G_Rayence_OnDarkEvent(tVDACQ_CallBackRec* ACBR)
- {
- g_pRayenceInstance->CALLBACK_Dark_Acquisition(ACBR);
- }
- Detector_Rayence::Detector_Rayence()
- :m_pFrm1x1Buffer{},
- m_pFrm2x2Buffer{},
- m_pDark1x1Buffer{},
- m_pDark2x2Buffer{},
- m_pFrm1x1AveBuffer{},
- m_pFrm2x2AveBuffer{},
- m_pOneShotBuffer{},
- m_pFullImgBuffer{},
- m_hOffsetThreadStatus{},
- m_hOffsetThread{},
- m_nPanelCount{},
- m_nCurrentPanelID{},
- m_nImageWidth{},
- m_nImageHeight{},
- m_nFrmWidth{},
- m_nFrmHeight{},
- m_nCropLeft{},
- m_nCropRight{},
- m_nCropTop{},
- m_nCropBottom{},
- m_nRawImgHeight{},
- m_nRawImgWidth{},
- m_nAveCount{},
- m_nBinningMode{},
- m_nCalBinning{},
- m_nFrmAveBufSize{},
- m_strLastLogicMode{},
- m_strCurrentLogicMode{},
- m_strWorkPath{},
- m_nImageIndex{},
- m_fFrameRate{},
- m_nCalModeId{},
- m_nCalToAcqNum{},
- m_nExposureTime{},
- m_nFlags{},
- m_nRecvCount{},
- m_nSensitivity{},
- m_nSkipNum{},
- m_nExamMode(APP_STATUS::APP_STATUS_MAX),
- m_nExiThreshold(200),
- m_bRayAcqing(false),
- m_bSaveRaw(false),
- m_bOffsetBuffer(false),
- m_bAbortOffset(false),
- m_bCalOffset(false),
- m_bCalGain(false),
- m_bCalBPM(false),
- m_bDoOffset(false),
- m_bRayenceConnect(false),
- m_bRefreshAllMode(false),
- m_eCaliType(CCOS_CALIBRATION_TYPE::CCOS_CALIBRATION_TYPE_NONE),
- m_eStatus(eDetStatus::DetStatus_NotInit)
- {
- g_pRayenceInstance = this;
- m_pDPC2PanelID = new map<void*, int>();
- m_pPanelID2DPC = new map<int, void*>();
-
- InitializeCriticalSection(&m_cs);
- //work with sync box for Rad
- m_pSynClient = new LogicClient("V3_FullUCB", "NSQ", "", false);
- if (m_pSynClient->Open("ccosChannel", ALL_ACCESS))
- {
- FDEBUG("Ccos_V3 Create V3_FullUCB Client success");
- }
- }
- Detector_Rayence::~Detector_Rayence()
- {
- if (m_pFullImgBuffer != nullptr)
- {
- delete[] m_pFullImgBuffer;
- m_pFullImgBuffer = nullptr;
- }
- if (m_pSynClient)
- {
- if (!m_pSynClient->IsClosed())
- {
- m_pSynClient->Close();
- }
- delete m_pSynClient;
- m_pSynClient = nullptr;
- }
- }
- bool Detector_Rayence::DriverEntry(void* pDrvDPC, ResDataObject& Configuration)
- {
- FINFO("--Func-- DriverEntry {$}", pDrvDPC);
- map<void*, int>::iterator DPCsIter = m_pDPC2PanelID->find(pDrvDPC);
- if (DPCsIter != m_pDPC2PanelID->end())
- {
- FERROR("This DPC already exist");
- return false;
- }
- m_pDPC2PanelID->insert(pair<void*, int>(pDrvDPC, m_nPanelCount));
- m_pPanelID2DPC->insert(pair<int, void*>(m_nPanelCount, pDrvDPC));
- m_nPanelCount++;
- m_ModeConfig = Configuration; //记录配置 --目前只有一个平板,多板时应该分别存储
- return true;
- }
- bool Detector_Rayence::Connect(void* pDrvDPC, const char* szWorkPath)
- {
- FINFO("Connect detector begin");
- std::string strSensitivity;
- if ((*m_pDPC2PanelID)[pDrvDPC] != m_nCurrentPanelID)
- {
- Debug("Not current DPC, return true");
- return true;
- }
- m_strWorkPath = szWorkPath;
- try
- {
- int nModeCount = m_ModeConfig["ModeTable"].size();
- for (int i = 0; i < nModeCount; i++)
- {
- FINFO("mode count:{$}", i);
- }
- m_nExiThreshold = (int)m_ModeConfig["ExiThreshold"];
- m_strSDKPath = (std::string)m_ModeConfig["SDKPath"];
- m_strModulePath = (std::string)m_ModeConfig["DetectorModePath"];
- m_nSensitivity = (int)m_ModeConfig["Sensitivity"];
- m_bCalOffset = (int)m_ModeConfig["UseOffsetCalibration"];
- m_bCalGain = (int)m_ModeConfig["UseGainCalibration"];
- m_bCalBPM = (int)m_ModeConfig["UseBPMCalibration"];
- m_nExposureTime = (int)m_ModeConfig["ExposureTime"];
- switch (m_nSensitivity)
- {
- case 0:
- strSensitivity = "High Sensitivity";
- break;
- case 1:
- strSensitivity = "Mid High Sensitivity";
- break;
- case 2:
- strSensitivity = "middle";
- break;
- case 3:
- strSensitivity = "Mid Low";
- break;
- case 4:
- strSensitivity = "Low";
- break;
- default:
- FERROR("Sensitivity FERROR Paramer");
- break;
- }
- FINFO("Rayence Use Senisitivity: {$}", strSensitivity);
- FINFO("Load Calibration Offset: {$}, Gain: {$}, BPM: {$}", m_bCalOffset, m_bCalGain, m_bCalBPM);
- }
- catch (ResDataObjectExption& e)
- {
- FERROR("Get config FERROR: {$}", e.what());
- return false;
- }
- std::string strModulePath;
- strModulePath = m_strWorkPath + m_strModulePath + "\\CCOS.Dev.FPD.RayenceX64.dll";
- FINFO("ModulePath : {$}", strModulePath);
- std::string strVersion;
- strVersion = GetFileVersion(strModulePath);
- FINFO("======================={$}=======================", strVersion);
-
- if (!OpenDetector())
- {
- FERROR("Open detector failed, Connect failed \n");
- return false;
- }
- FINFO("Connect over");
- return true;
- }
- void Detector_Rayence::DisConnect()
- {
- FINFO("DisConnect with detector");
- if (eDetStatus::DetStatus_XrayCalibration == GetRayenceDPCStatus() || eDetStatus::DetStatus_Offset == GetRayenceDPCStatus())
- {
- FINFO("DisConnect Calling StopCalibration");
- }
- if (m_pFrm1x1Buffer)
- {
- delete[] m_pFrm1x1Buffer;
- m_pFrm1x1Buffer = nullptr;
- }
- if (m_pFrm2x2Buffer)
- {
- delete[] m_pFrm2x2Buffer;
- m_pFrm2x2Buffer = nullptr;
- }
- if (m_pDark1x1Buffer)
- {
- delete[] m_pDark1x1Buffer;
- m_pDark1x1Buffer = nullptr;
- }
- if (m_pDark2x2Buffer)
- {
- delete[] m_pDark2x2Buffer;
- m_pDark2x2Buffer = nullptr;
- }
- if (m_pFrm1x1AveBuffer)
- {
- delete[] m_pFrm1x1AveBuffer;
- m_pFrm1x1AveBuffer = nullptr;
- }
- if (m_pFrm2x2AveBuffer)
- {
- delete[] m_pFrm2x2AveBuffer;
- m_pFrm2x2AveBuffer = nullptr;
- }
- if (m_pOneShotBuffer)
- {
- delete[] m_pOneShotBuffer;
- m_pOneShotBuffer = nullptr;
- }
-
- FINFO("Disconnect Detector Over");
- }
- void Detector_Rayence::EnterExamMode(int nExamMode)
- {
- switch (nExamMode)
- {
- case APP_STATUS_WORK_BEGIN:
- FINFO("Enter into Exam Windows");
- m_nExamMode = APP_STATUS_WORK_BEGIN;
- break;
- case APP_STATUS_WORK_END:
- FINFO("Quit Exam Windows");
- m_nExamMode = APP_STATUS_WORK_END;
- break;
- case APP_STATUS_DETSHARE_BEGIN:
- FINFO("Enter into Detector Share Windows");
- m_nExamMode = APP_STATUS_DETSHARE_BEGIN;
- break;
- case APP_STATUS_DETSHAR_END:
- m_nExamMode = APP_STATUS_IDLE;
- FINFO("Quit Detector Share Windows");
- m_nExamMode = APP_STATUS_DETSHAR_END;
- break;
- case APP_STATUS_CAL_BEGIN:
- FINFO("Enter into Calibration Windows");
- m_nExamMode = APP_STATUS_CAL_BEGIN;
- break;
- case APP_STATUS_CAL_END:
- FINFO("Quit Calibration Windows");
- m_nExamMode = APP_STATUS_CAL_END;
- break;
- case APP_STATUS_WORK_IN_SENSITIVITY:
- FINFO("Enter into sensitivity test interface");
- m_nExamMode = APP_STATUS_WORK_IN_SENSITIVITY;
- break;
- default:
- break;
- }
- if (APP_STATUS_WORK_END == m_nExamMode)
- {
- if (eDetStatus::DetStatus_Acquire == GetRayenceDPCStatus())
- {
- m_Intf.rVDACQ_Abort(rACQ_CallBackRec);
- m_Intf.rVDACQ_Close(rACQ_CallBackRec);
- }
- }
- }
- void Detector_Rayence::CALLBACK_InfoMessage(int nCode, TCHAR* szMessage)
- {
- FINFO("InfoMessage: Code: {$}, Message: {$}", nCode, szMessage);
- if (nCode == 16842754)
- {
- m_bRayenceConnect = true;
- }
- if (nCode == 16908289)
- {
- m_bRayAcqing = true;
- }
- if (nCode == 16908290)
- {
- m_bRayAcqing = false;
- }
- }
- void Detector_Rayence::HandleCaptureRecvEvent(tVDACQ_CallBackRec* ACBR, bool bIsCaptureRaw)
- {
- FINFO("ACBR->rEvent cVDACQ_ECaptureRecv m_eStatus:{$}", (int)m_eStatus);
- if (m_eStatus == eDetStatus::DetStatus_Acquire)
- {
- if (m_strCurrentExamType == "RAD")
- {
- FINFO("Rad Mode...");
- }
- else if (m_strCurrentExamType == "CF")
- {
- FINFO("CF Mode...");
- }
- else if (m_strCurrentExamType == "PF")
- {
- FINFO("PF Mode...");
- }
- if (m_bSaveRaw)
- {
- FINFO("Begin save Raw");
- char szTemp[30] = { 0 };
- string strFileName = m_strWorkPath + "\\Image";
- if (m_strCurrentExamType == "Rad")
- {
- strFileName += "\\Image_Rad.raw";
- }
- else
- {
- sprintf_s(szTemp, "\\Image_%d.raw", m_nImageIndex);
- strFileName += szTemp;
- }
- std::filesystem::path file_path{ strFileName.c_str() };
- std::ofstream file_stream(file_path, std::ios::binary);
- if (!file_stream.is_open())
- {
- FERROR("Open Save File Failed");
- }
- unsigned int nTempSize = m_nFrmWidth * m_nFrmHeight * 2;
- if (m_nBinningMode == 0)
- {
- file_stream.write(reinterpret_cast<const char*>(m_pFrm1x1Buffer), nTempSize);
- }
- if (m_nBinningMode == 1)
- {
- file_stream.write(reinterpret_cast<const char*>(m_pFrm2x2Buffer), nTempSize);
- }
-
- file_stream.close();
- }
- m_nImageIndex++;
- OnProcessImage(ACBR->rCaptureFrames, bIsCaptureRaw);
- }
- }
- std::string Detector_Rayence::GetFileVersion(std::string strFilePathName)
- {
- DWORD dwVerSize = GetFileVersionInfoSize(strFilePathName.c_str(), NULL);
- if (dwVerSize == 0)
- {
- return "";
- }
- LPVOID pVersionBuffer = malloc(dwVerSize);
- GetFileVersionInfo(strFilePathName.c_str(), 0, dwVerSize, pVersionBuffer);
- VS_FIXEDFILEINFO* pInfo;
- UINT nInfoLen;
- std::string strVersion = "";
- if (VerQueryValue(pVersionBuffer, _T("\\"), (void**)&pInfo, &nInfoLen))
- {
- strVersion = to_string(HIWORD(pInfo->dwFileVersionMS)) + "." + to_string(LOWORD(pInfo->dwFileVersionMS)) + "."
- + to_string(HIWORD(pInfo->dwFileVersionLS)) + "." + to_string(LOWORD(pInfo->dwFileVersionLS));
- }
- return strVersion;
- }
- float Detector_Rayence::SetFluPPS(float fPPS)
- {
- FINFO("Set Flu FrameRate : {$}", fPPS);
- m_fFrameRate = fPPS;
- if (m_fFrameRate == 30)
- {
- m_fFrameRate = 7;
- }
- if (m_strCurrentExamType == "CF")
- {
- FINFO("SetFrameRate: {$}", m_fFrameRate);
- m_Intf.rVDACQ_SetFrameRate(m_fFrameRate);
- }
-
- return m_fFrameRate;
- }
- void Detector_Rayence::GetFluPPS(float& fFluPPS)
- {
- fFluPPS = m_fFrameRate;
- }
- bool Detector_Rayence::SetAcqMode(std::string strMode)
- {
- FINFO("SetAcqMode nMode:{$}",strMode);
- if (m_strCurrentLogicMode == strMode)
- {
- FINFO("Same mode, return");
- return true;
- }
- m_strCurrentLogicMode = ""; //恢复初值
- m_Intf.rVDACQ_SetCaptureExposureTime(m_nExposureTime);//设置Rad采集的积分时间
- if (eDetStatus::DetStatus_Acquire == GetRayenceDPCStatus())
- {
- m_Intf.rVDACQ_Abort(rACQ_CallBackRec);
- m_Intf.rVDACQ_Close(rACQ_CallBackRec);
- }
- m_Intf.rVDACQ_SetSensitivity(0);
- try
- {
- int nModeCount = m_ModeConfig["ModeTable"].size();
- for (int i = 0; i < nModeCount; i++)
- {
- std::string strAppMode = (std::string)m_ModeConfig["ModeTable"][i]["ExamType"];//SetAcqMode
- if (strAppMode == strMode)
- {
- m_strCurrentExamType = (std::string)m_ModeConfig["ModeTable"][i]["ExamType"];
- m_bSaveRaw = (int)m_ModeConfig["ModeTable"][i]["IsSaveRaw"];
- m_nBinningMode = (int)m_ModeConfig["ModeTable"][i]["BinningMode"];
- m_nCropLeft = (int)m_ModeConfig["ModeTable"][i]["CropLeft"];
- m_nCropRight = (int)m_ModeConfig["ModeTable"][i]["CropRight"];
- m_nCropTop = (int)m_ModeConfig["ModeTable"][i]["CropTop"];
- m_nCropBottom = (int)m_ModeConfig["ModeTable"][i]["CropBottom"];
- FINFO("Crop left: {$}, top: {$}, right: {$}, bottom: {$}",
- m_nCropLeft, m_nCropTop, m_nCropRight, m_nCropBottom);
- FINFO("ExamType: {$}, SaveRaw: {$}", m_strCurrentExamType, m_bSaveRaw);
- m_strCurrentLogicMode = strMode;
-
- break;
- }
- }
- }
- catch (ResDataObjectExption& e)
- {
- FERROR("Read configuration failed, FERROR code: {$}", e.what());
- return false;
- }
- if (m_strLastLogicMode != m_strCurrentLogicMode || GetRayenceDPCStatus() != eDetStatus::DetStatus_Acquire)
- {
- if (m_strCurrentExamType == "RAD")//PrepareAcquisition
- {
- m_Intf.rVDACQ_SetBinning(m_nBinningMode);
- m_Intf.rVDACQ_GetFrameDim(&m_nFrmWidth, &m_nFrmHeight);
- m_Intf.rVDACQ_SetFrameDim(m_nFrmWidth, m_nFrmHeight);
- FINFO("Rad BinningMode: {$}, FrameSize Width: {$}, Height: {$}", m_nBinningMode, m_nFrmWidth, m_nFrmHeight);
- if (m_nBinningMode == 0)
- {
- if (m_pFrm1x1Buffer == nullptr)
- {
- unsigned int nTempSize = m_nFrmWidth * m_nFrmHeight;
- m_pFrm1x1Buffer = new short[nTempSize];
- }
- }
-
- if (m_nBinningMode == 1)
- {
- if (m_pFrm2x2Buffer == nullptr)
- {
- unsigned int nTempSize = m_nFrmWidth * m_nFrmHeight;
- m_pFrm2x2Buffer = new short[nTempSize];
- }
- }
- if (m_pOneShotBuffer == nullptr)
- {
- unsigned int nTempSize = m_nFrmHeight * m_nFrmWidth;
- m_pOneShotBuffer = new short[nTempSize];
- }
- else
- {
- delete[] m_pOneShotBuffer;
- unsigned int nTempSize = m_nFrmWidth * m_nFrmHeight;
- m_pOneShotBuffer = new short[nTempSize];
- }
- m_Intf.rVDACQ_GetFGRec(&m_qFGRec);
- m_qFGRec.rCalFlags = 0;
- if (m_bCalOffset)
- {
- m_qFGRec.rCalFlags |= cVDC_FCalOffs;
- }
- if (m_bCalGain)
- {
- m_qFGRec.rCalFlags |= cVDC_FCalGain;
- }
- if (m_bCalBPM)
- {
- m_qFGRec.rCalFlags |= cVDC_FBadPixMap;
- }
- m_qFGRec.rFG_Control = 0;
- m_Intf.rVDACQ_SetFGRec(&m_qFGRec);
- m_Intf.rVDACQ_SetOneShot(1);
- m_Intf.rVDACQ_SetOneShot_Trigger(0);
- }
- else if (m_strCurrentExamType == "PF")
- {
- m_Intf.rVDACQ_SetBinning(m_nBinningMode);
- m_Intf.rVDACQ_GetFrameDim(&m_nFrmWidth, &m_nFrmHeight);
- m_Intf.rVDACQ_SetFrameDim(m_nFrmWidth, m_nFrmHeight);
- if (nullptr != m_pFullImgBuffer)
- {
- delete[] m_pFullImgBuffer;
- m_pFullImgBuffer = nullptr;
- }
- m_nImageWidth = m_nFrmWidth - m_nCropLeft - m_nCropRight;
- m_nImageHeight = m_nFrmHeight - m_nCropBottom - m_nCropTop;
- m_nRawImgHeight = m_nFrmHeight;
- m_nRawImgWidth = m_nFrmWidth;
- if (m_nBinningMode == 0)
- {
- if (m_pFrm1x1Buffer == nullptr)
- {
- unsigned int nTempSize = m_nFrmWidth * m_nFrmHeight;
- m_pFrm1x1Buffer = new short[nTempSize];
- }
- }
- if (m_nBinningMode == 1)
- {
- if (m_pFrm2x2Buffer == nullptr)
- {
- unsigned int nTempSize = m_nFrmWidth * m_nFrmHeight;
- m_pFrm2x2Buffer = new short[nTempSize];
- }
- }
- m_pFullImgBuffer = new WORD[(size_t)m_nImageWidth * (size_t)m_nImageHeight];
- FINFO("PF FrameRate: {$}, BinningMode: {$}, FrameSize Width: {$}, Height: {$}", m_fFrameRate, m_nBinningMode, m_nFrmWidth, m_nFrmHeight);
- m_Intf.rVDACQ_GetFGRec(&m_qFGRec);
- m_qFGRec.rCalFlags = 0;
- if (m_bCalOffset)
- {
- m_qFGRec.rCalFlags |= cVDC_FCalOffs;
- }
- if (m_bCalGain)
- {
- m_qFGRec.rCalFlags |= cVDC_FCalGain;
- }
- if (m_bCalBPM)
- {
- m_qFGRec.rCalFlags |= cVDC_FBadPixMap;
- }
- m_qFGRec.rFG_Control |= cVDACQ_FGC_CaptureCalHandler;
- m_Intf.rVDACQ_SetFGRec(&m_qFGRec);
- m_Intf.rVDACQ_SetOneShot(0);
- m_Intf.rVDACQ_SetDynamic_Trigger(1);
- }
- else if (m_strCurrentExamType == "CF")
- {
- m_Intf.rVDACQ_SetFrameRate(m_fFrameRate);
- m_Intf.rVDACQ_SetBinning(m_nBinningMode);
- m_Intf.rVDACQ_GetFrameDim(&m_nFrmWidth, &m_nFrmHeight);
- m_Intf.rVDACQ_SetFrameDim(m_nFrmWidth, m_nFrmHeight);
- if (nullptr != m_pFullImgBuffer)
- {
- delete[] m_pFullImgBuffer;
- m_pFullImgBuffer = nullptr;
- }
- m_nImageWidth = m_nFrmWidth - m_nCropLeft - m_nCropRight;
- m_nImageHeight = m_nFrmHeight - m_nCropBottom - m_nCropTop;
- m_nRawImgHeight = m_nFrmHeight;
- m_nRawImgWidth = m_nFrmWidth;
- if (m_nBinningMode == 0)
- {
- if (m_pFrm1x1Buffer == nullptr)
- {
- unsigned int nTempSize = m_nFrmWidth * m_nFrmHeight;
- m_pFrm1x1Buffer = new short[nTempSize];
- }
- }
- if (m_nBinningMode == 1)
- {
- if (m_pFrm2x2Buffer == nullptr)
- {
- unsigned int nTempSize = m_nFrmWidth * m_nFrmHeight;
- m_pFrm2x2Buffer = new short[nTempSize];
- }
- }
- m_pFullImgBuffer = new WORD[(size_t)m_nImageWidth * (size_t)m_nImageHeight];
- FINFO("CF FrameRate: {$}, BinningMode: {$}, FrameSize Width: {$}, Height: {$}", m_fFrameRate, m_nBinningMode, m_nFrmWidth, m_nFrmHeight);
- m_Intf.rVDACQ_GetFGRec(&m_qFGRec);
- m_qFGRec.rCalFlags = 0;
- if (m_bCalOffset)
- {
- m_qFGRec.rCalFlags |= cVDC_FCalOffs;
- }
- if (m_bCalGain)
- {
- m_qFGRec.rCalFlags |= cVDC_FCalGain;
- }
- if (m_bCalBPM)
- {
- m_qFGRec.rCalFlags |= cVDC_FBadPixMap;
- }
- m_qFGRec.rFG_Control |= cVDACQ_FGC_CaptureCalHandler;
- m_Intf.rVDACQ_SetFGRec(&m_qFGRec);
- m_Intf.rVDACQ_SetOneShot(0);
- m_Intf.rVDACQ_SetDynamic_Trigger(0);
- }
- }
- m_nCalBinning = m_nBinningMode;
- FINFO("Cal BinningMode : {$}", m_nCalBinning);
- return true;
- }
- bool Detector_Rayence::PrepareAcquisition(void* pDrvDPC)
- {
- FINFO("PrepareAcquisition");
- bool bRet = false;
- if ((*m_pDPC2PanelID)[pDrvDPC] != m_nCurrentPanelID)
- {
- FERROR("Not current DPC, return");
- return bRet;
- }
- FINFO("PrepareAcquisition m_strLastLogicMode:{$},m_strCurrentLogicMode:{$}", m_strLastLogicMode, m_strCurrentLogicMode);
- return true;
- }
- bool Detector_Rayence::StartAcquisition(void* pDrvDPC)
- {
- FINFO("StartAcquisition");
- bool bRet = false;
- if ((*m_pDPC2PanelID)[pDrvDPC] != m_nCurrentPanelID)
- {
- FERROR("Not current DPC, return");
- return bRet;
- }
- if (m_strLastLogicMode != m_strCurrentLogicMode || GetRayenceDPCStatus() != eDetStatus::DetStatus_Acquire)
- {
- if (m_strCurrentExamType == "RAD")//PrepareAcquisition
- {
- m_Intf.rVDACQ_SetCaptureBuf(m_pOneShotBuffer);
- if (m_nBinningMode == 0)
- {
- rACQ_CallBackRec = m_Intf.rVDACQ_Connect(cVDACQ_FBright, G_Rayence_OnEvent, NULL, (short*)m_pFrm1x1Buffer, 0);
- }
-
- if (m_nBinningMode == 1)
- {
- rACQ_CallBackRec = m_Intf.rVDACQ_Connect(cVDACQ_FBright, G_Rayence_OnEvent, NULL, (short*)m_pFrm2x2Buffer, 0);
- }
- if (rACQ_CallBackRec != nullptr)
- {
- SetRayenceDPCStatus(eDetStatus::DetStatus_Acquire); //Rad模式激活采集,设置状态
- }
- m_Intf.rVDACQ_StartFrame(rACQ_CallBackRec);
- }
- else if (m_strCurrentExamType == "PF")
- {
- FINFO("Start PF Acquisition");
- if (m_nBinningMode == 0)
- {
- rACQ_CallBackRec = m_Intf.rVDACQ_Connect(cVDACQ_FBright, G_Rayence_OnEvent, NULL, (short*)m_pFrm1x1Buffer, 0);
- }
- if (m_nBinningMode == 1)
- {
- rACQ_CallBackRec = m_Intf.rVDACQ_Connect(cVDACQ_FBright, G_Rayence_OnEvent, NULL, (short*)m_pFrm2x2Buffer, 0);
- }
- if (rACQ_CallBackRec != nullptr)
- {
- SetRayenceDPCStatus(eDetStatus::DetStatus_Acquire); //PF模式激活采集,设置状态
- }
- m_Intf.rVDACQ_StartFrame(rACQ_CallBackRec);
- StatusFeedback(EVT_STATUS_PANEL, PANEL_XWINDOW_ON);
- }
- else if (m_strCurrentExamType == "CF")
- {
- FINFO("Start CF Acquisition");
- if (m_nBinningMode == 0)
- {
- rACQ_CallBackRec = m_Intf.rVDACQ_Connect(cVDACQ_FBright, G_Rayence_OnEvent, NULL, (short*)m_pFrm1x1Buffer, 0);
- }
- if (m_nBinningMode == 1)
- {
- rACQ_CallBackRec = m_Intf.rVDACQ_Connect(cVDACQ_FBright, G_Rayence_OnEvent, NULL, (short*)m_pFrm2x2Buffer, 0);
- }
- if (rACQ_CallBackRec != nullptr)
- {
- SetRayenceDPCStatus(eDetStatus::DetStatus_Acquire); //CF模式激活采集,设置状态
- }
- m_Intf.rVDACQ_StartFrame(rACQ_CallBackRec);
- StatusFeedback(EVT_STATUS_PANEL, PANEL_XWINDOW_ON);
- }
- }
- m_bRayAcqing = true;
- /*StatusFeedback(EVT_STATUS_PANEL, PANEL_XWINDOW_ON);*/
- if ("" == m_strCurrentLogicMode)
- {
- FERROR("Illegal exam mode");
- }
- else
- {
- bRet = true;
- }
- return bRet;
- }
- bool Detector_Rayence::StopAcquisition(void* pDrvDPC)
- {
- FINFO("StopAcquisition ");
- bool bRet = false;
- StatusFeedback(EVT_STATUS_PANEL, PANEL_XWINDOW_OFF);
- if (m_strCurrentExamType != "RAD")
- {
- if ((*m_pDPC2PanelID)[pDrvDPC] != m_nCurrentPanelID)
- {
- FERROR("Not current DPC, return");
- return bRet;
- }
- if (eDetStatus::DetStatus_Acquire == GetRayenceDPCStatus())
- {
- FINFO("Calling StopAcquisition");
- m_Intf.rVDACQ_Abort(rACQ_CallBackRec);
- m_Intf.rVDACQ_Close(rACQ_CallBackRec);
- m_bRayAcqing = false;
- bRet = true;
- SetRayenceDPCStatus(eDetStatus::DetStatus_Standby); //停止采集,设置状态
- }
- else
- {
- FINFO("Not in acquire status");
- //切换到静态采集后,进入了ready状态。但此时可以不开始采集,切换到别的模式,
- bRet = true;
- }
- }
- else
- {
- bRet = true;
- }
-
- return bRet;
- }
- bool Detector_Rayence::StartOffset(void* pDrvDPC, bool isAll, std::vector<DetectorMode>& m_vDetectorModeList)
- {
- FINFO("StartOffset");
- bool bRet = false;
- m_bAbortOffset = false;
- if ((*m_pDPC2PanelID)[pDrvDPC] != m_nCurrentPanelID)
- {
- FERROR("Not current DPC, return");
- return false;
- }
- m_bRefreshAllMode = isAll;
- m_vecDetMode = m_vDetectorModeList;
- if (!m_bOffsetBuffer)
- {
- for (size_t i = 0; i < m_vecDetMode.size(); i++)
- {
- unsigned int nTempSize = m_vecDetMode[i].imageHeight * m_vecDetMode[i].imageWidth;
- FINFO("AveBuffer Height:{$}, Width:{$}", m_vecDetMode[i].imageHeight, m_vecDetMode[i].imageWidth);
- m_nCalModeId = m_vecDetMode[i].ModeID;
- FINFO("Calling StartDarkCalibration, modeid:({$})", m_nCalModeId);
- if (m_pFrm1x1AveBuffer == nullptr && m_nCalModeId == 0)
- {
- m_pFrm1x1AveBuffer = new int[nTempSize];
- memset(m_pFrm1x1AveBuffer, 0, nTempSize * sizeof(int));
- }
- if (m_pFrm2x2AveBuffer == nullptr && m_nCalModeId == 1)
- {
- m_pFrm2x2AveBuffer = new int[nTempSize];
- memset(m_pFrm2x2AveBuffer, 0, nTempSize * sizeof(int));
- }
- if (m_nCalModeId == 0 && m_pDark1x1Buffer == nullptr)
- {
- m_pDark1x1Buffer = new short[nTempSize];
- FINFO("1x1 Dark Buffer");
- }
- if (m_nCalModeId == 1 && m_pDark2x2Buffer == nullptr)
- {
- m_pDark2x2Buffer = new short[nTempSize];
- FINFO("2x2 Dark Buffer");
- }
- }
- m_bOffsetBuffer = true;
- }
- if (m_bRayAcqing)
- {
- FINFO("FPD not Ready");
- OffsetProgressFeedback(EVT_INFO_OFFSET_STATUS, 1);
- return true;
- }
- OffsetProgressFeedback(EVT_INFO_OFFSET_PROGRESS, 0);
- m_nRecvCount = 0;
- OpenRefreshOffset();
- return true;
- }
- bool Detector_Rayence::AbortOffset()
- {
- FINFO("Abort Offset");
- if (eDetStatus::DetStatus_Offset == GetRayenceDPCStatus() && m_bRayAcqing)
- {
- FINFO("Calling AbortOffset");
- m_Intf.rVDACQ_Abort(rACQ_CallBackRec);
- m_Intf.rVDACQ_Close(rACQ_CallBackRec);
- m_bAbortOffset = true;
- m_bDoOffset = false;
- m_bRayAcqing = false;
- StatusFeedback(EVT_STATUS_PANEL, PANEL_STANDBY);
- SetRayenceDPCStatus(eDetStatus::DetStatus_Standby); //停止采集,设置状态
- }
- if (!m_bRayAcqing)
- {
- FINFO("Offset not begin");
- }
- return true;
- }
- bool Detector_Rayence::ActiveCalibration(void* pDrvDPC, CCOS_CALIBRATION_TYPE eType)
- {
- FINFO("ActiveCalibration");
- if ((*m_pDPC2PanelID)[pDrvDPC] != m_nCurrentPanelID)
- {
- FERROR("Not current DPC, return");
- return false;
- }
- if ("" == m_strCurrentLogicMode)
- {
- FERROR("Illegal exam mode");
- return false;
- }
- if (CCOS_CALIBRATION_TYPE_XRAY == eType)
- {
- SetRayenceDPCStatus(eDetStatus::DetStatus_XrayCalibration);
- }
- m_eCaliType = eType;
- return true;
- }
- /***
- ** 校正时响应上层调用的FramePrep
- ***/
- bool Detector_Rayence::PrepareCalibration(void* pDrvDPC)
- {
- FINFO("PrepareCalibration");
- bool bRet = false;
- if ((*m_pDPC2PanelID)[pDrvDPC] != m_nCurrentPanelID)
- {
- FERROR("Not current DPC, return");
- return bRet;
- }
- if (GetRayenceDPCStatus() != eDetStatus::DetStatus_XrayCalibration)
- {
- FINFO("Current status is not XrayCalibration, return succeed");
- return true;
- }
- return bRet;
- }
- bool Detector_Rayence::StartCalibration(void* pDrvDPC)
- {
- FINFO("StartCalibration");
- bool bRet = false;
- if ((*m_pDPC2PanelID)[pDrvDPC] != m_nCurrentPanelID)
- {
- FERROR("Not current DPC, return");
- return bRet;
- }
- if (CCOS_CALIBRATION_TYPE_DARK == m_eCaliType)
- {
- bRet = true;
- }
- else if (CCOS_CALIBRATION_TYPE_XRAY == m_eCaliType)
- {
- bRet = StartGainCalibration();
- }
- return bRet;
- }
- bool Detector_Rayence::StopCalibration(void* pDrvDPC)
- {
- FINFO("StopCalibration");
- bool bRet = false;
- if ((*m_pDPC2PanelID)[pDrvDPC] != m_nCurrentPanelID)
- {
- FERROR("Not current DPC, return");
- return bRet;
- }
- FINFO("StopCalibration Calling StopCalibration");
-
- bRet = true;
- return bRet;
- }
- bool Detector_Rayence::OpenDetector()
- {
- FINFO("OpenDetector");
- FINFO("Calling InitializeLibrary");
- if (!LoadRayenceDLL())
- {
- FERROR("Connect Detector Failed, Load Dll is failed");
- return false;
- }
-
- FINFO("Call RegisterCallbackInfo");
- m_Intf.rVD_RegisterCallbackInfo(G_Rayence_InfoMessage);
- FINFO("Open Detector Success--->");
- return true;
- }
- bool Detector_Rayence::LoadRayenceDLL()
- {
- FINFO("Start Load Rayence DLL");
- FINFO("work path: {$}", m_strWorkPath);
- FINFO("Set SDK Path: {$}", m_strSDKPath);
- std::string strTempPath;
- strTempPath = m_strWorkPath + m_strSDKPath;
- if (SetDllDirectory(strTempPath.c_str()) == 0)
- {
- DWORD dw = GetLastError();
- FERROR("Load {$} Failed! FERROR Code : {$}", strTempPath, dw);
- }
- std::string strIniPath;
- strIniPath = strTempPath + "\\VADAV_FGM_64.ini";
- const char* section = "Settings";
- const char* key = "HomeDir";
- const char* newValue = strTempPath.c_str();
- WritePrivateProfileString(section, key, newValue, strIniPath.c_str());
- std::string strDllPath;
- strDllPath = strTempPath + "\\VADAV_FGM_64.dll";
- if (!VADAV_MapDLL(strDllPath.c_str(), &m_Intf))
- {
- FERROR("Load Rayence dll failed");
- auto dw = GetLastError();
- FERROR("FERROR Code : {$}", dw);
- return false;
- }
- FINFO("LoadRayenceDll Over");
- return true;
- }
- bool Detector_Rayence::CalculateEXI(WORD* pImgData, int nImgWidth, int nImgHeight, int nImageBit, int nThreshold)
- {
- int nROIXL = static_cast<int>(0.3 * nImgWidth);
- int nROIXR = static_cast<int>(0.7 * nImgWidth);
- int nROIYL = static_cast<int>(0.3 * nImgHeight);
- int nROIYR = static_cast<int>(0.7 * nImgHeight);
- WORD* pSrc = NULL;
- long nCount = 0;
- DWORD64 nSum = 0;
- int nEXI = 0;
- try
- {
- for (int i = nROIYL; i < nROIYR; i++)
- {
- pSrc = pImgData + (i * nImgWidth);
- for (int j = nROIXL; j < nROIXR; j++)
- {
- nSum += *(pSrc + j);
- nCount++;
- }
- }
- nEXI = (int)(nSum / nCount);
- }
- catch (...)
- {
- return false;
- }
- FINFO("Image EXI:{$}, Threshold:{$}", nEXI, nThreshold);
- if (nEXI >= nThreshold)
- {
- FINFO("Image has xray!");
- return true;//有x射线
- }
- return false;
- }
- bool Detector_Rayence::CheckImageExi(WORD* pImgData, int nImgWidth, int nImgHeight, WORD dwExiThrethold)
- {
- FINFO("Begin Check Image EXI");
- if (dwExiThrethold <= 0)
- {
- return true;
- }
- FINFO("Check image exi...");
- bool bResult = CalculateEXI(pImgData, nImgWidth, nImgHeight, 16, dwExiThrethold);
- if (bResult)
- {
- return true;
- }
- FINFO("Check image exi---black Image");
- return false;
- }
- bool Detector_Rayence::OpenRefreshOffset()
- {
- FINFO("---Begin Refresh Offset Thread---");
- m_hOffsetThreadStatus = CreateEvent(NULL, FALSE, FALSE, NULL);
- if (nullptr == m_hOffsetThread)
- {
- unsigned uThreadId;
- _beginthreadex(NULL, 0, RefreshOffsetThread, this, 0, &uThreadId);
- m_hOffsetThread = OpenThread(THREAD_ALL_ACCESS, TRUE, uThreadId);
- }
- return true;
- }
- UINT Detector_Rayence::RefreshOffsetThread(LPVOID pParam)
- {
- Detector_Rayence* pCurrentPanelOpr = reinterpret_cast<Detector_Rayence*>(pParam);
- if (pCurrentPanelOpr == nullptr)
- {
- FERROR("Refresh Offset Status Thread parameter FERROR");
- }
- pCurrentPanelOpr->PerformRefreshOffset();
- pCurrentPanelOpr->CloseRefreshOffset();
- return 0;
- }
- bool Detector_Rayence::PerformRefreshOffset()
- {
- m_Intf.rVDACQ_Abort(rACQ_CallBackRec);
- m_Intf.rVDACQ_Close(rACQ_CallBackRec);
- if (m_bRefreshAllMode)
- {
- FINFO("Refresh all mode offset begin");
- for (size_t i = 0; i < m_vecDetMode.size(); i++)
- {
- if (!m_bAbortOffset)
- {
- unsigned int nTempSize = m_vecDetMode[i].imageHeight * m_vecDetMode[i].imageWidth;
- FINFO("AveBuffer Height:{$}, Width:{$}", m_vecDetMode[i].imageHeight, m_vecDetMode[i].imageWidth);
- m_nCalModeId = m_vecDetMode[i].ModeID;
- FINFO("Calling StartDarkCalibration, modeid:({$})", m_nCalModeId);
- /*if (m_pFrm1x1AveBuffer == nullptr && m_nCalModeId == 0)
- {
- m_pFrm1x1AveBuffer = new int[nTempSize];
- memset(m_pFrm1x1AveBuffer, 0, nTempSize * sizeof(int));
- }
- if (m_pFrm2x2AveBuffer == nullptr && m_nCalModeId == 1)
- {
- m_pFrm2x2AveBuffer = new int[nTempSize];
- memset(m_pFrm2x2AveBuffer, 0, nTempSize * sizeof(int));
- }*/
- SetRayenceDPCStatus(eDetStatus::DetStatus_Offset);
- m_bDoOffset = true;
- int nFrameRate = m_vecDetMode[i].FrameRate;
- int nBinningMode = m_vecDetMode[i].binningMode;
- m_nCalToAcqNum = m_vecDetMode[i].CalImgNum;
- FINFO("FrameRate:{$}, BinningMode:{$}, m_nCalToAcqNum: {$}", nFrameRate, nBinningMode, m_nCalToAcqNum);
- m_Intf.rVDACQ_SetFrameRate(nFrameRate);
- m_Intf.rVDACQ_SetBinning(nBinningMode);
- m_Intf.rVDACQ_GetFrameDim(&m_nFrmWidth, &m_nFrmHeight);
- m_Intf.rVDACQ_SetFrameDim(m_nFrmWidth, m_nFrmHeight);
- m_Intf.rVDACQ_GetFGRec(&m_qFGRec);
- m_qFGRec.rCalFlags = 0;
- m_Intf.rVDACQ_SetFGRec(&m_qFGRec);
- m_Intf.rVDACQ_SetOneShot(0);
- m_Intf.rVDACQ_SetDynamic_Trigger(0);
- m_nFlags = GET_DARK;
- FINFO("New FrmHeight: {$}, New FrmWidth: {$}", m_nFrmHeight, m_nFrmWidth);
- /*if (m_nCalModeId == 0 && m_pDark1x1Buffer == nullptr)
- {
- unsigned int nTempSize = m_nFrmWidth * m_nFrmHeight;
- m_pDark1x1Buffer = new short[nTempSize];
- FINFO("1x1 Dark Buffer");
- }
- if (m_nCalModeId == 1 && m_pDark2x2Buffer == nullptr)
- {
- unsigned int nTempSize = m_nFrmWidth * m_nFrmHeight;
- m_pDark2x2Buffer = new short[nTempSize];
- FINFO("2x2 Dark Buffer");
- }*/
- if (m_nCalModeId == 0)
- {
- rACQ_CallBackRec = m_Intf.rVDACQ_Connect(cVDACQ_FDark, G_Rayence_OnDarkEvent, NULL, m_pDark1x1Buffer, 0);
- }
- if (m_nCalModeId == 1)
- {
- rACQ_CallBackRec = m_Intf.rVDACQ_Connect(cVDACQ_FDark, G_Rayence_OnDarkEvent, NULL, m_pDark2x2Buffer, 0);
- }
-
- while (m_bDoOffset)
- {
- Sleep(10);
- }
- OffsetProgressFeedback(EVT_INFO_OFFSET_PROGRESS, (int)(i + 1));
- }
- }
- FINFO("Refresh all mode offset over");
- }
- else
- {
- for (size_t i = 0; i < m_vecDetMode.size(); i++)
- {
- if (m_nCalBinning == m_vecDetMode[i].binningMode)
- {
- m_nCalModeId = m_vecDetMode[i].ModeID;
- }
- }
- FINFO("Calling StartDarkCalibration, modeid:({$})", m_nCalModeId);
- SetRayenceDPCStatus(eDetStatus::DetStatus_Offset);
- m_bDoOffset = true;
- int nFrameRate = m_vecDetMode[m_nCalModeId].FrameRate;
- int nBinningMode = m_vecDetMode[m_nCalModeId].binningMode;
- m_nCalToAcqNum = m_vecDetMode[m_nCalModeId].CalImgNum;
- FINFO("FrameRate:{$}, BinningMode:{$}, m_nCalToAcqNum: {$}", nFrameRate, nBinningMode, m_nCalToAcqNum);
- m_Intf.rVDACQ_SetOneShot(0);
- m_Intf.rVDACQ_SetDynamic_Trigger(0);
- m_Intf.rVDACQ_SetFrameRate(nFrameRate);
- m_Intf.rVDACQ_SetBinning(nBinningMode);
- m_Intf.rVDACQ_GetFGRec(&m_qFGRec);
- m_qFGRec.rCalFlags = 0;
- m_Intf.rVDACQ_SetFGRec(&m_qFGRec);
- m_nFlags = GET_DARK;
- m_Intf.rVDACQ_GetFrameDim(&m_nFrmWidth, &m_nFrmHeight);
- m_Intf.rVDACQ_SetFrameDim(m_nFrmWidth, m_nFrmHeight);
- if (m_nCalModeId == 0)
- {
- rACQ_CallBackRec = m_Intf.rVDACQ_Connect(cVDACQ_FDark, G_Rayence_OnDarkEvent, NULL, m_pDark1x1Buffer, 0);
- }
- if (m_nCalModeId == 1)
- {
- rACQ_CallBackRec = m_Intf.rVDACQ_Connect(cVDACQ_FDark, G_Rayence_OnDarkEvent, NULL, m_pDark2x2Buffer, 0);
- }
- while (m_bDoOffset)
- {
- Sleep(10);
- }
- m_Intf.rVDACQ_GetFGRec(&m_qFGRec);
- m_qFGRec.rCalFlags = 0;
- if (m_bCalOffset)
- {
- m_qFGRec.rCalFlags |= cVDC_FCalOffs;
- }
- if (m_bCalGain)
- {
- m_qFGRec.rCalFlags |= cVDC_FCalGain;
- }
- if (m_bCalBPM)
- {
- m_qFGRec.rCalFlags |= cVDC_FBadPixMap;
- }
- m_qFGRec.rFG_Control = 0;
- m_Intf.rVDACQ_SetFGRec(&m_qFGRec);
- if (m_strCurrentExamType == "PF")
- {
- m_Intf.rVDACQ_SetOneShot(0);
- m_Intf.rVDACQ_SetDynamic_Trigger(1);
- }
- FINFO("Refresh mode:{$} offset over.", m_nCalModeId);
- OffsetProgressFeedback(EVT_INFO_OFFSET_PROGRESS, 1);
- }
- SetEvent(m_hOffsetThreadStatus);
- return true;
- }
- bool Detector_Rayence::CloseRefreshOffset()
- {
- DWORD dwResult = WaitForSingleObject(m_hOffsetThreadStatus, 1000);
- if (dwResult == WAIT_OBJECT_0)
- {
- FINFO("[Get RefreshOffsetStatus Event]");
- }
- else if (dwResult == WAIT_TIMEOUT)
- {
- ::TerminateThread(m_hOffsetThread, 0);
- FWARN("Kill RefreshOffset Thread");
- }
- if (m_hOffsetThreadStatus != nullptr)
- {
- CloseHandle(m_hOffsetThreadStatus);
- m_hOffsetThreadStatus = nullptr;
- }
- OffsetProgressFeedback(EVT_INFO_OFFSET_STATUS, 1);
- m_hOffsetThread = nullptr;
- FINFO("---Exit Refresh Offset Status Thread---");
- return true;
- }
- //nIndex 缺省-1,当使用缺省值时代表是静态模式,图像名不记录序号
- void Detector_Rayence::OnProcessImage(int CaptureFrame, bool bIsCaptureRaw)
- {
- FINFO("OnProcessImage CaptureID: {$}", CaptureFrame);
- auto Process_Image = [this](int Binning, int CaptureID)
- {
- int ret = 0;
- bool bImageCrop = false;
- if (m_nCropLeft != 0 || m_nCropTop != 0 || m_nCropRight != 0 || m_nCropBottom != 0)
- {
- if (Binning == 0)
- ret = CropImageMargin(m_pFullImgBuffer, m_nImageWidth, m_nImageHeight,
- m_pFrm1x1Buffer, m_nRawImgWidth, m_nRawImgHeight, 16,
- m_nCropLeft, m_nCropTop, m_nCropRight, m_nCropBottom);
- if (Binning == 1)
- ret = CropImageMargin(m_pFullImgBuffer, m_nImageWidth, m_nImageHeight,
- m_pFrm2x2Buffer, m_nRawImgWidth, m_nRawImgHeight, 16,
- m_nCropLeft, m_nCropTop, m_nCropRight, m_nCropBottom);
- if (ret)
- {
- FERROR("CropImageMargin fail!!");
- }
- else
- {
- FINFO("CropImageMargin success!");
- bImageCrop = true;
- }
- }
- if (bImageCrop)
- {
- ConfFeedback(EVT_CONF_RAW_WIDTH, m_nCurrentPanelID, "", m_nImageWidth);
- ConfFeedback(EVT_CONF_RAW_HIGHT, m_nCurrentPanelID, "", m_nImageHeight);
- }
- else
- {
- ConfFeedback(EVT_CONF_RAW_WIDTH, m_nCurrentPanelID, "", m_nRawImgWidth);
- ConfFeedback(EVT_CONF_RAW_HIGHT, m_nCurrentPanelID, "", m_nRawImgHeight);
- }
- if (bImageCrop)
- {
- if (!CheckImageExi(m_pFullImgBuffer, m_nImageWidth, m_nImageHeight, m_nExiThreshold))
- {
- FWARN("Image EXI too low");
- return false;
- }
- DataFeedback(EVT_DATA_RAW_IMAGE, m_pFullImgBuffer);
- }
- else
- {
- if (Binning == 0)
- {
- if (!CheckImageExi((WORD*)m_pFrm1x1Buffer, m_nRawImgWidth, m_nRawImgHeight, m_nExiThreshold))
- {
- FWARN("Image EXI too low");
- return false;
- }
- DataFeedback(EVT_DATA_RAW_IMAGE, m_pFrm1x1Buffer);
- }
- if (Binning == 1)
- {
- if (!CheckImageExi((WORD*)m_pFrm2x2Buffer, m_nRawImgWidth, m_nRawImgHeight, m_nExiThreshold))
- {
- FWARN("Image EXI too low");
- return false;
- }
- DataFeedback(EVT_DATA_RAW_IMAGE, m_pFrm2x2Buffer);
- }
- }
- if (m_bSaveRaw)
- {
- FINFO("Begin save Flu CropRaw");
- char szTemp[30] = { 0 };
- string strFileName = m_strWorkPath + "\\Image";
- sprintf_s(szTemp, "\\CropImage_%d.raw", CaptureID);
- strFileName += szTemp;
- std::filesystem::path file_path{ strFileName.c_str() };
- std::ofstream file_stream(file_path, std::ios::binary);
- if (!file_stream.is_open())
- {
- FERROR("Open Save File Failed");
- }
- if (bImageCrop)
- {
- unsigned int nTempSize = m_nImageWidth * m_nImageHeight * 2;
- file_stream.write(reinterpret_cast<const char*>(m_pFullImgBuffer), nTempSize);
- }
- else
- {
- unsigned int nTempSize = m_nRawImgWidth * m_nRawImgHeight * 2;
- if (Binning == 0)
- file_stream.write(reinterpret_cast<const char*>(m_pFrm1x1Buffer), nTempSize);
- if (Binning == 1)
- file_stream.write(reinterpret_cast<const char*>(m_pFrm2x2Buffer), nTempSize);
- }
- file_stream.close();
- FINFO("Save Flu CropImage Over");
- }
- };
- if (!Process_Image(m_nBinningMode, CaptureFrame))
- {
- return;
- }
- //if (m_nBinningMode == 0)
- //{
- // if (m_pFrm1x1Buffer == nullptr)
- // {
- // FERROR("Image Buffer is Null");
- // return;
- // }
- // if (m_nCropLeft != 0 || m_nCropTop != 0 || m_nCropRight != 0 || m_nCropBottom != 0)
- // {
- // ret = CropImageMargin(m_pFullImgBuffer, m_nImageWidth, m_nImageHeight,
- // m_pFrm1x1Buffer, m_nRawImgWidth, m_nRawImgHeight, 16,
- // m_nCropLeft, m_nCropTop, m_nCropRight, m_nCropBottom);
- // if (ret)
- // {
- // FERROR("CropImageMargin fail!!");
- // }
- // else
- // {
- // FINFO("CropImageMargin success!");
- // bImageCrop = true;
- // }
- // }
- // //上图之前回调图像的宽高,使得上层在拷贝内存时是正确的图像大小
- // if (bImageCrop)
- // {
- // ConfFeedback(EVT_CONF_RAW_WIDTH, m_nCurrentPanelID, "", m_nImageWidth);
- // ConfFeedback(EVT_CONF_RAW_HIGHT, m_nCurrentPanelID, "", m_nImageHeight);
- // }
- // else
- // {
- // ConfFeedback(EVT_CONF_RAW_WIDTH, m_nCurrentPanelID, "", m_nRawImgWidth);
- // ConfFeedback(EVT_CONF_RAW_HIGHT, m_nCurrentPanelID, "", m_nRawImgHeight);
- // }
- // if (bImageCrop)
- // {
- // if (!CheckImageExi(m_pFullImgBuffer, m_nImageWidth, m_nImageHeight, m_nExiThreshold))
- // {
- // FWARN("Image EXI too low");
- // return;
- // }
- // DataFeedback(EVT_DATA_RAW_IMAGE, m_pFullImgBuffer);
- // }
- // else
- // {
- // if (!CheckImageExi((WORD*)m_pFrm1x1Buffer, m_nRawImgWidth, m_nRawImgHeight, m_nExiThreshold))
- // {
- // FWARN("Image EXI too low");
- // return;
- // }
- // DataFeedback(EVT_DATA_RAW_IMAGE, m_pFrm1x1Buffer);
- // }
- // if (m_bSaveRaw)
- // {
- // FINFO("Begin save Flu CropRaw");
- // char szTemp[30] = { 0 };
- // string strFileName = m_strWorkPath + "\\Image";
- // /*if (m_strCurrentExamType == "Rad")
- // {
- // strFileName += "\\CropImage_Rad.raw";
- // }
- // else
- // {
- // sprintf_s(szTemp, "\\CropImage_%d.raw", CaptureFrame);
- // strFileName += szTemp;
- // }*/
- // sprintf_s(szTemp, "\\CropImage_%d.raw", CaptureFrame);
- // strFileName += szTemp;
- // std::filesystem::path file_path{ strFileName.c_str() };
- // std::ofstream file_stream(file_path, std::ios::binary);
- // if (!file_stream.is_open())
- // {
- // FERROR("Open Save File Failed");
- // }
- // if (bImageCrop)
- // {
- // unsigned int nTempSize = m_nImageWidth * m_nImageHeight * 2;
- // file_stream.write(reinterpret_cast<const char*>(m_pFullImgBuffer), nTempSize);
- // }
- // else
- // {
- // unsigned int nTempSize = m_nRawImgWidth * m_nRawImgHeight * 2;
- // file_stream.write(reinterpret_cast<const char*>(m_pFrm1x1Buffer), nTempSize);
- // }
- // file_stream.close();
- // FINFO("Save Flu CropImage Over");
- // }
- //}
- //if (m_nBinningMode == 1)
- //{
- // if (m_pFrm2x2Buffer == nullptr)
- // {
- // FERROR("Image Buffer is Null");
- // return;
- // }
- // if (m_nCropLeft != 0 || m_nCropTop != 0 || m_nCropRight != 0 || m_nCropBottom != 0)
- // {
- // ret = CropImageMargin(m_pFullImgBuffer, m_nImageWidth, m_nImageHeight,
- // m_pFrm2x2Buffer, m_nRawImgWidth, m_nRawImgHeight, 16,
- // m_nCropLeft, m_nCropTop, m_nCropRight, m_nCropBottom);
- // if (ret)
- // {
- // FERROR("CropImageMargin fail!!");
- // }
- // else
- // {
- // FINFO("CropImageMargin success!");
- // bImageCrop = true;
- // }
- // }
- // //上图之前回调图像的宽高,使得上层在拷贝内存时是正确的图像大小
- // if (bImageCrop)
- // {
- // ConfFeedback(EVT_CONF_RAW_WIDTH, m_nCurrentPanelID, "", m_nImageWidth);
- // ConfFeedback(EVT_CONF_RAW_HIGHT, m_nCurrentPanelID, "", m_nImageHeight);
- // }
- // else
- // {
- // ConfFeedback(EVT_CONF_RAW_WIDTH, m_nCurrentPanelID, "", m_nRawImgWidth);
- // ConfFeedback(EVT_CONF_RAW_HIGHT, m_nCurrentPanelID, "", m_nRawImgHeight);
- // }
- // if (bImageCrop)
- // {
- // if (!CheckImageExi(m_pFullImgBuffer, m_nImageWidth, m_nImageHeight, m_nExiThreshold))
- // {
- // FWARN("Image EXI too low");
- // return;
- // }
- // DataFeedback(EVT_DATA_RAW_IMAGE, m_pFullImgBuffer);
- // }
- // else
- // {
- // if (!CheckImageExi((WORD*)m_pFrm2x2Buffer, m_nRawImgWidth, m_nRawImgHeight, m_nExiThreshold))
- // {
- // FWARN("Image EXI too low");
- // return;
- // }
- // DataFeedback(EVT_DATA_RAW_IMAGE, m_pFrm2x2Buffer);
- // }
- // if (m_bSaveRaw)
- // {
- // FINFO("Begin save CropRaw");
- // char szTemp[30] = { 0 };
- // string strFileName = m_strWorkPath + "\\Image";
- // if (m_strCurrentExamType == "Rad")
- // {
- // strFileName += "\\CropImage_Rad.raw";
- // }
- // else
- // {
- // sprintf_s(szTemp, "\\CropImage_%d.raw", CaptureFrame);
- // strFileName += szTemp;
- // }
- // std::filesystem::path file_path{ strFileName.c_str() };
- // std::ofstream file_stream(file_path, std::ios::binary);
- // if (!file_stream.is_open())
- // {
- // FERROR("Open Save File Failed");
- // }
- // if (bImageCrop)
- // {
- // unsigned int nTempSize = m_nImageWidth * m_nImageHeight * 2;
- // file_stream.write(reinterpret_cast<const char*>(m_pFullImgBuffer), nTempSize);
- // }
- // else
- // {
- // unsigned int nTempSize = m_nRawImgWidth * m_nRawImgHeight * 2;
- // file_stream.write(reinterpret_cast<const char*>(m_pFrm2x2Buffer), nTempSize);
- // }
- // file_stream.close();
- // FINFO("Save CropImage Over");
- // }
- //}
-
- }
- void Detector_Rayence::OnRadImageEvt(int CaptureFrame, bool bIsCaptureRaw)
- {
- FINFO("OnProcessImage ");
- if (m_pOneShotBuffer == nullptr)
- {
- FERROR("Binning Mode 1x1 Image Buffer is Null");
- return;
- }
- CropImageMargin(m_pFullImgBuffer, m_nImageWidth, m_nImageHeight,
- m_pOneShotBuffer, m_nRawImgWidth, m_nRawImgHeight, 16,
- m_nCropLeft, m_nCropTop, m_nCropRight, m_nCropBottom);
- if (!CheckImageExi(m_pFullImgBuffer, m_nImageWidth, m_nImageHeight, m_nExiThreshold))
- {
- FWARN("Image EXI too low");
- return;
- }
- DataFeedback(EVT_DATA_RAW_IMAGE, m_pFullImgBuffer);
- if (m_bSaveRaw)
- {
- FINFO("Begin save Rad CropRaw");
- char szTemp[30] = { 0 };
- string strFileName = m_strWorkPath + "\\Image";
- if (m_strCurrentExamType == "Rad")
- {
- strFileName += "\\CropImage_Rad.raw";
- }
- //else
- //{
- // sprintf_s(szTemp, "\\CropImage_%d.raw", CaptureFrame);
- // strFileName += szTemp;
- //}
- std::filesystem::path file_path{ strFileName.c_str() };
- std::ofstream file_stream(file_path, std::ios::binary);
- if (!file_stream.is_open())
- {
- FERROR("Open Save File Failed");
- }
- unsigned int nTempSize = m_nImageWidth * m_nImageHeight * 2;
- file_stream.write(reinterpret_cast<const char*>(m_pFullImgBuffer), nTempSize);
- file_stream.close();
- FINFO("Save Rad CropImage Over");
- }
- StatusFeedback(EVT_STATUS_PANEL, PANEL_XWINDOW_OFF);
- if (eDetStatus::DetStatus_Acquire == GetRayenceDPCStatus())
- {
- FINFO("Calling StopAcquisition");
- m_Intf.rVDACQ_Abort(rACQ_CallBackRec);
- m_Intf.rVDACQ_Close(rACQ_CallBackRec);
- SetRayenceDPCStatus(eDetStatus::DetStatus_Standby); //停止采集,设置状态
- }
- else
- {
- FINFO("Not in acquire status");
- }
- }
- bool Detector_Rayence::StartGainCalibration()
- {
- FINFO("StartGainCalibration ");
- return true;
- }
- //获取只用于本DPC记录的探测器状态
- eDetStatus Detector_Rayence::GetRayenceDPCStatus()
- {
- string strStatus = "Unknown";
- switch (m_eStatus)
- {
- case eDetStatus::DetStatus_NotInit:
- strStatus = "NotInit";
- break;
- case eDetStatus::DetStatus_NotConn:
- strStatus = "NotConnect";
- break;
- case eDetStatus::DetStatus_Sleep:
- strStatus = "Sleep";
- break;
- case eDetStatus::DetStatus_Standby:
- strStatus = "Standby";
- break;
- case eDetStatus::DetStatus_Work:
- strStatus = "Work";
- break;
- case eDetStatus::DetStatus_Acquire:
- strStatus = "Acquire";
- break;
- case eDetStatus::DetStatus_Offset:
- strStatus = "Offset";
- break;
- case eDetStatus::DetStatus_XrayCalibration:
- strStatus = "XrayCalibration";
- break;
- default:
- break;
- }
- FINFO("Driver status: {$}", strStatus.c_str());
- return m_eStatus;
- }
- //设置只用于本DPC的探测器状态
- bool Detector_Rayence::SetRayenceDPCStatus(eDetStatus status)
- {
- string strStatus = "Unknown";
- bool bSetStatus = true;
- switch (status)
- {
- case eDetStatus::DetStatus_NotInit:
- strStatus = "NotIni";
- break;
- case eDetStatus::DetStatus_NotConn:
- strStatus = "NotConn";
- break;
- case eDetStatus::DetStatus_Sleep:
- strStatus = "Sleep";
- break;
- case eDetStatus::DetStatus_Standby:
- strStatus = "Standby";
- break;
- case eDetStatus::DetStatus_Work:
- strStatus = "Work";
- break;
- case eDetStatus::DetStatus_Acquire:
- strStatus = "Acquire";
- break;
- case eDetStatus::DetStatus_Offset:
- strStatus = "Offset";
- break;
- case eDetStatus::DetStatus_XrayCalibration:
- strStatus = "XrayCalibration";
- break;
- default:
- bSetStatus = false;
- break;
- }
- if (bSetStatus)
- {
- m_eStatus = status;
- FINFO("Set driver status: {$}", strStatus.c_str());
- }
- else
- {
- FWARN("{$} {$} is a illegal status", strStatus.c_str(), (int)status);
- }
- return bSetStatus;
- }
- //参照RFOC动态代码整理的图像裁剪功能
- int Detector_Rayence::CropImageMargin(LPVOID pDstData, int& nDstWidth, int& nDstHeight,
- LPVOID pScrData, int nSrcWidth, int nSrcHeight, int nBits,
- int nLeftMargin, int nTopMargin, int nRightMargin, int nBottomMargin)
- {
- FINFO("CropImageMargin ");
- if ((pDstData == NULL) || (pScrData == NULL) || (nSrcWidth <= 0) || (nSrcHeight <= 0) || (nBits <= 0))
- return -1;
- if ((nLeftMargin >= nSrcWidth) || (nTopMargin >= nSrcHeight))
- return -1;
- int nBitsToBYTE = (int)((nBits + 7) * 0.125);
- if (nBitsToBYTE < 1)
- return -1;
- int nXL, nXR, nYL, nYR;
- nXL = nLeftMargin;//32
- nYL = nTopMargin;
- if (nSrcWidth - nRightMargin < 0)
- return -1;
- nXR = nSrcWidth - nRightMargin - 1; //2783
- if (nXR < nXL)
- return -1;
- if (nSrcHeight - nBottomMargin < 0)
- return -1;
- nYR = nSrcHeight - nBottomMargin - 1;
- if (nYR < nYL)
- return -1;
- nDstWidth = nXR - nXL + 1;
- nDstHeight = nYR - nYL + 1;
- FINFO("TopCrop:{$};Bottom:{$},nDstWidth:{$},nDstHeight:{$},Bits:{$}", nYL, nYR, nDstWidth, nDstHeight, nBitsToBYTE);
- int i = 0;
- #pragma omp parallel private(i)
- {
- #pragma omp for
- for (i = nYL; i <= nYR; i++)
- {
- ::memcpy((WORD*)pDstData + (i - nYL) * nDstWidth, (WORD*)pScrData + (i * nSrcWidth + nXL), nDstWidth * nBitsToBYTE);
- }
- }
- return 0;
- }
- std::string Detector_Rayence::SaveAveFrames(unsigned short* pBuf, TCHAR* pszFileName)
- {
- if (pBuf)
- {
- TCHAR szBuf[MAX_PATH] = { 0 };
- TCHAR szCalDir[MAX_PATH] = { 0 };
- if (pszFileName == NULL)
- {
- switch (m_nFlags)
- {
- case GET_DARK:
- m_Intf.rVDC_GetCalibrationDirectory(szCalDir);
- _stprintf(szBuf, _T("%s\\%s"), szCalDir, _T("dark.raw"));
- FINFO("CalibrationDirectory: {$}", szBuf);
- break;
- case GET_BRIGHT:
- m_Intf.rVDC_GetCalibrationDirectory(szCalDir);
- _stprintf(szBuf, _T("%s\\x%05d.raw"), szCalDir, GetMedian(m_nFrmAveBufSize, pBuf, 15));
- FINFO("CalibrationDirectory: {$}", szBuf);
- break;
- default:
- break;
- }
- }
- FILE* fp = _tfopen(szBuf, _T("wb"));
- if (fp)
- {
- fwrite(pBuf, sizeof(unsigned short), m_nFrmAveBufSize, fp);
- fclose(fp);
- }
- if (m_nCalModeId == 0)
- {
- memset(m_pFrm1x1AveBuffer, 0, m_nFrmAveBufSize * sizeof(int));
- }
- if (m_nCalModeId == 1)
- {
- memset(m_pFrm2x2AveBuffer, 0, m_nFrmAveBufSize * sizeof(int));
- }
-
- return(szBuf);
- }
- return (_T(""));
- }
- int Detector_Rayence::GetMedian(int nNumPixel, const unsigned short* pData, int nCurPixelPro)
- {
- int iMax, iMin;
- int* pHist = iDsp_BuildHistogram(nNumPixel, pData, &iMin, &iMax);
- int nGamut = iMax - iMin + 1;
- int nRes;
- // remove _nCurPixelPro(15%) of points from top
- if (nCurPixelPro > 0)
- {
- int nSumT = (nNumPixel * nCurPixelPro) / 100;
- int nSum = 0;
- int nStartIdx = 0;
- int nStopIdx = nGamut - 1;
- while (nSum < nSumT)
- {
- nSum += pHist[nStopIdx--];
- }
- // remove _nCurPixelPro(15%) of points from bottom
- nSum = 0;
- while (nSum < nSumT)
- {
- nSum += pHist[nStartIdx++];
- }
- // fine median
- nRes = nStartIdx;
- int nMaxNumPoints = pHist[nRes];
- while (nStartIdx++ < nStopIdx)
- {
- if (nMaxNumPoints < pHist[nStartIdx])
- {
- nRes = nStartIdx;
- nMaxNumPoints = pHist[nStartIdx];
- }
- }
- }
- else
- {
- int nSumT = nNumPixel / 2;
- int nSum = 0;
- nRes = 0;
- while ((nSum < nSumT) && (nRes < nGamut))
- {
- nSum += pHist[nRes++];
- }
- }
- delete pHist;
- return (nRes + iMin);
- }
- void Detector_Rayence::iDsp_FindMinMax(int nNumPix, const unsigned short* psData, int* piMin, int* piMax)
- {
- int i, nVal, iMin = 0xFFFF, iMax = -0xFFFF;
- for (i = 0; i < nNumPix; i++)
- {
- nVal = psData[i];
- if (iMin > nVal) { iMin = nVal; }
- if (iMax < nVal) { iMax = nVal; }
- }
- *piMin = iMin;
- *piMax = iMax;
- }
- int* Detector_Rayence::iDsp_BuildHistogram(int nNumPix, const unsigned short* psData, int* piMin, int* piMax)
- {
- int iMin, iMax;
- iDsp_FindMinMax(nNumPix, psData, &iMin, &iMax);
- *piMin = iMin;
- *piMax = iMax;
- int iGamut = iMax - iMin + 1,
- * pHist = new int[iGamut];
- memset(pHist, 0, iGamut * sizeof(int));
- for (int i = 0; i < nNumPix; i++)
- {
- pHist[psData[i] - iMin]++;
- }
- return pHist;
- }
- void Detector_Rayence::CALLBACK_Acquisition(tVDACQ_CallBackRec* ACBR)
- {
- if (ACBR->rEvent == cVDACQ_ECaptureRecv && m_eStatus == eDetStatus::DetStatus_Standby)
- {
- return;
- }
- FINFO("CALLBACK_Acquisition type:{$}, event:{$}", ACBR->rType, ACBR->rEvent);
-
- switch (ACBR->rType)
- {
- case cVDACQ_ETTrace:
- case cVDACQ_ETTraceT:
- {
- switch (ACBR->rEvent)
- {
- case cVDACQ_EAbort:
- {
- FINFO("ACBR->rEvent cVDACQ_EAbort");
- break;
- }
- case cVDACQ_EClose:
- {
- FINFO("ACBR->rEvent cVDACQ_EClose");
- break;
- }
- case cVDACQ_EAT_Ready:
- {
- FINFO("AED Ready");
- break;
- }
- case cVDACQ_ECapture:
- {
- FINFO("ACBR->rEvent cVDACQ_ECapture");
- break;
- }
- case cVDACQ_ECapturePerc:
- {
- FINFO("ACBR->rEvent cVDACQ_ECapturePerc");
- break;
- }
- case cVDACQ_ECaptureRecv:
- {
- FINFO("Flu Image Arrive");
- HandleCaptureRecvEvent(ACBR, false);
- break;
- }
- case cVDACQ_EIdle:
- {
- FINFO("ACBR->rEvent cVDACQ_EIdle");
- break;
- }
- case cVDACQ_EAT_Wait:
- {
- FINFO("AED Wait");
- break;
- }
- case cVDACQ_ECaptureFrame:
- {
- FINFO("ACBR->rEvent cVDACQ_ECaptureFrame");
- OnRadImageEvt(ACBR->rCaptureFrames, false);
- break;
- }
- case cVDACQ_ECapture2_Receive:
- {
- FINFO("ACBR_>rEvent cVDACQ_ECapture2_Receive");
- HandleCaptureRecvEvent(ACBR, true);
- break;
- }
- case cVDACQ_ECapture2_Expose:
- {
- auto Rad_Sync = [this](int XWindow)
- {
- if (m_pSynClient != nullptr)
- {
- if (!m_pSynClient->IsClosed())
- {
- ResDataObject Request, Response;
- Request.add("P0", XWindow);
- m_pSynClient->Action("SetDirectExpSignal", Request, Response, 4993, "CCOS/DEVICE/SyncBox");
- FDEBUG("V3_FullUCB Client execute [SetDirectExpSignal][{$}]", XWindow);
- if (XWindow == 1)
- {
- StatusFeedback(EVT_STATUS_PANEL, PANEL_XWINDOW_ON);
- }
- }
- else
- {
- FDEBUG("V3_FullUCB Client is Close");
- }
- }
- else
- {
- FDEBUG("V3_FullUCB Client is NULL");
- }
- };
- switch (ACBR->rStatus)
- {
- case cVDACQ_ESStart:
- Rad_Sync(1);
- /*if (m_pSynClient != nullptr)
- {
- if (!m_pSynClient->IsClosed())
- {
- ResDataObject Request, Response;
- Request.add("P0", 1);
- m_pSynClient->Action("SetDirectExpSignal", Request, Response, 4993, "CCOS/DEVICE/SyncBox");
- Debug("V3_FullUCB Client execute [SetDirectExpSignal][{$}]", "1");
- StatusFeedback(EVT_STATUS_PANEL, PANEL_XWINDOW_ON);
- }
- else
- {
- Debug("V3_FullUCB Client is Close");
- }
- }
- else
- {
- Debug("V3_FullUCB Client is NULL");
- }*/
- break;
- case cVDACQ_ESDone:
- Rad_Sync(0);
- /*if (m_pSynClient != nullptr)
- {
- if (!m_pSynClient->IsClosed())
- {
- ResDataObject Request, Response;
- Request.add("P0", 0);
- m_pSynClient->Action("SetDirectExpSignal", Request, Response, 4993, "CCOS/DEVICE/SyncBox");
- Debug("V3_FullUCB Client execute [SetDirectExpSignal][{$}]", "0");
- }
- else
- {
- Debug("V3_FullUCB Client is Close");
- }
- }
- else
- {
- Debug("V3_FullUCB Client is NULL");
- }*/
- break;
- }
- break;
- }
- }
- }
- break;
- default:
- break;
- }
- }
- void Detector_Rayence::CALLBACK_Dark_Acquisition(tVDACQ_CallBackRec* ACBR)
- {
- if (ACBR->rEvent == cVDACQ_ECaptureRecv && m_eStatus == eDetStatus::DetStatus_Standby)
- {
- return;
- }
- FINFO("CALLBACK_Acquisition type:{$}, event:{$}", ACBR->rType, ACBR->rEvent);
- switch (ACBR->rType)
- {
- case cVDACQ_ETTrace:
- case cVDACQ_ETTraceT:
- {
- switch (ACBR->rEvent)
- {
- case cVDACQ_EAbort:
- {
- FINFO("ACBR->rEvent cVDACQ_EAbort");
- ErrorFeedback(EVT_ERR_OFFSET_FAILED);
- break;
- }
- case cVDACQ_EClose:
- {
- FINFO("ACBR->rEvent cVDACQ_EClose");
- break;
- }
- case cVDACQ_EAT_Ready:
- {
- FINFO("AED Ready");
- break;
- }
- case cVDACQ_ECapture:
- {
- FINFO("ACBR->rEvent cVDACQ_ECapture");
- break;
- }
- case cVDACQ_ECapturePerc:
- {
- FINFO("ACBR->rEvent cVDACQ_ECapturePerc");
- break;
- }
- case cVDACQ_ECaptureRecv:
- {
- FINFO("Dark Image Arrive");
- auto Dark_Receive = [this](int ModeID)
- {
- m_nFrmAveBufSize = m_nFrmWidth * m_nFrmHeight;
- if (!m_nAveCount)
- {
- if (ModeID == 0)
- memset(m_pDark1x1Buffer, 0, m_nFrmAveBufSize * sizeof(short));
- if (ModeID == 1)
- memset(m_pDark2x2Buffer, 0, m_nFrmAveBufSize * sizeof(short));
- }
- if (m_nRecvCount >= m_nSkipNum)
- {
- if (m_nFlags == GET_DARK)
- {
- for (size_t i = 0; i < m_nFrmAveBufSize; i++)
- {
- if (ModeID == 0)
- m_pFrm1x1AveBuffer[i] += m_pDark1x1Buffer[i];
- if (ModeID == 1)
- m_pFrm2x2AveBuffer[i] += m_pDark2x2Buffer[i];
- }
- }
- m_nAveCount++;
- }
- if (m_nAveCount >= m_nCalToAcqNum - m_nSkipNum)
- {
- if (m_nFlags == GET_DARK)
- {
- unsigned short* pAveBuf = new unsigned short[m_nFrmAveBufSize];
- memset(pAveBuf, 0, sizeof(unsigned short) * m_nFrmAveBufSize);
- if (m_nAveCount > 0)
- {
- for (int n = 0; n < m_nFrmAveBufSize; n++)
- {
- if (ModeID == 0)
- pAveBuf[n] = (unsigned short)(m_pFrm1x1AveBuffer[n] > 0 ? (m_pFrm1x1AveBuffer[n] / m_nAveCount) : 0);
- if (ModeID == 1)
- pAveBuf[n] = (unsigned short)(m_pFrm2x2AveBuffer[n] > 0 ? (m_pFrm2x2AveBuffer[n] / m_nAveCount) : 0);
- }
- SaveAveFrames(pAveBuf, NULL);
- }
- if (pAveBuf)
- {
- delete[] pAveBuf;
- pAveBuf = nullptr;
- }
- }
- }
- if (m_nRecvCount >= m_nCalToAcqNum)
- {
- FINFO("m_nCalToAcqNum: {$}", m_nCalToAcqNum);
- FINFO("m_nRecvCount: {$}", m_nRecvCount);
- m_Intf.rVDACQ_Abort(rACQ_CallBackRec);
- m_Intf.rVDACQ_Close(rACQ_CallBackRec);
- m_nRecvCount = 0;
- m_nAveCount = 0;
- m_bDoOffset = false;
- SetRayenceDPCStatus(eDetStatus::DetStatus_Standby);
- m_bRayAcqing = false;
- FINFO("one offset complete");
- }
- };
- m_nRecvCount++;
-
- if (m_eStatus == eDetStatus::DetStatus_Offset)
- {
- Dark_Receive(m_nCalModeId);
- /*if (m_nCalModeId == 0)
- {
- if (m_pDark1x1Buffer)
- {
- m_nFrmAveBufSize = m_nFrmWidth * m_nFrmHeight;
- if (!m_nAveCount)
- {
- memset(m_pDark1x1Buffer, 0, m_nFrmAveBufSize * sizeof(short));
- }
- if (m_nRecvCount >= m_nSkipNum)
- {
- if (m_nFlags == GET_DARK)
- {
- for (size_t i = 0; i < m_nFrmAveBufSize; i++)
- {
- m_pFrm1x1AveBuffer[i] += m_pDark1x1Buffer[i];
- }
- }
- m_nAveCount++;
- }
- if (m_nAveCount >= m_nCalToAcqNum - m_nSkipNum)
- {
- if (m_nFlags == GET_DARK)
- {
- unsigned short* pAveBuf = new unsigned short[m_nFrmAveBufSize];
- memset(pAveBuf, 0, sizeof(unsigned short) * m_nFrmAveBufSize);
- if (m_nAveCount > 0)
- {
- for (int n = 0; n < m_nFrmAveBufSize; n++)
- {
- pAveBuf[n] = (unsigned short)(m_pFrm1x1AveBuffer[n] > 0 ? (m_pFrm1x1AveBuffer[n] / m_nAveCount) : 0);
- }
- SaveAveFrames(pAveBuf, NULL);
- }
- if (pAveBuf)
- {
- delete[] pAveBuf;
- pAveBuf = nullptr;
- }
- }
- }
- }
- if (m_nRecvCount >= m_nCalToAcqNum)
- {
- FINFO("m_nCalToAcqNum: {$}", m_nCalToAcqNum);
- FINFO("m_nRecvCount: {$}", m_nRecvCount);
- m_Intf.rVDACQ_Abort(rACQ_CallBackRec);
- m_Intf.rVDACQ_Close(rACQ_CallBackRec);
- m_nRecvCount = 0;
- m_nAveCount = 0;
- m_bDoOffset = false;
- SetRayenceDPCStatus(eDetStatus::DetStatus_Standby);
- m_bRayAcqing = false;
- FINFO("one offset complete");
- }
- }
- if (m_nCalModeId == 1)
- {
- if (m_pDark2x2Buffer)
- {
- m_nFrmAveBufSize = m_nFrmWidth * m_nFrmHeight;
- if (!m_nAveCount)
- {
- memset(m_pDark2x2Buffer, 0, m_nFrmAveBufSize * sizeof(short));
- }
- if (m_nRecvCount >= m_nSkipNum)
- {
- if (m_nFlags == GET_DARK)
- {
- for (size_t i = 0; i < m_nFrmAveBufSize; i++)
- {
- m_pFrm2x2AveBuffer[i] += m_pDark2x2Buffer[i];
- }
- }
- m_nAveCount++;
- }
- if (m_nAveCount >= m_nCalToAcqNum - m_nSkipNum)
- {
- if (m_nFlags == GET_DARK)
- {
- unsigned short* pAveBuf = new unsigned short[m_nFrmAveBufSize];
- memset(pAveBuf, 0, sizeof(unsigned short) * m_nFrmAveBufSize);
- if (m_nAveCount > 0)
- {
- for (int n = 0; n < m_nFrmAveBufSize; n++)
- {
- pAveBuf[n] = (unsigned short)(m_pFrm2x2AveBuffer[n] > 0 ? (m_pFrm2x2AveBuffer[n] / m_nAveCount) : 0);
- }
- SaveAveFrames(pAveBuf, NULL);
- }
- if (pAveBuf)
- {
- delete[] pAveBuf;
- pAveBuf = nullptr;
- }
- }
- }
- }
- if (m_nRecvCount >= m_nCalToAcqNum)
- {
- FINFO("m_nCalToAcqNum: {$}", m_nCalToAcqNum);
- FINFO("m_nRecvCount: {$}", m_nRecvCount);
- m_Intf.rVDACQ_Abort(rACQ_CallBackRec);
- m_Intf.rVDACQ_Close(rACQ_CallBackRec);
- m_nRecvCount = 0;
- m_nAveCount = 0;
- m_bDoOffset = false;
- SetRayenceDPCStatus(eDetStatus::DetStatus_Standby);
- m_bRayAcqing = false;
- FINFO("one offset complete");
- }
- }*/
- }
- break;
- }
- case cVDACQ_EIdle:
- {
- FINFO("ACBR->rEvent cVDACQ_EIdle");
- break;
- }
- case cVDACQ_EAT_Wait:
- {
- FINFO("AED Wait");
- break;
- }
- case cVDACQ_ECaptureFrame:
- {
- FINFO("ACBR->rEvent cVDACQ_ECaptureFrame");
- break;
- }
- case cVDACQ_ECapture2_Receive:
- {
- FINFO("ACBR_>rEvent cVDACQ_ECapture2_Receive");
- break;
- }
- case cVDACQ_ECapture2_Expose:
- {
- break;
- }
- }
- }
- break;
- default:
- break;
- }
- }
- void Detector_Rayence::ConfFeedback(int nEventID, int nDetectorID, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam)
- {
- if (-1 == nDetectorID)
- {
- nDetectorID = m_nCurrentPanelID;
- }
- ((FPDDeviceRayence*)(*m_pPanelID2DPC)[nDetectorID])->OnFPDCallback(nDetectorID,
- nEventID, EVT_LEVEL_CONFIGURATION, pszMsg, nParam1, fParam2, nPtrParamLen, pParam);
- }
- void Detector_Rayence::InfoFeedback(int nEventID, int nDetectorID, int nParam1, float fParam2, const char* pszMsg, int nPtrParamLen, void* pParam)
- {
- if (-1 == nDetectorID)
- {
- nDetectorID = m_nCurrentPanelID;
- }
- ((FPDDeviceRayence*)(*m_pPanelID2DPC)[nDetectorID])->OnFPDCallback(nDetectorID,
- nEventID, EVT_LEVEL_INFORMATOION, pszMsg, nParam1, fParam2, nPtrParamLen, pParam);
- }
- void Detector_Rayence::StatusFeedback(int nEventID, int nParam1, const char* pszMsg, int nDetectorID, float fParam2, int nPtrParamLen, void* pParam)
- {
- if (-1 == nDetectorID)
- {
- nDetectorID = m_nCurrentPanelID;
- }
- ((FPDDeviceRayence*)(*m_pPanelID2DPC)[nDetectorID])->OnFPDCallback(nDetectorID,
- nEventID, EVT_LEVEL_STATUS, pszMsg, nParam1, fParam2, nPtrParamLen, pParam);
- }
- void Detector_Rayence::DataFeedback(int nEventID, void* pParam, int nParam1, float fParam2, const char* pszMsg, int nPtrParamLen, int nDetectorID)
- {
- if (-1 == nDetectorID)
- {
- nDetectorID = m_nCurrentPanelID;
- }
- ((FPDDeviceRayence*)(*m_pPanelID2DPC)[nDetectorID])->OnFPDCallback(nDetectorID,
- nEventID, EVT_LEVEL_DATA, pszMsg, nParam1, fParam2, nPtrParamLen, pParam);
- }
- void Detector_Rayence::WarnFeedback(int nEventID, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam, int nDetectorID)
- {
- if (-1 == nDetectorID)
- {
- nDetectorID = m_nCurrentPanelID;
- }
- ((FPDDeviceRayence*)(*m_pPanelID2DPC)[nDetectorID])->OnFPDCallback(nDetectorID,
- nEventID, EVT_LEVEL_WARNING, pszMsg, nParam1, fParam2, nPtrParamLen, pParam);
- }
- void Detector_Rayence::ErrorFeedback(int nEventID, const char* pszMsg, int nDetectorID, int nParam1, float fParam2, int nPtrParamLen, void* pParam)
- {
- if (-1 == nDetectorID)
- {
- nDetectorID = m_nCurrentPanelID;
- }
- ((FPDDeviceRayence*)(*m_pPanelID2DPC)[nDetectorID])->OnFPDCallback(nDetectorID,
- nEventID, EVT_LEVEL_ERROR, pszMsg, nParam1, fParam2, nPtrParamLen, pParam);
- }
- void Detector_Rayence::OffsetProgressFeedback(int nEventID, int nParam1, const char* pszMsg, int nDetectorID, float fParam2, int nPtrParamLen, void* pParam)
- {
- if (-1 == nDetectorID)
- {
- nDetectorID = m_nCurrentPanelID;
- }
- ((FPDDeviceRayence*)(*m_pPanelID2DPC)[nDetectorID])->OnFPDCallback(nDetectorID,
- nEventID, EVT_LEVEL_INFORMATOION, pszMsg, nParam1, fParam2, nPtrParamLen, pParam);
- }
- void Detector_Rayence::OffsetStatusFeedback(int nEventID, int nParam1, const char* pszMsg, int nDetectorID, float fParam2, int nPtrParamLen, void* pParam)
- {
- if (-1 == nDetectorID)
- {
- nDetectorID = m_nCurrentPanelID;
- }
- ((FPDDeviceRayence*)(*m_pPanelID2DPC)[nDetectorID])->OnFPDCallback(nDetectorID,
- nEventID, EVT_LEVEL_INFORMATOION, pszMsg, nParam1, fParam2, nPtrParamLen, pParam);
- }
|