//
//  "$Id: MotionDetect.h 4 2009-08-17 14:09:00Z liwj $"
//
//  Copyright (c)2008-2008, ZheJiang JuFeng Technology Stock CO.LTD.
//  All Rights Reserved.
//
//	Description:	
//	Revisions:		Year-Month-Day  SVN-Author  Modification
//

#ifndef __PAL_MOTIONDETECT_H__
#define __PAL_MOTIONDETECT_H__

#ifdef __cplusplus
extern "C" {
#endif

/// \defgroup MotionDetectAPI API Motion Detect
/// 按区域和灵敏度的动态检测接口。
///	\n 调用流程图:
/// \code
///    ============================
///                  |
///         *MotionDetectGetCaps
///                  |
///          MotionDetectCreate
///     +------------|
///     |   MotionDetectGetState
///     | MotionDetectSetParameter
///     |   MotionDetectGetResult
///     |   MotionDetectShowHint
///     +------------|
///         MotionDetectDestory
///                  |
///    ============================
/// \endcode
/// @{

/// 动态检测参数
typedef struct MOTION_DETECT_PARAM
{
	/// 动态检测的敏感度档次
	int		iLevel;

	/// 动态检测的区域，数据的每一位对应一个矩形区域块，置1表示需要在该区域块动
	/// 态检测，置0表示不需要在该区域块动态检测。每一行用一个unsigned int表示，最左边的
	/// 块对应最低位，从上到下的行对应的下标从0到17。支持的行列数之外对应的数据
	/// 位无效。
	unsigned int	win[18];

	/// 灵敏度的具体值
	unsigned char	sensitiveness;

	/// 帧间隔
	unsigned char	fieldinterval;

	/// 使能开关，是否使能，为1表示使能，为0时表示禁用，其他参数被忽略。
	int		enable;
}MOTION_DETECT_PARAM;

/// 动态检测结果
typedef struct MOTION_DETECT_RESULT
{
	/// 有动态检测发生的区域，数据的每一位对应一个矩形区域块，置1表示在该区域块
	/// 动态检测成功，置0表示该区域块动态检测失败。每一行用一个unsigned int表示，最左边
	/// 的块在最高位，从上到下的行对应的下标从0到17。支持的行列数之外对应的数据
	/// 位无效。
	unsigned int	win[18];
}MOTION_DETECT_RESULT;

/// 视频动态检测特性结构
typedef struct MOTION_DETECT_CAPS
{
	unsigned int Enabled;			///< 置1表示支持动态检测，置0表示不支持动态检测。
	unsigned int GridLines;		///< 动态检测的区域需要划分成的列数。
	unsigned int GridRows;			///< 动态检测的区域需要划分成的行数。
	unsigned char  Result;			///< 是否能得到每块区域的检测结果。
	unsigned char  Hint;				///< 是否能在检测成功时给予提示。
}MOTION_DETECT_CAPS;


/// 创建动态检测设备
/// 
/// \param 无
/// \retval <0 创建失败
/// \retval 0 创建成功
int MotionDetectCreate(void);


/// 销毁动态检测设备
/// 
/// \param 无
/// \retval <0 销毁失败
/// \retval 0 销毁成功
int MotionDetectDestory(void);


/// 执行动态检测。立即返回。
/// 
/// \param [out] pData 指向一个unsigned int值的指针，unsigned int值是各个报警输入通道电平状态
///        的掩码。低通道在低位，高通道在高位。高电平置1，低电平置0，不存在的通
///        道置0。
/// \retval 0  检测成功
/// \retval <0  检测失败
int MotionDetectGetState(unsigned int* pData);


/// 动态检测捕获的详细结果。
/// 
/// \param [in] channel 通道号。
/// \param [in] pResult 指向动态检测参数结构MOTION_DETECT_RESULT的指针。
/// \retval 0  设置成功
/// \retval <0  设置失败
int MotionDetectGetResult(int channel, MOTION_DETECT_RESULT *pResult);


/// 设置是否在动态检测成功的区域给予提示。
/// 
/// \param [in] channel 通道号。
/// \param [in] enable 为1表示提示，为0时表示不提示。
/// \retval 0  设置成功
/// \retval <0  设置失败
int MotionDetectShowHint(int channel, int enable);


/// 执行动态检测。立即返回。
/// 
/// \param [in] channel 通道号。
/// \param [in] pParam 指向动态检测参数结构MOTION_DETECT_PARAM的指针。
/// \retval 0  设置成功
/// \retval <0  设置失败
int MotionDetectSetParameter(int channel, MOTION_DETECT_PARAM *pParam);


/// 得到动态检测支持的特性。
/// 
/// \param [out] pCaps 指向动态检测特性结构MOTION_DETECT_CAPS的指针。
/// \retval 0  获取成功。
/// \retval <0  获取失败。
int MotionDetectGetCaps(MOTION_DETECT_CAPS * pCaps);

/// @} end of group

#ifdef __cplusplus
}
#endif

#endif 
