/////////////////////////////////////////////////////////////////////////////////
/// 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