xiongzhu vor 5 Jahren
Ursprung
Commit
c2b6d2d1c7

+ 93 - 0
CamTool/MainWindow.xaml.cs

@@ -15,6 +15,7 @@ using log4net;
 using CamTool.utils;
 using System.Threading;
 using Newtonsoft.Json;
+using System.Windows.Interop;
 
 namespace CamTool
 {
@@ -45,6 +46,8 @@ namespace CamTool
 
         public static int m_userId;
         private CHCNetSDK.MSGCallBack m_falarmData = null;
+        private CHCNetSDK.RemoteConfigCallback g_fGetGatewayCardCallback = null;
+        private int m_lGetCardCfgHandle = -1;
 
         private enum PassDirection
         {
@@ -167,6 +170,7 @@ namespace CamTool
                         MessageBox.Show("NET_DVR_SetDVRMessageCallBack_V50 Fail");
                     }
                 }
+                GetAllCard();
 
 
                 List<string> ports = PortUtil.FindComPortNames("1A86", "7523"); //地磅
@@ -661,6 +665,95 @@ namespace CamTool
             log.Info(szInfoBuf);
         }
 
+        private void GetAllCard()
+        {
+            if (-1 != m_lGetCardCfgHandle)
+            {
+                if (CHCNetSDK.NET_DVR_StopRemoteConfig(m_lGetCardCfgHandle))
+                {
+                    m_lGetCardCfgHandle = -1;
+                }
+            }
+            CHCNetSDK.NET_DVR_CARD_CFG_COND struCond = new CHCNetSDK.NET_DVR_CARD_CFG_COND();
+            struCond.dwSize = (uint)Marshal.SizeOf(struCond);
+            struCond.wLocalControllerID = 0;
+            struCond.dwCardNum = 0xffffffff;
+            struCond.byCheckCardNo = 1;
+
+            int dwSize = Marshal.SizeOf(struCond);
+            IntPtr ptrStruCond = Marshal.AllocHGlobal(dwSize);
+            Marshal.StructureToPtr(struCond, ptrStruCond, false);
+            g_fGetGatewayCardCallback = new CHCNetSDK.RemoteConfigCallback(ProcessGetGatewayCardCallback);
+
+            m_lGetCardCfgHandle = CHCNetSDK.NET_DVR_StartRemoteConfig(m_userId, CHCNetSDK.NET_DVR_GET_CARD_CFG_V50, ptrStruCond, dwSize, g_fGetGatewayCardCallback, new WindowInteropHelper(this).Handle);
+            if (m_lGetCardCfgHandle == -1)
+            {
+                log.Info(string.Format("NET_DVR_GET_CARD_CFG_V50 FAIL, ERROR CODE {0}", CHCNetSDK.NET_DVR_GetLastError()));
+                Marshal.FreeHGlobal(ptrStruCond);
+                return;
+            }
+            else
+            {
+                log.Info("SUCC NET_DVR_GET_CARD_CFG_V50");
+            }
+            Marshal.FreeHGlobal(ptrStruCond);
+
+        }
+
+        private void ProcessGetGatewayCardCallback(uint dwType, IntPtr lpBuffer, uint dwBufLen, IntPtr pUserData)
+        {
+            if (pUserData == null)
+            {
+                return;
+            }
+
+            if (dwType == (uint)CHCNetSDK.NET_SDK_CALLBACK_TYPE.NET_SDK_CALLBACK_TYPE_DATA)
+            {
+                CHCNetSDK.NET_DVR_CARD_CFG_V50 struCardCfg = new CHCNetSDK.NET_DVR_CARD_CFG_V50();
+                struCardCfg = (CHCNetSDK.NET_DVR_CARD_CFG_V50)Marshal.PtrToStructure(lpBuffer, typeof(CHCNetSDK.NET_DVR_CARD_CFG_V50));
+                string strCardNo = System.Text.Encoding.UTF8.GetString(struCardCfg.byCardNo);
+                IntPtr pCardInfo = Marshal.AllocHGlobal(Marshal.SizeOf(struCardCfg));
+                Marshal.StructureToPtr(struCardCfg, pCardInfo, true);
+                CHCNetSDK.PostMessage(pUserData, 1003, (Int64)pCardInfo, 0);
+
+                string cardNo = Encoding.UTF8.GetString(struCardCfg.byCardNo);
+                string isValid = 1 == struCardCfg.byCardValid ? "YES" : "NO";
+                string cardPasswod = Encoding.UTF8.GetString(struCardCfg.byCardPassword);
+                string cardType = (struCardCfg.byCardType == 0 || struCardCfg.byCardType > 7) ?
+                    AcsDemoPublic.strCardType[0] : AcsDemoPublic.strCardType[struCardCfg.byCardType];
+                string leaderCard = 1 == struCardCfg.byLeaderCard ? "YES" : "NO";
+                string name = Encoding.Default.GetString(struCardCfg.byName);
+
+            }
+            else if (dwType == (uint)CHCNetSDK.NET_SDK_CALLBACK_TYPE.NET_SDK_CALLBACK_TYPE_STATUS)
+            {
+                uint dwStatus = (uint)Marshal.ReadInt32(lpBuffer);
+                if (dwStatus == (uint)CHCNetSDK.NET_SDK_CALLBACK_STATUS_NORMAL.NET_SDK_CALLBACK_STATUS_SUCCESS)
+                {
+                    log.Info("NET_DVR_GET_CARD_CFG_V50 Get finish");
+                    CHCNetSDK.PostMessage(pUserData, 1002, 0, 0);
+                }
+                else if (dwStatus == (uint)CHCNetSDK.NET_SDK_CALLBACK_STATUS_NORMAL.NET_SDK_CALLBACK_STATUS_FAILED)
+                {
+                    byte[] bRawData = new byte[40];//4字节状态 + 4字节错误码 + 32字节卡号
+                    Marshal.Copy(lpBuffer, bRawData, 0, 40);//将非托管内存指针数据复制到数组中
+
+                    byte[] errorb = new byte[4];//4字节错误码
+                    Array.Copy(bRawData, 4, errorb, 0, 4);
+                    int errorCode = BitConverter.ToInt32(errorb, 0);
+
+                    byte[] byCardNo = new byte[32];//32字节卡号
+                    Array.Copy(bRawData, 8, byCardNo, 0, 32);
+                    string strCardNo = Encoding.ASCII.GetString(byCardNo).TrimEnd('\0');
+
+                    log.Info(string.Format("NET_DVR_GET_CARD_CFG_V50 Get Failed,ErrorCode:{0},CardNo:{1}", errorCode, byCardNo));
+                    CHCNetSDK.PostMessage(pUserData, 1002, 0, 0);
+                }
+            }
+            return;
+        }
+
+       
 
     }
 

BIN
CamTool/bin/x86/Debug/CamTool.exe


BIN
CamTool/bin/x86/Debug/CamTool.pdb


BIN
CamTool/obj/x86/Debug/CamTool.csprojAssemblyReference.cache


BIN
CamTool/obj/x86/Debug/CamTool.exe


BIN
CamTool/obj/x86/Debug/CamTool.pdb