hspscanner_impl.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635
  1. #include "hspscanner_impl.h"
  2. #include <cstring>
  3. #include <cstdio>
  4. #include <unistd.h>
  5. #include "log4vendor.h"
  6. #include "dlfcn.h"
  7. #include "BHCamBase.h"
  8. class Inner_Log{
  9. public:
  10. Inner_Log(const char* funcname){
  11. memset(m_funcname,0,sizeof(m_funcname));
  12. strcpy(m_funcname,funcname);
  13. LOG4VTM(INFO,"========"<<m_funcname<<" entry");
  14. }
  15. ~Inner_Log(){
  16. LOG4VTM(INFO,"========"<<m_funcname<<" leave");
  17. }
  18. private:
  19. char m_funcname[256];
  20. };
  21. #define DEFAULT_HPIXEL 3264
  22. #define DEFAULT_VPIXEL 2448
  23. #define IMAGEBUFF_SIZE (DEFAULT_HPIXEL*DEFAULT_VPIXEL*3)
  24. #ifdef LOG4VTM_FUNCTION
  25. #undef LOG4VTM_FUNCTION
  26. #define LOG4VTM_FUNCTION() \
  27. Inner_Log log(__FUNCTION__);
  28. #endif
  29. #define CHECK_FUNC_VALID(funcname) \
  30. if(funcname == NULL){\
  31. FormatDevErrorInfo(__FUNCTION__, __LINE__,Error_Unexpect, #funcname" == NULL");\
  32. return Error_Unexpect;\
  33. }
  34. #define CHECK_RETURN_VALUE(funcname,ret,retvalue) \
  35. if(ret != FR_RET_SUCC)\
  36. {\
  37. FormatDevErrorInfo(__FUNCTION__, __LINE__,ret, #funcname" Failed");\
  38. return retvalue;\
  39. }
  40. HSPSClassImpl::HSPSClassImpl()
  41. :m_mode(0)
  42. {
  43. ResetParm();
  44. //m_pBuffPic = (unsigned char*)malloc(IMAGEBUFF_SIZE);
  45. m_hSo = NULL;
  46. m_hSo = dlopen("libBHCamBase.grg.so", RTLD_LAZY);
  47. if(m_hSo)
  48. {
  49. HIGH_StartCamera = (PHIGH_StartCamera)dlsym(m_hSo,"HIGH_StartCamera");
  50. HIGH_GetFirmwareVersion = (PHIGH_GetFirmwareVersion)dlsym(m_hSo,"HIGH_GetFirmwareVersion");
  51. HIGH_GetStatus = (PHIGH_GetStatus)dlsym(m_hSo,"HIGH_GetStatus");
  52. HIGH_StopCamera = (PHIGH_StopCamera)dlsym(m_hSo,"HIGH_StopCamera");
  53. HIGH_SetAutoCrop = (PHIGH_SetAutoCrop)dlsym(m_hSo,"HIGH_SetAutoCrop");
  54. HIGH_SetCameraPixel = (PHIGH_SetCameraPixel)dlsym(m_hSo,"HIGH_SetCameraPixel");
  55. HIGH_SetRotateSize = (PHIGH_SetRotateSize)dlsym(m_hSo,"HIGH_SetRotateSize");
  56. HIGH_SetColorType = (PHIGH_SetColorType)dlsym(m_hSo,"HIGH_SetColorType");
  57. HIGH_SetJPGQuality = (PHIGH_SetJPGQuality)dlsym(m_hSo,"HIGH_SetJPGQuality");
  58. HIGH_GetPixelNum = (PHIGH_GetPixelNum)dlsym(m_hSo,"HIGH_GetPixelNum");
  59. HIGH_GetHPixelByIndex = (PHIGH_GetHPixelByIndex)dlsym(m_hSo,"HIGH_GetHPixelByIndex");
  60. HIGH_GetVPixelByIndex = (PHIGH_GetVPixelByIndex)dlsym(m_hSo,"HIGH_GetVPixelByIndex");
  61. HIGH_CreateWindow = (PHIGH_CreateWindow)dlsym(m_hSo,"HIGH_CreateWindow");
  62. HIGH_CloseWindow = (PHIGH_CloseWindow)dlsym(m_hSo,"HIGH_CloseWindow");
  63. HIGH_PauseAndPlay = (PHIGH_PauseAndPlay)dlsym(m_hSo,"HIGH_PauseAndPlay");
  64. HIGH_TakePicture = (PHIGH_TakePicture)dlsym(m_hSo,"HIGH_TakePicture");
  65. HIGH_CameraData = (PHIGH_CameraData)dlsym(m_hSo,"HIGH_CameraData");
  66. HIGH_HideWindow = (PHIGH_HideWindow)dlsym(m_hSo,"HIGH_HideWindow");
  67. }else{
  68. FormatDevErrorInfo(__FUNCTION__, __LINE__,Error_Unexpect, "dlopen Failed");
  69. }
  70. }
  71. HSPSClassImpl::~HSPSClassImpl()
  72. {
  73. if(m_hSo)
  74. {
  75. dlclose(m_hSo);
  76. m_hSo = NULL;
  77. }
  78. /*
  79. if(m_pBuffPic)
  80. {
  81. free(m_pBuffPic);
  82. }
  83. */
  84. DevClose();
  85. }
  86. void HSPSClassImpl::ResetParm()
  87. {
  88. memset(&m_status,0,sizeof(m_status));
  89. m_nX = 0;
  90. m_nY = 0;
  91. m_nWidth = DEFAULT_DIALOG_WIDTH;
  92. m_bAutoCorp = true;
  93. m_nColorType = 0;
  94. m_nRotateSize = 0;
  95. }
  96. void HSPSClassImpl::ZeroDevErrorInfo()
  97. {
  98. memset(&m_DevErrorInfo, 0, sizeof(m_DevErrorInfo));
  99. }
  100. void HSPSClassImpl::FormatDevErrorInfo(const char* funcname, int line, int errCode,const char* errStr)
  101. {
  102. ZeroDevErrorInfo();
  103. //snprintf(m_DevErrorInfo.szErrMsg, sizeof(m_DevErrorInfo.szErrMsg), "ErrCode:0x%x,Description:Func:%s,Line:%d,Msg:%s", errCode, funcname, line, errStr);
  104. snprintf(m_DevErrorInfo.szErrMsg, sizeof(m_DevErrorInfo.szErrMsg), "{\"ErrCode\":0x%x,\"Description\":\"Func:%s,Line:%d,Msg:%s\"}", errCode, funcname, line, errStr);
  105. m_DevErrorInfo.dwErrMsgLen = strlen(m_DevErrorInfo.szErrMsg);
  106. LOG4VTM(ERROR,m_DevErrorInfo.szErrMsg);
  107. }
  108. ErrorCodeEnum HSPSClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
  109. {
  110. LOG4VTM_FUNCTION();
  111. ErrorCodeEnum err = Error_Succeed;
  112. const char *pType = "PVER=ShenGuoTu#MID=Q800L";
  113. const char *pMode = "FWID=0";
  114. const char *pVendor = "grg";
  115. strcpy(devCategory.szType, pType);
  116. strcpy(devCategory.szModel, pMode);
  117. strcpy(devCategory.szVendor, pVendor);
  118. devCategory.version.wMajor = 1;
  119. devCategory.version.wMinor = 1;
  120. devCategory.version.wRevision = 65535;
  121. devCategory.version.wBuild = 1;
  122. /*
  123. CHECK_FUNC_VALID(HIGH_GetFirmwareVersion);
  124. char szVersion[64] = {0};
  125. int ret = HIGH_GetFirmwareVersion(szVersion);
  126. CHECK_RETURN_VALUE(HIGH_GetFirmwareVersion,ret,Error_Unexpect);
  127. printf("szVersion = %s\n",szVersion);
  128. */
  129. return err;
  130. }
  131. ErrorCodeEnum HSPSClassImpl::DevOpen()
  132. {
  133. LOG4VTM_FUNCTION();
  134. ErrorCodeEnum err = Error_Succeed;
  135. DevClose();
  136. CHECK_FUNC_VALID(HIGH_StartCamera);
  137. int ret = HIGH_StartCamera();
  138. CHECK_RETURN_VALUE(HIGH_StartCamera,ret,Error_DevConnFailed);
  139. m_status.isConnected = 1;
  140. int hPixel = DEFAULT_HPIXEL;
  141. int vPixel = DEFAULT_VPIXEL;
  142. LOG4VTM(INFO,"========HIGH_SetCameraPixel entry");
  143. CHECK_FUNC_VALID(HIGH_SetCameraPixel);
  144. ret = HIGH_SetCameraPixel(hPixel,vPixel);
  145. CHECK_RETURN_VALUE(HIGH_SetCameraPixel,ret,Error_Unexpect);
  146. LOG4VTM(INFO,"========HIGH_SetCameraPixel leave");
  147. return err;
  148. }
  149. ErrorCodeEnum HSPSClassImpl::Reset()
  150. {
  151. LOG4VTM_FUNCTION();
  152. ErrorCodeEnum err = Error_Succeed;
  153. DevClose();
  154. ResetParm();
  155. DevOpen();
  156. return err;
  157. }
  158. ErrorCodeEnum HSPSClassImpl::DevClose()
  159. {
  160. LOG4VTM_FUNCTION();
  161. ErrorCodeEnum err = Error_Succeed;
  162. if(m_status.inPreview)
  163. {
  164. CHECK_FUNC_VALID(HIGH_CloseWindow);
  165. HIGH_CloseWindow();
  166. }
  167. CHECK_FUNC_VALID(HIGH_StopCamera);
  168. //if(m_status.isConnected)
  169. {
  170. HIGH_StopCamera();
  171. }
  172. m_status.isConnected = 0;
  173. m_status.inPreview = 0;
  174. m_status.inShow = 0;
  175. return err;
  176. }
  177. ErrorCodeEnum HSPSClassImpl::SetParam(ParamType type, ParamTypeValue value)
  178. {
  179. try{
  180. LOG4VTM_FUNCTION();
  181. LOG4VTM(INFO,"ParamType = "<<type<<" ParamTypeValue = "<<value);
  182. switch(type){
  183. case HSPS_MODEL_COLOR:
  184. if(value == HSPS_COLOR_GREY)
  185. {
  186. m_nColorType = 1;
  187. }else
  188. {
  189. m_nColorType = 0;
  190. }
  191. break;
  192. case HSPS_MODEL_ROTATE:
  193. if(value == HSPS_ROTATE_LEFT)
  194. {
  195. m_nRotateSize = 1;
  196. }else if(value == HSPS_ROTATE_MIRROR)
  197. {
  198. m_nRotateSize = 2;
  199. }else if(value == HSPS_ROTATE_RIGHT)
  200. {
  201. m_nRotateSize = 3;
  202. }else{
  203. m_nRotateSize = 0;
  204. }
  205. break;
  206. case HSPS_MODEL_SCANSIZE:
  207. if(value == HSPS_SCAN_FULL || value == HSPS_SCAN_A4)
  208. {
  209. m_bAutoCorp = false;
  210. }else{
  211. m_bAutoCorp = true;
  212. }
  213. break;
  214. case HSPS_MODEL_VIEW:
  215. CHECK_FUNC_VALID(HIGH_HideWindow);
  216. if(value == HSPS_VIEW_HIDE)
  217. {
  218. if( m_status.inPreview)
  219. {
  220. if(m_status.inShow)
  221. {
  222. int ret = HIGH_HideWindow(true);
  223. CHECK_RETURN_VALUE(HIGH_HideWindow,ret,Error_Unexpect);
  224. m_status.inShow = 0;
  225. }
  226. }
  227. }else{
  228. if( m_status.inPreview)
  229. {
  230. if(!m_status.inShow){
  231. int ret = HIGH_HideWindow(false);
  232. CHECK_RETURN_VALUE(HIGH_HideWindow,ret,Error_Unexpect);
  233. m_status.inShow = 1;
  234. }
  235. }
  236. }
  237. break;
  238. default:
  239. break;
  240. }
  241. CHECK_FUNC_VALID(HIGH_SetAutoCrop);
  242. int ret = HIGH_SetAutoCrop(m_bAutoCorp);
  243. CHECK_RETURN_VALUE(HIGH_SetAutoCrop,ret,Error_Unexpect);
  244. CHECK_FUNC_VALID(HIGH_SetColorType);
  245. ret = HIGH_SetColorType(m_nColorType);
  246. CHECK_RETURN_VALUE(HIGH_SetColorType,ret,Error_Unexpect);
  247. CHECK_FUNC_VALID(HIGH_SetRotateSize);
  248. ret = HIGH_SetRotateSize(m_nRotateSize);
  249. CHECK_RETURN_VALUE(HIGH_SetRotateSize,ret,Error_Unexpect);
  250. }
  251. catch(const std::exception& e)
  252. {
  253. LOG4VTM(ERROR,"========SetParam coredump:"<<e.what());
  254. return Error_Unexpect;
  255. }
  256. return Error_Succeed;
  257. }
  258. ErrorCodeEnum HSPSClassImpl::SetPreview(short nValue)
  259. {
  260. try{
  261. LOG4VTM_FUNCTION();
  262. LOG4VTM(INFO,"nValue = "<<nValue);
  263. /*
  264. //check dev status
  265. int iStatus;
  266. CHECK_FUNC_VALID(HIGH_GetStatus);
  267. HIGH_GetStatus(&iStatus);
  268. LOG4VTM(INFO,"GetDevStatus dev return = "<<iStatus);
  269. if(FR_DS_ONLINE != iStatus)
  270. {
  271. //if not connected then reopen dev
  272. ErrorCodeEnum retcode = DevOpen();
  273. if(Error_Succeed != retcode)
  274. return retcode;
  275. }
  276. //
  277. */
  278. int ret = 0;
  279. if(nValue)
  280. {
  281. //Check device is available
  282. HspsDevStatus status;
  283. GetDevStatus(status);
  284. if(!m_status.isConnected)
  285. {
  286. FormatDevErrorInfo(__FUNCTION__, __LINE__,Error_NotInit, "device NotInit or NotExist");
  287. return Error_NotInit;
  288. }
  289. //if already previewed,return
  290. if(m_status.inPreview)
  291. {
  292. LOG4VTM(INFO,"========already previewed m_status.inPreview = " << m_status.inPreview);
  293. return Error_Succeed;
  294. }
  295. LOG4VTM(INFO,"========HIGH_SetAutoCrop entry");
  296. CHECK_FUNC_VALID(HIGH_SetAutoCrop);
  297. ret = HIGH_SetAutoCrop(m_bAutoCorp);
  298. CHECK_RETURN_VALUE(HIGH_SetAutoCrop,ret,Error_Unexpect);
  299. LOG4VTM(INFO,"========HIGH_SetAutoCrop leave");
  300. LOG4VTM(INFO,"========HIGH_SetColorType entry");
  301. CHECK_FUNC_VALID(HIGH_SetColorType);
  302. ret = HIGH_SetColorType(m_nColorType);
  303. CHECK_RETURN_VALUE(HIGH_SetColorType,ret,Error_Unexpect);
  304. LOG4VTM(INFO,"========HIGH_SetColorType leave");
  305. LOG4VTM(INFO,"========HIGH_SetRotateSize entry");
  306. CHECK_FUNC_VALID(HIGH_SetRotateSize);
  307. ret = HIGH_SetRotateSize(m_nRotateSize);
  308. CHECK_RETURN_VALUE(HIGH_SetRotateSize,ret,Error_Unexpect);
  309. LOG4VTM(INFO,"========HIGH_SetRotateSize leave");
  310. /*
  311. if(HIGH_GetPixelNum == NULL){
  312. FormatDevErrorInfo(__FUNCTION__, __LINE__,Error_Unexpect, "HIGH_GetPixelNum == NULL");
  313. return Error_Unexpect;
  314. }
  315. int num = HIGH_GetPixelNum();
  316. */
  317. /*
  318. if(HIGH_GetHPixelByIndex == NULL || HIGH_GetVPixelByIndex == NULL){
  319. FormatDevErrorInfo(__FUNCTION__, __LINE__,Error_Unexpect, "HIGH_GetHPixelByIndex == NULL || HIGH_GetVPixelByIndex == NULL");
  320. return Error_Unexpect;
  321. }
  322. int hPixel = HIGH_GetHPixelByIndex(0);
  323. int vPixel = HIGH_GetVPixelByIndex(0);
  324. printf("hPixel = %d,vPixel = %d\n",hPixel,vPixel);
  325. */
  326. /*
  327. int hPixel = DEFAULT_HPIXEL;
  328. int vPixel = DEFAULT_VPIXEL;
  329. LOG4VTM(INFO,"========HIGH_SetCameraPixel entry");
  330. CHECK_FUNC_VALID(HIGH_SetCameraPixel);
  331. ret = HIGH_SetCameraPixel(hPixel,vPixel);
  332. CHECK_RETURN_VALUE(HIGH_SetCameraPixel,ret,Error_Unexpect);
  333. LOG4VTM(INFO,"========HIGH_SetCameraPixel leave");
  334. */
  335. LOG4VTM(INFO,"========HIGH_CreateWindow entry");
  336. CHECK_FUNC_VALID(HIGH_CreateWindow);
  337. ret = HIGH_CreateWindow(m_nX,m_nY,m_nWidth,m_nWidth*9/16);
  338. CHECK_RETURN_VALUE(HIGH_CreateWindow,ret,Error_Unexpect);
  339. LOG4VTM(INFO,"========HIGH_CreateWindow leave");
  340. }else
  341. {
  342. LOG4VTM(INFO,"========HIGH_CloseWindow entry");
  343. CHECK_FUNC_VALID(HIGH_CloseWindow);
  344. ret = HIGH_CloseWindow();
  345. CHECK_RETURN_VALUE(HIGH_CloseWindow,ret,Error_Unexpect);
  346. LOG4VTM(INFO,"========HIGH_CloseWindow leave");
  347. }
  348. }catch(const std::exception& e)
  349. {
  350. LOG4VTM(ERROR,"========SetPreview coredump:"<<e.what());
  351. return Error_Unexpect;
  352. }
  353. m_status.inPreview = nValue;
  354. m_status.inShow = nValue;
  355. return Error_Succeed;
  356. }
  357. ErrorCodeEnum HSPSClassImpl::ScanImage(const char* pszFileName)
  358. {
  359. LOG4VTM_FUNCTION();
  360. LOG4VTM(INFO,"pszFileName = "<<pszFileName);
  361. CHECK_FUNC_VALID(HIGH_TakePicture);
  362. DeleteOldPic(pszFileName);
  363. int ret = HIGH_TakePicture(pszFileName);
  364. CHECK_RETURN_VALUE(HIGH_TakePicture,ret,Error_Unexpect);
  365. CheckSavePic(pszFileName);
  366. return Error_Succeed;
  367. }
  368. ErrorCodeEnum HSPSClassImpl::ScanImageEx(BYTE* pBtImg, int& nBtLen, const char* pszFileName)
  369. {
  370. LOG4VTM_FUNCTION();
  371. LOG4VTM(INFO,"input nBtLen = "<<nBtLen<<" pszFileName = "<<pszFileName);
  372. const char* filename = "/tmp/HSPTempImage.jpg";
  373. CHECK_FUNC_VALID(HIGH_TakePicture);
  374. FILE* fp = NULL;
  375. int ret = 0;
  376. if(nBtLen == 0)
  377. {
  378. //get pic size
  379. if(strlen(pszFileName) != 0)
  380. {
  381. ret = HIGH_TakePicture(pszFileName);
  382. CHECK_RETURN_VALUE(HIGH_TakePicture,ret,Error_Unexpect);
  383. fp = fopen(pszFileName,"rb");
  384. }else{
  385. ret = HIGH_TakePicture(filename);
  386. CHECK_RETURN_VALUE(HIGH_TakePicture,ret,Error_Unexpect);
  387. fp = fopen(filename,"rb");
  388. }
  389. if(fp)
  390. {
  391. fseek(fp,0,SEEK_END);
  392. nBtLen=ftell(fp);
  393. LOG4VTM(INFO,"ScanImageEx get nBtLen = "<<nBtLen);
  394. fclose(fp);
  395. fp = NULL;
  396. }
  397. FormatDevErrorInfo(__FUNCTION__, __LINE__,Error_TooSmallBuffer, "ScanImageEx Error_TooSmallBuffer");
  398. return Error_TooSmallBuffer;
  399. }
  400. if(pBtImg == NULL)
  401. {
  402. FormatDevErrorInfo(__FUNCTION__, __LINE__,Error_Param, "pBtImg == NULL");
  403. return Error_Param;
  404. }
  405. if(strlen(pszFileName) != 0)
  406. {
  407. fp = fopen(pszFileName,"rb");
  408. if(fp)
  409. {
  410. fread(pBtImg,1,nBtLen,fp);
  411. fclose(fp);
  412. fp = NULL;
  413. }else{
  414. LOG4VTM(ERROR,"get image data file fp == NULL,pszFileName = "<<pszFileName);
  415. }
  416. }else{
  417. fp = fopen(filename,"rb");
  418. if(fp)
  419. {
  420. fread(pBtImg,1,nBtLen,fp);
  421. fclose(fp);
  422. fp = NULL;
  423. }else{
  424. LOG4VTM(ERROR,"get image data file fp == NULL,filename = "<<filename);
  425. }
  426. remove(filename);
  427. }
  428. /*
  429. const int nSize = 1024*700;//DEFAULT_HPIXEL*DEFAULT_VPIXEL*3;
  430. char* pTemp = (char*)malloc(DEFAULT_HPIXEL*DEFAULT_VPIXEL*3);
  431. if(nBtLen < nSize)
  432. {
  433. nBtLen = nSize;
  434. FormatDevErrorInfo(__FUNCTION__, __LINE__,Error_TooSmallBuffer, "ScanImageEx Error_TooSmallBuffer");
  435. return Error_TooSmallBuffer;
  436. }
  437. if(pBtImg == NULL)
  438. {
  439. //pBtImg = m_pBuffPic;
  440. FormatDevErrorInfo(__FUNCTION__, __LINE__,Error_Param, "pBtImg == NULL");
  441. return Error_Param;
  442. }
  443. CHECK_FUNC_VALID(HIGH_CameraData);
  444. //int ret = HIGH_CameraData((char*)pBtImg);
  445. int ret = HIGH_CameraData((char*)pTemp);
  446. CHECK_RETURN_VALUE(HIGH_CameraData,ret,Error_Unexpect);
  447. memcpy(pBtImg,pTemp,nSize);
  448. free(pTemp);
  449. if(strlen(pszFileName) != 0)
  450. {
  451. CHECK_FUNC_VALID(HIGH_TakePicture);
  452. DeleteOldPic(pszFileName);
  453. ret = HIGH_TakePicture(pszFileName);
  454. CHECK_RETURN_VALUE(HIGH_TakePicture,ret,Error_Unexpect);
  455. CheckSavePic(pszFileName);
  456. }
  457. */
  458. return Error_Succeed;
  459. }
  460. ErrorCodeEnum HSPSClassImpl::SetViewPos(int nX, int nY, int nWidth)
  461. {
  462. LOG4VTM_FUNCTION();
  463. LOG4VTM(INFO,"nX = "<<nX<<" nY = "<<nY<<" nWidth = "<<nWidth);
  464. if(nWidth == 0) //bhj 宽度参数为0时,设置隐藏,不再返回参数错误。
  465. {
  466. //special process
  467. LOG4VTM(INFO,"nWidth == 0 special process");
  468. if(m_status.inPreview)
  469. {
  470. if(m_status.inShow)
  471. {
  472. CHECK_FUNC_VALID(HIGH_HideWindow);
  473. int ret = HIGH_HideWindow(true);
  474. CHECK_RETURN_VALUE(HIGH_HideWindow,ret,Error_Unexpect);
  475. m_status.inShow = 0;
  476. }
  477. }
  478. return Error_Succeed;
  479. }
  480. //exception process //bhj
  481. if(nX<0 || nY<0 || nWidth<0)
  482. {
  483. LOG4VTM(ERROR,"nX<0 || nY<0 || nWidth<0 Error_Param");
  484. return Error_Param;
  485. }
  486. m_nX = nX;
  487. m_nY = nY;
  488. m_nWidth = nWidth;
  489. if(m_status.inPreview)
  490. {
  491. SetPreview(0);
  492. SetPreview(1);
  493. }
  494. return Error_Succeed;
  495. }
  496. ErrorCodeEnum HSPSClassImpl::SetProperty()
  497. {
  498. LOG4VTM_FUNCTION();
  499. return Error_NotImpl;
  500. }
  501. ErrorCodeEnum HSPSClassImpl::GetDevStatus(HspsDevStatus& status)
  502. {
  503. LOG4VTM_FUNCTION();
  504. int iStatus;
  505. CHECK_FUNC_VALID(HIGH_GetStatus);
  506. HIGH_GetStatus(&iStatus);
  507. LOG4VTM(INFO,"GetDevStatus dev return = "<<iStatus);
  508. if(FR_DS_ONLINE != iStatus)
  509. {
  510. m_status.isConnected = 0;
  511. }
  512. status = m_status;
  513. /*
  514. int iStatus;
  515. if(HIGH_GetStatus == NULL){
  516. FormatDevErrorInfo(__FUNCTION__, __LINE__,Error_Unexpect, "HIGH_GetStatus == NULL");
  517. return Error_Unexpect;
  518. }
  519. HIGH_GetStatus(&iStatus);
  520. printf("GetDevStatus = %d\n",iStatus);
  521. */
  522. return Error_Succeed;
  523. }
  524. ErrorCodeEnum HSPSClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
  525. {
  526. memset(&devErrInfo, 0, sizeof(devErrInfo));
  527. memcpy(&devErrInfo, &m_DevErrorInfo, sizeof(devErrInfo));
  528. return Error_Succeed;
  529. }
  530. void HSPSClassImpl::DeleteOldPic(const char* pszFileName)
  531. {
  532. /*
  533. FILE* fp = NULL;
  534. fp = fopen(pszFileName,"rb");
  535. if(fp)
  536. {
  537. remove(pszFileName);
  538. fclose(fp);
  539. }
  540. */
  541. }
  542. void HSPSClassImpl::CheckSavePic(const char* pszFileName){
  543. /*
  544. FILE* fp = NULL;
  545. int time = 0;
  546. while(!fp && time++ < 5)//检测次数5次
  547. {
  548. sleep(1);
  549. fp = fopen(pszFileName,"rb");
  550. }
  551. if(fp)
  552. fclose(fp);
  553. */
  554. }
  555. DEVICEBASE_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass *&baseObj)
  556. {
  557. baseObj = new HSPSClassImpl();
  558. if(baseObj == NULL) {
  559. return Error_Resource;
  560. } else {
  561. cmb::log_init_config config;
  562. config.dev_name = "HSPScanner";
  563. config.log_level = CMB_LOG_LEVEL_TRACE;
  564. #if defined(_MSC_VER)
  565. config.log_dir = ("C:\\rvc\\dbg\\");
  566. #else
  567. config.log_dir = ("/opt/rvc/dbg/");
  568. #endif //_MSC_VER
  569. std::string str;
  570. cmb::log4vendor::init(config, str);
  571. printf("init after: %s\n", str.c_str());
  572. return Error_Succeed;
  573. }
  574. }
  575. DEVICEBASE_API ErrorCodeEnum ReleaseDevComponent(DeviceBaseClass *&pBaseObj)
  576. {
  577. if(pBaseObj == NULL) {
  578. return Error_Param;
  579. }
  580. if(HSPSClassImpl* pTmp = dynamic_cast<HSPSClassImpl*>(pBaseObj))
  581. {
  582. delete pTmp;
  583. pTmp = NULL;
  584. return Error_Succeed;
  585. }
  586. return Error_Param;
  587. }