// XNetSDKTest.h : 定义控制台应用程序的入口点。
//
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <stdio.h>
#include <map>
#include <time.h>
#include "XNetSDK.h"
#include "TestFuns.h"
#include "Camera_Param.h"

using namespace std;

extern XSDK_HANDLE g_hDevice;
extern SXMediaRecordByFileReq info;
extern bool bFindFile;

// 测试设备系统配置
int TestDevSystemConfig();

//测试相机相关配置
int TestCameraConfig();

//测试编码格式配置
int TestEncodeConfig();

// 测试设备云台功能
int TestDevPTZ();

//接收设备返回的配置数据(调用异步接口XSDK_DevGetSysConfig/XSDK_DevGetChnConfig时用)
void OnDevConfig(int nMsgId, int nResult, const char *szCfgName, const char *szResult, int nResultLen, int nSeq);

// 测试录像查询
int TestDevFindFile();
void OnDevFindFile(int nResult, SXSDKQueryRecordRes *pFiles, int nCount, int nSeq);

// 设备设备报警回调
int TestDevAlarmCallback();
void OnDevAlarmCallback(XSDK_HANDLE hDevice, const char *szAlarm);

// 测试实时视频
int TestMediaRealPlay();

// 设备录像回放
int TestMediaRecordPlay();

// 测试人脸抓图
int TestMediaFaceImage();

// 设备搜索
int TestDevSearch();
void OnDevSearchResult(int nResult, SXSDK_CONFIG_NET_COMMON *pDevs, int nCount);

//修改设备密码
int TestModifyPassword();

//恢复默认配置
int TestSetDefaultConfig();

//测试录像下载
int TestDownload();

//测试控制设备（重启和关机）
int TestOPMachine();

//测试控制设备
//接收设备返回的配置数据
extern XSDK_HANDLE g_hDasServer;
void OnDASServerStart(XSDK_HANDLE hServer, int nResult);
void OnDASDeviceReg(XSDK_HANDLE hDevice, SXSDKDASDeviceInfo *pDevInfo);
int TestDASServer();

// 测试设备通道抓图
void OnDevSnap(int nResult, const char *pData, int nDataLen, int nSeq);
int TestDevSnap();

//测试升级设备程序
int TestUpgrade();
void OnUpgradeCallback(EUpgradeStep nStep, int process, int nTotalSize);

//测试打开透明串口
int TestOpenTransChannel();
void OnTransCommCallback(XSDK_HANDLE hDevice, const char *szData);

////测试向串口写数据
int TestSerialWrite();

////测试对讲
int TestDevTalk();

//日志查询
int TestOPLogQuery();

///视频叠加
int TestOSDInfo();

////图像参数配置
int TestVideoCfg();

////设置巡航点
int XSDK_SetPtzTourPoint(XSDK_HANDLE hDevice, int nChannel, int nPresetPoint, int nStep, int nTourIndex, bool bAdd);

////云台预置点及巡航
int TestPTZPreset();

/////按文件名称下载（一般用于下载存储在SD卡上的图片）
int TestDownloadByName();

typedef struct SDK_VIDEO_FORMAT
{
	int		iCompression;			//  压缩模式(视频格式) 参照enum SDK_CAPTURE_COMP_t 	
	int		iResolution;			//  分辨率 参照枚举SDK_CAPTURE_SIZE_t
	int		iBitRateControl;		//  码流控制 参照枚举SDK_capture_brc_t
	int		iQuality;				//  码流的画质 档次1-6		
	int		nFPS;					//  帧率值，NTSC/PAL不区分,负数表示多秒一帧		
	int		nBitRate;				//  0-4096k,该列表主要由客户端保存，设备只接收实际的码流值而不是下标。
	int		iGOP;					//  描述两个I帧之间的间隔时间，2-12 
} SDK_VIDEO_FORMAT;

///计算码流值
void CalculateCodeStreamValue(SDK_VIDEO_FORMAT * vfSetFormat, bool bLowBitrate, bool bFisheyeBitrate, bool bH265Bitrate);

//用于获取支持的分辨率
void GetMaxResolAndRate(int &nResolu, int &nRate, long lFreePower);
void GetSupportRes(int maxSize, unsigned long dwMask );