
#ifndef _ALPRSDK_H_
#define _ALPRSDK_H_

#ifdef USE_JNI_INTERFACE
#include "AlprCfgMsg.h"
#include "com_zkzh_alpr_jni_AlprSDK.h"
#include "XRect.h"
#else

#ifdef WIN32
#include <Windows.h>
#else
typedef unsigned int    	DWORD;
typedef unsigned char		BYTE;
typedef void* 				LPVOID;
#endif
#include "XRect.h"

#include "logocolor.h"

#endif

/*! \mainpage 软件简介

本部分主要是软件简介以及软件使用方式

本部分分为以下章节:
- \subpage intro	"软件简介"
- \subpage process	"SDK调用流程"
- \subpage function "功能说明"
*/

//-----------------------------------------------------------

/*! \page intro 软件简介
AlprSDK.dll可以显示当前视频，并从车牌识别一体机接收识别结果、和截图数据的开发接口


# 概述
本参考手册说明了SDK提供的功能及其相关用法，其编程模型为：
\image html memo.png
AlprSDK当前版本可以同时创建40个handle，每个handle同一时刻只能连接到一台设备。（当某一句柄关闭后可再次使用该句柄）
*/

//-----------------------------------------------------------

/*! \page process SDK调用流程
SDK调用流程
\image html process.png
* @attention 不需要启动视频时，则不需要调用：启动视频、注册视频重绘回调、关闭视频三个函数。
*/

//-----------------------------------------------------------
/*! \page function 功能说明
SDK功能列表：

* 　　<1>　通过注册车牌回调函数来获取车牌、车牌照片以及抓取时间\n
* 　　<2>　通过注册设备状态回调函数来获取设备在线、辅助相机、道闸开关的状态\n
* 　　<3>　通过注册记录回调函数来获取实时记录\n
* 　　<4>　手动抓图：(1)注册手动抓图回调　　(2)调用启动抓拍函数，可以触发回调\n
* 　　<5>　支持下发、获取、清空黑白名单功能\n
* 　　<6>　支持远程开闸功能\n
* 　　<7>　支持透传：可控制语言和显示屏\n\n

支持的车牌包括：普通蓝牌、黑牌、黄牌、双层黄牌、警车车牌、新式武警车牌、新式军牌、使馆车牌、港澳进出大陆车牌，武警车牌照、新能源车牌、海外车牌（定制开发）\n
\n
*/


#ifdef __cplusplus
extern "C" {
#endif
#ifdef USE_JNI_INTERFACE
#ifdef WIN32
#include <Windows.h>
#endif // WIN32
#ifdef WIN32
	//#define ALPRSDK_CLIET_INTERFACE
#ifdef ALPRSDK_CLIET_INTERFACE
#define ALPRSDK_API __declspec(dllexport)
#else
#define ALPRSDK_API __declspec(dllimport)
#endif // ALPRSDK_CLIET_INTERFACE
#else
#define ALPRSDK_API
#undef WINAPI
#define WINAPI
	//#define BOOL bool
#define TRUE true
#define FALSE false
	typedef unsigned int        UINT;
	typedef void*               HANDLE;
#endif
#else
#define ALPRSDK_CLIET_INTERFACE
#ifdef ALPRSDK_CLIET_INTERFACE
#define ALPRSDK_API __declspec(dllexport)
#else
#define ALPRSDK_API __declspec(dllimport)
#endif
#endif
#include "ErrCode.h"

/*!\addtogroup 宏定义及枚举类型
*  本套SDK所定义的宏以及枚举类型汇总
*  @{
*/

//---------------------------------------------------------------------------
// API Export/Import Macros
//---------------------------------------------------------------------------
/** SDK版本号 */
#ifdef USE_JNI_INTERFACE
#define ALPR_SDK_VER		"1.0.2.31"
#else
#define ALPR_SDK_VER		"1.0.3.18"
#endif
/** 加密长度 */
#define ENCRYPT_LEN			33
/** 序列号长度 */
#define SERIAL_NUMBER_LEN	27
/** 许可内容长度 */
#define LIC_LEN				900
/** 版本号长度 */
#define VER_LEN				33
/** 辅相机数量 */
#define MAXAUXCAMERANUM		(2)
/** 当前支持的最大车牌白名单数量 */
#define MAX_WHITELIST_COUNT			(1024)
/** 当前支持的最大车牌黑名单数量 */
#define MAX_BLACKLIST_COUNT			(1024)
//#define MAX_BLACKLIST_COUNT 8192
//add by caoyanming 2017/11/13 Start
/** 当前支持的最大车牌固定车名单数量 */
#define MAX_FIXEDLIST_COUNT			(8192)
//add by caoyanming 2017/11/13 End

#define MAX_PARK_CODE_LEN	32
#define MAX_URL_LEN			256
#define MAX_COMM_LEN_32		32

#define FUN_LOG_IN_ID		(1)
#define FUN_GET_FUN_LIST	(1)

#ifndef JPG_ID_LENGTH
#define JPG_ID_LENGTH		(20)
#endif

#define ALPR_MACADDR_LEN		(6)

#define MAX_CAR_SPACE_CNT				(3)

	/** 设备支持的功能列表 */
	typedef enum eFunList
	{
		FUN_LOG_ADD_IN_INFO 				= 0,		/**< 出场记录增加入场信息 */
		FUN_CARTEAM_MODE					= 1,		/**< 车队模式 */
		FUN_PLATE_LIST_EXT					= 2,		/**< 车牌名单信息扩展姓名等 */
		FUN_DEV_RECOG_CAR_INFO 				= 3,		/**< 设备识别车特征 */
		FUN_UPLOAD_OFFLINE_RECORD			= 4,		/**< 设备主动上传脱机记录 */
		FUN_UPLOAD_EXT_GATE_VOICE_SCREEN	= 5,		/**< 支持扩展控制道闸、语音、显示屏指令(指令带JpgID) */
		FUN_SCREEN_TYPE						= 6,		/**< 当前设备接入的显示屏类型，显示屏类型参考枚举ScreenType，也可以用于判断是否支持情景模式（>0：支持，否则不支持） */
		FUN_CAR_SPACE						= 7,		/**< 车位相机功能 */
		FUN_MISS_MATCH_RULE					= 8,		/**< 支持允许误识别的匹配规则 */
		FUN_FLOAT_POINT_CHARGE_RULE			= 9,		/**< 收费规则支持浮点型*/
		FUN_SECOND_RECOG_PLATE				= 10,		/**< 具有二次识别功能  */

		FUN_NEURAL_ALGORITHM				= 254,		/**< 是否支持欧洲算法 */
	}eFunList;
	/** 识别的车牌颜色定义 */
    typedef enum ePlateColor
    {
        COLOR_BLACK		= 0,		/**< 黑色 */
        COLOR_GREEN		= 20,		/**< 绿色 */
        COLOR_BLUE		= 30,		/**< 蓝色 */
        COLOR_YELLOW	= 50,		/**< 黄色 */
        COLOR_WHITE		= 255,		/**< 白色 */
    }ePlateColor;
	/** 车牌名单类型定义 */
	typedef enum ePlateListType {
		PL_TYPE_WHITE	= 0,		/**< 白名单 */
		PL_TYPE_BLACK	= 1,		/**< 黑名单 */
		PL_TYPE_FIXED	= 2,		/**< 固定车 */
	}ePlateListType;
	/** 相机识别车牌时的距离定义 */
    typedef enum tInstallDist {
        DistLT35 = 0,			/**< 3.5米以下		*/
        DistLT45,				/**< 3.5米-4.5米	*/
        DistLT5,				/**< 4.5米-5米		*/
        DistLT6,				/**< 5米-6米		*/
        DistMT6,				/**< 6米以上		*/
    }tInstallDist;
	/** 车牌汉字的ID定义 */
    typedef enum tPLATE_SYM_ID
    {
        PLATE_SYM_BEIJING = 0,  /**< 京		*/
        PLATE_SYM_TIANJIN,      /**< 津		*/
        PLATE_SYM_SANXI,        /**< 晋		*/
        PLATE_SYM_HEBEI,        /**< 冀		*/
        PLATE_SYM_MENG,         /**< 蒙		*/
        PLATE_SYM_LIAO,         /**< 辽		*/
        PLATE_SYM_JI,           /**< 吉		*/
        PLATE_SYM_HEI,          /**< 黑		*/
        PLATE_SYM_HU,           /**< 沪		*/
        PLATE_SYM_SU,           /**< 苏		*/
        PLATE_SYM_ZHE,          /**< 浙		*/
        PLATE_SYM_WAN,          /**< 皖		*/
        PLATE_SYM_MIN,          /**< 闽		*/
        PLATE_SYM_JIANGXI,      /**< 赣		*/
        PLATE_SYM_LU,           /**< 鲁		*/
        PLATE_SYM_YU,           /**< 豫		*/
        PLATE_SYM_HUBEI,        /**< 鄂		*/
        PLATE_SYM_XIANG,        /**< 湘		*/
        PLATE_SYM_YUE,          /**< 粤		*/
        PLATE_SYM_GUI,          /**< 桂		*/
        PLATE_SYM_QIONG,        /**< 琼		*/
        PLATE_SYM_CHUAN,        /**< 川		*/
        PLATE_SYM_GUIZHOU,      /**< 贵		*/
        PLATE_SYM_YUN,          /**< 云		*/
        PLATE_SYM_ZANG,         /**< 藏		*/
        PLATE_SYM_SHAN,         /**< 陕		*/
        PLATE_SYM_GANSU,        /**< 甘		*/
        PLATE_SYM_QING,         /**< 青		*/
        PLATE_SYM_NING,         /**< 宁		*/
        PLATE_SYM_XIN,          /**< 新		*/
        PLATE_SYM_CHONGQING,    /**< 渝		*/
    }tPLATE_SYM_ID;
	/** 车牌识别触发方式定义 */
	typedef enum tTriggerMode {
        TriggerByVideo = 0,		/**< 视频触发	*/
        TriggerBySensor,		/**< 地感触发	*/
        TriggerByAll,			/**< 混合触发	*/
    }tTriggerMode;
	/** 车牌识别模式定义 */
    typedef enum tRecogMode {
        RecogBySingleFrame,		/**< 单帧模式		*/ 
        RecogByMultiFrame,		/**< 多帧优选模式	*/
    }tRecogMode;
	/** 车牌识别后的图片上传方式定义 */
    typedef enum tUploadMode {
        UploadByFTP = 0,		/**< FTP上传		*/
        UploadBySDK,			/**< SDK上传		*/
        UploadByJSON,			/**< JSON上传		*/
        UploadByUDisk,			/**< U盘存储		*/
    }tUploadMode;
	/** 车牌识别策略定义 */
    typedef enum tOutputMode {
        OutputAll = 0,				/**< 全部输出		*/
        OutputFilterGoAwayCar,		/**< 过滤驶离的车辆	*/
        OutputFilterComeCloseCar,	/**< 过滤驶离的车辆	*/
    }tOutputMode;
	/** 车牌识别的国家代码定义 */
	typedef enum CountryCode_E
	{
		SPAIN			= 0,	/**< 西班牙		*/
		USA				= 1,	/**< 美国		*/
		MEXICO			= 2,	/**< 墨西哥		*/
		THAILAND		= 3,	/**< 泰国		*/
		ARGENTINA		= 4,	/**< 阿根廷		*/
		SOUTH_AFRICA	= 5,	/**< 南非		*/
		CHILE			= 6,	/**< 智利		*/
		SAUDI			= 7,	/**< 沙特阿拉伯	*/
		COLOMBIA		= 8,	/**< 哥伦比亚	*/
		VIETNAM			= 9,	/**< 越南		*/
		PERU			= 10,	/**< 秘鲁		*/
		TURKEY			= 11,	/**< 土耳其		*/
		UAE				= 12,	/**< 阿拉伯联合酋长国		*/
		BRAZIL			= 13,	/**< 巴西		*/
		MONGOLIA		= 14,	/**< 蒙古		*/
		TAIWAN			= 15,	/**< 台湾		*/
		MACAU			= 16,	/**< 澳门		*/
		EGYPT			= 17,	/**< 埃及		*/
		INDONESIA		= 18,	/**< 印度尼西亚		*/
		MALAYSIA		= 19,	/**< 马来西亚		*/
		IRAN			= 20,	/**< 伊朗		*/
		SOUTH_KOREA		= 21,	/**< 韩国		*/
		JAPAN			= 22,	/**< 日本		*/
		MYANMAR			= 23,	/**< 缅甸		*/
		INDIA			= 24,	/**< 印度		*/
		RUSSIA			= 25,	/**< 俄罗斯		*/
		CAMBODIA		= 26,	/**< 柬埔寨		*/
		BOLIVIA			= 27,	/**< 玻利维亚		*/
		CHINA			= 255	/**< 中国		*/
	}CountryCode_E;
	/** 道闸工作方式定义 */
	typedef enum GateWorkMode
	{
		mOpenByRecog,			/**< 识别即开始			*/
		mColoseByBlackList,		/**< 仅黑名单不开启		*/
		mOpenByWhiteList,		/**< 仅白名单开启		*/
		mOpenByManual,			/**< 上位机开启			*/
	}GateWorkMode;

	/** RS485工作模式定义 */
	typedef enum RS485WorkMode {
		rsModeLEDOutput = 0,	/**< 系统LED显示屏		*/
		rsModeOffRecogOutput,	/**< 脱机识别结果输出	*/
		rsModeOffLEDOutput,		/**< 脱机LED显示屏		*/
	}RS485WorkMode;
	/** RS485波特率定义 */
	typedef enum RS485Bitrate {
		rsBitrate110 = 0,		/**< 波特率0		*/
		rsBitrate300,			/**< 波特率300		*/
		rsBitrate600,			/**< 波特率600		*/
		rsBitrate1200,			/**< 波特率1200		*/
		rsBitrate2400,			/**< 波特率2400		*/
		rsBitrate4800,    		/**< 波特率4800		*/
		rsBitrate9600,			/**< 波特率9600		*/
		rsBitrate14400,			/**< 波特率14400	*/
		rsBitrate19200,			/**< 波特率19200	*/
		rsBitrate38400,			/**< 波特率38400	*/
		rsBitrate57600,			/**< 波特率57600	*/
		rsBitrate115200,		/**< 波特率115200	*/
	}RS485Bitrate;
	/** RS485校验位数定义 */
	typedef enum RS485Databit {
		rsDataBit5 = 0,			/**< 5位有效数据位	*/ 
		rsDataBit6,				/**< 6位有效数据位	*/
		rsDataBit7,				/**< 7位有效数据位	*/
		rsDataBit8,				/**< 8位有效数据位	*/
	}RS485Databit;
	/** RS485校验方式定义 */
	typedef enum RS485Checksum {
		rsChecksumNone = 0,		/**< 无校验			*/
		rsChecksumOdd,			/**< 奇数校验		*/
		rsChecksumEven,			/**< 偶数校验		*/
		rsChecksumMark,			/**< Mark校验		*/
		rsChecksumSpace,        /**< Space校验		*/
	}RS485Checksum;
	/** RS485停止位定义 */
	typedef enum RS485Stopbit {
		rsStopbit1 = 0,			/**< 无停止位		*/
		rsStopbit15,			/**< 1位停止位		*/
		rsStopbit2,				/**< 2位停止位		*/
	}RS485Stopbit;
	/** 客户端类型定义 */
	typedef enum EAPIClientType {
		E_CLIENT_NORMAL = 0,	/**< 普通客户端		*/
		E_CLIENT_DEV_OCX,		/**< Web客户端		*/
		E_CLIENT_DEMO,			/**< Demo客户端		*/
	}EAPIClientType;
	/** 设备类型定义 */
	typedef enum _DEV_TYPE_E
	{
		DEV_DISPLAY_SCREEN = 1,	/**< 显示屏			*/
		DEV_VOICE = 2,			/**< 语音板			*/
		DEV_GATE = 3,			/**< 道闸			*/
	}DEV_TYPE_E;

	/** 相机设备类型定义 */
	typedef enum _LPR_DEV_TYPE_E
	{
		LPR_DEV_UNKNOWN = 0,		/**< 未知设备				*/
		LPR_DEV_JL = 1,				/**< 巨龙车牌设备			*/
		LPR_DEV_GZ = 2,				/**< 感知车牌设备			*/
		LPR_DEV_GZ_CAR_SPACE = 3,	/**< 感知车位设备			*/
	}LPR_DEV_TYPE_E;
	

	/** 国家编码定义 */
	typedef enum _APP_COUNTRY_CODE_E
	{
		//CC_CA = 1,		/**< 加拿大					*/
		CC_US = 1,			/**< 美国					*/
		CC_KZ = 7,			/**< 哈萨克斯坦				*/
		//CC_RU = 7,		/**< 俄罗斯					*/
		CC_EG = 20,		/**< 埃及					*/
		CC_ZA = 27,		/**< 南非					*/
		CC_GR = 30,		/**< 希腊					*/
		CC_NL = 31,		/**< 荷兰					*/
		CC_BE = 32,		/**< 比利时					*/
		CC_FR = 33,		/**< 法国					*/
		CC_ES = 34,		/**< 西班牙					*/
		CC_IT = 39,		/**< 意大利					*/
		CC_UK = 44,		/**< 英国					*/
		CC_RO = 40,		/**< 罗马尼亚				*/
		CC_CH = 41,		/**< 瑞士					*/
		CC_AT = 43,		/**< 奥地利					*/
		CC_DK = 45,		/**< 丹麦					*/
		CC_SE = 46,		/**< 瑞典					*/
		CC_NO = 47,		/**< 挪威					*/
		CC_PL = 48,		/**< 波兰					*/
		CC_PE = 51,		/**< 秘鲁					*/
		CC_MX = 52,		/**< 墨西哥					*/
		CC_CU = 53,		/**< 古巴					*/
		CC_AR = 54,		/**< 阿根廷					*/
		CC_BR = 55,		/**< 巴西					*/
		CC_CL = 56,		/**< 智利					*/
		CC_CO = 57,		/**< 哥伦比亚				*/
		CC_VE = 58,		/**< 委内瑞拉				*/
		CC_MY = 60,		/**< 马来西亚				*/
		CC_AU = 61,		/**< 澳大利亚				*/
		CC_ID = 62,		/**< 印度尼西亚				*/
		CC_PH = 63,		/**< 菲律宾					*/
		CC_NZ = 64,		/**< 新西兰					*/
		CC_SG = 65,		/**< 新加坡					*/
		CC_TH = 66,		/**< 泰国					*/
		CC_JP = 81,		/**< 日本					*/
		CC_KR = 82,		/**< 韩国					*/
		CC_VN = 84,		/**< 越南					*/
		CC_CN = 86,		/**< 中国					*/
		CC_TR = 90,		/**< 土耳其					*/
		CC_IND = 91,		/**< 印度					*/
		CC_PK = 92,		/**< 巴基斯坦				*/
		CC_AF = 93,		/**< 阿富汗					*/
		CC_LK = 94,		/**< 斯里兰卡				*/
		CC_MM = 95,		/**< 缅甸					*/
		CC_IR = 98,		/**< 伊朗					*/
		CC_MA = 210,		/**< 摩洛哥					*/
		//CC_EH = 210,		/**< 西撒哈拉				*/
		CC_DZ = 213,		/**< 阿尔及利亚				*/
		CC_TN = 216,		/**< 突尼斯					*/
		CC_LY = 218,		/**< 利比亚					*/
		CC_GM = 220,		/**< 冈比亚					*/
		CC_SN = 221,		/**< 塞内加尔				*/
		CC_MR = 222,		/**< 毛里塔尼亚				*/
		CC_ML = 223,		/**< 马里					*/
		CC_GN = 224,		/**< 几内亚					*/
		CC_CI = 225,		/**< 科特迪瓦				*/
		CC_BF = 226,		/**< 布基纳法索				*/
		CC_NE = 227,		/**< 尼日尔					*/
		CC_TG = 228,		/**< 多哥					*/
		CC_BJ = 229,		/**< 贝宁					*/
		CC_MU = 230,		/**< 毛里求斯				*/
		CC_LR = 231,		/**< 利比里亚				*/
		CC_SL = 232,		/**< 塞拉利昂				*/
		CC_GH = 233,		/**< 加纳					*/
		CC_NG = 234,		/**< 尼日利亚				*/
		CC_TD = 235,		/**< 乍得					*/
		CC_CF = 236,		/**< 中非共和国				*/
		CC_CM = 237,		/**< 喀麦隆					*/
		CC_CV = 238,		/**< 佛得角					*/
		CC_ST = 239,		/**< 圣多美和普林西比		*/
		CC_GQ = 240,		/**< 赤道几内亚				*/
		CC_GA = 241,		/**< 加蓬					*/
		CC_CD = 242,		/**< 刚果					*/
		//CC_CG = 242,		/**< 刚果民主共和国			*/
		CC_AO = 244,		/**< 安哥拉					*/
		CC_GW = 245,		/**< 几内亚比绍				*/
		CC_SD = 249,		/**< 苏丹					*/
		CC_RW = 250,		/**< 卢旺达					*/
		CC_ET = 251,		/**< 埃塞俄比亚				*/
		CC_SO = 252,		/**< 索马里					*/
		CC_DJ = 253,		/**< 吉尔吉斯斯坦			*/
		CC_KE = 254,		/**< 肯尼亚					*/
		CC_TZ = 255,		/**< 坦桑尼亚				*/
		CC_UG = 256,		/**< 乌干达					*/
		CC_BI = 257,		/**< 布隆迪					*/
		CC_MZ = 258,		/**< 莫桑比克				*/
		CC_ZM = 260,		/**< 赞比亚					*/
		CC_MG = 261,		/**< 马达加斯加				*/
		CC_RE = 262,		/**< 留尼旺					*/
		CC_ZW = 263,		/**< 津巴布韦				*/
		CC_NA = 264,		/**< 纳米比亚				*/
		CC_MW = 265,		/**< 马拉维					*/
		CC_LS = 266,		/**< 莱索托					*/
		CC_BW = 267,		/**< 博茨瓦纳				*/
		CC_SZ = 268,		/**< 斯威士兰				*/
		CC_KM = 269,		/**< 科摩罗					*/
		//CC_YT = 269,		/**< 马约特					*/
		CC_ER = 291,		/**< 厄立特里亚				*/
		CC_AW = 297,		/**< 阿鲁巴					*/
		CC_HU = 336,		/**< 匈牙利					*/
		CC_DE = 349,		/**< 德国					*/
		CC_PT = 351,		/**< 葡萄牙					*/
		CC_LU = 352,		/**< 卢森堡					*/
		CC_IE = 353,		/**< 爱尔兰					*/
		CC_IS = 354,		/**< 冰岛					*/
		CC_AL = 355,		/**< 阿尔巴尼亚				*/
		CC_MT = 356,		/**< 马耳他					*/
		CC_CYP = 357,		/**< 塞浦路斯				*/
		CC_FI = 358,		/**< 芬兰					*/
		CC_BG = 359,		/**< 保加利亚				*/
		CC_LT = 370,		/**< 立陶宛					*/
		CC_LV = 371,		/**< 拉脱维亚				*/
		CC_EE = 372,		/**< 爱沙尼亚				*/
		CC_MD = 373,		/**< 摩尔多瓦				*/
		CC_AM = 374,		/**< 亚美尼亚				*/
		CC_BY = 375,		/**< 白俄罗斯				*/
		CC_AD = 376,		/**< 安道尔					*/
		CC_UA = 380,		/**< 乌克兰					*/
		CC_RS = 381,		/**< 塞尔维亚				*/
		CC_ME = 382,		/**< 黑山共和国				*/
		CC_HR = 385,		/**< 克罗地亚				*/
		CC_SI = 386,		/**< 斯洛文尼亚				*/
		CC_BA = 387,		/**< 波斯尼亚和黑塞哥维那	*/
		CC_MK = 389,		/**< 马其顿					*/
		CC_VA = 396,		/**< 梵蒂冈					*/
		CC_CZ = 420,		/**< 捷克共和国				*/
		CC_SK = 421,		/**< 斯洛伐克				*/
		CC_BZ = 501,		/**< 伯利兹					*/
		CC_GT = 502,		/**< 危地马拉				*/
		CC_SV = 503,		/**< 萨尔瓦多				*/
		CC_HN = 504,		/**< 洪都拉斯				*/
		CC_NI = 505,		/**< 尼加拉瓜				*/
		CC_CR = 506,		/**< 哥斯达黎加				*/
		CC_PA = 507,		/**< 巴拿马					*/
		CC_HT = 509,		/**< 海地					*/
		CC_GP = 590,		/**< 瓜德罗普岛				*/
		CC_BO = 591,		/**< 玻利维亚				*/
		CC_GY = 592,		/**< 圭亚那					*/
		CC_EC = 593,		/**< 厄瓜多尔				*/
		CC_GF = 594,		/**< 法属圭亚那				*/
		CC_PY = 595,		/**< 巴拉圭					*/
		CC_MQ = 596,		/**< 马提尼克				*/
		CC_SR = 597,		/**< 苏里南					*/
		CC_UY = 598,		/**< 乌拉圭					*/
		CC_AN = 599,		/**< 荷属安的列斯			*/
		CC_GU = 671,		/**< 关岛					*/
		CC_TL = 670,		/**< 东帝汶					*/
		CC_BN = 673,		/**< 文莱达鲁萨兰国			*/
		CC_NR = 674,		/**< 瑙鲁					*/
		CC_PG = 675,		/**< 巴布亚新几内亚			*/
		CC_TO = 676,		/**< 汤加					*/
		CC_SB = 677,		/**< 所罗门群岛				*/
		CC_VU = 678,		/**< 瓦努阿图				*/
		CC_FJ = 679,		/**< 斐济					*/
		CC_CK = 682,		/**< 库克群岛				*/
		CC_WS = 685,		/**< 萨摩亚					*/
		CC_KI = 686,		/**< 基里巴斯				*/
		CC_NC = 687,		/**< 新喀里多尼亚			*/
		CC_TV = 688,		/**< 图瓦卢					*/
		CC_PF = 689,		/**< 法属波利尼西亚			*/
		CC_FM = 691,		/**< 密克罗尼西亚			*/
		CC_MH = 692,		/**< 马绍尔群岛				*/
		CC_KP = 850,		/**< 朝鲜					*/
		CC_HK = 852,		/**< 香港					*/
		CC_MO = 853,		/**< 澳门					*/
		CC_KH = 855,		/**< 柬埔寨					*/
		CC_LA = 856,		/**< 老挝					*/
		CC_BD = 880,		/**< 孟加拉国				*/
		CC_TW = 886,		/**< 台湾					*/
		CC_MV = 961,		/**< 马尔代夫				*/
		CC_LB = 962,		/**< 黎巴嫩					*/
		CC_JO = 963,		/**< 约旦					*/
		CC_SY = 964,		/**< 叙利亚					*/
		CC_IQ = 965,		/**< 伊拉克					*/
		CC_KW = 966,		/**< 科威特					*/
		CC_SA = 967,		/**< 沙特阿拉伯				*/
		CC_YE = 968,		/**< 也门					*/
		CC_OM = 969,		/**< 阿曼					*/
		CC_PS = 970,		/**< 巴勒斯坦				*/
		CC_AE = 972,		/**< 阿拉伯联合酋长国		*/
		CC_IL = 973,		/**< 以色列					*/
		CC_BH = 974,		/**< 巴林					*/
		CC_QA = 975,		/**< 卡塔尔					*/
		CC_BT = 976,		/**< 不丹					*/
		CC_MN = 977,		/**< 蒙古					*/
		CC_NP = 978,		/**< 尼泊尔					*/
		CC_TJ = 992,		/**< 塔吉克斯坦				*/
		CC_TM = 993,		/**< 土库曼斯坦				*/
		CC_AZ = 994,		/**< 阿塞拜疆				*/
		CC_GE = 995,		/**< 格鲁吉亚				*/
		CC_KG = 996,		/**< 吉布提					*/
		CC_UZ = 998,		/**< 乌兹别克斯坦			*/
		CC_BB = 1809,		/**< 巴巴多斯				*/
		//CC_BS = 1809,	/**< 巴哈马					*/
		//CC_PR = 1809,	/**< 波多黎各				*/
		//CC_DO = 1809,	/**< 多明尼加共和国			*/
		//CC_GD = 1809,	/**< 格林纳达				*/
		//CC_LC = 1809,	/**< 圣卢西亚				*/
		//CC_VC = 1809,	/**< 圣文森特				*/
		//CC_TT = 1809,	/**< 特立尼达和多巴哥		*/
		//CC_JM = 1809,	/**< 牙买加					*/
		//CC_VG = 1809,	/**< 英属维尔京群岛			*/

		CC_NEURAL_CC = 50000,	/**< neural算法的标识			*/
	}COUNTRY_CODE_E;
	//end
	/** ISP切换方式定义 */
	typedef enum _ImageSwitchType_E_
	{
		PHOTOSENSITIVE_THRESHOLD = 0,	/**< 光敏阀值切换		*/
		PERIOD = 1,						/**< 时间段切换			*/
	}ImageSwitchType_E;

	//add by carl 20171103
	/** 脱机方式定义 */
	typedef enum _OFFLINE_LEVEL_E
	{
		OFFLINE_LEVEL_NONE = 0x00,					/**< 关闭脱机功能		*/
		OFFLINE_LEVEL_SD_SAVE_LOG = 0x01,			/**< 保存记录到SD卡		*/
		OFFLINE_LEVEL_FLASH_SAVE_LOG = 0x02,		/**< 保存记录到FLASH	*/
		OFFLINE_LEVEL_SD_SAVE_JPG = 0x04,			/**< 保存图片到SD卡		*/
		OFFLINE_LEVEL_ALL = 0xFF,					/**< 打开脱机所有功能	*/
	}OFFLINE_LEVEL_E;
	//end add by carl 20171103

	//add by fangzx 20170708
	/** 道闸开启方式定义 */
	typedef enum _OPEN_GATE_TYPE_E
	{
		MANUAL_OPEN = 0,							/**< 人工开闸		*/
		AUTO_OPEN = 1,								/**< 自动开闸		*/
	}OPEN_GATE_TYPE_E;
	/** 启动方式定义 */
	typedef enum _ENABLED_TYPE_E
	{
		NOT_ENABLED = 0,							/**< 不启用或不显示		*/
		ENABLED = 1,								/**< 启用或显示			*/
	}ENABLED_TYPE_E;
	/** 车场出入口定义 */
	typedef enum _PARK_IN_OUT_E
	{
		PARK_IN = 0,								/**< 车场入口		*/
		PAKR_OUT = 1,								/**< 车场出口		*/
	}PARK_IN_OUT_E;
	/** 在线脱机定义 */
	typedef enum _ONLINE_MODE_E
	{
		OFFLINE_MODE = 0,							/**< 脱机			*/
		ONLINE_MODE = 1,							/**< 在线			*/
	}ONLINE_MODE_E;
	//add by fangzx 20170701
	/** 数据表定义 */
	typedef enum _DATA_TABLE_TYPE_E
	{
		FCT_TEMP_CAR_CHARGE_RULE = 3,				/**< 临时车收费规则（TempCarChargeRule）	*/
		FCT_GEN_CHARGE_RULE = 4,					/**< 通用收费规则（GenChargeRule）			*/
		FCT_RECORD_IN_OUT_LOG = 5,					/**< 记录表（RecordLog）					*/
		FCT_CHARGE_LOG = 7,							/**< 收费表（ChargeLog）					*/

		FCT_MODEL_PARAM = 8,						/**< 模型参数（ModelParam）					*/

	}DATA_TABLE_TYPE_E;
	/** 补光灯模式定义 */
	typedef enum _E_LIGHT_MODE_
	{
		E_LIGHT_MODE_INVALID = 0,
		E_LIGHT_MODE_MANU = 1,						/**< 手动补光		*/
		E_LIGHT_MODE_AUTO = 2,						/**< 自动补光		*/
		E_LIGHT_MODE_AS_TIME = 3,					/**< 按时间调节		*/
	}ELightMode;

	/** 曝光模式定义 */
	typedef enum _E_EXPOSURE_MODE_
	{
		E_EXPOSURE_MODE_INVALID = 0,				/**< 无效曝光模式		*/
		E_EXPOSURE_MODE_MANU = 1,					/**< 手动曝光模式		*/
		E_EXPOSURE_MODE_AUTO = 2,					/**< 自动曝光模式		*/
	}EExposureMode;
	/** 曝光运行模式定义 */
	typedef enum _E_EXPOSURE_RUN_MODE_
	{
		E_EXPOSURE_RUN_MODE_INVALID = 0,			/**< 无效曝光运行模式			*/
		E_EXPOSURE_RUN_MODE_FIX = 1,				/**< 固定曝光运行模式			*/
		E_EXPOSURE_RUN_MODE_AUTO = 2,				/**< 自动调节曝光运行模式		*/
		E_EXPOSURE_RUN_MODE_AS_TIME = 3,			/**< 按时间调节曝光运行模式		*/
	}EExposureRunMode;
	/** 模型参数类型定义 */
	typedef enum _E_MODEL_PARAM_TYPE_
	{
		E_MODEL_PARAM_TYPE_INVALID = 0,
		E_MODEL_PARAM_TYPE_LIGHT_AS_SEN = 1,		/**< 补光参数			*/
		E_MODEL_PARAM_TYPE_IMAGE = 2,				/**< 图像参数			*/
	}EModelParamType;

	/** 道闸的开关状态 */
	typedef enum _GATE_SWITCH_STATUS_E
	{
		GATE_CLOSED = 0,							/**< 道闸关到位			*/
		GATE_CLOSING = 1,							/**< 道闸关闸中			*/
		GATE_OPENING = 2,							/**< 道闸开闸中			*/
		GATE_OPENED = 3,							/**< 道闸开到位			*/
		GATE_STOP = 4,								/**< 中途停闸			*/
		GATE_SWITCH_NONE = 255,						/**< 无状态			*/
	}GATE_SWITCH_STATUS_E;

	/** 地感状态 */
	typedef enum _FEEL_STATUS_E
	{
		FEEL_NONE = 0,								/**< 无地感				*/
		FEEL_HAVE = 1,								/**< 有地感				*/
		FEEL_STATUS_NO = 255,						/**< 无状态				*/
	}FEEL_STATUS_E;

	/** 道闸运行状态 */
	typedef enum _GATE_RUN_STATUS_E
	{
		GATE_NORMAL = 0,							/**< 道闸正常运行		*/
		GATE_OPEN_TIMEOUT = 1,						/**< 道闸开超时			*/
		GATE_OFF_TIMEOUT = 2,						/**< 道闸关超时			*/
		GATE_RUN_NONE = 255,						/**< 无状态			*/
	}GATE_RUN_STATUS_E;

	/** SD卡状态信息定义 */
	typedef enum _SDCard_OpType_E
	{
		SD_MOUNT = 0,								/**< 挂载SD卡			*/
		SD_UMOUNT = 1,								/**< 卸载SD卡			*/
		SD_FORMAT = 2,								/**< 格式化SD卡			*/
		SD_CAPACITY = 3,							/**< 获取SD卡容量		*/
	}SDCard_OpType_E;

	//add by caoyanming 2017/10/12 Start
	/** 显示屏类型定义 */
	typedef enum ScreenType
	{
		SIGNLE_COLOR_SCREEN = 0,					/**< 单色屏			*/
		DOUBLE_COLOR_TWO_LINES_SCREEN,				/**< 双色双行屏		*/
		DOUBLE_COLOR_FOUR_LINES_SCREEN				/**< 双色四行屏		*/
	}ScreenType;
	/** 显示屏颜色定义 */
	typedef enum ScreenShowColor
	{
		SCREEN_COLOR_RED = 0,						/**< 显示数据颜色为红色		*/
		SCREEN_COLOR_GREEN 							/**< 显示数据颜色为绿色		*/
	}ScreenShowColor;

	/** 临时车收费模式定义 */
	typedef enum _E_CHARGE_MODE_
	{
		E_CHARGE_MODE_TIMEZONE = 1,					/**< 按时间段收费			*/
		E_CHARGE_MODE_PERIOD = 2,					/**< 按周期收费				*/
	}EChargeMode;
	/** 事件类型定义 */
	typedef enum _PARK_EVENT_
	{
		E_DEV_EVENT_START 			= 100,			/**< 事件开始				*/
		E_WHITE_LIST_CAR 			= 101,			/**< 白名单					*/
		E_BLACK_LIST_CAR_REFUSED 	= 102,			/**< 黑名单禁止入场			 */
		E_TEMP_CAR 					= 103,			/**< 临时车					*/
		E_TEMP_CAR_REFUSED 			= 104,			/**< 临时车禁止入场			 */
		E_WHITE_TO_TEMP_CAR 		= 105,			/**< 白名单转临时车			 */
		E_WHITE_EXPIRED 			= 106,			/**< 白名单过期				 */
		E_TEMP_CAR_NO_MATCH_IN 		= 107,			/**< 临时车不能匹配			 */
		E_TEMP_CAR_MIN_CHARGE 		= 108,			/**< 临时车最低收费			 */
		E_FIXED_LIST_CAR 			= 109,			/**< 固定车名单				 */
		E_FIXED_TO_TEMP_CAR 		= 110,			/**< 固定车名单转临时车		  */
		E_FIXED_EXPIRED 			= 111,			/**< 固定车过期				 */
		E_SERVER_COMM_FAIL 			= 112,			/**< 与服务器通讯失败		  */
	}ParkEvent;

#ifdef USE_JNI_INTERFACE
	typedef enum _N_COUNTRY_CODE
	{
		/** 欧洲 */
		LOC_CODE_ESP = 101,  /**< Spain								*/
		LOC_CODE_PRT = 102,  /**< Portugal							*/
		LOC_CODE_FRA = 103,  /**< France							*/
		LOC_CODE_ITA = 104,  /**< Italy								*/
		LOC_CODE_GBR = 105,  /**< United Kingdom					*/
		LOC_CODE_GRC = 106,  /**< Greece							*/
		LOC_CODE_IRL = 107,  /**< Ireland (ROI)						*/
		LOC_CODE_DEU = 108,  /**< Germany							*/
		LOC_CODE_AND = 109,  /**< Andorra							*/
		LOC_CODE_POL = 110,  /**< Poland							*/
		LOC_CODE_BGR = 111,  /**< Bulgaria							*/
		LOC_CODE_NLD = 112,  /**< Netherlands						*/
		LOC_CODE_EST = 113,  /**< Estonia							*/
		LOC_CODE_BIH = 114,  /**< Bosnia and Herzegovina			*/
		LOC_CODE_ROU = 115,  /**< Romania							*/
		LOC_CODE_BEL = 116,  /**< Belgium							*/
		LOC_CODE_NOR = 117,  /**< Norway							*/
		LOC_CODE_DNK = 118,  /**< Denmark							*/
		LOC_CODE_SWE = 119,  /**< Sweden							*/
		LOC_CODE_FIN = 120,  /**< Finland							*/
		LOC_CODE_GBZ = 121,  /**< Gibraltar							*/
		LOC_CODE_CHE = 122,  /**< Switzerland						*/
		LOC_CODE_AUT = 124,  /**< Austria							*/
		LOC_CODE_SVN = 127,  /**< Slovenia							*/
		LOC_CODE_HUN = 128,  /**< Hungary							*/

		/** 南美以及中美*/
		LOC_CODE_CHL = 201,  /**< Chile								*/
		LOC_CODE_COL = 202,  /**< Colombia							*/
		LOC_CODE_BRA = 203,  /**< Brazil							*/
		LOC_CODE_ARG = 204,  /**< Argentina							*/
		LOC_CODE_MEX = 205,  /**< Mexico							*/
		LOC_CODE_ECU = 206,  /**< Ecuador							*/
		LOC_CODE_VEN = 207,  /**< Venezuela							*/
		LOC_CODE_PER = 208,  /**< Peru								*/
		LOC_CODE_SLV = 209,  /**< El Salvador						*/
		LOC_CODE_BOL = 210,  /**< Bolivia							*/
		LOC_CODE_URY = 211,  /**< Uruguay							*/
		LOC_CODE_GTM = 212,  /**< Guatemala							*/
		LOC_CODE_PAN = 215,  /**< Panama							*/
		LOC_CODE_PRY = 216,  /**< Paraguay							*/
		LOC_CODE_CRI = 217,  /**< Costa Rica						*/
		LOC_CODE_DOM = 218,  /**< Dominican Republic				*/
		LOC_CODE_HND = 219,  /**< Honduras							*/
		LOC_CODE_NIC = 220,  /**< Nicaragua							*/
		LOC_CODE_BMU = 221,  /**< Bermuda							*/
		LOC_CODE_TTO = 222,  /**< Trinidad and Tobago				*/

		/** 亚洲 */
		LOC_CODE_RUS = 301,  /**< Russia							*/
		LOC_CODE_TUR = 302,  /**< Turkey							*/
		LOC_CODE_VNM = 303,  /**< Vietnam							*/
		LOC_CODE_IDN = 304,  /**< Indonesia							*/
		LOC_CODE_PHL = 305,  /**< Philippines						*/
		LOC_CODE_MYS = 306,  /**< Malaysia							*/
		LOC_CODE_SGP = 307,  /**< Singapore							*/
		LOC_CODE_ISR = 308,  /**< Israel							*/
		LOC_CODE_LBN = 309,  /**< Lebanon							*/
		LOC_CODE_HKG = 310,  /**< Hong-Kong							*/
		LOC_CODE_MAC = 311,  /**< Macau								*/
		LOC_CODE_IND = 312,  /**< India								*/
		LOC_CODE_TWN = 313,  /**< Taiwan							*/
		LOC_CODE_BHR = 314,  /**< Bahrain							*/

		/** 非洲 */
		LOC_CODE_ZAF = 401,  /**< South Africa						*/
		LOC_CODE_MAR = 402,  /**< Morocco							*/
		LOC_CODE_TUN = 403,  /**< Tunisia							*/
		LOC_CODE_AGO = 404,  /**< Angola							*/
		LOC_CODE_SEN = 405,  /**< Senegal							*/
		LOC_CODE_NGA = 406,  /**< Nigeria							*/
		LOC_CODE_UGA = 407,  /**< Uganda							*/

		/** 北美（主要是美国和加拿大）*/
		LOC_CODE_USA_WA = 501,  /**< Washington (USA)				*/
		LOC_CODE_USA_FL = 502,  /**< Florida (USA)					*/
		LOC_CODE_USA_MS = 503,  /**< Mississippi (USA)				*/
		LOC_CODE_USA_NY = 504,  /**< New York (USA)					*/
		LOC_CODE_USA_TX = 505,  /**< Texas (USA)					*/
		LOC_CODE_USA_MA = 506,  /**< Massachusetts (USA)			*/
		LOC_CODE_USA_IL = 507,  /**< Illinois (USA)					*/
		LOC_CODE_USA_CA = 508,  /**< California (USA)				*/
		LOC_CODE_USA_OK = 509,  /**< Oklahoma (USA)					*/
		LOC_CODE_USA_LA = 510,  /**< Louisiana (USA)				*/
		LOC_CODE_USA_NM = 511,  /**< New Mexico (USA)				*/
		LOC_CODE_USA_AR = 512,  /**< Arkansas (USA)					*/
		LOC_CODE_USA_NJ = 513,  /**< New Jersey (USA)				*/
		LOC_CODE_USA_DC = 514,  /**< District of Columbia (USA)		*/
		LOC_CODE_USA_IN = 515,  /**< Indiana (USA)					*/
		LOC_CODE_USA_ME = 516,  /**< Maine (USA)					*/
		LOC_CODE_USA_NE = 517,  /**< Nebraska (USA)					*/
		LOC_CODE_USA_MO = 518,  /**< Missouri (USA)					*/
		LOC_CODE_USA_NV = 519,  /**< Nevada (USA)					*/
		LOC_CODE_USA_MI = 520,  /**< Michigan (USA)					*/
		LOC_CODE_USA_VA = 521,  /**< Virginia (USA)					*/
		LOC_CODE_USA_NC = 522,  /**< North Carolina (USA)			*/
		LOC_CODE_USA_GA = 523,  /**< Georgia (USA)					*/
		LOC_CODE_USA_PA = 524,  /**< Pennsylvania (USA)				*/
		LOC_CODE_USA_AK = 525,  /**< Alaska (USA)					*/
		LOC_CODE_USA_MN = 526,  /**< Minnesota (USA)				*/
		LOC_CODE_USA_KY = 527,  /**< Kentucky (USA)					*/
		LOC_CODE_USA_ND = 528,  /**< North Dakota (USA)				*/
		LOC_CODE_USA_OH = 529,  /**< Ohio (USA)						*/
		LOC_CODE_USA_CO = 530,  /**< Colorado (USA)					*/
		LOC_CODE_USA_AZ = 531,  /**< Arizona (USA)					*/
		LOC_CODE_USA_UT = 532,  /**< Utah (USA)						*/
		LOC_CODE_USA_WV = 533,  /**< West Virginia (USA)			*/
		LOC_CODE_USA_CT = 534,  /**< Connecticut (USA)				*/
		LOC_CODE_USA_HI = 535,  /**< Hawaii (USA)					*/
		LOC_CODE_USA_IA = 536,  /**< Iowa (USA)						*/
		LOC_CODE_USA_KS = 537,  /**< Kansas (USA)					*/
		LOC_CODE_USA_SC = 538,  /**< South Carolina (USA)			*/
		LOC_CODE_USA_OR = 539,  /**< Oregon (USA)					*/
		LOC_CODE_USA_MT = 540,  /**< Montana (USA)					*/
		LOC_CODE_USA_AL = 541,  /**< Alabama (USA)					*/
		LOC_CODE_USA_TN = 542,  /**< Tennessee (USA)				*/
		LOC_CODE_USA_RI = 543,  /**< Rhode Island (USA)				*/
		LOC_CODE_USA_NH = 544,  /**< New Hampshire (USA)			*/
		LOC_CODE_USA_DE = 545,  /**< Delaware (USA)					*/
		LOC_CODE_USA_VT = 546,  /**< Vermont (USA)					*/
		LOC_CODE_USA_WI = 547,  /**< Wisconsin (USA)				*/
		LOC_CODE_USA_SD = 548,  /**< South Dakota (USA)				*/
		LOC_CODE_USA_MD = 549,  /**< Maryland (USA)					*/
		LOC_CODE_USA_WY = 550,  /**< Wyoming (USA)					*/
		LOC_CODE_USA_ID = 551,  /**< Idaho (USA)					*/
		LOC_CODE_CAN 	= 561,	/**< Canada							*/

	}N_COUNTRY_CODE;
#endif

	// add by wangzy 2018-11-08 Start
	/** 变焦控制命令 */
	typedef enum _Zoom_Ctl_Cmd_
	{
		ZKZH_ZOOM_IN = 0, /**< 焦距以速度 stepSpeed 放大 */
		ZKZH_ZOOM_OUT    /**< 焦距以速度 stepSpeed 缩小 */
	}ZoomCtlCmd;

	/** 对焦控制命令 */
	typedef enum _Focus_Ctl_Cmd_
	{
		ZKZH_FOCUS_FAR = 0, /**< 焦点以速度 stepSpeed 前调 */
		ZKZH_FOCUS_NEAR    /**< 焦点以速度 stepSpeed 后调 */
	}FocusCtlCmd;
	// add by wangzy 2018-11-08 End

	/** 情景模式 */
	typedef enum _SCENE_MODE_E
	{
		ORDINARY_MODE = 0,						/**< 普通模式 */
		MALL_MODE = 1,							/**< 商业模式 */
		COMMUNITY_MODE = 2,						/**< 小区物业模式 */
		SPECIAL_MODE = 3,						/**< 特殊场合，如医院等 */
	}SCENE_MODE_E;

	/** 车位状态 */
	typedef enum _CS_EVENT_TYPE_E
	{
		CS_EVENT_DISABLE = 1,		//车位禁用
		CS_EVENT_EMPTY = 2,			//空车位
		CS_EVENT_HAVE_CAR = 3,		//车位有车
		CS_EVENT_1_OCCUPY_N = 4,	//单车占多车位
		CS_EVENT_NO_LIC_CAR = 5,	//无牌车

	}CS_EVENT_TYPE_E;


/** @} */

/*!\addtogroup 结构体类型
*  本套SDK所定义的所有结构体类型汇总

*  @{
*/
	/**
	*	
	* @brief 识别到的车牌结果结构
	*/
	typedef struct tagPLATERESULT
	{
		unsigned char    szLicense[24];		/**< 车牌号码字符										*/
		int              nLetterCount;		/**< 车牌号码字符数量									*/
		float            fConfidence;		/**< 车牌的可信度,取值范围[1,100]. 值越小，可信度越高	*/
		XRect            rect;				/**< 车牌位置信息										*/
		unsigned char    plateColor;		/**< 车牌颜色，取值请参考ePlateColor					*/
		unsigned char    bDoublePlates;		/**< 是否双层车牌										*/
		unsigned char    nDirection : 3;	/**< 运动方向，取值请参考MotionDir						*/	
		unsigned char	 bFakePlate : 1;	/**< 假车牌												*/
		unsigned char	 bAlarmPlate : 1;	/**< 虚警车牌											*/
		unsigned char    bSecondRecog: 1;	/**< 相机二次识别记录									*/
		unsigned char    nReserve : 2;		/**< 保留字段位											*/
		unsigned char    bReserve[1];		/**< 保留字段											*/
		int				 nTypeResult;		/**< 设备端识别的车型：大小车							*/
		unsigned char    reserve[28];		/**< 保留字段											*/
	} PLATERESULT;

	//84bytes
	typedef struct tagPLATERESULTOld
	{
		unsigned char    szLicense[24];		/**< 车牌号码字符										*/
		int              nLetterCount;		/**< 车牌号码字符数量									*/
		float            fConfidence;		/**< 车牌的可信度,取值范围[1,100]. 值越小，可信度越高	*/
		XRect            rect;				/**< 车牌位置信息										*/
		unsigned char    plateColor;		/**< 车牌颜色，取值请参考ePlateColor					*/
		unsigned char    bDoublePlates;		/**< 是否双层车牌										*/
		unsigned char    nDirection : 3;	/**< 运动方向，取值请参考MotionDir						*/
		unsigned char	 bFakePlate : 1;	/**< 假车牌												*/
		unsigned char	 bAlarmPlate : 1;	/**< 虚警车牌											*/
		unsigned char    nReserve : 3;		/**< 保留字段位											*/
		unsigned char    reserve[33];		/**< 保留字段											*/
	} PLATERESULTOld;


	/**
	*	
	* @brief 识别到的车牌结果结构
	*/
	typedef struct tagCARSPACEINFO
	{
		unsigned char    szLicense[24];		/**< 车牌号码字符										*/
		int              nLetterCount;		/**< 车牌号码字符数量									*/
		float            fConfidence;		/**< 车牌的可信度,取值范围[1,100]. 值越小，可信度越高	*/
		XRect            rect;				/**< 车牌位置信息										*/
		unsigned char    plateColor;		/**< 车牌颜色，取值请参考ePlateColor					*/
		unsigned char    bDoublePlates;		/**< 是否双层车牌										*/
		unsigned char    nDirection : 3;	/**< 运动方向，取值请参考MotionDir						*/	
		unsigned char	 bFakePlate : 1;	/**< 假车牌												*/
		unsigned char	 bAlarmPlate : 1;	/**< 虚警车牌											*/
		unsigned char    nReserve : 3;		/**< 保留字段位											*/
		unsigned char    bReserve[1];		/**< 保留字段											*/

		int 			 nCarSpaceID;		/**< 车位ID												*/
		int 			 nCarSpaceState;	/**< 车位状态											*/
#ifdef USE_JNI_INTERFACE
#else
		int	typeIndex;						/**< 保留											*/
		int logoIndex;						/**< 保留											*/
		int colorIndex;						/**< 保留											*/
#endif
		unsigned char    reserve[32];		/**< 保留字段											*/

	} CARSPACEINFO;

	

#ifdef USE_JNI_INTERFACE
#else
	/**
	*	
	* @brief 识别到的车辆特征结构
	*/
	typedef struct tagVehicleFeature
	{
		stLogoResult typeResult;
		stLogoResult logoResult;
		stColorResult colorResult;
		unsigned char    reserve[64*8];		/**< 保留字段											*/
	} VEHICLEFEATURE;
#endif

	/**
	* @brief 识别的车牌信息定义
	*/
	typedef struct tagLICENSE_PLATE
	{
		char               szTime[20];   /**< 触发时间. 格式为：20161012163417050,即2016年10月12日16点34分17秒050毫秒										*/
		unsigned long      nProcessTime; /**< 当前图片的处理时间				*/
		int                nPlateNum;    /**< 当前识别的车牌数量				*/
		PLATERESULT        pPlate[4];    /**< 一次最多可以识别4张车牌			*/
	}LICENSE_PLATE;


	/**
	* @brief 所有车位信息定义
	*/
	typedef struct tagCAR_SPACES
	{
		char               szTime[20];   /**< 触发时间. 格式为：20161012163417050,即2016年10月12日16点34分17秒050毫秒										*/
		unsigned long      nProcessTime; /**< 当前图片的处理时间				*/
		int                nCarSpaceNum; /**< 当前车位数量				*/
		CARSPACEINFO       pCarSpaceInfo[6];    /**< 最大支持6车位信息				*/
	}CAR_SPACES;


#ifdef USE_JNI_INTERFACE
#else
	/**
	* @brief 车辆特征
	*/
	typedef struct tagCAR_INFO
	{
		unsigned long      nProcessTime; /**< 当前图片的处理时间				*/
		int                nPlateNum;    /**< 当前识别的车牌数量				*/
		VEHICLEFEATURE       pCar[4];    /**< 一次最多可以识别4辆车				*/
	}CAR_INFO;
#endif

	//add by fangzx 20180424 Start
	/**
	* @brief 有效期日期定义
	*/
	typedef struct _Date
	{
		unsigned short nYear;  /**< 取值是完整的年，例如2016	*/
		unsigned char  nMonth; /**< 取值1，2，...， 12			*/
		unsigned char  nDay;   /**< 取值1，2，...，31			*/
	}XDate;

	/**
	* @brief 国内使用的车牌名单结构体定义
	*/
	typedef struct _PlateInfo
	{
		char szPlate[16];			/**< 车牌号码	*/
		XDate fromDate;				/**< 开始日期	*/
		XDate toDate;				/**< 结束日期	*/
	}PLATE_INFO;

	/**
	* @brief 扩展车牌名单结构体定义
	*/
	typedef struct _PlateInfoExt
	{
		char szPlate[32];			/**< 车牌号码										*/
		XDate fromDate;				/**< 开始日期										*/
		XDate toDate;				/**< 结束日期										*/
		char szName[64];			/**< 车主姓名										*/
		unsigned long long CardNo;	/**< 卡号（预留）									*/
		unsigned char nPlateColor;	/**< 车牌颜色（预留），取值请参考枚举ePlateColor	*/
		unsigned char Reserve[15];	/**< 预留字段，用于扩展								*/
	}PLATE_INFO_EXT;
	//add by fangzx 20180330 End

	/**
	* @brief 车牌识别算法策略定义
	*/
    typedef struct {
		//modified by fangzx 20171013
#if 1
		unsigned char nInstallDistID : 6;		/**< 按照距离ID，取值为tInstallDist						*/
		unsigned char bRecogNewEmbassyLic : 1;	/**< 支持新使馆车牌										*/
		unsigned char bEnableMotionDetect : 1;	/**< 启动运动检测										*/
#else
		unsigned char nInstallDistID;			/**< 按照距离ID，取值为tInstallDist						*/
#endif
		//end
        unsigned char nDefaultProvinceID;		/**< 默认的省份，取值为tPLATE_SYM_ID					*/
		//modified by fangzx 20171013
#if 1
		unsigned char nLaneCount : 3;			/**< 当前只支持1										*/
		unsigned char bResv1 : 1;				/**保留字段												*/
		unsigned char bResv2 : 1;				/**保留字段												*/
		unsigned char bAirportVehicle : 1;		/**是否支持民航车牌										*/
		unsigned char bAgriculturalVehicle : 1;	/**< 支持农用车车牌										*/
		unsigned char bOuputStableResult : 1;	/**< 稳定识别触发										*/
#else
		unsigned char nLaneCount;				/**< 当前只支持1										*/
#endif
		//end
        unsigned char nMaxRecogCount;			/**< 最多识别次数										*/
        unsigned char nOutputInterval;			/**< 相同车牌输入间隔,单位为秒							*/
        unsigned char nTriggerMode;				/**< 触发模式,取值为tTriggerMode						*/
        unsigned char nRecogMode;				/**< 识别模式，取值为tRecogMode							*/
        unsigned char nUploadMode;				/**< 上传模式，取值为tUploadMode						*/
        unsigned char nOutputMode;				/**< 输入模式，取值为tOutputMode						*/
        unsigned char bRecogEmbassyLic : 1;		/**< 是否为使馆车牌										*/
        unsigned char bRecogDoubleLic : 1;		/**< 是否为双层车牌										*/
        unsigned char bRecogSameLicOneTime : 1; /**< 1:相同车牌只输出一次,0无此限制						*/
        unsigned char bRecogOverlayChars : 1;	/**< 叠加OSD字符										*/
        unsigned char bRecogOverlayRect : 1;	/**< 叠加OSD矩形框										*/
        unsigned char bSamePosFilter : 1;		/**< 相同位置车牌是否输出,1--不输出，0--输出			*/
        unsigned char bVirtualCoilTrigger : 1;	/**< 虚拟线圈除法  1--使用虚拟线圈， 0--不使用虚拟线圈	*/
		//modified by fangzx 20171013
		//unsigned char nReserve1 : 1;			/**< 是否启用纵向条纹过滤功能。（例如多个1，多个T，多个H的虚警车牌）modified by fangzx 20170827	*/
		unsigned char bFilterStrip : 1;			/**< 是否启动条纹过滤功能，1--启用，0--不启用	*/
		//modified by fangzx 20170614合并海外车牌固件
#if 1
		unsigned char nCountryCode;				/**< 国家代码， 0--spain， 1--usa， 2--mexico， 3--thailand，4--argentina, 255--china	*/
		unsigned char nAlarmMaxRecogTime;		/**< 地感触发后最大识别时间,单位为秒.		*/
		//unsigned char nReserve2;
#else
        unsigned short nReserve2;				/**< 保留字段		*/
#endif
        float         fRecogThreshold;			/**< 识别阀值，取值为[0, 1000.0f]，值越小表示可信度越高,默认值为100.0f		*/
    }ALPR_CONFIG;


	/**
	* @brief 应用层算法配置参数
	*/
	typedef struct {
		unsigned char bDetectionCar : 1;	/**是否支持车辆检测功能									*/
		unsigned char bAntifakePlate : 1;	/**是否支持防伪功能										*/
		unsigned char bRecogCarLogo : 1;	/**是否支持识别车标功能									*/
		unsigned char bRecogCarType : 1;	/**是否支持识别车型功能									*/
		unsigned char bRecogCarColor : 1;	/**是否支持识别车身颜色功能								*/
		unsigned char bUnlicensedCar : 1;	/**是否支持无牌车上传功能								*/
		unsigned char bPlateAlarmFilter : 1;/**是否过滤虚景功能										*/
		unsigned char bReserve : 1;			/**保留													*/
		unsigned char nReserve[23];			/**保留													*/
		unsigned short nMaxPlateWidth;		/**最大车牌宽度											*/
		unsigned short nMinPlateWidth;		/**最小车牌宽度											*/
		int nUnlicensedCarTimeoutNum;		/**有车无车牌超时次数输出								*/
		
	}APP_ALPR_CONFIG;


	/**
	* @brief 识别的车牌信息定义
	*/
    typedef struct _GATE_CONFIG
    {
        int nWorkMode;							/**< 道闸工作模式					*/
        int nLatency;							/**< 道闸工作延迟					*/
        int bInverseSignal;						/**< 是否反转信号.取值为1或者0.		*/
        int nReverse;							/**< 保留字段						*/
    }GATE_CONFIG;

	/**
	* @brief 相机曝光参数定义
	*/
    typedef struct _CAMERA_CONFIG
    {
        int nMinExposureTime;					/**< 最小曝光时间						*/
        int nMaxExposureTime;					/**< 最大曝光时间						*/
        int bInverseSignal;						/**< 补光灯是否反转信号.取值为1或者0.	*/
        int nReverse;							/**< 保留字段							*/
    }CAMERA_CONFIG;

	/**
	* @brief 相机ISP参数定义
	*/
	typedef struct _CAMERA_EXP_PARAM
	{
		int nSpeed;								/**<自动曝光调整速度 */
		int nEVBias;							/**<自动曝光调整时的曝光量偏差值 */
		int nTolerance;							/**<自动曝光容忍值 */
		int nCompensation;						/**<自动曝光目标亮度 */
		unsigned int nstAGainRangeMax;			/**<自动曝光模拟增益最大值 */
		unsigned int nstExpTimeRangeMax;		/**<自动曝光时间益最大值 */
		unsigned int nGainThreshold;			/**<自动曝光系统增益阈值 */
		unsigned int nstSysGainRangeMax;		/**<自动曝光系统增益最大值 */
		int enAEStrategyMode;					/**<自动曝光策略：高光或低光优先 */
		short enAEMode;							/**<自动曝光模式：降帧或自动帧*/
		int u16HistRatioSlope;					/**<自动曝光感兴趣权重 */
		int u8MaxHistOffset;					/**<自动曝光感兴趣区域对平均值影响的最大程度 */
		int exposureType;						/**<曝光类型，自动或者手动 */
		unsigned int expTime;					/**<手动曝光时间 */
		float iris;								/**<光圈设置 */
		unsigned char DRCEnable;							/**<DRC功能开关 */
		unsigned int AGain;						/**<手动模拟增益 */
		unsigned int DGain;						/**<手动数字增益 */
		unsigned int ISPDGain;					/**<手动系统增益 */
		int ManualNoiseThresh;					/**<手动短曝光降噪阈值 */
		int SharpenD;							/**<图像大边缘锐度 */
		int SharpenUd;							/**<图像小边缘锐度 */
		int SharpenRGB;							/**<图像整体边缘锐度 */
		int ManualNoiseThreshLong;				/**<手动长曝光降噪阈值 */
	}CAMERA_EXP_PARAM;

	/**
	* @brief 相机设备参数定义
	*/
    typedef struct _DEVINFO
    {
        char szIP[32];						/**< IP地址						*/
        char szDevName[128];				/**< 设备名						*/
		// add by caoyanming 2018-10-16 Start
		char szDevUid[32];					/**> 设备序列号					*/
		unsigned short uUseP2PConn;			/**> 是否使用P2P连接方式		*/
		// add by caoyanming 2018-10-16 End
        unsigned short u16Port;				/**< 端口号						*/
        char szUser[64];					/**< 用户名						*/
        char szPwd[64];						/**< 密码						*/
        char szPicturesSavePath[256];		/**< 图片本地保存路径			*/

		unsigned short u16AlprPort;			/**< Alpr端口号					*/
		#ifdef USE_JNI_INTERFACE
			unsigned short u16PullPort;			/**< Pull端口号					*/
		#else
			//unsigned short u16PullPort;			/**< Pull端口号					*/
		#endif
		unsigned short lprDevType;				/**< 相机设备类型,参考LPR_DEV_TYPE_E		*/
		HANDLE hPullHandle;					/**< pullsdk句柄:本sdk仅管理其打开与关闭，其他软件直接调用pullsdk接口				*/
    } DEVINFO;


	/**
	* @brief 相机设备参数定义
	*/
	typedef struct _IP_2_HANDLEID
	{
		char szIP[32];						/**< IP地址						*/
		int nHandleID;						/**< HandleID					*/
	} IP_2_HANDLEID;



	/**
	* @brief RS485配置参数定义
	*/
    typedef struct {
        unsigned char nRS485WorkModeID;		/**< 485工作模式，取值为RS485WorkMode						*/
        unsigned char nBitrateID;			/**< 比特率ID， 取值为RS485Bitrate							*/
        unsigned char nDatabitID;			/**< 数据位ID, 取值为RS485Databit							*/
        unsigned char nChecksumID;			/**< 校验和ID， 取值为RS485Checksum							*/
        unsigned char nStopbitID;			/**< 停止位ID, 取值为RS485Stopbit							*/
        unsigned char nRS485ScreenID;		/**< RS485屏型号,当前只能为0								*/
        unsigned short bEnableWhitelist : 1;/**< 是否启用白名单											*/
        unsigned short bEnableBlacklsit : 1;/**< 是否启用黑名单											*/
        unsigned short nReserve:14;         /**< 预留字段,当前只能为0									*/
        char szWhitelistBannerA[24];		/**< 白名单字符1，最大长度为24								*/
        char szWhitelistBannerB[24];		/**< 白名单字符2，最大长度为24								*/
        char szBlacklistBannerA[24];		/**< 黑名单字符1，最大长度为24								*/
        char szBlacklistBannerB[24];		/**< 黑名单字符2，最大长度为24								*/
    }RS485_CONFIG;

	/**
	* @brief 设备加密信息定义
	*/
	typedef struct _DEVSN
	{
		char szDevSN[SERIAL_NUMBER_LEN];	/**< 序列号						*/
		char szEncContent[ENCRYPT_LEN];		/**< 加密芯片里的内容			*/
		long szLen;							/**< 许可长度					*/
		char szLicense[LIC_LEN];			/**< 许可内容，外面分配内存		*/
	} DEVSN;
	//end

	//设备版本号add by fangzx 20170317
	/**
	* @brief 设备版本信息定义
	*/
	typedef struct _DEV_VER_INFO
	{
		char Algorithm_Ver[VER_LEN];		/**< 算法版本					*/
		char Firm_Ver[VER_LEN];				/**< 固件版本					*/
		char SDK_Ver[VER_LEN];				/**< sdk版本					*/
	}DEV_VER_INFO;
	//end
	/**
	* @brief 抓取JPG图片信息定义
	*/
    typedef struct Jpg_Bytes
    {
        char           szTime[20];			/**< 捕获图片的时间,格式为：20161012163417050,即2016年10月12日16点34分17秒050毫秒					*/
        int            nBytesLen;			/**< jpg数据长度					*/
        unsigned char *pJpgBytes;			/**< jpg数据，可直接保存为jpg文件	*/
    }JPG_BYTES;
	/**
	* @brief 车牌识别信息定义
	*/
    typedef struct RecogAllInfo
    {
        LICENSE_PLATE PlateInfo;			/**< 识别的车牌信息					*/
		struct Jpg_Bytes     JpgBytes;		/**< 抓取JPG图片信息				*/
		struct Jpg_Bytes     PlateJpgBytes;	/**< 抓取车牌小图片信息				*/
        unsigned char nReserve[4];			/**< 预留字段						*/
    }RECOG_ALL_INFO;


	/**
	* @brief 车位信息定义
	*/
    typedef struct CarSpaceInfo
    {
        CAR_SPACES 	  CarSpaces;			/**< 车位信息					*/
		struct Jpg_Bytes     JpgBytes;		/**< 抓取JPG图片信息				*/
		struct Jpg_Bytes     PlateJpgBytes;	/**< 抓取车牌小图片信息				*/
		unsigned char nReserve[4];			/**< 预留字段						*/
    }CAR_SPACE_INFO;


#ifdef USE_JNI_INTERFACE
#else
	/**
	* @brief 车牌识别信息、车辆特征定义
	*/
	typedef struct LicenseAndCarRecogInfo
	{
		LICENSE_PLATE PlateInfo;			/**< 识别的车牌信息				*/
		CAR_INFO CarInfo;					/**< 车辆信息					*/
		Jpg_Bytes     JpgBytes;				/**< 抓取JPG图片信息			*/
		unsigned char nReserve[1024];		/**< 预留字段					*/
	}LICENSE_AND_CAR_RECOG_INFO;
#endif

	/**
	* @brief 视频显示位置定义
	*/
    typedef struct _OSD_Para
    {
        int bShow;							/**< 0:关闭  1: 显示				*/
        short x;							/**< 显示的位置，位置的范围0-704，与图像的分辨率无关，x必须为4的倍数		*/
        short y;							/**< 取值范围0-576					*/
    }OSD_PARAM;
	/**
	* @brief 视频控制方式定义:感知设备仅支持设置标题szTitle及是否显示标题
	*/
    typedef struct _OSD_CTRL
    {
        OSD_PARAM stDateOSD;				/**< 视频日期显示位置				*/
		OSD_PARAM stTimeOSD;				/**< 视频时间显示位置				*/
        OSD_PARAM stWeekOSD;				/**< 视频星期显示位置				*/
        OSD_PARAM stBitrateOSD;				/**< 视频分辨率显示位置				*/
        OSD_PARAM stTitleOSD;				/**< 视频标题显示位置				*/
        char      szTitle[64];				/**< 视频标题						*/
    }OSD_CTRL;


	/**
	* @brief 感知设备设置多行OSD
	*/
	typedef struct _MULTI_OSD_CTRL
	{
		int nFirstStreamOsdSize;			/**  0:不改主码流					*/
		int nSecondStreamOsdSize;			/**	 0:不改子码流					*/
		int bCustomPos;						/**< 0:关闭  1: 自定义显示位置		*/
		int x;								/**< x位置							*/
		int y;								/**< y位置							*/
		int IsShowMultiOSD;					/**< 0:关闭  1:使能多行				*/
		char      szBitColor[8];			/**< 多行内容颜色					*/
		char      szText[256];				/**< 多行内容  如"2000年01月01日12时59分59秒\n收费员：张三\n收费金：50元"	*/

	}MULTI_OSD_CTRL;


	/**
	* @brief 视频编码方式定义
	*/
    typedef struct 
    {
        int  nEncFormat;					/**< 暂时只支持两种： 0:1080p，3:D1	*/
        unsigned char  nReserve[60];		/**< 保留字段						*/
    }ALPR_VIDEO_CONFIG;
	/**
	* @brief 系统时间定义
	*/
	//设置系统时间add by fangzx 20170414
	typedef struct _SYS_TIME
	{
		unsigned char	year;				/**< 年，当前年份减去2000			*/
		unsigned char	month;				/**< 月								*/
		unsigned char	day;				/**< 日								*/
		unsigned char	week;				/**< 周								*/
		unsigned char	hour;				/**< 小时							*/
		unsigned char	minute;				/**< 分钟							*/
		unsigned char	second;				/**< 秒								*/
	}TSYS_TIME, *PSYS_TIME;

	/**
	* @brief 485透传数据定义
	* @note 使用说明
	* \li 命令(Command)	请参照《摄像机与显示屏和语音板的485通讯协议.docx文档》
	* \li 滚动码(RollingCode) 每次发送新的内容时，该字节必须为1,表示新包；如果超时没有收到应答并且执行重复发送时，将该字节改为0表示重复包。
	*/
	typedef struct _RS485_DATA
	{
		unsigned char	DestAddr;			/**< 485地址，语音和显示屏：0，道闸：1					*/
		unsigned char	Command;			/**< 命令											*/
		unsigned char	RollingCode;		/**< 滚动码（1:新数据包，0：重复包）					*/
		unsigned char	DevType;			/**< 设备类型，参考枚举 \link DEV_TYPE_E \endlink		*/
		unsigned char	DataLen;			/**< 数据长度,DataBuf的长度							*/
		unsigned char	DataBuf[245];		/**< 数据											*/
	}TRS485_DATA, *PRS485_DATA;

	/**
	* @brief 基本数据定义
	*/
	typedef struct _BASE_PARAM
	{
		unsigned char	bRgnArea : 1;				/**< 是否显示识别区域，0：不显示，1：显示	*/
		unsigned char	bVirtualCoil : 1;			/**< 是否显示虚拟线圈，0：不显示，1：显示	*/
		unsigned char	lprAccuracyMatch : 6;		/**< 车牌匹配精度							*/
		//modified by fangzx 20171101增加白天和晚上图像参数切换类型
		//unsigned char	nReserve1[2];				/**< 保留字段								*/
		unsigned char	nImageSwitchType;			/**< 白天和晚上图像参数切换类型，参考枚举ImageSwitchType_E							*/
		unsigned char	nFillLightBrightness;		/**< 补光灯亮度[0-100]，0：关闭补光灯，其他：补光灯亮度值add by fangzx 20171108		*/
		//end
		unsigned char	nAuxiliaryCameraFlag;		/**< 是否辅助摄像机，参考枚举ENABLED_TYPE_E，0：主机，1：辅助摄像机					*/
		char			sMasterCamIP[16];			/**< 主摄像机IP地址																	*/
		unsigned char	ledCharacterEncoding;		/**< 显示屏字符编码，参考枚举CharacterEncoding_E									*/
		unsigned char	onlyShowLic;				/**< 显示屏是否只显示车牌，0：其他，1：只发送车牌									*/
#if 1//modified by fangzx 20170903国家编码遵循国际编码
		unsigned short	nCountryCode;				/**< 国家代码，参考枚举COUNTRY_CODE_E												*/
		//unsigned char	nReserve[28];				/**< 保留字段																		*/
		//modified by fangzx 20171101
		//unsigned char	nReserve[26];				/**< 保留字段																		*/
		unsigned short  nStartTime;					/**< 切换成白天图像参数的时间6:00-->600												*/
		unsigned short  nEndTime;					/**< 切换成晚上图像参数的时间18:00-->1800										*/
		unsigned short  nPhotosensitiveThreshold;	/**< 光敏阀值[0-1024]，大于该值切换成晚上的参数，否则切换成白天参数				*/
		unsigned char	nOfflineLevel;				/**< 脱机等级,参考枚举OFFLINE_LEVEL_E   add by carl 20171103					*/
		unsigned char	bOnlySwitchByTime;			/**< 仅仅支持按时间切换图像参数													*/
		char			szMCUVer[12];				/**< 单片机版本																	*/
		unsigned char	nReserve[6];				/**< 保留字段																	*/

		//end
#else
		unsigned char	nReserve[30];				/**< 保留字段																	*/
#endif
	}TBASE_PARAM, *PBASE_PARAM;
	//end

	/**
	* @brief 脱机参数定义
	*/
	typedef struct _OfflineParam_
	{
		char			sServerIP[16];				/**< 主服务器IP地址																*/
		unsigned int	nServerPort;				/**< 主服务器端口																*/
		unsigned int	nParkID;					/**< 车场编号																	*/
		unsigned char	nRecordIsCover;				/**< 记录（出入场记录和收费记录）是否覆盖，1：覆盖，0：不覆盖					*/
		unsigned char	nParkInOutFlag;				/**< 车场出入口标识，参考枚举PARK_IN_OUT_E										*/
		unsigned char	nMonthcarAlarmDays;			/**< 固定车预警天数																*/
		unsigned char	nRecognitionAccuracy;		/**< 固定车匹配精度，99：精确匹配												*/
		unsigned char	nRecordMatchAccuracy;		/**< 记录匹配精度，99：精确匹配													*/
		unsigned char	nMonthCarToTempcarFlag;		/**< 启用固定车转临时车，参考枚举ENABLED_TYPE_E									*/
		unsigned char	nMonthCarOpenType;			/**< 固定车开闸方式，参考枚举OPEN_GATE_TYPE_E									*/
		unsigned char	nTempCarOpenType;			/**< 临时车开闸方式，参考枚举OPEN_GATE_TYPE_E									*/
		float			fMinCharge;					/**< 最低收费																	*/
		unsigned char	nTempCarForbiddenFlag;		/**< 临时车禁止出入场，0：可出入场，1：不可出入场								*/
		unsigned int	nSyncTimeFromMaster;		/**< 时间点23:00-->2300  -->0x08fc												*/
		unsigned char	nOnlineFlag;				/**< 是否在线模式，参考枚举ONLINE_MODE_E										*/
		unsigned char	nOneChannelMode;			/**< 是否启用单通道模式，参考枚举ENABLED_TYPE_E，0：不启用单通道，1：单通道模式	*/
		unsigned int	nOneChannelWaitTime;		/**< 单通道重复车牌等待时间，以秒为单位											*/
		unsigned int	nNormalModeWaitTime;		/**< 正常模式重复车牌等待时间，以秒为单位										*/
		unsigned char	nMinChargeFlag;				/**< 是否启用最低收费，参考枚举ENABLED_TYPE_E，0：不启用，1：启用				*/
		//unsigned char	nAuxiliaryCameraFlag;		/**< 是否辅助摄像机，参考枚举ENABLED_TYPE_E，0：主机，1：辅助摄像机				*/
		//char			sMasterCamIP[16];			/**< 主摄像机IP地址																*/
		unsigned char	nDisplayRefreshInterval;	/**< 脱机显示屏显示内容的刷新间隔，以秒为单位									*/
		char			sPropertyLogo[64];			/**< 脱机显示屏默认显示的企业标识												*/
		//add by fangzx 20171117 start
		unsigned char	nScreenType;				/**< 显示屏类型，参考枚举ScreenType												*/
		unsigned char	nZeroQuickOut;				/**< 收费0元,是否快速出场														*/
		unsigned char	nSceneMode;					/**< 情景模式，参考枚举SCENE_MODE_E												*/
	
		//add by fangzx 20171117 end
		unsigned char	nMissPlateListMatch;		/**< 车牌名单匹配精度，0：精确匹配												*/
		unsigned char	nMissRecordListMatch;		/**< 记录匹配精度，	0：精确匹配													*/
		unsigned char	nReserve[27];				/**< 保留字段																   */
	}TOfflineParam, *POfflineParam;
	//end

	/**
	* @brief 临时车收费方式定义
	*/
	typedef struct _TempCarChargeRule_
	{
		unsigned int ID;							/**< 可以映射到不同车类型									*/
		unsigned int FreeMinutes;					/**< 免费分钟												*/
		unsigned char IncludeFreeMinFlag;			/**< 包含免费分钟计费，0：不包含，1：包含					*/
		unsigned char CrosstimeSpitFlag;			/**< 跨段拆分计费，0：不拆分，1：拆分						*/
		float MaxFeePerDay;							/**< 全天（单次）最高收费									*/
		unsigned int GenChargeRuleIDs[16];			/**< 1>按时段：最多分16个时段 2>按周期：最多分16个周期		*/
	}TTempCarChargeRule, *PTempCarChargeRule;

	

	/**
	* @brief 按时间段计费定义
	*/
	//----------------------as timezone---------------------
	typedef struct _TimezoneRule_
	{
		unsigned int StartTime;						/**< 开始时间08:00-->830  --->0x33E							*/
		unsigned int EndTime;						/**< 结束时间20:00-->2000 --->0x7D0							*/
		unsigned char PayPerViewFlag;				/**< 按次收费，1：按次，0：不按次							*/
		unsigned int UnitTimeMin;					/**< 单位时间(分钟)											*/
		float UnitTimeCharge;						/**< 单位时间内的金额										*/
		float MaxCharge;							/**< 1>按次模式：一次收费金额; 2>不按次:收费最高限额		*/
	}TimezoneRule, *PTimezoneRule;
	//--------------------end as timezone-------------------

	/**
	* @brief 按周期计费定义
	*/
	//----------------------as period---------------------
	typedef struct _PeriodRule_
	{
		unsigned int Min;							/**< 时长(分钟)												*/
		unsigned char PayPerViewFlag;				/**< 按次收费，1：按次，0：不按次							*/
		unsigned int UnitTimeMin;					/**< 单位时间(分钟)											*/
		float UnitTimeCharge;						/**< 单位时间内的金额										*/
		float MaxCharge;							/**< 1>按次模式：一次收费金额; 2>不按次:收费最高限额		*/
	}PeriodRule, *PPeriodRule;
	//--------------------end as period-------------------

	/**
	* @brief 保留定义
	*/
	typedef struct _VirtualRule_
	{
		char reserve[64];							/**< 保留字段												*/
	}VirtualRule, *PVirtualRule;

	/**
	* @brief 车场收费方式定义
	*/
	typedef struct _GenChargeRule_
	{
		unsigned int ID;							/**< 规则ID													*/
		unsigned int eMode;							/**< 收费模式，1：按时段，2：按周期							*/
		union _RULE_
		{
			TimezoneRule uTimezoneRule;
			PeriodRule uPeriodRule;
			VirtualRule uVirtualRule;
		}rule;
	}TGenChargeRule, *PGenChargeRule;
	//end

	//------------------add by carl 20171013------------------------
	//----------------------as light fill---------------------
	/**
	* @brief 根据光敏值补光灯开启/关闭定义
	*/
	typedef struct _LIGHT_FILL_
	{
		unsigned int eMode;								/**< 补光模式(ELightMode)			*/

		unsigned int PhotoSenRange1;					/**< 光敏范围1						*/
		unsigned int PhotoSenRange2;					/**< 光敏范围2						*/
		unsigned int PhotoSenRange3;					/**< 光敏范围3						*/
		unsigned int PhotoSenRange4;					/**< 光敏范围4						*/
		unsigned int PhotoSenRange5;					/**< 光敏范围5						*/
		unsigned int PhotoSenRange6;					/**< 光敏范围6						*/
		unsigned int PhotoSenRange7;					/**< 光敏范围7						*/
		unsigned int PhotoSenRange8;					/**< 光敏范围8						*/

		unsigned char LightValue1;						/**< 补光值1(或手动补光值)			*/
		unsigned char LightValue2;						/**< 补光值2						*/
		unsigned char LightValue3;						/**< 补光值3						*/
		unsigned char LightValue4;						/**< 补光值4						*/
		unsigned char LightValue5;						/**< 补光值5						*/
		unsigned char LightValue6;						/**< 补光值6						*/
		unsigned char LightValue7;						/**< 补光值7						*/
		unsigned char LightValue8;						/**< 补光值8						*/
	}LightFill, *PLightFill;
	//--------------------end light fill-------------------


	//----------------------as image param---------------------
	/**
	* @brief 成像参数定义
	*/
	typedef struct _ImageParam_
	{

		unsigned int eExposureRunMode;					/**< 曝光运行模式(EExposureRunMode)				*/

		//暂时支持3组
		unsigned int PhotoSenRange1;					/**< 光敏范围1									*/
		unsigned int PhotoSenRange2;					/**< 光敏范围2									*/
		unsigned int PhotoSenRange3;					/**< 光敏范围3									*/
		unsigned int PhotoSenRange4;					/**< 光敏范围4									*/
		unsigned int PhotoSenRange5;					/**< 光敏范围5									*/
		unsigned int PhotoSenRange6;					/**< 光敏范围6									*/

		unsigned int resv[6];							/**< 预留其他									*/

		//第1组自动参数  或固定曝光参数
		//------------------------------exposure------------------------------------------------
		unsigned int eExposureMode1;					/**< 曝光运行模式(EExposureRunMode)				*/

		unsigned int ExpTime1;							/**< when E_EXPOSURE_MODE_AUTO is ExpTimeMax	*/
		unsigned int AGain1;							/**< when E_EXPOSURE_MODE_AUTO is AGainMax		*/
		unsigned int DGain1;							/**< when E_EXPOSURE_MODE_AUTO is DGainMax		*/
		unsigned int ISPDGain1;							/**< when E_EXPOSURE_MODE_AUTO is ISPDGainMax	*/
		unsigned int EVBias1;							/**< only E_EXPOSURE_MODE_AUTO invalid			*/

		unsigned char AEStrategyLowEnable1;				/**< 默认高光									*/

		//------------------------------end exposure--------------------------------------------

		unsigned char DRCEnable1;						/**< DRC使能									*/
		unsigned char IrisType1;						/**< 光圈类型									*/

		//第2组参数
		//------------------------------exposure------------------------------------------------
		unsigned int eExposureMode2;					/**< 曝光运行模式(EExposureRunMode)				*/

		unsigned int ExpTime2;							/**< when E_EXPOSURE_MODE_AUTO is ExpTimeMax	*/
		unsigned int AGain2;							/**< when E_EXPOSURE_MODE_AUTO is AGainMax		*/
		unsigned int DGain2;							/**< when E_EXPOSURE_MODE_AUTO is DGainMax		*/
		unsigned int ISPDGain2;							/**< when E_EXPOSURE_MODE_AUTO is ISPDGainMax	*/
		unsigned int EVBias2;							/**< only E_EXPOSURE_MODE_AUTO invalid			*/

		unsigned char AEStrategyLowEnable2;				/**< 默认高光									*/

		//------------------------------end exposure--------------------------------------------

		unsigned char DRCEnable2;						/**< DRC使能									*/
		unsigned char IrisType2;						/**< 光圈类型									*/


		//第3组参数
		//------------------------------exposure------------------------------------------------
		unsigned int eExposureMode3;					/**< 曝光运行模式(EExposureRunMode)				*/

		unsigned int ExpTime3;							/**< when E_EXPOSURE_MODE_AUTO is ExpTimeMax	*/
		unsigned int AGain3;							/**< when E_EXPOSURE_MODE_AUTO is AGainMax		*/
		unsigned int DGain3;							/**< when E_EXPOSURE_MODE_AUTO is DGainMax		*/
		unsigned int ISPDGain3;							/**< when E_EXPOSURE_MODE_AUTO is ISPDGainMax	*/
		unsigned int EVBias3;							/**< only E_EXPOSURE_MODE_AUTO invalid			*/

		unsigned char AEStrategyLowEnable3;				/**< 默认高光									*/

		//------------------------------end exposure--------------------------------------------

		unsigned char DRCEnable3;						/**< DRC使能									*/
		unsigned char IrisType3;						/**< 光圈类型									*/


		//第4组参数
		//------------------------------exposure------------------------------------------------
		unsigned int eExposureMode4;					/**< 曝光运行模式(EExposureRunMode)				*/

		unsigned int ExpTime4;							/**< when E_EXPOSURE_MODE_AUTO is ExpTimeMax	*/
		unsigned int AGain4;							/**< when E_EXPOSURE_MODE_AUTO is AGainMax		*/
		unsigned int DGain4;							/**< when E_EXPOSURE_MODE_AUTO is DGainMax		*/
		unsigned int ISPDGain4;							/**< when E_EXPOSURE_MODE_AUTO is ISPDGainMax	*/
		unsigned int EVBias4;							/**< only E_EXPOSURE_MODE_AUTO invalid			*/

		unsigned char AEStrategyLowEnable4;//默认高光

		//------------------------------end exposure--------------------------------------------

		unsigned char DRCEnable4;						/**< DRC使能									*/
		unsigned char IrisType4;						/**< 光圈类型									*/

	}ImageParam, *PImageParam;
	//--------------------end as image param-------------------

	/**
	* @brief 保留参数
	*/
	typedef struct _VirtualSetting_
	{
		char reserve[240];								/**< 12个4bytes参数=4*12=48bytes*5=240			*/
	}VirtualSetting, *PVirtualSetting;

	/**
	* @brief 模式参数
	*/
	typedef struct _ModelParam_
	{
		unsigned int ID;								/**< ID：1：补光  2: 图像参数			*/
		//UInt32 eParamType;							/**< 1：补光  2: 图像参数				*/
		union _PARAM_
		{
			LightFill uLightFill;						/**< 光敏与补光灯参数					*/
			ImageParam uImageParam;						/**< 成像参数							*/
			VirtualSetting uVirtualSetting;				/**< 保留参数							*/
		}param;
	}TModelParam, *PModelParam;

	//---------------end add by carl 20171013-------------------------------
	/**
	* @brief IP地址字符串的最大长度
	*/
#define MAX_EVENT_ADDR_LEN			(16)
#define MAX_CAR_NUMBER_OLD_LEN		(16)
#define MAX_PHOTO_PATH_OLD_LEN		(64)
#define MAX_CAR_NUMBER_LEN			(32)
#define MAX_PHOTO_PATH_LEN			(256)

	/**
	* @brief 出入场记录定义
	*/
	typedef struct _RecordInOutLog_
	{
		unsigned int	ID;									/**< 编号							*/
		unsigned int	TimeSecond;							/**< 时间，((t->tm_year-100)*12*31+((t->tm_mon)*31)+t->tm_mday-1)*(24*60*60)+ (t->tm_hour * 60 + t->tm_min) * 60 + t->tm_sec							*/
		char	CarNumber[MAX_CAR_NUMBER_LEN];				/**< 车牌号码						*/
		unsigned long long	CardNo;							/**< 卡号							*/
		unsigned char	InOutState;							/**< 通道状态，0：入，1：出			*/

		char	EventAddr[MAX_EVENT_ADDR_LEN];				/**< 通道名称，默认是IP地址			*/
		unsigned int	EventType;							/**< 事件类型，参考枚举ParkEvent	*/							
		/**< 
				 101：			白名单\n
				 102：			黑名单\n
				 103：			临时车\n
				 104：			临时车禁入\n
				 105：			白名单转临时车\n
				 106：			白名单过期\n
				 107：			临时车无法匹配\n
				 108：			临时车最小收费\n
				 109：			固定车\n
				 110：			固定车转临时车\n
				 111：			固定车过期\n						
				 112：			与服务器通讯失败\n
		*/

		char	PhotoPath[MAX_PHOTO_PATH_LEN];								/**< 图片路径，默认字符串时间,可扩展时间+车牌等		*/


		unsigned char	IsUploadFlag;					
/**< 			
						\image html IsUploadFlag.png 
				0[0000]：【设备处理业务模式】【本地记录】【非重复入场记录】\n
				1[0001]：【设备处理业务模式】【本地记录】【非重复入场记录】【发送事件给连接的在线监控软件】\n
				2[0010]：【软件处理业务模式】【本地记录】【非重复入场记录】【发送车牌给软件处理】\n

				4[0100]：【设备处理业务模式】【本地记录】【重复入场记录】\n
				5[0101]：【设备处理业务模式】【本地记录】【重复入场记录】【发送事件给连接的在线监控软件】\n
				6[0110]：【软件处理业务模式】【本地记录】【重复入场记录】【发送车牌给软件处理】\n
				8[1000]：【设备处理业务模式】【来自其他的网络同步记录】【非重复入场记录】\n
				9[1001]：【设备处理业务模式】【来自其他的网络同步记录】【非重复入场记录】【发送事件给连接的在线监控软件】\n
				10[1010]：【软件处理业务模式】【来自其他的网络同步记录】【非重复入场记录】【发送车牌给软件处理】\n

				12[1100]：【设备处理业务模式】【来自其他的网络同步记录】【重复入场记录】\n
				13[1101]：【设备处理业务模式】【来自其他的网络同步记录】【重复入场记录】【发送事件给连接的在线监控软件】\n
				14[1110]：【软件处理业务模式】【来自其他的网络同步记录】【重复入场记录】【发送车牌给软件处理】\n

		
		*/	
		unsigned char	IsLeave;							/**< 是否出场，0：未出场，1：已出场（针对入场记录）	*/


#ifdef FUN_LOG_IN_ID
		unsigned int  InID;							//入场ID
		char	InAddr[MAX_EVENT_ADDR_LEN];			//入场IP地址
#endif
	}TRecordInOutLog, *PRecordInOutLog;

	/**
	* @brief 收费记录定义
	*/
	typedef struct _ChargeLog_
	{
		unsigned int ID;
		unsigned int InID;									/**< 入场记录编号					*/
		unsigned int OutID;									/**< 出场记录编号					*/

		float ReceivableAmount;								/**< 应收金额						*/
		float DiscountAmount;								/**< 优惠金额						*/
		float ActualAmount;									/**< 实收金额						*/

		unsigned int CarTypeID;								/**< 车类型编号						*/
		unsigned int ChargeTime;							/**< 收费时间，((t->tm_year-100)*12*31+((t->tm_mon)*31)+t->tm_mday-1)*(24*60*60)+ (t->tm_hour * 60 + t->tm_min) * 60 + t->tm_sec						*/

#ifdef FUN_LOG_IN_ID
		unsigned int  InSrcID;								//入场ID
		char	InSrcAddr[MAX_EVENT_ADDR_LEN];			//入场IP地址
#endif
	}TChargeLog, *PChargeLog;

	

	// LinZhi add 20170809
	/**
	* @brief 辅助相机状态定义
	*/
	typedef struct _AuxCameraStatus
	{
		unsigned int  IP;									/**< 辅助相机IP						*/
		unsigned int Status;								/**< 辅助相机状态：1：链接 ,0：断开	*/
	}AuxCameraStatus;

	
	// end
	/**
	* @brief 设备状态定义
	*/
	typedef struct _DevStatus
	{
		AuxCameraStatus auxCameraStatusAarry[MAXAUXCAMERANUM];	/**< 辅相机状态					*/
		int			  HeartBeatStatus;							/**< 心跳状态					*/
		unsigned char GateSwitchStatus;							/**< 道闸开关状态，参考枚举GATE_SWITCH_STATUS_E				*/
		unsigned char GateRunStatus;							/**< 道闸运行状态，参考枚举GATE_RUN_STATUS_E				*/
		unsigned char FeelStatus;								/**< 地感状态，参考枚举FEEL_STATUS_E					*/	
		unsigned char Reserve1;									/**< 保留字段					*/
		//add by caoyanming 2017/09/21 Start
		unsigned short PhotosensitiveValue;						/**< 光敏信号					*/
		//add by caoyanming 2017/09/21 End
		unsigned char Reserve[14];								/**< 保留字段					*/
	}TDevStatus, *PDevStatus;

	/**
	* @brief SD卡容量信息定义
	*/
	typedef struct _SDCardCapacity
	{
		unsigned int nTotalCapacity;							/**< 总容量，以MB为单位			*/
		unsigned int nRemainCapacity;							/**< 剩余空间，以MB为单位		*/
	}TSDCardCapacity, *PSDCardCapacity;
	//add by caoyanming 2017/09/21 Start
	/**
	* @brief 补光灯与光敏阈值信息定义
	*/
	typedef struct _DefBrightness
	{
		unsigned short defSensitiveValue;						/**< 默认光敏下限值，高于此值会开启补光灯	*/
		unsigned char defBrightness;							/**< 开启补光灯时的亮度值，范围是[0-100]	*/
	}TDefBrightness, *PDefBrightness;
	//add by caoyanming 2017/09/21 End

	/**
	* @brief 双色双行屏信息定义
	*/
	typedef struct _DScreenDLine
	{
		int				CountryCode;							/**< 国家代码									*/
		unsigned char	FirstLineColor;							/**< 第一行显示颜色(0:红色,1:绿色)				*/
		unsigned char	SecondLineColor;						/**< 第二行显示颜色(0:红色,1:绿色)				*/
		unsigned char	MoveDirection1;							/**< 第一行滚动方向(0:从左到右,1:从右到左)		*/
		unsigned char	MoveDirection2;							/**< 第二行滚动方向(0:从左到右,1:从右到左)		*/
		int				MoveSpeed;								/**< 移动速度(0-100)							*/
		int				ShowTimer;								/**< 显示时长(0-100s)							*/
		int				Volume;									/**< 音量大小(0-31)								*/
		char			firstLinedef[50];						/**< 第一行默认显示信息							*/
		unsigned char	TimeSync;								/**< 是否时间同步								*/
		TSYS_TIME		CurTimer;								/**< 当前时间									*/
	}TDScreenDLine, *PDScreenDLine;
	//add by caoyanming 2017/10/12 End
	
	//add by fangzx 2018/01/24 Start
	/**
	* @brief 设备许可授权信息
	*/
	typedef struct _DevLicense
	{
		unsigned int nLicenseType;							/**< 0：旧，1：新	*/
		unsigned int nLicenseStatus;						/**< 许可状态 */
		/**<
			0：			授权成功\n
			1：			许可文件匹配不正确\n
			2：			许可过期\n
			3：			算法初始化失败或无许可\n
			4：			加密芯片无许可内容\n
		*/
		char		 reserve[64];							/**< 预留字段	*/
	}TDevLicense, *PDevLicense;
	//add by fangzx 2018/01/24 End
	
	//add by caoyanming 2017/12/25 Start
	/**
	* @brief 韦根卡数据
	*/
	typedef struct _WiegandData
	{
		unsigned long long	WiegandCardNo;						/**< 维根卡号									*/
		unsigned char		Reserve[32];						/**< 保留字段									*/
	}TWiegandData, *PWiegandData;
	//add by caoyanming 2017/12/25 End
	
	typedef struct _NAlprCfg
	{
		int region;							/**< 区域  1:欧洲和摩洛哥 2：南美和中美  3：北美和中美  4：亚洲 5：非洲			*/
		int country[3];						/**< 国家编码，具体值请参照\link _N_COUNTRY_CODE \endlink 最多三个				*/
		int minimumheight;					/**< 最低高度(15-50)，单位是像素， 防止算法在车很远或者很近的时候开始识别		*/
		int maximumheight;					/**< 最高高度(15-50)，单位是像素， 防止算法在车很远或者很近的时候开始识别		*/
		int mode;							/**< 工作模式 1：Trigger 2：Free-Flow											*/
		int capturecount;					/**< 抓拍照片数量(1-10)，算法在识别的时候会抓取设定照片数量识别					*/
		int timeout;						/**< 超时时间)，单位是毫秒														*/
	}TNAlprCfg, *PNAlprCfg;

	// add by wangzy
	// Add by Caoym ftpClient 2018-09-06 Start
	/**
	* @brief FtpClient配置参数
	*/
	typedef struct _FtpClientCfg
	{
		unsigned char Enable;											/**< 是否启用Ftp*/
		unsigned char Pasvmode;											/**< 是否被动模式连接*/
		short RemotePort;										/**< 远程端口*/
		char RemoteHost[16];									/**< 远程IP*/
		char UserName[24];										/**< 用户名称*/
		char Password[24];										/**< 用户密码*/
		char UploadPath[256];									/**< 上传路径*/
	}TFtpClientCfg, *PFtpClientCfg;
	// Add by Caoym ftpClient 2018-09-06 End
	

	//add by carl 20190819 start
	typedef struct _HttpClientCfg
	{
		char szWebServerIP[256];			/**< 服务器地址*/
		char szWebServer2IP[256];			/**< 备用服务器*/
		int  nWebServerPort;				/**< 端口*/
		char bSSL;							/**< SSL连接,0:http(default) 1:https	*/
		char nSSLVerifyType;				/**< 0:匿名(default),1:CA证书	*/
		int  nSSLPort;						/**< SSL端口:默认443	*/
		int  nTimeout;						/**< 超时时间:默认5s	*/
		char bSendPlate;					/**< 推送车牌识别结果,1:推送(default),0:不推送	*/
		char bSendPlatePhoto;				/**< 推送图片,1:推送,0:不推送(default)	*/
		char bHttpClientEnable;				/**< 开启httpclient功能,0:不开启,1:开启 */
	}THttpClientCfg, *PHttpClientCfg;
	//add by carl 20190819 end

	
	/**
	 * @brief 变焦控制参数
	 */
	typedef struct _ZoomCtlCfg
	{
		ZoomCtlCmd cmd;
		unsigned int stepSpeed;
	}ZoomCtlCfg, *PZoomCtlCfg;

	/**
	 * @brief 对焦控制参数
	 */
	typedef struct _FocusCtlCfg
	{
		FocusCtlCmd cmd;
		unsigned int stepSpeed;
	}FocusCtlCfg, *PFocusCtlCfg;
	
	
	// add by Caoym 2019-01-10 Start
	/**
	* @brief 网络配置参数
	*/
	typedef struct _NetworkParam
	{
		/**
		* 网络接口 1-10MBase-T; 2-10Base-T全双工; 3-100Base-TX; 4-100M全双工; 5-10M/100M自适应;
		*/
		//int NetInterface;
		/** IP地址 */
		char DVRIP[16];
		/** 子网掩码 */
		char DVRIPMask[16];
		/** 网关地址 */
		char GatewayIpAddr[16];
		/** 物理地址 */
		char MACAddr[20];
		/** DNS地址1 */
		char DnsServer1IpAddr[16];
		/** DNS地址2 */
		char DnsServer2IpAddr[16];
		/** 通讯端口，默认8000 */
		//short DvrPort;
	}NetworkParam, *PNetworkParam;

	typedef struct _VideoParam
	{
		/**
		* 视频参数接口
		*/
		/** 模式,0-外部触发; 1 - 自动；2-彩色 ； 3-黑白；4-时间段*/
		int Mode;
		/** 白天时间段开始时间(单位秒=hour * 3600 + min * 60 + sec) */
		int DayStart;
		/** 白天时间段结束时间(单位秒=hour * 3600 + min * 60 + sec) */
		int DayEnd;
	}VideoParam, *PVideoParam;

	/**
	* Web API 信息
	*/
	typedef struct _WebApiVer
	{
		/** 版本号 */
		char standard[24];
		/** 编译日期 */
		char build[24];
	}WebApiVer, *PWebApiVer;

	/**
	* 设备信息
	*/
	typedef struct _DeviceParam
	{
		/** 软件版本号(主控版本) */
		char softwareVer[24];
		/** 硬件版本号 */
		char hardwareVer[24];
		/** 序列号 */
		char serialNum[24];
		/** DVR名称 */
		char dvrName[24];
		/** DVR类型 1--DVR， 2--NVR， 3--DVS/IPC */
		unsigned char dvrType;
		/** DVR报警输入个数 */
		unsigned char alarmInPortNum;
		/** 保留 */
		char reverved[2];
		/** Web API 信息 */
		WebApiVer webApiVer;
	}DeviceParam, *PDeviceParam;
	// add by Caoym 2019-01-10 End
	
	//用于与第三方对接（配置参数）
	typedef struct _WebServiceConfig
	{
		char			szGateID[MAX_PARK_CODE_LEN];			/**< 车场编号*/
		int				nDriverWayNo;							/**< 通道号*/
		char			szInitKey[MAX_COMM_LEN_32];				/**< 备案*/
		char			szServerUrl[MAX_URL_LEN];				/**< 服务器URL地址*/
		char			szAlternateServerUrl[MAX_URL_LEN];		/**< 备用服务器URL地址*/
		unsigned char	bEnable;								/**< 是否启用第三方通讯对接*/
		unsigned char	nTimeOut;								/**< 超时时间，以秒为单位*/
		unsigned char	nReserve[2];							/**< 保留字段*/
		char			szSmallParkID[MAX_PARK_CODE_LEN];       /**< 小车场编号*/
		char			Reserve[221];							/**< 保留字段*/
	}TWebServiceConfig, *PWebServiceConfig;
	
	
	//设备网络信息
	typedef struct _AlprDevNetInfo
	{
		char szIP[16];
		char szMask[16];
		char szGateWay[16];
		char szDns1[16];
		char szDns2[16];
		unsigned char byMacAddr[ALPR_MACADDR_LEN];
		unsigned char byRes[14];
	}TAlprDevNetInfo, *PAlprDevNetInfo;
	
	
	typedef struct CarSpaceConfig
	{
		unsigned char bEnable[MAX_CAR_SPACE_CNT];			/**< 是否车位使能*/
		unsigned char bEnableCarCheck[MAX_CAR_SPACE_CNT];	/**< 是否车辆检测使能*/
		char nWatchRecogCnt;						/**< 是否车辆检测总识别次数（3-10）*/
		char nWatchComfirmCnt;						/**< 是否车辆检测使能（1-10）*/

		char szResv1[2];							/**< 保留*/
		unsigned char	nSyncLedFlag;				/**< 分发本机Led状态，0：不分发，1：分发*/
		unsigned char	nRemoteDisplayFlag;			/**< LED灯显示模式（0-1），0：显示本机LED状态，1：显示远程相机LED状态 */
		char		sRemoteCamIP[16];				/**<远程相机IP */

		char szReserve[236];						/**< 保留*/

	}TCarSpaceConfig, *PCarSpaceConfig;


	 //@attention 
	 
	 //\subpage atten1 "含有设备句柄的函数注意事项"
	 
	 //\subpage atten2 "回调函数注意事项"
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
/** @} */

/*!\addtogroup 回调函数与全局函数					
*  本套SDK所定义的回调函数与全局函数汇总
*  @{ 
*/
    //识别结果的回调函数, plateInfo指向的是结构体plateInfo()
	/**
	* @brief 车牌识别结果回调函数
	* @param[out] plateInfo    仅车牌信息
	*	
	*  @attention \subpage atten2 "回调函数注意事项"
	*/
    typedef void  (WINAPI *RecogResultCallback)(LICENSE_PLATE *plateInfo);
	/**
	* @brief 扩展的车牌识别结果回调函数
	* @param[out] plateInfo    仅车牌信息
	* @param[out] pUserData    用户自定义数据
	*	
	*  @attention \subpage atten2 "回调函数注意事项"
	*/
    typedef void  (WINAPI *RecogResultCallbackEx)(LICENSE_PLATE *plateInfo, void* pUserData);
	/**
	* @brief 抓取图片回调函数
	* @param[out] pJpgBytes    JPG图片信息
	* @param[out] pUserData    用户自定义数据
	*	
	*  @attention \subpage atten2 "回调函数注意事项"
	*/
    typedef void  (WINAPI *RecogJPGCallback)(JPG_BYTES *pJpgBytes, void* pUserData);
	/**
	* @brief 车牌识别信息回调函数
	* @param[out] pRecogReslut   车牌的所有信息
	* @param[out] pUserData    用户自定义数据
	*	
	*  @attention \subpage atten2 "回调函数注意事项"
	*/
    typedef void  (WINAPI *RecogAllInfoCallback)(RECOG_ALL_INFO *pRecogResult, void* pUserData);

	/**
	* @brief 车位状态回调
	* @param[out] pCarSpaceInfo    车位信息
	* @param[out] pUserData    用户自定义数据
	*	
	*  @attention \subpage atten2 "回调函数注意事项"
	*/
    typedef void  (WINAPI *CarSpaceStateCallback)(CAR_SPACE_INFO *pCarSpaceInfo, void* pUserData);

#ifdef USE_JNI_INTERFACE
#else
	/**
	* @brief 车牌及车辆信息回调函数
	* @param[out] plateInfo    车牌及车辆信息
	* @param[out] pUserData    用户自定义数据
	*
	*  @attention \subpage atten2 "回调函数注意事项"
	*/
	typedef void  (WINAPI *CarInfoRecogCallback)(LICENSE_AND_CAR_RECOG_INFO *pRecogReslut, void* pUserData);



	//add by caoyanming 2017/11/01 Start
	/**
	* @brief 绘图回调函数(巨龙平台)
	* @param[in] nPort			播放器编号（0 ~ 127）
	* @param[in] hdc			设备HDC句柄
	* @param[in] nWidth			可绘制区域的宽度
	* @param[in] nHeight		可绘制区域的高度
	* @param[in] pContext		上下文相关参数
	*	
	*  @attention \subpage atten2 "回调函数注意事项"
	*/
	typedef int (WINAPI *HHCBOnDraw)(USHORT nPort, HDC hdc, int nWidth, int nHeight, void *pContext);
	//add by caoyanming 2017/11/01 End

	//add by Caoym 2018/03/30 Start
	/**
	* @brief 绘图回调函数(恩智平台)
	* @param[in] nPort			播放器编号（0 ~ 127）
	* @param[in] hdc			设备HDC句柄
	* @param[in] nWidth			可绘制区域的宽度
	* @param[in] nHeight		可绘制区域的高度
	* @param[in] pContext		上下文相关参数
	*
	*  @attention \subpage atten2 "回调函数注意事项"
	*/
	typedef long (WINAPI *EZCBOnDraw)(long nPort, HDC hdc, unsigned int nWidth, unsigned int nHeight, LONG pContext);
	//add by Caoym 2018/03/30 End
#endif
	
	/**
	* @brief 设备连接状态回调函数
	* @param[in] nHandleID		句柄的编号
	* @param[in] status			连接状态(0:未连接，1：已连接)
	*	
	*
	*  @attention \subpage atten1 "含有设备句柄的函数注意事项"、\subpage atten2 "回调函数注意事项"
	*/
	typedef void  (WINAPI *DevConnStatusCallback)(int nHandleID, int status);
	/**
	* @brief 图像数据抓取回调函数
	* @param[in] pBmpBuf		图片数据首地址
	* @param[in] len			图片数据长度
	*	
	*  @attention \subpage atten2 "回调函数注意事项"
	*/
	typedef void  (WINAPI *DeviceCaptureCallback)(void *pBmpBuf, int *len);
	/**
	* @brief 事件记录回调函数
	* @param[out] nType 事件类型
	* @param[out] pBuf  事件数据首地址
	* @param[out] len  事件数据长度
	* @param[out] pUserData 用户自定义数据首地址
	*	
	*  @attention \subpage atten2 "回调函数注意事项"
	*/
	typedef void  (WINAPI *RecordCallback)(int *nType, void *pBuf, int *len, void* pUserData);
	/**
	* @brief 设备状态回调函数
	* @param[out] pBuf			设备状态数据首地址(pBuf地址中实际类型是\link _DevStatus \endlink)		
	* @param[out] len			数据长度
	* @param[out] pUserData		自定义数据首地址
	*	
	*  @attention \subpage atten2 "回调函数注意事项"
	*/
	typedef void  (WINAPI *DevStatusCallback)(void *pBuf, int *len, void* pUserData);
	//add by caoyanming 2017/12/25 Start
	/**
	* @brief 获取维根卡号回调函数
	* @param[in] pWiegandData		维根卡数据信息
	* @param[out] pUserData			用户自定义数据
	*
	*  @attention \subpage atten2 "回调函数注意事项"
	*/
	typedef void  (WINAPI *WiegandDataCallback)(TWiegandData *pWiegandData, void* pUserData);
	//add by caoyanming 2017/12/25 End
	
#ifdef USE_JNI_INTERFACE
	// add by caoyanming&Wangzy 2018-10-16 Start
	typedef void (WINAPI *StreamDataCallBack) (char* pData, int len, void* pUserData);
	// add by caoyanming&Wangzy 2018-10-16 End
#endif

#ifdef USE_JNI_INTERFACE
	/**
	* @brief 启动AlprSDK
	* @return   0                   执行成功
	* @return   非0                  执行失败，其值为错误码
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_Startup();
	ALPRSDK_API OS_Error WINAPI AlprSDK_StartupJNI(JavaVM *gVM, const char* path);

	ALPRSDK_API OS_Error WINAPI AlprSDK_GetHandleIDByIP(const char szIP[32]);
#else
	/**
	* @brief 启动AlprSDK
	* @param[in]	 hNotifyWnd		设置窗口句柄
	* @param[in]	 nCommandID		设置消息的ID
	* @return	0					执行成功
	* @return	非0					执行失败，其值为错误码
	* @note hNotifyWnd推荐设置为NULL；nCommandID推荐设置为0
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_Startup(HWND hNotifyWnd, UINT nCommandID);
#endif

	/**
	* @brief 关闭AlprSDK，并释放相关的资源
	* @return	0					执行成功
	* @return	非0					执行失败，其值为错误码
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_Cleanup();

	/**
	* @brief 搜索设备
	* @param[in] nTimeout				搜索DVS的等待时间(单位毫秒)
	* @param[in] callback				搜索DVS的回调函数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	* @note 回调函数定义如下：											\n
	* \code{.c} 
	*  typedef void(WINAPI *CallbackServerFind)(DVS_MACHINE_TYPE nDeviceType,	
	*		char *pDeviceName,														
	*		char *pIP, BYTE macAddr[6], WORD wPortWeb, WORD wPortListen,			
	*		char *pSubMask, char *pGateway, char *pMultiAddr, char *pDnsAddr,		
	*		WORD wMultiPort, int nChannelNum, int nFindCount, DWORD dwDeviceID);
	* \endcode
	* \li nDeviceType						\------------------设备型号								\n
	* \li pDeviceName                       \------------------DVS的名称							\n
	* \li pIP								\------------------DVS的IP地址							\n
	* \li macAddr							\------------------要设置的DVS的物理地址				\n
	* \li wPortWeb							\------------------DVS的Web端口号						\n
	* \li wPortListen						\------------------DVS的通讯端口						\n
	* \li pSubMask							\------------------DVS的子网掩码						\n
	* \li pGateway							\------------------DVS的ID网关							\n
	* \li pMultiAddr						\------------------DVS的多播地址						\n
	* \li pDnsAddr							\------------------DVS的DNS地址							\n
	* \li wMultiPort						\------------------DVS的多播端口号						\n
	* \li nChannelNum						\------------------DVS的通道数							\n
	* \li nFindCount						\------------------发现DVS的个数，假如一个没有该值为0，那么前面的参数也无效
	* 
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_SearchAllCameras(unsigned int nTimeout, void* callback);
// #ifdef USE_JNI_INTERFACE
 	ALPRSDK_API OS_Error WINAPI AlprSDK_SearchAllCamerasJNI(unsigned int nTimeout, void* callback);
// #endif

#ifdef USE_JNI_INTERFACE
	/**	
	* 	 
	* @brief 初始化SDK的句柄
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	* @note		一个句柄只能初始化一次；同时最大可支持40台设备，即40画面
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_InitHandle(int nHandleID);
#if  defined(_WIN64)
	//none
#elif  defined(WIN32)
	ALPRSDK_API OS_Error WINAPI AlprSDK_InitVideoHandle(int nHandleID, HWND hVideoWnd);
#else
#endif

#else
	/**	
	* 	 
	* @brief 初始化SDK的句柄
	* @param[in] nHandleID				句柄的编号
	* @param[in] hVideoWnd				视频显示窗口的句柄,如果不需要视频，设置为NULL
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	* @note		一个句柄只能初始化一次；同时最大可支持40台设备，即40画面
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_InitHandle(int nHandleID, HWND hVideoWnd);
#endif

	/**
	* @brief 释放句柄
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_UnInitHandle(int nHandleID);

	/**
	* @brief 设置连接超时
	* @param[in] nHandleID				句柄的编号
	* @param[in] nTimeout				超时时间（单位毫秒）
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_SetConnectTimeout(int nHandleID, unsigned int nTimeout);
	//old
    //ALPRSDK_API OS_Error WINAPI AlprSDK_ConnectDev(int nHandleID, const DEVINFO *pDev,
    //    RecogResultCallback callback);
	/**
	* @brief 连接设备
	* @param[in] nHandleID				句柄的编号
	* @param[in] pDev					设备的链接信息（函数AlprSDK_SearchAllCameras返回的设备信息）
	* @param[in] type					连接类型
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_ConnectDev(int nHandleID, const DEVINFO *pDev, EAPIClientType type);


	/**
	* @brief 连接设备
	* @param[in] nHandleID				句柄的编号
	* @param[in] pDev					设备的链接信息（函数AlprSDK_SearchAllCameras返回的设备信息）
	* @param[in] callback				扩展的车牌识别结果回调函数指针
	* @param[out] pUserData				用户自定义数据
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	* @deprecated						由于特殊的原因，这个函数可能会在将来的版本中取消。
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"、淘汰中\n
	*/
	#ifdef USE_JNI_INTERFACE
	// ALPRSDK_API OS_Error WINAPI AlprSDK_ConnectDevEx(int nHandleID, const DEVINFO *pDev,
    //     RecogResultCallbackEx callback, void* pUserData);
	#else
    ALPRSDK_API OS_Error WINAPI AlprSDK_ConnectDevEx(int nHandleID, const DEVINFO *pDev,
        RecogResultCallbackEx callback, void* pUserData);
	#endif

	/**
	* @brief 断开设备连接
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_DisConnectDev(int nHandleID);

	/**
	* @brief 打开视频
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_StartVideo(int nHandleID);
	/**
	* @brief 关闭视频
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_StopVideo(int nHandleID);
	/**
	* @brief 获取视频尺寸
	* @param[in] nHandleID				句柄的编号
	* @param[out] pWidth				视频宽度
	* @param[out] pHeight				视频高度
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_GetVideoSize(int nHandleID, int *pWidth, int *pHeight);

#ifdef USE_JNI_INTERFACE
#else
	/**
	* @brief 在视频中绘制矩形
	* @param[in] nHandleID				句柄的编号
	* @param[in] rect					矩形区域
	* @param[in] lineWidth				线宽
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	* @deprecated						该函数已经废弃，绘制图形请使用AlprSDK_RegCBOnDraw，并在其回调函数中绘制。
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_DrawRectOnVideo(int nHandleID, XRect rect, int lineWidth);

	/**
	* @brief 清除视频中绘制的矩形
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	* @deprecated						该函数已经废弃，绘制图形请使用AlprSDK_RegCBOnDraw，并在其回调函数中绘制。
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_ClearRectOnVideo(int nHandleID);
#endif

	/**
	* @brief 设置识别区域
	* @param[in] nHandleID				句柄的编号
	* @param[in] pROI					区域的结构体
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_SetRoi(int nHandleID, const XRect *pROI);

	/**
	* @brief 获取识别区域
	* @param[in] nHandleID				句柄的编号
	* @param[out] pROI					区域的结构体
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_GetRoi(int nHandleID, XRect *pROI);

	/**
	* @brief 设置设备信息
	* @param[in] nHandleID				句柄的编号
	* @param[out] pdev					设备信息
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_SetDevInfo(int nHandleID, const DEVINFO* pdev);

	/**
	* @brief 获取设备信息
	* @param[in] nHandleID				句柄的编号
	* @param[out] pdev					设备信息
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_GetDevInfo(int nHandleID, DEVINFO* pdev);

	/**
	* @brief 设置相机配置信息
	* @param[in] nHandleID				句柄的编号
	* @param[in] pCamera				相机配置信息
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	#ifdef USE_JNI_INTERFACE
	// ALPRSDK_API OS_Error WINAPI AlprSDK_SetCameraCfg(int nHandleID, const CAMERA_CONFIG *pCamera);
	#else
    ALPRSDK_API OS_Error WINAPI AlprSDK_SetCameraCfg(int nHandleID, const CAMERA_CONFIG *pCamera);
	#endif
	
	/**
	* @brief 获取相机配置信息
	* @param[in] nHandleID				句柄的编号
	* @param[out] pCamera				相机配置信息
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	#ifdef USE_JNI_INTERFACE
	// ALPRSDK_API OS_Error WINAPI AlprSDK_GetCameraCfg(int nHandleID, CAMERA_CONFIG *pCamera);
	#else
    ALPRSDK_API OS_Error WINAPI AlprSDK_GetCameraCfg(int nHandleID, CAMERA_CONFIG *pCamera);
	#endif
	
	/**
	* @brief 设置道闸配置参数
	* @param[in] nHandleID				句柄的编号
	* @param[in] pGate					道闸配置参数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_SetGateCfg(int nHandleID, const GATE_CONFIG *pGate);

	/**
	* @brief 获取道闸配置参数
	* @param[in] nHandleID				句柄的编号
	* @param[out] pGate					道闸配置参数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_GetGateCfg(int nHandleID, GATE_CONFIG *pGate);

	/**
	* @brief 设置识别参数
	* @param[in] nHandleID				句柄的编号
	* @param[in] pAlpr					道闸配置参数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_SetAlprCfg(int nHandleID, const ALPR_CONFIG *pAlpr);

	/**
	* @brief 获取相机识别参数
	* @param[in] nHandleID				句柄的编号
	* @param[out] pAlpr					识别参数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_GetAlprCfg(int nHandleID, ALPR_CONFIG *pAlpr);


	/**
	* @brief 设置相机应用层算法参数
	* @param[in] nHandleID				句柄的编号
	* @param[in] pAlpr					应用层算法参数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_SetAppAlprCfg(int nHandleID, const APP_ALPR_CONFIG *pAppAlpr);

	/**
	* @brief 获取相机应用层算法参数
	* @param[in] nHandleID				句柄的编号
	* @param[out] pAlpr					应用层算法参数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_GetAppAlprCfg(int nHandleID, APP_ALPR_CONFIG *pAppAlpr);


	/**
	* @brief 设置485透传配置信息
	* @param[in] nHandleID				句柄的编号
	* @param[in] pRS485					485透传配置信息
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	#ifdef USE_JNI_INTERFACE
	// ALPRSDK_API OS_Error WINAPI AlprSDK_SetRS485Cfg(int nHandleID, const RS485_CONFIG *pRS485);
	#else
    ALPRSDK_API OS_Error WINAPI AlprSDK_SetRS485Cfg(int nHandleID, const RS485_CONFIG *pRS485);
	#endif
	
	/**
	* @brief 获取485透传配置信息
	* @param[in] nHandleID				句柄的编号
	* @param[out] pRS485				485透传配置信息
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	#ifdef USE_JNI_INTERFACE
	// ALPRSDK_API OS_Error WINAPI AlprSDK_GetRS485Cfg(int nHandleID, RS485_CONFIG *pRS485);
	#else
    ALPRSDK_API OS_Error WINAPI AlprSDK_GetRS485Cfg(int nHandleID, RS485_CONFIG *pRS485);
	#endif
	
	/**
	* @brief 设置相机ISP参数
	* @param[in] nHandleID				句柄的编号
	* @param[in] pCamera				相机ISP参数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	#ifdef USE_JNI_INTERFACE
	// ALPRSDK_API OS_Error WINAPI AlprSDK_SetcameraExpParam(int nHandleID, const CAMERA_EXP_PARAM *pCamera);
	#else
	ALPRSDK_API OS_Error WINAPI AlprSDK_SetcameraExpParam(int nHandleID, const CAMERA_EXP_PARAM *pCamera);
	#endif
	
	/**
	* @brief 获取相机ISP参数
	* @param[in] nHandleID				句柄的编号
	* @param[out] pCamera				相机ISP参数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	#ifdef USE_JNI_INTERFACE
	// ALPRSDK_API OS_Error WINAPI AlprSDK_GetcameraExpParam(int nHandleID, CAMERA_EXP_PARAM *pCamera);
	#else
	ALPRSDK_API OS_Error WINAPI AlprSDK_GetcameraExpParam(int nHandleID, CAMERA_EXP_PARAM *pCamera);
	#endif

	//设置和获取设备序列号 add by fangzx 20170306
	/**
	* @brief 设置设备加密信息
	* @param[in] nHandleID				句柄的编号
	* @param[in] pDevSN					设备加密信息
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_SetDevSN(int nHandleID, const DEVSN *pDevSN);
	/**
	* @brief 获取设备加密信息
	* @param[in] nHandleID				句柄的编号
	* @param[out] pDevSN				设备加密信息
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_GetDevSN(int nHandleID, DEVSN *pDevSN);
	/**
	* @brief 获取设备版本信息
	* @param[in] nHandleID				句柄的编号
	* @param[out] pDevVerInfo			设备版本信息
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_GetDevVerInfo(int nHandleID, DEV_VER_INFO *pDevVerInfo);
	//end
	/**
	* @brief 打开道闸
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_OpenGate(int nHandleID);
 
 #ifdef USE_JNI_INTERFACE
 #else
	/**
	* @brief 打开道闸
	* @param[in] nHandleID				句柄的编号
	* @param[in] pJpgID					图片ID，当收到图片id，如果脱机已经处理，将不执行命令
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_OpenGateByJpgID(int nHandleID, char pJpgID[JPG_ID_LENGTH]);

	/**
	* @brief 捕获一张bmp图片
	* @param[in] nHandleID				句柄的编号
	* @param[out] pBmpBuf				存放数据的缓冲区，内存由调用层分配，SDK将设备返回的数据放入缓冲区
	* @param[out] len					数据的长度
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_CaptureBmp(int nHandleID, void **pBmpBuf, int *len);
#endif

	/**
	* @brief 导入车牌信息
	* @param[in] nHandleID				句柄的编号
	* @param[in] t						车牌类型，取值参数枚举ePlateListType
	* @param[in] pPlateList			    存放数据的缓冲区，内存由调用层分配
	* @param[in] count					车牌数据个数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	* @deprecated						由于特殊的原因，这个函数可能会在将来的版本中取消。
	*	@attention  \subpage atten1 "含有设备句柄的函数注意事项"、淘汰中\n
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_ImportPlateList(int nHandleID,int t, PLATE_INFO *pPlateList, int count);

	/**
	* @brief 导出车牌信息
	* @param[in] nHandleID				句柄的编号
	* @param[in] t						车牌类型，取值参数枚举ePlateListType
	* @param[in/out] pPlateList		    存放数据的缓冲区，内存由调用层分配，SDK将设备返回的数据放入缓冲区
	* @param[out] pCount				车牌数据个数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_ExportPlateList(int nHandleID, int t, PLATE_INFO *pPlateList, int* pCount);

	/**
	* @brief 清除白/黑/固定车名单数据
	* @param[in] nHandleID				句柄的编号
	* @param[in] t						车牌类型，取值参数枚举\link ePlateListType \endlink
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_ClearPlateList(int nHandleID, int t);

	//add by caoyanming 2017/11/10 Start
	/**
	* @brief 追加车牌信息（如果有重复车牌，会直接替换）
	* @param[in] nHandleID				句柄的编号
	* @param[in] t						车牌类型，取值参数枚举\link ePlateListType \endlink
	* @param[in] pPlateList				存放数据的缓冲区，内存由调用层分配
	* @param[in] count					车牌数据个数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_AddPlateList(int nHandleID, int t, PLATE_INFO *pPlateList, int count);

	/**
	* @brief 删除车牌信息
	* @param[in] nHandleID				句柄的编号
	* @param[in] t						车牌类型，取值参数枚举\link ePlateListType \endlink
	* @param[in] pPlateList				存放数据的缓冲区，内存由调用层分配
	* @param[in] count					车牌数据个数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_DelPlateList(int nHandleID, int t, PLATE_INFO *pPlateList, int count);
	//add by caoyanming 2017/11/10 End

	//add by fangzx 2018/03/30 Start
	/**
	* @brief 追加车牌信息（如果有重复车牌，会直接替换）,车牌名单中增加用户姓名，数据部分采用utf-8编码
	* @param[in] nHandleID				句柄的编号
	* @param[in] t						车牌类型，取值参数枚举\link ePlateListType \endlink
	* @param[in] pPlateList				存放数据的缓冲区，内存由调用层分配
	* @param[in] count					车牌数据个数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_AddPlateListExt(int nHandleID, int t, PLATE_INFO_EXT *pPlateList, int count);

	/**
	* @brief 删除车牌信息，数据部分采用utf-8编码
	* @param[in] nHandleID				句柄的编号
	* @param[in] t						车牌类型，取值参数枚举\link ePlateListType \endlink
	* @param[in] pPlateList				存放数据的缓冲区，内存由调用层分配
	* @param[in] count					车牌数据个数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_DelPlateListExt(int nHandleID, int t, PLATE_INFO_EXT *pPlateList, int count);

	/**
	* @brief 导出车牌信息，数据部分采用utf-8编码
	* @param[in] nHandleID				句柄的编号
	* @param[in] t						车牌类型，取值参数枚举\link ePlateListType \endlink
	* @param[in] pPlateList				存放数据的缓冲区，内存由调用层分配
	* @param[out] pCount				车牌数据个数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_ExportPlateListExt(int nHandleID, int t, PLATE_INFO_EXT *pPlateList, int* pCount);

	/**
	* @brief 清除白/黑/固定车名单数据
	* @param[in] nHandleID				句柄的编号
	* @param[in] t						车牌类型，取值参数枚举\link ePlateListType \endlink
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_ClearPlateListExt(int nHandleID, int t);
	//add by fangzx 2018/03/30 End

	/**
	* @brief 485透明传输，长度不能超过255
	* @param[in] nHandleID				句柄的编号
	* @param[in] pdata					数据首地址
	* @param[in] len					数据长度
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	* @note 本API可以直接传送RS485数据
	*		比如“欢迎光临”的RS485数据为 \n
	*		AA 42 00 00 AE 1A 00 23 09 00 01 BB B6 D3 AD B9 E2 C1 D9 24 0B 00 00 32 30 31 38 2D 30 35 2D 32 38 F5 35 \n
	*		直接将二进制数据放入pdata中即可。
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_CommTransparentTransfer(int nHandleID, unsigned char *pdata, int len);


 #ifdef USE_JNI_INTERFACE
 #else
	/**
	* @brief 485透明传输，长度不能超过255
	* @param[in] nHandleID				句柄的编号
	* @param[in] pJpgID					图片ID，当收到图片id，如果脱机已经处理，将不执行命令
	* @param[in] pdata					数据首地址
	* @param[in] len					数据长度
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	* @note 本API可以直接传送RS485数据
	*		比如“欢迎光临”的RS485数据为 \n
	*		AA 42 00 00 AE 1A 00 23 09 00 01 BB B6 D3 AD B9 E2 C1 D9 24 0B 00 00 32 30 31 38 2D 30 35 2D 32 38 F5 35 \n
	*		直接将二进制数据放入pdata中即可。
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_CommTransparentTransferByJpgID(int nHandleID, char pJpgID[JPG_ID_LENGTH], unsigned char *pdata, int len);
#endif

	/**
	* @brief 创建被识别JPG图片的回调函数
	* @param[in] nHandleID				句柄的编号
	* @param[in] callback				回调函数指针
	* @param[in] pUserData				用户数据首地址
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	
	*  @attention 
	* \subpage atten1 "含有设备句柄的函数注意事项"、\subpage atten2 "回调函数注意事项"
	*/
    //ALPRSDK_API OS_Error WINAPI AlprSDK_CreateJPGTask(int nHandleID, RecogJPGCallback callback, void* pUserData);

	/**
	* @brief 清除图片回传
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention  \subpage atten1 "含有设备句柄的函数注意事项"、淘汰中\n
	*/
    //ALPRSDK_API OS_Error WINAPI AlprSDK_ClearJPGTask(int nHandleID);

 #ifdef USE_JNI_INTERFACE
 #else
	/**
	* @brief 手动识别，不受各种策略的影响，直接识别当前图片。手动识别后,需要配置开闸命令，才能够开启闸门。
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_RecogByManual(int nHandleID);
#endif

	/**
	* @brief 设置识别区域扩展方法
	* @param[in] nHandleID				句柄的编号
	* @param[in] rgnRoi					坐标区域
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_SetRoiEx(int nHandleID, const XPoint rgnRoi[4]);

	/**
	* @brief 获取识别区域扩展方法
	* @param[in] nHandleID				句柄的编号
	* @param[out] rgnRoi				坐标区域
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_GetRoiEx(int nHandleID, XPoint rgnRoi[4]);

#ifdef USE_JNI_INTERFACE
	// add by Wangzy 2018/10/22 Start
   /**
	* @brief 注册流数据回调(感知平台)
	* @param[in] nHandleID				句柄的编号
	* @param[in] callback				回调函数
	* @param[in] pContext				用户数据指针
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	* @note								如果想在视频区域绘制图形，请使用该API注册回调函数，视频帧每次刷新，都会自动调用 /n
	*									设置的回调函数，在回调函数中可以通过GDI绘制任意图形。
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_CreateEZStreamDataCB(int nHandleID, StreamDataCallBack callback, void* pContext);
#ifdef USE_JNI_INTERFACE
	ALPRSDK_API OS_Error WINAPI AlprSDK_CreateEZStreamDataCBJNI(int nHandleID, void* callback);
#endif
	// add by Wangzy 2018/10/22 End

   /**
	* @brief 清除流数据回调(感知平台)
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	* @note								如果想在视频区域绘制图形，请使用该API注册回调函数，视频帧每次刷新，都会自动调用 /n
	*									设置的回调函数，在回调函数中可以通过GDI绘制任意图形。
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_ClearEZStreamDataCB(int nHandleID);
#ifdef USE_JNI_INTERFACE
	ALPRSDK_API OS_Error WINAPI AlprSDK_ClearEZStreamDataCBJNI(int nHandleID);
#endif

	// add for JunitTest by wangzy 2018-12-20 - Start
	ALPRSDK_API OS_Error WINAPI AlprSDK_CreateNetworkEventCBJNI(int nHandleID, void* callback);
	ALPRSDK_API OS_Error WINAPI AlprSDK_ClearNetworkEventCBJNI(int nHandleID);
	// add for JunitTest by wangzy 2018-12-20 - End
#else
	/**
	* @brief 绘制识别区域
	* @param[in] nHandleID				句柄的编号
	* @param[in] rgnRoi					坐标区域
	* @param[in] style					线段类型（0---SOLID, 1---DASH）
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	* @deprecated						该函数已经废弃，绘制图形请使用AlprSDK_RegCBOnDraw，并在其回调函数中绘制。
	*	@attention  \subpage atten1 "含有设备句柄的函数注意事项"、暂停使用\n
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_DrawRgnOnVideo(int nHandleID, XPoint rgnRoi[4], int style);
	/**
	* @brief 绘制识别区域(扩展)
	* @param[in] nHandleID				句柄的编号
	* @param[in] rgnRoi					坐标区域
	* @param[in] style					线段类型（0---SOLID, 1---DASH）
	* @param[in] color					线段颜色(RGB)
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	* @deprecated						该函数已经废弃，绘制图形请使用AlprSDK_RegCBOnDraw，并在其回调函数中绘制。
	*	@attention  \subpage atten1 "含有设备句柄的函数注意事项"、暂停使用\n
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_DrawRgnOnVideoEx(int nHandleID, XPoint rgnRoi[4], int style, COLORREF color);
	/**
	* @brief 绘制识别区域(废弃)
	* @param[in] nHandleID				句柄的编号
	* @param[in] rect					坐标区域
	* @param[in] lineWidth				线段宽度
	* @param[in] color					线段颜色(RGB)
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	* @deprecated						该函数已经废弃，绘制图形请使用AlprSDK_RegCBOnDraw，并在其回调函数中绘制。
	*	@attention  \subpage atten1 "含有设备句柄的函数注意事项"、暂停使用\n
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_DrawRectOnVideoEx(int nHandleID, XRect rect, int lineWidth, COLORREF color);
	// add by caoyanming 20171101 Start
	/**
	* @brief 注册绘图回调(巨龙平台)
	* @param[in] nHandleID				句柄的编号
	* @param[in] callback				回调函数
	* @param[in] pContext				用户数据指针
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	* @note								如果想在视频区域绘制图形，请使用该API注册回调函数，视频帧每次刷新，都会自动调用 /n
	*									设置的回调函数，在回调函数中可以通过GDI绘制任意图形。
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_RegCBOnDraw(int nHandleID, HHCBOnDraw callback, void* pContext);
	// add by caoyanming 20171101 End

	// add by caoyanming 20180330 Start
	/**
	* @brief 注册绘图回调(恩智平台)
	* @param[in] nHandleID				句柄的编号
	* @param[in] callback				回调函数
	* @param[in] pContext				用户数据指针
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	* @note								如果想在视频区域绘制图形，请使用该API注册回调函数，视频帧每次刷新，都会自动调用 /n
	*									设置的回调函数，在回调函数中可以通过GDI绘制任意图形。
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_RegEZCBOnDraw(int nHandleID, HHCBOnDraw callback, void* pContext);
	// add by caoyanming 20180330 End
#endif

	/**
	* @brief 车牌回调函数设置
	* @param[in] nHandleID				句柄的编号
	* @param[in] callback				回调委托
	* @param[in] pUserData				用户数据
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_CreateRecogAllInfoTask(int nHandleID, RecogAllInfoCallback callback, void* pUserData);


	/**
	* @brief 车位回调函数设置
	* @param[in] nHandleID				句柄的编号
	* @param[in] callback				回调委托
	* @param[in] pUserData				用户数据
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_CreateCarSpaceTask(int nHandleID, CarSpaceStateCallback callback, void* pUserData);

#ifdef USE_JNI_INTERFACE
	ALPRSDK_API OS_Error WINAPI AlprSDK_CreateRecogAllInfoTaskJNI(int nHandleID, void* callback);
#endif

	/**
	* @brief 车牌回调函数清除
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention  \subpage atten1 "含有设备句柄的函数注意事项"、淘汰中\n
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_ClearRecogAllInfoTask(int nHandleID);

	/**
	* @brief 车位回调函数清除
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention  \subpage atten1 "含有设备句柄的函数注意事项"、淘汰中\n
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_ClearCarSpaceTask(int nHandleID);

#ifdef USE_JNI_INTERFACE
	ALPRSDK_API OS_Error WINAPI AlprSDK_ClearRecogAllInfoTaskJNI(int nHandleID);
#endif


#ifdef USE_JNI_INTERFACE
#else
	/**
	* @brief 车牌识别信息、车辆特征回调函数设置
	* @param[in] nHandleID				句柄的编号
	* @param[in] callback				回调委托
	* @param[in] pUserData				用户数据
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_CreateRecogCarInfoTask(int nHandleID, CarInfoRecogCallback callback, void* pUserData);

	/**
	* @brief 车牌识别信息、车辆特征回调函数清除
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention  \subpage atten1 "含有设备句柄的函数注意事项"、淘汰中\n
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_ClearRecogCarInfoTask(int nHandleID);
#endif




	/**
	* @brief OSD参数设置
	* @param[in] nHandleID				句柄的编号
	* @param[in] pOsdCtrl				OSD参数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_SetOSD(int nHandleID, OSD_CTRL *pOsdCtrl);

	/**
	* @brief OSD参数获取
	* @param[in] nHandleID				句柄的编号
	* @param[out] pOsdCtrl				OSD参数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_GetOSD(int nHandleID, OSD_CTRL *pOsdCtrl);


	/**
	* @brief 多行OSD参数设置
	* @param[in] nHandleID				句柄的编号
	* @param[in] pOsdCtrl				OSD参数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_SetMultiLineOSD(int nHandleID, MULTI_OSD_CTRL *pOsdCtrl);

	/**
	* @brief 多行OSD参数获取
	* @param[in] nHandleID				句柄的编号
	* @param[out] pOsdCtrl				OSD参数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_GetMutiLineOSD(int nHandleID, MULTI_OSD_CTRL *pOsdCtrl);


	/**
	* @brief 视频参数设置
	* @param[in] nHandleID				句柄的编号
	* @param[in] pVideoCtrl				视频参数（暂时只支持两种： 0:1080p，3:D1）
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_SetVideoConfig(int nHandleID, ALPR_VIDEO_CONFIG *pVideoCtrl);

	/**
	* @brief 视频参数获取
	* @param[in] nHandleID				句柄的编号
	* @param[out] pVideoCtrl			视频参数（暂时只支持两种： 0:1080p，3:D1）
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_GetVideoConfig(int nHandleID, ALPR_VIDEO_CONFIG *pVideoCtrl);

	/**
	* @brief 设置虚拟线圈区域
	* @param[in] nHandleID				句柄的编号
	* @param[in] rgnRoi					虚拟线圈区域
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_SetVirtualCoil(int nHandleID, const XPoint rgnRoi[4]);

	/**
	* @brief 获取虚拟线圈区域
	* @param[in] nHandleID				句柄的编号
	* @param[in] rgnRoi					虚拟线圈区域
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
    ALPRSDK_API OS_Error WINAPI AlprSDK_GetVirtualCoil(int nHandleID, XPoint rgnRoi[4]);

	/**
	* @brief 设置系统时间
	* @param[in] nHandleID				句柄的编号
	* @param[in] pSysTime				时间信息
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_SetSysTime(int nHandleID, PSYS_TIME pSysTime);
//add by caoyanming 2019/01/10 Start
	/**
	* @brief 获取系统时间
	* @param[in] nHandleID				句柄的编号
	* @param[out] pSysTime				时间信息
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_GetSysTime(int nHandleID, PSYS_TIME pSysTime);
//add by caoyanming 2019/01/10 End

 #ifdef USE_JNI_INTERFACE
 #else
	/**
	* @brief 发送语音信息
	* @param[in] nHandleID				句柄的编号
	* @param[in] pRS485_Data			语音信息
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_BroadcastVoice(int nHandleID, PRS485_DATA pRS485_Data);
 #endif

 #ifdef USE_JNI_INTERFACE
 #else
	/**
	* @brief 控制LED屏显示实时信息
	* @param[in] nHandleID				句柄的编号
	* @param[in] pRS485_Data			LED屏显示信息
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	* @note 使用说明：下面的代码使显示屏显示“甘FMW1N学”
	* \code{.c}
	* TRS485_DATA RS485_Data;
	* memset(&RS485_Data, 0x00, sizeof(TRS485_DATA));
	* RS485_Data.DestAddr = 0;
	* RS485_Data.RollingCode = 1;
	* strcpy((char*)RS485_Data.DataBuf, "甘FMW1N学");
	* int len = strlen((char*)RS485_Data.DataBuf);
	* RS485_Data.DataLen = len;
	* AlprSDK_ControlDisplayScreen(m_nHandleID, &RS485_Data);
	* \endcode
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_ControlDisplayScreen(int nHandleID, PRS485_DATA pRS485_Data);
 #endif
 
	/**
	* @brief 设置基本参数
	* @param[in] nHandleID				句柄的编号
	* @param[in] pBase_Param			基本参数（是否显示识别区域与虚拟线圈）
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_SetBaseParam(int nHandleID, const PBASE_PARAM pBase_Param);

	/**
	* @brief 获取基本参数
	* @param[in] nHandleID				句柄的编号
	* @param[in] pBase_Param			基本参数（是否显示识别区域与虚拟线圈）
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_GetBaseParam(int nHandleID, PBASE_PARAM pBase_Param);

 #ifdef USE_JNI_INTERFACE
 #else
	/**
	* @brief 设置是否显示识别区域和虚拟线圈（强制显示识别区域和虚拟线圈）
	* @param[in] nHandleID				句柄的编号
	* @param[in] bRgnArea				基本参数（是否显示识别区域与虚拟线圈）
	* @param[in] bVirtualCoil			显示虚拟线圈
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_ISDisplayRgnAndVC(int nHandleID, bool bRgnArea, bool bVirtualCoil);
 #endif

	/**
	* @brief 发送心跳获取设备连接状态
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_SendHeartBeat(int nHandleID);
	//typedef void  (WINAPI *ConnectStatusCallback)(int *nHandleID, int *nStatus);
	//创建连接状态回调
	//返回值：0：成功
	//		<0：失败，参考枚举
	//ALPRSDK_API OS_Error WINAPI AlprSDK_CreateConnectStatusTask(ConnectStatusCallback callback);
	//ALPRSDK_API OS_Error WINAPI AlprSDK_ClearConnectStatusTask();

	/**
	* @brief 创建连接状态回调
	* @param[in] nHandleID				句柄的编号
	* @param[in] callback				回调函数指针
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	
	*  @attention \subpage atten1 "含有设备句柄的函数注意事项"、\subpage atten2 "回调函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_SetDevConnStatusCallBack(int nHandleID, DevConnStatusCallback callback);
#ifdef USE_JNI_INTERFACE
	ALPRSDK_API OS_Error WINAPI AlprSDK_SetDevConnStatusCallBackJNI(int nHandleID, void* callback);
#endif

	/**
	* @brief 取消连接状态回调
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*
	*  @attention \subpage atten1 "含有设备句柄的函数注意事项"、\subpage atten2 "回调函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_ClearDevConnStatusCallBack(int nHandleID);
#ifdef USE_JNI_INTERFACE
	ALPRSDK_API OS_Error WINAPI AlprSDK_ClearDevConnStatusCallBackJNI(int nHandleID);
#endif

	/**
	* @brief 恢复设备参数
	* @param[in] nHandleID				句柄的编号
	* @param[in] nResetType				重启类型(0：恢复技术参数，1：恢复网络参数，2：恢复所有参数)
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_ResetFactory(int nHandleID, int nResetType);

	/**
	* @brief 下发数据到设备
	* @param[in] nHandleID				句柄的编号
	* @param[in] tType					表类型
	* @param[in] pBuf					数据
	* @param[in] nCount					行数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_SetDeviceData(int nHandleID, DATA_TABLE_TYPE_E tType, char *pBuf, int nCount);

	/**
	* @brief 清空某张表
	* @param[in] nHandleID				句柄的编号
	* @param[in] tType					表类型
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_ClearDeviceData(int nHandleID, DATA_TABLE_TYPE_E tType);

	/**
	* @brief 从设备获取数据数量
	* @param[in] nHandleID				句柄的编号
	* @param[in] tType					表类型
	* @param[in] offset					从某个ID开始取
	* @param[out] nCount				记录数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_GetDeviceDataCount(int nHandleID, DATA_TABLE_TYPE_E tType, int offset, int *nCount);

	/**
	* @brief 从设备获取数据
	* @param[in] nHandleID				句柄的编号
	* @param[in] tType					表类型
	* @param[in] offset					从某个ID开始取
	* @param[out] pBuf					数据指针
	* @param[inout] nCount				软件想要取的记录数/设备实现返回的记录数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_GetDeviceData(int nHandleID, DATA_TABLE_TYPE_E tType, int offset, char *pBuf, int *nCount);

	/**
	* @brief 设备抓图回调设置
	* @param[in] nHandleID				句柄的编号
	* @param[in] callback				回调函数指针
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	
	*  @attention \subpage atten1 "含有设备句柄的函数注意事项"、\subpage atten2 "回调函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_CreateCaptureJpgCallback(int nHandleID, DeviceCaptureCallback callback);
#ifdef USE_JNI_INTERFACE
	ALPRSDK_API OS_Error WINAPI AlprSDK_CreateCaptureJpgCallbackJNI(int nHandleID, void* callback);
#endif

	/**
	* @brief 设备抓图回调清除
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	
	*  @attention \subpage atten1 "含有设备句柄的函数注意事项"、\subpage atten2 "回调函数注意事项"、 淘汰中\n
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_ClearCaptureJpgCallback(int nHandleID);
#ifdef USE_JNI_INTERFACE
	ALPRSDK_API OS_Error WINAPI AlprSDK_ClearCaptureJpgCallbackJNI(int nHandleID);
#endif

	/**
	* @brief 设备抓图接口，直接抓取当前的图片，并通过回调函数返回给应用层DeviceCaptureCallback
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_CaptureJpg(int nHandleID);

	/**
	* @brief 设置脱机参数
	* @param[in] nHandleID				句柄的编号
	* @param[in] pOfflineParam			脱机参数（UTF8编码）
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_SetOfflineParam(int nHandleID, const POfflineParam pOfflineParam);

	/**
	* @brief 获取脱机参数
	* @param[in] nHandleID				句柄的编号
	* @param[out] pOfflineParam			脱机参数（UTF8编码）
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_GetOfflineParam(int nHandleID, POfflineParam pOfflineParam);

	/**
	* @brief 设置脱机记录事件回调
	* @param[in] nHandleID				句柄的编号
	* @param[in] callback				脱机记录事件回调
	* @param[in] pUserData				用户数据指针
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	
	*  @attention \subpage atten1 "含有设备句柄的函数注意事项"、\subpage atten2 "回调函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_CreateRecordCallback(int nHandleID, RecordCallback callback, void* pUserData);
#ifdef USE_JNI_INTERFACE
	ALPRSDK_API OS_Error WINAPI AlprSDK_CreateRecordCallbackJNI(int nHandleID, void* callback);
#endif

	/**
	* @brief 清除脱机记录事件回调
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	
	*  @attention \subpage atten1 "含有设备句柄的函数注意事项"、\subpage atten2 "回调函数注意事项"、 淘汰中\n
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_ClearRecordCallback(int nHandleID);
#ifdef USE_JNI_INTERFACE
	ALPRSDK_API OS_Error WINAPI AlprSDK_ClearRecordCallbackJNI(int nHandleID);
#endif

	/**
	* @brief 设置脱机记录事件回调
	* @param[in] nHandleID				句柄的编号
	* @param[in] nCountryCode			国家代码(请参照\link _APP_COUNTRY_CODE_E \endlink)
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	
	*  @attention \subpage atten1 "含有设备句柄的函数注意事项"、\subpage atten2 "回调函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_SetCountryCode(int nHandleID, unsigned short nCountryCode);

	/**
	* @brief SD卡操作
	* @param[in] nHandleID				句柄的编号
	* @param[in] nOpType				SD卡状态信息定义
	* @param[in] pSDCardCapacity		SD卡容量信息
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_OperateSDCard(int nHandleID, SDCard_OpType_E nOpType, PSDCardCapacity pSDCardCapacity);

	/**
	* @brief 设备状态回调
	* @param[in] nHandleID				句柄的编号
	* @param[in] callback				回调函数
	* @param[in] pUserData				用户数据指针
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	
	*  @attention \subpage atten1 "含有设备句柄的函数注意事项"、\subpage atten2 "回调函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_CreateDevStatusCallback(int nHandleID, DevStatusCallback callback, void* pUserData);
#ifdef USE_JNI_INTERFACE
	ALPRSDK_API OS_Error WINAPI AlprSDK_CreateDevStatusCallbackJni(int nHandleID, void* callback);
#endif

	/**
	* @brief 清除设备状态回调
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	
	*  @attention \subpage atten1 "含有设备句柄的函数注意事项"、\subpage atten2 "回调函数注意事项"、淘汰中\n
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_ClearDevStatusCallback(int nHandleID);
#ifdef USE_JNI_INTERFACE
	ALPRSDK_API OS_Error WINAPI AlprSDK_ClearDevStatusCallbackJni(int nHandleID);
#endif

	/**
	* @brief 重新启动设备
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_RebootDevice(int nHandleID);

	/**
	* @brief 检测移动侦测阀值
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_StartMDThrDetect(int nHandleID);
	////设置移动侦测阀值
	//ALPRSDK_API OS_Error WINAPI AlprSDK_SetMDThreshold(int nHandleID, int nMDThreshold);
	/**
	* @brief 获取移动侦测阀值
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_GetMDThreshold(int nHandleID);
	////重置移动侦测阀值
	//ALPRSDK_API OS_Error WINAPI AlprSDK_ResetMDThreshold(int nHandleID);
	//end
	
	#ifdef USE_JNI_INTERFACE
	#else
	/**
	* @brief 初始化句柄测试
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_InitHandleTest(int nHandleID);
	#endif
	
	//add by caoyanming 2017/09/21 Start
	/**
	* @brief 控制补光灯亮度
	* @param[in] nHandleID				句柄的编号
	* @param[in] brightness				补光灯亮度（0~100）
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	#ifdef USE_JNI_INTERFACE
	// ALPRSDK_API OS_Error WINAPI AlprSDK_CtrlBrightness(int nHandleID, unsigned char brightness);
	#else
	ALPRSDK_API OS_Error WINAPI AlprSDK_CtrlBrightness(int nHandleID, unsigned char brightness);
	#endif
	
	/**
	* @brief 设置开启补光灯阈值
	* @param[in] nHandleID				句柄的编号
	* @param[in] defBrightness			补光灯与光敏阈值信息
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	#ifdef USE_JNI_INTERFACE
	// ALPRSDK_API OS_Error WINAPI AlprSDK_SetDefOpenBrighValue(int nHandleID, TDefBrightness* defBrightness);
	#else
	ALPRSDK_API OS_Error WINAPI AlprSDK_SetDefOpenBrighValue(int nHandleID, TDefBrightness* defBrightness);
	#endif
	//add by caoyanming 2017/09/21 End

	//add by caoyanming 2017/10/12 Start

	/**
	* @brief 下发双色双行屏参数到设备
	* @param[in] nHandleID				句柄的编号
	* @param[in] screenParam			双色双行屏信息
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_SetDColorDLineSCNParam(int nHandleID, const PDScreenDLine pScreenParam);
	//add by caoyanming 2017/10/12 End

	/**
	* @brief 获取设备支持的功能
	* @param[in] nHandleID				句柄的编号
	* @param[out] devFunList			上层分配256大小的buf，每个字节对应的值的含义参考枚举eFunList
	* @param[in] len					上传固定为256		
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_GetDeviceFunList(int nHandleID, char *devFunList, int len);

	//add by fangzx 2018/01/24 Start
	/**
	* @brief 获取设备许可信息
	* @param[in] nHandleID				句柄的编号
	* @param[out] pDevLicense			许可相关信息
	* @return	0						成功
	* @return	非0						失败
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_GetDevLicenseInfo(int nHandleID, PDevLicense pDevLicense);
	//add by fangzx 2018/01/24 End

	//add by linz zkparking 2.0 车队模式
	/**
	* @brief  设置车队模式是否开启
	* @param[in] nHandleID		句柄的编号
	* @param[in] signal			识别模式，0：开启车队模式， 1：关闭车队模式
	* @return    0				成功
	* @return    非0			失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	#ifdef USE_JNI_INTERFACE
	// ALPRSDK_API OS_Error WINAPI AlprSDK_SetCarTeamSignal(int nHandleID, int signal);
	#else
	ALPRSDK_API OS_Error WINAPI AlprSDK_SetCarTeamSignal(int nHandleID, int signal);
	#endif

	/**
	* @brief  获取车队模式是否开启
	* @param[in] nHandleID		 句柄的编号
	* @param[out] pSignal		从固件获取的识别模式（0:没有开启车队模式，1：开启车队模式中）
	* @return    0				成功
	* @return    非0			失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	#ifdef USE_JNI_INTERFACE
	// ALPRSDK_API OS_Error WINAPI AlprSDK_GetCarTeamSignal(int nHandleID, int *pSignal);
	#else
	ALPRSDK_API OS_Error WINAPI AlprSDK_GetCarTeamSignal(int nHandleID, int *pSignal);
	#endif
	
	//add by caoyanming 2017/12/25 Start
	/**
	* @brief 韦根卡数据回调
	* @param[in] nHandleID		句柄的编号
	* @param[in] callback		回调函数
	* @param[in] pUserData		用户数据指针
	* @return	0				成功
	* @return	非0				失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_CreateWiegandDataCallback(int nHandleID, WiegandDataCallback callback, void* pUserData);
#ifdef USE_JNI_INTERFACE
	ALPRSDK_API OS_Error WINAPI AlprSDK_CreateWiegandDataCallbackJNI(int nHandleID, void* callback);
#endif
	/**
	* @brief 清除韦根卡数据回调
	* @param[in] nHandleID		句柄的编号
	* @return	0				成功
	* @return	非0				失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_ClearWiegandDataCallback(int nHandleID);
#ifdef USE_JNI_INTERFACE
	ALPRSDK_API OS_Error WINAPI AlprSDK_ClearWiegandDataCallbackJNI(int nHandleID);
#endif
	//add by caoyanming 2017/12/25 End

	//add by carl 20180702
	/**
	* @brief 获取当前图片列表
	* @param[in] nHandleID		句柄的编号
	* @return	0				成功
	* @return	非0				失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_GetImageList(int nHandleID);
	//end add by carl 20180702

#ifdef USE_JNI_INTERFACE
	/**
	* @brief 设置识别参数
	* @param[in] nHandleID				句柄的编号
	* @param[in] pNAlprCfg				识别参数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_SetNAlprCfg(int nHandleID, const PNAlprCfg pNAlprCfg);

	/**
	* @brief 获取脱机参数
	* @param[in] nHandleID				句柄的编号
	* @param[out] pNAlprCfg				识别参数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_GetNAlprCfg(int nHandleID, PNAlprCfg pNAlprCfg);
#endif
		// Add by Caoym ftpClient 2018-09-06 Start
	/**
	* @brief 设置Ftp客户端配置参数
	* @param[in] nHandleID				句柄的编号
	* @param[in] ftpClientCfg			ftp客户端配置参数信息
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_SetFtpClientCfg(int nHandleID, const PFtpClientCfg pFtpClientCfg);

	/**
	* @brief 获取Ftp客户端配置参数
	* @param[in] nHandleID				句柄的编号
	* @param[out] pFtpClientCfg			ftp客户端配置参数信息指针
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_GetFtpClientCfg(int nHandleID, PFtpClientCfg pFtpClientCfg);
	// Add by Caoym ftpClient 2018-09-06 End

	//add by carl 2018/09/10 Start
	/**
	* @brief 打开辅助输出
	* @param[in] nHandleID				句柄的编号
	* @param[in] nIndex					辅助输出编号(值为1,2,3,...)
	* @param[in] nTime					辅助输出时长(值为0,2,3,...,255)
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_OpenAuxOut(int nHandleID, int nIndex, int nTime);
	//add by caoyanming 2018/09/10 End

#ifdef USE_JNI_INTERFACE
#else
	// Add by carl voice 2018-11-12 Start

	//!语音对讲数据回调函数(扩展回调)
	typedef void (CALLBACK *fVoiceDataCallBackV2)(HANDLE hVoiceHandle, BYTE *lpBuffer, DWORD dwBufferSize, DWORD dwAudioFlag, LPVOID lpUser);


	/**
	* @brief 启动语音对讲
	* @param[in] nHandleID				句柄的编号
	* @param[in] dwVoiceChan			语音通道号(传入1)
	* @param[in] fpVoiceDataCallBack	处理接收对端语音的回调
	* @param[in] lpUser					传入回调的参数
	* @param[in] dwAudioType			dwAudioType是音频编码类型取值范围 0-OggVorbis;1-G711_U;2-G711_A 3-G726, 目前仅支持G711U和G711A类型，采样率8000，位率16，单声道的音频输入和输出数据)
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_StartVoice(int nHandleID, DWORD dwVoiceChan, fVoiceDataCallBackV2 fpVoiceDataCallBack,
		LPVOID lpUser, DWORD dwAudioType);

	/**
	* @brief 对语音数据解码
	* @param[in] nHandleID				句柄的编号
	* @param[in] pbuffer				语音数据
	* @param[in] nLen					语音数据长度
	* @param[in] ntype					语音数据类型
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_InputAudio(int nHandleID, unsigned char *pbuffer, int nLen, int ntype);

	/**
	* @brief 开启播放语音
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_PlaySound(int nHandleID);

	/**
	* @brief 发送语音数据
	* @param[in] nHandleID				句柄的编号
	* @param[in] dwVoiceOpt				bit0~bit7:音频编码类型, 0--OggVorbis 1--G711_U  2--G711_A 3--G726  bit8~bit15:采样率,0--8000;bit16~bit23:位率,0--16,1--32;bit24~bit32:声道,0-单声道,1-双声道
	* @param[in] lpBuffer				语音数据
	* @param[in] dwSize					语音数据长度
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_SendVoiceData(int nHandleID, DWORD dwVoiceOpt, BYTE *lpBuffer, DWORD dwSize);

	/**
	* @brief 停止语音对讲
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_StopVoice(int nHandleID);
	// Add by carl voice 2018-11-12 End
#endif
// add by wangzy 2018-11-08 Start
	/**
	* @brief 变焦控制
	* @param[in] nHandleID				句柄的编号
	* @param[in] pZoomCtlCfg			变焦控制参数
	* @param[in] ifStop					是否停止
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_ControlZoom(int nHandleID, PZoomCtlCfg pZoomCtlCfg, unsigned ifStop);

	/**
	* @brief 对焦控制
	* @param[in] nHandleID				句柄的编号
	* @param[in] pFocusCtlCfg			对焦控制参数
	* @param[in] ifStop					是否停止
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_ControlFocus(int nHandleID, PFocusCtlCfg pFocusCtlCfg, unsigned ifStop);
	// add by wangzy 2018-11-08 End


	/**
	* @brief 设置p2p服务器地址
	* @param[in] pP2PServerAddress		地址，可以是域名
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_SetP2PServerAddress(char *pP2PServerAddress);

	// add by Caoym 2018-12-20 Start
	/**
	* @brief 开启P2P重连功能(只P2P连接时有效)
	*		 重连功能开启时，用户的下列接口调用
	*		 AlprSDK_DisConnectDev,AlprSDK_StopVideo的前提条件是，关闭P2P重连功能，否则调用会失败。
	*		 这个接口的调用时机要在AlprSDK_ConnectDev,AlprSDK_StartVideo之前。
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_EnableP2PReconnect(int nHandleID);

	/**
	* @brief 关闭P2P重连功能(只P2P连接时有效)
	*		 调用此接口时，如果SDK正在重连，要等SDK重连结束之后返回
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_DisableP2PReconnect(int nHandleID);
	// add by Caoym 2018-12-20 End


	// add by Caoym 2019-01-10 Start
	/**
	* @brief 设置网络参数
	* @param[in] nHandleID				句柄的编号
	* @param[in] pNetworkParam			网络参数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_SetNetworkParam(int nHandleID, PNetworkParam pNetworkParam);

	/**
	* @brief 获取网络参数
	* @param[in] nHandleID				句柄的编号
	* @param[out] pNetworkParam			网络参数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_GetNetworkParam(int nHandleID, PNetworkParam pNetworkParam);
	/**
	* @brief 设置视频参数
	* @param[in] nHandleID				句柄的编号
	* @param[in] pVideoParam			视频参数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_SetVideoParam(int nHandleID, PVideoParam pVideoParam);

	/**
	* @brief 获取视频参数
	* @param[in] nHandleID				句柄的编号
	* @param[in] pVideoParam			视频参数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_GetVideoParam(int nHandleID, PVideoParam pVideoParam);

	/**
	* @brief 获取设备参数
	* @param[in] nHandleID				句柄的编号
	* @param[out] pNetworkParam			设备参数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_GetDeviceParam(int nHandleID, PDeviceParam pDeviceParam);
	// add by Caoym 2019-01-10 End

	//add by fangzx 20190611 Start
	/**
	* @brief 设置WebService参数
	* @param[in] nHandleID				句柄的编号
	* @param[in] pWebServiceConfig		WebService参数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_SetWebServiceParam(int nHandleID, const PWebServiceConfig pWebServiceConfig);

	/**
	* @brief 获取WebService参数
	* @param[in] nHandleID				句柄的编号
	* @param[out] pWebServiceConfig		WebService参数	
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_GetWebServiceParam(int nHandleID, PWebServiceConfig pWebServiceConfig);
	//add by fangzx 20190611 End


	//add by carl 20190819 start
	/**
	* @brief 设置HttpClient参数
	* @param[in] nHandleID				句柄的编号
	* @param[in] pHttpClientCfg			HttpClient参数
	*		注：车位设置bHttpClientEnable、szWebServerIP、nTimeout、bSendPlate、bSendPlatePhoto
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_SetHttpClientCfg(int nHandleID, const PHttpClientCfg pHttpClientCfg);

	/**
	* @brief 获取HttpClient参数
	* @param[in] nHandleID				句柄的编号
	* @param[out] pHttpClientCfg		HttpClient参数	
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_GetHttpClientCfg(int nHandleID, PHttpClientCfg pHttpClientCfg);
	//add by carl 20190819 end

	/**
	* @brief 通过相机透传语音
	* @param[in] nHandleID				句柄的编号
	* @param[in] nScreenType			屏类型,参考ScreenType,注：目前只支持:双色双行屏
	* @param[in] voiceIDList			语音编码列表,参考接口文档中的语音列表说明
	* @param[in] nCount					语音条数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_Trans2Voice(int nHandleID, int nScreenType, unsigned char voiceIDList[], int nCount);

	/**
	* @brief 通过相机透传屏显示内容
	* @param[in] nHandleID				句柄的编号
	* @param[in] nScreenType			屏类型,参考ScreenType,注：目前只支持:双色双行屏
	* @param[in] nFirstLineColor		该行显示颜色,参考ScreenShowColor
	* @param[in] pFirstLineData			该行显示内容utf8编码
	* @param[in] nSecondLineColor		该行显示颜色,参考ScreenShowColor
	* @param[in] pSecondLineData		该行显示内容utf8编码
	* @param[in] nThirdLineColor		该行显示颜色,参考ScreenShowColor
	* @param[in] pThirdLineData			该行显示内容utf8编码
	* @param[in] nFourthLineColor		该行显示颜色,参考ScreenShowColor
	* @param[in] pFourthLineData		该行显示内容utf8编码
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_Trans2Screen(int nHandleID,
		int nScreenType,
		int nFirstLineColor, const char *pFirstLineData,
		int nSecondLineColor, const char *pSecondLineData,
		int nThirdLineColor, const char *pThirdLineData,
		int nFourthLineColor, const char *pFourthLineData);


	/**
	* @brief 主动触发车位状态上传
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_RefreshCarSpaceState(int nHandleID);



	/**
	* @brief 修改相机网络信息
	* @param[in] lpUser				搜索回调返回结构体数据
	* @param[in] pAlprDevNetInfo	需要修改的网络信息(当字段有值时才修改)		
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_ModifyCameraNetInfo(void* lpUser, TAlprDevNetInfo *pAlprDevNetInfo);


	/**
	* @brief 设置车位相机区域
	* @param[in] nHandleID				句柄的编号
	* @param[in] rgnRoi					坐标区域
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_SetCarSpaceRecogRoiEx(int nHandleID, const XPoint rgnRoi[MAX_CAR_SPACE_CNT * 2]);

	/**
	* @brief 获取车位相机区域
	* @param[in] nHandleID				句柄的编号
	* @param[out] rgnRoi				坐标区域
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_GetCarSpaceRecogRoiEx(int nHandleID, XPoint rgnRoi[MAX_CAR_SPACE_CNT * 2]);


	/**
	* @brief 设置车位相机参数
	* @param[in] nHandleID				句柄的编号
	* @param[in] carSpaceConfig			车位参数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_SetCarSpaceConfig(int nHandleID, const TCarSpaceConfig *carSpaceConfig);

	/**
	* @brief 获取车位相机参数
	* @param[in] nHandleID				句柄的编号
	* @param[out] carSpaceConfig		车位参数
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_GetCarSpaceConfig(int nHandleID, TCarSpaceConfig *carSpaceConfig);


	/**
	* @brief 获取SDK版本号
	* @param[out] version			SDK版本号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_GetVersion(char version[16]);

	/**
	* @brief 关闭道闸:需要定制固件
	* @param[in] nHandleID				句柄的编号
	* @return	0						成功
	* @return	非0						失败，其值为错误码
	*	@attention \subpage atten1 "含有设备句柄的函数注意事项"
	*/
	ALPRSDK_API OS_Error WINAPI AlprSDK_CloseGate(int nHandleID);


/** @} */

//add by linoz 2018/02/02	***注意事项***

	/*!\addtogroup attention 注意事项					 
	*		该页面为SDK函数的注意事项
	*	 @{ 
	*
	* 		
	*			\addtogroup atten1 含有句柄函数的注意事项
	*
	*     @attention 
	*			1> 句柄的编号取值范围为 0~39	\n
	*			2> 在多线程并发环境下，调用该函数，如果是相同nHandleID，上层需要加锁保护	\n
	*			
	*
	* 		
	*			\addtogroup atten2 回调函数注意事项
	*
	*     @attention 
	*			1> 不能在此类型函数中调用SDK接口函数	\n
	*			2> 函数总调用时间不能超过100ms	\n
	*			3> 不能有休眠函数	\n
	*			
	*
	*
	*
	*  @} 
	*
	*/

 
#ifdef __cplusplus
}
#endif
#endif//_ALPRSDK_H_