Explorar el Código

Z991239-5239 #comment GPIO桥接实体

80374374 hace 1 año
padre
commit
3f8f1b7a38

+ 1 - 0
DevAdapter/CMakeLists.txt

@@ -124,6 +124,7 @@ macro(rvc_define_dependen_dirs)
         if(${CURRENT_VENDOR_FOLDER}_CONAN_LIB_NAME)
             conan_cmake_run(REQUIRES ${${CURRENT_VENDOR_FOLDER}_CONAN_LIB_NAME}
                 BASIC_SETUP CMAKE_TARGETS)
+                # 如果使用Conan,则替换为Conan的路径引用
                 set(VENDOR_CURRENT_SOURCE_DIR ${CONAN_${CURRENT_VENDOR_FOLDER}_ROOT})
         endif()
     endif(DEVADAPTER_USING_CONAN)

+ 43 - 39
DevAdapter/include/GpioClass.h

@@ -30,33 +30,33 @@ struct GpioInitParam
 };
 
 
-//硬件模块序号,对应规格文档
-#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_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
@@ -88,37 +88,41 @@ public:
 	//
 	virtual ErrorCodeEnum ReadPort(DWORD dwPort,BYTE &btStatus) { return Error_NotImpl; }
 
+#ifndef _MSC_VER
+
 	/// <summary>
-	/// 打开指定模块的提示灯
+	/// 鎵撳紑鎸囧畾妯″潡鐨勬彁绀虹伅
 	/// </summary>
 	/// <param name="dwReq">
-	/// 硬件灯模块序号,见上方定义GPIO_DEV_SN_*,或参考规格说明文档,只会传送模式为”驱动“的序号之一
-	/// 只会设置灯,如果是其他值则返回 Error_NotSupport
+	/// 纭�欢鐏�ā鍧楀簭鍙凤紝瑙佷笂鏂瑰畾涔塆PIO_DEV_SN_*锛屾垨鍙傝€冭�鏍艰�鏄庢枃妗o紝鍙�細浼犻€佹ā寮忎负鈥濋┍鍔ㄢ€滅殑搴忓彿涔嬩竴
+	/// 鍙�細璁剧疆鐏�紝濡傛灉鏄�叾浠栧€煎垯杩斿洖 Error_NotSupport
 	/// </param>
 	/// <param name="dwMode">
-	/// 入参,指定灯的属性如常亮还是闪烁,是普通灯颜色还是故障灯颜色
-	/// 不同属性可以通过与的方式合并传入,如灯颜色和亮灯模式,同一属性只会传入其中一个值,比如灯常亮和闪烁只会传入其中之一
-	/// 具体值表示的内容参考上方定义的内容 GPIO_DEV_LIGHT_MODE_*
+	/// 鍏ュ弬锛屾寚瀹氱伅鐨勫睘鎬у�甯镐寒杩樻槸闂�儊锛屾槸鏅�€氱伅棰滆壊杩樻槸鏁呴殰鐏��鑹�
+	/// 涓嶅悓灞炴€у彲浠ラ€氳繃涓庣殑鏂瑰紡鍚堝苟浼犲叆锛屽�鐏��鑹插拰浜�伅妯″紡锛屽悓涓€灞炴€у彧浼氫紶鍏ュ叾涓�竴涓�€硷紝姣斿�鐏�父浜�拰闂�儊鍙�細浼犲叆鍏朵腑涔嬩竴
+	/// 鍏蜂綋鍊艰〃绀虹殑鍐呭�鍙傝€冧笂鏂瑰畾涔夌殑鍐呭� 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_*,或参考规格说明文档,只会传送模式为”接收“的序号
-	/// 这个可能是与的关系,即有可能会一个调用同时获取多个模块的状态
+	/// 鎰熷簲妯″潡搴忓彿锛岃�涓婃柟瀹氫箟GPIO_DEV_SN_*锛屾垨鍙傝€冭�鏍艰�鏄庢枃妗o紝鍙�細浼犻€佹ā寮忎负鈥濇帴鏀垛€滅殑搴忓彿
+	/// 杩欎釜鍙�兘鏄�笌鐨勫叧绯伙紝鍗虫湁鍙�兘浼氫竴涓�皟鐢ㄥ悓鏃惰幏鍙栧�涓�ā鍧楃殑鐘舵€�
 	/// </param>
 	/// <param name="dwMode">
-	/// 对应模块(有震动、开门、摘机、有人靠近)对应的位,如果是高电平置为1,如果低电平则置为0
+	/// 瀵瑰簲妯″潡锛堟湁闇囧姩銆佸紑闂ㄣ€佹憳鏈恒€佹湁浜洪潬杩戯級瀵瑰簲鐨勪綅锛屽�鏋滄槸楂樼數骞崇疆涓�1锛屽�鏋滀綆鐢靛钩鍒欑疆涓�0
 	/// </param>
 	/// <returns>
-	/// 无法获取状态则返回报错
+	/// 鏃犳硶鑾峰彇鐘舵€佸垯杩斿洖鎶ラ敊
 	/// </returns>
 	virtual ErrorCodeEnum DetectStatus(DWORD dwReq, DWORD& dwMode) { return Error_NotImpl; }
 
+#endif //_MSC_VER
+
 };
 #endif //__GPIO_CLASS_H

+ 2 - 0
DevAdapter/self/CMakeLists.txt

@@ -10,6 +10,8 @@ add_subdirectory(liblog4vendor)
 if(MSVC)
 	add_subdirectory(pinpad)
 	add_subdirectory(cardissuer)
+	add_subdirectory(hspscanner)
+	add_subdirectory(gpio)
 endif(MSVC)
 
 #  =-=-=-=-=-=-=-=-=-= {VendorName}/CMakeLists.txt 文件最后必须声明如下内容=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=

+ 19 - 0
DevAdapter/self/gpio/CMakeLists.txt

@@ -0,0 +1,19 @@
+# 声明模块名称的前缀和名称
+rvc_dev_define_module("GPIO")
+
+# rvc_dev_config_library 内需要使用这三个参数,用于拼接输出的适配器文件名称
+set(${MODULE_PREFIX}_VENDOR ${CURRENT_VENDOR})
+set(${MODULE_PREFIX}_VERSION "1")
+set(${MODULE_PREFIX}_BATCH "1")
+
+# 包含要编译的实现文件,rvc_dev_config_library 内使用
+set(${MODULE_PREFIX}_SRCS SHARED
+        VirtualDeviceClass.cpp 
+        )
+
+# 适配器工程需要通过此宏替代 add_library
+rvc_dev_config_library(${MODULE_NAME} ${MODULE_PREFIX})
+
+
+#  =-=-=-=-=-=-=-=-=-= {适配器工程}/CMakeLists.txt 文件最后必须声明如下内容=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=
+rvc_dev_target_install(${MODULE_FULL_NAME})

+ 121 - 0
DevAdapter/self/gpio/VirtualDeviceClass.cpp

@@ -0,0 +1,121 @@
+#include "VirtualDeviceClass.h"
+#include "libGPIOLoader.h"
+
+static VirtualDeviceClassImpl* object = NULL;
+
+DEVICEBASE_API ErrorCodeEnum  CreateDevComponent(DeviceBaseClass*& pOutDevAptObj)
+{
+	ErrorCodeEnum result(Error_Unexpect);
+	if (object == NULL) {
+		char* buf;
+		DWORD size;
+		const char* var = "INVOKE_VENDOR_ADAPTER_NAME";
+		size = GetEnvironmentVariableA(var, NULL, 0);
+		//ERROR_ENVVAR_NOT_FOUND
+		if (size <= 0) {
+			return Error_InvalidState;
+		}
+		buf = new char[size + 3];
+		if (buf == NULL) {
+			return Error_Resource;
+		}
+		memset(buf, 0, sizeof(char) * (size + 3));
+		size = GetEnvironmentVariableA(var, buf, size);
+		result = Bridge_LoadDevObject(buf);
+		if (result == Error_Succeed) {
+			object = new VirtualDeviceClassImpl();
+		}
+		delete[] buf;
+	}
+	pOutDevAptObj = object;
+	return result;
+}
+
+DEVICEBASE_API ErrorCodeEnum  ReleaseDevComponent(DeviceBaseClass*& pInDevAptObj)
+{
+	ErrorCodeEnum result = Bridge_ReleaseDevObject();
+	if (result == Error_Succeed && pInDevAptObj != NULL) {
+		delete pInDevAptObj;
+		pInDevAptObj = NULL;
+	}
+	return result;
+}
+
+VirtualDeviceClassImpl::VirtualDeviceClassImpl()
+{
+
+}
+
+VirtualDeviceClassImpl::~VirtualDeviceClassImpl()
+{
+
+}
+
+ErrorCodeEnum VirtualDeviceClassImpl::GetDevCategory(DevCategoryInfo& devCategory)
+{
+	ErrorCodeEnum result;
+	DevCategoryInfo inner;
+	result = Bridge_GetDevCategory(&inner);
+	if (result == Error_Succeed) {
+		strcpy_s(devCategory.szType, MAX_DEV_TYPE_LEN, inner.szType);
+		strcpy_s(devCategory.szModel, MAX_DEV_MODEL_LEN, inner.szModel);
+		strcpy_s(devCategory.szVendor, MAX_DEV_VENDOR_LEN, inner.szVendor);
+		devCategory.eState = inner.eState;
+		devCategory.version.wMajor = inner.version.wMajor;
+		devCategory.version.wMinor = inner.version.wMinor;
+		devCategory.version.wRevision = inner.version.wRevision;
+		devCategory.version.wBuild = inner.version.wBuild;
+	}
+	return result;
+}
+
+ErrorCodeEnum VirtualDeviceClassImpl::Reset()
+{
+	return Bridge_Reset();
+}
+
+
+ErrorCodeEnum VirtualDeviceClassImpl::DevClose()
+{
+	ErrorCodeEnum result = Error_Succeed;
+	return (result = Bridge_DevClose());
+}
+
+ErrorCodeEnum VirtualDeviceClassImpl::GetLastErr(DevErrorInfo& devErrInfo)
+{
+	ErrorCodeEnum result = Error_Succeed;
+	DevErrorInfo inner;
+	result = Bridge_GetLastErr(&inner);
+	if (result == Error_Succeed) {
+		devErrInfo.dwErrMsgLen = inner.dwErrMsgLen;
+		strcpy_s(devErrInfo.szErrMsg, MAX_DEV_ERROR_MSG_LEN, inner.szErrMsg);
+	}
+	return (result);
+}
+
+ErrorCodeEnum VirtualDeviceClassImpl::DevOpen(GpioInitParam initParam)
+{
+	Bridge_GpioInitParam inner;
+	inner.dwPort = initParam.dwPort;
+	inner.dwBaudRate = initParam.dwBaudRate;
+	inner.dwPortNum = initParam.dwPortNum;
+	for (int i = 0; i < MAX_PORT_NUM; ++i) {
+		inner.dir[i] = initParam.dir[i] ? 1 : 0;
+	}
+	return Bridge_DevOpen(inner);
+}
+
+ErrorCodeEnum VirtualDeviceClassImpl::WritePort(DWORD dwPort, BYTE btData)
+{
+	return Bridge_WritePort(dwPort, btData);
+}
+
+ErrorCodeEnum VirtualDeviceClassImpl::ReadPort(DWORD dwPort, BYTE& btStatus)
+{
+	BYTE inner = btStatus;
+	ErrorCodeEnum result = Bridge_ReadPort(dwPort, &inner);
+	btStatus = inner;
+	return result;
+}
+
+

+ 27 - 0
DevAdapter/self/gpio/VirtualDeviceClass.h

@@ -0,0 +1,27 @@
+#ifndef VIRTUAL_DEVICE_CLASS_HEADER_
+#define VIRTUAL_DEVICE_CLASS_HEADER_
+
+
+#include "GPIOClass.h"
+
+class VirtualDeviceClassImpl : public GpioClass
+{
+public:
+	VirtualDeviceClassImpl();
+	~VirtualDeviceClassImpl();
+
+	//DeviceBaseClass
+	ErrorCodeEnum GetDevCategory(DevCategoryInfo& devCategory);
+	ErrorCodeEnum Reset();
+	ErrorCodeEnum DevClose();
+	ErrorCodeEnum GetLastErr(DevErrorInfo& devErrInfo);
+
+	//SubDeviceClass
+	ErrorCodeEnum DevOpen(GpioInitParam initParam);
+
+	ErrorCodeEnum WritePort(DWORD dwPort, BYTE btData);
+
+	ErrorCodeEnum ReadPort(DWORD dwPort, BYTE& btStatus);
+};
+
+#endif //VIRTUAL_DEVICE_CLASS_HEADER_