GpioClass.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. /////////////////////////////////////////////////////////////////////////////////
  2. /// Copyright (c) 2012 China Merchants Bank, all rights reserved ///
  3. /// Adapter Interface for Gpio. ///
  4. /// ///
  5. ////////////////////////////////////////////////////////////////////////////////
  6. #ifndef __GPIO_CLASS_H
  7. #define __GPIO_CLASS_H
  8. #pragma once
  9. #include "DeviceBaseClass.h"
  10. //1 Port means 8 adjancent pins.
  11. //Port 0: pin 0~7
  12. //Port 1: pin 8~15
  13. //Port 2: pin 16~23
  14. //The first two port s(pin 0~15) are used as input,port 2 is used as output.
  15. //
  16. //Remarks:the pin number marked on the physical device is a little different from pin number used here(in program).It marked begin from number 1 not number 0;
  17. const int MAX_PORT_NUM = 4; //max number of gpio ports (1 port = 8 pins)
  18. struct GpioInitParam
  19. {
  20. DWORD dwPort;
  21. DWORD dwBaudRate;
  22. DWORD dwPortNum; //number of port to set
  23. bool dir[MAX_PORT_NUM]; //port input/output direction. true:output;false:input
  24. //ex. dir[0]=true means configure port 0 as output
  25. //port 0 = pin 1~8,port 1 = pin 9~16 ...
  26. };
  27. //硬件模块序号,对应规格文档
  28. #define GPIO_DEV_SN_LIGHT_SENSOR_ALL ((DWORD)(-1)) //全体指示灯,用于启动时重置所有的灯
  29. #define GPIO_DEV_SN_LIGHT_CARDISSUER 1 //读卡发卡器提示灯
  30. #define GPIO_DEV_SN_LIGHT_IDCERTIFICATE 3 //身份证阅读器提示灯
  31. #define GPIO_DEV_SN_LIGHT_PINPAD 4 //密码键盘提示灯
  32. #define GPIO_DEV_SN_LIGHT_FACE 5 //脸部照明灯
  33. #define GPIO_DEV_SN_LIGHT_CARDISSUER_MAINTAIN 7 //读卡发卡器维护提示灯
  34. #define GPIO_DEV_SN_LIGHT_CONTACTLESSCARD 9 //非接IC读卡器提示灯
  35. #define GPIO_DEV_SN_LIGHT_FINGERPRINT 11 //指纹仪提示灯
  36. #define GPIO_DEV_SN_SENSOR_SHAKE 1 //震动探测器
  37. #define GPIO_DEV_SN_SENSOR_DOOR (1 << 1) //机具门感应
  38. #define GPIO_DEV_SN_SENSOR_PHONE (1 << 2) //话机提机感应
  39. #define GPIO_DEV_SN_SENSOR_HUMAN_DETECT (1 << 3) //人体探测感应
  40. #define GPIO_DEV_SN_SENSOR_CARD_MOUTH (1 << 4) //发卡器卡嘴覆盖探测
  41. //模块灯属性
  42. #define GPIO_DEV_LIGHT_MODE_RESET 0 //熄灭灯
  43. //灯亮模式
  44. #define GPIO_DEV_LIGHT_MODE_LIGHT_SUSTAIN 0x1 //常亮
  45. #define GPIO_DEV_LIGHT_MODE_LIGHT_FLICKER 0x2 //闪烁
  46. //灯颜色
  47. #define GPIO_DEV_LIGHT_MODE_COLOR_NORMAL 0x4 //常规颜色
  48. #define GPIO_DEV_LIGHT_MODE_COLOR_FAULT 0x8 //故障状态的颜色,一般为红色
  49. // 驱动状态
  50. #define GPIO_DEV_SENSOR_MODE_HIGHT_LEVEL 0x1
  51. class GpioClass : public DeviceBaseClass
  52. {
  53. public:
  54. /// <summary>
  55. /// Device initialization.
  56. /// Configure port input/output direction.
  57. /// </summary>
  58. /// <param name="initParam"></param>
  59. /// <returns></returns>
  60. virtual ErrorCodeEnum DevOpen(GpioInitParam initParam) = 0;
  61. //
  62. // Set ports output.
  63. // Arguments:
  64. // - dwPort:port serial number,0~MAX_PORT_NUM-1
  65. // - btData:output value
  66. // bit value 1/0 means voltage high or low
  67. // ex.dwPort=0 btData=10001010 means set port 0's the 2nd,4th,8th pin output high
  68. //
  69. virtual ErrorCodeEnum WritePort(DWORD dwPort,BYTE btData) { return Error_NotImpl; }
  70. //
  71. // Get port input.
  72. // Arguments:
  73. // - dwPort:port serial number,0~MAX_PORT_NUM-1
  74. // - btStatus:input value
  75. // ex.dwPort=0 btStatus=10001010 means port 0's the 2nd,4th,8th pin with high level
  76. //
  77. virtual ErrorCodeEnum ReadPort(DWORD dwPort,BYTE &btStatus) { return Error_NotImpl; }
  78. #ifndef _MSC_VER
  79. /// <summary>
  80. /// 打开指定模块的提示灯
  81. /// </summary>
  82. /// <param name="dwReq">
  83. /// 硬件灯模块序号,见上方定义GPIO_DEV_SN_*,或参考规格说明文档,只会传送模式为”驱动“的序号之一
  84. /// 只会设置灯,如果是其他值则返回 Error_NotSupport
  85. /// </param>
  86. /// <param name="dwMode">
  87. /// 入参,指定灯的属性如常亮还是闪烁,是普通灯颜色还是故障灯颜色
  88. /// 不同属性可以通过与的方式合并传入,如灯颜色和亮灯模式,同一属性只会传入其中一个值,比如灯常亮和闪烁只会传入其中之一
  89. /// 具体值表示的内容参考上方定义的内容 GPIO_DEV_LIGHT_MODE_*
  90. /// </param>
  91. /// <returns>
  92. /// 参数有误或设置失败返回对应的报错
  93. /// </returns>
  94. virtual ErrorCodeEnum SetStatus(DWORD dwReq, DWORD dwMode) { return Error_NotImpl; }
  95. /// <summary>
  96. /// 获取探测器的状态
  97. /// </summary>
  98. /// <param name="dwReq">
  99. /// 感应模块序号,见上方定义GPIO_DEV_SN_*,或参考规格说明文档,只会传送模式为”接收“的序号
  100. /// 这个可能是与的关系,即有可能会一个调用同时获取多个模块的状态
  101. /// </param>
  102. /// <param name="dwMode">
  103. /// 对应模块(有震动、开门、摘机、有人靠近)对应的位,如果是高电平置为1,如果低电平则置为0
  104. /// </param>
  105. /// <returns>
  106. /// 无法获取状态则返回报错
  107. /// </returns>
  108. virtual ErrorCodeEnum DetectStatus(DWORD dwReq, DWORD& dwMode) { return Error_NotImpl; }
  109. #endif //_MSC_VER
  110. };
  111. #endif //__GPIO_CLASS_H