Initial commit: TXW82x FPV v2.7.0.7-42229 SDK + project sources

This commit is contained in:
2026-07-06 11:30:13 +08:00
commit e76462eeb7
3451 changed files with 1415300 additions and 0 deletions

242
sdk/hal/dvp.c Normal file
View File

@@ -0,0 +1,242 @@
#include "typesdef.h"
#include "list.h"
#include "errno.h"
#include "dev.h"
#include "devid.h"
#include "hal/dvp.h"
int32 dvp_open(struct dvp_device *p_dvp)
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->open) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->open(p_dvp);
}
return RET_ERR;
}
int32 dvp_close(struct dvp_device *p_dvp)
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->close) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->close(p_dvp);
}
return RET_ERR;
}
int32 dvp_init(struct dvp_device *p_dvp)
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->init) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->init(p_dvp);
}
return RET_ERR;
}
int32 dvp_deinit(struct dvp_device *p_dvp)
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->deinit) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->deinit(p_dvp);
}
return RET_ERR;
}
int32 dvp_set_baudrate(struct dvp_device *p_dvp, uint32 mclk)
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->baudrate) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->baudrate(p_dvp, mclk);
}
return RET_ERR;
}
int32 dvp_set_size(struct dvp_device *p_dvp, uint32 x_s, uint32 y_s, uint32 x_e, uint32 y_e)
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl) {
uint32 size_array[4] = {x_s, y_s, x_e, y_e};
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl(p_dvp, DVP_IOCTL_CMD_SET_SIZE, (uint32)size_array, 0);
}
return RET_ERR;
}
int32 dvp_set_addr1(struct dvp_device *p_dvp, uint32 yuv_addr)
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl(p_dvp, DVP_IOCTL_CMD_SET_ADR_1, yuv_addr, 0);
}
return RET_ERR;
}
int32 dvp_set_addr2(struct dvp_device *p_dvp, uint32 yuv_addr)
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl(p_dvp, DVP_IOCTL_CMD_SET_ADR_2, yuv_addr, 0);
}
return RET_ERR;
}
int32 dvp_set_rgb2yuv(struct dvp_device *p_dvp, uint8 en)
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl(p_dvp, DVP_IOCTL_CMD_RGB_2_YUV, en, 0);
}
return RET_ERR;
}
int32 dvp_set_exchange_d5_d6(struct dvp_device *p_dvp, uint8 en)
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl(p_dvp, DVP_IOCTL_CMD_EX_D5_D6, en, 0);
}
return RET_ERR;
}
int32 dvp_set_vsync_rst_offline(struct dvp_device *p_dvp,uint8 enable,uint32 timeout)
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl(p_dvp, DVP_IOCTL_CMD_VSYNC_RST_TM, timeout, enable);
}
return RET_ERR;
}
int32 dvp_set_format(struct dvp_device *p_dvp, uint8 format) ///*
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl(p_dvp, DVP_IOCTL_CMD_SET_FORMAT, format, 0);
}
return RET_ERR;
}
int32 dvp_set_half_size(struct dvp_device *p_dvp, uint8 en)
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl(p_dvp, DVP_IOCTL_CMD_SET_SCEN, en, 0);
}
return RET_ERR;
}
int32 dvp_set_vsync_polarity(struct dvp_device *p_dvp, uint8 high_valid)
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl(p_dvp, DVP_IOCTL_CMD_SET_VSYNC_VAILD, high_valid, 0);
}
return RET_ERR;
}
int32 dvp_set_hsync_polarity(struct dvp_device *p_dvp, uint8 high_valid)
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl(p_dvp, DVP_IOCTL_CMD_SET_HSYNC_VAILD, high_valid, 0);
}
return RET_ERR;
}
int32 dvp_set_once_sampling(struct dvp_device *p_dvp, uint8 en)
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl(p_dvp, DVP_IOCTL_CMD_SET_ONE_SAMPLE, en, 0);
}
return RET_ERR;
}
int32 dvp_debounce_enable(struct dvp_device *p_dvp, uint8 en, uint8 pixel)
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl(p_dvp, DVP_IOCTL_CMD_SET_DEBOUNCE, en, pixel);
}
return RET_ERR;
}
int32 dvp_set_ycbcr(struct dvp_device *p_dvp, uint8 mode)
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl(p_dvp, DVP_IOCTL_CMD_SET_YCBCR_MODE, mode, 0);
}
return RET_ERR;
}
int32 dvp_unload_uv(struct dvp_device *p_dvp, uint8 en)
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl(p_dvp, DVP_IOCTL_CMD_DIS_UV_MODE, en, 0);
}
return RET_ERR;
}
int32 dvp_frame_load_precent(struct dvp_device *p_dvp, uint8 precent)
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl(p_dvp, DVP_IOCTL_CMD_SET_FRAME_RATE, precent, 0);
}
return RET_ERR;
}
int32 dvp_get_status(struct dvp_device *p_dvp)
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl(p_dvp, DVP_IOCTL_CMD_GET_STA, 0, 0);
}
return RET_ERR;
}
int32 dvp_low_high_threshold(struct dvp_device *p_dvp, bool low_high)
{
uint32 dlt, dht;
if (low_high == 0) {
dlt = 0x00000030;
dht = 0x00ffffA0;
} else {
dht = 0x00ffffff;
dlt = 0;
}
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl(p_dvp, DVP_IOCTL_CMD_SET_THRESHOLD, dlt, dht);
}
return RET_ERR;
}
int32 dvp_jpeg_mode_set_len(struct dvp_device *p_dvp, uint32 len)
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl(p_dvp, DVP_IOCTL_CMD_SET_JPEG_LEN, len, 0);
}
return RET_ERR;
}
int32 dvp_10BITS_map(struct dvp_device *p_dvp, uint8 mode)
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl(p_dvp, DVP_IOCTL_CMD_10BITS_MAP, mode, 0);
}
return RET_ERR;
}
int32 dvp_8BITS_map(struct dvp_device *p_dvp, uint8 mode)
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->ioctl(p_dvp, DVP_IOCTL_CMD_8BITS_MAP, mode, 0);
}
return RET_ERR;
}
int32 dvp_request_irq(struct dvp_device *p_dvp, uint32 irq_flags, dvp_irq_hdl irq_hdl, uint32 irq_data)
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->request_irq) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->request_irq(p_dvp, irq_flags, irq_hdl, irq_data);
}
return RET_ERR;
}
int32 dvp_release_irq(struct dvp_device *p_dvp, uint32 irq_flags)
{
if (p_dvp && ((const struct dvp_hal_ops *)p_dvp->dev.ops)->release_irq) {
return ((const struct dvp_hal_ops *)p_dvp->dev.ops)->release_irq(p_dvp, irq_flags);
}
return RET_ERR;
}