#ifndef __SENSOR_SDK_API_H__
#define __SENSOR_SDK_API_H__

enum {
	SENSOR_SDK_SUCC = 0,
	SENSOR_SDK_INVALID_INPARAM,      //参数非法
	SENSOR_SDK_NOT_INIT,             //未初始化
	SENSOR_SDK_LICENSE_INIT_FAIL,    //license 库初始化失败
	SENSOR_SDK_NOT_AUTH,             //未授权
	SENSOR_SDK_MUTI_PROCESS_INIT,    //多个實例初始化
	SENSOR_SDK_AUTOLENS_GET_PARAM,   //获取参数失败
	SENSOR_SDK_AUTOLENS_SET_PARAM,   //设置参数失败
	SENSOR_SDK_AUTOLENS_SET_AF_PARAM,//设置AF参数失败
	SENSOR_SDK_ERROR,                //其他错误

}SENSOR_SDK_ERROR_TYPE;
//autolens 
enum {

	SensorSDK_AutoLens_Type_ZeroCheck=0x0, //零点矫正, 无参数
	SensorSDK_AutoLens_Type_ZoomIn       , // 参数 1-10为速度 ，-1 为停止 ，以下无特殊时同此
	SensorSDK_AutoLens_Type_ZoomOut      ,
	SensorSDK_AutoLens_Type_FocusNear    ,
	SensorSDK_AutoLens_Type_FocusFar     ,
	SensorSDK_AutoLens_Type_FocusAuto    , //自动聚焦
	SensorSDK_AutoLens_Type_EnableAuto   , // 设置是否启用自动聚焦
	SensorSDK_AutoLens_Type_ZoomFocus    , // 精确定位到指定的位置,
	SensorSDK_AutoLens_Type_ZoomPos      , //  int 精确定位
	SensorSDK_AutoLens_Type_ZoomRange    ,  //  int 定位范围
	SensorSDK_AutoLens_Type_FocusPos     , // int 精确定位 
	SensorSDK_AutoLens_Type_FocusRange   ,  // int 获取 取值范围，精确定位时用
	SensorSDK_AutoLens_Type_ZoomRate     ,  // int 300 代表3.00倍
	SensorSDK_AutoLens_Type_IRCUT        ,  // 0 全波段， 1 可见光模式， 2 红外模式

	//new
	SensorSDK_AutoLens_Type_Iris_OPEN,      // 光圈大  //需要带步长参数1-64   光圈范围固定0-0X3FF
    SensorSDK_AutoLens_Type_Iris_CLOSE,     // 光圈小  //需要带步长参数1-64
    SensorSDK_AutoLens_Type_IrisPos,        // 获取光圈位置

    SensorSDK_AutoLens_Type_Fov,            //获取对角线视场角精确到0.01度  60度 6000(表示60度)
    SensorSDK_AutoLens_Type_Auto_Check,     //设置镜头曲线校准
    SensorSDK_AutoLens_Type_AF_Status,      //获取 AF状态
	SensorSDK_AutoLens_Type_ZoomPos_By_Fov, //获取 输入FOV输出ZOOMPOS        调用get接口
	SensorSDK_AutoLens_Type_Fov_By_ZoomPos, //获取 输入ZOOMPOS的值输出FOV 调用get接口
	SensorSDK_AutoLens_Type_Efi,            //获取焦距
	SensorSDK_AutoLens_Type_Lens_Offset,    //获取镜头中心点偏移量输出水平偏移量和垂直偏移量(**保留暂不使用**)
	SensorSDK_AutoLens_Type_Check_Offset,   //设置镜头中心偏移量校准
    SensorSDK_AutoLens_Type_IRCUTLensAuto=0x100,    //设置 0 :夜晚1:白天
	SensorSDK_AutoLens_Type_Motor_Hysteresis=0x101, //马达间隙(1-100)步(**保留暂不使用**)
	

}SENSORSDK_AUTOLENS_TYPE_E;

typedef struct
{
	int nStop; // 1- 停止
	int nSpeed; // 速度 1-10， nStop==0时有效

}SensorSDK_AutoLens_Param_Base_T;



typedef struct
{
	union
	{
		
		SensorSDK_AutoLens_Param_Base_T Param_Base;
		int nZoomRate;       // 300 代表 3.00倍
		int nIrCut;          // 0-全波段,1-可见光，2红外模式
		int nZoomPos;        // 定位, 先获取范围，再定位，定位必须是有效范围内
		int nZoomRange;      // 范围
		int nFocusPos;       // 定位
		int nFocusRange;     // 聚焦定位取值范围
		int nEnableAuto;     // 使能 自动 聚焦功能
		int nZoomFocusPos[2]; // nZoomFocusPos[0]:focuspos,nZoomFocusPos[1]:zoompos
		int nIrStep;          // 光圈步长1-64
		int nIrPos;           // 定位
		int nFOV;             // 对角线视场角[  1, 6000]表示 0.01度到60度
		int nEFI;             // 焦距
		int nAFStatus;        // 自动镜头状态
		int nFOVZoomPos;      // nFOVZoomPos  输入输出
		int nIRCUTLensAuto;   // 0-夜晚 1-白天
		int ress[4];
	}Params;
}SENSOR_SDK_AUTOLENS_PARAM_T;

enum SENSOR_SDK_AF_STATUS_E
{
    SENSOR_SDK_AF_STATUS_IDLE = 0x1,
    SENSOR_SDK_AF_STATUS_DO_ZOOM,
    SENSOR_SDK_AF_STATUS_DO_FOCUS,
    SENSOR_SDK_AF_STATUS_DO_AUTO_FOCUS,
    SENSOR_SDK_AF_STATUS_ZOOM_ING,
    SENSOR_SDK_AF_STATUS_FOCUS_ING,
    SENSOR_SDK_AF_STATUS_AUTO_FOCUS_ING,
    SENSOR_SDK_AF_STATUS_DETECT,
    SENSOR_SDK_AF_STATUS_TEST,
};

typedef struct _SensorSDK_CameraLens
{
    int        AFControlModel;                                 //对焦控制方式 0----自动 1----半自动 2----手动
    int        AFArea;                                         //对焦区域选择 (保留)0----全区域对焦 1----中心对焦
    int        AFSearchModel;                                  //对焦区搜索方式 0 --- 全景, 1 --- 1.5m,  2 --- 3m, 3 --- 6m, 4 --- 无穷远
    int        AFSensitivity;                                  //对焦灵敏度 0 ~255
    int        DigitZoomEnable;                                //数字ZOOM允许
    int        IrisControl;                                    //光圈调节0 自动  1手动
} SensorSDK_CameraLens;

#ifdef __cplusplus
extern "C" {
#endif
// SDK 初始化接口
// nFlashPartIdx  : 软件授权信息存放的分区索引号,注意分区需要自己提前创建好
//	例如分区为/dev/mmcblk0p5,此处参数取值为5
//	   分区为/dev/mtd6,此处参数取值为6		
// BoardLine  板接口定义，000，第一位代表zoomfocus顺序，后面两个代表两个电机方向;每位取值为 0或者1
// szLensType 镜头型号，可取值如下
	/*
	"MUXIA_5X",
	"RICOM_AF3610_4K","YS_15_3_XM02","RICOM_3312_4K","RICOM_27135_6MP", "RICOM_2812_5MP","RICOM_2812_2MP",
		"YT_6022_3MP","YT_3610_3MP","YT_3611_4K","YT_27135_HD","YT_27135_4MP","YT_2712_HD","YT_2812_4MP","YT_2812_2MP","RICOM_2812_3MP",
		"YT_550_2MP","RICOM_5M_50MM_1_27F","YT6022","YT3013","YT2712","YT3610","3.6-10mm","YT2812","YT3015","RICON2814","RICON2812","YT2808",
		"2.8-8mm","RICOM_4K_AF2710DC","RICOM_4K_33_120MM_14F","RICOM_3M_28_120MM_14F","RICOM_5M_38_100MM","RICOM_2M_22_120MM_14F","RICOM_3M_28_80MM"
	*/
// szAutoLensParmPath: 保存当前变焦状态用的路径,路径必须可写
// pCameralens: 自动聚焦镜头参数

//return 错误码见      SENSOR_SDK_ERROR_TYPE

//初始化接口
int SensorSdk_Init(int nFlashPartIdx,char *szBoardLine,char *szLensType ,
			char *szAutoLensParmPath /* 保存当前变焦状态用的路径 */, SensorSDK_CameraLens *pCameralens = 0);

//获取授权状态 SENSOR_SDK_SUCC-授权成功 
int SensorSdk_GetAuthStatus();

// 镜头变焦变倍 接口
// 设置 动作
// nType : 见 SensorSDK_AutoLens_Type_XXX 宏定义
// nParam : SENSOR_SDK_AUTOLENS_PARAM_T
int SensorSdk_AutoLens_SetParam(int nDev,int nType,SENSOR_SDK_AUTOLENS_PARAM_T *pParam);
// 获取当前 信息
int SensorSdk_AutoLens_GetParam(int nDev,int nType,SENSOR_SDK_AUTOLENS_PARAM_T *pParam);
//設置自动聚焦镜头参数
int SensorSdk_AutoLens_SetAFParam(SensorSDK_CameraLens *pCameralens);

#ifdef __cplusplus
}
#endif



#endif

