#include "XNetSDKTest.h"
#include "AlarmInfo.h"
#include "XNetSDKSyn.h"
#include "Detect_MotionDetect.h"

USE_NS_NETSDK_CFG
int TestDevAlarmCallback()
{
	printf("%s\r\n", __FUNCTION__);
	char c = 0;
	do
	{
		switch(c)
		{
		//////设置移动侦测报警
		case 'a':
			{
				char szOutBuffer[40960] = {0};
				int  nInOutSize = sizeof(szOutBuffer);
				int nResult = XSDK_DevGetChnConfigSyn(g_hDevice, 0, JK_Detect_MotionDetect, szOutBuffer, &nInOutSize, 4000, EXCMD_CONFIG_GET);

				if(nResult >= 0)
				{
					Detect_MotionDetect cfg;
					cfg.SetName("Detect.MotionDetect.[0]");
					cfg.Parse(szOutBuffer);
					cfg.Enable.SetValue(true);
					const char *pCfg = cfg.ToString();

					int nRet = XSDK_DevSetChnConfig(g_hDevice, 0, JK_Detect_MotionDetect, pCfg, strlen(pCfg), 1, 5000, EXCMD_CONFIG_SET);
					
					if(nRet >= 0)
					{
						printf("Set Success!\r\n");
					}
				}
			}
			break;
		//////开启报警监听（开启后触发移动侦测报警有相关返回）
		case 's':
			{
				XSDK_DevSetAlarmListener(g_hDevice, true);
			}
			break;
		//////关闭报警监听
		case 't':
			{
				XSDK_DevSetAlarmListener(g_hDevice, false);
			}
			break;
		}
	}while((c = getchar()) != 'q');
	return 0;
}

/////触发报警后的返回
void OnDevAlarmCallback(XSDK_HANDLE hDevice, const char *szAlarm)
{
	AlarmInfo alarmInfo;
	if(0 == alarmInfo.Parse(szAlarm))
	{
		const char * buf = alarmInfo.Event.ToString();
		printf("OnDevAlarmCallback[Dev:%d]\r\n\Event:[%s]\r\n\Channel:[%d]\r\n\StartTime:[%s]\r\n\Status:[%s]\r\n\ExtInfo:[%s]\r\n\r\n", 
			hDevice, alarmInfo.Event.Value(), alarmInfo.Channel.Value(), alarmInfo.StartTime.Value(), alarmInfo.Status.Value(), alarmInfo.ExtInfo.Value());
	}
	else
	{
		printf("OnDevAlarmCallback[Dev:%ld][%s]\r\n", hDevice, szAlarm);
	}
}