DIOS.Dev.FPD.AcqUnit.cpp 12 KB

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