hspscannerimpl.cpp 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801
  1. #include "hspscannerimpl.h"
  2. //#include "CkDBus.h"
  3. LOG_EXTERN()
  4. void GetModulePath(char* lpStrPath)
  5. {
  6. LOG_FUNCTION();
  7. char szBuff[MAX_PATH];
  8. Dl_info path_info;
  9. std::string strLog = "";
  10. memset(&path_info, 0x00, sizeof(path_info));
  11. memset(szBuff, 0x00, sizeof(szBuff));
  12. int iRet = dladdr((const void*)GetModulePath, &path_info);
  13. if(!iRet)
  14. {
  15. return;
  16. }
  17. else
  18. {
  19. strcpy(szBuff, path_info.dli_fname);
  20. char *pLast=strrchr(szBuff, '/'); //find last '/'
  21. if(nullptr != pLast) *pLast = 0; //cut
  22. strcat(szBuff, "/"); //
  23. if(nullptr != lpStrPath)
  24. {
  25. strcpy(lpStrPath, szBuff);
  26. }
  27. }
  28. }
  29. HSPSClassImpl::HSPSClassImpl():
  30. m_pDll(nullptr)
  31. ,m_bDevOpen(false)
  32. ,m_bPreview(false)
  33. ,m_bShow(false)
  34. ,m_nPort(-1)
  35. ,m_strIniPath("")
  36. ,m_strDllPath("")
  37. {
  38. LOG_FUNCTION();
  39. memset(m_strModulePath, 0x00, sizeof(m_strModulePath));
  40. GetModulePath(m_strModulePath); //获取so所在路径
  41. m_strIniPath = m_strModulePath;
  42. m_strIniPath += "CK-VTM-E1000.INI";
  43. m_strDllPath = m_strModulePath;
  44. m_nX = 1280;
  45. m_nY = 0;
  46. m_nWidth = 1920;
  47. }
  48. HSPSClassImpl::~HSPSClassImpl()
  49. {
  50. LOG_FUNCTION();
  51. DevClose();
  52. if(m_pDll != nullptr)
  53. {
  54. delete m_pDll;
  55. }
  56. m_bDevOpen = false;
  57. m_bPreview = false;
  58. m_bShow = false;
  59. }
  60. int HSPSClassImpl::ErrorCodeConvert(int nErrorCode)
  61. {
  62. switch (nErrorCode) {
  63. case FR_RET_SUCC:
  64. return DEP_SUCCESS;
  65. case FR_RET_FAIL:
  66. return DEP_NO_E_HSPSCANNER_FR_RET_FAIL;
  67. case FR_RET_PARA:
  68. return DEP_NO_E_HSPSCANNER_FR_RET_PARA;
  69. case FR_RET_NDEV:
  70. return DEP_NO_E_HSPSCANNER_FR_RET_NDEV;
  71. case FR_RET_NINI:
  72. return DEP_NO_E_HSPSCANNER_FR_RET_NINI;
  73. case FR_RET_BUSY:
  74. return DEP_NO_E_HSPSCANNER_FR_RET_BUSY;
  75. case FR_RET_DATA:
  76. return DEP_NO_E_HSPSCANNER_FR_RET_DATA;
  77. case FR_RET_NLNK:
  78. return DEP_NO_E_HSPSCANNER_FR_RET_NLNK;
  79. case FR_RET_NMEM:
  80. return DEP_NO_E_HSPSCANNER_FR_RET_NMEM;
  81. case FR_RET_ARDY:
  82. return DEP_NO_E_HSPSCANNER_FR_RET_ARDY;
  83. default:
  84. return DEP_ERROR_CODE_UNRECOGNIZABLE;
  85. }
  86. }
  87. ErrorCodeEnum HSPSClassImpl::DevOpen()
  88. {
  89. LOG_FUNCTION();
  90. //LogM("HSPSClassImpl::Entry->HSPS DevOpen()!");
  91. int iRet;
  92. CHAR strDllPath[256] = {0};
  93. char sDevInfo[64+1] = {0};
  94. char sID[1024] = {0};
  95. const char * tmpStr = "libBHCamBase.so";
  96. strncat(strDllPath, "libBHCamBase.so",strlen(tmpStr));
  97. m_pDll = new CDevDllLoad(strDllPath);
  98. if (nullptr == m_pDll)
  99. {
  100. LogM("HSPSClassImpl::Entry->HSPS DevOpen() new object CDevDllLoad failed!");
  101. SaveErrorInfo("厂家库libBHCamBase.so调用失败", DEP_DLL_NOT_FOUND, __PRETTY_FUNCTION__, __LINE__);
  102. return Error_DevNotAvailable;
  103. }
  104. // if(m_bDevOpen)
  105. // {
  106. // LogM("HSPSClassImpl::DevOpen() already open");
  107. // SaveErrorInfo("高拍仪已经打开", DEP_ALREADY_EXIST, __PRETTY_FUNCTION__, __LINE__);
  108. // return Error_DevAlreadyConnected;
  109. // }
  110. iRet = m_pDll->HIGH_StartCamera();
  111. //记日志
  112. if(iRet != FR_RET_SUCC)
  113. {
  114. LogM("HSPSClassImpl::Entry->HSPS DevOpen()->m_pDll->HIGH_StartCamera() failed! <=> iRet = %d",iRet);
  115. m_bDevOpen = false;
  116. CHAR strMsg[MAX_DEV_ERROR_MSG_LEN] = {0};
  117. sprintf(strMsg, "设备打开失败,HIGH_StartCamera() =[%d] ", iRet);
  118. SaveErrorInfo(strMsg, ErrorCodeConvert(iRet), __PRETTY_FUNCTION__, __LINE__);
  119. return Error_DevNotAvailable;
  120. }
  121. LogM("HSPSClassImpl::Entry->HSPS DevOpen()->m_pDll->HIGH_StartCamera() success! <=> iRet = %d",iRet);
  122. m_bDevOpen = true;
  123. memset(sDevInfo, 0, sizeof(sDevInfo));
  124. memset(sID, 0, sizeof(sID));
  125. iRet = m_pDll->HIGH_GetFirmwareVersion(sDevInfo);
  126. if (iRet == FR_RET_SUCC)
  127. {
  128. LogM("HSPSClassImpl::Leave->HSPS DevOpen()->m_pDll->HIGH_GetFirmwareVersion sucessfull!");
  129. }
  130. m_pDll->HIGH_SetCameraPixel(3264,2448);
  131. return Error_Succeed;
  132. }
  133. ErrorCodeEnum HSPSClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
  134. {
  135. LOG_FUNCTION();
  136. LogM("HSPSClassImpl::Entry->HSPS GetDevCategory()!");
  137. int iRet = 0;
  138. char szDevInfo[128] = {0};
  139. char sID[1024] = {0};
  140. //记日志
  141. memset(devCategory.szType, 0, MAX_DEV_TYPE_LEN);
  142. memset(devCategory.szModel, 0, MAX_DEV_MODEL_LEN);
  143. memset(devCategory.szVendor, 0, MAX_DEV_VENDOR_LEN);
  144. memset(szDevInfo, 0, sizeof(szDevInfo));
  145. memset(sID, 0, sizeof(sID));
  146. iRet = m_pDll->HIGH_GetFirmwareVersion(szDevInfo);
  147. if(iRet == FR_RET_SUCC)
  148. {
  149. snprintf(devCategory.szType,sizeof (devCategory.szType) ,"PVER=Kai-wang#MID=%s", szDevInfo);
  150. }
  151. else
  152. {
  153. //memcpy(devCategory.szType, "PVER=Wellcom#MID=JZT-998APB-V20_V1.0.4.1_SC_[20150320]", strlen("PVER=Wellcom#MID=JZT-998APB-V20_V1.0.4.1_SC_[20150320]"));
  154. SaveErrorInfo("获取固件版本失败",ErrorCodeConvert(iRet),__PRETTY_FUNCTION__,__LINE__);
  155. return Error_DevConnFailed;
  156. }
  157. memcpy(devCategory.szVendor, "keba", strlen("keba"));
  158. LogM("devCategory.szType = %s",devCategory.szType);
  159. LogM("devCategory.szVendor = %s",devCategory.szVendor);
  160. LogM("HSPSClassImpl::Leave->HSPS GetDevCategory() sucessfull!");
  161. return Error_Succeed;
  162. }
  163. ErrorCodeEnum HSPSClassImpl::Reset()
  164. {
  165. LOG_FUNCTION();
  166. LogM("HSPSClassImpl::Entry->HSPS Reset()!");
  167. DevClose();
  168. LogM("HSPSClassImpl::Leave->HSPS Reset() sucessfull!");
  169. return DevOpen();
  170. }
  171. ErrorCodeEnum HSPSClassImpl::DevClose()
  172. {
  173. LOG_FUNCTION();
  174. int iRet = -1;
  175. LogM("HSPSClassImpl::Entry->HSPS DevClose()!");
  176. if(!m_bDevOpen)
  177. {
  178. return Error_Succeed;
  179. }
  180. //CLOSEDEV();
  181. iRet = m_pDll->HIGH_CloseWindow();
  182. if(iRet != FR_RET_SUCC)
  183. {
  184. CHAR strMsg[MAX_DEV_ERROR_MSG_LEN] = {0};
  185. sprintf(strMsg, "窗口关闭失败,HIGH_CloseWindow() =[%d] ", iRet);
  186. SaveErrorInfo(strMsg, ErrorCodeConvert(iRet), __PRETTY_FUNCTION__, __LINE__);
  187. }
  188. iRet = m_pDll->HIGH_StopCamera();
  189. if(iRet != FR_RET_SUCC)
  190. {
  191. CHAR strMsg[MAX_DEV_ERROR_MSG_LEN] = {0};
  192. sprintf(strMsg, "摄像头关闭失败,HIGH_StopCamera() =[%d] ", iRet);
  193. SaveErrorInfo(strMsg, ErrorCodeConvert(iRet), __PRETTY_FUNCTION__, __LINE__);
  194. }
  195. if(iRet == FR_RET_SUCC)
  196. m_bPreview = false;
  197. m_pDll->FreeDLL();
  198. m_bDevOpen = false;
  199. LogM("HSPSClassImpl::Leave->HSPS DevClose() sucessfull!");
  200. return Error_Succeed;
  201. }
  202. ErrorCodeEnum HSPSClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
  203. {
  204. /*LOG_FUNCTION();
  205. LogM("HSPSClassImpl::Entry->HSPS GetLastErr()!");
  206. devErrInfo.dwErrMsgLen = 0;
  207. memset(devErrInfo.szErrMsg, 0, sizeof(devErrInfo.szErrMsg));
  208. devErrInfo.dwErrMsgLen = (m_shErrCode << 16);
  209. sprintf(devErrInfo.szErrMsg, m_szErrMsg);
  210. devErrInfo.dwErrMsgLen += (strlen(devErrInfo.szErrMsg) & 0x0000FFFF);
  211. LogM("devErrInfo.szErrMsg = %s",devErrInfo.szErrMsg);
  212. LogM("HSPSClassImpl::Leave->HSPS GetLastErr() sucessfull!");
  213. return Error_Succeed;*/
  214. LOG_FUNCTION();
  215. devErrInfo.dwErrMsgLen = strlen(m_szErrMsg);
  216. memset(devErrInfo.szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
  217. memcpy(devErrInfo.szErrMsg, m_szErrMsg, devErrInfo.dwErrMsgLen<MAX_DEV_ERROR_MSG_LEN? devErrInfo.dwErrMsgLen:MAX_DEV_ERROR_MSG_LEN);
  218. return Error_Succeed;
  219. }
  220. ErrorCodeEnum HSPSClassImpl::SetParam(ParamType type, ParamTypeValue value)
  221. {
  222. LOG_FUNCTION();
  223. int iRet = -1;
  224. if(!m_bDevOpen)
  225. {
  226. SaveErrorInfo("SetParam设备未打开,设置参数失败",DEP_DEV_CONNECT_FAILED, __PRETTY_FUNCTION__, __LINE__);
  227. LogM("HSPSClassImpl::leave HSPS->SetParam() failed 设备未打开");
  228. return Error_DevNotAvailable;
  229. }
  230. LogM("HSPSClassImpl::SetParam(type=%d,value=%d),line=%d",type,value,__LINE__);
  231. if(type == HSPS_MODEL_COLOR)
  232. {
  233. if(value == HSPS_COLOR_FULL)
  234. iRet = m_pDll->HIGH_SetColorType(0);
  235. else if (value == HSPS_COLOR_GREY) {
  236. iRet = m_pDll->HIGH_SetColorType(1);
  237. }
  238. else {
  239. CHAR strMsg[MAX_DEV_ERROR_MSG_LEN] = {0};
  240. sprintf(strMsg, "SetParam输入色彩参数有误,type[%d] value[%d]", type, value);
  241. SaveErrorInfo(strMsg, DEP_INVALID_PARAMETER, __PRETTY_FUNCTION__, __LINE__);
  242. LogM("HSPSClassImpl::leave HSPS->SetParam(COLOR) ParamTypeValue error(%d)", value);
  243. return Error_Param;
  244. }
  245. if(iRet != FR_RET_SUCC)
  246. {
  247. CHAR strMsg[MAX_DEV_ERROR_MSG_LEN] = {0};
  248. sprintf(strMsg, "SetParam色彩设置失败,type[%d] value[%d],return[%d]", type, value,iRet);
  249. SaveErrorInfo(strMsg, ErrorCodeConvert(iRet), __PRETTY_FUNCTION__, __LINE__);
  250. LogM("HSPSClassImpl::SetParam(type=%d,value=%d) = [%d] HIGH_SetAutoCrop error,line=%d",type,value,iRet,__LINE__);
  251. return Error_DevMedia;
  252. }
  253. }
  254. else if (type == HSPS_MODEL_ROTATE)
  255. {
  256. if(value == HSPS_ROTATE_NOANGLE)
  257. iRet = m_pDll->HIGH_SetRotateSize(0);
  258. else if (value == HSPS_ROTATE_LEFT)
  259. iRet = m_pDll->HIGH_SetRotateSize(1);
  260. else if (value == HSPS_ROTATE_MIRROR)
  261. iRet = m_pDll->HIGH_SetRotateSize(2);
  262. else if (value == HSPS_ROTATE_RIGHT)
  263. iRet = m_pDll->HIGH_SetRotateSize(3);
  264. else {
  265. CHAR strMsg[MAX_DEV_ERROR_MSG_LEN] = {0};
  266. sprintf(strMsg, "SetParam输入旋转方向参数有误,type[%d] value[%d]", type, value);
  267. SaveErrorInfo(strMsg, DEP_INVALID_PARAMETER, __PRETTY_FUNCTION__, __LINE__);
  268. LogM("HSPSClassImpl::leave HSPS->SetParam(ROTATE) ParamTypeValue error(%d)", value);
  269. return Error_Param;
  270. }
  271. if(iRet != FR_RET_SUCC)
  272. {
  273. CHAR strMsg[MAX_DEV_ERROR_MSG_LEN] = {0};
  274. sprintf(strMsg, "SetParam图像旋转失败,type[%d] value[%d],return[%d]", type, value,iRet);
  275. SaveErrorInfo(strMsg, ErrorCodeConvert(iRet), __PRETTY_FUNCTION__, __LINE__);
  276. LogM("HSPSClassImpl::SetParam(type=%d,value=%d) = [%d] HIGH_SetAutoCrop error,line=%d",type,value,iRet,__LINE__);
  277. return Error_DevMedia;
  278. }
  279. }
  280. else if (type == HSPS_MODEL_SCANSIZE)
  281. {
  282. //自动纠偏
  283. if(value == HSPS_SCAN_FULL){
  284. iRet = m_pDll->HIGH_SetAutoCrop(false);
  285. }
  286. //
  287. else if (value == HSPS_SCAN_A4){
  288. iRet = m_pDll->HIGH_SetAutoCrop(false);
  289. }
  290. //
  291. else if (value == HSPS_SCAN_IDCARD){
  292. iRet = m_pDll->HIGH_SetAutoCrop(true);
  293. }
  294. //
  295. else {
  296. CHAR strMsg[MAX_DEV_ERROR_MSG_LEN] = {0};
  297. sprintf(strMsg, "SetParam自动纠偏参数有误,type[%d] value[%d]", type, value);
  298. SaveErrorInfo(strMsg, DEP_INVALID_PARAMETER, __PRETTY_FUNCTION__, __LINE__);
  299. LogM("HSPSClassImpl::leave HSPS->SetParam(SCANSIZE) ParamTypeValue error(%d)", value);
  300. return Error_Param;
  301. }
  302. if(iRet != FR_RET_SUCC)
  303. {
  304. CHAR strMsg[MAX_DEV_ERROR_MSG_LEN] = {0};
  305. sprintf(strMsg, "SetParam自动纠偏设置失败,type[%d] value[%d],return[%d]", type, value,iRet);
  306. SaveErrorInfo(strMsg, ErrorCodeConvert(iRet), __PRETTY_FUNCTION__, __LINE__);
  307. LogM("HSPSClassImpl::SetParam(type=%d,value=%d) = [%d] HIGH_SetAutoCrop error,line=%d",type,value,iRet,__LINE__);
  308. return Error_DevMedia;
  309. }
  310. }
  311. else if (type == HSPS_MODEL_VIEW)
  312. {
  313. if(value == HSPS_VIEW_HIDE)
  314. iRet = m_pDll->HIGH_HideWindow(1);
  315. else if (value == HSPS_VIEW_SHOW)
  316. iRet = m_pDll->HIGH_HideWindow(0);
  317. else {
  318. CHAR strMsg[MAX_DEV_ERROR_MSG_LEN] = {0};
  319. sprintf(strMsg, "SetParam显示隐藏参数有误,type[%d] value[%d]", type, value);
  320. SaveErrorInfo(strMsg, DEP_INVALID_PARAMETER, __PRETTY_FUNCTION__, __LINE__);
  321. LogM("HSPSClassImpl::leave HSPS->SetParam(VIEW) ParamTypeValue error(%d)", value);
  322. return Error_Param;
  323. }
  324. if(iRet != FR_RET_SUCC)
  325. {
  326. CHAR strMsg[MAX_DEV_ERROR_MSG_LEN] = {0};
  327. sprintf(strMsg, "显示隐藏设置失败,type[%d] value[%d],return[%d]", type, value,iRet);
  328. SaveErrorInfo(strMsg, ErrorCodeConvert(iRet), __PRETTY_FUNCTION__, __LINE__);
  329. LogM("HSPSClassImpl::SetParam(type=%d,value=%d) = [%d] HIGH_SetAutoCrop error,line=%d",type,value,iRet,__LINE__);
  330. return Error_DevMedia;
  331. }
  332. }
  333. else
  334. {
  335. CHAR strMsg[MAX_DEV_ERROR_MSG_LEN] = {0};
  336. sprintf(strMsg, "SetParam类型参数有误,type[%d] value[%d]", type, value);
  337. SaveErrorInfo(strMsg, DEP_INVALID_PARAMETER, __PRETTY_FUNCTION__, __LINE__);
  338. LogM("HSPSClassImpl::leave HSPS->SetParam error(%d)", type);
  339. return Error_Param;
  340. }
  341. // if(iRet != FR_RET_SUCC)
  342. // {
  343. // SaveErrorInfo(iRet);
  344. // LogM("HSPSClassImpl::SetParam(type=%d,value=%d) = [%d] error,line=%d",type,value,iRet,__LINE__);
  345. // return Error_DevMedia;
  346. // }
  347. return Error_Succeed;
  348. }
  349. ErrorCodeEnum HSPSClassImpl::SetPreview(short nValue)
  350. {
  351. LOG_FUNCTION();
  352. LogM("HSPSClassImpl::SetPreview(nValue=%d),line=%d",nValue,__LINE__);
  353. int iRet = -1;
  354. if(!m_bDevOpen)
  355. {
  356. SaveErrorInfo("SetPreview设备离线,打开预览失败",DEP_DEV_CONNECT_FAILED, __PRETTY_FUNCTION__, __LINE__);
  357. LogM("HSPSClassImpl::leave HSPS->SetPreview() failed");
  358. return Error_DevNotAvailable;
  359. }
  360. if(nValue == 1)
  361. {
  362. m_pDll->HIGH_GetStatus( &DevStatus);
  363. if(FR_DS_ONLINE==DevStatus)
  364. {
  365. iRet = m_pDll->HIGH_CreateWindow(m_nX, m_nY, m_nWidth, m_nHeight);
  366. if(iRet == FR_RET_SUCC)
  367. {
  368. m_bShow = 1;
  369. m_bPreview = true;
  370. }
  371. }
  372. else {
  373. LogM("HSPSClassImpl::SetPreview() DevStatus = [%d] DevError:1->OFFLIN,2->BUSY,3->HARDWAREERROR,4->UNKNOW,line=%d",DevStatus,__LINE__);
  374. CHAR strMsg[MAX_DEV_ERROR_MSG_LEN] = {0};
  375. sprintf(strMsg, "SetPreview设备状态异常,HIGH_GetStatus() =[%d] ", DevStatus);
  376. SaveErrorInfo(strMsg, DEP_DEV_CONNECT_FAILED, __PRETTY_FUNCTION__, __LINE__);
  377. return Error_DevMedia;
  378. }
  379. }
  380. else if (nValue == 0)
  381. {
  382. iRet = m_pDll->HIGH_CloseWindow();
  383. if(iRet == FR_RET_SUCC)
  384. {
  385. m_bShow = 0;
  386. m_bPreview = false;
  387. }
  388. else
  389. {
  390. CHAR strMsg[MAX_DEV_ERROR_MSG_LEN] = {0};
  391. sprintf(strMsg, "SetPreview关闭窗口失败,HIGH_CloseWindow() =[%d] ", iRet);
  392. SaveErrorInfo(strMsg, ErrorCodeConvert(iRet), __PRETTY_FUNCTION__, __LINE__);
  393. return Error_DevMedia;
  394. }
  395. }
  396. else {
  397. SaveErrorInfo("SetPreview参数错误",DEP_INVALID_PARAMETER, __PRETTY_FUNCTION__, __LINE__ );
  398. LogM("HSPSClassImpl::leave HSPS->SetPreview(%d) error", nValue);
  399. return Error_Param;
  400. }
  401. if(iRet != FR_RET_SUCC)
  402. {
  403. LogM("HSPSClassImpl::SetPreview(value=%d) = [%d] error,line=%d",nValue,iRet,__LINE__);
  404. return Error_DevMedia;
  405. }
  406. return Error_Succeed;
  407. }
  408. ErrorCodeEnum HSPSClassImpl::ScanImage(const char* pszFileName)
  409. {
  410. LOG_FUNCTION();
  411. LogM("HSPSClassImpl::ScanImage(pszFileName=%s),line=%d",pszFileName,__LINE__);
  412. int iRet = -1;
  413. if(!m_bDevOpen)
  414. {
  415. SaveErrorInfo("ScanImage设备未打开,打开预览失败",DEP_DEV_CONNECT_FAILED, __PRETTY_FUNCTION__, __LINE__);
  416. LogM("HSPSClassImpl::leave HSPS->ScanImage() failed 设备未打开");
  417. return Error_DevNotAvailable;
  418. }
  419. if(!m_bPreview)
  420. {
  421. SaveErrorInfo("ScanImage设备不在预览状态",DEP_NO_E_HSPSCANNER_NOT_IN_PREVIEW, __PRETTY_FUNCTION__, __LINE__);
  422. LogM("HSPSClassImpl::leave HSPS->ScanImage() failed 设备不在预览状态");
  423. return Error_DevNotAvailable;
  424. }
  425. iRet = m_pDll->HIGH_TakePicture(pszFileName);
  426. //iRet = m_pDll->HIGH_CreateWindow(m_nX, m_nY, 0, m_nWidth*9/16);
  427. if(iRet != FR_RET_SUCC)
  428. {
  429. CHAR strMsg[MAX_DEV_ERROR_MSG_LEN] = {0};
  430. sprintf(strMsg, "ScanImage保存图片失败,HIGH_TakePicture(%s) =[%d] ",pszFileName,iRet);
  431. SaveErrorInfo(strMsg,ErrorCodeConvert(iRet), __PRETTY_FUNCTION__, __LINE__);
  432. LogM("HSPSClassImpl::ScanImage(pszFileName=%s) = [%d] error,line=%d",pszFileName,iRet,__LINE__);
  433. return Error_DevMedia;
  434. }
  435. iRet = m_pDll->HIGH_HideWindow(TRUE);
  436. if(iRet != FR_RET_SUCC)
  437. {
  438. CHAR strMsg[MAX_DEV_ERROR_MSG_LEN] = {0};
  439. sprintf(strMsg, "ScanImage结束后,隐藏窗口失败,HIGH_HideWindow(TRUE) =[%d] ",iRet);
  440. SaveErrorInfo(strMsg,ErrorCodeConvert(iRet), __PRETTY_FUNCTION__, __LINE__);
  441. LogM("HSPSClassImpl::ScanImage(pszFileName=%s) = [%d] error,line=%d",pszFileName,iRet,__LINE__);
  442. return Error_DevMedia;
  443. }
  444. m_bShow = 0;
  445. return Error_Succeed;
  446. }
  447. ErrorCodeEnum HSPSClassImpl::ScanImageEx(BYTE* pBtImg, int& nBtLen, const char* pszFileName)
  448. {
  449. LOG_FUNCTION();
  450. LogM("HSPSClassImpl::ScanImageEx(pBtImg, nBtLen=[%d], pszFileName=[%s])", nBtLen, pszFileName);
  451. int iRet = -1;
  452. if(!m_bDevOpen)
  453. {
  454. SaveErrorInfo("ScanImageEx设备未打开,打开预览失败",DEP_DEV_CONNECT_FAILED, __PRETTY_FUNCTION__, __LINE__);
  455. LogM("HSPSClassImpl::leave HSPS->ScanImageEx() failed 设备未打开");
  456. return Error_DevNotAvailable;
  457. }
  458. if(!m_bPreview)
  459. {
  460. SaveErrorInfo("ScanImageEx设备不在预览状态",DEP_NO_E_HSPSCANNER_NOT_IN_PREVIEW, __PRETTY_FUNCTION__, __LINE__);
  461. LogM("HSPSClassImpl::leave HSPS->ScanImageEx() failed 设备不在预览状态");
  462. return Error_DevNotAvailable;
  463. }
  464. iRet = m_pDll->HIGH_TakePicture("tmp.jpg");
  465. if(iRet != FR_RET_SUCC)
  466. {
  467. CHAR strMsg[MAX_DEV_ERROR_MSG_LEN] = {0};
  468. sprintf(strMsg, "ScanImageEx保存临时图片失败,HIGH_TakePicture(tmp.jpg) =[%d] ",iRet);
  469. SaveErrorInfo(strMsg,ErrorCodeConvert(iRet), __PRETTY_FUNCTION__, __LINE__);
  470. LogM("HSPSClassImpl::ScanImageEx HIGH_TakePicture = [%d] error,line=%d",iRet,__LINE__);
  471. return Error_DevMedia;
  472. }
  473. iRet = m_pDll->HIGH_HideWindow(TRUE);
  474. if(iRet != FR_RET_SUCC)
  475. {
  476. CHAR strMsg[MAX_DEV_ERROR_MSG_LEN] = {0};
  477. sprintf(strMsg, "ScanImageEx结束后,隐藏窗口失败,HIGH_HideWindow(TRUE) =[%d] ",iRet);
  478. SaveErrorInfo(strMsg,ErrorCodeConvert(iRet), __PRETTY_FUNCTION__, __LINE__);
  479. LogM("HSPSClassImpl::ScanImageEx HIGH_HideWindow = [%d] error,line=%d",iRet,__LINE__);
  480. return Error_DevMedia;
  481. }
  482. m_bShow = 0;
  483. //读取tmp.jpg为字节流
  484. FILE *fp = NULL;
  485. char* pFileData = NULL;
  486. int file_size = 0;
  487. fp = fopen("tmp.jpg","rb");
  488. if(fp != NULL)
  489. {
  490. fseek(fp, 0, SEEK_END);
  491. file_size = ftell(fp);
  492. fseek(fp, 0, SEEK_SET);
  493. pFileData = new char[file_size+1];
  494. fread(pFileData, 1, file_size, fp);
  495. fclose(fp);
  496. }
  497. else {
  498. SaveErrorInfo("读取 tmp.jpg 失败",DEP_FILE_NOT_FOUND, __PRETTY_FUNCTION__, __LINE__);
  499. LogM("HSPSClassImpl::leave HSPS->ScanImageEx() failed 读取 tmp.jpg 失败");
  500. return Error_NoTarget;
  501. }
  502. //memcpy(pBtImg, pFileData, file_size);
  503. pBtImg = (BYTE*)pFileData;
  504. nBtLen = file_size;
  505. if(nullptr != pszFileName && strlen(pszFileName) > 0)
  506. {
  507. string command = "cp ";
  508. command += "tmp.jpg";
  509. command += " ";
  510. command += pszFileName;
  511. system((char*)command.c_str());
  512. }
  513. remove("tmp.jpg");
  514. if(nBtLen < file_size)
  515. {
  516. memcpy(pBtImg, pFileData, file_size);
  517. nBtLen = file_size;
  518. SaveErrorInfo("图片大小超限",DEP_LENGTH_LIMIT_EXCEEDED, __PRETTY_FUNCTION__, __LINE__);
  519. LogM("ScanImageEx()->nBtLen[%d] < file_size[%d]",nBtLen,file_size);
  520. return Error_TooSmallBuffer;
  521. }
  522. memcpy(pBtImg, pFileData, file_size);
  523. nBtLen = file_size;
  524. return Error_Succeed;
  525. }
  526. ErrorCodeEnum HSPSClassImpl::SetViewPos(int nX, int nY, int nWidth)
  527. {
  528. LOG_FUNCTION();
  529. LogM("HSPSClassImpl::SetViewPos(nX=%d, nY=%d, nWidth=%d),line=%d",nX, nY, nWidth,__LINE__);
  530. int iRet = -1;
  531. if(!m_bDevOpen)
  532. {
  533. SaveErrorInfo("SetViewPos设备未打开,设置失败",DEP_DEV_CONNECT_FAILED, __PRETTY_FUNCTION__, __LINE__);
  534. LogM("HSPSClassImpl::leave HSPS->ScanImageEx() failed 设备未打开");
  535. return Error_DevNotAvailable;
  536. }
  537. if(nX >= 0 && nY >= 0 )
  538. {
  539. m_nX = nX;
  540. m_nY = nY;
  541. if(nWidth > 0)
  542. {
  543. m_nWidth = nWidth;
  544. if (m_nWidth*9/16 <= 1)
  545. m_nHeight = 1;
  546. else
  547. {
  548. m_nHeight = m_nWidth*9/16;
  549. }
  550. }
  551. }
  552. else
  553. {
  554. CHAR strMsg[MAX_DEV_ERROR_MSG_LEN] = {0};
  555. sprintf(strMsg, "SetViewPos坐标参数有误,nX[%d] nY[%d]",nX,nY);
  556. SaveErrorInfo(strMsg,DEP_INVALID_PARAMETER, __PRETTY_FUNCTION__, __LINE__);
  557. LogM("HSPSClassImpl::leave HSPS->SetViewPos() failed");
  558. return Error_Param;
  559. }
  560. //iRet = m_pDll->HIGH_PauseAndPlay(true);
  561. if(m_bPreview)
  562. {
  563. if(nWidth > 0)
  564. {
  565. LogM("HSPSClassImpl::SetViewPos(nWidth) = [%d] error,line=%d",nWidth,__LINE__);
  566. iRet = m_pDll->HIGH_CloseWindow();
  567. iRet = m_pDll->HIGH_CreateWindow(m_nX, m_nY, m_nWidth, m_nHeight);
  568. }
  569. else if( nWidth == 0)
  570. {
  571. LogM("HSPSClassImpl::SetViewPos(nWidth) = [%d] error,line=%d",nWidth,__LINE__);
  572. iRet = m_pDll->HIGH_CloseWindow();
  573. iRet = m_pDll->HIGH_CreateWindow(m_nX, m_nY, 1, 2);
  574. }
  575. else
  576. {
  577. CHAR strMsg[MAX_DEV_ERROR_MSG_LEN] = {0};
  578. sprintf(strMsg, "SetViewPos宽度参数有误,nWidth[%d]",nWidth);
  579. SaveErrorInfo(strMsg,DEP_INVALID_PARAMETER, __PRETTY_FUNCTION__, __LINE__);
  580. LogM("HSPSClassImpl::leave HSPS->SetViewPos() failed");
  581. return Error_Param;
  582. }
  583. }
  584. return Error_Succeed;
  585. }
  586. ErrorCodeEnum HSPSClassImpl::SetProperty()
  587. {
  588. return Error_Succeed;
  589. }
  590. ErrorCodeEnum HSPSClassImpl::GetDevStatus(HspsDevStatus& status)
  591. {
  592. LOG_FUNCTION();
  593. status.inPreview = (short)m_bPreview;
  594. status.inShow = (short)m_bShow;
  595. m_pDll->HIGH_GetStatus( &DevStatus);
  596. LogM("HSPSClassImpl::HIGH_GetStatus() = [%d] success!,line=%d",DevStatus,__LINE__);
  597. if(DevStatus == 1)
  598. {
  599. status.isConnected = 0;
  600. }
  601. else {
  602. status.isConnected = 1;
  603. }
  604. LogM("HSPSClassImpl::GetDevStatus success! inPreview = [%d] inShow = [%d] isConnected = [isConnected]",status.inPreview,status.inShow,status.isConnected);
  605. return Error_Succeed;
  606. }
  607. void HSPSClassImpl::SaveErrorInfo(CHAR* errMsg, int errCode, const CHAR* strFunc, int nLine)
  608. {
  609. CHAR chJson[MAX_DEV_ERROR_MSG_LEN] = {0};
  610. sprintf(chJson, "Func:%s,Line:%d,Msg:%s", strFunc, nLine, errMsg);
  611. memset(m_szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
  612. sprintf(m_szErrMsg, "{\"Errcode\":%d,\"Description\":%s}", errCode,chJson);
  613. LogM(m_szErrMsg);
  614. /*
  615. CHAR chJson[MAX_DEV_ERROR_MSG_LEN] = {0};
  616. QJsonObject root_Obj;
  617. QJsonDocument root_Doc;
  618. sprintf(chJson, "Func:%s,Line:%d,Msg:%s", strFunc, nLine, errMsg);
  619. root_Obj.insert("ErrCode", errCode);
  620. root_Obj.insert("Description", chJson);
  621. root_Doc.setObject(root_Obj);
  622. //QByteArray root_str = root_Doc.toJson(QJsonDocument::Compact); //紧凑格式
  623. QByteArray root_str = root_Doc.toJson(QJsonDocument::Indented); //标准JSON格式 QString strJson(root_str);
  624. QString strJson(root_str);
  625. //QByteArray ba = strJson.toLatin1();
  626. //char* sErrMsg = ba.data();
  627. //memset(m_szErrMsg, 0x00, sizeof(m_szErrMsg));
  628. //sprintf(m_szErrMsg, sErrMsg);
  629. //LogM(m_szErrMsg);
  630. memset(m_szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
  631. sprintf(m_szErrMsg, strJson.toUtf8().data());
  632. LogM(m_szErrMsg);
  633. */
  634. }
  635. /*void HSPSClassImpl::SaveErrorInfo(CHAR* errMsg, int errCode)
  636. {
  637. LOG_FUNCTION();
  638. LogM("HSPSClassImpl::Entry->HSPS SaveErrorInfo(CHAR* errMsg, int errCode)! <=> errMsg = %s errCode = %d",errMsg,errCode);
  639. memset(m_szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
  640. snprintf(m_szErrMsg, sizeof (m_szErrMsg),"%s[%d]", errMsg, errCode);
  641. LogM("HSPSClassImpl::Leave->HSPS DevOpen()->m_pDll->SaveErrorInfo(CHAR* errMsg, int errCode) sucessfull!");
  642. }
  643. void HSPSClassImpl::SaveErrorInfo(DevErrorInfo devErrorInfo)
  644. {
  645. LOG_FUNCTION();
  646. LogM("HSPSClassImpl::Entry->HSPS SaveErrorInfo(DevErrorInfo devErrorInfo)! <=> devErrorInfo.szErrMsg = %s",devErrorInfo.szErrMsg);
  647. memset(m_szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
  648. snprintf(m_szErrMsg,sizeof(m_szErrMsg), "%s",devErrorInfo.szErrMsg);
  649. LogM("HSPSClassImpl::Leave->HSPS DevOpen()->m_pDll->SaveErrorInfo(DevErrorInfo devErrorInfo) sucessfull!");
  650. }
  651. void HSPSClassImpl::SaveErrorInfo(int nErrorCode)
  652. {
  653. LOG_FUNCTION();
  654. LogM("HSPSClassImpl::Entry->HSPS SaveErrorInfo(int nErrorCode)! <=> nErrorCode = %d",nErrorCode);
  655. ErrorCodeEnum ret;
  656. switch (nErrorCode)
  657. {
  658. case FR_RET_SUCC:
  659. memset(m_szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
  660. snprintf(m_szErrMsg, sizeof(m_szErrMsg),"%d:%s",FR_RET_SUCC, "成功");
  661. m_shErrCode = DEC_SUCCESS;
  662. ret = Error_Succeed;
  663. break;
  664. case FR_RET_FAIL:
  665. memset(m_szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
  666. snprintf(m_szErrMsg, sizeof(m_szErrMsg),"%d:%s",FR_RET_FAIL, "失败");
  667. m_shErrCode = DEC_EXCEPTION;
  668. ret = Error_Param;
  669. break;
  670. case FR_RET_PARA:
  671. memset(m_szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
  672. snprintf(m_szErrMsg, sizeof(m_szErrMsg),"%d:%s",FR_RET_PARA, "参数错误");
  673. m_shErrCode = DEC_INVALID_PARAMETER;
  674. ret = Error_Param;
  675. break;
  676. case FR_RET_NDEV:
  677. memset(m_szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
  678. snprintf(m_szErrMsg, sizeof(m_szErrMsg),"%d:%s",FR_RET_NDEV, "打开设备失败");
  679. m_shErrCode = DEC_DEV_NOT_FOUND;
  680. ret = Error_Param;
  681. break;
  682. case FR_RET_NINI:
  683. memset(m_szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
  684. snprintf(m_szErrMsg,sizeof(m_szErrMsg), "%d:%s",FR_RET_NINI, "未打开设备");
  685. m_shErrCode = DEC_DEV_NOT_OPENED;
  686. ret = Error_DevConnFailed;
  687. break;
  688. case FR_RET_BUSY:
  689. memset(m_szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
  690. snprintf(m_szErrMsg, sizeof(m_szErrMsg),"%d:%s",FR_RET_BUSY, "设备繁忙");
  691. m_shErrCode = DEC_DEV_NOT_OPENED;
  692. ret = Error_NotInit;
  693. break;
  694. case FR_RET_DATA:
  695. memset(m_szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
  696. snprintf(m_szErrMsg, sizeof(m_szErrMsg),"%d:%s",FR_RET_DATA, "图像数据不正确");
  697. m_shErrCode = DEC_INVALID_PARAMETER;
  698. ret = Error_Param;
  699. break;
  700. case FR_RET_NLNK:
  701. memset(m_szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
  702. snprintf(m_szErrMsg, sizeof(m_szErrMsg),"%d:%s",FR_RET_NLNK, "设备断开");
  703. m_shErrCode = DEC_DEV_NOT_OPENED;
  704. ret = Error_Param;
  705. break;
  706. case FR_RET_NMEM:
  707. memset(m_szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
  708. snprintf(m_szErrMsg, sizeof(m_szErrMsg),"%d:%s",FR_RET_NMEM, "内存分配失败");
  709. m_shErrCode = DEC_NULL_POINTER;
  710. ret = Error_Param;
  711. break;
  712. case FR_RET_ARDY:
  713. memset(m_szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
  714. snprintf(m_szErrMsg,sizeof(m_szErrMsg), "%d:%s",FR_RET_ARDY, "已经打开设备");
  715. m_shErrCode = DEC_RESET_FAILED;
  716. ret = Error_Param;
  717. break;
  718. default:
  719. memset(m_szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
  720. snprintf(m_szErrMsg, sizeof(m_szErrMsg),"%d:%s",nErrorCode, "其它未定义的错误");
  721. m_shErrCode = DEC_ERROR_CODE_UNRECOGNIZABLE;
  722. ret = Error_Param;
  723. break;
  724. }
  725. LogM("HSPSClassImpl::Leave->HSPS DevOpen()->m_pDll->SaveErrorInfo(int nErrorCode) sucessfull!");
  726. }*/