using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
namespace AlarmCSharpDemo
public partial class AlarmDemo : Form
private Int32 m_lUserID = -1;
private Int32[] m_lAlarmHandle = new Int32[200];
private Int32 iListenHandle = -1;
private int iDeviceNumber = 0;
private uint iLastErr = 0;
private CHCNetSDK.MSGCallBack_V31 m_falarmData_V31 = null;
private CHCNetSDK.MSGCallBack m_falarmData = null;
public delegate void UpdateListBoxCallback(string strAlarmTime, string strDevIP, string strAlarmMsg);
CHCNetSDK.NET_VCA_TRAVERSE_PLANE m_struTraversePlane = new CHCNetSDK.NET_VCA_TRAVERSE_PLANE();
CHCNetSDK.NET_VCA_AREA m_struVcaArea = new CHCNetSDK.NET_VCA_AREA();
CHCNetSDK.NET_VCA_INTRUSION m_struIntrusion = new CHCNetSDK.NET_VCA_INTRUSION();
CHCNetSDK.UNION_STATFRAME m_struStatFrame = new CHCNetSDK.UNION_STATFRAME();
CHCNetSDK.UNION_STATTIME m_struStatTime = new CHCNetSDK.UNION_STATTIME();
bool m_bInitSDK = CHCNetSDK.NET_DVR_Init();
MessageBox.Show("NET_DVR_Init error!");
byte[] strIP = new byte[16 * 16];
Boolean bEnableBind=false;
if (CHCNetSDK.NET_DVR_GetLocalIP(strIP, ref dwValidNum, ref bEnableBind))
textBoxListenIP.Text = System.Text.Encoding.UTF8.GetString(strIP, 0, 16);
CHCNetSDK.NET_DVR_SetValidIP(0,true);
CHCNetSDK.NET_DVR_SetLogToFile(3, "C:\\SdkLog\\", true);
for (int i = 0; i < 200; i++)
if (m_falarmData_V31 == null)
m_falarmData_V31 = new CHCNetSDK.MSGCallBack_V31(MsgCallback_V31);
CHCNetSDK.NET_DVR_SetDVRMessageCallBack_V31(m_falarmData_V31, IntPtr.Zero);
public bool MsgCallback_V31(int lCommand, ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser)
AlarmMessageHandle(lCommand, ref pAlarmer, pAlarmInfo, dwBufLen, pUser);
public void MsgCallback(int lCommand, ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser)
AlarmMessageHandle(lCommand, ref pAlarmer, pAlarmInfo, dwBufLen, pUser);
public void AlarmMessageHandle(int lCommand, ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser)
case CHCNetSDK.COMM_ALARM:
ProcessCommAlarm(ref pAlarmer, pAlarmInfo, dwBufLen, pUser);
case CHCNetSDK.COMM_ALARM_V30:
ProcessCommAlarm_V30(ref pAlarmer, pAlarmInfo, dwBufLen, pUser);
case CHCNetSDK.COMM_ALARM_RULE:
ProcessCommAlarm_RULE(ref pAlarmer, pAlarmInfo, dwBufLen, pUser);
case CHCNetSDK.COMM_UPLOAD_PLATE_RESULT:
ProcessCommAlarm_Plate(ref pAlarmer, pAlarmInfo, dwBufLen, pUser);
case CHCNetSDK.COMM_ITS_PLATE_RESULT:
ProcessCommAlarm_ITSPlate(ref pAlarmer, pAlarmInfo, dwBufLen, pUser);
case CHCNetSDK.COMM_ALARM_PDC:
ProcessCommAlarm_PDC(ref pAlarmer, pAlarmInfo, dwBufLen, pUser);
case CHCNetSDK.COMM_ITS_PARK_VEHICLE:
ProcessCommAlarm_PARK(ref pAlarmer, pAlarmInfo, dwBufLen, pUser);
case CHCNetSDK.COMM_DIAGNOSIS_UPLOAD:
ProcessCommAlarm_VQD(ref pAlarmer, pAlarmInfo, dwBufLen, pUser);
case CHCNetSDK.COMM_UPLOAD_FACESNAP_RESULT:
ProcessCommAlarm_FaceSnap(ref pAlarmer, pAlarmInfo, dwBufLen, pUser);
case CHCNetSDK.COMM_SNAP_MATCH_ALARM:
ProcessCommAlarm_FaceMatch(ref pAlarmer, pAlarmInfo, dwBufLen, pUser);
case CHCNetSDK.COMM_ALARM_FACE_DETECTION:
ProcessCommAlarm_FaceDetect(ref pAlarmer, pAlarmInfo, dwBufLen, pUser);
case CHCNetSDK.COMM_ALARMHOST_CID_ALARM:
ProcessCommAlarm_CIDAlarm(ref pAlarmer, pAlarmInfo, dwBufLen, pUser);
case CHCNetSDK.COMM_ALARM_ACS:
ProcessCommAlarm_AcsAlarm(ref pAlarmer, pAlarmInfo, dwBufLen, pUser);
case CHCNetSDK.COMM_ID_INFO_ALARM:
ProcessCommAlarm_IDInfoAlarm(ref pAlarmer, pAlarmInfo, dwBufLen, pUser);
string strIP = pAlarmer.sDeviceIP;
string stringAlarm = "upload alarm,alarm message type:" + lCommand;
object[] paras = new object[3];
paras[0] = DateTime.Now.ToString();
listViewAlarmInfo.BeginInvoke(new UpdateListBoxCallback(UpdateClientList), paras);
UpdateClientList(DateTime.Now.ToString(), strIP, stringAlarm);
public void ProcessCommAlarm(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser)
CHCNetSDK.NET_DVR_ALARMINFO struAlarmInfo = new CHCNetSDK.NET_DVR_ALARMINFO();
struAlarmInfo = (CHCNetSDK.NET_DVR_ALARMINFO)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_ALARMINFO));
string strIP = pAlarmer.sDeviceIP;
switch (struAlarmInfo.dwAlarmType)
stringAlarm = "IO alarm, alarm input number:" + struAlarmInfo.dwAlarmInputNumber + ",triggered recording channel:";
for (i = 0; i < CHCNetSDK.MAX_CHANNUM; i++)
if (struAlarmInfo.dwAlarmRelateChannel[i] == 1)
stringAlarm += (i + 1) + " \\ ";
stringAlarm = "HDD full,alarm disk number:";
for (i = 0; i < CHCNetSDK.MAX_DISKNUM; i++)
if (struAlarmInfo.dwDiskNumber[i] == 1)
stringAlarm += (i + 1) + " \\ ";
stringAlarm = "video loss,alarm channel number:";
for (i = 0; i < CHCNetSDK.MAX_CHANNUM; i++)
if (struAlarmInfo.dwChannel[i] == 1)
stringAlarm += (i + 1) + " \\ ";
stringAlarm = "motion detection,alarm channel number:";
for (i = 0; i < CHCNetSDK.MAX_CHANNUM; i++)
if (struAlarmInfo.dwChannel[i] == 1)
stringAlarm += (i + 1) + " \\ ";
stringAlarm = "HDD unformatted, alarm disk number:";
for (i = 0; i < CHCNetSDK.MAX_DISKNUM; i++)
if (struAlarmInfo.dwDiskNumber[i] == 1)
stringAlarm += (i + 1) + " \\ ";
stringAlarm = "Read or Write HDD error,alarm disk number:";
for (i = 0; i < CHCNetSDK.MAX_DISKNUM; i++)
if (struAlarmInfo.dwDiskNumber[i] == 1)
stringAlarm += (i + 1) + " \\ ";
stringAlarm = "Tampering alarm,alarm channel:";
for (i = 0; i < CHCNetSDK.MAX_CHANNUM; i++)
if (struAlarmInfo.dwChannel[i] == 1)
stringAlarm += (i + 1) + " \\ ";
stringAlarm = "Input or Output video standard mismatch,alarm channel:";
for (i = 0; i < CHCNetSDK.MAX_CHANNUM; i++)
if (struAlarmInfo.dwChannel[i] == 1)
stringAlarm += (i + 1) + " \\ ";
stringAlarm = "illegal access";
stringAlarm = "other unknown alarm info";
object[] paras = new object[3];
paras[0] = DateTime.Now.ToString();
listViewAlarmInfo.BeginInvoke(new UpdateListBoxCallback(UpdateClientList), paras);
UpdateClientList(DateTime.Now.ToString(),strIP, stringAlarm);
private void ProcessCommAlarm_V30(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser)
CHCNetSDK.NET_DVR_ALARMINFO_V30 struAlarmInfoV30 = new CHCNetSDK.NET_DVR_ALARMINFO_V30();
struAlarmInfoV30 = (CHCNetSDK.NET_DVR_ALARMINFO_V30)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_ALARMINFO_V30));
string strIP = pAlarmer.sDeviceIP;
switch (struAlarmInfoV30.dwAlarmType)
stringAlarm = "IO alarm,alarm input number:" + struAlarmInfoV30.dwAlarmInputNumber + ",triggered recording channel:";
for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++)
if (struAlarmInfoV30.byAlarmRelateChannel[i] == 1)
stringAlarm += (i + 1) + "\\";
stringAlarm = "HDD full,alarm disk number:";
for (i = 0; i < CHCNetSDK.MAX_DISKNUM_V30; i++)
if (struAlarmInfoV30.byDiskNumber[i] == 1)
stringAlarm += (i + 1) + " ";
stringAlarm = "Video loss,alarm channel:";
for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++)
if (struAlarmInfoV30.byChannel[i] == 1)
stringAlarm += (i + 1) + " \\ ";
stringAlarm = "Motion detection,alarm channel:";
for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++)
if (struAlarmInfoV30.byChannel[i] == 1)
stringAlarm += (i + 1) + " \\ ";
stringAlarm = "HDD unformatted, alarm disk number:";
for (i = 0; i < CHCNetSDK.MAX_DISKNUM_V30; i++)
if (struAlarmInfoV30.byDiskNumber[i] == 1)
stringAlarm += (i + 1) + " \\ ";
stringAlarm = "Read or Write HDD error,alarm disk number:";
for (i = 0; i < CHCNetSDK.MAX_DISKNUM_V30; i++)
if (struAlarmInfoV30.byDiskNumber[i] == 1)
stringAlarm += (i + 1) + " \\ ";
stringAlarm = "Tampering alarm,alarm channel:";
for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++)
if (struAlarmInfoV30.byChannel[i] == 1)
stringAlarm += (i + 1) + " \\ ";
stringAlarm = "Input or Output video standard mismatch,alarm channel:";
for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++)
if (struAlarmInfoV30.byChannel[i] == 1)
stringAlarm += (i + 1) + " \\ ";
stringAlarm = "illegal access";
stringAlarm = "Video siganl exception, alarm channel:";
for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++)
if (struAlarmInfoV30.byChannel[i] == 1)
stringAlarm += (i + 1) + " \\ ";
stringAlarm = "recording/capture is abnormal,alarm channel:";
for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++)
if (struAlarmInfoV30.byChannel[i] == 1)
stringAlarm += (i + 1) + " \\ ";
stringAlarm = "Intelligent scene changed,alarm channel:";
for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++)
if (struAlarmInfoV30.byChannel[i] == 1)
stringAlarm += (i + 1) + " \\ ";
stringAlarm = "RAID is abnormal";
stringAlarm = "recording resolution does not match with which of front-end camera,alarm channel:";
for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++)
if (struAlarmInfoV30.byChannel[i] == 1)
stringAlarm += (i + 1) + " \\ ";
stringAlarm = "VCA,alarm channel:";
for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++)
if (struAlarmInfoV30.byChannel[i] == 1)
stringAlarm += (i + 1) + " \\ ";
stringAlarm = "other unknown alarm info";
object[] paras = new object[3];
paras[0] = DateTime.Now.ToString();
listViewAlarmInfo.BeginInvoke(new UpdateListBoxCallback(UpdateClientList), paras);
UpdateClientList(DateTime.Now.ToString(), strIP, stringAlarm);
private void ProcessCommAlarm_RULE(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser)
CHCNetSDK.NET_VCA_RULE_ALARM struRuleAlarmInfo = new CHCNetSDK.NET_VCA_RULE_ALARM();
struRuleAlarmInfo = (CHCNetSDK.NET_VCA_RULE_ALARM)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_VCA_RULE_ALARM));
uint dwSize = (uint)Marshal.SizeOf(struRuleAlarmInfo.struRuleInfo.uEventParam);
switch (struRuleAlarmInfo.struRuleInfo.wEventTypeEx)
case (ushort)CHCNetSDK.VCA_RULE_EVENT_TYPE_EX.ENUM_VCA_EVENT_TRAVERSE_PLANE:
IntPtr ptrTraverseInfo = Marshal.AllocHGlobal((Int32)dwSize);
Marshal.StructureToPtr(struRuleAlarmInfo.struRuleInfo.uEventParam, ptrTraverseInfo, false);
m_struTraversePlane = (CHCNetSDK.NET_VCA_TRAVERSE_PLANE)Marshal.PtrToStructure(ptrTraverseInfo, typeof(CHCNetSDK.NET_VCA_TRAVERSE_PLANE));
stringAlarm = "Line crossing,Object ID:" + struRuleAlarmInfo.struTargetInfo.dwID;
case (ushort)CHCNetSDK.VCA_RULE_EVENT_TYPE_EX.ENUM_VCA_EVENT_ENTER_AREA:
IntPtr ptrEnterInfo = Marshal.AllocHGlobal((Int32)dwSize);
Marshal.StructureToPtr(struRuleAlarmInfo.struRuleInfo.uEventParam, ptrEnterInfo, false);
m_struVcaArea = (CHCNetSDK.NET_VCA_AREA)Marshal.PtrToStructure(ptrEnterInfo, typeof(CHCNetSDK.NET_VCA_AREA));
stringAlarm = "Target entering area,Object ID:" + struRuleAlarmInfo.struTargetInfo.dwID;
case (ushort)CHCNetSDK.VCA_RULE_EVENT_TYPE_EX.ENUM_VCA_EVENT_EXIT_AREA:
IntPtr ptrExitInfo = Marshal.AllocHGlobal((Int32)dwSize);
Marshal.StructureToPtr(struRuleAlarmInfo.struRuleInfo.uEventParam, ptrExitInfo, false);
m_struVcaArea = (CHCNetSDK.NET_VCA_AREA)Marshal.PtrToStructure(ptrExitInfo, typeof(CHCNetSDK.NET_VCA_AREA));
stringAlarm = "Target leaving area,Object ID:" + struRuleAlarmInfo.struTargetInfo.dwID;
case (ushort)CHCNetSDK.VCA_RULE_EVENT_TYPE_EX.ENUM_VCA_EVENT_INTRUSION:
IntPtr ptrIntrusionInfo = Marshal.AllocHGlobal((Int32)dwSize);
Marshal.StructureToPtr(struRuleAlarmInfo.struRuleInfo.uEventParam, ptrIntrusionInfo, false);
m_struIntrusion = (CHCNetSDK.NET_VCA_INTRUSION)Marshal.PtrToStructure(ptrIntrusionInfo, typeof(CHCNetSDK.NET_VCA_INTRUSION));
for (i = 0; i < m_struIntrusion.struRegion.dwPointNum; i++)
strRegion = strRegion + "(" + m_struIntrusion.struRegion.struPos[i].fX + "," + m_struIntrusion.struRegion.struPos[i].fY + ")";
stringAlarm = "Intrusion detection,Object ID:" + struRuleAlarmInfo.struTargetInfo.dwID + ",Region range:" + strRegion;
stringAlarm = "other behaviour analysis alarm,Object ID:" + struRuleAlarmInfo.struTargetInfo.dwID;
if (struRuleAlarmInfo.dwPicDataLen > 0)
FileStream fs = new FileStream("Behaviour analysis alarm capture.jpg", FileMode.Create);
int iLen = (int)struRuleAlarmInfo.dwPicDataLen;
byte[] by = new byte[iLen];
Marshal.Copy(struRuleAlarmInfo.pImage, by, 0, iLen);
string strTimeYear = ((struRuleAlarmInfo.dwAbsTime >> 26) + 2000).ToString();
string strTimeMonth = ((struRuleAlarmInfo.dwAbsTime >> 22) & 15).ToString("d2");
string strTimeDay = ((struRuleAlarmInfo.dwAbsTime >> 17) & 31).ToString("d2");
string strTimeHour = ((struRuleAlarmInfo.dwAbsTime >> 12) & 31).ToString("d2");
string strTimeMinute = ((struRuleAlarmInfo.dwAbsTime >> 6) & 63).ToString("d2");
string strTimeSecond = ((struRuleAlarmInfo.dwAbsTime >> 0) & 63).ToString("d2");
string strTime = strTimeYear + "-" + strTimeMonth + "-" + strTimeDay + " " + strTimeHour + ":" + strTimeMinute + ":" + strTimeSecond;
string strIP = struRuleAlarmInfo.struDevInfo.struDevIP.sIpV4;
object[] paras = new object[3];
listViewAlarmInfo.BeginInvoke(new UpdateListBoxCallback(UpdateClientList), paras);
UpdateClientList(strTime, strIP, stringAlarm);
private void ProcessCommAlarm_Plate(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser)
CHCNetSDK.NET_DVR_PLATE_RESULT struPlateResultInfo = new CHCNetSDK.NET_DVR_PLATE_RESULT();
uint dwSize = (uint)Marshal.SizeOf(struPlateResultInfo);
struPlateResultInfo = (CHCNetSDK.NET_DVR_PLATE_RESULT)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_PLATE_RESULT));
if (struPlateResultInfo.byResultType == 1 && struPlateResultInfo.dwPicLen != 0)
str = "Plate_UserID_" + pAlarmer.lUserID + "_close-range picture.jpg";
FileStream fs = new FileStream(str, FileMode.Create);
int iLen = (int)struPlateResultInfo.dwPicLen;
byte[] by = new byte[iLen];
Marshal.Copy(struPlateResultInfo.pBuffer1, by, 0, iLen);
if (struPlateResultInfo.dwPicPlateLen != 0)
str = "Plate_UserID_" + pAlarmer.lUserID + "_license plate picture.jpg";
FileStream fs = new FileStream(str, FileMode.Create);
int iLen = (int)struPlateResultInfo.dwPicPlateLen;
byte[] by = new byte[iLen];
Marshal.Copy(struPlateResultInfo.pBuffer2, by, 0, iLen);
if (struPlateResultInfo.dwFarCarPicLen != 0)
str = "Plate_UserID_" + pAlarmer.lUserID + "_far-range picture.jpg";
FileStream fs = new FileStream(str, FileMode.Create);
int iLen = (int)struPlateResultInfo.dwFarCarPicLen;
byte[] by = new byte[iLen];
Marshal.Copy(struPlateResultInfo.pBuffer5, by, 0, iLen);
string strIP = pAlarmer.sDeviceIP;
string strTimeYear = System.Text.Encoding.UTF8.GetString(struPlateResultInfo.byAbsTime);
string stringPlateLicense = System.Text.Encoding.GetEncoding("GBK").GetString(struPlateResultInfo.struPlateInfo.sLicense).TrimEnd('\0');
string stringAlarm = "capture upload," + "license plate:" + stringPlateLicense + ",Serial number of vehicle:" + struPlateResultInfo.struVehicleInfo.dwIndex;
object[] paras = new object[3];
listViewAlarmInfo.BeginInvoke(new UpdateListBoxCallback(UpdateClientList), paras);
UpdateClientList(DateTime.Now.ToString(), strIP, stringAlarm);
private void ProcessCommAlarm_ITSPlate(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser)
CHCNetSDK.NET_ITS_PLATE_RESULT struITSPlateResult = new CHCNetSDK.NET_ITS_PLATE_RESULT();
uint dwSize = (uint)Marshal.SizeOf(struITSPlateResult);
struITSPlateResult = (CHCNetSDK.NET_ITS_PLATE_RESULT)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_ITS_PLATE_RESULT));
for (int i = 0; i < struITSPlateResult.dwPicNum; i++)
if (struITSPlateResult.struPicInfo[i].dwDataLen != 0)
string str = "ITS_UserID_[" + pAlarmer.lUserID + "]_Pictype_" + struITSPlateResult.struPicInfo[i].byType + "_Num" + (i + 1) + ".jpg";
FileStream fs = new FileStream(str, FileMode.Create);
int iLen = (int)struITSPlateResult.struPicInfo[i].dwDataLen;
byte[] by = new byte[iLen];
Marshal.Copy(struITSPlateResult.struPicInfo[i].pBuffer, by, 0, iLen);
string strIP = pAlarmer.sDeviceIP;
string strTimeYear = string.Format("{0:D4}", struITSPlateResult.struSnapFirstPicTime.wYear) +
string.Format("{0:D2}", struITSPlateResult.struSnapFirstPicTime.byMonth) +
string.Format("{0:D2}", struITSPlateResult.struSnapFirstPicTime.byDay) + " "
+ string.Format("{0:D2}", struITSPlateResult.struSnapFirstPicTime.byHour) + ":"
+ string.Format("{0:D2}", struITSPlateResult.struSnapFirstPicTime.byMinute) + ":"
+ string.Format("{0:D2}", struITSPlateResult.struSnapFirstPicTime.bySecond) + ":"
+ string.Format("{0:D3}", struITSPlateResult.struSnapFirstPicTime.wMilliSec);
string stringPlateLicense = System.Text.Encoding.GetEncoding("GBK").GetString(struITSPlateResult.struPlateInfo.sLicense).TrimEnd('\0');
string stringAlarm = "capture upload," + "license plate:" + stringPlateLicense + ",Serial number of vehicle:" + struITSPlateResult.struVehicleInfo.dwIndex;
object[] paras = new object[3];
listViewAlarmInfo.BeginInvoke(new UpdateListBoxCallback(UpdateClientList), paras);
UpdateClientList(DateTime.Now.ToString(), strIP, stringAlarm);
private void ProcessCommAlarm_PDC(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser)
CHCNetSDK.NET_DVR_PDC_ALRAM_INFO struPDCInfo = new CHCNetSDK.NET_DVR_PDC_ALRAM_INFO();
uint dwSize = (uint)Marshal.SizeOf(struPDCInfo);
struPDCInfo = (CHCNetSDK.NET_DVR_PDC_ALRAM_INFO)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_PDC_ALRAM_INFO));
string stringAlarm = "People counting statistics,Enter number:" + struPDCInfo.dwEnterNum + ",Exit number:" + struPDCInfo.dwLeaveNum;
uint dwUnionSize = (uint)Marshal.SizeOf(struPDCInfo.uStatModeParam);
IntPtr ptrPDCUnion = Marshal.AllocHGlobal((Int32)dwUnionSize);
Marshal.StructureToPtr(struPDCInfo.uStatModeParam, ptrPDCUnion, false);
if (struPDCInfo.byMode == 0)
m_struStatFrame = (CHCNetSDK.UNION_STATFRAME)Marshal.PtrToStructure(ptrPDCUnion, typeof(CHCNetSDK.UNION_STATFRAME));
stringAlarm = stringAlarm + ",single frame statistics,Counting relative time mark:" + m_struStatFrame.dwRelativeTime + ",Counting absolute time mark:" + m_struStatFrame.dwAbsTime;
if (struPDCInfo.byMode == 1)
m_struStatTime = (CHCNetSDK.UNION_STATTIME)Marshal.PtrToStructure(ptrPDCUnion, typeof(CHCNetSDK.UNION_STATTIME));
string strStartTime = string.Format("{0:D4}", m_struStatTime.tmStart.dwYear) +
string.Format("{0:D2}", m_struStatTime.tmStart.dwMonth) +
string.Format("{0:D2}", m_struStatTime.tmStart.dwDay) + " "
+ string.Format("{0:D2}", m_struStatTime.tmStart.dwHour) + ":"
+ string.Format("{0:D2}", m_struStatTime.tmStart.dwMinute) + ":"
+ string.Format("{0:D2}", m_struStatTime.tmStart.dwSecond);
string strEndTime = string.Format("{0:D4}", m_struStatTime.tmEnd.dwYear) +
string.Format("{0:D2}", m_struStatTime.tmEnd.dwMonth) +
string.Format("{0:D2}", m_struStatTime.tmEnd.dwDay) + " "
+ string.Format("{0:D2}", m_struStatTime.tmEnd.dwHour) + ":"
+ string.Format("{0:D2}", m_struStatTime.tmEnd.dwMinute) + ":"
+ string.Format("{0:D2}", m_struStatTime.tmEnd.dwSecond);
stringAlarm = stringAlarm + ",minimum period statistics,start time:" + strStartTime + ",end time:" + strEndTime;
Marshal.FreeHGlobal(ptrPDCUnion);
string strIP = pAlarmer.sDeviceIP;
object[] paras = new object[3];
paras[0] = DateTime.Now.ToString();
listViewAlarmInfo.BeginInvoke(new UpdateListBoxCallback(UpdateClientList), paras);
UpdateClientList(DateTime.Now.ToString(), strIP, stringAlarm);
private void ProcessCommAlarm_PARK(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser)
CHCNetSDK.NET_ITS_PARK_VEHICLE struParkInfo = new CHCNetSDK.NET_ITS_PARK_VEHICLE();
uint dwSize = (uint)Marshal.SizeOf(struParkInfo);
struParkInfo = (CHCNetSDK.NET_ITS_PARK_VEHICLE)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_ITS_PARK_VEHICLE));
string strIP = pAlarmer.sDeviceIP;
for (int i = 0; i < struParkInfo.dwPicNum; i++)
if ((struParkInfo.struPicInfo[i].dwDataLen != 0) && (struParkInfo.struPicInfo[i].pBuffer != IntPtr.Zero))
string str = "Device_Park_[" + strIP + "]_lUerID_[" + pAlarmer.lUserID + "]_Pictype_" + struParkInfo.struPicInfo[i].byType + "_Num" + (i + 1) + ".jpg";
FileStream fs = new FileStream(str, FileMode.Create);
int iLen = (int)struParkInfo.struPicInfo[i].dwDataLen;
byte[] by = new byte[iLen];
Marshal.Copy(struParkInfo.struPicInfo[i].pBuffer, by, 0, iLen);
string stringAlarm = "Parking data upload,Parking exception:" + struParkInfo.byParkError + ",Parking space No.:" + struParkInfo.byParkingNo +
", Parking space status:" + struParkInfo.byLocationStatus + ",License plate number:" +
System.Text.Encoding.GetEncoding("GBK").GetString(struParkInfo.struPlateInfo.sLicense).TrimEnd('\0');
object[] paras = new object[3];
paras[0] = DateTime.Now.ToString();
listViewAlarmInfo.BeginInvoke(new UpdateListBoxCallback(UpdateClientList), paras);
UpdateClientList(DateTime.Now.ToString(), strIP, stringAlarm);
private void ProcessCommAlarm_VQD(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser)
CHCNetSDK.NET_DVR_DIAGNOSIS_UPLOAD struVQDInfo = new CHCNetSDK.NET_DVR_DIAGNOSIS_UPLOAD();
uint dwSize = (uint)Marshal.SizeOf(struVQDInfo);
struVQDInfo = (CHCNetSDK.NET_DVR_DIAGNOSIS_UPLOAD)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_DIAGNOSIS_UPLOAD));
string strIP = pAlarmer.sDeviceIP;
string strCheckTime = string.Format("{0:D4}", struVQDInfo.struCheckTime.dwYear) +
string.Format("{0:D2}", struVQDInfo.struCheckTime.dwMonth) +
string.Format("{0:D2}", struVQDInfo.struCheckTime.dwDay) + " "
+ string.Format("{0:D2}", struVQDInfo.struCheckTime.dwHour) + ":"
+ string.Format("{0:D2}", struVQDInfo.struCheckTime.dwMinute) + ":"
+ string.Format("{0:D2}", struVQDInfo.struCheckTime.dwSecond);
string stringAlarm = "VQD result,stream ID:" + struVQDInfo.sStreamID + ",Monitor IP:" + struVQDInfo.sMonitorIP + ",Monitor channel number:" + struVQDInfo.dwChanIndex +
",checking time:" + strCheckTime + ",byResult:" + struVQDInfo.byResult + ",bySignalResult:" + struVQDInfo.bySignalResult + ",byBlurResult:" + struVQDInfo.byBlurResult;
object[] paras = new object[3];
paras[0] = DateTime.Now.ToString();
listViewAlarmInfo.BeginInvoke(new UpdateListBoxCallback(UpdateClientList), paras);
UpdateClientList(DateTime.Now.ToString(), strIP, stringAlarm);
private void ProcessCommAlarm_FaceSnap(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser)
CHCNetSDK.NET_VCA_FACESNAP_RESULT struFaceSnapInfo = new CHCNetSDK.NET_VCA_FACESNAP_RESULT();
uint dwSize = (uint)Marshal.SizeOf(struFaceSnapInfo);
struFaceSnapInfo = (CHCNetSDK.NET_VCA_FACESNAP_RESULT)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_VCA_FACESNAP_RESULT));
string strIP = pAlarmer.sDeviceIP;
if ((struFaceSnapInfo.dwBackgroundPicLen != 0) && (struFaceSnapInfo.pBuffer2 != IntPtr.Zero))
string str = "Device_FaceSnap_CapPic_[" + strIP + "]_lUerID_[" + pAlarmer.lUserID + "]" + ".jpg";
FileStream fs = new FileStream(str, FileMode.Create);
int iLen = (int)struFaceSnapInfo.dwBackgroundPicLen;
byte[] by = new byte[iLen];
Marshal.Copy(struFaceSnapInfo.pBuffer2, by, 0, iLen);
string strTimeYear = ((struFaceSnapInfo.dwAbsTime >> 26) + 2000).ToString();
string strTimeMonth = ((struFaceSnapInfo.dwAbsTime >> 22) & 15).ToString("d2");
string strTimeDay = ((struFaceSnapInfo.dwAbsTime >> 17) & 31).ToString("d2");
string strTimeHour = ((struFaceSnapInfo.dwAbsTime >> 12) & 31).ToString("d2");
string strTimeMinute = ((struFaceSnapInfo.dwAbsTime >> 6) & 63).ToString("d2");
string strTimeSecond = ((struFaceSnapInfo.dwAbsTime >> 0) & 63).ToString("d2");
string strTime = strTimeYear + "-" + strTimeMonth + "-" + strTimeDay + " " + strTimeHour + ":" + strTimeMinute + ":" + strTimeSecond;
string stringAlarm = "Face capture result,Front-end Device:" + struFaceSnapInfo.struDevInfo.struDevIP.sIpV4 + ",Alarm time:" + strTime;
object[] paras = new object[3];
paras[0] = DateTime.Now.ToString();
listViewAlarmInfo.BeginInvoke(new UpdateListBoxCallback(UpdateClientList), paras);
UpdateClientList(DateTime.Now.ToString(), strIP, stringAlarm);
private void ProcessCommAlarm_FaceMatch(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser)
CHCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM struFaceMatchAlarm = new CHCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM();
uint dwSize = (uint)Marshal.SizeOf(struFaceMatchAlarm);
struFaceMatchAlarm = (CHCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM));
string strIP = pAlarmer.sDeviceIP;
if ((struFaceMatchAlarm.struSnapInfo.dwSnapFacePicLen != 0) && (struFaceMatchAlarm.struSnapInfo.pBuffer1 != IntPtr.Zero))
string str = "Device_FaceMatch_FacePic_[" + strIP + "]_lUerID_[" + pAlarmer.lUserID + "]" + ".jpg";
FileStream fs = new FileStream(str, FileMode.Create);
int iLen = (int)struFaceMatchAlarm.struSnapInfo.dwSnapFacePicLen;
byte[] by = new byte[iLen];
Marshal.Copy(struFaceMatchAlarm.struSnapInfo.pBuffer1, by, 0, iLen);
if ((struFaceMatchAlarm.struBlackListInfo.dwBlackListPicLen != 0) && (struFaceMatchAlarm.struBlackListInfo.pBuffer1 != IntPtr.Zero))
string str = "Device_FaceMatch_BlackListPic_[" + strIP + "]_lUerID_[" + pAlarmer.lUserID + "]" + "_fSimilarity[" + struFaceMatchAlarm.fSimilarity + "].jpg";
FileStream fs = new FileStream(str, FileMode.Create);
int iLen = (int)struFaceMatchAlarm.struBlackListInfo.dwBlackListPicLen;
byte[] by = new byte[iLen];
Marshal.Copy(struFaceMatchAlarm.struBlackListInfo.pBuffer1, by, 0, iLen);
string strTimeYear = ((struFaceMatchAlarm.struSnapInfo.dwAbsTime >> 26) + 2000).ToString();
string strTimeMonth = ((struFaceMatchAlarm.struSnapInfo.dwAbsTime >> 22) & 15).ToString("d2");
string strTimeDay = ((struFaceMatchAlarm.struSnapInfo.dwAbsTime >> 17) & 31).ToString("d2");
string strTimeHour = ((struFaceMatchAlarm.struSnapInfo.dwAbsTime >> 12) & 31).ToString("d2");
string strTimeMinute = ((struFaceMatchAlarm.struSnapInfo.dwAbsTime >> 6) & 63).ToString("d2");
string strTimeSecond = ((struFaceMatchAlarm.struSnapInfo.dwAbsTime >> 0) & 63).ToString("d2");
string strTime = strTimeYear + "-" + strTimeMonth + "-" + strTimeDay + " " + strTimeHour + ":" + strTimeMinute + ":" + strTimeSecond;
string stringAlarm = "Face comparison alarm, capture deivces:" + struFaceMatchAlarm.struSnapInfo.struDevInfo.struDevIP.sIpV4 + ",Capture time:"
+ strTime + ",similarity:" + struFaceMatchAlarm.fSimilarity;
object[] paras = new object[3];
paras[0] = DateTime.Now.ToString();
listViewAlarmInfo.BeginInvoke(new UpdateListBoxCallback(UpdateClientList), paras);
UpdateClientList(DateTime.Now.ToString(), strIP, stringAlarm);
private void ProcessCommAlarm_FaceDetect(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser)
CHCNetSDK.NET_DVR_FACE_DETECTION struFaceDetectInfo = new CHCNetSDK.NET_DVR_FACE_DETECTION();
uint dwSize = (uint)Marshal.SizeOf(struFaceDetectInfo);
struFaceDetectInfo = (CHCNetSDK.NET_DVR_FACE_DETECTION)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_FACE_DETECTION));
string strIP = pAlarmer.sDeviceIP;
string strTimeYear = ((struFaceDetectInfo.dwAbsTime >> 26) + 2000).ToString();
string strTimeMonth = ((struFaceDetectInfo.dwAbsTime >> 22) & 15).ToString("d2");
string strTimeDay = ((struFaceDetectInfo.dwAbsTime >> 17) & 31).ToString("d2");
string strTimeHour = ((struFaceDetectInfo.dwAbsTime >> 12) & 31).ToString("d2");
string strTimeMinute = ((struFaceDetectInfo.dwAbsTime >> 6) & 63).ToString("d2");
string strTimeSecond = ((struFaceDetectInfo.dwAbsTime >> 0) & 63).ToString("d2");
string strTime = strTimeYear + "-" + strTimeMonth + "-" + strTimeDay + " " + strTimeHour + ":" + strTimeMinute + ":" + strTimeSecond;
string stringAlarm = "Face detection result, Front-end devices:" + struFaceDetectInfo.struDevInfo.struDevIP + ",Alarm time:" + strTime;
object[] paras = new object[3];
paras[0] = DateTime.Now.ToString();
listViewAlarmInfo.BeginInvoke(new UpdateListBoxCallback(UpdateClientList), paras);
UpdateClientList(DateTime.Now.ToString(), strIP, stringAlarm);
private void ProcessCommAlarm_CIDAlarm(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser)
CHCNetSDK.NET_DVR_CID_ALARM struCIDAlarm = new CHCNetSDK.NET_DVR_CID_ALARM();
uint dwSize = (uint)Marshal.SizeOf(struCIDAlarm);
struCIDAlarm = (CHCNetSDK.NET_DVR_CID_ALARM)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_CID_ALARM));
string strIP = pAlarmer.sDeviceIP;
string strTimeYear = (struCIDAlarm.struTriggerTime.wYear).ToString();
string strTimeMonth = (struCIDAlarm.struTriggerTime.byMonth).ToString("d2");
string strTimeDay = (struCIDAlarm.struTriggerTime.byDay).ToString("d2");
string strTimeHour = (struCIDAlarm.struTriggerTime.byHour).ToString("d2");
string strTimeMinute = (struCIDAlarm.struTriggerTime.byMinute).ToString("d2");
string strTimeSecond = (struCIDAlarm.struTriggerTime.bySecond).ToString("d2");
string strTime = strTimeYear + "-" + strTimeMonth + "-" + strTimeDay + " " + strTimeHour + ":" + strTimeMinute + ":" + strTimeSecond;
string stringAlarm = "CID event number,sCIDCode:" + System.Text.Encoding.UTF8.GetString(struCIDAlarm.sCIDCode).TrimEnd('\0')
+ ",sCIDDescribe:" + System.Text.Encoding.UTF8.GetString(struCIDAlarm.sCIDDescribe).TrimEnd('\0')
+ ",Report type:" + struCIDAlarm.byReportType + ",Zone number:" + struCIDAlarm.wDefenceNo + ",alarm triggering time:" + strTime;
object[] paras = new object[3];
paras[0] = DateTime.Now.ToString();
listViewAlarmInfo.BeginInvoke(new UpdateListBoxCallback(UpdateClientList), paras);
UpdateClientList(DateTime.Now.ToString(), strIP, stringAlarm);
private void ProcessCommAlarm_AcsAlarm(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser)
CHCNetSDK.NET_DVR_ACS_ALARM_INFO struAcsAlarm = new CHCNetSDK.NET_DVR_ACS_ALARM_INFO();
uint dwSize = (uint)Marshal.SizeOf(struAcsAlarm);
struAcsAlarm = (CHCNetSDK.NET_DVR_ACS_ALARM_INFO)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_ACS_ALARM_INFO));
string strIP = pAlarmer.sDeviceIP;
if ((struAcsAlarm.dwPicDataLen != 0) && (struAcsAlarm.pPicData != IntPtr.Zero))
string str = "Device_Acs_CapturePic_[" + strIP + "]_lUerID_[" + pAlarmer.lUserID + "]" + ".jpg";
FileStream fs = new FileStream(str, FileMode.Create);
int iLen = (int)struAcsAlarm.dwPicDataLen;
byte[] by = new byte[iLen];
Marshal.Copy(struAcsAlarm.pPicData, by, 0, iLen);
string strTimeYear = (struAcsAlarm.struTime.dwYear).ToString();
string strTimeMonth = (struAcsAlarm.struTime.dwMonth).ToString("d2");
string strTimeDay = (struAcsAlarm.struTime.dwDay).ToString("d2");
string strTimeHour = (struAcsAlarm.struTime.dwHour).ToString("d2");
string strTimeMinute = (struAcsAlarm.struTime.dwMinute).ToString("d2");
string strTimeSecond = (struAcsAlarm.struTime.dwSecond).ToString("d2");
string strTime = strTimeYear + "-" + strTimeMonth + "-" + strTimeDay + " " + strTimeHour + ":" + strTimeMinute + ":" + strTimeSecond;
string stringAlarm = "Access controller alarm info,dwMajor:" + struAcsAlarm.dwMajor + ",dwMinor:" + struAcsAlarm.dwMinor + ",Card number:"
+ System.Text.Encoding.UTF8.GetString(struAcsAlarm.struAcsEventInfo.byCardNo).TrimEnd('\0') + ",Card Reader number:" +
struAcsAlarm.struAcsEventInfo.dwCardReaderNo + ",Alarm triggering time:" + strTime;
object[] paras = new object[3];
paras[0] = DateTime.Now.ToString();
listViewAlarmInfo.BeginInvoke(new UpdateListBoxCallback(UpdateClientList), paras);
UpdateClientList(DateTime.Now.ToString(), strIP, stringAlarm);
private void ProcessCommAlarm_IDInfoAlarm(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser)
CHCNetSDK.NET_DVR_ID_CARD_INFO_ALARM struIDInfoAlarm = new CHCNetSDK.NET_DVR_ID_CARD_INFO_ALARM();
uint dwSize = (uint)Marshal.SizeOf(struIDInfoAlarm);
struIDInfoAlarm = (CHCNetSDK.NET_DVR_ID_CARD_INFO_ALARM)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_ID_CARD_INFO_ALARM));
string strIP = pAlarmer.sDeviceIP;
if ((struIDInfoAlarm.dwCapturePicDataLen != 0) && (struIDInfoAlarm.pCapturePicData != IntPtr.Zero))
string str = "Device_ID_CapturePic_[" + strIP + "]_lUerID_[" + pAlarmer.lUserID + "]" + ".jpg";
FileStream fs = new FileStream(str, FileMode.Create);
int iLen = (int)struIDInfoAlarm.dwCapturePicDataLen;
byte[] by = new byte[iLen];
Marshal.Copy(struIDInfoAlarm.pCapturePicData, by, 0, iLen);
if ((struIDInfoAlarm.dwPicDataLen != 0) && (struIDInfoAlarm.pPicData != IntPtr.Zero))
string str = "Device_ID_IDPic_[" + strIP + "]_lUerID_[" + pAlarmer.lUserID + "]" + ".jpg";
FileStream fs = new FileStream(str, FileMode.Create);
int iLen = (int)struIDInfoAlarm.dwPicDataLen;
byte[] by = new byte[iLen];
Marshal.Copy(struIDInfoAlarm.pPicData, by, 0, iLen);
if ((struIDInfoAlarm.dwFingerPrintDataLen != 0) && (struIDInfoAlarm.pFingerPrintData != IntPtr.Zero))
string str = "Device_ID_FingerPrint_[" + strIP + "]_lUerID_[" + pAlarmer.lUserID + "]" + ".data";
FileStream fs = new FileStream(str, FileMode.Create);
int iLen = (int)struIDInfoAlarm.dwFingerPrintDataLen;
byte[] by = new byte[iLen];
Marshal.Copy(struIDInfoAlarm.pFingerPrintData, by, 0, iLen);
string strTimeYear = (struIDInfoAlarm.struSwipeTime.wYear).ToString();
string strTimeMonth = (struIDInfoAlarm.struSwipeTime.byMonth).ToString("d2");
string strTimeDay = (struIDInfoAlarm.struSwipeTime.byDay).ToString("d2");
string strTimeHour = (struIDInfoAlarm.struSwipeTime.byHour).ToString("d2");
string strTimeMinute = (struIDInfoAlarm.struSwipeTime.byMinute).ToString("d2");
string strTimeSecond = (struIDInfoAlarm.struSwipeTime.bySecond).ToString("d2");
string strTime = strTimeYear + "-" + strTimeMonth + "-" + strTimeDay + " " + strTimeHour + ":" + strTimeMinute + ":" + strTimeSecond;
string stringAlarm = "Identity Card swiping info,dwMajor:" + struIDInfoAlarm.dwMajor + ",dwMinor:" + struIDInfoAlarm.dwMinor
+ ",Identity Card number:" + System.Text.Encoding.UTF8.GetString(struIDInfoAlarm.struIDCardCfg.byIDNum).TrimEnd('\0') +
",Name:" + System.Text.Encoding.UTF8.GetString(struIDInfoAlarm.struIDCardCfg.byName).TrimEnd('\0') +
",Swiping card time:" + strTime;
object[] paras = new object[3];
paras[0] = DateTime.Now.ToString();
listViewAlarmInfo.BeginInvoke(new UpdateListBoxCallback(UpdateClientList), paras);
UpdateClientList(DateTime.Now.ToString(), strIP, stringAlarm);
public void UpdateClientList(string strAlarmTime, string strDevIP, string strAlarmMsg)
listViewAlarmInfo.Items.Add(new ListViewItem(new string[] { strAlarmTime, strDevIP, strAlarmMsg }));
private void btnLogin_Click(object sender, EventArgs e)
if (textBoxIP.Text == "" || textBoxPort.Text == "" ||
textBoxUserName.Text == "" || textBoxPassword.Text == "")
MessageBox.Show("Please input IP, Port, User name and Password!");
MessageBox.Show("The Demo supports maximum 20 devices!");
string DVRIPAddress = textBoxIP.Text;
Int16 DVRPortNumber = Int16.Parse(textBoxPort.Text);
string DVRUserName = textBoxUserName.Text;
string DVRPassword = textBoxPassword.Text;
CHCNetSDK.NET_DVR_DEVICEINFO_V30 DeviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V30();
m_lUserID = CHCNetSDK.NET_DVR_Login_V30(DVRIPAddress, DVRPortNumber, DVRUserName, DVRPassword, ref DeviceInfo);
iLastErr = CHCNetSDK.NET_DVR_GetLastError();
strErr = "NET_DVR_Login_V30 failed, error code= " + iLastErr;
string str1 = "" + m_lUserID;
listViewDevice.Items.Add(new ListViewItem(new string[] { str1, DVRIPAddress, "Disarmed" }));
private void btn_SetAlarm_Click(object sender, EventArgs e)
CHCNetSDK.NET_DVR_SETUPALARM_PARAM struAlarmParam = new CHCNetSDK.NET_DVR_SETUPALARM_PARAM();
struAlarmParam.dwSize = (uint)Marshal.SizeOf(struAlarmParam);
struAlarmParam.byLevel = 1;
struAlarmParam.byAlarmInfoType = 1;
struAlarmParam.byFaceAlarmDetection = 1;
for (int i = 0; i < iDeviceNumber; i++)
m_lUserID = Int32.Parse(listViewDevice.Items[i].SubItems[0].Text);
m_lAlarmHandle[m_lUserID] = CHCNetSDK.NET_DVR_SetupAlarmChan_V41(m_lUserID, ref struAlarmParam);
if (m_lAlarmHandle[m_lUserID] < 0)
iLastErr = CHCNetSDK.NET_DVR_GetLastError();
strErr = "Failed to arm, Error code:" + iLastErr;
listViewDevice.Items[i].SubItems[2].Text = strErr;
listViewDevice.Items[i].SubItems[2].Text = "Arm successfully";
btn_SetAlarm.Enabled = false;
private void btnCloseAlarm_Click(object sender, EventArgs e)
for (int i = 0; i < iDeviceNumber; i++)
m_lUserID = Int32.Parse(listViewDevice.Items[i].SubItems[0].Text);
if (m_lAlarmHandle[m_lUserID] >= 0)
if (!CHCNetSDK.NET_DVR_CloseAlarmChan_V30(m_lAlarmHandle[m_lUserID]))
iLastErr = CHCNetSDK.NET_DVR_GetLastError();
strErr = "Failed to disarm, Error code:" + iLastErr;
listViewDevice.Items[i].SubItems[2].Text = strErr;
listViewDevice.Items[i].SubItems[2].Text = "Disarmed";
listViewDevice.Items[i].SubItems[2].Text = "Disarmed";
btn_SetAlarm.Enabled = true;
private void btnExit_Click(object sender, EventArgs e)
btnCloseAlarm_Click(sender,e);
CHCNetSDK.NET_DVR_StopListen_V30(iListenHandle);
for (int i = 0; i < iDeviceNumber; i++)
m_lUserID = Int32.Parse(listViewDevice.Items[i].SubItems[0].Text);
CHCNetSDK.NET_DVR_Logout(m_lUserID);
CHCNetSDK.NET_DVR_Cleanup();
private void listViewDevice_MouseClick(object sender, MouseEventArgs e)
if (e.Button == MouseButtons.Right)
if (listViewDevice.SelectedItems.Count > 0)
if (DialogResult.OK == MessageBox.Show("Are you sure to delete the selected devices!","Delete prompt",MessageBoxButtons.OKCancel))
foreach (ListViewItem item in this.listViewDevice.SelectedItems)
m_lUserID = Int32.Parse(item.SubItems[0].Text);
CHCNetSDK.NET_DVR_CloseAlarmChan_V30(m_lAlarmHandle[m_lUserID]);
CHCNetSDK.NET_DVR_Logout(m_lUserID);
this.listViewDevice.Refresh();
private void btnStartListen_Click(object sender, EventArgs e)
string sLocalIP = textBoxListenIP.Text;
ushort wLocalPort = ushort.Parse(textBoxListenPort.Text);
m_falarmData = new CHCNetSDK.MSGCallBack(MsgCallback);
iListenHandle = CHCNetSDK.NET_DVR_StartListen_V30(sLocalIP, wLocalPort, m_falarmData, IntPtr.Zero);
iLastErr = CHCNetSDK.NET_DVR_GetLastError();
strErr = "Failed to start listening, Error code:" + iLastErr;
MessageBox.Show("Start listening successfully!");
btnStopListen.Enabled = true;
btnStartListen.Enabled = false;
private void btnStopListen_Click(object sender, EventArgs e)
if (!CHCNetSDK.NET_DVR_StopListen_V30(iListenHandle))
iLastErr = CHCNetSDK.NET_DVR_GetLastError();
strErr = "Failed to stop listening, Error code:" + iLastErr;
MessageBox.Show("Stop listening successfully!");
btnStopListen.Enabled = false;
btnStartListen.Enabled = true;
private void AlarmDemo_Load(object sender, EventArgs e)
private void listViewDevice_SelectedIndexChanged(object sender, EventArgs e)
private void listViewAlarmInfo_SelectedIndexChanged(object sender, EventArgs e)
private void label9_Click(object sender, EventArgs e)