private void buttonGet_Click(object sender, EventArgs e) { uint dwSize = (uint)Marshal.SizeOf(m_struEventCardLinkageCond); m_struEventCardLinkageCond.dwSize = dwSize; uint.TryParse(textBoxEventNo.Text, out m_struEventCardLinkageCond.dwEventID); ushort.TryParse(textBoxLocalConID.Text, out m_struEventCardLinkageCond.wLocalControllerID); IntPtr ptrStruCond = Marshal.AllocHGlobal((int)dwSize); Marshal.StructureToPtr(m_struEventCardLinkageCond, ptrStruCond, false); IntPtr ptrDwReturned = Marshal.AllocHGlobal(4); uint dwSizeCfg = (uint)Marshal.SizeOf(m_struEventCardLinkageCfgV51); m_struEventCardLinkageCfgV51.dwSize = dwSizeCfg; IntPtr ptrStruCfg = Marshal.AllocHGlobal((int)m_struEventCardLinkageCfgV51.dwSize); Marshal.StructureToPtr(m_struEventCardLinkageCfgV51, ptrStruCfg, false); if (!CHCNetSDK.NET_DVR_GetDeviceConfig(m_lUserID, CHCNetSDK.NET_DVR_GET_EVENT_CARD_LINKAGE_CFG_V51, 1, ptrStruCond, dwSize, ptrDwReturned, ptrStruCfg, dwSizeCfg)) { g_formList.AddLog(m_iDeviceIndex, AcsDemoPublic.OPERATION_FAIL_T, "NET_DVR_GET_EVENT_CARD_LINKAGE_CFG_V51 Failed"); uint error = CHCNetSDK.NET_DVR_GetLastError(); MessageBox.Show("Get event card linkage cfg failed" + ":" + error); } else { uint dwStatus = (uint)Marshal.ReadInt32(ptrDwReturned); if (dwStatus != CHCNetSDK.NET_DVR_NOERROR) { string strTemp = null; strTemp = string.Format("NET_DVR_GET_EVENT_CARD_LINKAGE_CFG_V51 Error Status{0}", dwStatus); MessageBox.Show(strTemp); Marshal.FreeHGlobal(ptrStruCond); Marshal.FreeHGlobal(ptrStruCfg); Marshal.FreeHGlobal(ptrDwReturned); return; } //get data from unmanaged memory m_struEventCardLinkageCfgV51 = (CHCNetSDK.NET_DVR_EVENT_CARD_LINKAGE_CFG_V51)Marshal.PtrToStructure(ptrStruCfg, typeof(CHCNetSDK.NET_DVR_EVENT_CARD_LINKAGE_CFG_V51)); g_formList.AddLog(m_iDeviceIndex, AcsDemoPublic.OPERATION_SUCC_T, "NET_DVR_GET_EVENT_CARD_LINKAGE_CFG_V51 SUCC"); if (m_struEventCardLinkageCfgV51.byProMode == 1) { m_byProMode = true; checkBoxCardNoLinkage.Checked = true; checkBoxMacAddressLinkage.Checked = false; checkBoxEmployeeNoLinkage.Checked = false; } if (m_struEventCardLinkageCfgV51.byProMode == 2) { m_byMacAddr = true; checkBoxMacAddressLinkage.Checked = true; checkBoxCardNoLinkage.Checked = false; checkBoxEmployeeNoLinkage.Checked = false; } if (m_struEventCardLinkageCfgV51.byProMode == 3) { m_byEmployeeNo = true; checkBoxEmployeeNoLinkage.Checked = true; checkBoxCardNoLinkage.Checked = false; checkBoxMacAddressLinkage.Checked = false; } textBoxEventSourceID.Text = m_struEventCardLinkageCfgV51.dwEventSourceID.ToString(); checkBoxBuzzer.Checked = (m_struEventCardLinkageCfgV51.byMainDevBuzzer == 1) ? true : false; checkBoxSnapshortLinkage.Checked = (m_struEventCardLinkageCfgV51.byCapturePic == 1) ? true : false; checkBoxRecordLinkage.Checked = (m_struEventCardLinkageCfgV51.byRecordVideo == 1) ? true : false; if (m_byProMode) { textBoxCardNo.Text = System.Text.Encoding.Default.GetString(m_struEventCardLinkageCfgV51.uLinkageInfo.byRes); } if (m_byMacAddr) { textBoxMacAddress.Text = string.Format("{0:x2}:{0:x2}:{0:x2}:{0:x2}:{0:x2}:{0:x2}", m_struEventCardLinkageCfgV51.uLinkageInfo.byRes[0], m_struEventCardLinkageCfgV51.uLinkageInfo.byRes[1], m_struEventCardLinkageCfgV51.uLinkageInfo.byRes[2], m_struEventCardLinkageCfgV51.uLinkageInfo.byRes[3], m_struEventCardLinkageCfgV51.uLinkageInfo.byRes[4], m_struEventCardLinkageCfgV51.uLinkageInfo.byRes[5]); } if (m_byEmployeeNo) { textBoxEmployeeNo.Text = System.Text.Encoding.Default.GetString(m_struEventCardLinkageCfgV51.uLinkageInfo.byRes); } if (m_byProMode == false && m_byMacAddr == false && m_byEmployeeNo == false) { Int32 dwLinkageSize = Marshal.SizeOf(m_struEventCardLinkageCfgV51.uLinkageInfo); IntPtr ptrEventLink = Marshal.AllocHGlobal(dwLinkageSize); Marshal.StructureToPtr(m_struEventCardLinkageCfgV51.uLinkageInfo, ptrEventLink, false); CHCNetSDK.NET_DVR_EVENT_LINKAGE_INFO struEventLinkage = (CHCNetSDK.NET_DVR_EVENT_LINKAGE_INFO)Marshal.PtrToStructure(ptrEventLink, typeof(CHCNetSDK.NET_DVR_EVENT_LINKAGE_INFO)); Marshal.FreeHGlobal(ptrEventLink); comboBoxMajorEventType.SelectedIndex = struEventLinkage.wMainEventType; int dwMainEventType = comboBoxMajorEventType.SelectedIndex; if (dwMainEventType == 0) { SubEventTypeDev(); } else if (dwMainEventType == 1) { SubEventTypeAlarm(); } else if (dwMainEventType == 2) { SubEventTypeDoor(); } else if (dwMainEventType == 3) { SubEventTypeCardReader(); } comboBoxMinorEventType.SelectedIndex = struEventLinkage.wSubEventType; } CreateChecklistBox(); } m_byProMode = false; m_byMacAddr = false; m_byEmployeeNo = false; Marshal.FreeHGlobal(ptrStruCond); Marshal.FreeHGlobal(ptrStruCfg); Marshal.FreeHGlobal(ptrDwReturned); }
//get current ChecklistBox selected status from controls set by user private void UpdateUserData() { //card no. is preferred if (checkBoxCardNoLinkage.Checked) { m_struEventCardLinkageCfgV51.byProMode = 1; } else if (checkBoxMacAddressLinkage.Checked) { m_struEventCardLinkageCfgV51.byProMode = 2; } else if (checkBoxEmployeeNoLinkage.Checked) { m_struEventCardLinkageCfgV51.byProMode = 3; } if (!checkBoxCardNoLinkage.Checked && !checkBoxMacAddressLinkage.Checked && !checkBoxEmployeeNoLinkage.Checked) { m_struEventCardLinkageCfgV51.byProMode = 0; } uint.TryParse(textBoxEventSourceID.Text, out m_struEventCardLinkageCfgV51.dwEventSourceID); m_struEventCardLinkageCfgV51.byMainDevBuzzer = (byte)(checkBoxBuzzer.Checked ? 1 : 0); if (m_struEventCardLinkageCfgV51.byProMode == 1) { byte [] byTempCardNo = System.Text.Encoding.UTF8.GetBytes(textBoxCardNo.Text); m_struEventCardLinkageCfgV51.uLinkageInfo.byRes = new byte[CHCNetSDK.ACS_CARD_NO_LEN]; Array.Copy(byTempCardNo, m_struEventCardLinkageCfgV51.uLinkageInfo.byRes, byTempCardNo.Length); } if (m_struEventCardLinkageCfgV51.byProMode == 2) { string sTempMACAddr = textBoxMacAddress.Text; if (sTempMACAddr.Length != "1A:2B:3C:4D:5E:6F".Length) { MessageBox.Show("Mac address error!"); return; } string[] sTempMACAddrSec = new string[6]; sTempMACAddrSec[0] = sTempMACAddr.Substring(0, 2); m_struEventCardLinkageCfgV51.uLinkageInfo.byRes = new byte[CHCNetSDK.MACADDR_LEN]; byte.TryParse(sTempMACAddrSec[0], out m_struEventCardLinkageCfgV51.uLinkageInfo.byRes[0]); for (int i = 1; i < 6; i++) { sTempMACAddrSec[i] = sTempMACAddr.Substring(2 * i + 1, 2); byte.TryParse(sTempMACAddrSec[i], out m_struEventCardLinkageCfgV51.uLinkageInfo.byRes[i]); } } if (m_struEventCardLinkageCfgV51.byProMode == 3) { byte [] byTempEmployeeNo = System.Text.Encoding.UTF8.GetBytes(textBoxEmployeeNo.Text); m_struEventCardLinkageCfgV51.uLinkageInfo.byRes = new byte[CHCNetSDK.NET_SDK_EMPLOYEE_NO_LEN]; Array.Copy(byTempEmployeeNo, m_struEventCardLinkageCfgV51.uLinkageInfo.byRes, byTempEmployeeNo.Length); } if (m_struEventCardLinkageCfgV51.byProMode == 0) { Int32 dwSize = Marshal.SizeOf(m_struEventCardLinkageCfgV51.uLinkageInfo); IntPtr ptrEventLink = Marshal.AllocHGlobal(dwSize); CHCNetSDK.NET_DVR_EVENT_LINKAGE_INFO struEventLinkage = new CHCNetSDK.NET_DVR_EVENT_LINKAGE_INFO(); struEventLinkage.wMainEventType = (ushort)comboBoxMajorEventType.SelectedIndex; struEventLinkage.wSubEventType = (ushort)comboBoxMinorEventType.SelectedIndex; Marshal.StructureToPtr(struEventLinkage, ptrEventLink, false); m_struEventCardLinkageCfgV51.uLinkageInfo = (CHCNetSDK.NET_DVR_EVETN_CARD_LINKAGE_UNION)Marshal.PtrToStructure(ptrEventLink, typeof(CHCNetSDK.NET_DVR_EVETN_CARD_LINKAGE_UNION)); Marshal.FreeHGlobal(ptrEventLink); } int dwCountAlarmOut = checkedListBoxAlarmOut.Items.Count; for (int i = 0; i < dwCountAlarmOut; i++) { if (checkedListBoxAlarmOut.GetItemChecked(i)) { m_struEventCardLinkageCfgV51.byAlarmout[i] = 1; } } int dwCountOpenDoor = checkedListBoxOpenDoor.Items.Count; for (int i = 0; i < dwCountOpenDoor; i++) { if (checkedListBoxOpenDoor.GetItemChecked(i)) { m_struEventCardLinkageCfgV51.byOpenDoor[i] = 1; } } int dwCountNormalClose = checkedListBoxAlwaysCloseDoor.Items.Count; for (int i = 0; i < dwCountNormalClose; i++) { if (checkedListBoxAlwaysCloseDoor.GetItemChecked(i)) { m_struEventCardLinkageCfgV51.byNormalClose[i] = 1; } } int dwCountAlarmOutClose = checkedListBoxAlarmOutClose.Items.Count; for (int i = 0; i < dwCountAlarmOutClose; i++) { if (checkedListBoxAlarmOutClose.GetItemChecked(i)) { m_struEventCardLinkageCfgV51.byAlarmOutClose[i] = 1; } } int dwCountCloseDoor = checkedListBoxCloseDoor.Items.Count; for (int i = 0; i < dwCountCloseDoor; i++) { if (checkedListBoxCloseDoor.GetItemChecked(i)) { m_struEventCardLinkageCfgV51.byCloseDoor[i] = 1; } } int dwCountAlarmInSetup = checkedListBoxArming.Items.Count; for (int i = 0; i < dwCountAlarmInSetup; i++) { if (checkedListBoxArming.GetItemChecked(i)) { m_struEventCardLinkageCfgV51.byAlarmInSetup[i] = 1; } } int dwCountReaderBuzzer = checkedListBoxBuzzerReaderCard.Items.Count; for (int i = 0; i < dwCountReaderBuzzer; i++) { if (checkedListBoxBuzzerReaderCard.GetItemChecked(i)) { m_struEventCardLinkageCfgV51.byReaderBuzzer[i] = 1; } } int dwCountNormalOpen = checkedListBoxAlwaysOpenDoor.Items.Count; for (int i = 0; i < dwCountNormalOpen; i++) { if (checkedListBoxAlwaysOpenDoor.GetItemChecked(i)) { m_struEventCardLinkageCfgV51.byNormalOpen[i] = 1; } } int dwCountAlarmInClose = checkedListBoxDisarming.Items.Count; for (int i = 0; i < dwCountAlarmInClose; i++) { if (checkedListBoxDisarming.GetItemChecked(i)) { m_struEventCardLinkageCfgV51.byAlarmInClose[i] = 1; } } }