You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

595 lines
16 KiB
C

1 year ago
#ifndef _HVDEVICEUTILS_H_
#define _HVDEVICEUTILS_H_
#include "tinyxml.h"
#include "HvDeviceEx.h"
#include "HvCameraType.h"
#include "HVAPI_HANDLE_CONTEXT_EX.h"
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
#define PROTOCOL_MERCURY 1
#define PROTOCOL_EARTH 2
#ifndef SAFE_DELETE
#define SAFE_DELETE(p) if (p) {delete p; p = NULL ; }
#endif
#define IVN_MAX_SIZE 128
#ifndef SAFE_DELETE_ARG
#define SAFE_DELETE_ARG(p) if ( p ) {delete[] p; p = NULL; }
#endif
//<2F><><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC>Ϣ<EFBFBD><EFBFBD><E1B9B9>
typedef struct _RECORD_IMAGE_INFO_EX
{
RECT rcPlate;
RECT rcFacePos[20];
int nFaceCount;
DWORD32 dwCarID;
DWORD32 dwWidth;
DWORD32 dwHeight;
DWORD64 dw64TimeMs;
}_RECORD_IMAGE_INFO_EX;
//<2F><><EFBFBD><EFBFBD>ͼƬ<CDBC><EFBFBD><E1B9B9>
typedef struct _RECORD_IMAGE_EX
{
_RECORD_IMAGE_INFO_EX cImgInfo;
PBYTE pbImgInfo;
PBYTE pbImgData;
DWORD dwImgInfoLen;
DWORD dwImgDataLen;
}RECORD_IMAGE_EX;
//<2F><>Ƶ<EFBFBD><EFBFBD><E1B9B9>
typedef struct _RECORD_VIDEO_ILLEGAL
{
PBYTE pbVideoInfo;
PBYTE pbVideoData;
DWORD dwVideoInfoLen;
DWORD dwVideoDataLen;
DWORD dwCarID;
DWORD dwWidth;
DWORD dwHeight;
DWORD64 dw64TimeMS;
}RECORD_VIDEO_ILLEGAL;
//<2F><><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD><E1B9B9>
typedef struct _RECORD_IMAGE_GROUP_EX
{
RECORD_IMAGE_EX cBestSnapshot;
RECORD_IMAGE_EX cLastSnapshot;
RECORD_IMAGE_EX cBeginCapture;
RECORD_IMAGE_EX cBestCapture;
RECORD_IMAGE_EX cLastCapture;
RECORD_IMAGE_EX cPlatePicture;
RECORD_IMAGE_EX cPlateBinary;
RECORD_VIDEO_ILLEGAL cIllegalVideo;
}RECORD_IMAGE_GROUP_EX;
// ˮ<><CBAE>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef enum {
XML_CMD_TYPE_NULL, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD>޳<EFBFBD><DEB3><EFBFBD>
XML_CMD_TYPE_CUSTOM, // <20>ɴ<EFBFBD><C9B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
XML_CMD_TYPE_INT,
XML_CMD_TYPE_DOUBLE,
XML_CMD_TYPE_FLOAT,
XML_CMD_TYPE_BOOL,
XML_CMD_TYPE_DWORD,
XML_CMD_TYPE_STRING,
XML_CMD_TYPE_BIN,
XML_CMD_TYPE_INTARRAY1D,
XML_CMD_TYPE_INTARRAY2D
} XML_CMD_TYPE;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ýṹ<C3BD><E1B9B9>
typedef struct _CXmlParseInfo
{
CHAR szKeyName[128];
CHAR szKeyValue[128];
INT nKeyValueLen;
XML_CMD_TYPE eKeyType;
_CXmlParseInfo()
{
szKeyName[0]='\0';
szKeyValue[0]='\0';
nKeyValueLen = 128;
eKeyType = XML_CMD_TYPE_NULL;
}
}CXmlParseInfo;
//XMLЭ<4C><D0AD><EFBFBD>ؼ<EFBFBD><D8BC>ֺ<EFBFBD>
#define HX_TYPE "TYPE"
#define HX_TYPE_INT "INT"
#define HX_TYPE_STRING "STRING"
#define HX_TYPE_BIN "BIN"
#define HX_TYPE_FLOAT "FLOAT"
#define HX_CMDNAME "CmdName"
#define HX_VALUE "Value"
#define HX_RECODE "Value"
#define HX_RETMSG "RetMsg"
/**
* sock<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD>ʼ<EFBFBD><EFBFBD>
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>TRUE ʧ<EFBFBD>ܣ<EFBFBD>FALSE]
*/
bool InitWSA();
/**
* sock<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD>
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>TRUE ʧ<EFBFBD>ܣ<EFBFBD>FALSE]
*/
bool UnInitWSA();
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>SOCKET
* @param[in] af <EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD>
* @param[in] type sock<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param[in] protocol <EFBFBD>׽ӿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>Э<EFBFBD><EFBFBD>
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD> ʧ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL ]
*/
SOCKET HvCreateSocket(int af=AF_INET, int type=SOCK_STREAM, int protocol=0);
/**
* [HvSetRecvTimeOut <EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><EFBFBD>ճ<EFBFBD>ʱ]
* @param hSocket [<EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD>]
* @param iMS [<EFBFBD><EFBFBD>ʱ <EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
HRESULT HvSetRecvTimeOut(const SOCKET& hSocket, int iMS);
/**
* [HvSetSendTimeOut <EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><EFBFBD>ͳ<EFBFBD>ʱ]
* @param hSocket [<EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD>]
* @param iMS [<EFBFBD><EFBFBD>ʱ <EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
HRESULT HvSetSendTimeOut(const SOCKET& hSocket, int iMS);
/**
* [HvListen <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param hSocket [<EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD>]
* @param nPort [<EFBFBD>˿<EFBFBD>]
* @param backlog [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
HRESULT HvListen(const SOCKET& hSocket, int nPort, int backlog);
/**
* [HvAccept <EFBFBD>ȴ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param hSocket [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD>]
* @param hNewSocket [Զ<EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD>]
* @param iTimeout [<EFBFBD><EFBFBD>ʱʱ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
HRESULT HvAccept(const SOCKET& hSocket, SOCKET& hNewSocket, int iTimeout/*=-1*/);
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
* @param pszLog [<EFBFBD><EFBFBD>־<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
*/
void WriteLog(const char *pszLog);
/**
* [RecvAll <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>socket<EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param socket [<EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD>]
* @param pBuffer [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param iRecvLen [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @return [ʵ<EFBFBD>ʽ<EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>]
*/
int RecvAll( int socket, char *pBuffer, int iRecvLen );
/**
* [RecvAll <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>socket<EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param socket [<EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD>]
* @param pBuffer [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param iRecvLen [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param iRealRecvLen [ʵ<EFBFBD>ʽ<EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>]
* @return [ʵ<EFBFBD>ʽ<EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>]
*/
int RecvAll(int socket, char *pBuffer, int iRecvLen , int& iRealRecvLen) ;
/**
* [ExecXmlExtCmd <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD>xmlЭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param szIP [<EFBFBD>IP]
* @param szXmlCmd [<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>xml<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param szRetBuf [<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>xml<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param nBufLen [<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>xml<EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>TRUE ʧ<EFBFBD>ܣ<EFBFBD>FALSE]
*/
bool ExecXmlExtCmd(char* szIP, char* szXmlCmd, char* szRetBuf, int& nBufLen);
/**
* [ExecXmlExtCmd <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD>xmlЭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param szXmlCmd [<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>xml<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param szRetBuf [<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>xml<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param iBufLen [<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>xml<EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>]
* @param sktSend [<EFBFBD><EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>TRUE ʧ<EFBFBD>ܣ<EFBFBD>FALSE]
*/
bool ExecXmlExtCmd(char* szXmlCmd, char* szRetBuf,
int& iBufLen, SOCKET sktSend);
/**
* [IsNewProtocol <EFBFBD>Ƿ<EFBFBD>Ϊ֧<EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><EFBFBD>]
* @param szIP [<EFBFBD>IP]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>TRUE ʧ<EFBFBD>ܣ<EFBFBD>FALSE]
*/
bool IsNewProtocol(char *szIP);
/**
* [SearchHVDeviceCount <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param pdwCount [<EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
HRESULT SearchHVDeviceCount(DWORD32 *pdwCount);
/**
* [GetHVDeviceAddr <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param iIndex [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param pdw64MacAddr [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ]
* @param pdwIP [<EFBFBD>IP]
* @param pdwMask [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param pdwGateway [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
HRESULT GetHVDeviceAddr(int iIndex,
DWORD64 *pdw64MacAddr,
DWORD32 *pdwIP,
DWORD32 *pdwMask,
DWORD32 *pdwGateway);
/**
* [SetIPFromMac ͨ<EFBFBD><EFBFBD>MAC<EFBFBD>޸<EFBFBD>IP]
* @param dw64MacAddr [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ]
* @param dwIP [<EFBFBD>޸ĺ<EFBFBD><EFBFBD><EFBFBD>IP]
* @param dwMask [<EFBFBD>޸ĺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param dwGateway [<EFBFBD>޸ĺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
HRESULT SetIPFromMac(DWORD64 dw64MacAddr, DWORD dwIP,DWORD dwMask, DWORD dwGateway);
/**
* [BuildHvCmdXml <EFBFBD><EFBFBD><EFBFBD><EFBFBD>xml<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param pXmlBuf [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>xml<EFBFBD><EFBFBD><EFBFBD>ݵĻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ]
* @param pCmdName [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param iArgCount [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param rgszName [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param rgszValue [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD>xml<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
*/
int BuildHvCmdXml(
char* pXmlBuf,
char* pCmdName,
int iArgCount,
const char rgszName[][IVN_MAX_SIZE],
const char rgszValue[][IVN_MAX_SIZE]
);
/**
* [GetParamStringFromXml <EFBFBD><EFBFBD>HvXmlЭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ȡָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Vaule(String)]
* @param pCmdArgElement [xml<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param pszParamName [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param pszParamValue [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ]
* @param nParamValueSize [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
HRESULT GetParamStringFromXml(
const TiXmlElement* pCmdArgElement,
const char *pszParamName,
char *pszParamValue,
int nParamValueSize
);
/**
* [GetParamIntFromXml <EFBFBD><EFBFBD>HvXmlЭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ȡָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Vaule(int)]
* @param pCmdArgElement [xml<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param pszParamName [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param pnParamValue [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
HRESULT GetParamIntFromXml(
const TiXmlElement* pCmdArgElement,
const char *pszParamName,
int *pnParamValue
);
/**
* [HvGetDeviceExteInfo <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD>Ϣ]
* @param iIndex [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param lpExtInfo [<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD>Ϣ]
* @param iBufLen [<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
HRESULT HvGetDeviceExteInfo(int iIndex, LPSTR lpExtInfo, int iBufLen);
/**
* [HvGetXmlProtocolVersion <EFBFBD><EFBFBD>ȡЭ<EFBFBD><EFBFBD><EFBFBD>]
* @param szIP [<EFBFBD>IP]
* @param pdwVersionType [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
HRESULT HvGetXmlProtocolVersion(char* szIP, DWORD *pdwVersionType);
/**
* [ConnectCamera <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param szIp [<EFBFBD>IP]
* @param wPort [<EFBFBD>˿<EFBFBD>]
* @param hSocket [<EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD>]
* @param iTryTimes [<EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD>]
* @param iReceiveTimeOutMs [<EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD>ʱ <EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
bool ConnectCamera( char *szIp, WORD wPort, int &hSocket, int iTryTimes=0, int iReceiveTimeOutMs = 20000);
/**
* [HvGetRecordImage <EFBFBD>ӽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD><EFBFBD>ͼƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param pbRecordData [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param dwRecordDataLen [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>]
* @param pRecordImag [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
HRESULT HvGetRecordImage(PBYTE pbRecordData, DWORD dwRecordDataLen, RECORD_IMAGE_GROUP_EX* pRecordImag);
/**
* [HvGetRecordImage_Mercury <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD><EFBFBD>ͼƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param szAppendInfo [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ]
* @param pbRecordData [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param dwRecordDataLen [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>]
* @param pcRecordImage [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
HRESULT HvGetRecordImage_Mercury(const char* szAppendInfo, PBYTE pbRecordData, DWORD dwRecordDataLen, RECORD_IMAGE_GROUP_EX* pcRecordImage);
/**
* [HvMakeXmlInfoByString <EFBFBD>жϼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Xml<EFBFBD><EFBFBD>Xml<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Xml<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param fNewProtocol [<EFBFBD>Ƿ<EFBFBD><EFBFBD>µ<EFBFBD>Э<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param inXmlOrStrBuf [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>xml]
* @param nInlen [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֳ<EFBFBD><EFBFBD><EFBFBD>]
* @param szOutXmlBuf [xml<EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param nOutlen [xml<EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
HRESULT HvMakeXmlInfoByString(bool fNewProtocol, const char*inXmlOrStrBuf, int nInlen,
char* szOutXmlBuf, int &nOutlen);
/**
* [HvMakeXmlCmdByString <EFBFBD>жϼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Xml<EFBFBD><EFBFBD>Xml<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Xml<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param fNewProtocol [<EFBFBD>Ƿ<EFBFBD><EFBFBD>µ<EFBFBD>Э<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param inXmlOrStrBuf [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>xml]
* @param nInlen [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֳ<EFBFBD><EFBFBD><EFBFBD>]
* @param szOutXmlBuf [xml<EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param nOutlen [xml<EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
HRESULT HvMakeXmlCmdByString(bool fNewProtocol, const char* inXmlOrStrBuf, int nInlen, char *szOutXmlBuf, int &nOutlen);
/**
* [HvMakeXmlCmdByString <EFBFBD>жϼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Xml<EFBFBD><EFBFBD>Xml<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Xml<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param inXmlOrStrBuf [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>xml]
* @param nInlen [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֳ<EFBFBD><EFBFBD><EFBFBD>]
* @param szOutXmlBuf [xml<EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param nOutlen [xml<EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
HRESULT HvMakeXmlCmdByString( const char* inXmlOrStrBuf, int nInlen, char *szOutXmlBuf, int &nOutlen);
/**
* [HvParseXmlCmdRespRetcode2 <EFBFBD><EFBFBD>XML2.0Э<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>з<EFBFBD><EFBFBD>صĽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ]
* @param szXmlBuf [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><EFBFBD>ص<EFBFBD>xml]
* @param szCmdName [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param nInfoValueName [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param szInfoValueText [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
HRESULT HvParseXmlCmdRespRetcode2(char*szXmlBuf, char* szCmdName,
char* nInfoValueName, char* szInfoValueText);
/**
* [HvParseXmlCmdRespRetcode <EFBFBD><EFBFBD>HvXmlЭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>з<EFBFBD><EFBFBD>صĽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param szXmlBuf [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><EFBFBD>ص<EFBFBD>xml]
* @param szCommand [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
HRESULT HvParseXmlCmdRespRetcode(char* szXmlBuf, char* szCommand);
/**
* [HvParseXmlInfoRespValue <EFBFBD><EFBFBD>HvXmlЭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>ȡִ<EFBFBD>з<EFBFBD><EFBFBD>صĽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ]
* @param szXmlBuf [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˷<EFBFBD><EFBFBD>ص<EFBFBD>xml]
* @param szInfoName [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param nCmdValueName [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param szCmdValueText [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
HRESULT HvParseXmlInfoRespValue(char*szXmlBuf, char* szInfoName,
char* nCmdValueName, char* szCmdValueText);
/**
* [HvSendXmlCmd <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>xml<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param szIP [<EFBFBD>IP]
* @param szCmd [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>xml]
* @param szRetBuf [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>xml<EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param iBufLen [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param piRetLen [ʵ<EFBFBD>ʷ<EFBFBD><EFBFBD>س<EFBFBD><EFBFBD><EFBFBD>]
* @param sktSend [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
HRESULT HvSendXmlCmd(char *szIP, LPCSTR szCmd, LPSTR szRetBuf, INT iBufLen, INT *piRetLen, int sktSend);
/**
* [HvSendXmlCmd <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>xml<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param szCmd [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>xml]
* @param szRetBuf [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>xml<EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param iBufLen [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param piRetLen [ʵ<EFBFBD>ʷ<EFBFBD><EFBFBD>س<EFBFBD><EFBFBD><EFBFBD>]
* @param dwXmlVersion [xmlЭ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param sktSend [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
HRESULT HvSendXmlCmd(LPCSTR szCmd, LPSTR szRetBuf, INT iBufLen, INT* piRetLen, DWORD dwXmlVersion, SOCKET sktSend);
/**
* [ExecXmlExtCmdEx <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>xml<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param szIP [<EFBFBD>IP]
* @param szXmlCmd [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>xml]
* @param szRetBuf [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param iBufLen [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param sktSend [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD>: TRUE ʧ<EFBFBD><EFBFBD>: FALSE]
*/
bool ExecXmlExtCmdEx(char *szIP, char *szXmlCmd, char *szRetBuf, int &iBufLen, int sktSend);
/**
* [ExecXmlExtCmdMercury <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>xml<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param szIP [<EFBFBD>IP]
* @param szXmlCmd [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>xml]
* @param szRetBuf [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param iBufLen [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param sktSend [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD>: TRUE ʧ<EFBFBD><EFBFBD>: FALSE]
*/
bool ExecXmlExtCmdMercury(char* szIP, char* szXmlCmd, char* szRetBuf, int& iBufLen, int sktSend);
/**
* [ExecXmlExtCmd ͨ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>SOCKETִ<EFBFBD><EFBFBD>Xml<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param szXmlCmd [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>xml]
* @param szRetBuf [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param iBufLen [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param sktSend [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD>: TRUE ʧ<EFBFBD><EFBFBD>: FALSE]
*/
bool ExecXmlExtCmd(char* szXmlCmd, char* szRetBuf,
int& iBufLen, SOCKET sktSend);
/**
* [HvSafeCloseThread <EFBFBD><EFBFBD>ȫ<EFBFBD>ر<EFBFBD><EFBFBD>߳<EFBFBD>]
* @param pthreadHandle [<EFBFBD>߳̾<EFBFBD><EFBFBD><EFBFBD>]
*/
void HvSafeCloseThread(pthread_t &pthreadHandle);
/**
* [ForceCloseSocket ǿ<EFBFBD>ƹر<EFBFBD><EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD>]
* @param iNetSocket [<EFBFBD>׽<EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD> 0 ʧ<EFBFBD><EFBFBD> SOCKET_ERROR]
*/
int ForceCloseSocket(int &iNetSocket);
/**
* [Yuv2BMP Yuv<EFBFBD><EFBFBD><EFBFBD><EFBFBD>תΪbmp<EFBFBD><EFBFBD>ʽ]
* @param pbDest [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>BMP<EFBFBD><EFBFBD><EFBFBD>ݵĻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>]
* @param iDestBufLen [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С]
* @param piDestLen [ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С]
* @param pbSrc [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>YUV<EFBFBD><EFBFBD><EFBFBD>ݵĻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>]
* @param iSrcWidth [ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param iSrcHeight [ͼ<EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>;]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
HRESULT Yuv2BMP(
BYTE *pbDest,
int iDestBufLen,
int *piDestLen,
BYTE *pbSrc,
int iSrcWidth,
int iSrcHeight
);
/**
* [Bin2BMP <EFBFBD><EFBFBD>ֵͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>ΪBMP<EFBFBD><EFBFBD>ʽ]
* @param pbBinData [<EFBFBD><EFBFBD>ֵͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param pbBmpData [bmp<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param nBmpLen [bmpʵ<EFBFBD>ʳ<EFBFBD><EFBFBD><EFBFBD>]
*/
void Bin2BMP(PBYTE pbBinData, PBYTE pbBmpData, INT& nBmpLen);
/**
* [HvEnhanceTrafficLight <EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><EFBFBD>ƼӺ<EFBFBD>]
* @param pbSrcImg [ԴͼƬ]
* @param dwiSrcImgDataLen [ԴͼƬ<EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>]
* @param iRedLightCount [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param pbRedLightPos [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>]
* @param pbDestImgBuf [Ŀ<EFBFBD><EFBFBD>ͼƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param dwDestImgBufLen [Ŀ<EFBFBD><EFBFBD>ͼƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param iBrightness [ͼƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ]
* @param iHueThreshold [<EFBFBD><EFBFBD><EFBFBD>ƼӺ<EFBFBD>ɫ<EFBFBD>ȷ<EFBFBD>ֵ]
* @param iCompressRate [<EFBFBD>غ<EFBFBD><EFBFBD><EFBFBD>ͼƬѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @return [description]
*/
HRESULT HvEnhanceTrafficLight(PBYTE pbSrcImg, DWORD dwiSrcImgDataLen, int iRedLightCount,
PBYTE pbRedLightPos, PBYTE pbDestImgBuf, DWORD& dwDestImgBufLen,
INT iBrightness, INT iHueThreshold, INT iCompressRate);
/**
* [HvMakeXmlCmdByString1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>xml]
* @param inXmlOrStrBuf [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param nInlen [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param szOutXmlBuf [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>xml<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param nOutlen [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>xml<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
HRESULT HvMakeXmlCmdByString1(const char* inXmlOrStrBuf, int nInlen,
char* szOutXmlBuf, int& nOutlen);
/**
* [HvMakeXmlCmdByString2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><EFBFBD>2<EFBFBD><EFBFBD>xml]
* @param inXmlOrStrBuf [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param nInlen [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param szOutXmlBuf [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>xml<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param nOutlen [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>xml<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
HRESULT HvMakeXmlCmdByString2(const char* inXmlOrStrBuf, int nInlen,
char* szOutXmlBuf, int& nOutlen);
/**
* [HvMakeXmlCmdByString3 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><EFBFBD>3<EFBFBD><EFBFBD>xml]
* @param inXmlOrStrBuf [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param nInlen [<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param szOutXmlBuf [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>xml<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param nOutlen [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>xml<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @return [<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD>S_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>E_FAIL]
*/
HRESULT HvMakeXmlCmdByString3(const char* inXmlOrStrBuf, int nInlen,
char* szOutXmlBuf, int& nOutlen);
/**
* [GetProtocolVersion <EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD>ȡ<EFBFBD>Э<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
* @param szIP [<EFBFBD>IP]
* @return [Э<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><EFBFBD>]
*/
PROTOCOL_VERSION GetProtocolVersion(char* szIP);
HRESULT HvGetDeviceType(LPCSTR szDeviceIp, WORD wAddPort, PROTOCOL_VERSION sProtocol, CHAR* szDeviceType);
#endif // _HVDEVICEUTILS_H_