private void AlarmMessageHandle(int lCommand, ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { if (lCommand == CHCNetSDK.COMM_ALARM_V30) { CHCNetSDK.NET_DVR_ALARMINFO_V30 struAlarmInfo = new CHCNetSDK.NET_DVR_ALARMINFO_V30(); struAlarmInfo = (CHCNetSDK.NET_DVR_ALARMINFO_V30)Marshal.PtrToStructure(pAlarmInfo, typeof(CHCNetSDK.NET_DVR_ALARMINFO_V30)); if (struAlarmInfo.dwAlarmType == 3) { // Motion Detect // pAlarmer.sDeviceIP string detectTime = DateTime.Now.ToString(); if (detectResetTimer.IsEnabled) { detectResetTimer.Stop(); } detectResetTimer.Start(); detectCount++; Console.WriteLine("[CCTV] - Detect Count : {0}", detectCount); if (detectCount >= GUEST_DETECT_COUNT) { if (ModeListener != null) { ModeListener(MODE_GUEST_DETECT); } } } } }
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; string stringAlarm = ""; int i; switch (struAlarmInfoV30.dwAlarmType) { case 0: stringAlarm = "信号量报警,报警报警输入口:" + struAlarmInfoV30.dwAlarmInputNumber + ",触发录像通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byAlarmRelateChannel[i] == 1) { stringAlarm += (i + 1) + "\\"; } } break; case 1: stringAlarm = "硬盘满,报警硬盘号:"; for (i = 0; i < CHCNetSDK.MAX_DISKNUM_V30; i++) { if (struAlarmInfoV30.byDiskNumber[i] == 1) { stringAlarm += (i + 1) + " "; } } break; case 2: stringAlarm = "信号丢失,报警通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 3: stringAlarm = "移动侦测,报警通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 4: stringAlarm = "硬盘未格式化,报警硬盘号:"; for (i = 0; i < CHCNetSDK.MAX_DISKNUM_V30; i++) { if (struAlarmInfoV30.byDiskNumber[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 5: stringAlarm = "读写硬盘出错,报警硬盘号:"; for (i = 0; i < CHCNetSDK.MAX_DISKNUM_V30; i++) { if (struAlarmInfoV30.byDiskNumber[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 6: stringAlarm = "遮挡报警,报警通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 7: stringAlarm = "制式不匹配,报警通道"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 8: stringAlarm = "非法访问"; break; case 9: stringAlarm = "视频信号异常,报警通道"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 10: stringAlarm = "录像/抓图异常,报警通道"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 11: stringAlarm = "智能场景变化,报警通道"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 12: stringAlarm = "阵列异常"; break; case 13: stringAlarm = "前端/录像分辨率不匹配,报警通道"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 15: stringAlarm = "智能侦测,报警通道"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; default: stringAlarm = "其他未知报警信息"; break; } if (InvokeRequired) { object[] paras = new object[3]; paras[0] = DateTime.Now.ToString(); paras[1] = strIP; paras[2] = stringAlarm; listViewAlarmInfo.BeginInvoke(new UpdateListBoxCallback(UpdateClientList), paras); } else { //创建该控件的主线程直接更新信息列表 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; string stringAlarm = ""; int i; switch (struAlarmInfoV30.dwAlarmType) { case 0: stringAlarm = "信号量报警,报警报警输入口:" + struAlarmInfoV30.dwAlarmInputNumber + ",触发录像通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byAlarmRelateChannel[i] == 1) { stringAlarm += (i + 1) + "\\"; } } break; case 1: stringAlarm = "硬盘满,报警硬盘号:"; for (i = 0; i < CHCNetSDK.MAX_DISKNUM_V30; i++) { if (struAlarmInfoV30.byDiskNumber[i] == 1) { stringAlarm += (i + 1) + " "; } } break; case 2: stringAlarm = "信号丢失,报警通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 3: stringAlarm = "移动侦测,报警通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 4: stringAlarm = "硬盘未格式化,报警硬盘号:"; for (i = 0; i < CHCNetSDK.MAX_DISKNUM_V30; i++) { if (struAlarmInfoV30.byDiskNumber[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 5: stringAlarm = "读写硬盘出错,报警硬盘号:"; for (i = 0; i < CHCNetSDK.MAX_DISKNUM_V30; i++) { if (struAlarmInfoV30.byDiskNumber[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 6: stringAlarm = "遮挡报警,报警通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 7: stringAlarm = "制式不匹配,报警通道"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 8: stringAlarm = "非法访问"; break; case 9: stringAlarm = "视频信号异常,报警通道"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 10: stringAlarm = "录像/抓图异常,报警通道"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 11: stringAlarm = "智能场景变化,报警通道"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 12: stringAlarm = "阵列异常"; break; case 13: stringAlarm = "前端/录像分辨率不匹配,报警通道"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; case 15: stringAlarm = "智能侦测,报警通道"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1) + " \\ "; } } break; default: stringAlarm = "其他未知报警信息"; break; } MessageBox.Show("ProcessCommAlarm_V30:" + 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; string stringAlarm = ""; int i; switch (struAlarmInfoV30.dwAlarmType) { case 0: stringAlarm = "信号量报警,报警报警输入口:" + struAlarmInfoV30.dwAlarmInputNumber + ",触发录像通道:"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byAlarmRelateChannel[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; case 1: stringAlarm = "硬盘满,"; for (i = 0; i < CHCNetSDK.MAX_DISKNUM_V30; i++) { if (struAlarmInfoV30.byDiskNumber[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; case 2: stringAlarm = "信号丢失,"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; case 3: stringAlarm = "移动侦测,"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) //MAX_CHANNUM_V30 { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; case 4: stringAlarm = "硬盘未格式化,"; for (i = 0; i < CHCNetSDK.MAX_DISKNUM_V30; i++) { if (struAlarmInfoV30.byDiskNumber[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; case 5: stringAlarm = "读写硬盘出错,"; for (i = 0; i < CHCNetSDK.MAX_DISKNUM_V30; i++) { if (struAlarmInfoV30.byDiskNumber[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; case 6: stringAlarm = "遮挡报警,"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; case 7: stringAlarm = "制式不匹配,"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; case 8: stringAlarm = "非法访问,"; break; case 9: stringAlarm = "视频信号异常,"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; case 10: stringAlarm = "录像/抓图异常,"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; case 11: stringAlarm = "智能场景变化,"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; case 12: stringAlarm = "阵列异常,"; break; case 13: stringAlarm = "前端/录像分辨率不匹配,"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; case 15: stringAlarm = "智能侦测,"; for (i = 0; i < CHCNetSDK.MAX_CHANNUM_V30; i++) { if (struAlarmInfoV30.byChannel[i] == 1) { stringAlarm += (i + 1 - 32) + ","; } } break; default: stringAlarm = "其他未知报警信息,"; break; } //在这里为报警信息 if (true) { string[] paras = new string[3]; paras[0] = DateTime.Now.ToString(); //当前PC系统时间 paras[1] = strIP; //nvrip地址 paras[2] = stringAlarm; string[] alarmMsg = paras[2].Split(','); //报警类型和通道号 // Console.WriteLine(paras[0] + "," + paras[1] + "," + paras[2] + "\n"); //根据数据库找到theone、摄像头名称等内容 string theone = "0"; string name = ""; string position = ""; try { //根据数据库找到theone、摄像头名称等内容 //找到了目前这个函数通道所在的NVR, //然后根据通道号跟NVRip地址,找到摄像头 string srtSql = "NVRIP地址= '" + paras[1] + "'" + " and 通道号 ='" + alarmMsg[1] + "'"; DataRow[] dr = StaticData.g_dtCamera.Select(srtSql); if (dr.Length > 0) { theone = dr[0]["theone"].ToString(); name = dr[0]["摄像头名称"].ToString(); position = dr[0]["坐标"].ToString(); } else { // 处理获取非指定camaras错误回调后所产生的数据为空的异常情况 // 异常eg: 发现了非列表中的未知nvrip = “10.1.12.51”的设备 return; } } catch (Exception) { StaticUtils.ShowEventMsg("HikvisionAlarmCallBackFun.class-ProcessCommAlarm_V30 : 报警回调函数出现异常!\n"); //throw; } //读取事件数据库,判断数据库是否存在该事件,且时间是否2分钟以上差别,存在且是的话插入新事件 //不是的话更新endtime字段为当前时间 //不存在的话直接插入数据,还需要插入个摄像头的位置,名称 CheckEvent(name, theone, alarmMsg[0], DateTime.Now.ToString().Replace('/', '-'), position, name, paras, alarmMsg[1]); } else { //创建该控件的主线程直接更新信息列表 // UpdateClientList(DateTime.Now.ToString(), strIP, stringAlarm); } }
private void ProcessCommAlarm_V30(ref CHCNetSDK.NET_DVR_ALARMER pAlarmer, IntPtr pAlarmInfo, uint dwBufLen, IntPtr pUser) { MyDebugInfo AlarmInfo = new MyDebugInfo(DebugInfo); 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 str; switch (struAlarmInfoV30.dwAlarmType) { case 0: this.BeginInvoke(AlarmInfo, "sensor alarm"); break; case 1: this.BeginInvoke(AlarmInfo, "hard disk full"); break; case 2: this.BeginInvoke(AlarmInfo, "video lost"); break; case 3: str = ""; str += pAlarmer.sDeviceIP; str += " motion detection"; this.BeginInvoke(AlarmInfo, str); break; case 4: this.BeginInvoke(AlarmInfo, "hard disk unformatted"); break; case 5: this.BeginInvoke(AlarmInfo, "hard disk error"); break; case 6: this.BeginInvoke(AlarmInfo, "tampering detection"); break; case 7: this.BeginInvoke(AlarmInfo, "unmatched video output standard"); break; case 8: this.BeginInvoke(AlarmInfo, "illegal operation"); break; case 9: this.BeginInvoke(AlarmInfo, "videl Signal abnormal"); break; case 10: this.BeginInvoke(AlarmInfo, "record abnormal"); break; default: this.BeginInvoke(AlarmInfo, "Unknow alarm"); break; } }