Browse Source

#IQRV #comment 合并单屏版本

80374374 1 year ago
parent
commit
d40be0d0dd

+ 8 - 2
DevAdapter/CMakeLists.txt

@@ -250,11 +250,17 @@ message(STATUS "vendor log library: ${VENDOR_LOG_LIB_NAME}")
 if(DEVADAPTER_USING_CONAN)
 if(NOT MSVC)
     if(RVC_INTEGRATE_BUILDV2)
-        set(KEBA_CONAN_ALL_LIB_NAME keba/2023.1208.18@LR04.02_VendorLib/stable)
-        set(CW_CONAN_ALL_LIB_NAME cw/2023.1207.13@LR04.02_VendorLib/stable)
+        set(KEBA_CONAN_ALL_LIB_NAME keba/2023.1115.16@LR04.02_VendorLib/stable)
+        set(CW_CONAN_ALL_LIB_NAME cw/2023.1114.10@LR04.02_VendorLib/stable)
+        set(SZZT_CONAN_ALL_LIB_NAME szzt/2023.1205.8@LR04.02_VendorLib/stable)
+        set(GWI_CONAN_ALL_LIB_NAME gwi/2023.1128.10@LR04.02_VendorLib/stable)
+        set(NANTIAN_CONAN_ALL_LIB_NAME nantian/2023.1206.1@LR04.02_VendorLib/stable)
         set(GRG_CONAN_ALL_LIB_NAME grg/2023.1213.24@LR04.02_VendorLib/stable)
         rvc_aggerate_vendor_libs(keba)
         rvc_aggerate_vendor_libs(cw)
+        rvc_aggerate_vendor_libs(szzt)
+        rvc_aggerate_vendor_libs(gwi)
+        rvc_aggerate_vendor_libs(nantian)
         rvc_aggerate_vendor_libs(grg)
     endif(RVC_INTEGRATE_BUILDV2)
 endif(NOT MSVC)

+ 13 - 0
DevAdapter/cmbsz/gpio.1.2/CMakeLists.txt

@@ -0,0 +1,13 @@
+rvc_dev_define_module("Gpio")
+set(${MODULE_PREFIX}_VENDOR ${CURRENT_VENDOR})
+set(${MODULE_PREFIX}_VERSION "1")
+set(${MODULE_PREFIX}_BATCH "2")
+
+set(${MODULE_PREFIX}_SRCS SHARED
+        gpio_impl.cpp
+        )
+
+
+rvc_dev_config_library(${MODULE_NAME} ${MODULE_PREFIX})
+
+rvc_dev_target_install(${MODULE_FULL_NAME})

+ 156 - 0
DevAdapter/cmbsz/gpio.1.2/gpio_impl.cpp

@@ -0,0 +1,156 @@
+#include "gpio_impl.h"
+#include<cstring>
+#include <cstdio>
+GPIOClassImpl::GPIOClassImpl()
+        :m_mode(0)
+{
+
+}
+
+GPIOClassImpl::~GPIOClassImpl()
+{
+
+}
+
+ErrorCodeEnum GPIOClassImpl::GetDevCategory(DevCategoryInfo &devCategory)
+{
+
+    ErrorCodeEnum err = Error_Succeed;
+    std::strcpy(devCategory.szModel, "szModel");
+    //新接口版本标记
+    std::strcpy(devCategory.szType, "szType#FUNCVER=2.0");
+    std::strcpy(devCategory.szVendor, "szVendor");
+    return err;
+}
+
+ErrorCodeEnum GPIOClassImpl::Reset()
+{
+    ErrorCodeEnum err = Error_Succeed;
+    m_mode = 0;
+    return err;
+}
+
+
+ErrorCodeEnum GPIOClassImpl::DevClose()
+{
+    ErrorCodeEnum err = Error_Succeed;
+    return err;
+}
+
+
+
+ErrorCodeEnum GPIOClassImpl::GetLastErr(DevErrorInfo &devErrInfo)
+{
+    static int times = 0;
+    char szMessage[128];
+    sprintf(szMessage, "这是第 %d 条错误信息", ++times);
+    strcpy(devErrInfo.szErrMsg, szMessage);
+    devErrInfo.dwErrMsgLen = strlen(szMessage);
+    return Error_Succeed;
+}
+
+ErrorCodeEnum GPIOClassImpl::SetStatus(DWORD dwReq, DWORD dwMode)
+{
+    ErrorCodeEnum ec = Error_Succeed;
+
+    if ((dwMode & GPIO_DEV_LIGHT_MODE_LIGHT_SUSTAIN) && (dwMode & GPIO_DEV_LIGHT_MODE_LIGHT_FLICKER)) {
+        return Error_Param;
+    }
+    if ((dwMode & GPIO_DEV_LIGHT_MODE_COLOR_NORMAL) && (dwMode & GPIO_DEV_LIGHT_MODE_COLOR_FAULT)) {
+        return Error_Param;
+    }
+
+    switch (dwReq) {
+    case GPIO_DEV_SN_LIGHT_CARDISSUER:
+        if (dwMode & GPIO_DEV_LIGHT_MODE_COLOR_NORMAL) { //常规颜色
+            if (dwMode & GPIO_DEV_LIGHT_MODE_LIGHT_FLICKER) { //闪烁
+
+            }
+        }
+        if (dwMode & GPIO_DEV_LIGHT_MODE_COLOR_FAULT) { //故障状态的颜色,一般为红色
+            if (dwMode & GPIO_DEV_LIGHT_MODE_LIGHT_SUSTAIN) { //常亮
+
+            }
+        }
+        //....
+        break;
+    case GPIO_DEV_SN_LIGHT_IDCERTIFICATE:
+        //....
+        break;
+    case GPIO_DEV_SN_LIGHT_PINPAD:
+        //....
+        break;
+    case GPIO_DEV_SN_LIGHT_FACE:
+        //....
+        break;
+    case GPIO_DEV_SN_LIGHT_CARDISSUER_MAINTAIN:
+        //....
+        break;
+    case GPIO_DEV_SN_LIGHT_CONTACTLESSCARD:
+        //....
+        break;
+    case GPIO_DEV_SN_LIGHT_FINGERPRINT:
+        //....
+        break;
+    case GPIO_DEV_SN_LIGHT_SENSOR_ALL: 
+    {
+        if (dwMode == GPIO_DEV_LIGHT_MODE_RESET) {
+            //熄灭当前的所有灯
+        }
+    }
+        break;
+    default:
+        ec = Error_NotSupport;
+        break;
+    }
+    return ec;
+}
+
+ErrorCodeEnum GPIOClassImpl::DetectStatus(DWORD dwReq, DWORD& dwMode)
+{
+    ErrorCodeEnum ec = Error_Succeed;
+    dwMode = 0;
+
+    if (dwReq & GPIO_DEV_SN_SENSOR_SHAKE) {
+        //检测是否震动,如果震动,则对应的位置为1
+        dwMode |= GPIO_DEV_SN_SENSOR_SHAKE;
+    }
+    if (dwReq & GPIO_DEV_SN_SENSOR_DOOR) {
+        // 检测是否开机柜门,没开则置为0
+    }
+    if (dwReq & GPIO_DEV_SN_SENSOR_PHONE) {
+        //检测是否提机,如果提机,则对应的位置为1
+        dwMode |= GPIO_DEV_SN_SENSOR_PHONE;
+    }
+    if (dwReq & GPIO_DEV_SN_SENSOR_HUMAN_DETECT) {
+        //检测是否有人,如果有人,则对应的位置为1
+        dwMode |= GPIO_DEV_SN_SENSOR_HUMAN_DETECT;
+    }
+    if (dwReq & GPIO_DEV_SN_SENSOR_CARD_MOUTH) {
+        //......
+    }
+    return ec;
+}
+
+DEVICEBASE_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass *&baseObj)
+{
+    baseObj = new GPIOClassImpl();
+    if(baseObj == NULL) {
+    return Error_Resource;
+    } else {
+    return Error_Succeed;
+    }
+}
+DEVICEBASE_API ErrorCodeEnum  ReleaseDevComponent(DeviceBaseClass *&pBaseObj)
+{
+    if(pBaseObj == NULL) {
+    return Error_Param;
+    }
+    if(GPIOClassImpl* pTmp = dynamic_cast<GPIOClassImpl*>(pBaseObj))
+    {
+    delete pTmp;
+    pTmp = NULL;
+    return Error_Succeed;
+    }
+    return Error_Param;
+}

+ 62 - 0
DevAdapter/cmbsz/gpio.1.2/gpio_impl.h

@@ -0,0 +1,62 @@
+#ifndef LIBFRAMEWORK_GPIO_IMPL_H
+#define LIBFRAMEWORK_GPIO_IMPL_H
+
+#include "GpioClass.h"
+
+class GPIOClassImpl : public GpioClass
+{
+public:
+    GPIOClassImpl();
+    ~GPIOClassImpl();
+
+
+    //DeviceBaseClass
+    ErrorCodeEnum GetDevCategory(DevCategoryInfo &devCategory);
+    ErrorCodeEnum Reset();
+    ErrorCodeEnum DevClose();
+    ErrorCodeEnum GetLastErr(DevErrorInfo &devErrInfo);
+
+    //
+    //	Device initialization.
+    //	Configure port input/output direction.
+    //
+    virtual ErrorCodeEnum DevOpen(GpioInitParam initParam)
+    {
+        ErrorCodeEnum err = Error_Succeed;
+        return err;
+    }
+
+    //
+    //	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_Succeed;
+    }
+    //
+    //	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;
+    }
+
+    ErrorCodeEnum SetStatus(DWORD dwReq, DWORD dwMode);
+
+    ErrorCodeEnum DetectStatus(DWORD dwReq, DWORD& dwMode);
+
+private:
+    int m_mode;
+};
+
+
+#endif //LIBFRAMEWORK_GPIO_IMPL_H

+ 71 - 6
DevAdapter/include/GpioClass.h

@@ -29,13 +29,45 @@ struct GpioInitParam
 							//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.
-	//
+	/// <summary>
+	/// Device initialization.
+	/// Configure port input/output direction.
+	/// </summary>
+	/// <param name="initParam"></param>
+	/// <returns></returns>
 	virtual ErrorCodeEnum DevOpen(GpioInitParam initParam) = 0;
 
 	//
@@ -46,7 +78,7 @@ public:
 	//	  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) = 0;
+	virtual ErrorCodeEnum WritePort(DWORD dwPort,BYTE btData) { return Error_NotImpl; }
 	//
 	//	Get port input.
 	//	Arguments:
@@ -54,6 +86,39 @@ public:
 	//	- 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) = 0;
+	virtual ErrorCodeEnum ReadPort(DWORD dwPort,BYTE &btStatus) { return Error_NotImpl; }
+
+	/// <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 //__GPIO_CLASS_H

+ 3 - 1
Module/include/DevFSMCommBase.hpp

@@ -398,6 +398,8 @@ struct AdapterInfo : public AdaptorInfo
 		strcpy(devCatInfo.szModel, rhs.szModel);
 		strcpy(devCatInfo.szVendor, rhs.szVendor);
 
+        CSimpleStringA strVersion = CSimpleStringA::Format("%d.%d.%d.%d", devCatInfo.version.wMajor, devCatInfo.version.wMinor, devCatInfo.version.wRevision, devCatInfo.version.wBuild);
+
 		if (strlen(devCatInfo.szType) >= MAX_DEV_TYPE_LEN) {
 			devCatInfo.szType[MAX_DEV_TYPE_LEN - 1] = '\0';
 		}
@@ -408,7 +410,7 @@ struct AdapterInfo : public AdaptorInfo
 			devCatInfo.szVendor[MAX_DEV_VENDOR_LEN - 1] = '\0';
 		}
 
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetDevCategory")("{\"szVendor\":\"%s\",\"szType\":\"%s\",\"szModel\":\"%s\"}", devCatInfo.szVendor, devCatInfo.szType, devCatInfo.szModel);
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("GetDevCategory")("{\"szVendor\":\"%s\",\"szType\":\"%s\",\"szModel\":\"%s\",\"szVersion\":\"%s\"}", devCatInfo.szVendor, devCatInfo.szType, devCatInfo.szModel, strVersion.GetData());
 		
 		CheckCategoryInfoFormat();
 	}

+ 0 - 10
Module/include/EventCode.h

@@ -5,7 +5,6 @@ enum LightSeq{
 	UNKNOWN_DEVICE,
 	CARDREADER,
 	CARDREADER_RED,
-	PRINTER,
 	IDCERTIFICATE,
 	PINPAD,
 	PINPADLIGHT,
@@ -17,11 +16,8 @@ enum LightSeq{
 	HEADLIGHT,
 	HEADLIGHT_RED,
 	CONTACTLESSCARD,
-	USBCONTROL,
-	USBLIGHT,
 	HEADLIGHT_ASSIST,
 	HSPSCANNER,
-	PRINTER_SEAL,
 	FINGERPRINT
 };
 //设备类型枚举
@@ -630,12 +626,6 @@ ERROR_ACCESSAUTH_CONNECT_ACS_x}
 #define LOG_WARN_CONTACTLESS_CARD_FORGET_FETCH		(ContactlessCard_Public_Start + 4)
 #define LOG_ERR_CONTACTLESS_CARD_FAILED				(ContactlessCard_Public_Start + 5)
 
-#define LOG_EVT_USB_CONTROL_ON 0x21400001
-#define LOG_EVT_USB_CONTROL_OFF 0x21400002
-#define LOG_EVT_USB_CONTROL_OP 0x21400003
-#define LOG_EVT_USB_LIGHT_ON 0x21400004
-#define LOG_EVT_USB_LIGHT_OFF 0x21400005
-//#define LOG_DEVICECONTROL_BROWSER_CACHE_CLEAER 0x21400006
 #define LOG_DEVICECONTROL_SOGOU_SCRIPTS_NOT_EXISTS 0x21400007
 #define LOG_DEVICECONTROL_SOGOU_SCRIPTS_EXECUTE_SUCC 0x21400008
 #define LOG_DEVICECONTROL_SOGOU_SCRIPTS_EXECUTE_FAILED 0x21400009

+ 4 - 4
Module/mod_DeviceControl/DeviceControlFSM.cpp

@@ -1,4 +1,4 @@
-#include "stdafx.h"
+锘�#include "stdafx.h"
 #include "DeviceControlFSM.h"
 #include "GetDevInfoHelper.h"
 #include "EventCode.h"
@@ -50,7 +50,7 @@ ErrorCodeEnum CDeviceControlFSM::RestartSogouServices()
 
         bool monitor_exist(false), other_exists(false);
 
-        /** 因为接口暂时获取不了命令行的内容,只能暂时将此接口置为成功 [Gifur@2022110]*/
+        /** 锟斤拷为锟接匡拷锟斤拷时锟斤拷取锟斤拷锟斤拷锟斤拷锟斤拷锟叫碉拷锟斤拷锟捷o拷只锟斤拷锟斤拷时锟斤拷锟剿接匡拷锟斤拷为锟缴癸拷 [Gifur@2022110]*/
         monitor_exist = true;
 
         for (int i = 0; i < count; ++i) {
@@ -82,10 +82,10 @@ ErrorCodeEnum CDeviceControlFSM::RestartSogouServices()
             } else {
                 DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("execute {%s} suc: %s", shutdown_service_without_monitor.c_str(), succStr.c_str());
 
-                /**等待服务进程退出 */
+                /**锟饺达拷锟斤拷锟斤拷锟斤拷锟斤拷顺锟� */
                 Sleep(300);
 
-                /** Sogou的监护服务每隔5s会检测搜狗服务是否存在,否则会重启,为什么不自己重启,因为搜狗服务得跑在普通用户权限下 [Gifur@20211230]*/
+                /** Sogou锟侥监护锟斤拷锟斤拷每锟斤拷5s锟斤拷锟斤拷锟窖癸拷锟斤拷锟斤拷锟角凤拷锟斤拷冢锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟轿�裁达拷锟斤拷约锟斤拷锟斤拷锟斤拷锟斤拷为锟窖癸拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟酵�拷没锟饺�拷锟斤拷锟� [Gifur@20211230]*/
                 const DWORD defaultInterval = 3000;
                 const int maxtIntervalTimes(3);
                 int intervalTimes(0);

+ 190 - 211
Module/mod_gpio/mod_gpio.cpp

@@ -19,13 +19,6 @@ int negative_level_count = 0;
 
 using namespace SP::Module::Comm;
 
-bool DetectBit(ULONG data, int pos)
-{
-    ULONG tmp = 0;
-    SETBIT(tmp, pos);
-    return data & tmp;
-}
-
 static const char* GetDriverPortString(int pin)
 {
     switch (pin) {
@@ -86,10 +79,8 @@ static const char* GetLightSeqString(int seq)
     LIGHT_STRING_CONVERT(UNKNOWN_DEVICE)
     LIGHT_STRING_CONVERT(CARDREADER)
     LIGHT_STRING_CONVERT(CARDREADER_RED)
-    LIGHT_STRING_CONVERT(PRINTER)
     LIGHT_STRING_CONVERT(IDCERTIFICATE)
     LIGHT_STRING_CONVERT(PINPAD)
-    LIGHT_STRING_CONVERT(PINPADLIGHT)
     LIGHT_STRING_CONVERT(SHAKEDETECT)
     LIGHT_STRING_CONVERT(SWITCHINDUCTOR)
     LIGHT_STRING_CONVERT(PHONEPICKUP)
@@ -98,11 +89,8 @@ static const char* GetLightSeqString(int seq)
     LIGHT_STRING_CONVERT(HEADLIGHT)
     LIGHT_STRING_CONVERT(HEADLIGHT_RED)
     LIGHT_STRING_CONVERT(CONTACTLESSCARD)
-    LIGHT_STRING_CONVERT(USBCONTROL)
-    LIGHT_STRING_CONVERT(USBLIGHT)
     LIGHT_STRING_CONVERT(HEADLIGHT_ASSIST)
     LIGHT_STRING_CONVERT(HSPSCANNER)
-    LIGHT_STRING_CONVERT(PRINTER_SEAL)
     LIGHT_STRING_CONVERT(FINGERPRINT)
     default:
         DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Unkonwn LightSeq: %d", seq);
@@ -115,28 +103,19 @@ static const char* GetLightSeqString(int seq)
 
 void CGpioServiceSession::Handle_Set(SpOnewayCallContext<GpioService_Set_Info>::Pointer ctx)
 {
-	DbgToBeidou(ctx->link, __FUNCTION__)();
-    GpioService_Set_Info req = ctx->Info;
-    DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("devseq=%d", req.devseq);
-    DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("mode=%d", req.mode);
-    DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("close=%d", req.close);
-    m_pEntity->Set(req);
+
 }
 
 void CGpioServiceSession::Handle_GetStatus(SpReqAnsContext<GpioService_GetStatus_Req, GpioService_GetStatus_Ans>::Pointer ctx)
 {
-	DbgToBeidou(ctx->link, __FUNCTION__)();
-    m_pEntity->GetStatus(ctx->Req.devseq, ctx);
+    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(__FUNCTION__);
+    ctx->Answer(Error_NotSupport);
 }
 
 void CGpioServiceSession::Handle_QueryCurrSet(SpReqAnsContext<GpioService_QueryCurrSet_Req, GpioService_QueryCurrSet_Ans>::Pointer ctx)
 {
-	DbgToBeidou(ctx->link, __FUNCTION__)();
-    DevOutputInfo output;
-    output = m_pEntity->GetCurrDevStatus();
-    ctx->Ans.dir = output.dir;
-    ctx->Ans.output = m_pEntity->GetOutputStatus(0);
-    ctx->Answer(Error_Succeed);
+    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)(__FUNCTION__);
+    ctx->Answer(Error_NotSupport);
 }
 
 bool isnostr(const char* str)
@@ -288,6 +267,20 @@ void CGpioEntity::ToLogWarnInfoAboutTerm(const AdapterInfo& m_adapterInfo)
 	return;
 }
 
+bool CGpioEntity::DetectBit(ULONG data, int pos)
+{
+    if (!m_bFuncVer2) {
+        ULONG tmp = 0;
+        SETBIT(tmp, pos);
+        return data & tmp;
+    } else {
+        if (m_hDevHelper != nullptr) {
+            DWORD dwReq = (GPIO_DEV_SN_SENSOR_SHAKE << pos);
+            return (data & dwReq);
+        }
+    }
+}
+
 ErrorCodeEnum CGpioEntity::Initial()
 {
     ErrorCodeEnum err;
@@ -378,12 +371,17 @@ ErrorCodeEnum CGpioEntity::Initial()
             err = m_hDevHelper->GetDevCategory(m_devCatInfo);
             if (err == Error_Succeed) {
                 m_adapterInfo.FulfillCategoryInfo(m_devCatInfo);
-				ToLogWarnInfoAboutTerm(m_adapterInfo);
+                CSimpleStringA strType(m_devCatInfo.szType);
+                if (strType.IndexOf("FUNCVER=2.0") != -1) {
+                    m_bFuncVer2 = TRUE;
+                    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Detect new interface version: %s", strType.GetData());
+                }
+                ToLogWarnInfoAboutTerm(m_adapterInfo);
             } else {
                 DevErrorInfo devErrInfo;
                 ZeroMemory(&devErrInfo, sizeof(devErrInfo));
                 m_hDevHelper->GetLastErr(devErrInfo);
-                errMsg = CSimpleStringA::Format("GetDevCategory failed:%d(s)", err, devErrInfo.szErrMsg);
+                errMsg = CSimpleStringA::Format("GetDevCategory failed:%s(s)", SpStrError(err), devErrInfo.szErrMsg);
                 LogWarn(Severity_Middle, Error_Unexpect, GPIO_UserErrorCode_GetDevCategory_Failed, errMsg.GetData());
             }
             initTries = 0;
@@ -405,16 +403,18 @@ ErrorCodeEnum CGpioEntity::Initial()
         err = Error_DevConnFailed;
     }
 
-    err = m_hDevHelper->WritePort(0, 0x00);
-	if (err != Error_Succeed)
-    	DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("write ports(0) returned: %s)", SpStrError(err));
-    err = m_hDevHelper->WritePort(1, 0x00);
-	if (err != Error_Succeed)
-    	DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("write ports(1) returned: %s)", SpStrError(err));
-    if (m_bNewVersion) {
-        err = m_hDevHelper->WritePort(3, 0x00);
-		if (err != Error_Succeed)
-        	DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("write ports(3) returned: %s)", SpStrError(err));
+    if (!m_bFuncVer2) {
+        err = m_hDevHelper->WritePort(0, 0x00);
+        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("write ports(0) returned: %s)", SpStrError(err));
+        err = m_hDevHelper->WritePort(1, 0x00);
+        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("write ports(1) returned: %s)", SpStrError(err));
+        if (m_bNewVersion) {
+            err = m_hDevHelper->WritePort(3, 0x00);
+            DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("write ports(3) returned: %s)", SpStrError(err));
+        }
+    } else {
+        err = m_hDevHelper->SetStatus(GPIO_DEV_SN_LIGHT_SENSOR_ALL, GPIO_DEV_LIGHT_MODE_RESET);
+        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("write resetone returned: %s)", SpStrError(err));
     }
 
     //oilyang@20170214 
@@ -432,10 +432,12 @@ ErrorCodeEnum CGpioEntity::Initial()
         m_moveHoldTimes = MAX_MOVE_HOLD_TIMES;//oiltmp about 5000*300ms = 25 minutes
     }
     m_moveDisappearTimes = m_moveHoldTimes;
+
     m_eMachineType = SP::Module::Comm::GetTerminalMachineInfo(this).type;
     DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("machine type: %s", SP::Module::Comm::Type2Str(m_eMachineType));
     return err;
 }
+
 void CGpioEntity::OnLog(const CAutoArray<CUUID>& SubIDs, const CUUID nLogID, const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
                         const DWORD dwSysError, const DWORD dwUserCode, const DWORD dwEntityInstanceID, const WORD wEntityDevelID,
                         const CAutoArray<DWORD>& Param, const char* pszEntityName, const char* pszModuleName, const char* pszMessage, const linkContext& pLinkInfo)
@@ -469,7 +471,7 @@ void CGpioEntity::OnLog(const CAutoArray<CUUID>& SubIDs, const CUUID nLogID, con
     case LOG_EVT_HEADLIGHT_GREEN_ON:
         m_bHeadLightFlag = true;
         Req.devseq = HEADLIGHT;
-        Req.mode = 1;
+        Req.mode = 0;
         LOG_TRACE("machine light on");
         break;
     case LOG_EVT_HEADLIGHT_RED_ON:
@@ -480,14 +482,6 @@ void CGpioEntity::OnLog(const CAutoArray<CUUID>& SubIDs, const CUUID nLogID, con
         Req.devseq = CONTACTLESSCARD;
         Req.mode = 1;
         break;
-    case LOG_EVT_USB_CONTROL_ON:
-        Req.devseq = USBCONTROL;
-        Req.mode = 1;
-        break;
-    case LOG_EVT_USB_LIGHT_ON:
-        Req.devseq = USBLIGHT;
-        Req.mode = 1;
-        break;
     case LOG_EVT_IEBROWSER_LIGHT_ASSISTANT_ON:
         Req.devseq = HEADLIGHT_ASSIST;
         Req.mode = 1;
@@ -536,16 +530,6 @@ void CGpioEntity::OnLog(const CAutoArray<CUUID>& SubIDs, const CUUID nLogID, con
         Req.mode = 1;
         Req.close = 1;
         break;
-    case LOG_EVT_USB_CONTROL_OFF:
-        Req.devseq = USBCONTROL;
-        Req.mode = 1;
-        Req.close = 1;
-        break;
-    case LOG_EVT_USB_LIGHT_OFF:
-        Req.devseq = USBLIGHT;
-        Req.mode = 1;
-        Req.close = 1;
-        break;
     case LOG_EVT_IEBROWSER_LIGHT_ASSISTANT_OFF:
         Req.devseq = HEADLIGHT_ASSIST;
         Req.mode = 1;
@@ -566,17 +550,8 @@ void CGpioEntity::OnLog(const CAutoArray<CUUID>& SubIDs, const CUUID nLogID, con
         DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("unkown event: 0x%X", dwUserCode);
         return;
     }
-
-    if (m_eMachineType != RVC_Stand1SPlus
-        || (dwUserCode == LOG_EVT_HEADLIGHT_GREEN_ON || dwUserCode == LOG_EVT_HEADLIGHT_RED_ON || dwUserCode == LOG_EVT_IEBROWSER_LIGHT_ASSISTANT_ON
-            || dwUserCode == LOG_EVT_HEADLIGHT_GREEN_OFF || dwUserCode == LOG_EVT_HEADLIGHT_RED_OFF || dwUserCode == LOG_EVT_IEBROWSER_LIGHT_ASSISTANT_OFF)) {
-
-        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("devseq[%d],mode[%d]close[%d]", Req.devseq, Req.mode, Req.close);
-        Set(Req);
-
-    } else {
-        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Stand1S: devseq[%d],mode[%d]close[%d] is not supported!", Req.devseq, Req.mode, Req.close);
-    }
+    DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("devseq[%d],mode[%d]close[%d]", Req.devseq, Req.mode, Req.close);
+    m_bFuncVer2 ? SetEx(Req) : Set(Req);
 }
 
 void CGpioEntity::WritePin(DWORD dwPinSeq, bool bHighLevel)
@@ -623,6 +598,87 @@ void CGpioEntity::WritePin(DWORD dwPinSeq, bool bHighLevel)
     }
 }
 
+void CGpioEntity::SetEx(GpioService_Set_Info req)
+{
+    int devicePort;
+    LOG_TRACE("SetEx request %s arrived!", GetLightSeqString(req.devseq));
+    switch (req.devseq) {
+    case CARDREADER:
+    {
+        devicePort = GPIO_DEV_SN_LIGHT_CARDISSUER;
+        break;
+    }
+    case CARDREADER_RED:
+    {
+        devicePort = GPIO_DEV_SN_LIGHT_CARDISSUER_MAINTAIN;
+        break;
+    }
+    case IDCERTIFICATE:
+    {
+        devicePort = GPIO_DEV_SN_LIGHT_IDCERTIFICATE;
+        break;
+    }
+    case FINGERPRINT:
+    {
+        devicePort = GPIO_DEV_SN_LIGHT_FINGERPRINT;
+        break;
+    }
+    case PINPAD:
+    {
+        devicePort = GPIO_DEV_SN_LIGHT_PINPAD;
+        break;
+    }
+    case HEADLIGHT:
+    {
+        devicePort = GPIO_DEV_SN_LIGHT_FACE;
+        break;
+    }
+    case HEADLIGHT_RED:
+    {
+        devicePort = 6/*GPIO_DEV_SN_LIGHT_MACHINE_FAULT*/;
+        break;
+    }
+    case CONTACTLESSCARD:
+    {
+        devicePort = GPIO_DEV_SN_LIGHT_CONTACTLESSCARD;
+        break;
+    }
+    case HEADLIGHT_ASSIST:
+    {
+        devicePort = GPIO_DEV_SN_LIGHT_FACE;
+        break;
+    }
+    break;
+    default:
+        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("unsupport device seq: %d", req.devseq);
+        return;
+    }
+
+    if (m_hDevHelper != nullptr) {
+        DWORD dwReq = devicePort;
+        DWORD dwMode = 0;
+        if (!req.close) {
+            dwMode |= GPIO_DEV_LIGHT_MODE_COLOR_NORMAL;
+            if (!!req.mode) {
+                dwMode |= GPIO_DEV_LIGHT_MODE_LIGHT_FLICKER;
+            } else {
+                dwMode |= GPIO_DEV_LIGHT_MODE_LIGHT_SUSTAIN;
+            }
+        }
+        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("to set SetStatus...%d, 0x%X", dwReq, dwMode);
+        const ErrorCodeEnum ec = m_hDevHelper->SetStatus(dwReq, dwMode);
+        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("SetStatus returned %s", SpStrError(ec));
+        if (ec != Error_Succeed) {
+            DevErrorInfo devErrInfo;
+            ZeroMemory(&devErrInfo, sizeof(devErrInfo));
+            m_hDevHelper->GetLastErr(devErrInfo);
+            DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("SetStatus failed:%s(%s)", SpStrError(ec), devErrInfo.szErrMsg);
+        }
+    } else {
+        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("dev helper object is invalid pointer!");
+    }
+}
+
 void CGpioEntity::Set(GpioService_Set_Info req)
 {
     CSimpleStringA activeModeSecName = "";
@@ -681,18 +737,6 @@ void CGpioEntity::Set(GpioService_Set_Info req)
         devicePort = 8;
         break;
     }
-    case USBCONTROL:
-    {
-        activeModeSecName = "LightNormal";
-        devicePort = 1;
-        break;
-    }
-    case USBLIGHT:
-    {
-        activeModeSecName = "CardReaderNormal";
-        devicePort = 7;
-        break;
-    }
     case HEADLIGHT_ASSIST:
     {
         activeModeSecName = "AssistNormal";
@@ -711,39 +755,34 @@ void CGpioEntity::Set(GpioService_Set_Info req)
         return;
     }
 
-    if (m_eMachineType != RVC_Stand1SPlus
-        || (deviceSeq == HEADLIGHT || deviceSeq == HEADLIGHT_RED || deviceSeq == HEADLIGHT_ASSIST)) {
-
-        OutDrivingInfo odi;
-        GetOutDrivingModInfo(activeModeSecName, odi);
-        SetOutDriving(req, odi, 0, devicePort);
-    
-    } else {
-        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Stand1SPlus: %d,%d(%s) is not supported!", deviceSeq, devicePort, activeModeSecName);
-    }
+    OutDrivingInfo odi;
+    GetOutDrivingModInfo(activeModeSecName, odi);
+    SetOutDriving(req, odi, 0, devicePort);
 }
 
+//仅仅获取挂机的状态,但远远没有这么简单,这点只调用了一次,开了一个监听线程,用于监听震动、开关门等事件
 void CGpioEntity::GetStatus(int deviceSeq, SpReqAnsContext<GpioService_GetStatus_Req, GpioService_GetStatus_Ans>::Pointer ctx)
 {
-    /** 注意设备序号是实体内定义的逻辑,不是设备端口号*/
+    /** 注意设备序号是实体内定义的逻辑,不是设备端口号,用作于计时器的ID去了*/
     DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("GetStatus with devseq %d", deviceSeq);
-    CSimpleStringA initDriver = "";
-    int devicePort;
-    /** 获取指定的模式,以便后续获取输入模式和持续触发模式,见 GetReceivingModInfo*/
-    initDriver = "PhoneNormal";
-    /** 获取硬件规格里对应的序号,其实是固定死的*/
-    devicePort = 18;
-    ReceivingInfo ri;
-    GetReceivingModInfo(initDriver, ri);
-    ri.Port = devicePort;
-    GetReceiving(deviceSeq, ri, PICKUPSENSOR, ctx);
+    if (deviceSeq == PHONEPICKUP) {
+        CSimpleStringA initDriver = "";
+        int devicePort;
+        /** 获取指定的模式,以便后续获取输入模式和持续触发模式,见 GetReceivingModInfo*/
+        initDriver = "PhoneNormal";
+        /** 获取硬件规格里对应的序号,其实是固定死的*/
+        devicePort = 18;
+        ReceivingInfo ri;
+        GetReceivingModInfo(initDriver, ri);
+        ri.Port = devicePort;
+        GetReceiving(deviceSeq, ri, PICKUPSENSOR);
+    }
 }
 
 void CGpioEntity::OnOutputPositiveLevelTimerout(void* pData)
 {
     SetContextInfo* pSCI = (SetContextInfo*)pData;
     GetFunction()->KillTimer(pSCI->timerID);
-    ULONG devEnableStatus = GetDevEnableStatus();
     DevOutputInfo doi = GetCurrDevStatus();
     WritePin(pSCI->pinSeq, true);
     delete pSCI;
@@ -754,21 +793,17 @@ void CGpioEntity::OnPositiveFlickerSetTimerout(void* pData)
     SetContextInfo* pSCI = (SetContextInfo*)pData;
     GetFunction()->KillTimer(pSCI->timerID);
 
-    ULONG devEnableStatus = GetDevEnableStatus();
     DevOutputInfo doi = GetCurrDevStatus();
     WritePin(pSCI->pinSeq, false);
     pSCI->timerID = pSCI->timerID;
 
     ITimerListener* pListener = new TimerOutHelper<CGpioEntity>(this, &CGpioEntity::OnPositiveFlickerResetTimerout, pSCI, true);
     GetFunction()->SetTimer(pSCI->timerID, pListener, pSCI->resetTime);
-
 }
-
 void CGpioEntity::OnPositiveFlickerResetTimerout(void* pData)
 {
     SetContextInfo* pSCI = (SetContextInfo*)pData;
     GetFunction()->KillTimer(pSCI->timerID);
-    ULONG devEnableStatus = GetDevEnableStatus();
     DevOutputInfo doi = GetCurrDevStatus();
 
     WritePin(pSCI->pinSeq, true);
@@ -776,16 +811,16 @@ void CGpioEntity::OnPositiveFlickerResetTimerout(void* pData)
     GetFunction()->SetTimer(pSCI->timerID, pListener, pSCI->setTime);
 }
 
+//老接口,用于控制灯
 bool CGpioEntity::SetOutDriving(GpioService_Set_Info req, OutDrivingInfo od, ULONG iIndex, ULONG pinSeq)
 {
-    ULONG devEnableStatus = GetDevEnableStatus();
     DevOutputInfo doi = GetCurrDevStatus();
     if (req.close == 1) {
         GetFunction()->KillTimer(req.devseq);
         //oilyang add 20161222
         //如果关闭照明灯,以感知为准
         if (pinSeq == m_headlightDevPort)
-            WritePin(pinSeq, m_bHeadLightFlag);
+            WritePin(pinSeq, m_bHeadLightFlag); //这个值有待商榷
         else {
             if (pinSeq == PIN_HSPSCANNER_PREVIEW_LIGHT) {
                 DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("off hspsanner.");
@@ -793,7 +828,6 @@ bool CGpioEntity::SetOutDriving(GpioService_Set_Info req, OutDrivingInfo od, ULO
             }
             WritePin(pinSeq, false);
         }
-
         return true;
     }
 
@@ -879,42 +913,12 @@ bool CGpioEntity::SetOutDriving(GpioService_Set_Info req, OutDrivingInfo od, ULO
 
     return true;
 }
-void CGpioEntity::OnPositivePulseUpTimerout(void* pData)
-{
-    GetContextInfo* pGCI = (GetContextInfo*)pData;
-
-    BYTE btInput = 0;
-    ErrorCodeEnum err;
-    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("port[%d]", INPUT_PORT_2);
-    err = m_hDevHelper->ReadPort(INPUT_PORT_2, btInput);
-    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("read[%d]", btInput);
-    //判断输入
-    if (DetectBit(btInput, pGCI->index)) {
-        if (pGCI->CttPhone == 0)//oiltest 20130709
-        {
-            ////触发
-            pGCI->ctx->Ans.status = 1;
-            pGCI->ctx->Answer(Error_Succeed);
-        } else {
-            pGCI->CttPhone--;//oiltest 20130709
-            GetFunction()->ResetTimer(pGCI->timerID, 1000);
-        }
-    } else {
-        pGCI->CttPhone = pGCI->InitCTT;//oiltest 20130709
-        GetFunction()->ResetTimer(pGCI->timerID, 1);
-    }
-}
-
-void CGpioEntity::OnNegativePulseUpTimerout(void* pData)
-{
-
-}
 
+/** 太复杂了,先掺在一起再改动吧  [Gifur@2023921]*/
 void CGpioEntity::OnPositiveLevelTimerOut(void* pData)
 {
     GetContextInfo* pGci = (GetContextInfo*)pData;
 
-    const int count = pGci->InitCTT;
     const int initCtt = pGci->InitCTT;
     const int pos = pGci->Port;
     
@@ -924,12 +928,22 @@ void CGpioEntity::OnPositiveLevelTimerOut(void* pData)
     bool bShakeOne, bMoveOne, bSwitchOne, bPhoneOne, bCardOne;
     bShakeOne = bMoveOne = bSwitchOne = bPhoneOne = bCardOne = false;
 
-    const ErrorCodeEnum err = m_hDevHelper->ReadPort(INPUT_PORT_2, btInput);
+    ErrorCodeEnum err(Error_Succeed);
+    if (!m_bFuncVer2) {
+        err = m_hDevHelper->ReadPort(INPUT_PORT_2, btInput);
+    } else {
+        DWORD dwReq(GPIO_DEV_SN_LIGHT_SENSOR_ALL);
+        DWORD dwMode = 0;
+        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("to DetectStatus 0x%X...", dwReq);
+        err = m_hDevHelper->DetectStatus(dwReq, dwMode);
+        DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("DetectStatus return %s, 0x%X", SpStrError(err), dwMode);
+        btInput = dwMode;
+    }
     if (err != Error_Succeed) {
         DevErrorInfo devErrInfo;
         ZeroMemory(&devErrInfo, sizeof(DevErrorInfo));
         ErrorCodeEnum erroCode = m_hDevHelper->GetLastErr(devErrInfo);
-        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("ReadPort failed: %s, ErrMsg[%s]", SpStrError(err), (LPCTSTR)devErrInfo.szErrMsg);
+        DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("%s failed: %s, ErrMsg[%s]", m_bFuncVer2 ?  "DetectStatus": "ReadPort",  SpStrError(err), (LPCTSTR)devErrInfo.szErrMsg);
         return;
     }
 
@@ -940,7 +954,9 @@ void CGpioEntity::OnPositiveLevelTimerOut(void* pData)
 
         do {
 
+            /** 待商榷,这里永远不可能为1 [Gifur@2023921]*/
             if (initCtt == 1) {
+                DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("test initCtt == 1");
                 if (DetectBit(btInput, VIBRATIONSENSOR)) {
                     if (!m_bVibrationFlag && IfHaveMoveDetect()) {
                         LogEvent(Severity_Middle, LOG_EVT_VIBRATIONSENSOR,  CSimpleStringA::Format("%s [Active] line: %d", GetDriverPortString(17), __LINE__));
@@ -976,6 +992,7 @@ void CGpioEntity::OnPositiveLevelTimerOut(void* pData)
         do {
 
             if (initCtt == 1) {
+                DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("test initCtt == 1");
                 if (DetectBit(btInput, OPENSENSOR)) {
                     if (!m_bOpenFlag) {
                         if (IfHaveMoveDetect())
@@ -1016,7 +1033,7 @@ void CGpioEntity::OnPositiveLevelTimerOut(void* pData)
         do {
 
             if (initCtt == 1) {
-
+			    DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("test initCtt == 1");
                 if (m_ePickUpFlag == UnknownStatus) {
                     if (DetectBit(btInput, PICKUPSENSOR)) m_ePickUpFlag = Actived;
                     else if (!DetectBit(btInput, PICKUPSENSOR)) m_ePickUpFlag = InActive;
@@ -1086,6 +1103,7 @@ void CGpioEntity::OnPositiveLevelTimerOut(void* pData)
 
         do {
             if (initCtt == 1) {
+                DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("test initCtt == 1");
                 if (DetectBit(btInput, MOVESENSOR)) {
                     if (IfHaveMoveDetect())
                         LogEvent(Severity_Middle, LOG_EVT_MOVESENSOR_ON, CSimpleStringA::Format("%s [Active] line: %d", GetDriverPortString(20), __LINE__));
@@ -1138,6 +1156,7 @@ void CGpioEntity::OnPositiveLevelTimerOut(void* pData)
         do {
             
             if (initCtt == 1) {
+                DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("test initCtt == 1");
                 if (DetectBit(btInput, CARDGATESENSOR)) {
                     if (!m_bCardGateFlag) {
                         if (IfHaveMoveDetect())
@@ -1238,8 +1257,6 @@ void CGpioEntity::OnPositiveLevelTimerOut(void* pData)
 
     if (pGci->CttMove > 1 && !bMoveOne) {
         do {
-            //DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("before ccMove: %d, ccInit: %d, moveRound: %d, %d, disppear: %d, holder: %d",
-            //    pGci->CttMove, pGci->InitCTT, m_bMoveRound, DetectBit(btInput, MOVESENSOR), m_moveDisappearTimes, m_moveHoldTimes);
 
             if (m_bMoveRound) {
                 if (DetectBit(btInput, MOVESENSOR))
@@ -1256,15 +1273,10 @@ void CGpioEntity::OnPositiveLevelTimerOut(void* pData)
                     pGci->CttMove = pGci->InitCTT;
                 }
             }
-            
-            //DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("after ccMove: %d, ccInit: %d, moveRound: %d, %d, disppear: %d, holder: %d",
-            //    pGci->CttMove, pGci->InitCTT, m_bMoveRound, DetectBit(btInput, MOVESENSOR), m_moveDisappearTimes, m_moveHoldTimes);
 
         } while (0);
-    } else {
-        //DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("===== ccMove: %d, moveOne: %d, moveRound: %d, %d, disppear: %d, holder: %d",
-        //    pGci->CttMove, bMoveOne, m_bMoveRound, DetectBit(btInput, MOVESENSOR), m_moveDisappearTimes, m_moveHoldTimes);
-    }
+
+    } 
 
     if (pGci->CttCard > 1 && !bCardOne) {
         do {
@@ -1289,41 +1301,15 @@ void CGpioEntity::OnPositiveLevelTimerOut(void* pData)
     GetFunction()->ResetTimer(pGci->timerID, 100);
 }
 
-void CGpioEntity::OnNegativeLevelTimerOut(void* pData)
-{
-
-}
-
-bool CGpioEntity::GetReceiving(int deviceSeq, ReceivingInfo ri, ULONG iIndex, 
-                               SpReqAnsContext<GpioService_GetStatus_Req, GpioService_GetStatus_Ans>::Pointer ctx)
+bool CGpioEntity::GetReceiving(int deviceSeq, ReceivingInfo ri, ULONG iIndex)
 {
-
     DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("inputmode[%d],port[%d],ctt[%d]", ri.InputMode, ri.Port, ri.ContinuousTriggerTime);
     switch (ri.InputMode) 
     {
-        case IM_POSITIVE_PULSE_UP:
-        {
-            GetContextInfo* pGci = new GetContextInfo();
-            pGci->timerID = ctx->Req.devseq;
-            pGci->ctx = ctx;
-            pGci->index = iIndex;
-            pGci->Port = ri.Port;
-            pGci->CttCard = ri.ContinuousTriggerTime;
-            pGci->CttMove = ri.ContinuousTriggerTime;
-            pGci->CttPhone = ri.ContinuousTriggerTime;
-            pGci->CttShake = ri.ContinuousTriggerTime;
-            pGci->CttSwitch = ri.ContinuousTriggerTime;
-            pGci->InitCTT = ri.ContinuousTriggerTime;
-            ITimerListener* pListener = new TimerOutHelper<CGpioEntity>(this, &CGpioEntity::OnPositivePulseUpTimerout, pGci);
-            GetFunction()->SetTimer(pGci->timerID, pListener, 1);
-            break;
-        }
-
         case IM_POSITIVE_LEVEL:
-        {
+        { /** 目前只是使用了这一个 [Gifur@2023921]*/
             GetContextInfo* pGci = new GetContextInfo();
             pGci->timerID = deviceSeq;
-            pGci->ctx = ctx;
             pGci->index = iIndex;
             pGci->Port = ri.Port;
             pGci->CttCard = ri.ContinuousTriggerTime;
@@ -1336,69 +1322,66 @@ bool CGpioEntity::GetReceiving(int deviceSeq, ReceivingInfo ri, ULONG iIndex,
             GetFunction()->SetTimer(pGci->timerID, pListener, 100);
             break;
         }
-        case IM_NEGATIVE_LEVEL:
-        {
-            GetContextInfo* pGci = new GetContextInfo();
-            pGci->timerID = deviceSeq;
-            pGci->ctx = ctx;
-            pGci->index = iIndex;
-            pGci->Port = ri.Port;
-            pGci->InitCTT = ri.ContinuousTriggerTime;
-            ITimerListener* pListener = new TimerOutHelper<CGpioEntity>(this, &CGpioEntity::OnNegativeLevelTimerOut, pGci);
-            GetFunction()->SetTimer(pGci->timerID, pListener, 1);
-            break;
-        }
         default:
+            DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("not support: %d", ri.InputMode);
             break;
     }
     return true;
 }
 
+/** 旧接口,从配置中获取闪烁的属性 [Gifur@2023921]*/
 void CGpioEntity::GetOutDrivingModInfo(CSimpleStringA modName, OutDrivingInfo& odi)
 {
 	if (modName.Compare("IDCertificateNormal") == 0) {
-		odi.OutputMode = 2;
-		odi.StopMode = 2;
+		odi.OutputMode = OM_POSITIVE_FLICKER;
+		odi.StopMode = SM_CYCLE;
 		odi.SetTime = 150;
 		odi.ResetTime = 150;
 		odi.TimeOut = 5000;
+
 	} else if (modName.Compare("FingerPrintNormal") == 0) {
-		odi.OutputMode = 2;
-		odi.StopMode = 2;
+		odi.OutputMode = OM_POSITIVE_FLICKER;
+		odi.StopMode = SM_CYCLE;
 		odi.SetTime = 150;
 		odi.ResetTime = 150;
 		odi.TimeOut = 5000;
+
 	} else if (modName.Compare("CardReaderNormal") == 0) {
-		odi.OutputMode = 2;
-		odi.StopMode = 2;
+		odi.OutputMode = OM_POSITIVE_FLICKER;
+		odi.StopMode = SM_CYCLE;
 		odi.SetTime = 200;
 		odi.ResetTime = 200;
 		odi.TimeOut = 5000;
+
 	} else if (modName.Compare("AssistNormal") == 0) {
-		odi.OutputMode = 2;
-		odi.StopMode = 2;
+		odi.OutputMode = OM_POSITIVE_FLICKER;
+		odi.StopMode = SM_CYCLE;
 		odi.SetTime = 1000;
 		odi.ResetTime = 500;
 		odi.TimeOut = 5000;
+
 	} else if (modName.Compare("LightNormal") == 0) {
-		odi.OutputMode = 0;
-		odi.StopMode = 0;
+		odi.OutputMode = OM_POSITIVE_LEVEL;
+		odi.StopMode = SM_CALLTRIGGER;
 		odi.SetTime = 1000;
 		odi.ResetTime = 1000;
 		odi.TimeOut = 5000;
+
 	} else if (modName.Compare("RedLightNormal") == 0) {
-		odi.OutputMode = 0;
-		odi.StopMode = 0;
+		odi.OutputMode = OM_POSITIVE_LEVEL;
+		odi.StopMode = SM_CALLTRIGGER;
 		odi.SetTime = 200;
 		odi.ResetTime = 200;
 		odi.TimeOut = 3000;
+
 	} else {
-		odi.OutputMode = 0;
-		odi.StopMode = 0;
+		odi.OutputMode = OM_POSITIVE_LEVEL;
+		odi.StopMode = SM_CALLTRIGGER;
 		odi.SetTime = 200;
 		odi.ResetTime = 200;
 		odi.TimeOut = 5000;
 	}
+
 	LOG_TRACE("outputmode.stopmode:[%d].[%d]", odi.OutputMode, odi.StopMode);
 }
 
@@ -1406,21 +1389,17 @@ void CGpioEntity::GetOutDrivingModInfo(CSimpleStringA modName, OutDrivingInfo& o
 void CGpioEntity::GetReceivingModInfo(CSimpleStringA modName, ReceivingInfo& ri)
 {
 	if (modName.Compare("PhoneNormal") == 0) {
-		ri.InputMode = 4;
 		ri.ContinuousTriggerTime = 2;
 	} else if (modName.Compare("GpioNormal") == 0) {
-		ri.InputMode = 4;
 		ri.ContinuousTriggerTime = 10;
 	} else if (modName.Compare("CardGateNormal") == 0) {
-		ri.InputMode = 4;
 		ri.ContinuousTriggerTime = 10;
 	} else if (modName.Compare("ShakeNormal") == 0) {
-		ri.InputMode = 4;
 		ri.ContinuousTriggerTime = 4;
 	} else {
-		ri.InputMode = 4;
 		ri.ContinuousTriggerTime = 10;
 	}
+    ri.InputMode = IM_POSITIVE_LEVEL;
 }
 
 BYTE CGpioEntity::GetOutputStatus(int sn)

+ 6 - 12
Module/mod_gpio/mod_gpio.h

@@ -143,12 +143,12 @@ class CGpioEntity : public CDevAdptEntityBase, public ILogListener
 {
 public:
 	//0000 0000 0000 0010 0110 1111 1100 0000
-	CGpioEntity():m_devEnableStatus(0x1f),m_bPickUpRound(false),m_bVibrationRound(false)
+	CGpioEntity():m_bPickUpRound(false),m_bVibrationRound(false)
 		,m_bOpenRound(false),m_bMoveRound(false),m_bCardGateRound(false), m_ePickUpFlag(UnknownStatus)
 		,m_bVibrationFlag(false),m_bOpenFlag(false),m_bMoveFlag(false),m_bCardGateFlag(false)
 		, m_pLogListener(NULL), m_bHeadLightFlag(false), m_headlightDevPort(0), m_moveHoldTimes(0)
 		, m_moveDisappearTimes(0),m_eMachineType(SP::Module::Comm::RVC_UNKNOWN)
-		, m_bNewVersion(FALSE), m_FirstStart(true)
+		, m_bNewVersion(FALSE), m_bFuncVer2(FALSE), m_FirstStart(true)
 		, m_csDevNo(true), m_port(true), m_portNum(true), m_Baudrate(true)
 	{
 		m_timerID = 1;
@@ -193,17 +193,12 @@ public:
 
 	bool SetOutDriving(GpioService_Set_Info req,OutDrivingInfo od, ULONG iIndex,ULONG devSeq);
 
-	bool GetReceiving(int deviceSeq,ReceivingInfo ri, ULONG iIndex, 
-					  SpReqAnsContext<GpioService_GetStatus_Req, GpioService_GetStatus_Ans>::Pointer ctx);
+	bool GetReceiving(int deviceSeq,ReceivingInfo ri, ULONG iIndex);
 
 	DevOutputInfo GetCurrDevStatus()const {return currDevStatus;}
 
 	void SaveCurrDevStatus(DevOutputInfo devOutputInfo) {currDevStatus = devOutputInfo;}
 
-	ULONG GetDevEnableStatus(){return m_devEnableStatus;}
-
-	void SetDevEnableStatus(ULONG devEnableStatus){m_devEnableStatus = devEnableStatus;}
-
 	ULONG GetNewTimerID(){return m_timerID++;}
 
 	BYTE GetOutputStatus(int sn=0);
@@ -214,14 +209,12 @@ public:
 	void OnOutputPositiveLevelTimerout(void *pData);
 	void OnPositiveFlickerSetTimerout(void *pData);
 	void OnPositiveFlickerResetTimerout(void *pData);
-	void OnPositivePulseUpTimerout(void* pData);
-	void OnNegativePulseUpTimerout(void* pData);
 	void OnPositiveLevelTimerOut(void* pData);
-	void OnNegativeLevelTimerOut(void* pData);
 	void GetOutDrivingModInfo(CSimpleStringA modName, OutDrivingInfo& odi);
 	void GetReceivingModInfo(CSimpleStringA modName, ReceivingInfo& ri);
 	void GetStatus(int deviceSeq,SpReqAnsContext<GpioService_GetStatus_Req, GpioService_GetStatus_Ans>::Pointer ctx);
 	void Set(GpioService_Set_Info info);
+	void SetEx(GpioService_Set_Info info);
 	void WritePin(DWORD dwPinSeq,bool bHighLevel);
 
 	virtual void OnLog(const CAutoArray<CUUID> &SubIDs, const CUUID nLogID,const LogTypeEnum eLogType, const SeverityLevelEnum eLevel,
@@ -230,6 +223,7 @@ public:
 
 	void ToLogRootINIInfo();
 	void ToLogWarnInfoAboutTerm(const AdapterInfo& m_adapterInfo);
+	bool DetectBit(ULONG data, int pos);
 
 public:
 
@@ -243,10 +237,10 @@ private:
 	BYTE m_btOutputStatus[MAX_PORT_NUM];
 	DWORD m_dwPortNum,m_dwInOutDir;
 	BOOL m_bNewVersion;
+	BOOL m_bFuncVer2;
 
 	DevOutputInfo currDevStatus;
 	DevCategoryInfo m_devCatInfo;
-	ULONG m_devEnableStatus;
 	ULONG m_timerID;
 	bool m_bPickUpRound,m_bVibrationRound,m_bOpenRound,m_bMoveRound,m_bCardGateRound;
 	bool m_bVibrationFlag,m_bOpenFlag,m_bMoveFlag,m_bCardGateFlag;

BIN
Module/mod_livenessdetection/mod_livenessdetection.rc


+ 0 - 93
Other/libaudiomgr/libaudiomgr.vcxproj

@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{2FC0E0C8-B017-48FE-BA58-8D5E5A4136AC}</ProjectGuid>
-    <Keyword>Win32Proj</Keyword>
-    <RootNamespace>libaudiomgr</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <Import Project="..\libmake.setting" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>true</LinkIncremental>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <LinkIncremental>false</LinkIncremental>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;LIBAUDIOMGR_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>wmcodecdspuuid.lib;dmoguids.lib;%(AdditionalDependencies)</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;LIBAUDIOMGR_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalDependencies>wmcodecdspuuid.lib;dmoguids.lib;%(AdditionalDependencies)</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClInclude Include="iaudiomgrinterface.h" />
-    <ClInclude Include="win\libaudiomgr_win.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="iaudiomgrinterface.cpp" />
-    <ClCompile Include="win\libaudiomgr_win.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <ResourceCompile Include="..\..\Version.rc" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>

+ 0 - 36
Other/win/libaudioqueue/ReadMe.txt

@@ -1,36 +0,0 @@
-========================================================================
-    动态链接库:libaudioqueue 项目概述
-========================================================================
-
-应用程序向导已为您创建了此 libaudioqueue DLL。
-
-本文件概要介绍组成 libaudioqueue 应用程序的每个文件的内容。
-
-
-libaudioqueue.vcxproj
-    这是使用应用程序向导生成的 VC++ 项目的主项目文件,
-    其中包含生成该文件的 Visual C++ 
-    的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。
-
-libaudioqueue.vcxproj.filters
-    这是使用“应用程序向导”生成的 VC++ 项目筛选器文件。 
-    它包含有关项目文件与筛选器之间的关联信息。 在 IDE 
-    中,通过这种关联,在特定节点下以分组形式显示具有相似扩展名的文件。
-    例如,“.cpp”文件与“源文件”筛选器关联。
-
-libaudioqueue.cpp
-    这是主 DLL 源文件。
-
-/////////////////////////////////////////////////////////////////////////////
-其他标准文件:
-
-StdAfx.h,StdAfx.cpp
-    这些文件用于生成名为 libaudioqueue.pch 的预编译头 (PCH) 文件和
-    名为 StdAfx.obj 的预编译类型文件。
-
-/////////////////////////////////////////////////////////////////////////////
-其他注释:
-
-应用程序向导使用“TODO:”注释来指示应添加或自定义的源代码部分。
-
-/////////////////////////////////////////////////////////////////////////////

+ 0 - 13
Other/win/libwmpplayer/res/LibWMPPlayer.rc2

@@ -1,13 +0,0 @@
-//
-// libwmpplayer.RC2 - Microsoft Visual C++ 不会直接编辑的资源
-//
-
-#ifdef APSTUDIO_INVOKED
-#error 此文件不能用 Microsoft Visual C++ 编辑
-#endif //APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-// 在此处添加手动编辑的资源...
-
-/////////////////////////////////////////////////////////////////////////////

+ 2 - 2
addin/cmake/DependencyConanFiles.cmake

@@ -109,9 +109,9 @@ else()
 			)
 		
 	if(WITH_ADDITIONAL_RES)
-		#	2.6.4.593 TFS
+		# 2.6.4.704 TFS
 		# 2.6.1.1539 SDK
-		list(APPEND CONAN_CURPLATFORM_LIB_NAMES  sogouime/2.6.1.1539@LR04.02_MediaRes/testing)
+		list(APPEND CONAN_CURPLATFORM_LIB_NAMES  sogouime/2.6.4.704@LR04.02_MediaRes/testing)
 		list(APPEND CONAN_CURPLATFORM_LIB_NAMES HYQiHeiTTF/2021.1021.01@LR04.02_MediaRes/stable)
 		if(NOT PACK_AS_DEB_PKG)
 			list(APPEND CONAN_CURPLATFORM_LIB_NAMES UOSBrowser/5.3.52-1@LR04.02_RuntimeLib/testing)

+ 1 - 1
addin/packaging/DEBIAN/postinst

@@ -1,5 +1,5 @@
 #!/bin/sh
-echo "============== post installation custom scripts start =============="
+echo "============== post installation custom scripts start: $*=============="
 curr_timestamp=`date "+%Y%m%d-%H%M%S.%3N"`
 lightdm_file=/etc/lightdm/lightdm.conf
 rvc_install_path_root="/opt"

+ 63 - 47
addin/packaging/DEBIAN/postrm

@@ -1,55 +1,71 @@
 #!/bin/sh
-echo "================= post remove custom scripts start ================="
-rm /etc/xdg/autostart/spexplorerauto.desktop > /dev/null 2>&1
-rm /usr/share/applications/spexplorerauto.desktop > /dev/null 2>&1
-rm -rf /opt/rvc > /dev/null 2>&1
-rm -rf /opt/Run > /dev/null 2>&1
-rm -rf /opt/wlog > /dev/null 2>&1
-rm Run.ini > /dev/null 2>&1
-
-rm /usr/lib/cef_100_percent.pak > /dev/null 2>&1
-rm /usr/lib/cef_200_percent.pak > /dev/null 2>&1
-rm /usr/lib/cef_extensions.pak > /dev/null 2>&1
-rm /usr/lib/cef.pak > /dev/null 2>&1
-rm /usr/lib/chrome-sandbox > /dev/null 2>&1
-rm /usr/lib/devtools_resources.pak > /dev/null 2>&1
-rm /usr/lib/icudtl.dat > /dev/null 2>&1
-rm /usr/lib/libcef.so > /dev/null 2>&1
-rm /usr/lib/libEGL.so > /dev/null 2>&1
-rm /usr/lib/libGLESv2.so > /dev/null 2>&1
-rm /usr/lib/snapshot_blob.bin > /dev/null 2>&1
-rm /usr/lib/v8_context_snapshot.bin > /dev/null 2>&1
-
-rvc_user=$USER
-if [ -z "$rvc_user" -o "$rvc_user" = "root" ]; then
-    users=$(cat /etc/passwd | awk -F: '$3>=500' | cut -f 1 -d :)
-    echo "user list: $users"
-    cnt=0
-    for var in $(echo ${users} | awk '{split($0,arr,",");for(i in arr) print arr[i]}')
-    do
-        if [ ${var} != 'nobody' -a ${var} != 'systemd-coredump' ]; then
-            cnt=$((${cnt}+1))
-            rvc_user=${var}
+echo "================= post remove custom scripts start: $*================="
+
+if [ "$1" = "remove" ]; then
+
+    rm /etc/xdg/autostart/spexplorerauto.desktop > /dev/null 2>&1
+    rm /usr/share/applications/spexplorerauto.desktop > /dev/null 2>&1
+    rm -rf /opt/rvc > /dev/null 2>&1
+    rm -rf /opt/Run > /dev/null 2>&1
+    rm -rf /opt/wlog > /dev/null 2>&1
+    rm Run.ini > /dev/null 2>&1
+
+    rm /usr/lib/cef_100_percent.pak > /dev/null 2>&1
+    rm /usr/lib/cef_200_percent.pak > /dev/null 2>&1
+    rm /usr/lib/cef_extensions.pak > /dev/null 2>&1
+    rm /usr/lib/cef.pak > /dev/null 2>&1
+    rm /usr/lib/chrome-sandbox > /dev/null 2>&1
+    rm /usr/lib/devtools_resources.pak > /dev/null 2>&1
+    rm /usr/lib/icudtl.dat > /dev/null 2>&1
+    rm /usr/lib/libcef.so > /dev/null 2>&1
+    rm /usr/lib/libEGL.so > /dev/null 2>&1
+    rm /usr/lib/libGLESv2.so > /dev/null 2>&1
+    rm /usr/lib/snapshot_blob.bin > /dev/null 2>&1
+    rm /usr/lib/v8_context_snapshot.bin > /dev/null 2>&1
+
+    rvc_user=$USER
+    if [ -z "$rvc_user" -o "$rvc_user" = "root" ]; then
+        users=$(cat /etc/passwd | awk -F: '$3>=500' | cut -f 1 -d :)
+        echo "user list: $users"
+        cnt=0
+        for var in $(echo ${users} | awk '{split($0,arr,",");for(i in arr) print arr[i]}')
+        do
+            if [ ${var} != 'nobody' -a ${var} != 'systemd-coredump' -a ${var} != 'liuwt' -a ${var} != 'deepin-anything-server' ]; then
+                cnt=$((${cnt}+1))
+                rvc_user=${var}
+            fi
+        done
+        if [ $cnt -ne 1 ]; then
+            echo "too many users: $cnt"
+            rvc_user=''
+        else
+            echo "aim user: $rvc_user"
         fi
-    done
-    if [ $cnt -ne 1 ]; then
-        echo "too many users: $cnt"
-        rvc_user=''
-    else
-        echo "aim user: $rvc_user"
     fi
-fi
-rm /home/$rvc_user/Desktop/spexplorerauto.desktop > /dev/null 2>&1
+    rm /home/$rvc_user/Desktop/spexplorerauto.desktop > /dev/null 2>&1
+
+    echo "[INFO]: set menu tool as show mode..."
+    gsettings set com.deepin.dde.dock hide-mode  keep-showing
+    echo "[INFO]: set menu tool as show mode done!"
+
+    papers_dir=/usr/share/wallpapers/deepin
+    papers_bak_dir=/usr/share/wallpapers/deepin_bak
+    if [ -d $papers_bak_dir ]; then
+        rm -rf $papers_dir/*  > /dev/null 2>&1
+        cp $papers_bak_dir/* $papers_dir
+    fi
 
-echo "[INFO]: set menu tool as show mode..."
-gsettings set com.deepin.dde.dock hide-mode  keep-showing
-echo "[INFO]: set menu tool as show mode done!"
+else
 
-papers_dir=/usr/share/wallpapers/deepin
-papers_bak_dir=/usr/share/wallpapers/deepin_bak
-if [ -d $papers_bak_dir ]; then
-    rm -rf $papers_dir/*  > /dev/null 2>&1
-    cp $papers_bak_dir/* $papers_dir
+    rm -rf /opt/rvc/dbg > /dev/null 2>&1
+    rm -rf /opt/rvc/dmp > /dev/null 2>&1
+    rm -rf /opt/rvc/slv > /dev/null 2>&1
+    rm -rf /opt/rvc/terminaldbstorage > /dev/null 2>&1
+    rm -rf /opt/rvc/Downloads > /dev/null 2>&1
+    rm -rf /opt/wlog > /dev/null 2>&1
+    rm Run.ini > /dev/null 2>&1
+    rm /opt/Run/hardwarecfg/root.ini > /dev/null 2>&1
+    rm -rf /opt/Run/runinfo > /dev/null 2>&1
 fi
 
 exit 0

+ 2 - 4
addin/packaging/DEBIAN/preinst

@@ -1,5 +1,5 @@
 #!/bin/sh
-echo "============== previous installation custom scripts start =============="
+echo "============== previous installation custom scripts start: $* =============="
 user1=$(ps -o user= -p $$ | awk '{print $1}')
 echo "user1: $user1"
 user2=$(whoami)
@@ -11,10 +11,8 @@ papers_dir=/usr/share/wallpapers/deepin
 papers_bak_dir=/usr/share/wallpapers/deepin_bak
 if [ ! -d $papers_bak_dir ]; then
     mkdir -p ${papers_bak_dir}
-else
-    rm -rf $papers_bak_dir/* > /dev/null 2>&1
+    cp $papers_dir/* $papers_bak_dir
 fi
-cp $papers_dir/* $papers_bak_dir
 rm -rf $papers_dir/* > /dev/null 2>&1
 
 exit 0

+ 1 - 1
addin/packaging/DEBIAN/prerm

@@ -1,5 +1,5 @@
 #!/bin/sh
-echo "================= pre remove custom scripts start =================="
+echo "================= pre remove custom scripts start: $* =================="
 
 if [ "$1" = "remove" ]; then
     killall -9 spshell > /dev/null 2>&1

+ 25 - 0
addin/packaging/Note.md

@@ -0,0 +1,25 @@
+preinst
+备份壁纸文件
+
+postinst
+设置免密root运行
+
+清空桌面
+设置开机自启动
+设置开始菜单应用图标和桌面应用图标
+
+更改版本内容的文件属性777
+
+去掉登录锁环
+设置工具栏隐藏
+
+
+prerm
+杀死可视柜台相关进程
+
+postrm
+移除自启动、桌面图标和菜单图标
+移除rvc文件夹
+移除系统库增加的内容 ??
+恢复壁纸备份文件
+