DIOS.Dev.FPD.AcqUnit.cpp 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461
  1. // CCOS.Dev.FPD.DEMO.cpp : 定义 DLL 应用程序的导出函数。
  2. //
  3. #include "stdafx.h"
  4. #include "CCOS.Dev.FPDDeviceMould.hpp"
  5. using namespace CCOS::Dev;
  6. using namespace CCOS::Dev::Detail::Detector;
  7. namespace nsFPD = CCOS::Dev::Detail::Detector;
  8. extern Log4CPP::Logger* gLogger;
  9. //-----------------------------------------------------------------------------
  10. // AcqUnit
  11. //-----------------------------------------------------------------------------
  12. nsFPD::AcqUnit::AcqUnit():
  13. m_strZskkFPDState("0"),
  14. m_strNoNeedWaitImage("0"),
  15. m_strLastImage(""),
  16. m_strAutonumousMapFinish("0"),
  17. m_strFluPPS("15.0"),
  18. m_strMaxFrameRate("30.0"),
  19. m_strAcqMode("RAD"),
  20. m_nFullWidth(3000),
  21. m_nFullHeight(3000),
  22. m_nPrevWidth(1500),
  23. m_nPrevHeight(1500),
  24. m_nBits(16),
  25. m_pFullImageQueue(NULL),
  26. m_pPrevImageData(NULL)
  27. {
  28. }
  29. nsFPD::AcqUnit:: ~AcqUnit()
  30. {
  31. }
  32. void OEM_IF nsFPD::AcqUnit::SetEventCenter(std::shared_ptr <CCOS::Dev::IOEventCenter> EventCenter)
  33. {
  34. m_EventCenter = EventCenter;
  35. }
  36. RET_STATUS nsFPD::AcqUnit::JSGetAcqMode(std::string& out)
  37. {
  38. out = m_strAcqMode;
  39. return RET_STATUS::RET_SUCCEED;
  40. }
  41. RET_STATUS nsFPD::AcqUnit::JSSetAcqMode(std::string in, std::string& out)
  42. {
  43. ResDataObject json;
  44. json.decode(in.c_str());
  45. Info("JSSetAcqMode. {$}", in.c_str());
  46. if (json.GetFirstOf("P0") < 0)
  47. {
  48. return RET_STATUS::RET_FAILED;
  49. }
  50. string strMode = json["P0"];
  51. m_strAcqMode = strMode;
  52. RET_STATUS ret = SetAcqMode(m_strAcqMode);
  53. return ret;
  54. }
  55. RET_STATUS nsFPD::AcqUnit::JSSetGainMode(std::string in, std::string & out)
  56. {
  57. Info ("JSSetGainMode. {$}", in.c_str ());
  58. ResDataObject json;
  59. json.decode(in.c_str());
  60. string strP0 = (const char*)json["P0"];
  61. float fGain = stof(strP0.c_str());
  62. RET_STATUS ret = SetGainMode(fGain);
  63. out = "test@SetGainMode";
  64. return ret;
  65. }
  66. RET_STATUS nsFPD::AcqUnit::JSSetBinningMode(std::string in, std::string& out)
  67. {
  68. Info ("JSSetBinningMode. {$}", in.c_str ());
  69. ResDataObject json;
  70. json.decode(in.c_str());
  71. string strP0 = (const char*)json["P0"];
  72. string strP1 = (const char*)json["P1"];
  73. int nX = atoi(strP0.c_str());
  74. int nY = atoi(strP1.c_str());
  75. RET_STATUS ret = SetBinningMode(nX, nY);
  76. out = "test@SetBinningMode";
  77. return ret;
  78. }
  79. RET_STATUS nsFPD::AcqUnit::JSSetZoomMode(std::string in, std::string& out)
  80. {
  81. Info("JSSetZoomMode. {$}", in.c_str());
  82. ResDataObject json;
  83. json.decode(in.c_str());
  84. string strP0 = (const char*)json["P0"];
  85. string strP1 = (const char*)json["P1"];
  86. string strP2 = (const char*)json["P2"];
  87. string strP3 = (const char*)json["P3"];
  88. int nX1 = atoi(strP0.c_str());
  89. int nY1 = atoi(strP1.c_str());
  90. int nX2 = atoi(strP2.c_str());
  91. int nY2 = atoi(strP3.c_str());
  92. RET_STATUS ret = SetZoomMode(nX1, nY1, nX2, nY2);
  93. out = "test@SetZoomMode";
  94. return RET_STATUS::RET_SUCCEED;
  95. }
  96. RET_STATUS nsFPD::AcqUnit::JSSetDemoImage(std::string in, std::string& out)
  97. {
  98. ResDataObject json;
  99. json.decode(in.c_str());
  100. string strP0 = (const char*)json["P0"];
  101. Info("SetDemoImage. {$}", in.c_str());
  102. out = "test@SetDemoImage";
  103. SetDemoImage(strP0);
  104. return RET_STATUS::RET_SUCCEED;
  105. }
  106. RET_STATUS nsFPD::AcqUnit::SetDemoImage(string strFile)
  107. {
  108. Info("AcqUnit::SetDemoImage\n");
  109. return RET_STATUS::RET_SUCCEED;
  110. }
  111. bool nsFPD::AcqUnit::SetMaxBlockSize(const char *pQueName, DWORD BlockSize, DWORD FulBlockCount, DWORD PrevBlockCount)
  112. {
  113. return true;
  114. }
  115. bool nsFPD::AcqUnit::SetFulImageInfo(DWORD Height, DWORD Width, DWORD Bits, bool FetchFlag)
  116. {
  117. m_nFullWidth = Width;
  118. m_nFullHeight = Height;
  119. m_nBits = Bits;
  120. return true;
  121. }
  122. bool nsFPD::AcqUnit::SetPrevImageInfo(bool Support, DWORD Height, DWORD Width, bool FetchFlag)
  123. {
  124. m_nPrevWidth = Width;
  125. m_nPrevHeight = Height;
  126. return true;
  127. }
  128. RET_STATUS nsFPD::AcqUnit::JSGetZskkFPDState(std::string & out)
  129. {
  130. out = m_strZskkFPDState;
  131. return RET_STATUS::RET_SUCCEED;
  132. }
  133. RET_STATUS nsFPD::AcqUnit::SetZskkFPDState(string in)
  134. {
  135. Info("SetZskkFPDState in:{$}", in);
  136. if (in == "")
  137. {
  138. return RET_STATUS::RET_FAILED;
  139. }
  140. m_strZskkFPDState = in;
  141. m_EventCenter->OnNotify((int)ATTRACTION_SET, AttrKey::ZskkFPDState, m_strZskkFPDState);
  142. return RET_STATUS::RET_SUCCEED;
  143. }
  144. RET_STATUS nsFPD::AcqUnit::JSGetNoNeedWaitImage(std::string & out)
  145. {
  146. out = m_strNoNeedWaitImage;
  147. return RET_STATUS::RET_SUCCEED;
  148. }
  149. RET_STATUS nsFPD::AcqUnit::JSSetNoNeedWaitImage(std::string in)
  150. {
  151. Info("JSSetNoNeedWaitImage in:{$}", in);
  152. if (in == "")
  153. {
  154. return RET_STATUS::RET_FAILED;
  155. }
  156. m_strNoNeedWaitImage = in;
  157. return RET_STATUS::RET_SUCCEED;
  158. }
  159. void nsFPD::AcqUnit::SendNoNeedWaitImage(bool bflag)
  160. {
  161. Info("SendNoNeedWaitImage bflag:{$}", bflag);
  162. auto szFDinfo = std::to_string(bflag);
  163. m_EventCenter->OnNotify((int)ATTRACTION_SET, AttrKey::NoNeedWaitImage, szFDinfo);
  164. }
  165. RET_STATUS nsFPD::AcqUnit::JSGetLastImage(std::string & out)
  166. {
  167. out = m_strLastImage;
  168. return RET_STATUS::RET_SUCCEED;
  169. }
  170. RET_STATUS nsFPD::AcqUnit::AddFrameWithRawHead(IMAGE_VIEW_TYPE eType, string ImageHead, WORD* pFrameBuff, DWORD FrameSize)
  171. {
  172. //FrameHeader
  173. ResDataObject json;
  174. if (IMAGE_FULL == eType)
  175. {
  176. json.add("ImageType", 0);//IMAGE_TYPE_2D: 0; IMAGE_TYPE_3D: 1
  177. json.add("Viewtype", (int)eType);
  178. json.add("Sharememid", "0");
  179. json.add("Imageid", "0");
  180. json.add("Width", m_nFullWidth);
  181. json.add("Height", m_nFullHeight);
  182. json.add("Bit", m_nBits);
  183. }
  184. if (IMAGE_PREVIEW == eType || IMAGE_AEC_PREVIEW == eType)
  185. {
  186. json.add("ImageType", 0);//IMAGE_TYPE_2D: 0; IMAGE_TYPE_3D: 1
  187. json.add("Viewtype", (int)eType);
  188. json.add("Sharememid", "0");
  189. json.add("Imageid", "0");
  190. json.add("Width", m_nPrevWidth);
  191. json.add("Height", m_nPrevHeight);
  192. json.add("Bit", m_nBits);
  193. }
  194. m_strLastImage = json.encode();
  195. m_EventCenter->OnDataNotify((int)eType, AttrKey::ImgDataInfo, m_strLastImage, ImageHead, (char *)pFrameBuff, FrameSize * 2);
  196. Info("AddFrameWithRawHead:{$}", m_strLastImage.c_str());
  197. return RET_STATUS::RET_SUCCEED;
  198. }
  199. DWORD nsFPD::AcqUnit::AddFrame(IMAGE_VIEW_TYPE Type, string ImageHead, WORD* pFrameBuff, DWORD FrameSize)
  200. {
  201. return 0;
  202. }
  203. /********************************************************************/
  204. //
  205. //图像沿X轴做翻转,
  206. //pData:[IN][OUT] 图像数据
  207. //nWidth[IN] nHeight[IN]
  208. /********************************************************************/
  209. bool nsFPD::AcqUnit::FlipX(WORD* pData, UINT nWidth, UINT nHeight)
  210. {
  211. UINT j = 0;
  212. UINT i = 0;
  213. WORD temp;
  214. //修改翻转的判断,之前的代码会导致中央区域多翻转一个像素
  215. for (i = 0; i < nWidth; i++)
  216. {
  217. for (j = 0; j < nHeight / 2; j++)
  218. {
  219. int nSrc = j * nWidth + i;
  220. int nDes = (nHeight - j - 1) * nWidth + i;
  221. temp = pData[nSrc];
  222. pData[nSrc] = pData[nDes];
  223. pData[nDes] = temp;
  224. }
  225. }
  226. return true;
  227. }
  228. /********************************************************************/
  229. //
  230. //图像沿Y轴做翻转,
  231. //pData:[IN][OUT] 图像数据
  232. //nWidth[IN] nHeight[IN]
  233. /********************************************************************/
  234. bool nsFPD::AcqUnit::FlipY(WORD* pData, UINT nWidth, UINT nHeight)
  235. {
  236. UINT j = 0;
  237. UINT i = 0;
  238. WORD temp;
  239. //修改翻转的判断,之前的代码会导致中央区域多翻转一个像素
  240. for (i = 0; i < nHeight; i++)
  241. {
  242. for (j = 0; j < nWidth / 2; j++)
  243. {
  244. temp = pData[i * nWidth + j];
  245. pData[i * nWidth + j] = pData[(i + 1) * nWidth - j - 1];
  246. pData[(i + 1) * nWidth - j - 1] = temp;
  247. }
  248. }
  249. return true;
  250. }
  251. /***
  252. ** 说明:旋转图像
  253. ** 参数:nAngle,顺时针旋转角度,0 90 180 270
  254. ** addbyys20200810
  255. ***/
  256. bool nsFPD::AcqUnit::RotateImage(WORD* imageBuffer, int nImageHeight, int nImageWidth, int nAngle)
  257. {
  258. bool ret = true;
  259. if (NULL == imageBuffer || 0 == nImageHeight || 0 == nImageWidth)
  260. {
  261. return false;
  262. }
  263. int nTemp = 0;
  264. int i = 0, j = 0;//for loop
  265. WORD* ptempData;
  266. ptempData = new WORD[nImageHeight * nImageWidth];
  267. switch (nAngle)
  268. {
  269. case 90: //顺时针旋转90°
  270. //TPRINTA_INFO("Rotate 90 degrees clockwise");
  271. nTemp = nImageHeight;
  272. nImageHeight = nImageWidth;
  273. nImageWidth = nTemp;
  274. try
  275. {
  276. memcpy(ptempData, imageBuffer, nImageHeight * nImageWidth * sizeof(WORD));
  277. for (i = 0; i < nImageHeight; i++)
  278. {
  279. for (j = 0; j < nImageWidth; j++)
  280. {
  281. imageBuffer[i * nImageWidth + j] = ptempData[(nImageWidth - 1 - j) * nImageHeight + i];
  282. }
  283. }
  284. }
  285. catch (...)
  286. {
  287. //TPRINTA_INFO("Rotate image crashed");
  288. ret = false;
  289. }
  290. break;
  291. case 180: //顺时针旋转180°
  292. //TPRINTA_INFO("Rotate 180 degrees clockwise");
  293. try
  294. {
  295. memcpy(ptempData, imageBuffer, nImageHeight * nImageWidth * sizeof(WORD));
  296. for (i = 0; i < nImageWidth * nImageHeight; i++)
  297. {
  298. imageBuffer[i] = ptempData[nImageWidth * nImageHeight - 1 - i];
  299. }
  300. }
  301. catch (...)
  302. {
  303. //TPRINTA_INFO("Rotate image crashed");
  304. ret = false;
  305. }
  306. break;
  307. case 270: //顺时针旋转270°
  308. //TPRINTA_INFO("Rotate 270 degrees clockwise");
  309. nTemp = nImageHeight;
  310. nImageHeight = nImageWidth;
  311. nImageWidth = nTemp;
  312. try
  313. {
  314. memcpy(ptempData, imageBuffer, nImageWidth * nImageHeight * sizeof(WORD));
  315. for (i = 0; i < nImageHeight; i++)
  316. {
  317. for (j = 0; j < nImageWidth; j++)
  318. {
  319. imageBuffer[i * nImageWidth + j] = ptempData[j * nImageHeight + (nImageHeight - 1 - i)];
  320. }
  321. }
  322. }
  323. catch (...)
  324. {
  325. //TPRINTA_INFO("Rotate image crashed");
  326. ret = false;
  327. }
  328. break;
  329. default:
  330. ret = false;
  331. break;
  332. }
  333. delete[] ptempData;
  334. ptempData = NULL;
  335. return ret;
  336. }
  337. RET_STATUS nsFPD::AcqUnit::SetGainMode(float nGain)
  338. {
  339. return RET_STATUS::RET_SUCCEED;
  340. }
  341. RET_STATUS nsFPD::AcqUnit::SetBinningMode(int nBinningX, int nBinningY)
  342. {
  343. return RET_STATUS::RET_SUCCEED;
  344. }
  345. RET_STATUS nsFPD::AcqUnit::SetZoomMode(int nZOOMX1, int nZOOMY1, int nZOOMX2, int nZOOMY2)
  346. {
  347. return RET_STATUS::RET_SUCCEED;
  348. }
  349. RET_STATUS nsFPD::AcqUnit::JSAutonumousMapFinish(std::string& out)
  350. {
  351. out = m_strAutonumousMapFinish;
  352. return RET_STATUS::RET_SUCCEED;
  353. }
  354. void nsFPD::AcqUnit::SendAutonumousMapFinish(int nFlag)
  355. {
  356. string szFPDinfo = "";
  357. szFPDinfo = to_string(nFlag);
  358. m_strAutonumousMapFinish = szFPDinfo;
  359. m_EventCenter->OnNotify((int)ATTRACTION_SET, AttrKey::AutonumousMapFinish, szFPDinfo);
  360. Info("SendAutonumousMapFinish({$})", szFPDinfo);
  361. return;
  362. }
  363. RET_STATUS nsFPD::AcqUnit::JSSetFluPPS(std::string in, std::string& out)
  364. {
  365. Info("JSSetFluPPS. {$}", in.c_str());
  366. ResDataObject json;
  367. json.decode(in.c_str());
  368. m_strFluPPS = (string)json[0];
  369. float fluPPS = stof(m_strFluPPS.c_str());
  370. return SetFluPPS(fluPPS);
  371. }
  372. RET_STATUS nsFPD::AcqUnit::JSGetFluPPS(std::string& out)
  373. {
  374. float pps = 0.0f;
  375. GetFluPPS(pps);
  376. out = std::to_string(pps);
  377. return RET_STATUS::RET_SUCCEED;
  378. }
  379. RET_STATUS nsFPD::AcqUnit::JSGetMaxFrameRate(std::string& out)
  380. {
  381. out = m_strMaxFrameRate;
  382. return RET_STATUS::RET_SUCCEED;
  383. }
  384. RET_STATUS nsFPD::AcqUnit::SetFluPPS(float fFluPPS)
  385. {
  386. return RET_STATUS::RET_SUCCEED;
  387. }
  388. RET_STATUS nsFPD::AcqUnit::GetFluPPS(float& fFluPPS)
  389. {
  390. return RET_STATUS::RET_SUCCEED;
  391. }
  392. void nsFPD::AcqUnit::FluPPSNotify(float nCurrentFps)
  393. {
  394. Info("FluPPSNotify current fps: {$}", nCurrentFps);
  395. string strFps = std::to_string(nCurrentFps);
  396. m_EventCenter->OnNotify((int)ATTRACTION_SET, AttrKey::FluPPS, strFps);
  397. }
  398. void nsFPD::AcqUnit::SetMaxFrameRate(float fMaxFrameRate)
  399. {
  400. string strMaxFrameRate = std::to_string(fMaxFrameRate);
  401. m_strMaxFrameRate = strMaxFrameRate;
  402. }
  403. void nsFPD::AcqUnit::AcqModeNotify(string strMode)
  404. {
  405. Info("AcqModeNotify nMode: {$}", strMode);
  406. string strAcqMode = strMode;
  407. m_EventCenter->OnNotify((int)ATTRACTION_SET, AttrKey::AcqMode, strAcqMode);
  408. }