gpio_impl.cpp 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559
  1. #include <memory.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stdio.h>
  5. #include "gpio_impl.h"
  6. #include "log4vendor.h"
  7. #include "IOSignalCtrBoardDevDef.h"
  8. #define SIU_DEF_DEVNAME "IOEXTENDDEV"
  9. #define SIGNAL_NUM 16
  10. GPIOClassImpl::GPIOClassImpl()
  11. :m_mode(0)
  12. {
  13. m_pHandle = NULL;
  14. memset(&m_GpioParm,0,sizeof(m_GpioParm));
  15. }
  16. GPIOClassImpl::~GPIOClassImpl()
  17. {
  18. DevClose();
  19. }
  20. ErrorCodeEnum GPIOClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
  21. {
  22. LOG4VTM_FUNCTION();
  23. LOG4VTM(INFO,__FUNCTION__);
  24. const char *pType = "PVER=GRG#MID=IOExtern";
  25. const char *pMode = "FWID=0";
  26. const char *pVendor = "grg";
  27. strcpy(devCategory.szType, pType);
  28. strcpy(devCategory.szModel, pMode);
  29. strcpy(devCategory.szVendor, pVendor);
  30. devCategory.version.wMajor = 1;
  31. devCategory.version.wMinor = 1;
  32. devCategory.version.wRevision = 65535;
  33. devCategory.version.wBuild = 1;
  34. LOG4VTM(INFO,__FUNCTION__<<" OK");
  35. return Error_Succeed;
  36. }
  37. ErrorCodeEnum GPIOClassImpl::Reset()
  38. {
  39. LOG4VTM_FUNCTION();
  40. LOG4VTM(INFO,__FUNCTION__);
  41. tDevReturn l_tDevReturn[8] = { 0 };
  42. iInit(m_pHandle,INIT_IO_STAUTS, l_tDevReturn);
  43. LOG4VTM(INFO,__FUNCTION__<<" OK");
  44. return Error_Succeed;
  45. }
  46. ErrorCodeEnum GPIOClassImpl::DevClose()
  47. {
  48. LOG4VTM_FUNCTION();
  49. LOG4VTM(INFO,__FUNCTION__);
  50. if (m_pHandle) {
  51. iCloseComm(m_pHandle);
  52. vCloseLigicDevice(m_pHandle);
  53. m_pHandle = NULL;
  54. }
  55. LOG4VTM(INFO,__FUNCTION__<<" OK");
  56. return Error_Succeed;
  57. }
  58. ErrorCodeEnum GPIOClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
  59. {
  60. memset(&devErrInfo, 0, sizeof(devErrInfo));
  61. memcpy(&devErrInfo, &m_DevErrorInfo, sizeof(devErrInfo));
  62. return Error_Succeed;
  63. }
  64. ErrorCodeEnum GPIOClassImpl::DevOpen(GpioInitParam initParam)
  65. {
  66. LOG4VTM_FUNCTION();
  67. LOG4VTM(INFO,__FUNCTION__);
  68. int l_oDuniteResult = SUCCESS;
  69. memcpy(&m_GpioParm,&initParam,sizeof(initParam));
  70. tDevReturn l_tDevReturn[8] = { 0 };
  71. m_pHandle = hOpenLogicDevice(SIU_DEF_DEVNAME);
  72. if (m_pHandle == NULL) {
  73. //Open Dev error
  74. FormatDevErrorInfo(__FUNCTION__, __LINE__,E_IOSignalCtrBoard_BASE,"Open logicDevice Failed,hOpenLogicDevice");
  75. return Error_DevConnFailed;
  76. }
  77. l_oDuniteResult = iSetCommPara(m_pHandle,l_tDevReturn);
  78. if (SUCCESS != l_oDuniteResult)
  79. {
  80. FormatDevErrorInfo(__FUNCTION__, __LINE__, l_tDevReturn[0].iLogicCode, "Open logicDevice Failed,iSetCommPara");
  81. return Error_DevConnFailed;
  82. }
  83. memset(l_tDevReturn, 0, sizeof(l_tDevReturn));
  84. l_oDuniteResult = iInit(m_pHandle,INIT_IO_STAUTS, l_tDevReturn);
  85. if (SUCCESS != l_oDuniteResult)
  86. {
  87. FormatDevErrorInfo(__FUNCTION__, __LINE__, l_tDevReturn[0].iLogicCode, "Open logicDevice Failed,iInit");
  88. return Error_NotInit;
  89. }
  90. LOG4VTM(INFO,__FUNCTION__<<" OK");
  91. return Error_Succeed;
  92. }
  93. ErrorCodeEnum GPIOClassImpl::WritePort(DWORD dwPort, BYTE btData)
  94. {
  95. LOG4VTM_FUNCTION();
  96. LOG4VTM(INFO,__FUNCTION__);
  97. if (0>dwPort || dwPort >= MAX_PORT_NUM)
  98. {
  99. //LOG4VTM(ERROR,__FUNCTION__<<"0>dwPort || dwPort >= MAX_PORT_NUM"<<"dwPort = "<<dwPort);
  100. char msg[1024]={0};
  101. sprintf(msg,"invalid param dwPort = %d",dwPort);
  102. FormatDevErrorInfo(__FUNCTION__, __LINE__,E_IOSignalCtrBoard_INVALIDPARAM, msg);
  103. return Error_Param;
  104. }
  105. ErrorCodeEnum l_ErrRlt = Error_Succeed;
  106. tDevReturn l_tDevReturn[8] = { 0 };
  107. int l_oDuniteResult = iSetCommPara(m_pHandle,l_tDevReturn);
  108. if (SUCCESS != l_oDuniteResult)
  109. {
  110. FormatDevErrorInfo(__FUNCTION__, __LINE__, l_tDevReturn[0].iLogicCode, "WritePort Failed,iSetCommPara");
  111. return Error_DevConnFailed;
  112. //return (ErrorCodeEnum)l_tDevReturn[0].iLogicCode;
  113. }
  114. l_oDuniteResult = iGetLightStatus(0, l_tDevReturn);
  115. BYTE l_btStatus[2] = { 0 };
  116. vGetLightStatus(l_btStatus, l_tDevReturn);
  117. //process hspscanner Tips light 26-6
  118. if(dwPort == 3)
  119. {
  120. l_oDuniteResult = iSetLightStatus(m_pHandle,6, btData >> (2) & 1, l_tDevReturn);
  121. if (SUCCESS != l_oDuniteResult)
  122. {
  123. FormatDevErrorInfo(__FUNCTION__, __LINE__, l_tDevReturn[0].iLogicCode, "WritePort Failed,iSetLightStatus");
  124. return Error_Unexpect;
  125. }
  126. return l_ErrRlt;
  127. }
  128. //process hspscanner Tips light
  129. //process other light
  130. if (dwPort>1) //12路扩展板只能支持dwPort=0,dwPort=1
  131. {
  132. return l_ErrRlt;
  133. }
  134. //先判断usb通断
  135. if (dwPort == 0)
  136. {
  137. if (btData >> 1 & 1)
  138. {
  139. //usb 通
  140. l_oDuniteResult = iUsbOnOffSetting(m_pHandle,1, 0, l_tDevReturn);
  141. }
  142. else
  143. {
  144. //usb 断
  145. l_oDuniteResult = iUsbOnOffSetting(m_pHandle,0, 0, l_tDevReturn);
  146. }
  147. }
  148. //BYTE l_byStatusChanged = l_btStatus[dwPort] ^ btData;
  149. for (int i = 1; i <= 8; i++)
  150. {
  151. int l_iIoNum = dwPort * 8 + i;
  152. if (l_iIoNum>SIGNAL_NUM)
  153. {
  154. break;
  155. }
  156. //if (l_byStatusChanged & (1 << (i - 1)))
  157. {
  158. memset(l_tDevReturn, 0, sizeof(l_tDevReturn));
  159. int l_iGrg = -1;
  160. //can't find no
  161. if(!vChangeTable(l_iGrg, l_iIoNum, false))
  162. continue;
  163. /*
  164. //jump usb control
  165. if(l_iGrg == -1)
  166. continue;
  167. */
  168. //printf("l_iGrg = %d, on = %d\n",l_iGrg,btData >> (i - 1) & 1);
  169. l_oDuniteResult = iSetLightStatus(m_pHandle,l_iGrg, btData >> (i - 1) & 1, l_tDevReturn);
  170. if (SUCCESS != l_oDuniteResult)
  171. {
  172. FormatDevErrorInfo(__FUNCTION__, __LINE__, l_tDevReturn[0].iLogicCode, "WritePort Failed,iSetLightStatus");
  173. return Error_Unexpect;
  174. }
  175. }
  176. }
  177. LOG4VTM(INFO,__FUNCTION__<<" OK");
  178. return l_ErrRlt;
  179. }
  180. ErrorCodeEnum GPIOClassImpl::ReadPort(DWORD dwPort, BYTE& btStatus)
  181. {
  182. LOG4VTM_FUNCTION();
  183. LOG4VTM(INFO,__FUNCTION__);
  184. ErrorCodeEnum l_ErrRlt = Error_Succeed;
  185. btStatus = 0;
  186. if (0>dwPort || dwPort >= MAX_PORT_NUM)
  187. {
  188. //LOG4VTM(ERROR,__FUNCTION__<<"0>dwPort || dwPort >= MAX_PORT_NUM"<<"dwPort = "<<dwPort);
  189. char msg[1024]={0};
  190. sprintf(msg,"invalid param dwPort = %d",dwPort);
  191. FormatDevErrorInfo(__FUNCTION__, __LINE__,E_IOSignalCtrBoard_INVALIDPARAM, msg);
  192. return Error_Param;
  193. }
  194. /*
  195. if (0 > dwPort || dwPort >= MAX_PORT_NUM) //错误dwPort输入
  196. {
  197. return Error_Param;
  198. }
  199. */
  200. //get IOIn status start
  201. if(dwPort == 2)
  202. {
  203. BYTE l_btStatus[2] = { 0 };
  204. tDevReturn l_tDevReturn[8] = { 0 };
  205. int l_iStartus = iGetIOInStatus(0, l_tDevReturn);
  206. vGetIOInStatus(l_btStatus, l_tDevReturn);
  207. btStatus = l_btStatus[0];
  208. LOG4VTM(INFO,__FUNCTION__<<" OK");
  209. return l_ErrRlt;
  210. }
  211. //get IOIn status end
  212. //get hspscanner Tips light status
  213. if(dwPort == 3)
  214. {
  215. tDevReturn l_tDevReturn[8] = { 0 };
  216. int l_iStartus = iGetLightStatus(0, l_tDevReturn);
  217. btStatus |= l_tDevReturn[5].iLogicCode << 5;
  218. LOG4VTM(INFO,__FUNCTION__<<" OK");
  219. return l_ErrRlt;
  220. }
  221. //get hspscanner Tips light status
  222. //get other light status
  223. if (dwPort > 1) //12路扩展板只能支持dwPort=0,dwPort=1
  224. {
  225. return l_ErrRlt;
  226. }
  227. BYTE l_btStatus[2] = { 0 };
  228. tDevReturn l_tDevReturn[8] = { 0 };
  229. int l_iStartus = iGetLightStatus(0, l_tDevReturn);
  230. vGetLightStatus(l_btStatus, l_tDevReturn);
  231. // BYTE l_byMask[] = { 0x0F,0x03,0,0 };
  232. // btStatus = l_btStatus[dwPort] & l_byMask[dwPort];
  233. btStatus = l_btStatus[dwPort];
  234. LOG4VTM(INFO,__FUNCTION__<<" OK");
  235. return l_ErrRlt;
  236. }
  237. DEVICEBASE_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass *&baseObj)
  238. {
  239. baseObj = new GPIOClassImpl();
  240. if (baseObj == NULL) {
  241. return Error_Resource;
  242. }
  243. cmb::log_init_config config;
  244. config.dev_name = "Gpio";
  245. config.log_level = CMB_LOG_LEVEL_TRACE;
  246. #if defined(_MSC_VER)
  247. config.log_dir = ("C:\\rvc\\dbg\\");
  248. #else
  249. config.log_dir = ("/opt/rvc/dbg/");
  250. #endif //_MSC_VER
  251. std::string str;
  252. cmb::log4vendor::init(config, str);
  253. printf("init after: %s\n", str.c_str());
  254. return Error_Succeed;
  255. }
  256. DEVICEBASE_API ErrorCodeEnum ReleaseDevComponent(DeviceBaseClass *&pBaseObj)
  257. {
  258. if (pBaseObj == NULL) {
  259. return Error_Param;
  260. }
  261. if (GPIOClassImpl* pTmp = dynamic_cast<GPIOClassImpl*>(pBaseObj))
  262. {
  263. delete pTmp;
  264. pTmp = NULL;
  265. return Error_Succeed;
  266. }
  267. return Error_Param;
  268. }
  269. void GPIOClassImpl::ZeroDevErrorInfo()
  270. {
  271. memset(&m_DevErrorInfo, 0, sizeof(m_DevErrorInfo));
  272. }
  273. void GPIOClassImpl::FormatDevErrorInfo(const char* funcname, int line, int errCode,const char* errStr)
  274. {
  275. ZeroDevErrorInfo();
  276. snprintf(m_DevErrorInfo.szErrMsg, sizeof(m_DevErrorInfo.szErrMsg), "ErrCode:0x%x,Description:Func:%s,Line:%d,Msg:%s", errCode, funcname, line, errStr);
  277. m_DevErrorInfo.dwErrMsgLen = strlen(m_DevErrorInfo.szErrMsg);
  278. LOG4VTM(ERROR,m_DevErrorInfo.szErrMsg);
  279. }
  280. void GPIOClassImpl::vGetLightStatus(BYTE *p_pbtStatus, tDevReturn *p_ptDevReturn)
  281. {
  282. int l_Grg_vaules[SIGNAL_NUM] = { 0 };
  283. for (int i = 0; i < 8; i++)
  284. {
  285. l_Grg_vaules[i] = p_ptDevReturn[i].iLogicCode;
  286. //p_pbtStatus[0] |= (p_ptDevReturn[i].iLogicCode << i);
  287. if (i < 4)
  288. {
  289. l_Grg_vaules[i + 8] = p_ptDevReturn[i + 4].iPhyCode;
  290. // p_pbtStatus[1] |= (p_ptDevReturn[i+4].iPhyCode << i);
  291. }
  292. }
  293. int l_iZS = 0, l_iGrg = 0;
  294. int l_ZS_vaules[SIGNAL_NUM] = { 0 };
  295. for (int j = 0; j < SIGNAL_NUM; j++)
  296. {
  297. printf("vGetLightStatus[%d] = %d\n",j+1,l_Grg_vaules[j]);
  298. l_iGrg = j + 1;
  299. if(vChangeTable(l_iGrg, l_iZS))
  300. {
  301. l_ZS_vaules[l_iZS - 1] = l_Grg_vaules[j];
  302. }
  303. }
  304. p_pbtStatus[0] = 0;
  305. p_pbtStatus[1] = 0;
  306. for (int k = 0; k < SIGNAL_NUM; k++)
  307. {
  308. //printf("light state[%d] : %d\n",k,l_ZS_vaules[k]);
  309. if (k < 8)
  310. {
  311. p_pbtStatus[0] |= l_ZS_vaules[k] << k;
  312. }
  313. else
  314. {
  315. p_pbtStatus[1] |= l_ZS_vaules[k] << (k - 8);
  316. }
  317. }
  318. }
  319. /*
  320. 招行信号灯序号 公司信号灯编号
  321. 1.读卡器 2.读/发卡指示灯
  322. 2.USB通断控制
  323. 3.身份证灯 1.身份证指示灯
  324. 4.键盘提示灯 5.键盘照明灯
  325. 5.脸部照明灯 10.摄像头补光灯
  326. 6.故障灯 12.故障指示灯
  327. 7.发卡器维护灯 8.读/发卡器维护灯
  328. 8.USB口提示灯 4.USB口提示灯
  329. 9.非接IC提示 9.非接指示灯
  330. 10.二维码提示灯
  331. 11.指纹仪提示灯 11.指纹仪指示灯
  332. 12.凭条打印提示灯 7.凭条指示灯
  333. 13.高拍仪照明灯 3.高拍仪照明灯
  334. 14.打印盖章提示绿灯
  335. 15.纸槽提示绿灯
  336. 16.纸槽缺纸红灯
  337. */
  338. //信号灯编号转换
  339. bool GPIOClassImpl::vChangeTable(int &p_iGrg, int &p_iZS, bool p_bToZS)
  340. {
  341. int l_iGrgs[]={2,1,5,10,12,8,4,9,11,7,3};
  342. int l_iZSs[] ={1,3,4,5,6,7,8,9,11,12,13};
  343. //grg转zs
  344. if (p_bToZS)
  345. {
  346. for (int i = 0; i < sizeof(l_iGrgs) / sizeof(int); i++)
  347. {
  348. if (p_iGrg == l_iGrgs[i])
  349. {
  350. p_iZS = l_iZSs[i];
  351. return true;
  352. }
  353. }
  354. }
  355. else
  356. {
  357. //zs转grg
  358. for (int i = 0; i < sizeof(l_iGrgs) / sizeof(int); i++)
  359. {
  360. if (p_iZS == l_iZSs[i])
  361. {
  362. p_iGrg = l_iGrgs[i];
  363. return true;
  364. }
  365. }
  366. }
  367. return false;
  368. }
  369. #define IOEXTEND_ALLDOOR 0
  370. int GPIOClassImpl::iGetLightStatus(int p_piLightNum, tDevReturn *p_psStatus)
  371. {
  372. tIOStatus l_stIOStatus;
  373. int l_iReuslt = iGetIODevStatus(m_pHandle,&l_stIOStatus, p_psStatus);
  374. if (l_iReuslt == SUCCESS)
  375. {
  376. char l_acStatusData[0x20];
  377. memset(l_acStatusData, 0x00, sizeof(l_acStatusData));
  378. sprintf(l_acStatusData, "I%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
  379. l_stIOStatus.byLightStauts[0], l_stIOStatus.byLightStauts[1], l_stIOStatus.byLightStauts[2],
  380. l_stIOStatus.byLightStauts[3], l_stIOStatus.byLightStauts[4], l_stIOStatus.byLightStauts[5],
  381. l_stIOStatus.byLightStauts[6], l_stIOStatus.byLightStauts[7], l_stIOStatus.byLightStauts[8],
  382. l_stIOStatus.byLightStauts[9], l_stIOStatus.byLightStauts[10], l_stIOStatus.byLightStauts[11]);
  383. memcpy(p_psStatus[0].acReserve, l_acStatusData, strlen(l_acStatusData));
  384. if (p_piLightNum == IOEXTEND_ALLDOOR)
  385. {
  386. int i = 0;
  387. for (i = 0; i < 4; i++)
  388. {
  389. p_psStatus[i].iLogicCode = l_stIOStatus.byLightStauts[i];
  390. p_psStatus[i].iPhyCode = l_stIOStatus.byLightStauts[i];
  391. }
  392. for (i = 4; i < 8; i++)
  393. {
  394. p_psStatus[i].iLogicCode = l_stIOStatus.byLightStauts[i];
  395. p_psStatus[i].iPhyCode = l_stIOStatus.byLightStauts[i + 4];
  396. }
  397. }
  398. else
  399. {
  400. p_psStatus[0].iLogicCode = l_stIOStatus.byLightStauts[p_piLightNum - 1];
  401. p_psStatus[0].iPhyCode = l_stIOStatus.byLightStauts[p_piLightNum - 1];
  402. }
  403. }
  404. return l_iReuslt;
  405. }
  406. int GPIOClassImpl::iGetIOInStatus(int p_piLightNum, tDevReturn *p_psStatus)
  407. {
  408. tIOStatus l_stIOStatus;
  409. int l_iReuslt = iGetIODevStatus(m_pHandle,&l_stIOStatus, p_psStatus);
  410. if (l_iReuslt == SUCCESS)
  411. {
  412. char l_acStatusData[0x20];
  413. memset(l_acStatusData, 0x00, sizeof(l_acStatusData));
  414. sprintf(l_acStatusData, "I%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",
  415. l_stIOStatus.byDoorStauts[0], l_stIOStatus.byDoorStauts[1], l_stIOStatus.byDoorStauts[2],
  416. l_stIOStatus.byDoorStauts[3], l_stIOStatus.byDoorStauts[4], l_stIOStatus.byDoorStauts[5],
  417. l_stIOStatus.byDoorStauts[6], l_stIOStatus.byDoorStauts[7], l_stIOStatus.byDoorStauts[8],
  418. l_stIOStatus.byDoorStauts[9], l_stIOStatus.byDoorStauts[10], l_stIOStatus.byDoorStauts[11]);
  419. memcpy(p_psStatus[0].acReserve, l_acStatusData, strlen(l_acStatusData));
  420. if (p_piLightNum == IOEXTEND_ALLDOOR)
  421. {
  422. int i = 0;
  423. for (i = 0; i < 4; i++)
  424. {
  425. p_psStatus[i].iLogicCode = l_stIOStatus.byDoorStauts[i];
  426. p_psStatus[i].iPhyCode = l_stIOStatus.byDoorStauts[i];
  427. }
  428. for (i = 4; i < 8; i++)
  429. {
  430. p_psStatus[i].iLogicCode = l_stIOStatus.byDoorStauts[i];
  431. p_psStatus[i].iPhyCode = l_stIOStatus.byDoorStauts[i + 4];
  432. }
  433. }
  434. else
  435. {
  436. p_psStatus[0].iLogicCode = l_stIOStatus.byDoorStauts[p_piLightNum - 1];
  437. p_psStatus[0].iPhyCode = l_stIOStatus.byDoorStauts[p_piLightNum - 1];
  438. }
  439. }
  440. return l_iReuslt;
  441. }
  442. void GPIOClassImpl::vGetIOInStatus(BYTE *p_pbtStatus, tDevReturn *p_ptDevReturn)
  443. {
  444. int l_Grg_vaules[SIGNAL_NUM] = { 0 };
  445. for (int i = 0; i < 8; i++)
  446. {
  447. l_Grg_vaules[i] = p_ptDevReturn[i].iLogicCode;
  448. if (i < 4)
  449. {
  450. l_Grg_vaules[i + 8] = p_ptDevReturn[i + 4].iPhyCode;
  451. }
  452. }
  453. int l_iZS = 0, l_iGrg = 0;
  454. int l_ZS_vaules[SIGNAL_NUM] = { 0 };
  455. for (int j = 0; j < SIGNAL_NUM; j++)
  456. {
  457. printf("vGetIOInStatus[%d] = %d\n",j+1,l_Grg_vaules[j]);
  458. LOG4VTM(INFO,__FUNCTION__<<" org vGetIOInStatus["<<j+1<<"]"<<" = "<<l_Grg_vaules[j]);
  459. l_iGrg = j + 1;
  460. if(vChangeTableIOIn(l_iGrg, l_iZS))
  461. {
  462. //subtract start no 17
  463. l_ZS_vaules[l_iZS - 17] = l_Grg_vaules[j];
  464. }
  465. }
  466. p_pbtStatus[0] = 0;
  467. p_pbtStatus[1] = 0;
  468. for (int k = 0; k < SIGNAL_NUM; k++)
  469. {
  470. //printf("IOIn state[%d] : %d\n",k,l_ZS_vaules[k]);
  471. LOG4VTM(INFO,__FUNCTION__<<" change state["<<k<<"]"<<" = "<<l_ZS_vaules[k]);
  472. if (k < 8)
  473. {
  474. p_pbtStatus[0] |= l_ZS_vaules[k] << k;
  475. }
  476. else
  477. {
  478. p_pbtStatus[1] |= l_ZS_vaules[k] << (k - 8);
  479. }
  480. }
  481. }
  482. bool GPIOClassImpl::vChangeTableIOIn(int &p_iGrg, int &p_iZS, bool p_bToZS)
  483. {
  484. int l_iGrgs[]={1,2,6,7,9};
  485. int l_iZSs[] ={17,18,20,21,19};//zs no
  486. //grg转zs
  487. if (p_bToZS)
  488. {
  489. for (int i = 0; i < sizeof(l_iGrgs) / sizeof(int); i++)
  490. {
  491. if (p_iGrg == l_iGrgs[i])
  492. {
  493. p_iZS = l_iZSs[i];
  494. return true;
  495. }
  496. }
  497. }
  498. else
  499. {
  500. //zs转grg
  501. for (int i = 0; i < sizeof(l_iGrgs) / sizeof(int); i++)
  502. {
  503. if (p_iZS == l_iZSs[i])
  504. {
  505. p_iGrg = l_iGrgs[i];
  506. return true;
  507. }
  508. }
  509. }
  510. return false;
  511. }