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

119 lines
3.7 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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