Files
TAIXIN/sdk/include/hal/para_in.h

119 lines
3.7 KiB
C
Raw Permalink Normal View History

#ifndef HAL_PARA_IN_H
#define HAL_PARA_IN_H
#ifdef __cplusplus
extern "C" {
#endif
typedef int32(*para_in_irq_hdl)(uint32 irq_flags, uint32 irq_data, uint32 param, uint32 param2);
enum para_in_dev_irqs {
FRM_RX_DOWN_ISR = BIT(0),
OFOV_ISR = BIT(1),
IFOV_ISR = BIT(2),
VSYNC_ERR_ISR = BIT(3),
HSYNC_ERR_ISR = BIT(4),
ESAV_ERR_ISR = BIT(5),
TIMEOUT_ISR = BIT(6),
};
enum para_in_intf {
PARA_IN_BT601 = 0,
PARA_IN_BT656,
PARA_IN_BT1120,
};
enum para_in_dev_fmt {
PARA_IN_YUV = 0,
PARA_IN_YCrCb,
};
// VPP/ISP 与 PARA IN 模式顺序相反
enum para_in_dev_yuv_sequence {
U_Y1_V_Y2 = 0,
V_Y1_U_Y2,
Y1_U_Y2_V,
Y1_V_Y2_U,
U_Y2_V_Y1,
V_Y2_U_Y1,
Y2_U_Y1_V,
Y2_V_Y1_U,
};
enum para_in_ioctl_cmd{
PARA_IN_SET_PARAMS = 0,
PARA_IN_SET_TIMEOUT_EN,
PARA_IN_SET_TIMEOUT_TIME,
PARA_IN_SET_VHSYNC_EN,
PARA_IN_SET_HSYNC_POL,
PARA_IN_SET_VSYNC_POL,
PARA_IN_SMAP_CLK_SEL,
PARA_IN_INTF_SEL,
PARA_IN_YUV_SEL,
PARA_IN_SET_OUTPUT_SEQUENCE,
PARA_IN_SET_INPUT_SEQUENCE,
PARA_IN_FRT_VSYNC_SEL,
PARA_IN_SAV_AHEAD,
PARA_IN_RC_ST_DTC_MODE,
PARA_IN_ESAV_ERR_DTC_EN,
PARA_IN_SET_CON_EN,
};
enum para_in_samp_edge{
PARA_IN_RISING_EDGE = 0,
PARA_IN_FALLING_EDGE,
};
typedef struct PARA_IN_SENSOR_REG_INFO
{
unsigned char reg_addr;
unsigned char value;
} _PARA_IN_SENSOR_REG_INFO;
#define PARA_IN_REG_END {0xFF,0xFF}
struct para_in_params {
uint32_t act_hblk; //ACT_HBLK : 有效行非有效数据长度若有数据含有EAVSAV需加上EAV与SAV长度。
uint32_t act_lpot_num; //ACT_LPOT_NUM : 有效行的真实数据点数若一行的真实数据点数为720个则有效数据长度为720 X 2。
uint32_t act_hf_frm_num; //ACT_HF_FRM_NUM : 半帧图像的有效行数
uint8_t frt_fblk; //FRT_FBLK : 逐行数据的第一段消隐行数至少为1
uint8_t sec_sblk; //SEC_SBLK : 逐行数据的第二段消隐行数至少为1
uint32_t width;
uint32_t height;
uint8_t data_format; //para_in_intf (BT601 / BT656 / BT1120)
uint8_t in_yuv_sequence; //para_in_dev_yuv_sequence 输入YUV顺序
uint8_t out_yuv_sequence; //para_in_dev_yuv_sequence 输出YUV顺序
uint8_t out_yuv_format; //para_in_dev_fmt
uint8_t smap_edge; //para_in_samp_edge 采样边沿
uint8_t vs_pol; //0: 高电平有效 1低电平有效
uint8_t hs_pol; //0: 高电平有效 1低电平有效
uint8_t i2c_dev_addr;
uint8_t i2c_id_addr1;
uint8_t i2c_id_addr2;
uint16_t i2c_id;
_PARA_IN_SENSOR_REG_INFO *i2c_init_table;
};
typedef struct para_in_params _Sensor_Para_in_Init;
struct para_in_device {
struct dev_obj dev;
};
struct para_in_hal_ops {
struct devobj_ops ops;
int32(*open)(struct para_in_device *para_in_dev);
int32(*close)(struct para_in_device *para_in_dev);
int32(*ioctl)(struct para_in_device *para_in_dev, enum para_in_ioctl_cmd ioctl_cmd, uint32 param1, uint32 param2);
int32(*request_irq)(struct para_in_device *para_in_dev, uint32 irq_flag, para_in_irq_hdl irq_hdl, uint32 irq_data);
int32(*release_irq)(struct para_in_device *para_in_dev, uint32 irq_flag);
};
int32 para_in_open(struct para_in_device *p_dev);
int32 para_in_close(struct para_in_device *p_dev);
int32 para_in_ioctl(struct para_in_device *p_dev, uint32 cmd, uint32 param1, uint32 param2);
int32 para_in_request_irq(struct para_in_device *p_dev, uint32 irq_flags, para_in_irq_hdl handle, uint32 data);
int32 para_in_release_irq(struct para_in_device *p_dev, uint32 irq_flag);
#ifdef __cplusplus
}
#endif
#endif