⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tmbslhdmitx_app.c

📁 HDMI NXP9983 chipset controller driver
💻 C
📖 第 1 页 / 共 5 页
字号:
);

/*============================================================================*/
/*                   PUBLIC FUNCTION DEFINITIONS                              */
/*============================================================================*/


/*============================================================================*/
/* Initialise demo application */
void
appHdmiTx_init(void)
{
    EdidVFmtsAvail = 0;
    AudioChannelAllocation = 0;

#ifndef NO_HDCP
    HdcpKsvDevices = 0;
    lAppMemset(HdcpBksv, 0, sizeof(HdcpBksv));
#endif /* NO_HDCP */
}

/*============================================================================*/
/* Set colourbar test pattern on with RGB infoframe */
tmErrorCode_t
appHdmiTx_test_pattern_on
(
    tmUnitSelect_t              txUnit,
    tmbslHdmiTxVidFmt_t         voutFmt,
    tmbslHdmiTxVoutMode_t       voutMode,
    tmbslHdmiTxTestPattern_t    pattern
)
{
    tmErrorCode_t           err;
    tmbslHdmiTxVoutMode_t   infoFrameMode;

    err = tmbslHdmiTxTestSetPattern(txUnit, pattern);
    RETIF(err != TM_OK, err + 0x100);

    /* set infoframe in RGB when pattern is colorbar */
    if (pattern>HDMITX_PATTERN_CBAR8)
    {
        infoFrameMode = voutMode;
    }
    else
    {
        infoFrameMode = HDMITX_VOUTMODE_RGB444;
    }
    /* update videoinfoframe */
    err = setVideoInfoframe(
                            txUnit,
                            voutFmt,
                            infoFrameMode
                            );
    return TM_OK;
}

/*============================================================================*/
/* Set colourbar test pattern off with previous infoframe */
tmErrorCode_t
appHdmiTx_test_pattern_off
(
    tmUnitSelect_t          txUnit,
    tmbslHdmiTxVidFmt_t     voutFmt,
    tmbslHdmiTxVoutMode_t   voutMode
)
{
    tmErrorCode_t err;

    err = tmbslHdmiTxTestSetPattern(txUnit, HDMITX_PATTERN_OFF);
    RETIF(err != TM_OK, err + 0x100);

    /* Restore vif */
    err = setVideoInfoframe(txUnit, voutFmt, voutMode);
    RETIF(err != TM_OK, err + 0x200);

    return TM_OK;
}

/*============================================================================*/
/* Set input and output formats, modes, sync source, sink type and audio rate */
tmErrorCode_t
appHdmiTx_setInputOutput
(
    tmUnitSelect_t          txUnit,     /* Defaults: */
    tmbslHdmiTxVidFmt_t     vinFmt,     /* HDMITX_VFMT_02_720x480p_60Hz */
    tmbslHdmiTxVinMode_t    vinMode,    /* HDMITX_VINMODE_YUV422 */
    tmbslHdmiTxVidFmt_t     voutFmt,    /* HDMITX_VFMT_04_1280x720p_60Hz etc */
    tmbslHdmiTxVoutMode_t   voutMode,   /* HDMITX_VOUTMODE_YUV422 */
    tmbslHdmiTxSyncSource_t syncSource, /* HDMITX_SYNCSRC_EMBEDDED */
    tmbslHdmiTxSinkType_t   sinkType,   /* HDMITX_SINK_HDMI */
    tmbslHdmiTxaFmt_t       audioFmt,   /* HDMITX_AFMT_SPDIF */
    tmbslHdmiTxafs_t        audioRate,  /* HDMITX_AFS_48K */
    UInt8                   i2sQualifier,/* 0 */
    tmbslHdmiTxPixRate_t    pixRate,    /* HDMITX_PIXRATE_SINGLE */
    tmbslHdmiTxPixEdge_t    pixelEdge,  /* Pixel sampling edge */
    Bool                    *pbVerified /* Returns True if requested combination
                                         * has been verified during testing */
)
{
    tmErrorCode_t           err;        /* Error code from APIs */
    UInt8                   swapTable[HDMITX_VIN_PORT_MAP_TABLE_LEN];
    UInt8                   mirrorTable[HDMITX_VIN_PORT_MAP_TABLE_LEN];
    UInt16                  uRefPix;    /* REFPIX for output */
    UInt16                  uRefLine;   /* REFLINE for output */
    UInt16                  uScRefPix;  /* REFPIX for scaler */
    UInt16                  uScRefLine; /* REFLINE for scaler */
    tmbslHdmiTxVsOnce_t     once;       /* Line/pixel counters sync */
    tmbslHdmiTxScaMode_t    scalerMode; /* Current scaler mode */
    tmbslHdmiTxBlnkSrc_t    blankit;    /* Blanking */
    tmbslHdmiTxPixTogl_t    toggle;     /* Toggling */
    tmbslHdmiTxVoutDbits_t  pathBits;   /* Data path bit width */
    tmbslHdmiTxPixSubpkt_t  spSync;     /* Subpacket sync */
    UInt8                   pixRepeat;  /* Pixel repetition */
    tmbslHdmiTxVsMeth_t     syncMethod; /* Sync method */
    tmbslHdmiTxTopSel_t     topSel;     /* Adjustment for interlaced output */
    UInt8                   syncIn;     /* Embedded or external */
    tmbslHdmiTxPixRate_t    pixRateSingleDouble;    /* HDMITX_PIXRATE_SINGLE */
#ifdef TMFL_TDA9981_SUPPORT
    UInt8                   enaVideoPortTable[HDMITX_ENABLE_VP_TABLE_LEN];
    UInt8                   gndVideoPortTable[HDMITX_GROUND_VP_TABLE_LEN];
    UInt8                   enaAudioPortCfg;
    UInt8                   gndAudioPortCfg;
#endif /* TMFL_TDA9981_SUPPORT */

    /* Script: api_output_frame */
    /* CHANGE FROM SCRIPT: CR13: Use tmbslHdmiTxTmdsSetOutputs instead */
    err = tmbslHdmiTxTmdsSetOutputs(txUnit, HDMITX_TMDSOUT_FORCED0);
    RETIF(err != TM_OK, err + 0x100);

#ifdef TMFL_TDA9981_SUPPORT
    /* PR456 Modification - use phase2 : 4 - Phase3 : 8 */
    err =tmbslHdmiTxTmdsSetSerializer(txUnit,4,8);
    RETIF(err != TM_OK, err + 0x200);
#else /* TMFL_TDA9981_SUPPORT */
    /* PR46 Modification - use phase2 : 8 - Phase3 : 4 */
    err =tmbslHdmiTxTmdsSetSerializer(txUnit,8,4);
    RETIF(err != TM_OK, err + 0x200);
#endif /* TMFL_TDA9981_SUPPORT */

    if (sinkType == HDMITX_SINK_EDID)
    {
        /* change sink Type with the currently defined in EDID */
#ifdef __RC51__
#pragma nowarning(C207)
#endif
        err = tmbslHdmiTxEdidGetSinkType(txUnit, &sinkType);
#ifdef __RC51__
#pragma warning(C207)
#endif
        RETIF(err != TM_OK, err + 0x300);

    }

    /* Script: api_output_config */
    err = tmbslHdmiTxVideoOutSetConfig(txUnit, sinkType, voutMode, 
                                HDMITX_VOUT_PREFIL_OFF, HDMITX_VOUT_YUV_BLNK_16,
                                HDMITX_VOUT_QRANGE_FS);
    RETIF(err != TM_OK, err + 0x400);

    /* Set default config */
    pixRepeat = HDMITX_PIXREP_DEFAULT;
    pathBits  = HDMITX_VOUT_DBITS_12;
    syncMethod = HDMITX_VSMETH_V_H;
    toggle    = HDMITX_PIXTOGL_ENABLE;
    
    /* Set sync details */
    if (syncSource == HDMITX_SYNCSRC_EMBEDDED)
    {
        /* Embedded sync */
        syncIn    = EMB;
        spSync    = HDMITX_PIXSUBPKT_SYNC_HEMB;
        blankit   = HDMITX_BLNKSRC_VS_HEMB_VEMB;
        /*PR48 mod: change syncMethod value since it is syncSource dependent*/
        syncMethod = HDMITX_VSMETH_V_XDE;
    }
    else
    {
        /* External sync */
        syncIn    = EXT;
        spSync    = HDMITX_PIXSUBPKT_SYNC_DE;
        blankit   = HDMITX_BLNKSRC_NOT_DE;
    }

#ifdef TMFL_TDA9981_SUPPORT
    /* Get the configuration file information */
    /* Port swap table */
    err = tmbslHdmiTxGetSwapTableConfig(txUnit, swapTable, vinMode);
    RETIF(err != TM_OK, err + 0x410);
    
    if(vinMode == HDMITX_VINMODE_CCIR656)
        pathBits = HDMITX_VOUT_DBITS_8;
    
    /* Port mirror Table */
    err = tmbslHdmiTxGetMirrorTableConfig(txUnit, mirrorTable);
    RETIF(err != TM_OK, err + 0x420);
    /* Video port enable and pulldown table */
    err = tmbslHdmiTxGetVideoPortConfig(txUnit, enaVideoPortTable, gndVideoPortTable);
    RETIF(err != TM_OK, err + 0x430);
    /* Audio port enable and pulldown table */
    err = tmbslHdmiTxGetAudioPortConfig(txUnit, &enaAudioPortCfg, &gndAudioPortCfg);
    RETIF(err != TM_OK, err + 0x440);
    
    /* Set the audio and video input port configuration */
    err = tmbslHdmiTxSetVideoPortConfig(txUnit, enaVideoPortTable, gndVideoPortTable);
    RETIF(err != TM_OK, err + 0x450);
    err = tmbslHdmiTxSetAudioPortConfig(txUnit, &enaAudioPortCfg, &gndAudioPortCfg);
    RETIF(err != TM_OK, err + 0x460);
#else 
    /* Script: api_set_INPUT_port */
    switch (vinMode)
    {
    case HDMITX_VINMODE_YUV422:
        swapTable[0] = 2;
        swapTable[1] = 3;
        swapTable[2] = 0;
        swapTable[3] = 0;
        swapTable[4] = 1;
        swapTable[5] = 0;
        break;
    case HDMITX_VINMODE_CCIR656:
        swapTable[0] = 4;
        swapTable[1] = 5;
        swapTable[2] = 0;
        swapTable[3] = 0;
        swapTable[4] = 0;
        swapTable[5] = 0;
        pathBits = HDMITX_VOUT_DBITS_8;
        break;
    case HDMITX_VINMODE_RGB444:
    case HDMITX_VINMODE_YUV444:
    default:
        swapTable[0] = 2;
        swapTable[1] = 3;
        swapTable[2] = 4;
        swapTable[3] = 5;
        swapTable[4] = 0;
        swapTable[5] = 1;
        break;
    }
    mirrorTable[0] = 0;
    mirrorTable[1] = 0;
    mirrorTable[2] = 0;
    mirrorTable[3] = 0;
    mirrorTable[4] = 0;
    mirrorTable[5] = 0;

#endif /* TMFL_TDA9981_SUPPORT */
    
    err = tmbslHdmiTxVideoInSetMapping(txUnit, swapTable, mirrorTable);
    RETIF(err != TM_OK, err + 0x500);
    err = tmbslHdmiTxVideoInSetFine(txUnit, spSync, HDMITX_PIXTOGL_NO_ACTION);
    RETIF(err != TM_OK, err + 0x600);

    /* Script: api_input_blanking */
    err = tmbslHdmiTxVideoInSetBlanking(txUnit,
          blankit, HDMITX_BLNKCODE_ALL_0);
    RETIF(err != TM_OK, err + 0x700);

    /* Script: api_input_config */
    err = tmbslHdmiTxVideoInSetConfig(txUnit, vinMode, pixelEdge,
                        pixRate, HDMITX_UPSAMPLE_AUTO);
    RETIF(err != TM_OK, err + 0x800);

    /* Only set audio for HDMI, not DVI */
    if (sinkType == HDMITX_SINK_HDMI)
    {
        /* Set audio parameters -> script in */
        err = appHdmiTx_setAudio(txUnit, voutFmt, sinkType, audioFmt, audioRate, i2sQualifier);
        RETIF(err != TM_OK, err + 0x900);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -