Gpio.nantian.cpp 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561
  1. #include "Gpio.nantian.h"
  2. GPIO_NT_NAC::GPIO_NT_NAC()
  3. {
  4. //初始化
  5. m_trace = new CILIXTrace(NULL, "NT_NAC", "GPIO_NT_NAC");
  6. m_device = NULL;
  7. dplHandle = NULL;
  8. m_connect = false;
  9. VC_Creat_NTDRV_NT_NAC = NULL;
  10. VC_Destroy_NTDRV_NT_NAC = NULL;
  11. m_loadDllFlag = false;
  12. m_busy_flag = false;
  13. m_read_port_flag = false;
  14. m_ptStatus = 0;
  15. //初始化日志
  16. char INIPath[100] = "";
  17. CILIX_AUX_X::CILIX_GetModuleCurPath(INIPath);
  18. //strcat(INIPath, "log.nantian.ini");
  19. strcat(INIPath, "nantian/log.nantian.ini");
  20. char log_dir[100] = "";
  21. CILIX_AUX_X::CILIX_X_INIKeyString(INIPath, "LOGConfig", "log_dir", log_dir, "/etc/nantian");
  22. char log_level[100] = "";
  23. CILIX_AUX_X::CILIX_X_INIKeyString(INIPath, "LOGConfig", "log_level", log_level, "3");
  24. cmb::log_init_config config;
  25. config.dev_name = "GPIO";
  26. config.log_dir = log_dir;
  27. config.log_level = atoi(log_level);
  28. std::string str;
  29. cmb::log4vendor::init(config, str);
  30. //LOG4VTM(WARN, "GPIO_NT_NAC::GPIO_NT_NAC "
  31. // << "libGpio.Nantian.1.1.so -v 1.0.0.2");
  32. //加载设备库
  33. m_loadDllFlag = LoadNTDRVSO();
  34. }
  35. GPIO_NT_NAC::~GPIO_NT_NAC()
  36. {
  37. if (m_trace != NULL)
  38. delete m_trace;
  39. if (m_device != NULL)
  40. VC_Destroy_NTDRV_NT_NAC(m_device);
  41. if (dplHandle != NULL)
  42. {
  43. dlclose(dplHandle);
  44. dplHandle = NULL;
  45. }
  46. }
  47. bool GPIO_NT_NAC::LoadNTDRVSO()
  48. {
  49. char sCurPath[1024] = "";
  50. char sSOPath[1024] = "";
  51. CILIX_AUX_X::CILIX_GetModuleCurPath(sCurPath);
  52. sprintf(sSOPath, "%snantian/libDRV_NT_NAC.nantian.so", sCurPath);
  53. m_trace->WriteTrace("GPIO_NT_NAC::LoadNTDRVDLL", "DLLPath=%s", sSOPath);
  54. LOG4VTM(WARN, "GPIO_NT_NAC::LoadNTDRVDLL"
  55. << "DLLPath=" << sSOPath);
  56. void *pszErr = NULL;
  57. dplHandle = dlopen(sSOPath, RTLD_LAZY);
  58. if (!dplHandle || pszErr)
  59. {
  60. m_trace->WriteTrace("GVar::LoadDRVSO", "Load SO Fail!,reson:%s", dlerror());
  61. LOG4VTM(WARN, "GVar::LoadDRVSO"
  62. << "Load SO Fail!,reson:%s" << dlerror());
  63. return false;
  64. }
  65. VC_Creat_NTDRV_NT_NAC = (pCreat_NTDRV_NT_NAC)dlsym(dplHandle, "Creat_NTDRV_NT_NAC");
  66. if (VC_Creat_NTDRV_NT_NAC == NULL)
  67. {
  68. m_trace->WriteTrace("GVar::LoadDRVSO", "Load Create_DRV_Siu Fali!");
  69. LOG4VTM(WARN, "GVar::LoadDRVSO"
  70. << "Load Create_DRV_Siu Fali!");
  71. return false;
  72. }
  73. VC_Destroy_NTDRV_NT_NAC = (pDestroy_NTDRV_NT_NAC)dlsym(dplHandle, "Destory_NTDRV_NT_NAC");
  74. if (VC_Destroy_NTDRV_NT_NAC == NULL)
  75. {
  76. m_trace->WriteTrace("GVar::LoadDRVSO", "Load Destory_DRV_Siu Fail!");
  77. LOG4VTM(WARN, "GVar::LoadDRVSO"
  78. << "Load Destory_DRV_Siu Fail!");
  79. return false;
  80. }
  81. m_device = VC_Creat_NTDRV_NT_NAC();
  82. return true;
  83. }
  84. GPIO_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass *&baseObj)
  85. {
  86. baseObj = new GPIO_NT_NAC();
  87. if (baseObj == NULL)
  88. return Error_Resource;
  89. return Error_Succeed;
  90. }
  91. GPIO_API ErrorCodeEnum ReleaseDevComponent(DeviceBaseClass *&pBaseObj)
  92. {
  93. if (pBaseObj == NULL)
  94. return Error_Param;
  95. /*LOG4VTM(WARN, "ReleaseDevComponent "
  96. << "Enter");
  97. LOG4VTM(WARN, "ReleaseDevComponent "
  98. << "Exit");*/
  99. delete ((GPIO_NT_NAC *)pBaseObj);
  100. return Error_Succeed;
  101. }
  102. ////////////////////////////////////////////////////////////////////////////////////////
  103. ErrorCodeEnum GPIO_NT_NAC::GetLastErr(DevErrorInfo &devErrInfo)
  104. {
  105. int iret = Error_Succeed;
  106. CILIXAutoTrace __at(m_trace, "GetLastErr", &iret);
  107. LOG4VTM(WARN, "GetLastErr "
  108. << "Enter");
  109. devErrInfo.dwErrMsgLen = m_errorInfo.dwErrMsgLen;
  110. strcpy(devErrInfo.szErrMsg, m_errorInfo.szErrMsg);
  111. LOG4VTM(WARN, "GetLastErr "
  112. << "Exit");
  113. return Error_Succeed;
  114. }
  115. ErrorCodeEnum GPIO_NT_NAC::DevOpen(GpioInitParam initParam)
  116. {
  117. int iret = Error_Succeed;
  118. CILIXAutoTrace __at(m_trace, "DevOpen", &iret);
  119. LOG4VTM(WARN, "DevOpen "
  120. << "Enter");
  121. //判断设备库加载是否成功
  122. if (this->m_loadDllFlag == false)
  123. {
  124. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  125. strcpy(m_errorInfo.szErrMsg, "load vendor NTDRV dll failed!");
  126. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  127. iret = Error_DevLoadFileFailed;
  128. return Error_DevLoadFileFailed;
  129. }
  130. //判断是否初始化
  131. if (m_connect == true)
  132. return Error_Succeed;
  133. //赋值
  134. m_initParam = initParam;
  135. //参数判断
  136. if (m_initParam.dwPortNum > MAX_PORT_NUM)
  137. {
  138. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  139. strcpy(m_errorInfo.szErrMsg, "Number of port to set is invalid!");
  140. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  141. iret = Error_Param;
  142. return Error_Param;
  143. }
  144. //记录初始化参数信息
  145. int ilen = 0;
  146. char logBuff[100] = "";
  147. sprintf(logBuff, "PortsInfo: dwPortNum=%d", m_initParam.dwPortNum);
  148. for (int i = 0; i < m_initParam.dwPortNum; i++)
  149. {
  150. ilen = strlen(logBuff);
  151. sprintf(logBuff + ilen, ", dir[%d]=%d", i, m_initParam.dir[i]);
  152. }
  153. m_trace->WriteTrace("DevOpen", "%s", logBuff);
  154. LOG4VTM(WARN, "DevOpen "
  155. << "logBuff");
  156. //端口由应用传入,传入的是设备2的端口号;
  157. //打开设备
  158. iret = m_device->OpenDevice(initParam.dwPort-1, initParam.dwBaudRate);
  159. m_trace->WriteTrace("DevOpen", "Invoke OpenDevice(%d,%d) return %d", initParam.dwPort-1, initParam.dwBaudRate, iret);
  160. LOG4VTM(WARN, "DevOpen "
  161. << "Invoke OpenDevice Port=ttyXRUSB" << initParam.dwPort -1 << " Rate=" << initParam.dwBaudRate << "return:" << iret);
  162. if (iret != 0)
  163. {
  164. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  165. strcpy(m_errorInfo.szErrMsg, "connect to device failed!");
  166. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  167. m_connect = false;
  168. return Error_DevConnFailed;
  169. }
  170. m_connect = true;
  171. LOG4VTM(WARN, "DevOpen "
  172. << "Exit ");
  173. return Error_Succeed;
  174. }
  175. ErrorCodeEnum GPIO_NT_NAC::DevClose()
  176. {
  177. m_busy_flag = true;
  178. //WAITING_LOOP();
  179. int iret = Error_Succeed;
  180. CILIXAutoTrace __at(m_trace, "DevClose", &iret);
  181. LOG4VTM(WARN, "DevClose "
  182. << "Enter ");
  183. //判断是否初始化
  184. if (m_connect == true)
  185. {
  186. int iret = m_device->CloseDevice();
  187. m_trace->WriteTrace("DevClose", "Invoke CloseDevice return %d", iret);
  188. LOG4VTM(WARN, "DevClose "
  189. << "Invoke CloseDevice return " << iret);
  190. m_connect = false;
  191. }
  192. m_busy_flag = false;
  193. LOG4VTM(WARN, "DevClose "
  194. << "Exit ");
  195. return Error_Succeed;
  196. }
  197. ErrorCodeEnum GPIO_NT_NAC::GetDevCategory(DevCategoryInfo &devCategory)
  198. {
  199. m_busy_flag = true;
  200. //WAITING_LOOP();
  201. int iret = Error_Succeed;
  202. CILIXAutoTrace __at(m_trace, "GetDevCategory", &iret);
  203. LOG4VTM(WARN, "GetDevCategory "
  204. << "Enter ");
  205. //赋值
  206. strcpy(devCategory.szType, "PVER=NT#MID=NT_NAC");
  207. strcpy(devCategory.szVendor, "nantian");
  208. devCategory.version.wMajor = 1;
  209. devCategory.version.wMinor = 0;
  210. devCategory.version.wRevision = 0;
  211. devCategory.version.wBuild = 2;
  212. //设备未连接
  213. if (m_connect == false)
  214. {
  215. strcpy(devCategory.szModel, "");
  216. devCategory.eState = DEVICE_STATUS_NOT_READY;
  217. //置标记
  218. m_busy_flag = false;
  219. return Error_Succeed;
  220. }
  221. //通过获取固件版本来获取硬件设备状态
  222. char sDevVer[100] = "";
  223. char sDevVerEx[100] = "";
  224. //设备1
  225. int iret1 = m_device->GetFirmwareVersion(sDevVer);
  226. m_trace->WriteTrace(CILIXTRACE_L_DEBUG, "GetDevCategory", "[1]Invoke GetFirmwareVersion return %d", iret1);
  227. LOG4VTM(WARN, "GetDevCategory "
  228. << "Invoke GetFirmwareVersion return " << iret1);
  229. //设备2
  230. int iret2 = m_device->GetFirmwareVersionEx(sDevVerEx);
  231. m_trace->WriteTrace(CILIXTRACE_L_DEBUG, "GetDevCategory", "[2]Invoke GetFirmwareVersion return %d", iret2);
  232. LOG4VTM(WARN, "GetDevCategory "
  233. << "Invoke GetFirmwareVersionEx return " << iret2);
  234. char sDevVerModel[100] = "";
  235. sprintf(sDevVerModel,"FWID=%s",sDevVer);
  236. strcpy(devCategory.szModel, sDevVerModel);
  237. if (iret1 == 0 && iret2 == 0)
  238. devCategory.eState = DEVICE_STATUS_NORMAL;
  239. else
  240. devCategory.eState = DEVICE_STATUS_FAULT;
  241. m_busy_flag = false;
  242. LOG4VTM(WARN, "GetDevCategory "
  243. << "Exit ");
  244. return Error_Succeed;
  245. }
  246. ErrorCodeEnum GPIO_NT_NAC::Reset()
  247. {
  248. m_busy_flag = true;
  249. //WAITING_LOOP();
  250. int iret = Error_Succeed;
  251. CILIXAutoTrace __at(m_trace, "Reset", &iret);
  252. LOG4VTM(WARN, "Reset "
  253. << "Enter ");
  254. //判断是否连接
  255. if (m_connect == false)
  256. {
  257. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  258. strcpy(m_errorInfo.szErrMsg, "device not connected!");
  259. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  260. //置标记
  261. m_busy_flag = false;
  262. iret = Error_DevNotAvailable;
  263. return Error_DevNotAvailable;
  264. }
  265. //复位设备
  266. iret = m_device->ResetDevice();
  267. m_trace->WriteTrace("Reset", "Invoke ResetDevice return %d", iret);
  268. LOG4VTM(WARN, "Reset "
  269. << "Invoke ResetDevice return: " << iret);
  270. if (iret != 0 )
  271. {
  272. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  273. strcpy(m_errorInfo.szErrMsg, "Communication failed between HOST and Device!");
  274. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  275. //置标记
  276. m_busy_flag = false;
  277. return Error_DevCommFailed;
  278. }
  279. m_busy_flag = false;
  280. LOG4VTM(WARN, "Reset "
  281. << "Exit ");
  282. return Error_Succeed;
  283. }
  284. ErrorCodeEnum GPIO_NT_NAC::WritePort(DWORD dwPort, BYTE btData)
  285. {
  286. m_busy_flag = true;
  287. //WAITING_LOOP();
  288. int iret = Error_Succeed;
  289. CILIXAutoTrace __at(m_trace, "WritePort", &iret);
  290. LOG4VTM(WARN, "WritePort "
  291. << "Enter ");
  292. //判断是否连接
  293. if (m_connect == false)
  294. {
  295. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  296. strcpy(m_errorInfo.szErrMsg, "device not connected!");
  297. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  298. //置标记
  299. m_busy_flag = false;
  300. iret = Error_DevNotAvailable;
  301. return Error_DevNotAvailable;
  302. }
  303. m_trace->WriteTrace("WritePort", "dwPort=%d, btData=%d", dwPort, btData);
  304. LOG4VTM(WARN, "WritePort "
  305. << "dwPort=" << dwPort << " btData= " << (int)btData);
  306. //判断端口是否合法
  307. if (dwPort > m_initParam.dwPortNum || dwPort < 0)
  308. {
  309. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  310. strcpy(m_errorInfo.szErrMsg, "Number of port to set is invalid!");
  311. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  312. //置标记
  313. m_busy_flag = false;
  314. iret = Error_Param;
  315. return Error_Param;
  316. }
  317. //判断端口的属性是否合法
  318. if (m_initParam.dir[dwPort] != 1)
  319. {
  320. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  321. strcpy(m_errorInfo.szErrMsg, "Type of port to set is invalid!");
  322. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  323. //置标记
  324. m_busy_flag = false;
  325. iret = Error_Param;
  326. return Error_Param;
  327. }
  328. //设置输出
  329. if (dwPort == 0)
  330. {
  331. //P0.1,设备1,OUT1
  332. iret = m_device->SetOutputStatus(1, (btData & 0x01)); //读卡器指示灯
  333. //P0.2,设备2,OUT8
  334. iret = m_device->SetOutputStatusEx(8, (btData & 0x02) >> 1); //USB通断控制
  335. //P0.3,设备1,OUT3
  336. iret = m_device->SetOutputStatus(3, (btData & 0x04) >> 2); //身份证指示灯
  337. //P0.4,设备2,OUT2
  338. iret = m_device->SetOutputStatusEx(2, (btData & 0x08) >> 3); //键盘指示灯
  339. //P0.5,设备2,OUT0
  340. iret = m_device->SetOutputStatusEx(0, (btData & 0x10) >> 4); //面部照明灯
  341. //P0.6,设备2,OUT1
  342. iret = m_device->SetOutputStatusEx(1, (btData & 0x20) >> 5); //故障灯
  343. //P0.7,设备1,OUT0
  344. iret = m_device->SetOutputStatus(0, (btData & 0x40) >> 6); //卡机维护灯
  345. //P0.8,设备2,OUT6
  346. iret = m_device->SetOutputStatusEx(6, (btData & 0x80) >> 7); //USB指示灯
  347. }
  348. else if (dwPort == 1)
  349. {
  350. //P1.1,设备1,OUT8
  351. iret = m_device->SetOutputStatus(8, (btData & 0x01)); //非接指示灯
  352. //P1.2,设备2,OUT3
  353. iret = m_device->SetOutputStatusEx(3, (btData & 0x02) >> 1); //二维码指示灯
  354. //P1.3,设备1,OUT4
  355. iret = m_device->SetOutputStatus(4, (btData & 0x04) >> 2); //指纹仪指示灯
  356. //P1.4,设备1,OUT2
  357. iret = m_device->SetOutputStatus(2, (btData & 0x08) >> 3); //凭条指示灯
  358. //P1.5,13,设备2,OUT10
  359. iret = m_device->SetOutputStatusEx(10, (btData & 0x10) >> 4); //高拍仪照明灯
  360. //P1.6,设备2,OUT4
  361. iret = m_device->SetOutputStatusEx(4, (btData & 0x20) >> 5); //激光打印机绿灯
  362. //P1.7,设备1,OUT5
  363. iret = m_device->SetOutputStatus(5, (btData & 0x40) >> 6); //纸盒指示灯绿灯
  364. //P1.8,设备1,OUT6
  365. iret = m_device->SetOutputStatus(6, (btData & 0x80) >> 7); //纸盒指示灯红灯
  366. }
  367. else if (dwPort == 3)
  368. {
  369. //P1.1,25,设备2,OUT5
  370. iret = m_device->SetOutputStatusEx(5, (btData & 0x01)); //激光打印机红灯
  371. //P1.2,26,设备2,OUT9
  372. iret = m_device->SetOutputStatusEx(9, (btData & 0x02) >> 1); //高拍仪提示灯
  373. }
  374. if (iret != 0)
  375. {
  376. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  377. strcpy(m_errorInfo.szErrMsg, "Communication failed between HOST and Device!");
  378. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  379. //置标记
  380. m_busy_flag = false;
  381. return Error_DevCommFailed;
  382. }
  383. m_busy_flag = false;
  384. LOG4VTM(WARN, "WritePort "
  385. << "Exit ");
  386. return Error_Succeed;
  387. }
  388. ErrorCodeEnum GPIO_NT_NAC::ReadPort(DWORD dwPort, BYTE &btStatus)
  389. {
  390. m_read_port_flag = true;
  391. int iret = Error_Succeed;
  392. //CILIXAutoTrace __at(m_trace,"ReadPort",&iret);
  393. //判断是否连接
  394. if (m_connect == false)
  395. {
  396. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  397. strcpy(m_errorInfo.szErrMsg, "device not connected!");
  398. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  399. //置标记
  400. m_read_port_flag = false;
  401. iret = Error_DevNotAvailable;
  402. return Error_DevNotAvailable;
  403. }
  404. //m_trace->WriteTrace("ReadPort","dwPort=%d",dwPort);
  405. //判断端口是否合法
  406. if (dwPort > m_initParam.dwPortNum || dwPort < 0)
  407. {
  408. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  409. strcpy(m_errorInfo.szErrMsg, "Number of port to set is invalid!");
  410. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  411. //置标记
  412. m_read_port_flag = false;
  413. iret = Error_Param;
  414. return Error_Param;
  415. }
  416. //判断端口的属性是否合法
  417. if (m_initParam.dir[dwPort] != 0)
  418. {
  419. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  420. strcpy(m_errorInfo.szErrMsg, "Type of port to set is invalid!");
  421. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  422. //置标记
  423. m_read_port_flag = false;
  424. iret = Error_Param;
  425. return Error_Param;
  426. }
  427. if (dwPort == 2)
  428. {
  429. int p21 = 0, p22 = 0, p23 = 0, p24 = 0, p25 = 0, p26 = 0, p27 = 0, p28 = 0;
  430. //***P2.1,震动传感器,设备1,IN4
  431. p21 = m_device->GetInputStatus(4);
  432. if (p21 == 1)
  433. p21 = 0;
  434. else if (p21 == 0)
  435. p21 = 1;
  436. //***P2.2,柜门开关
  437. int f_d = m_device->GetInputStatus(0); //前门下,IN0
  438. int re = m_device->GetInputStatus(5); //后门,IN5
  439. if (f_d >= 0 && re >= 0)
  440. p22 = f_d & re; //默认0为开
  441. if (p22 == 1)
  442. p22 = 0;
  443. else if (p22 == 0)
  444. p22 = 1;
  445. //***P2.3,挂摘机开关,设备2,IN2
  446. p23 = m_device->GetInputStatusEx(2);
  447. if (p23 == 1)
  448. p23 = 0;
  449. else if (p23 == 0)
  450. p23 = 1;
  451. //***P2.4,人体接近传感器,设备1,IN3
  452. p24 = m_device->GetInputStatus(3);
  453. //if(p24 == 1) p24 = 0;
  454. //else if(p24 == 0) p24 = 1;
  455. //***P2.5,卡嘴检测
  456. p25 = m_device->GetInputStatus(1);
  457. //***P2.6,开机盖检测,设备1,IN7
  458. p26 = m_device->GetInputStatus(7);
  459. if (p26 == 1)
  460. p26 = 0;
  461. else if (p26 == 0)
  462. p26 = 1;
  463. if (p21 >= 0 && p22 >= 0 && p23 >= 0 && p24 >= 0 && p25 >=0&& p26 >= 0)
  464. {
  465. btStatus = p21 | (p22 << 1) | (p23 << 2) | (p24 << 3) | (p25 << 4) | (p26 << 5);
  466. }
  467. else
  468. {
  469. memset(m_errorInfo.szErrMsg, 0, sizeof(m_errorInfo.szErrMsg));
  470. strcpy(m_errorInfo.szErrMsg, "Communication failed between HOST and Device!");
  471. m_errorInfo.dwErrMsgLen = strlen(m_errorInfo.szErrMsg);
  472. //置标记
  473. m_read_port_flag = false;
  474. iret = Error_DevCommFailed;
  475. return Error_DevCommFailed;
  476. }
  477. }
  478. m_ptStatus = btStatus;
  479. m_last_errorcode = (ErrorCodeEnum)iret;
  480. m_read_port_flag = false;
  481. return (ErrorCodeEnum)iret;
  482. }