hspscanner.nantian.1.1.cpp 60 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473
  1. #include "hspscanner.nantian.1.1.h"
  2. #include "Gvar.h"
  3. Gvar *g_var = NULL;
  4. //获取高拍仪的pid和vid来确认设备是否在线
  5. colorType g_color = cFULL;
  6. sizeType g_size = sErr;
  7. positionType g_position = pNOANGLE;
  8. int g_X=-1, g_Y=-1, g_Width=-1, g_Height=-1;
  9. BOOL g_isshow = FALSE;
  10. BOOL g_ishide = TRUE;
  11. BOOL m_isOnline = FALSE;
  12. DevErrorInfo m_Error; //标记错误码
  13. char Idx[100] = "";
  14. char Idy[100] = "";
  15. char IdWidth[100] = "";
  16. char IdHeight[100] = "";
  17. char g_IniPath[1024] = "";
  18. int g_SetPara = -1;
  19. #include <sys/stat.h>
  20. #include <unistd.h>
  21. #include <stdlib.h>
  22. #include <dirent.h>
  23. #include <limits.h>
  24. #include <limits.h>
  25. #include "log4vendor.h"
  26. #include <fstream>
  27. using namespace std;
  28. int FileSize(const char* fname)
  29. {
  30. struct stat statbuf;
  31. if(stat(fname,&statbuf)==0)
  32. return statbuf.st_size;
  33. return -1;
  34. }
  35. int FileSizeEx(const char* fname)
  36. {
  37. // 1. 打开图片文件
  38. ifstream is(fname, ifstream::in | ios::binary);
  39. // 2. 计算图片长度
  40. is.seekg(0, is.end); //将文件流指针定位到流的末尾
  41. int length = is.tellg();
  42. is.seekg(0, is.beg); //将文件流指针重新定位到流的开始
  43. return length;
  44. }
  45. int GetFileSizeEx(const char* fname)
  46. {
  47. unsigned long lsize = -1;
  48. FILE *fp = NULL;
  49. fp = fopen(fname,"r");
  50. if (fp == NULL)
  51. return lsize;
  52. fseek(fp,0L,SEEK_END);
  53. lsize = ftell(fp);
  54. fclose(fp);
  55. return lsize;
  56. }
  57. bool is_dir(const char *path)
  58. {
  59. struct stat statbuf;
  60. if(lstat(path, &statbuf) ==0)//lstat返回文件的信息,文件信息存放在stat结构中
  61. {
  62. return S_ISDIR(statbuf.st_mode) != 0;//S_ISDIR宏,判断文件类型是否为目录
  63. }
  64. return false;
  65. }
  66. //判断是否为常规文件
  67. bool is_file(const char *path)
  68. {
  69. struct stat statbuf;
  70. if(lstat(path, &statbuf) ==0)
  71. return S_ISREG(statbuf.st_mode) != 0;//判断文件是否为常规文件
  72. return false;
  73. }
  74. //判断是否是特殊目录
  75. bool is_special_dir(const char *path)
  76. {
  77. return strcmp(path, ".") == 0 || strcmp(path, "..") == 0;
  78. }
  79. //生成完整的文件路径
  80. void get_file_path(const char *path, const char *file_name, char *file_path)
  81. {
  82. strcpy(file_path, path);
  83. if(file_path[strlen(path) - 1] != '/')
  84. strcat(file_path, "/");
  85. strcat(file_path, file_name);
  86. }
  87. void CreateDir(const char *path)
  88. {
  89. int i = 0;
  90. char FilePath[100] = "";
  91. FilePath[0] = path[0];
  92. for(i= 1; i<=strlen(path); i++)
  93. {
  94. FilePath[i] = path[i];
  95. if(path[i] == '/')
  96. {
  97. if(access(FilePath, F_OK) != 0)
  98. mkdir(FilePath,ACCESSPERMS);
  99. else
  100. chmod(FilePath,ACCESSPERMS);
  101. }
  102. }
  103. }
  104. void delete_file(const char *path)
  105. {
  106. DIR *dir;
  107. dirent *dir_info;
  108. char file_path[PATH_MAX];
  109. if(is_file(path))
  110. {
  111. remove(path);
  112. return;
  113. }
  114. if(is_dir(path))
  115. {
  116. if((dir = opendir(path)) == NULL)
  117. return;
  118. while((dir_info = readdir(dir)) != NULL)
  119. {
  120. get_file_path(path, dir_info->d_name, file_path);
  121. if(is_special_dir(dir_info->d_name))
  122. continue;
  123. delete_file(file_path);
  124. rmdir(file_path);
  125. }
  126. }
  127. }
  128. void HSP_SetPara()
  129. {
  130. g_var->m_trace->WriteTrace("HSP_SetPara","设置操作:g_color=%d,g_position=%d,g_size=%d",g_color,g_position,g_size);
  131. // if (!g_isshow)
  132. // {
  133. LOG4VTM(WARN, "<HSP_SetPara> - "<<"设置操作:g_color="<<g_color);
  134. LOG4VTM(WARN, "<HSP_SetPara> - "<<"设置操作:g_position="<<g_position);
  135. LOG4VTM(WARN, "<HSP_SetPara> - "<<"设置操作:g_size="<<g_size);
  136. int iretval = 0;
  137. if (g_color == cFULL)
  138. {
  139. if (g_isshow)
  140. {
  141. iretval = g_var->HIGH_SetColorType(0);
  142. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"HSP_SetPara","设置彩色HIGH_SetColorType return iretval=%d",iretval);
  143. LOG4VTM(WARN, "<HSP_SetPara> - "<<"设置彩色HIGH_SetColorType return iretval="<<iretval);
  144. }
  145. g_color = cErr;
  146. }
  147. if (g_color == cGRAY)
  148. {
  149. if (g_isshow)
  150. {
  151. iretval = g_var->HIGH_SetColorType(1);
  152. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"HSP_SetPara","设置灰度HIGH_SetColorType return iretval=%d",iretval);
  153. LOG4VTM(WARN, "<HSP_SetPara> - "<<"设置灰度HIGH_SetColorType return iretval="<<iretval);
  154. }
  155. g_color = cErr;
  156. }
  157. if (g_size == sFULL)
  158. {
  159. if (g_isshow)
  160. {
  161. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"HSP_SetPara","设置全画幅尺寸:Entry HIGH_SetAutoCrop ");
  162. LOG4VTM(WARN, "<HSP_SetPara> - "<<"设置全画幅尺寸:Entry HIGH_SetAutoCrop ");
  163. iretval = g_var->HIGH_SetAutoCrop(false);
  164. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"HSP_SetPara","设置全画幅尺寸:Exit HIGH_SetAutoCrop return %d",iretval);
  165. LOG4VTM(WARN, "<HSP_SetPara> - "<<"设置全画幅尺寸:Exit HIGH_SetAutoCrop return"<<iretval);
  166. }
  167. g_size = sErr;
  168. }
  169. if ((g_size == sA4) || (g_size == sIDCARD))
  170. {
  171. // HELOAMRECT rect = NULL;
  172. // g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"HSP_SetPara","设置尺寸:Entry EloamVideo_GetWidth ");
  173. // int width = EloamVideo_GetWidth(m_hVideo);
  174. // g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"HSP_SetPara","设置尺寸:Exit EloamVideo_GetWidth return %d",width);
  175. // g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"HSP_SetPara","设置尺寸:Entry EloamVideo_GetHeight");
  176. // int heigth = EloamVideo_GetHeight(m_hVideo);
  177. // g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"HSP_SetPara","设置尺寸:exit EloamVideo_GetHeight return %d",heigth);
  178. // if (g_size == sA4)// A4尺寸扫描
  179. // {
  180. // g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"HSP_SetPara","设置A4尺寸:Entry EloamGlobal_CreateRect ");
  181. // rect = EloamGlobal_CreateRect(0, (heigth*196)/10000, width,(heigth*957)/1000);
  182. // g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"HSP_SetPara","设置A4尺寸:Exit EloamGlobal_CreateRect ");
  183. // }
  184. // else if (g_size == sIDCARD)// 身份证尺寸扫描
  185. // {
  186. // memset(Idx,0,sizeof(Idx));
  187. // memset(Idy,0,sizeof(Idy));
  188. // memset(IdWidth,0,sizeof(IdWidth));
  189. // memset(IdHeight,0,sizeof(IdHeight));
  190. // ::GetPrivateProfileString("HSPScanner","Idx","310",Idx,sizeof(Idx),g_IniPath);
  191. // ::GetPrivateProfileString("HSPScanner","Idy","360",Idy,sizeof(Idy),g_IniPath);
  192. // ::GetPrivateProfileString("HSPScanner","IdWidth","350",IdWidth,sizeof(IdWidth),g_IniPath);
  193. // ::GetPrivateProfileString("HSPScanner","IdHeight","310",IdHeight,sizeof(IdHeight),g_IniPath);
  194. //
  195. // g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"HSP_SetPara","设置身份证尺寸:Entry EloamGlobal_CreateRect ");
  196. // rect = EloamGlobal_CreateRect((width*atoi(Idx))/1000, (heigth*atoi(Idy))/1000, (width*atoi(IdWidth))/1000,(heigth*atoi(IdHeight))/1000);
  197. // // rect = EloamGlobal_CreateRect((width*345)/1000, (heigth*360)/1000, (width*350)/1000,(heigth*310)/1000);
  198. // g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"HSP_SetPara","设置身份证尺寸:exit EloamGlobal_CreateRect ");
  199. // }
  200. // if (m_hView)
  201. // {
  202. // g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"HSP_SetPara","设置A4 or 身份证尺寸Entry EloamView_SetState ");
  203. // bret = EloamView_SetState(m_hView,2);
  204. // g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"HSP_SetPara","设置A4 or 身份证尺寸exit EloamView_SetState return %d",bret);
  205. // g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"HSP_SetPara","设置A4 or 身份证尺寸Entry EloamView_SetSelectedRect ");
  206. // bret = EloamView_SetSelectedRect(m_hView,rect);
  207. // g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"HSP_SetPara","设置A4 or 身份证尺寸exit EloamView_SetSelectedRect return %d",bret);
  208. // }
  209. // if (rect)
  210. // EloamRect_Release(rect);
  211. if (g_isshow)
  212. {
  213. iretval = g_var->HIGH_SetAutoCrop(true);
  214. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"HSP_SetPara","设置A4、身份证尺寸:Exit HIGH_SetAutoCrop return %d",iretval);
  215. LOG4VTM(WARN, "<HSP_SetPara> - "<<"设置A4、身份证尺寸:Exit HIGH_SetAutoCrop return"<<iretval);
  216. }
  217. g_size = sErr;
  218. }
  219. if (g_position == pNOANGLE)// 物理环境的上方为预览窗口的上方 Positive direction.
  220. {
  221. }
  222. if (g_position == pLEFT)// 物理环境的左侧为预览窗口的上方
  223. {
  224. if (g_isshow)
  225. {
  226. iretval = g_var->HIGH_SetRotateSize(1);//旋转90
  227. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"HSP_SetPara","设置pLEFT,iretval=%d",iretval);
  228. LOG4VTM(WARN, "<HSP_SetPara> - "<<"设置pLEFT,iretval"<<iretval);
  229. }
  230. }
  231. if (g_position == pMIRROR)// 物理环境的下方为预览窗口的上方 Opposite/Nagative direction.
  232. {
  233. if (g_isshow)
  234. {
  235. iretval = g_var->HIGH_SetRotateSize(2);//旋转180
  236. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"HSP_SetPara","设置pMIRROR,iretval=%d",iretval);
  237. LOG4VTM(WARN, "<HSP_SetPara> - "<<"设置pMIRROR,iretval="<<iretval);
  238. }
  239. }
  240. if (g_position == pRIGHT)// 物理环境的右侧为预览窗口的上方
  241. {
  242. if (g_isshow)
  243. {
  244. iretval = g_var->HIGH_SetRotateSize(3);//旋转270
  245. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"HSP_SetPara","设置pRIGHT,iretval=%d",iretval);
  246. LOG4VTM(WARN, "<HSP_SetPara> - "<<"设置pRIGHT,iretval="<<iretval);
  247. }
  248. }
  249. g_SetPara = 0;
  250. }
  251. HSPSCANNER_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass *&baseObj)
  252. {
  253. baseObj = new CHSPScanner();
  254. if (baseObj == NULL)
  255. return Error_Resource;
  256. g_var->m_trace->WriteTrace("CreateDevComponent","执行CreateDevComponent成功");
  257. return Error_Succeed;
  258. }
  259. HSPSCANNER_API ErrorCodeEnum ReleaseDevComponent(DeviceBaseClass *&pBaseObj)
  260. {
  261. if (pBaseObj == NULL)
  262. return Error_Param;
  263. CHSPScanner* pTmp = (CHSPScanner*)(pBaseObj);
  264. delete pTmp;
  265. pTmp = NULL;
  266. g_var->m_trace->WriteTrace("ReleaseDevComponent","执行ReleaseDevComponent成功");
  267. return Error_Succeed;
  268. }
  269. //
  270. // Device initialization.
  271. // Connect to High speed portable scanner.
  272. // 更新20161117:只做设备连接操作,不显示窗口
  273. //
  274. CHSPScanner::CHSPScanner(void)
  275. {
  276. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  277. strcpy(m_Error.szErrMsg,"操作成功");
  278. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  279. g_var = new Gvar();
  280. char INIPath[100] = "";
  281. CILIX_AUX_X::CILIX_GetModuleCurPath(INIPath);
  282. strcat(INIPath, "hspscanner.nantian.ini");
  283. char log_dir[100] = "";
  284. CILIX_AUX_X::CILIX_X_INIKeyString(INIPath, "LOGConfig", "log_dir", log_dir, "/etc/nantian");
  285. char log_level[100] = "";
  286. CILIX_AUX_X::CILIX_X_INIKeyString(INIPath, "LOGConfig", "log_level", log_level, "3");
  287. cmb::log_init_config config;
  288. config.dev_name = "HSPScannerso";
  289. config.log_dir = log_dir;
  290. config.log_level = atoi(log_level);
  291. std::string str;
  292. cmb::log4vendor::init(config, str);
  293. }
  294. CHSPScanner::~CHSPScanner()
  295. {
  296. if (g_var)
  297. {
  298. delete g_var;
  299. g_var = NULL;
  300. }
  301. }
  302. ErrorCodeEnum CHSPScanner::DevOpen()
  303. {
  304. ErrorCodeEnum iret = Error_Succeed;
  305. int iretval = 0;
  306. LOG4VTM(WARN, "<DevOpen> - "<<"Enter-");
  307. CILIXAutoTrace _at(g_var->m_trace,"DevOpen",&iretval);
  308. if (!g_var->m_isLoad)
  309. {
  310. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"DevOpen","高拍仪so或函数加载失败");
  311. LOG4VTM(WARN, "<DevOpen> - "<<"高拍仪so或函数加载失败");
  312. LOG4VTM(WARN, "<DevOpen> - "<<"Exit-");
  313. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  314. strcpy(m_Error.szErrMsg,"高拍仪so或函数加载失败");
  315. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  316. iret = Error_DevLoadFileFailed;
  317. return iret;
  318. }
  319. //打开高拍仪
  320. iretval = g_var->HIGH_StartCamera();
  321. if (iretval != 0)
  322. {
  323. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"DevOpen","打开高拍仪失败,HIGH_StartCamera return %d",iretval);
  324. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  325. strcpy(m_Error.szErrMsg,"打开高拍仪失败");
  326. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  327. iret = Error_DevConnFailed;
  328. LOG4VTM(WARN, "<DevOpen> - "<<"打开高拍仪失败,HIGH_StartCamera return "<<iretval);
  329. LOG4VTM(WARN, "<DevOpen> - "<<"Exit-");
  330. return iret;
  331. }
  332. //设置高拍仪分辨率
  333. int iWIDTH =3264; //3264;/*280;//1600;800;*///1920
  334. //int HEIGHT = 1080;/*720;//1200;600;*///1080
  335. int iHEIGHT =2448; //2448;/*720;//1200;600;*/
  336. iretval = g_var->HIGH_SetCameraPixel(iWIDTH,iHEIGHT);
  337. if (iretval != 0)
  338. {
  339. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"DevOpen","设置高拍仪分辨率操作失败,HIGH_SetCameraPixel return %d",iretval);
  340. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  341. strcpy(m_Error.szErrMsg,"设置高拍仪分辨率操作失败");
  342. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  343. iret = Error_DevConnFailed;
  344. LOG4VTM(WARN, "<DevOpen> - "<<"设置高拍仪分辨率操作失败,HIGH_SetCameraPixel return "<<iretval);
  345. LOG4VTM(WARN, "<DevOpen> - "<<"Exit-");
  346. return iret;
  347. }
  348. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"DevOpen","打开高拍仪成功");
  349. g_var->m_connect = TRUE;
  350. m_isOnline = TRUE;
  351. LOG4VTM(WARN, "<DevOpen> - "<<"打开高拍仪成功");
  352. LOG4VTM(WARN, "<DevOpen> - "<<"Exit-");
  353. return Error_Succeed;
  354. }
  355. //
  356. // Set param, more detail please to see ParamType and its according ParamTypeValue.
  357. //
  358. ErrorCodeEnum CHSPScanner::SetParam(ParamType type, ParamTypeValue value)
  359. {
  360. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","Entry:输入参数type:%d,输入参数value:%d",type,value);
  361. LOG4VTM(WARN, "<SetParam> - "<<"Entry-");
  362. LOG4VTM(WARN, "<SetParam> - "<<"输入参数type:"<<type);
  363. LOG4VTM(WARN, "<SetParam> - "<<"输入参数value:"<<value);
  364. ErrorCodeEnum iret = Error_Succeed;
  365. int iretval = 0;
  366. /*if (!g_var->m_connect)
  367. {
  368. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"SetParam","未做DevOpen操作");
  369. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  370. strcpy(m_Error.szErrMsg,"未做DevOpen操作");
  371. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  372. iret = Error_NotInit;
  373. throw iret;
  374. }*/
  375. if (type == HSPS_MODEL_COLOR)/**设置色彩*/
  376. {
  377. if (value == HSPS_COLOR_FULL)// 彩色模式 default mod.
  378. {
  379. if ((g_var->m_connect)&&(g_isshow))
  380. {
  381. iretval = g_var->HIGH_SetColorType(0);
  382. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","设置彩色模式HIGH_SetColorType return %d",iretval);
  383. LOG4VTM(WARN, "<SetParam> - "<<"设置彩色模式HIGH_SetColorType return "<<iretval);
  384. }
  385. else
  386. g_color = cFULL;
  387. }
  388. else if (value == HSPS_COLOR_GREY)// 灰度模式 gray mode.
  389. {
  390. if ((g_var->m_connect)&&(g_isshow))
  391. {
  392. iretval = g_var->HIGH_SetColorType(1);
  393. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","设置灰度模式HIGH_SetColorType return %d",iretval);
  394. LOG4VTM(WARN, "<SetParam> - "<<"设置灰度模式HIGH_SetColorType return "<<iretval);
  395. }
  396. else
  397. g_color = cGRAY;
  398. }
  399. else
  400. {
  401. g_color = cErr;
  402. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"SetParam","设置色彩:传入value 参数错误_参数超出定义范围");
  403. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  404. strcpy(m_Error.szErrMsg,"设置色彩:传入value 参数错误_参数超出定义范围");
  405. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  406. iret = Error_Param;
  407. LOG4VTM(WARN, "<SetParam> - "<<"设置色彩:传入value 参数错误_参数超出定义范围");
  408. LOG4VTM(WARN, "<SetParam> - "<<"Exit-");
  409. return iret;
  410. }
  411. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","色彩设置成功,g_color=%d",g_color);
  412. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  413. strcpy(m_Error.szErrMsg,"色彩设置成功");
  414. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  415. LOG4VTM(WARN, "<SetParam> - "<<"色彩设置成功,g_color="<<g_color);
  416. LOG4VTM(WARN, "<SetParam> - "<<"Exit-");
  417. return iret;
  418. }
  419. else if (type == HSPS_MODEL_ROTATE)/**设置拍摄角度,不带持续旋转的意义*/
  420. {
  421. if (value == HSPS_ROTATE_NOANGLE)// 物理环境的上方为预览窗口的上方 Positive direction.
  422. {
  423. if ((g_var->m_connect)&&(g_isshow))
  424. {
  425. if (g_position == pMIRROR)
  426. {
  427. iretval = g_var->HIGH_SetRotateSize(2);//旋转180
  428. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","设置旋转180度,HIGH_SetAutoCrop return %d",iretval);
  429. LOG4VTM(WARN, "<SetParam> - "<<"设置旋转180度,HIGH_SetAutoCrop return "<<iretval);
  430. }
  431. if (g_position == pLEFT)
  432. {
  433. iretval = g_var->HIGH_SetRotateSize(3);//旋转270
  434. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","设置左旋,HIGH_SetAutoCrop return %d",iretval);
  435. LOG4VTM(WARN, "<SetParam> - "<<"设置左旋,HIGH_SetAutoCrop return "<<iretval);
  436. }
  437. if (g_position == pRIGHT)
  438. {
  439. g_var->HIGH_SetRotateSize(1);//旋转90
  440. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","设置右旋,HIGH_SetAutoCrop return %d",iretval);
  441. LOG4VTM(WARN, "<SetParam> - "<<"设置右旋,HIGH_SetAutoCrop return "<<iretval);
  442. }
  443. }
  444. g_position = pNOANGLE;
  445. }
  446. else if (value == HSPS_ROTATE_LEFT)// 物理环境的左侧为预览窗口的上方
  447. {
  448. if ((g_var->m_connect)&&(g_isshow))
  449. {
  450. if ((g_position != pLEFT) && (g_position == pNOANGLE))
  451. {
  452. iretval = g_var->HIGH_SetRotateSize(1);//旋转90
  453. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","HSPS_ROTATE_LEFT,右旋HIGH_SetAutoCrop return %d",iretval);
  454. LOG4VTM(WARN, "<SetParam> - "<<"HSPS_ROTATE_LEFT,右旋HIGH_SetAutoCrop return "<<iretval);
  455. }
  456. if ((g_position != pLEFT) && (g_position == pRIGHT))
  457. {
  458. iretval = g_var->HIGH_SetRotateSize(2);//旋转180
  459. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","HSPS_ROTATE_LEFT,旋转180HIGH_SetAutoCrop return %d",iretval);
  460. LOG4VTM(WARN, "<SetParam> - "<<"HSPS_ROTATE_LEFT,旋转180HIGH_SetAutoCrop return "<<iretval);
  461. }
  462. if ((g_position != pLEFT) && (g_position == pMIRROR))
  463. {
  464. iretval = g_var->HIGH_SetRotateSize(3);//旋转270
  465. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","HSPS_ROTATE_LEFT,左旋HIGH_SetAutoCrop return %d",iretval);
  466. LOG4VTM(WARN, "<SetParam> - "<<"HSPS_ROTATE_LEFT,左旋HIGH_SetAutoCrop return "<<iretval);
  467. }
  468. }
  469. g_position = pLEFT;
  470. }
  471. else if (value == HSPS_ROTATE_MIRROR)// 物理环境的下方为预览窗口的上方 Opposite/Nagative direction.
  472. {
  473. if ((g_var->m_connect)&&(g_isshow))
  474. {
  475. if ((g_position != pMIRROR)&&(g_position == pNOANGLE))
  476. {
  477. iretval = g_var->HIGH_SetRotateSize(2);//旋转180
  478. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","HSPS_ROTATE_MIRROR,旋180HIGH_SetAutoCrop return %d",iretval);
  479. LOG4VTM(WARN, "<SetParam> - "<<"HSPS_ROTATE_MIRROR,旋180HIGH_SetAutoCrop return "<<iretval);
  480. }
  481. if ((g_position != pMIRROR)&&(g_position == pLEFT))
  482. {
  483. iretval = g_var->HIGH_SetRotateSize(1);//旋转90
  484. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","HSPS_ROTATE_MIRROR,右旋HIGH_SetAutoCrop return %d",iretval);
  485. LOG4VTM(WARN, "<SetParam> - "<<"HSPS_ROTATE_MIRROR,右旋HIGH_SetAutoCrop return "<<iretval);
  486. }
  487. if ((g_position != pMIRROR)&&(g_position == pRIGHT))
  488. {
  489. iretval = g_var->HIGH_SetRotateSize(3);//旋转270
  490. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","HSPS_ROTATE_MIRROR,左旋HIGH_SetAutoCrop return %d",iretval);
  491. LOG4VTM(WARN, "<SetParam> - "<<"HSPS_ROTATE_MIRROR,左旋HIGH_SetAutoCrop return "<<iretval);
  492. }
  493. }
  494. // else
  495. g_position = pMIRROR;
  496. }
  497. else if (value == HSPS_ROTATE_RIGHT)// 物理环境的右侧为预览窗口的上方
  498. {
  499. if ((g_var->m_connect)&&(g_isshow))
  500. {
  501. if ((g_position != pRIGHT)&&(g_position == pNOANGLE))
  502. {
  503. iretval = g_var->HIGH_SetRotateSize(3);//旋转270
  504. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","HSPS_ROTATE_RIGHT,左旋HIGH_SetAutoCrop return %d",iretval);
  505. LOG4VTM(WARN, "<SetParam> - "<<"HSPS_ROTATE_RIGHT,左旋HIGH_SetAutoCrop return "<<iretval);
  506. }
  507. if ((g_position != pRIGHT) && (g_position == pLEFT))
  508. {
  509. iretval = g_var->HIGH_SetRotateSize(2);//旋转180
  510. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","HSPS_ROTATE_RIGHT,旋180HIGH_SetAutoCrop return %d",iretval);
  511. LOG4VTM(WARN, "<SetParam> - "<<"HSPS_ROTATE_RIGHT,旋180HIGH_SetAutoCrop return "<<iretval);
  512. }
  513. if ((g_position != pRIGHT) && (g_position == pMIRROR))
  514. {
  515. iretval = g_var->HIGH_SetRotateSize(1);//旋转90
  516. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","HSPS_ROTATE_RIGHT,右旋HIGH_SetAutoCrop return %d",iretval);
  517. LOG4VTM(WARN, "<SetParam> - "<<"HSPS_ROTATE_RIGHT,右旋HIGH_SetAutoCrop return "<<iretval);
  518. }
  519. }
  520. g_position = pRIGHT;
  521. }
  522. else
  523. {
  524. g_position = pErr;
  525. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"SetParam","设置角度:传入value 参数错误_参数超出定义范围");
  526. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  527. strcpy(m_Error.szErrMsg,"设置角度:传入value 参数错误_参数超出定义范围");
  528. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  529. iret = Error_Param;
  530. LOG4VTM(WARN, "<SetParam> - "<<"设置角度:传入value 参数错误_参数超出定义范围");
  531. LOG4VTM(WARN, "<SetParam> - "<<"Exit-");
  532. return iret;
  533. }
  534. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  535. strcpy(m_Error.szErrMsg,"旋转参数设置成功");
  536. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  537. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","旋转角度设置成功g_position=%d",g_position);
  538. LOG4VTM(WARN, "<SetParam> - "<<"旋转角度设置成功g_position="<<g_position);
  539. LOG4VTM(WARN, "<SetParam> - "<<"Exit-");
  540. return iret;
  541. }
  542. else if (type == HSPS_MODEL_SCANSIZE)/**设置扫描图片尺寸*/
  543. {
  544. if (value == HSPS_SCAN_FULL)//全画幅扫描
  545. {
  546. if ((g_var->m_connect)&&(g_isshow))
  547. {
  548. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","设置全画幅尺寸:Entry HIGH_SetAutoCrop ");
  549. LOG4VTM(WARN, "<SetParam> - "<<"设置全画幅尺寸:Entry HIGH_SetAutoCrop ");
  550. iretval = g_var->HIGH_SetAutoCrop(false);
  551. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","设置全画幅尺寸:Exit HIGH_SetAutoCrop return %d",iretval);
  552. LOG4VTM(WARN, "<SetParam> - "<<"设置全画幅尺寸:Exit HIGH_SetAutoCrop return "<<iretval);
  553. }
  554. else
  555. g_size = sFULL;
  556. }
  557. else if ((value == HSPS_SCAN_A4) || (value == HSPS_SCAN_IDCARD))
  558. {
  559. ParamTypeValue oldposition = HSPS_ROTATE_NOANGLE;
  560. int width = 0;
  561. int heigth = 0;
  562. if (value == HSPS_SCAN_A4)// A4尺寸扫描
  563. {
  564. if ((g_var->m_connect)&&(g_isshow))
  565. {
  566. // g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","设置尺寸:Entry EloamVideo_GetWidth ");
  567. // width = EloamVideo_GetWidth(m_hVideo);
  568. // g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","设置尺寸:Exit EloamVideo_GetWidth return %d",width);
  569. // g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","设置尺寸:Entry EloamVideo_GetHeight");
  570. // heigth = EloamVideo_GetHeight(m_hVideo);
  571. // g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","设置尺寸:exit EloamVideo_GetHeight return %d",heigth);
  572. iretval = g_var->HIGH_SetAutoCrop(true);
  573. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","设置纠偏 HIGH_SetAutoCrop return %d",iretval);
  574. LOG4VTM(WARN, "<SetParam> - "<<"设置纠偏 HIGH_SetAutoCrop return "<<iretval);
  575. }
  576. else
  577. g_size = sA4;
  578. }
  579. else// 身份证尺寸扫描
  580. {
  581. if (g_isshow&&(((g_position != pNOANGLE) && (g_position != pErr))))
  582. {
  583. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","设置身份证,如果预览之前已经做过旋转,需要旋转正向后再做尺寸规范g_position=%d",g_position);
  584. LOG4VTM(WARN, "<SetParam> - "<<"设置身份证,如果预览之前已经做过旋转,需要旋转正向后再做尺寸规范g_position="<<g_position);
  585. switch (g_position)
  586. {
  587. case pLEFT:
  588. oldposition = HSPS_ROTATE_LEFT;
  589. break;
  590. case pRIGHT:
  591. oldposition = HSPS_ROTATE_RIGHT;
  592. break;
  593. case pMIRROR:
  594. oldposition = HSPS_ROTATE_MIRROR;
  595. break;
  596. }
  597. if ((g_position == pMIRROR))
  598. {
  599. iretval = g_var->HIGH_SetRotateSize(2);//旋转180
  600. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","身份证尺寸扫描,旋180HIGH_SetAutoCrop return %d",iretval);
  601. LOG4VTM(WARN, "<SetParam> - "<<"身份证尺寸扫描,旋180HIGH_SetAutoCrop return="<<iretval);
  602. }
  603. if ((g_position == pLEFT))
  604. {
  605. iretval = g_var->HIGH_SetRotateSize(3);//旋转270
  606. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","身份证尺寸扫描,左旋HIGH_SetAutoCrop return %d",iretval);
  607. LOG4VTM(WARN, "<SetParam> - "<<"身份证尺寸扫描,左旋HIGH_SetAutoCrop return="<<iretval);
  608. }
  609. if ((g_position == pRIGHT))
  610. {
  611. iretval = g_var->HIGH_SetRotateSize(1);//旋转90
  612. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","身份证尺寸扫描,右旋HIGH_SetAutoCrop return %d",iretval);
  613. LOG4VTM(WARN, "<SetParam> - "<<"身份证尺寸扫描,右旋HIGH_SetAutoCrop return="<<iretval);
  614. }
  615. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","设置身份证,如果预览之前已经做过旋转,oldposition=%d",oldposition);
  616. LOG4VTM(WARN, "<SetParam> - "<<"设置身份证,如果预览之前已经做过旋转,oldposition="<<oldposition);
  617. }
  618. else
  619. g_size = sIDCARD;
  620. iretval = g_var->HIGH_SetAutoCrop(true);
  621. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","sIDCARD设置纠偏 HIGH_SetAutoCrop return %d",iretval);
  622. LOG4VTM(WARN, "<SetParam> - "<<"sIDCARD设置纠偏 HIGH_SetAutoCrop return="<<iretval);
  623. // if (m_hVideo)
  624. // {
  625. // g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","设置尺寸:Entry EloamVideo_GetWidth ");
  626. // width = EloamVideo_GetWidth(m_hVideo);
  627. // g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","设置尺寸:Exit EloamVideo_GetWidth return %d",width);
  628. // g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","设置尺寸:Entry EloamVideo_GetHeight");
  629. // heigth = EloamVideo_GetHeight(m_hVideo);
  630. // g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","设置尺寸:exit EloamVideo_GetHeight return %d",heigth);
  631. // }
  632. // if (m_hVideo)
  633. // {
  634. // memset(Idx,0,sizeof(Idx));
  635. // memset(Idy,0,sizeof(Idy));
  636. // memset(IdWidth,0,sizeof(IdWidth));
  637. // memset(IdHeight,0,sizeof(IdHeight));
  638. // ::GetPrivateProfileString("HSPScanner","Idx","310",Idx,sizeof(Idx),g_IniPath);
  639. // ::GetPrivateProfileString("HSPScanner","Idy","360",Idy,sizeof(Idy),g_IniPath);
  640. // ::GetPrivateProfileString("HSPScanner","IdWidth","350",IdWidth,sizeof(IdWidth),g_IniPath);
  641. // ::GetPrivateProfileString("HSPScanner","IdHeight","310",IdHeight,sizeof(IdHeight),g_IniPath);
  642. //
  643. // g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","设置身份证尺寸:Entry EloamGlobal_CreateRect ");
  644. // rect = EloamGlobal_CreateRect((width*atoi(Idx))/1000, (heigth*atoi(Idy))/1000, (width*atoi(IdWidth))/1000,(heigth*atoi(IdHeight))/1000);
  645. // // rect = EloamGlobal_CreateRect((width*345)/1000, (heigth*360)/1000, (width*350)/1000,(heigth*310)/1000);
  646. // g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","设置身份证尺寸:exit EloamGlobal_CreateRect ");
  647. // }
  648. }
  649. if (value == HSPS_SCAN_IDCARD)
  650. {
  651. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","设置身份证真实需要的旋转 ");
  652. CILIX_AUX_X::Sleep(5);
  653. if (oldposition == HSPS_ROTATE_LEFT)// 物理环境的左侧为预览窗口的上方
  654. {
  655. if ((g_var->m_connect)&&(g_isshow))
  656. {
  657. iretval = g_var->HIGH_SetRotateSize(1);//旋转90
  658. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","设置身份证真实需要左旋,右旋HIGH_SetAutoCrop return %d",iretval);
  659. LOG4VTM(WARN, "<SetParam> - "<<"设置身份证真实需要左旋,右旋HIGH_SetAutoCrop return="<<iretval);
  660. g_position = pLEFT;
  661. }
  662. }
  663. if (oldposition == HSPS_ROTATE_MIRROR)// 物理环境的下方为预览窗口的上方 Opposite/Nagative direction.
  664. {
  665. if ((g_var->m_connect)&&(g_isshow))
  666. {
  667. iretval = g_var->HIGH_SetRotateSize(2);//旋转180
  668. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","设置身份证真实需要下旋,旋180HIGH_SetAutoCrop return %d",iretval);
  669. LOG4VTM(WARN, "<SetParam> - "<<"设置身份证真实需要下旋,旋180HIGH_SetAutoCrop return="<<iretval);
  670. g_position = pMIRROR;
  671. }
  672. }
  673. if (oldposition == HSPS_ROTATE_RIGHT)// 物理环境的右侧为预览窗口的上方
  674. {
  675. if ((g_var->m_connect)&&(g_isshow))
  676. {
  677. iretval = g_var->HIGH_SetRotateSize(3);//旋转180
  678. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","设置身份证真实需要右旋,旋180HIGH_SetAutoCrop return %d",iretval);
  679. LOG4VTM(WARN, "<SetParam> - "<<"设置身份证真实需要右旋,旋180HIGH_SetAutoCrop return="<<iretval);
  680. g_position = pRIGHT;
  681. }
  682. }
  683. }
  684. }
  685. else
  686. {
  687. g_size = sErr;
  688. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"SetParam","设置尺寸:传入value 参数错误_参数超出定义范围");
  689. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  690. strcpy(m_Error.szErrMsg,"设置尺寸:传入value 参数错误_参数超出定义范围");
  691. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  692. iret = Error_Param;
  693. LOG4VTM(WARN, "<SetParam> - "<<"设置尺寸:传入value 参数错误_参数超出定义范围");
  694. LOG4VTM(WARN, "<SetParam> - "<<"Exit-");
  695. return iret;
  696. }
  697. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  698. strcpy(m_Error.szErrMsg,"尺寸设置成功");
  699. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  700. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","尺寸设置成功g_size=%d",g_size);
  701. LOG4VTM(WARN, "<SetParam> - "<<"尺寸设置成功");
  702. LOG4VTM(WARN, "<SetParam> - "<<"Exit-");
  703. return iret;
  704. }
  705. else if (type == HSPS_MODEL_VIEW)/**设置预览窗口显示与否和显示的位置,预览活动窗口尺寸为16:9,*/
  706. {
  707. if (value == HSPS_VIEW_HIDE)
  708. {
  709. if(!g_isshow)
  710. {
  711. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  712. strcpy(m_Error.szErrMsg,"窗口未创建,设置窗口隐藏直接返回成功");
  713. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  714. LOG4VTM(WARN, "<SetParam> - "<<"窗口未创建,设置窗口隐藏直接返回成功");
  715. LOG4VTM(WARN, "<SetParam> - "<<"Exit-");
  716. return Error_Succeed;
  717. }
  718. iretval = g_var->HIGH_HideWindow(true);
  719. CILIX_AUX_X::Sleep(200);
  720. if (iretval != 0)
  721. {
  722. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"SetParam","窗口隐藏设置失败,HIGH_HideWindow return %d",iretval);
  723. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  724. strcpy(m_Error.szErrMsg,"窗口隐藏设置失败");
  725. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  726. iret = Error_DevCommFailed;
  727. LOG4VTM(WARN, "<SetParam> - "<<"窗口隐藏设置失败,HIGH_CloseWindow return "<<iretval);
  728. LOG4VTM(WARN, "<SetParam> - "<<"Exit-");
  729. return iret;
  730. }
  731. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  732. strcpy(m_Error.szErrMsg,"窗口隐藏设置成功");
  733. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  734. g_ishide = TRUE;
  735. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","窗口隐藏设置成功");
  736. LOG4VTM(WARN, "<SetParam> - "<<"窗口隐藏设置成功");
  737. LOG4VTM(WARN, "<SetParam> - "<<"Exit-");
  738. return Error_Succeed;
  739. }
  740. if (value == HSPS_VIEW_SHOW)
  741. {
  742. if(!g_isshow)
  743. {
  744. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  745. strcpy(m_Error.szErrMsg,"窗口未创建,不能直接显示");
  746. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  747. LOG4VTM(WARN, "<SetParam> - "<<"窗口未创建,不能直接显示");
  748. LOG4VTM(WARN, "<SetParam> - "<<"Exit-");
  749. return Error_NotExist;
  750. }
  751. if (g_ishide)
  752. {
  753. iretval = g_var->HIGH_HideWindow(false);
  754. CILIX_AUX_X::Sleep(200);
  755. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","HIGH_HideWindow return %d",iretval);
  756. if (iretval != 0)
  757. {
  758. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"SetParam","隐藏窗口显示设置失败,HIGH_HideWindow return %d",iretval);
  759. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  760. strcpy(m_Error.szErrMsg,"隐藏窗口显示设置失败");
  761. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  762. iret = Error_DevCommFailed;
  763. LOG4VTM(WARN, "<SetParam> - "<<"隐藏窗口显示设置失败,HIGH_CreateWindow return "<<iretval);
  764. LOG4VTM(WARN, "<SetParam> - "<<"Exit-");
  765. return iret;
  766. }
  767. g_ishide = FALSE;
  768. }
  769. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  770. strcpy(m_Error.szErrMsg,"窗口显示设置成功");
  771. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  772. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetParam","窗口显示设置成功");
  773. LOG4VTM(WARN, "<SetParam> - "<<"窗口显示设置成功");
  774. LOG4VTM(WARN, "<SetParam> - "<<"Exit-");
  775. return Error_Succeed;
  776. }
  777. else
  778. {
  779. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"SetParam","设置窗口显示:传入value 参数错误_参数超出定义范围");
  780. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  781. strcpy(m_Error.szErrMsg,"设置窗口显示:传入value 参数错误_参数超出定义范围");
  782. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  783. iret = Error_Param;
  784. LOG4VTM(WARN, "<SetParam> - "<<"设置窗口显示:传入value 参数错误_参数超出定义范围");
  785. LOG4VTM(WARN, "<SetParam> - "<<"Exit-");
  786. return iret;
  787. }
  788. }
  789. else
  790. {
  791. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"SetParam","传入type 参数错误_参数超出定义范围");
  792. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  793. strcpy(m_Error.szErrMsg,"传入type 参数错误_参数超出定义范围");
  794. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  795. iret = Error_Param;
  796. LOG4VTM(WARN, "<SetParam> - "<<"传入type 参数错误_参数超出定义范围");
  797. LOG4VTM(WARN, "<SetParam> - "<<"Exit-");
  798. return iret;
  799. }
  800. }
  801. //
  802. // Command the device to start to preview or stop previewing.
  803. // -nValue[in] set 1 means StartPreview while 0 means StopPreview.
  804. // If the device' state had been setted before what the nValue commanded, ignore it and
  805. // return Error_Succeed.
  806. // The function returns only the specified behavior is done completely, StartPreview in special.
  807. // 更新20161117: nValue值为 1 时打开预览,确保当前打开预览过程执行结束且窗口处于显示状态才返回Error_Succeed,
  808. // nValue值为 0 时关闭预览并隐藏窗口
  809. //
  810. //
  811. ErrorCodeEnum CHSPScanner::SetPreview(short nValue)
  812. {
  813. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetPreview","输入参数:%d",nValue);
  814. LOG4VTM(WARN, "<SetPreview> - "<<"Entry-");
  815. LOG4VTM(WARN, "<SetPreview> - "<<"输入参数:"<<nValue);
  816. ErrorCodeEnum iret = Error_Succeed;
  817. BOOL bret = FALSE;
  818. int iretval = 0;
  819. try
  820. {
  821. if (!g_var->m_connect)
  822. {
  823. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"SetPreview","未做DevOpen操作");
  824. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  825. strcpy(m_Error.szErrMsg,"未做DevOpen操作");
  826. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  827. iret = Error_NotInit;
  828. LOG4VTM(WARN, "<SetPreview> - "<<"未做DevOpen操作");
  829. LOG4VTM(WARN, "<SetPreview> - "<<"Exit-");
  830. throw iret;
  831. }
  832. if (nValue == 1)//开始预览
  833. {
  834. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetPreview","进入操作预览...............");
  835. LOG4VTM(WARN, "<SetPreview> - "<<"进入操作预览...............");
  836. if ((g_X < 0) || (g_Y < 0) || (g_Width < 0) || (g_Height < 0) )
  837. {
  838. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"SetPreview","未做窗口设置操作,不能明确窗口坐标和大小");
  839. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  840. strcpy(m_Error.szErrMsg,"未做窗口设置操作,不能明确窗口坐标和大小");
  841. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  842. iret = Error_Param;
  843. LOG4VTM(WARN, "<SetPreview> - "<<"未做窗口设置操作,不能明确窗口坐标和大小");
  844. LOG4VTM(WARN, "<SetPreview> - "<<"Exit-");
  845. throw iret;
  846. }
  847. if (g_isshow == TRUE)
  848. {
  849. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetPreview","已处于预览模式,直接返成功");
  850. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  851. strcpy(m_Error.szErrMsg,"预览成功");
  852. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  853. iret = Error_Succeed;
  854. LOG4VTM(WARN, "<SetPreview> - "<<"已处于预览模式,直接返成功");
  855. LOG4VTM(WARN, "<SetPreview> - "<<"Exit-");
  856. throw iret;
  857. }
  858. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetPreview","进入操作窗口显示");
  859. LOG4VTM(WARN, "<SetPreview> - "<<"进入操作窗口显示");
  860. iretval = g_var->HIGH_CreateWindow(g_X,g_Y,g_Width,g_Height);
  861. CILIX_AUX_X::Sleep(1000);
  862. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetPreview","退出操作窗口,HIGH_CreateWindow return %d",iretval);
  863. LOG4VTM(WARN, "<SetPreview> - "<<"退出操作窗口,HIGH_CreateWindow return "<<iretval);
  864. if (iretval != 0)
  865. {
  866. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"SetPreview","创建窗口预览操作失败,HIGH_CreateWindow return %d",iretval);
  867. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  868. strcpy(m_Error.szErrMsg,"创建窗口预览操作失败");
  869. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  870. iret = Error_DevCommFailed;
  871. LOG4VTM(WARN, "<SetPreview> - "<<"创建窗口预览操作失败,HIGH_CreateWindow return "<<iretval);
  872. LOG4VTM(WARN, "<SetPreview> - "<<"Exit-");
  873. throw iret;
  874. }
  875. g_isshow = TRUE;
  876. g_ishide = FALSE;
  877. HSP_SetPara();//如果先设置参数再调预览,要预览起来之后做参数设置
  878. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetPreview","g_color=%d",g_color);
  879. LOG4VTM(WARN, "<SetPreview> - "<<"g_color="<<g_color);
  880. if (g_color == cFULL)
  881. {
  882. iretval = g_var->HIGH_SetColorType(0);
  883. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetPreview","设置彩色HIGH_SetColorType return iretval=%d",iretval);
  884. LOG4VTM(WARN, "<SetPreview> - "<<"设置彩色HIGH_SetColorType return iretval="<<iretval);
  885. g_color = cErr;
  886. }
  887. if (g_color == cGRAY)
  888. {
  889. iretval = g_var->HIGH_SetColorType(1);
  890. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetPreview","设置灰度HIGH_SetColorType return iretval=%d",iretval);
  891. LOG4VTM(WARN, "<SetPreview> - "<<"设置灰度HIGH_SetColorType return iretval="<<iretval);
  892. g_color = cErr;
  893. }
  894. throw Error_Succeed;
  895. }
  896. else if (nValue == 0)//停止预览
  897. {
  898. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetPreview","进入操作关闭和销毁窗口..............");
  899. LOG4VTM(WARN, "<SetPreview> - "<<"进入操作关闭和销毁窗口..............");
  900. if(g_isshow == FALSE)
  901. {
  902. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetPreview","未开始预览,直接返回成功");
  903. LOG4VTM(WARN, "<SetPreview> - "<<"未开始预览,直接返回成功");
  904. throw Error_Succeed;
  905. }
  906. iretval = g_var->HIGH_CloseWindow();
  907. CILIX_AUX_X::Sleep(1000);
  908. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetPreview","HIGH_CloseWindow return %d",iretval);
  909. LOG4VTM(WARN, "<SetPreview> - "<<"HIGH_CloseWindow return "<<iretval);
  910. if (iretval != 0)
  911. {
  912. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"SetPreview","窗口销毁操作失败,HIGH_CloseWindow return %d",iretval);
  913. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  914. strcpy(m_Error.szErrMsg,"窗口销毁操作失败");
  915. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  916. iret = Error_DevCommFailed;
  917. LOG4VTM(WARN, "<SetPreview> - "<<"窗口销毁操作失败,HIGH_CloseWindow return "<<iretval);
  918. LOG4VTM(WARN, "<SetPreview> - "<<"Exit-");
  919. throw iret;
  920. }
  921. g_isshow = FALSE;
  922. g_ishide = TRUE;
  923. throw Error_Succeed;
  924. }
  925. else
  926. {
  927. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"SetPreview","输入参数不符合规范");
  928. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  929. strcpy(m_Error.szErrMsg,"输入参数不符合规范");
  930. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  931. LOG4VTM(WARN, "<SetPreview> - "<<"输入参数不符合规范");
  932. LOG4VTM(WARN, "<SetPreview> - "<<"Exit-");
  933. throw Error_Param;
  934. }
  935. }
  936. catch (ErrorCodeEnum eret)
  937. {
  938. iret = eret;
  939. }
  940. return iret;
  941. }
  942. //
  943. // Scan Image from device and store the image.
  944. // -pszFileName[in] Store the path and name using suffix ".jpg"
  945. // specifies that where the image will be located and what it would be named.
  946. // 拍摄照片,传入的文件名已带绝对路径,无需再进行拼接处理
  947. //
  948. ErrorCodeEnum CHSPScanner::ScanImage(const char* pszFileName)
  949. {
  950. ErrorCodeEnum iret = Error_Succeed;
  951. int iretval = 0;
  952. LOG4VTM(WARN, "<ScanImage> - "<<"Entry-");
  953. LOG4VTM(WARN, "<ScanImage> - "<<"拍照图片存储路径:"<<pszFileName);
  954. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"ScanImage","拍照图片存储路径:%s",pszFileName);
  955. if (strlen(pszFileName) <= 0)
  956. {
  957. iret = Error_Param;
  958. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"ScanImage","输入保存拍照路径为空,返回:%d",iret);
  959. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  960. strcpy(m_Error.szErrMsg,"输入保存拍照路径为空");
  961. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  962. LOG4VTM(WARN, "<ScanImage> - "<<"输入保存拍照路径为空,返回:"<<iret);
  963. LOG4VTM(WARN, "<ScanImage> - "<<"Exit-");
  964. return iret;
  965. }
  966. if (pszFileName[0] != '/')
  967. {
  968. iret = Error_Param;
  969. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"ScanImage","输入保存拍照路径格式异常,返回:%d",iret);
  970. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  971. strcpy(m_Error.szErrMsg,"输入保存拍照路径为空");
  972. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  973. LOG4VTM(WARN, "<ScanImage> - "<<"输入保存拍照路径格式异常,返回:"<<iret);
  974. LOG4VTM(WARN, "<ScanImage> - "<<"Exit-");
  975. return iret;
  976. }
  977. if (!g_var->m_connect)
  978. {
  979. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"ScanImage","未做DevOpen操作");
  980. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  981. strcpy(m_Error.szErrMsg,"未做DevOpen操作");
  982. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  983. iret = Error_NotInit;
  984. LOG4VTM(WARN, "<ScanImage> - "<<"未做DevOpen操作");
  985. LOG4VTM(WARN, "<ScanImage> - "<<"Exit-");
  986. throw iret;
  987. }
  988. if (g_isshow != TRUE)
  989. {
  990. iret = Error_DevMedia;
  991. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"ScanImage","未处于预览状态,返回:%d",iret);
  992. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  993. strcpy(m_Error.szErrMsg,"预览窗口未创建,不能拍照");
  994. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  995. LOG4VTM(WARN, "<ScanImage> - "<<"未处于预览状态,返回:"<<iret);
  996. LOG4VTM(WARN, "<ScanImage> - "<<"Exit-");
  997. return iret;
  998. }
  999. //创建路径并赋权限
  1000. CreateDir((char*)pszFileName);
  1001. //保存图像
  1002. iretval = g_var->HIGH_TakePicture((char*)pszFileName);
  1003. if (iretval != 0)
  1004. {
  1005. iret = Error_DevCommFailed;
  1006. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"ScanImage","拍照失败,HIGH_TakePicture返回:%d",iretval);
  1007. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  1008. strcpy(m_Error.szErrMsg,"拍照失败");
  1009. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  1010. LOG4VTM(WARN, "<ScanImage> - "<<"拍照失败,HIGH_TakePicture返回:"<<iretval);
  1011. LOG4VTM(WARN, "<ScanImage> - "<<"Exit-");
  1012. return iret;
  1013. }
  1014. //判定图片是否生成
  1015. if (access(pszFileName,F_OK) != 0)
  1016. {
  1017. iret = Error_NotExist;
  1018. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"ScanImage","图片未保存成功");
  1019. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  1020. strcpy(m_Error.szErrMsg,"图片未保存成功");
  1021. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  1022. LOG4VTM(WARN, "<ScanImage> - "<<"图片未保存成功");
  1023. LOG4VTM(WARN, "<ScanImage> - "<<"Exit-");
  1024. return iret;
  1025. }
  1026. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  1027. strcpy(m_Error.szErrMsg,"拍照成功");
  1028. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  1029. LOG4VTM(WARN, "<ScanImage> - "<<"拍照成功");
  1030. LOG4VTM(WARN, "<ScanImage> - "<<"Exit-");
  1031. return Error_Succeed;
  1032. }
  1033. //
  1034. // Scan Image from device and return the image data in byte format.
  1035. // -pBtImg[out] The buffer used to store the scanned image data.
  1036. // 存储图片字节流的缓冲区,大小为 nBtLen 字节
  1037. // -nBtLen[in,out] Indicate the max byte-type size of pBtImg could be stored
  1038. // and Store the real byte-type size of pBtImg had used when returned.
  1039. // when detect value of nBtLen is 0 or smaller that necessary size, please
  1040. // set nBtlen with real byte-type size and return Error_TooSmallBuffer.
  1041. // 如果nBtLen指定的字节数过小,那么对nBtLen赋值实际所需的大小并返回 Error_TooSmallBuffer,此操作仅允许一次
  1042. // -pszFileName[in] Store the path and name where the image file should be located
  1043. // while "" indicates that the image file shouldn't be stored at locate.
  1044. // 文件名长度为零表示不在本地生成图片文件
  1045. //
  1046. //
  1047. ErrorCodeEnum CHSPScanner::ScanImageEx(BYTE* pBtImg, int& nBtLen, const char* pszFileName)
  1048. {
  1049. LOG4VTM(WARN, "<ScanImageEx> - "<<"Entry-");
  1050. ErrorCodeEnum iret = Error_Succeed;
  1051. int iretval = 0;
  1052. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"ScanImageEx","输入参数:pszFileName=%s,nBtLen=%d",pszFileName,nBtLen);
  1053. LOG4VTM(WARN, "<ScanImageEx> - "<<"输入参数:pszFileName="<<pszFileName);
  1054. LOG4VTM(WARN, "<ScanImageEx> - "<<"输入参数:nBtLen="<<nBtLen);
  1055. int iFlag = 0;
  1056. char cPicpath[1024]="";
  1057. CILIX_AUX_X::CILIX_GetModuleCurPath(cPicpath);
  1058. strcat(cPicpath,"HSPScanner.bmp");
  1059. if ((strlen(pszFileName) >0)&&(pszFileName[0] == '/'))
  1060. {
  1061. memset(cPicpath,0,sizeof(cPicpath));
  1062. strcpy(cPicpath,pszFileName);
  1063. iFlag = 1;
  1064. }
  1065. if (!g_var->m_connect)
  1066. {
  1067. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"ScanImageEx","未做DevOpen操作");
  1068. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  1069. strcpy(m_Error.szErrMsg,"未做DevOpen操作");
  1070. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  1071. iret = Error_NotInit;
  1072. LOG4VTM(WARN, "<ScanImageEx> - "<<"未做DevOpen操作");
  1073. LOG4VTM(WARN, "<ScanImageEx> - "<<"Exit-");
  1074. throw iret;
  1075. }
  1076. if (g_isshow != TRUE)
  1077. {
  1078. iret = Error_DevMedia;
  1079. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"ScanImageEx","未处于预览状态,返回:%d",iret);
  1080. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  1081. strcpy(m_Error.szErrMsg,"预览窗口未创建,不能拍照");
  1082. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  1083. LOG4VTM(WARN, "<ScanImageEx> - "<<"未处于预览状态,返回:"<<iret);
  1084. LOG4VTM(WARN, "<ScanImageEx> - "<<"Exit-");
  1085. return iret;
  1086. }
  1087. //创建路径并赋权限
  1088. CreateDir(cPicpath);
  1089. //保存图片
  1090. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"ScanImageEx","cPicpath=%s",cPicpath);
  1091. iretval = g_var->HIGH_TakePicture(cPicpath);
  1092. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"ScanImageEx","HIGH_TakePicture return %d",iretval);
  1093. if (iretval != 0)
  1094. {
  1095. iret = Error_DevCommFailed;
  1096. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"ScanImageEx","拍照失败,HIGH_TakePicture返回:%d",iretval);
  1097. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  1098. strcpy(m_Error.szErrMsg,"拍照失败");
  1099. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  1100. LOG4VTM(WARN, "<ScanImageEx> - "<<"拍照失败,HIGH_TakePicture返回:"<<iretval);
  1101. LOG4VTM(WARN, "<ScanImageEx> - "<<"Exit-");
  1102. return iret;
  1103. }
  1104. //判定图片是否生成
  1105. if (access(cPicpath,F_OK) != 0)
  1106. {
  1107. iret = Error_NotExist;
  1108. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"ScanImageEx","图片未保存成功");
  1109. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  1110. strcpy(m_Error.szErrMsg,"图片未保存成功");
  1111. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  1112. LOG4VTM(WARN, "<ScanImageEx> - "<<"图片未保存成功");
  1113. LOG4VTM(WARN, "<ScanImageEx> - "<<"Exit-");
  1114. return iret;
  1115. }
  1116. //获取图像数据输出给应用
  1117. chmod(cPicpath,ACCESSPERMS);
  1118. //获取图片的大小
  1119. int imagelen = 0;
  1120. imagelen = GetFileSizeEx(cPicpath);
  1121. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"ScanImageEx","GetFileSizeEx return %d",imagelen);
  1122. if (imagelen == -1)
  1123. {
  1124. iret = Error_NotExist;
  1125. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"ScanImageEx","操作打开图片文件失败");
  1126. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  1127. strcpy(m_Error.szErrMsg,"操作打开图片文件失败");
  1128. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  1129. LOG4VTM(WARN, "<ScanImageEx> - "<<"操作打开图片文件失败");
  1130. LOG4VTM(WARN, "<ScanImageEx> - "<<"Exit-");
  1131. return iret;
  1132. }
  1133. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"ScanImageEx","图片数据长度:imagelen=%d",imagelen);
  1134. LOG4VTM(WARN, "<ScanImageEx> - "<<"图片数据长度::"<<imagelen);
  1135. //申请空间获取图像数据
  1136. if (nBtLen < imagelen)
  1137. {
  1138. iret = Error_TooSmallBuffer;
  1139. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"ScanImageEx","传入存储指纹数据空间大小不够");
  1140. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  1141. strcpy(m_Error.szErrMsg,"传入存储指纹空间大小不够");
  1142. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  1143. nBtLen = imagelen;
  1144. LOG4VTM(WARN, "<ScanImageEx> - "<<"传入存储指纹数据空间大小不够");
  1145. LOG4VTM(WARN, "<ScanImageEx> - "<<"Exit-");
  1146. return iret;
  1147. }
  1148. char *cImageData = NULL;
  1149. cImageData = new char[imagelen+10];
  1150. int ilen = 0;
  1151. g_var->ReadFileEx(cPicpath,cImageData,&ilen);
  1152. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"ScanImageEx","ilen = %d",ilen);
  1153. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  1154. strcpy(m_Error.szErrMsg,"拍照成功");
  1155. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  1156. //赋值输出
  1157. memcpy(pBtImg,cImageData,ilen);
  1158. if (iFlag == 0)
  1159. delete_file(cPicpath);
  1160. delete[] cImageData;
  1161. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"ScanImageEx","拍照成功退出");
  1162. LOG4VTM(WARN, "<ScanImageEx> - "<<"拍照成功退出");
  1163. LOG4VTM(WARN, "<ScanImageEx> - "<<"Exit-");
  1164. return Error_Succeed;
  1165. }
  1166. //
  1167. // Set position and width of preview dialog with the rate of length to width: 16:9.
  1168. // -nX[in] The X coordinate of leftTop point.
  1169. // -nY[in] The Y coordinate of leftTop point.
  1170. // -nWidth[in] The Width of Preview Dialog .
  1171. // 传入预览窗口显示的坐标,左上角的横坐标nX,左上角的纵坐标nY,以及预览窗口的宽,宽与高的比例为 16:9
  1172. //
  1173. ErrorCodeEnum CHSPScanner::SetViewPos(int nX, int nY, int nWidth)
  1174. {
  1175. ErrorCodeEnum iret = Error_Succeed;
  1176. LOG4VTM(WARN, "<SetViewPos> - "<<"Entry-");
  1177. LOG4VTM(WARN, "<SetViewPos> - "<<"输入参数:nX="<<nX);
  1178. LOG4VTM(WARN, "<SetViewPos> - "<<"输入参数:nY="<<nY);
  1179. LOG4VTM(WARN, "<SetViewPos> - "<<"输入参数:nWidth="<<nWidth);
  1180. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetViewPos","输入参数:nX=%d,nY=%d,nWidth=%d",nX,nY,nWidth);
  1181. if ((nX < 0) || (nY < 0) || (nWidth < 0))
  1182. {
  1183. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"SetViewPos","输入参数不符合要求");
  1184. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  1185. strcpy(m_Error.szErrMsg,"输入参数不符合要求");
  1186. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  1187. iret = Error_Param;
  1188. LOG4VTM(WARN, "<SetViewPos> - "<<"输入参数不符合要求");
  1189. LOG4VTM(WARN, "<SetViewPos> - "<<"Exit-");
  1190. return iret;
  1191. }
  1192. else
  1193. {
  1194. if (g_X != nX)
  1195. g_X=nX;
  1196. if (g_Y != nY)
  1197. g_Y=nY;
  1198. if (g_Width != nWidth)
  1199. g_Width=nWidth;
  1200. if (g_Height != ((int)(9*nWidth)/16))
  1201. g_Height=(int)(9*nWidth)/16;
  1202. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetViewPos","g_X=%d,g_Y=%d,g_Width=%d,g_Height=%d",g_X,g_Y,g_Width,g_Height);
  1203. LOG4VTM(WARN, "<SetViewPos> - "<<"g_Height="<<g_Height);
  1204. if (g_isshow == TRUE)//在预览状态
  1205. {
  1206. int ii = g_var->HIGH_CreateWindow(g_X,g_Y,g_Width,g_Height);
  1207. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetViewPos","HIGH_CreateWindow return %d",ii);
  1208. LOG4VTM(WARN, "<SetViewPos> - "<<"HIGH_CreateWindow return "<<ii);
  1209. }
  1210. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetViewPos","设置窗口坐标成功");
  1211. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  1212. strcpy(m_Error.szErrMsg,"设置成功");
  1213. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  1214. LOG4VTM(WARN, "<SetViewPos> - "<<"设置窗口坐标成功");
  1215. LOG4VTM(WARN, "<SetViewPos> - "<<"Exit-");
  1216. return Error_Succeed;
  1217. }
  1218. }
  1219. //
  1220. // Show property dialog of HSPS of LiangTian.
  1221. // If there is no property dialog function, ignore it and return Error_NotImpl(更新20161117).
  1222. // 更新20161117:用于打开良田高拍仪设备的设置属性页,可能用不到
  1223. //
  1224. ErrorCodeEnum CHSPScanner::SetProperty()
  1225. {
  1226. LOG4VTM(WARN, "<SetProperty> - "<<"Entry-");
  1227. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetProperty","Entry.......................");
  1228. ErrorCodeEnum iret = Error_Succeed;
  1229. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  1230. strcpy(m_Error.szErrMsg,"不支持该功能");
  1231. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  1232. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"SetProperty","不支持该功能");
  1233. LOG4VTM(WARN, "<SetProperty> - "<<"不支持该功能");
  1234. LOG4VTM(WARN, "<SetProperty> - "<<"Exit-");
  1235. return Error_NotSupport;
  1236. }
  1237. //
  1238. // Get current status of device.
  1239. //
  1240. ErrorCodeEnum CHSPScanner::GetDevStatus(HspsDevStatus& status)
  1241. {
  1242. ErrorCodeEnum iret = Error_Succeed;
  1243. int iretval = 0;
  1244. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"GetDevStatus","开始查询状态");
  1245. LOG4VTM(WARN, "<GetDevStatus> - "<<"Entry-");
  1246. if (!g_var->m_isLoad)
  1247. {
  1248. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"GetDevStatus","高拍仪so或函数加载失败");
  1249. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  1250. strcpy(m_Error.szErrMsg,"高拍仪so或函数加载失败");
  1251. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  1252. iret = Error_DevLoadFileFailed;
  1253. LOG4VTM(WARN, "<GetDevStatus> - "<<"高拍仪so或函数加载失败");
  1254. LOG4VTM(WARN, "<GetDevStatus> - "<<"Exit-");
  1255. return iret;
  1256. }
  1257. int istatus = -1;
  1258. g_var->HIGH_GetStatus(&istatus);
  1259. g_var->m_trace->WriteTrace(CILIXTRACE_L_DEBUG,"GetDevStatus","获取高拍仪的状态istatus=%d",istatus);
  1260. g_var->m_trace->WriteTrace(CILIXTRACE_L_DEBUG,"GetDevStatus","g_isshow=%d,g_ishide=%d",g_isshow,g_ishide);
  1261. if (istatus != 0 && istatus != 2)
  1262. m_isOnline = FALSE;
  1263. else
  1264. m_isOnline = TRUE;
  1265. if (m_isOnline)//分析目前是预览、非预览和还是隐藏状态
  1266. {
  1267. status.isConnected = 1;
  1268. if (!g_isshow)
  1269. {
  1270. status.inPreview = 0;
  1271. status.inShow = 0;
  1272. }
  1273. else
  1274. {
  1275. status.inPreview = 1;
  1276. if (!g_ishide)
  1277. status.inShow = 1;
  1278. else
  1279. status.inShow = 0;
  1280. }
  1281. }
  1282. else//判断到如果是不在线,如果处于预览或隐藏状态需要销毁窗口
  1283. {
  1284. status.isConnected = 0;
  1285. if (g_isshow)//预览
  1286. {
  1287. iretval = g_var->HIGH_CloseWindow();
  1288. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"GetDevStatus","HIGH_CloseWindow return %d",iretval);
  1289. LOG4VTM(WARN, "<GetDevStatus> - "<<"HIGH_CloseWindow return "<<iretval);
  1290. }
  1291. status.inPreview = 0;
  1292. status.inShow = 0;
  1293. }
  1294. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  1295. strcpy(m_Error.szErrMsg,"获取设备状态成功");
  1296. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  1297. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"GetDevStatus","查询状态成功");
  1298. LOG4VTM(WARN, "<GetDevStatus> - "<<"查询状态成功");
  1299. LOG4VTM(WARN, "<GetDevStatus> - "<<"Exit-");
  1300. return Error_Succeed;
  1301. }
  1302. //
  1303. // Get category infomation about device.
  1304. //
  1305. ErrorCodeEnum CHSPScanner::GetDevCategory(DevCategoryInfo &devCategory)
  1306. {
  1307. memset(devCategory.szType,0,sizeof(devCategory.szType));
  1308. strcpy(devCategory.szType,"PVER=KGR#MID=KGR-Q800F");
  1309. memset(devCategory.szModel,0,sizeof(devCategory.szModel));
  1310. strcpy(devCategory.szModel,"FWID=1.0.1");
  1311. memset(devCategory.szVendor,0,sizeof(devCategory.szVendor));
  1312. strcpy(devCategory.szVendor,"nantian");
  1313. if (m_isOnline)
  1314. devCategory.eState = DEVICE_STATUS_CONNECTING;
  1315. else
  1316. devCategory.eState = DEVICE_STATUS_FAULT;
  1317. devCategory.version.wMajor = 1;
  1318. devCategory.version.wMinor = 0;
  1319. devCategory.version.wRevision = 0;
  1320. devCategory.version.wBuild = 8;
  1321. return Error_Succeed;
  1322. }
  1323. // Reset device.
  1324. // Do the cleaning work and initialize device again in order to return to
  1325. // the normal condition.
  1326. ErrorCodeEnum CHSPScanner::Reset()
  1327. {
  1328. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"Reset","Entry......................");
  1329. LOG4VTM(WARN, "<Reset> - "<<"Entry-");
  1330. ErrorCodeEnum iret = Error_Succeed;
  1331. int iretval = -1;
  1332. if (m_isOnline)
  1333. {
  1334. if (!g_isshow)
  1335. {
  1336. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"Reset","复位成功");
  1337. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  1338. strcpy(m_Error.szErrMsg,"复位成功");
  1339. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  1340. LOG4VTM(WARN, "<Reset> - "<<"复位成功");
  1341. LOG4VTM(WARN, "<Reset> - "<<"Exit-");
  1342. return Error_Succeed;
  1343. }
  1344. iretval = g_var->HIGH_CloseWindow();
  1345. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"Reset","HIGH_CloseWindow return %d",iretval);
  1346. LOG4VTM(WARN, "<Reset> - "<<"HIGH_CloseWindow return "<<iretval);
  1347. if (iretval !=0)
  1348. {
  1349. g_var->m_trace->WriteTrace(CILIXTRACE_L_ERROR,"GetDevStatus","高拍仪复位失败,HIGH_CloseWindow return %d",iretval);
  1350. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  1351. strcpy(m_Error.szErrMsg,"高拍仪复位失败");
  1352. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  1353. iret = Error_DevCommFailed;
  1354. LOG4VTM(WARN, "<Reset> - "<<"高拍仪复位失败,HIGH_CloseWindow return "<<iretval);
  1355. LOG4VTM(WARN, "<Reset> - "<<"Exit-");
  1356. return iret;
  1357. }
  1358. g_isshow = FALSE;
  1359. g_ishide = TRUE;
  1360. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"Reset","设备复位成功");
  1361. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  1362. strcpy(m_Error.szErrMsg,"设备复位成功");
  1363. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  1364. LOG4VTM(WARN, "<Reset> - "<<"设备复位成功");
  1365. LOG4VTM(WARN, "<Reset> - "<<"Exit-");
  1366. return Error_Succeed;
  1367. }
  1368. else
  1369. {
  1370. iret = Error_DevCommFailed;
  1371. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"Reset","设备复位失败,iret = %d",iret);
  1372. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  1373. strcpy(m_Error.szErrMsg,"设备复位失败");
  1374. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  1375. LOG4VTM(WARN, "<Reset> - "<<"设备复位失败,iret = "<<iret);
  1376. LOG4VTM(WARN, "<Reset> - "<<"Exit-");
  1377. return iret;
  1378. }
  1379. }
  1380. //
  1381. // Close device and do the cleaning work.
  1382. // ex. close connection,close port,release memery and so on
  1383. ErrorCodeEnum CHSPScanner::DevClose()
  1384. {
  1385. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"DevClose","Entry....................");
  1386. LOG4VTM(WARN, "<DevClose> - "<<"Entry-");
  1387. int iretval = -1;
  1388. BOOL bret = FALSE;
  1389. if (!g_var->m_connect)
  1390. {
  1391. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"DevClose","设备未打开,直接返成功");
  1392. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  1393. strcpy(m_Error.szErrMsg,"设备关闭成功");
  1394. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  1395. LOG4VTM(WARN, "<DevClose> - "<<"设备未打开,直接返成功");
  1396. LOG4VTM(WARN, "<DevClose> - "<<"Exit-");
  1397. return Error_Succeed;
  1398. }
  1399. //关闭窗口
  1400. if(g_isshow)
  1401. {
  1402. iretval = g_var->HIGH_CloseWindow();
  1403. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"DevClose","HIGH_CloseWindow return %d",iretval);
  1404. if (iretval != 0)
  1405. {
  1406. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"DevClose","高拍仪关闭预览窗口失败,HIGH_CloseWindow return iretval = %d",iretval);
  1407. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  1408. strcpy(m_Error.szErrMsg,"高拍仪关闭预览窗口失败");
  1409. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  1410. LOG4VTM(WARN, "<DevClose> - "<<"高拍仪关闭预览窗口失败,HIGH_CloseWindow return iretval = "<<iretval);
  1411. LOG4VTM(WARN, "<DevClose> - "<<"Exit-");
  1412. return Error_DevCommFailed;
  1413. }
  1414. }
  1415. //关闭高拍仪
  1416. iretval = g_var->HIGH_StopCamera();
  1417. if (iretval != 0)
  1418. {
  1419. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"DevClose","高拍仪关闭失败,iretval = %d",iretval);
  1420. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  1421. strcpy(m_Error.szErrMsg,"高拍仪关闭失败");
  1422. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  1423. LOG4VTM(WARN, "<DevClose> - "<<"高拍仪关闭失败,iretval = "<<iretval);
  1424. LOG4VTM(WARN, "<DevClose> - "<<"Exit-");
  1425. return Error_DevCommFailed;
  1426. }
  1427. g_isshow = FALSE;
  1428. g_ishide = TRUE;
  1429. g_var->m_trace->WriteTrace(CILIXTRACE_L_INFO,"DevClose","设备关闭成功");
  1430. memset(m_Error.szErrMsg,0,sizeof(m_Error.szErrMsg));
  1431. strcpy(m_Error.szErrMsg,"设备关闭成功");
  1432. m_Error.dwErrMsgLen = strlen(m_Error.szErrMsg);
  1433. g_var->m_connect = FALSE;
  1434. m_isOnline = FALSE;
  1435. LOG4VTM(WARN, "<DevClose> - "<<"设备关闭成功");
  1436. LOG4VTM(WARN, "<DevClose> - "<<"Exit-");
  1437. return Error_Succeed;
  1438. }
  1439. // Get last error the device issued.
  1440. // Error message must include explanatory memorandum ,the original error
  1441. // code and anything in favour of location problem.
  1442. ErrorCodeEnum CHSPScanner::GetLastErr(DevErrorInfo &devErrInfo)
  1443. {
  1444. memset(devErrInfo.szErrMsg,0,sizeof(devErrInfo.szErrMsg));
  1445. devErrInfo.dwErrMsgLen = m_Error.dwErrMsgLen;
  1446. memcpy(devErrInfo.szErrMsg,m_Error.szErrMsg,m_Error.dwErrMsgLen);
  1447. return Error_Succeed;
  1448. }