SOMS/test/HikTest/Alarm.cpp

183 lines
6.1 KiB
C++
Raw Permalink Normal View History

2024-07-15 10:31:26 +08:00
#include "Alarm.h"
#include <stdio.h>
#include <iostream>
#include "Windows.h"
#include "HCNetSDK.h"
using namespace std;
//ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8>
#define GET_YEAR(_time_) (((_time_)>>26) + 2000)
#define GET_MONTH(_time_) (((_time_)>>22) & 15)
#define GET_DAY(_time_) (((_time_)>>17) & 31)
#define GET_HOUR(_time_) (((_time_)>>12) & 31)
#define GET_MINUTE(_time_) (((_time_)>>6) & 63)
#define GET_SECOND(_time_) (((_time_)>>0) & 63)
void CALLBACK cbMessageCallback(LONG lCommand, NET_DVR_ALARMER* pAlarmer, char* pAlarmInfo, DWORD dwBufLen, void* pUser)
{
switch (lCommand)
{
case COMM_ALARM_RULE: //<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
{
NET_VCA_RULE_ALARM struVcaAlarm = { 0 };
memcpy(&struVcaAlarm, pAlarmInfo, sizeof(NET_VCA_RULE_ALARM));
NET_DVR_TIME struAbsTime = { 0 };
struAbsTime.dwYear = GET_YEAR(struVcaAlarm.dwAbsTime);
struAbsTime.dwMonth = GET_MONTH(struVcaAlarm.dwAbsTime);
struAbsTime.dwDay = GET_DAY(struVcaAlarm.dwAbsTime);
struAbsTime.dwHour = GET_HOUR(struVcaAlarm.dwAbsTime);
struAbsTime.dwMinute = GET_MINUTE(struVcaAlarm.dwAbsTime);
struAbsTime.dwSecond = GET_SECOND(struVcaAlarm.dwAbsTime);
//<2F><><EFBFBD><EFBFBD>ץ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>ͼƬ
if (struVcaAlarm.dwPicDataLen > 0 && struVcaAlarm.pImage != NULL)
{
char cFilename[256] = { 0 };
HANDLE hFile;
DWORD dwReturn;
char chTime[128];
sprintf_s(chTime, "%4.4d%2.2d%2.2d%2.2d%2.2d%2.2d", struAbsTime.dwYear, struAbsTime.dwMonth, struAbsTime.dwDay, struAbsTime.dwHour, struAbsTime.dwMinute, struAbsTime.dwSecond);
sprintf_s(cFilename, "VcaAlarmPic[%s][%s].jpg", struVcaAlarm.struDevInfo.struDevIP.sIpV4, chTime);
hFile = CreateFile((LPCWSTR)cFilename, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
break;
}
WriteFile(hFile, struVcaAlarm.pImage, struVcaAlarm.dwPicDataLen, &dwReturn, NULL);
CloseHandle(hFile);
hFile = INVALID_HANDLE_VALUE;
}
WORD wEventType = struVcaAlarm.struRuleInfo.wEventTypeEx;
printf("\n\n");
printf("<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[0x%x]: Abs[%4.4d%2.2d%2.2d%2.2d%2.2d%2.2d] Dev[ip:%s,port:%d,ivmsChan:%d] Smart[%d] EventTypeEx[%d]\n", \
lCommand, struAbsTime.dwYear, struAbsTime.dwMonth, struAbsTime.dwDay, struAbsTime.dwHour, struAbsTime.dwMinute, \
struAbsTime.dwSecond, struVcaAlarm.struDevInfo.struDevIP.sIpV4, struVcaAlarm.struDevInfo.wPort, \
struVcaAlarm.struDevInfo.byIvmsChannel, struVcaAlarm.bySmart, wEventType);
NET_VCA_TARGET_INFO tmpTargetInfo;
memcpy(&tmpTargetInfo, &struVcaAlarm.struTargetInfo, sizeof(NET_VCA_TARGET_INFO));
printf("Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ:ID[%d]RECT[%f][%f][%f][%f]\n",
tmpTargetInfo.dwID, tmpTargetInfo.struRect.fX, tmpTargetInfo.struRect.fY,
tmpTargetInfo.struRect.fWidth, tmpTargetInfo.struRect.fHeight);
switch (wEventType)
{
case ENUM_VCA_EVENT_INTRUSION: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>
{
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD>: wDuration[%d], Sensitivity[%d]\n", \
struVcaAlarm.struRuleInfo.uEventParam.struIntrusion.wDuration, \
struVcaAlarm.struRuleInfo.uEventParam.struIntrusion.bySensitivity);
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: \n");
NET_VCA_POLYGON tempPolygon;
memcpy(&tempPolygon, &struVcaAlarm.struRuleInfo.uEventParam.struIntrusion.struRegion, sizeof(NET_VCA_POLYGON));
for (int i = 0; i < (int)tempPolygon.dwPointNum; i++)
{
printf("[%f, %f] ", tempPolygon.struPos[i].fX, tempPolygon.struPos[i].fY);
}
break;
}
default:
{
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 0x%x\n", lCommand);
break;
}
}
break;
}
default:
{
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 0x%x\n", lCommand);
break;
}
}
return;
}
void Alarm::TestMeasureTemp() {
//---------------------------------------
// <20><>ʼ<EFBFBD><CABC>
NET_DVR_Init();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
NET_DVR_SetConnectTime(2000, 1);
NET_DVR_SetReconnect(10000, true);
//---------------------------------------
// ע<><D7A2><EFBFBD>
LONG lUserID;
//<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>¼<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
NET_DVR_USER_LOGIN_INFO struLoginInfo = { 0 };
struLoginInfo.bUseAsynLogin = 0; //ͬ<><CDAC><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>ʽ
strcpy_s(struLoginInfo.sDeviceAddress, "192.168.81.1"); //<2F>豸IP<49><50>ַ
struLoginInfo.wPort = 8000; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
strcpy_s(struLoginInfo.sUserName, "admin"); //<2F><EFBFBD><E8B1B8>¼<EFBFBD>û<EFBFBD><C3BB><EFBFBD>
strcpy_s(struLoginInfo.sPassword, "abcd1234"); //<2F><EFBFBD><E8B1B8>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>
//<2F><EFBFBD><E8B1B8>Ϣ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = { 0 };
lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40);
if (lUserID < 0)
{
printf("Login failed, error code: %d\n", NET_DVR_GetLastError());
NET_DVR_Cleanup();
return;
}
//<2F><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
/*ע<><D7A2><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD>Խ<EFBFBD>ʱҲֻ<D2B2><D6BB>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD>ֲ<EFBFBD>ͬ<EFBFBD><EFBFBD><E8B1B8><EFBFBD>¼<EFBFBD><C2BC>ڲ<EFBFBD>ͬ<EFBFBD>Ļص<C4BB><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B7B5>*/
NET_DVR_SetDVRMessageCallBack_V50(0, cbMessageCallback, NULL);
//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
LONG lHandle;
NET_DVR_SETUPALARM_PARAM struAlarmParam = { 0 };
struAlarmParam.dwSize = sizeof(struAlarmParam);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ã<EFBFBD><C3A3><EFBFBD>֧<EFBFBD><D6A7>
lHandle = NET_DVR_SetupAlarmChan_V41(lUserID, &struAlarmParam);
if (lHandle < 0)
{
printf("NET_DVR_SetupAlarmChan_V41 error, %d\n", NET_DVR_GetLastError());
NET_DVR_Logout(lUserID);
NET_DVR_Cleanup();
return;
}
//<2F>¼<EFBFBD><C2BC><EFBFBD>Ϣ<EFBFBD>ڻص<DABB><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ
//<2F><><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>q<EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>򣬷<EFBFBD><F2A3ACB7><EFBFBD>һֱ<D2BB><D6B1><EFBFBD><EFBFBD>
char c = 0;
while ('q' != c)
{
printf("input 'q' to quit\n");
printf("input: ");
scanf_s("%c", &c);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>ͨ<EFBFBD><CDA8>
if (!NET_DVR_CloseAlarmChan_V30(lHandle))
{
printf("NET_DVR_CloseAlarmChan_V30 error, %d\n", NET_DVR_GetLastError());
NET_DVR_Logout(lUserID);
NET_DVR_Cleanup();
return;
}
//ע<><D7A2><EFBFBD>û<EFBFBD>
NET_DVR_Logout(lUserID);
//<2F>ͷ<EFBFBD>SDK<44><4B>Դ
NET_DVR_Cleanup();
return;
}