123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- /////////////////////////////////////////////////////////////////////////////////
- /// Copyright (c) 2012 China Merchants Bank, all rights reserved ///
- /// Adapter Interface for Gpio. ///
- /// ///
- ////////////////////////////////////////////////////////////////////////////////
- #ifndef __GPIO_CLASS_H
- #define __GPIO_CLASS_H
- #pragma once
- #include "DeviceBaseClass.h"
- //1 Port means 8 adjancent pins.
- //Port 0: pin 0~7
- //Port 1: pin 8~15
- //Port 2: pin 16~23
- //The first two port s(pin 0~15) are used as input,port 2 is used as output.
- //
- //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;
- const int MAX_PORT_NUM = 4; //max number of gpio ports (1 port = 8 pins)
- struct GpioInitParam
- {
- DWORD dwPort;
- DWORD dwBaudRate;
- DWORD dwPortNum; //number of port to set
- bool dir[MAX_PORT_NUM]; //port input/output direction. true:output;false:input
- //ex. dir[0]=true means configure port 0 as output
- //port 0 = pin 1~8,port 1 = pin 9~16 ...
- };
- //硬件模块序号,对应规格文档
- #define GPIO_DEV_SN_LIGHT_SENSOR_ALL ((DWORD)(-1)) //全体指示灯,用于启动时重置所有的灯
- #define GPIO_DEV_SN_LIGHT_CARDISSUER 1 //读卡发卡器提示灯
- #define GPIO_DEV_SN_LIGHT_IDCERTIFICATE 3 //身份证阅读器提示灯
- #define GPIO_DEV_SN_LIGHT_PINPAD 4 //密码键盘提示灯
- #define GPIO_DEV_SN_LIGHT_FACE 5 //脸部照明灯
- #define GPIO_DEV_SN_LIGHT_CARDISSUER_MAINTAIN 7 //读卡发卡器维护提示灯
- #define GPIO_DEV_SN_LIGHT_CONTACTLESSCARD 9 //非接IC读卡器提示灯
- #define GPIO_DEV_SN_LIGHT_FINGERPRINT 11 //指纹仪提示灯
- #define GPIO_DEV_SN_SENSOR_SHAKE 1 //震动探测器
- #define GPIO_DEV_SN_SENSOR_DOOR (1 << 1) //机具门感应
- #define GPIO_DEV_SN_SENSOR_PHONE (1 << 2) //话机提机感应
- #define GPIO_DEV_SN_SENSOR_HUMAN_DETECT (1 << 3) //人体探测感应
- #define GPIO_DEV_SN_SENSOR_CARD_MOUTH (1 << 4) //发卡器卡嘴覆盖探测
- //模块灯属性
- #define GPIO_DEV_LIGHT_MODE_RESET 0 //熄灭灯
- //灯亮模式
- #define GPIO_DEV_LIGHT_MODE_LIGHT_SUSTAIN 0x1 //常亮
- #define GPIO_DEV_LIGHT_MODE_LIGHT_FLICKER 0x2 //闪烁
- //灯颜色
- #define GPIO_DEV_LIGHT_MODE_COLOR_NORMAL 0x4 //常规颜色
- #define GPIO_DEV_LIGHT_MODE_COLOR_FAULT 0x8 //故障状态的颜色,一般为红色
- // 驱动状态
- #define GPIO_DEV_SENSOR_MODE_HIGHT_LEVEL 0x1
- class GpioClass : public DeviceBaseClass
- {
- public:
- /// <summary>
- /// Device initialization.
- /// Configure port input/output direction.
- /// </summary>
- /// <param name="initParam"></param>
- /// <returns></returns>
- virtual ErrorCodeEnum DevOpen(GpioInitParam initParam) = 0;
- //
- // Set ports output.
- // Arguments:
- // - dwPort:port serial number,0~MAX_PORT_NUM-1
- // - btData:output value
- // bit value 1/0 means voltage high or low
- // ex.dwPort=0 btData=10001010 means set port 0's the 2nd,4th,8th pin output high
- //
- virtual ErrorCodeEnum WritePort(DWORD dwPort,BYTE btData) { return Error_NotImpl; }
- //
- // Get port input.
- // Arguments:
- // - dwPort:port serial number,0~MAX_PORT_NUM-1
- // - btStatus:input value
- // ex.dwPort=0 btStatus=10001010 means port 0's the 2nd,4th,8th pin with high level
- //
- virtual ErrorCodeEnum ReadPort(DWORD dwPort,BYTE &btStatus) { return Error_NotImpl; }
- #ifndef _MSC_VER
- /// <summary>
- /// 打开指定模块的提示灯
- /// </summary>
- /// <param name="dwReq">
- /// 硬件灯模块序号,见上方定义GPIO_DEV_SN_*,或参考规格说明文档,只会传送模式为”驱动“的序号之一
- /// 只会设置灯,如果是其他值则返回 Error_NotSupport
- /// </param>
- /// <param name="dwMode">
- /// 入参,指定灯的属性如常亮还是闪烁,是普通灯颜色还是故障灯颜色
- /// 不同属性可以通过与的方式合并传入,如灯颜色和亮灯模式,同一属性只会传入其中一个值,比如灯常亮和闪烁只会传入其中之一
- /// 具体值表示的内容参考上方定义的内容 GPIO_DEV_LIGHT_MODE_*
- /// </param>
- /// <returns>
- /// 参数有误或设置失败返回对应的报错
- /// </returns>
- virtual ErrorCodeEnum SetStatus(DWORD dwReq, DWORD dwMode) { return Error_NotImpl; }
- /// <summary>
- /// 获取探测器的状态
- /// </summary>
- /// <param name="dwReq">
- /// 感应模块序号,见上方定义GPIO_DEV_SN_*,或参考规格说明文档,只会传送模式为”接收“的序号
- /// 这个可能是与的关系,即有可能会一个调用同时获取多个模块的状态
- /// </param>
- /// <param name="dwMode">
- /// 对应模块(有震动、开门、摘机、有人靠近)对应的位,如果是高电平置为1,如果低电平则置为0
- /// </param>
- /// <returns>
- /// 无法获取状态则返回报错
- /// </returns>
- virtual ErrorCodeEnum DetectStatus(DWORD dwReq, DWORD& dwMode) { return Error_NotImpl; }
- #endif //_MSC_VER
- };
- #endif //__GPIO_CLASS_H
|