///////////////////////////////////////////////////////////////////////////////// /// 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: /// /// Device initialization. /// Configure port input/output direction. /// /// /// 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 /// /// 打开指定模块的提示灯 /// /// /// 硬件灯模块序号,见上方定义GPIO_DEV_SN_*,或参考规格说明文档,只会传送模式为”驱动“的序号之一 /// 只会设置灯,如果是其他值则返回 Error_NotSupport /// /// /// 入参,指定灯的属性如常亮还是闪烁,是普通灯颜色还是故障灯颜色 /// 不同属性可以通过与的方式合并传入,如灯颜色和亮灯模式,同一属性只会传入其中一个值,比如灯常亮和闪烁只会传入其中之一 /// 具体值表示的内容参考上方定义的内容 GPIO_DEV_LIGHT_MODE_* /// /// /// 参数有误或设置失败返回对应的报错 /// virtual ErrorCodeEnum SetStatus(DWORD dwReq, DWORD dwMode) { return Error_NotImpl; } /// /// 获取探测器的状态 /// /// /// 感应模块序号,见上方定义GPIO_DEV_SN_*,或参考规格说明文档,只会传送模式为”接收“的序号 /// 这个可能是与的关系,即有可能会一个调用同时获取多个模块的状态 /// /// /// 对应模块(有震动、开门、摘机、有人靠近)对应的位,如果是高电平置为1,如果低电平则置为0 /// /// /// 无法获取状态则返回报错 /// virtual ErrorCodeEnum DetectStatus(DWORD dwReq, DWORD& dwMode) { return Error_NotImpl; } #endif //_MSC_VER }; #endif //__GPIO_CLASS_H