/** DxLens.h Lens common interface @file DxLens.h @ingroup mISYSAlg @note Nothing (or anything need to be mentioned). Copyright Novatek Microelectronics Corp. 2012. All rights reserved. */ #ifndef _DXLENS_H_ #define _DXLENS_H_ extern void LensDrv_InstallID(void) _SECTION(".kercfg_text"); /** @name lens operation error code. Error code to indicate condition. */ #define ERR_OK 0 #define ERR_LENS_INIT_FAIL (-5) #define ERR_OPERATION_FAIL (-1) #define ERR_FUNC_PTR_NULL (-2) #define ERR_OPERATION_INTERRUPT (-3) /** @name shutter control input parameter. macro for shutter open/close usage. */ #define OPEN 1 #define CLOSE 0 /** @name zoom in/out control parameter. macro for zoom in/out control. */ #define ZOOM_OUT 0 #define ZOOM_IN 1 /** @name focus tele/wide control parameter. macro for focus tele/wide control. */ #define FOCUS_WIDE 0 #define FOCUS_TELE 1 #define FOCUS_WIDE_SIDE 2 #define FOCUS_WIDE_TELE_MIDDLE 3 #define FOCUS_TELE_SIDE 4 #define ZOOM_SECTION_WIDE 1 #define ZOOM_SECTION_TELE 11 #define ZOOM_SECTION_NUM (ZOOM_SECTION_TELE + 1) #define FOCUS_DISTANCE_TABLE_NUM 12 /** GPIOArray index. Index used to map Lens GPIO. Used in DrvLens_GetDevice(). */ typedef enum { LENS_IO_MODE, LENS_IO_IN_0, LENS_IO_IN_1, LENS_IO_IN_2, LENS_IO_IN_3, LENS_IO_IN_4, LENS_IO_IN_5, LENS_IO_IN_6, LENS_IO_IN_7, LENS_IO_PWR, LENS_IO_RESET, LENS_IO_ZOOM_PI, LENS_IO_FOCUS_PI, LENS_IO_ZOOM_PIINT, LENS_IO_FOCUS_PIINT, LENS_IO_ZOOM_PR, LENS_IO_FOCUS_PR, LENS_IO_IRCUT_PR, LENS_IO_MOT_EXT1, LENS_IO_MOT_EXT2, LENS_IO_MOT_EXT3, LENS_IO_MAX, ENUM_DUMMY4WORD(LENS_MODULE_IO_MAP) } LENS_MODULE_IO_MAP; /** Lens speed configuration. */ typedef enum { LENS_SPEED_VERY_LOW = 20, // lens speed very low LENS_SPEED_LOW = 40, // lens speed low LENS_SPEED_MEDIUM = 60, // lens speed medium LENS_SPEED_HIGH = 80, // lens speed hight LENS_SPEED_VERY_HIGH = 100, // lens speed very hight ENUM_DUMMY4WORD(LENS_SPEED_CATEGORY) } LENS_SPEED_CATEGORY; /** Enumeration to get af searching range. */ typedef enum { FOCUS_RANGE_START, ///< start of searching range. FOCUS_RANGE_END, ///< end of searching range. FOCUS_RANGE_BOTH, ///< start & end of searching range. ENUM_DUMMY4WORD(FOCUS_RANGE) } FOCUS_RANGE; typedef enum { POS_GARAGE, ///< retract focus to garage position POS_HOME, ///< retract focus to home position ENUM_DUMMY4WORD(FOCUS_RETRACT_POSITION) } FOCUS_RETRACT_POSITION; /** Index for lens related IO control. */ typedef enum { MD_SIGNAL_STANDBY, ///< used to power on/off motor driver MD_SIGNAL_ZPI, ///< used to set/get ZPI signal MD_SIGNAL_ZPR, ///< used to set/get ZPR signal MD_SIGNAL_FPI, ///< used to set/get FPI signal ENUM_DUMMY4WORD(MD_SIGNAL) } MD_SIGNAL; /** Index for zoom control. */ typedef enum { MOTOR_ZOOM_FWD, ///< used to forward zoom MOTOR_ZOOM_BWD, ///< used to backward zoom MOTOR_ZOOM_SETSPEED, ///< used to set zoom moving speed ENUM_DUMMY4WORD(MOTOR_ZOOM_ACT) } MOTOR_ZOOM_ACT; /** Index for zoom function. */ typedef enum { LENS_ZOOM_INIT, LENS_ZOOM_GO2_SECTION, LENS_ZOOM_GO2_POSITION, LENS_ZOOM_OUT, LENS_ZOOM_IN, LENS_ZOOM_RETRACT, LENS_ZOOM_FUNC_UNKNOWN, } LENS_ZOOM_FUNC; /** Index for focus control. */ typedef enum { MOTOR_FOCUS_FWD, ///< used to forward focus MOTOR_FOCUS_BWD, ///< used to backward focus MOTOR_FOCUS_SETSPEED, ///< used to set focus moving speed ENUM_DUMMY4WORD(MOTOR_FOCUS_ACT) } MOTOR_FOCUS_ACT; /** Index for focus function. */ typedef enum { LENS_FOCUS_INIT, LENS_FOCUS_GO2_POSITION, LENS_FOCUS_GO2_FREE_POSITION, LENS_FOCUS_WIDE, LENS_FOCUS_TELE, LENS_FOCUS_WIDE_SIDE, LENS_FOCUS_WIDE_TELE_MIDDLE, LENS_FOCUS_TELE_SIDE, LENS_FOCUS_RETRACT, LENS_FOCUS_FUNC_UNKNOWN, } LENS_FOCUS_FUNC; /** Index for aperture control. */ typedef enum { MOTOR_APERTURE_NORMAL, ///< reserved MOTOR_APERTURE_DUMMYLOAD, ///< reserved MOTOR_APERTURE_FWD, ///< used to forward aperture MOTOR_APERTURE_BWD, ///< used to backward aperture MOTOR_APERTURE_EXCITE_ON, ///< used to pre-excite on aperture motor MOTOR_APERTURE_EXCITE_OFF, ///< used to excite off aperture motor MOTOR_APERTURE_RESET, ///< used to reset aperture position ENUM_DUMMY4WORD(MOTOR_APERTURE_ACT) } MOTOR_APERTURE_ACT; typedef enum { APERTURE_DUMMYLOAD_START, ///< reserved APERTURE_DUMMYLOAD_END, ///< reserved ENUM_DUMMY4WORD(APERTURE_DUMMYLOAD_ACT) } APERTURE_DUMMYLOAD_ACT; typedef enum { IRIS_POS_BIG = 0, IRIS_POS_F1_6 = 0, ///< Fno. 1.6 IRIS_POS_F2_0, ///< Fno. 2.0 IRIS_POS_F2_4, ///< Fno. 2.4 IRIS_POS_F2_8, ///< Fno. 2.8 IRIS_POS_F3_4, ///< Fno. 3.4 IRIS_POS_F4_0, ///< Fno. 4.0 IRIS_POS_F4_8, ///< Fno. 4.8 IRIS_POS_F5_6, ///< Fno. 5.6 IRIS_POS_F6_8, ///< Fno. 6.8 IRIS_POS_F9_6, ///< Fno. 9.6 IRIS_POS_F11_0, ///< Fno. 11.0 IRIS_POS_F14_0, ///< Fno. 14.0 IRIS_POS_F16_0, ///< Fno. 16.0 IRIS_POS_F19_0, ///< Fno. 19.0 IRIS_POS_F22_0, ///< Fno. 22.0 IRIS_POS_SMALL = IRIS_POS_F22_0, IRIS_POS_CLOSE, ///< reserved IRIS_POS_RESET, ///< IRIS is in reset position IRIS_POS_MAX, ENUM_DUMMY4WORD(IRIS_POS) } IRIS_POS; /** Index for shutter control. */ typedef enum { MOTOR_SHUTTER_NORMAL, ///< normal opeartion for shutter MOTOR_SHUTTER_CAP, ///< capture operation for shutter MOTOR_SHUTTER_DUMMYLOAD, ///< reserved MOTOR_SHUTTER_PSEUDO_OPEN, ///< reserved MOTOR_SHUTTER_PSEUDO_CLOSE, ///< reserved ENUM_DUMMY4WORD(MOTOR_SHUTTER_ACT) } MOTOR_SHUTTER_ACT; typedef enum { SHUTTER_DUMMYLOAD_START, ///< reserved SHUTTER_DUMMYLOAD_END, ///< reserved ENUM_DUMMY4WORD(SHUTTER_DUMMYLOAD_ACT) } SHUTTER_DUMMYLOAD_ACT; typedef enum { SHUTTER_POS_CLOSE = 0, ///< used to close shutter SHUTTER_POS_OPEN, ///< used to open shutter SHUTTER_POS_MAX, ENUM_DUMMY4WORD(SHUTTER_POS) } SHUTTER_POS; /** Index for IRCUT control. */ typedef enum { MOTOR_IRCUT_OPEN, MOTOR_IRCUT_CLOSE, ENUM_DUMMY4WORD(MOTOR_IRCUT_ACT) } MOTOR_IRCUT_ACT; typedef enum { IRCUT_POS_OPEN = 0, ///< used to open IRCUT IRCUT_POS_CLOSE, ///< used to close IRCUT IRCUT_POS_MAX, ENUM_DUMMY4WORD(IRCUT_POS) } IRCUT_POS; /** Index for lens support function. */ typedef enum { LENS_SUPPORT_NONE = 0x00000000, LENS_SUPPORT_FOCUS = 0x00000001, LENS_SUPPORT_ZOOM = 0x00000002, LENS_SUPPORT_APERTURE = 0x00000004, LENS_SUPPORT_SHUTTER = 0x00000008, LENS_SUPPORT_IRCUT = 0x00000010, } LENS_SUPPORT_PROPERTY; typedef struct { INT32 iZoomPosition; INT32 iFocusMin; INT32 iFocusMax; } LENS_ZOOM_FOCUS_TAB; typedef struct { UINT32 uiTabIdx; LENS_ZOOM_FOCUS_TAB ZoomFocusTab; } LENS_ZOOM_FOCUS_ITEM; typedef struct { INT32 iLensPosition[FOCUS_DISTANCE_TABLE_NUM]; } LENS_FOCUS_DISTANCE_TAB; /** The callback function of lens */ typedef void (*FPLENS_CALLBACK)(UINT32 msg_id, UINT32 *param); //------------------------------------------------------------------------------ // Structures //------------------------------------------------------------------------------ /** Lens device object. */ typedef struct { UINT32 *pGPIOArray; ///< GPIO pin array for HW connection between NT9666x and lens driver } LENS_DEVICE_OBJ, *PLENS_DEVICE_OBJ; /** The configuration object for motor. */ typedef struct { // common void (*init)(PLENS_DEVICE_OBJ); UINT32 (*getSignal)(MD_SIGNAL); ///< get signal void (*setSignal)(MD_SIGNAL, UINT32); ///< set signal UINT32 (*getInitState)(void); ///< zoom & focus initialization status UINT32 (*getBusyState)(void); ///< zoom & focus motor action // zoom UINT32 (*zoom_getSpeed)(void); ///< get zoom speed void (*zoom_setState)(MOTOR_ZOOM_ACT, UINT32); ///< zoom action // focus UINT32 (*focus_getSpeed)(void); ///< get focus speed BOOL (*focus_setState)(MOTOR_FOCUS_ACT, UINT32); ///< focus action // focus & zoom void (*focus_zoom_setMove)(BOOL, INT32, INT32, BOOL, INT32, INT32); // aperture void (*aperture_setState)(MOTOR_APERTURE_ACT, UINT32); ///< aperture action //shutter void (*shutter_setState)(MOTOR_SHUTTER_ACT, UINT32); ///< shutter action // IR cut void (*ircut_setState)(MOTOR_IRCUT_ACT, UINT32); ///< IR cut action } MOTOR_TAB, *PMOTOR_TAB; /** For DrvExt layer APIs to invoke LibExt layer APIs(LensCtrl_Open). */ typedef struct { void (*lenstsk_setSignal)(MD_SIGNAL, BOOL); void (*lenstsk_zoom_setFunc)(LENS_ZOOM_FUNC, UINT32); void (*lenstsk_focus_setFunc)(LENS_FOCUS_FUNC, UINT32); void (*lenstsk_aperture_setState)(MOTOR_APERTURE_ACT, UINT32); void (*lenstsk_shutter_setState)(MOTOR_SHUTTER_ACT, UINT32); void (*lenstsk_ircut_setState)(MOTOR_IRCUT_ACT, UINT32); } LENSCTRL_TASK_API, *PLENSCTRL_TASK_API; /** The configuration object for lens. */ typedef struct { // common void (*init)(PLENS_DEVICE_OBJ); ///< init lens and mount IO device object void (*getDriverName)(INT8 *); ///< get driver IC name UINT32 (*getSignal)(MD_SIGNAL); ///< get signal void (*setSignal)(MD_SIGNAL, UINT32); ///< set signal UINT32 (*getInitState)(void); ///< zoom & focus initialization status UINT32 (*getBusyState)(void); ///< zoom & focus motor state // zoom INT32 (*zoom_init)(UINT32); ///< init zoom UINT32 (*zoom_getSpeed)(void); ///< get zoom speed void (*zoom_setSpeed)(LENS_SPEED_CATEGORY); ///< set zoom speed UINT32 (*zoom_getMinSection)(void); ///< get minimum zoom section UINT32 (*zoom_getMaxSection)(void); ///< get maximum zoom section UINT32 (*zoom_getSection)(void); ///< get current zoom section INT32 (*zoom_getSectionPosition)(void); ///< get current zoom section step INT32 (*zoom_getPosition)(void); ///< get current zoom position void (*zoom_setPostion)(INT32, INT32); ///< set current zoom position to desired one INT32 (*zoom_go2Section)(UINT32); ///< go to specific zoom section INT32 (*zoom_go2Position)(INT32); ///< go to specific zoom position INT32 (*zoom_press)(UINT32); ///< zoom in/out UINT32 (*zoom_release)(void); ///< zoom stop INT32 (*zoom_retract)(void); ///< zoom retract // focus INT32 (*focus_init)(void); ///< init focus UINT32 (*focus_getSpeed)(void); ///< get focus speed void (*focus_setSpeed)(LENS_SPEED_CATEGORY); ///< set focus speed UINT32 (*focus_getFocalLength)(UINT32); ///< get focal length void (*focus_setFocalLength)(UINT32, UINT32); ///< set focal length INT32 (*focus_getDefaultTable)(UINT32, UINT32); ///< get default table of focus step for each zoom section INT32 (*focus_getTable)(UINT32, UINT32); ///< get table of focus step for each zoom section INT32 (*focus_getRange)(FOCUS_RANGE); ///< get focus search range for each zoom section INT32 (*focus_getPostion)(void); ///< get current focus position void (*focus_setPostion)(INT32, INT32); ///< set current focus position to desired one INT32 (*focus_go2Position)(INT32, BOOL); ///< go to specific focus position INT32 (*focus_press)(UINT32); ///< focus tele/wide UINT32 (*focus_release)(void); ///< focus stop INT32 (*focus_retract)(FOCUS_RETRACT_POSITION); ///< focus retract // aperture void (*aperture_init)(void); ///< init aperture UINT32 (*aperture_getFNo)(UINT32, UINT32); ///< get f number IRIS_POS (*aperture_getPosition)(void); ///< get current aperture position void (*aperture_go2Position)(IRIS_POS); ///< go to specific aperture position void (*aperture_setLumFlux)(UINT32); ///< set lumiance flux for DC-IRIS // shutter void (*shutter_setState)(MOTOR_SHUTTER_ACT, UINT32); ///< set shutter state // IR cut void (*ircut_setState)(MOTOR_IRCUT_ACT, UINT32); ///< set IR cut state // misc INT32 (*lensRetract)(void); ///< lens retract INT32 (*lensReset)(void); ///< lens reset INT32 (*lensPowerOff)(void); ///< turn off lens power UINT32 (*lensGetCapInfo)(void); ///< get lens capability info void (*makeAFTable)(void); ///< calculate AF table INT32 (*setCaliData)(INT16 *, UINT32); ///< load focus calibration data UINT32 (*getZoomFocusTable)(UINT32, LENS_ZOOM_FOCUS_TAB *); ///< get zoom vs focus_range table UINT32 (*setZoomFocusTable)(UINT32, LENS_ZOOM_FOCUS_TAB *); ///< set zoom vs focus_range table PMOTOR_TAB pMotor; ///< motor object pointer PLENSCTRL_TASK_API pLensCtrlTsk; ///< for DrvExt layer APIs to invoke LibExt layer APIs(LensCtrl_Open). } LENS_TAB, *PLENS_TAB; /** The configuration object for Lens Control Object (Lens_ModuleInit()). */ typedef struct { PLENS_TAB pLens; ///< mount lens object PLENS_DEVICE_OBJ pLensDev; ///< mount lens IO object void (*TaskCB)(UINT32 MessageID, UINT32 *Parameter); ///< callback to notify zoom section was changed void (*APICB) (UINT32 MessageID, UINT32 *Parameter); ///< callback to notify UI current state of lens UINT32 semid; ///< semaphore used for lens module } LENSCTRL_OBJ, *PLENSCTRL_OBJ; /** Power on lens @return void */ void DrvLens_PowerOn(void); /** Power off lens @return void */ void DrvLens_PowerOff(void); /** To retrieve lens object. @return PLENS_TAB Point to lens object */ extern PLENS_TAB DrvLens_GetLens(void); /** To retrieve motor object. @return PMOTOR_TAB Point to motor object */ extern PMOTOR_TAB DrvLens_GetMotor(void); /** To retrieve IO device object. @return PLENS_DEVICE_OBJ Point to IO device object */ PLENS_DEVICE_OBJ DrvLens_GetDevice(void); /** To retrieve lens control object. @return PLENSCTRL_OBJ Point to lens control object */ extern PLENSCTRL_OBJ DrvLens_GetLensCtrl(void); extern void DrvLens_RegLensCB(void *plens_task_cb, void *plens_api_cb); #endif // _DXLENS_H_