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

📄 tmbslhdmitx_2.c

📁 HDMI NXP9983 chipset controller driver
💻 C
📖 第 1 页 / 共 5 页
字号:
    /* Set or clear GC packet insertion flag */    err = setHwRegisterField(pDis,                              E_REG_P11_DIP_FLAGS_RW,                             E_MASKREG_P11_DIP_FLAGS_gc,                             (UInt8)bEnable);    return err;}/*============================================================================*//* tmbslHdmiTxPktSetIsrc1                                                     *//*============================================================================*/tmErrorCode_ttmbslHdmiTxPktSetIsrc1(    tmUnitSelect_t      txUnit,    tmbslHdmiTxPkt_t    *pPkt,    UInt                byteCnt,    Bool                bIsrcCont,    Bool                bIsrcValid,    UInt8               uIsrcStatus,    Bool                bEnable){    tmHdmiTxobject_t    *pDis;  /* Pointer to Device Instance Structure */    tmErrorCode_t       err;    /* Error code */    UInt8               buf[3]; /* Temp buffer to hold header bytes */    /* Check unit parameter and point to TX unit object */    err = checkUnitSetDis(txUnit, &pDis);    RETIF(err != TM_OK, err)    /* Return TMBSL_ERR_HDMI_OPERATION_NOT_PERMITTED error if the      * sinkType is not HDMI     */     RETIF(pDis->sinkType != HDMITX_SINK_HDMI,          TMBSL_ERR_HDMI_OPERATION_NOT_PERMITTED)    /* Only supported for device N4 or later */     /* Check remaining parameter(s) - NULL pointer allowed */    RETIF_BADPARAM((bEnable != True) && (bEnable != False))    if(pPkt != Null)    {        /* Pointer to structure provided so check parameters */        RETIF_BADPARAM((bIsrcCont != True) && (bIsrcCont != False))        RETIF_BADPARAM((bIsrcValid != True) && (bIsrcValid != False))        RETIF_BADPARAM(uIsrcStatus > 7)    /* 3 bits */        RETIF_BADPARAM(byteCnt > HDMITX_PKT_DATA_BYTE_CNT)        RETIF(byteCnt == 0, TMBSL_ERR_HDMI_INCONSISTENT_PARAMS)        /* Data to change, start by clearing ISRC1 packet insertion flag */        err = setHwRegisterField(pDis,                                  E_REG_P11_DIP_FLAGS_RW,                                 E_MASKREG_P11_DIP_FLAGS_isrc1,                                 0x00);        RETIF_REG_FAIL(err)        /* Prepare ISRC1 header */        buf[0] = 0x05;      /* ISRC1 packet */        buf[1] = (uIsrcStatus & 0x07);        if(bIsrcValid == True)        {            buf[1] += 0x40;        }        if(bIsrcCont == True)        {            buf[1] += 0x80;        }        buf[2] = 0;         /* Reserved [HDMI 1.2] */        /* Write 3 header bytes to registers */        err = setHwRegisters(pDis,                             E_REG_P11_ISRC1_HB0_RW,                             &buf[0],                             3);        RETIF_REG_FAIL(err)        /* Write "byteCnt" bytes of data to registers */        err = setHwRegisters(pDis,                             E_REG_P11_ISRC1_PB0_RW,                             &pPkt->dataByte[0],                             (UInt16)byteCnt);        RETIF_REG_FAIL(err)    }    /* Write the ISRC1 packet insertion flag */    err = setHwRegisterField(pDis,                              E_REG_P11_DIP_FLAGS_RW,                             E_MASKREG_P11_DIP_FLAGS_isrc1,                             (UInt8)bEnable);    return err;}/*============================================================================*//* tmbslHdmiTxPktSetIsrc2                                                     *//*============================================================================*/tmErrorCode_ttmbslHdmiTxPktSetIsrc2(    tmUnitSelect_t      txUnit,    tmbslHdmiTxPkt_t    *pPkt,    UInt                byteCnt,    Bool                bEnable){    tmHdmiTxobject_t    *pDis;  /* Pointer to Device Instance Structure */    tmErrorCode_t       err;    /* Error code */    UInt8               buf[3]; /* Temp buffer to hold header bytes */    /* Check unit parameter and point to TX unit object */    err = checkUnitSetDis(txUnit, &pDis);    RETIF(err != TM_OK, err)    /* Return TMBSL_ERR_HDMI_OPERATION_NOT_PERMITTED error if the      * sinkType is not HDMI     */     RETIF(pDis->sinkType != HDMITX_SINK_HDMI,          TMBSL_ERR_HDMI_OPERATION_NOT_PERMITTED)    /* Only supported for device N4 or later */     /* Check remaining parameter(s) - NULL pointer allowed */    RETIF_BADPARAM((bEnable != True) && (bEnable != False))    if(pPkt != Null)    {        /* Pointer to structure provided so check parameters */        RETIF_BADPARAM(byteCnt > HDMITX_PKT_DATA_BYTE_CNT)        RETIF(byteCnt == 0, TMBSL_ERR_HDMI_INCONSISTENT_PARAMS)        /* Data to change, start by clearing ISRC2 packet insertion flag */        err = setHwRegisterField(pDis,                                  E_REG_P11_DIP_FLAGS_RW,                                 E_MASKREG_P11_DIP_FLAGS_isrc2,                                 0x00);        RETIF_REG_FAIL(err)        /* Prepare ISRC2 header */        buf[0] = 0x06;      /* ISRC2 packet */        buf[1] = 0;         /* Reserved [HDMI 1.2] */        buf[2] = 0;         /* Reserved [HDMI 1.2] */        /* Write 3 header bytes to registers */        err = setHwRegisters(pDis,                             E_REG_P11_ISRC2_HB0_RW,                             &buf[0],                             3);        RETIF_REG_FAIL(err)        /* Write "byteCnt" bytes of data to registers */        err = setHwRegisters(pDis,                             E_REG_P11_ISRC2_PB0_RW,                             &pPkt->dataByte[0],                             (UInt16)byteCnt);        RETIF_REG_FAIL(err)    }    /* Write the ISRC2 packet insertion flag */    err = setHwRegisterField(pDis,                              E_REG_P11_DIP_FLAGS_RW,                             E_MASKREG_P11_DIP_FLAGS_isrc2,                             (UInt8)bEnable);    return err;}/*============================================================================*//* tmbslHdmiTxPktSetMpegInfoframe                                             *//*============================================================================*/tmErrorCode_ttmbslHdmiTxPktSetMpegInfoframe(    tmUnitSelect_t          txUnit,    tmbslHdmiTxPktMpeg_t    *pPkt,    Bool                    bEnable){    tmHdmiTxobject_t    *pDis;  /* Pointer to Device Instance Structure */    tmErrorCode_t       err;    /* Error code */    UInt8               buf[9]; /* Temp buffer to hold packet */    /* Check unit parameter and point to TX unit object */    err = checkUnitSetDis(txUnit, &pDis);    RETIF(err != TM_OK, err)    /* Return TMBSL_ERR_HDMI_OPERATION_NOT_PERMITTED error if the      * sinkType is not HDMI     */     RETIF(pDis->sinkType != HDMITX_SINK_HDMI,          TMBSL_ERR_HDMI_OPERATION_NOT_PERMITTED)    /* Only supported for device N4 or later */     /* Check remaining parameter(s) */    RETIF_BADPARAM((bEnable != True) && (bEnable != False))    if(pPkt != Null)    {        /* Pointer to structure provided so check parameters */        RETIF_BADPARAM((pPkt->bFieldRepeat != True) && (pPkt->bFieldRepeat != False))        RETIF_BADPARAM(pPkt->frameType >= HDMITX_MPEG_FRAME_INVALID)        /* Data to change, start by clearing MPEG packet insertion flag */        err = setHwRegisterField(pDis,                                  E_REG_P11_DIP_IF_FLAGS_RW,                                 E_MASKREG_P11_DIP_IF_FLAGS_if5,                                 0x00);        RETIF_REG_FAIL(err)        /* Prepare MPEG header */        buf[0] = 0x85;      /* MPEG Source InfoFrame */        buf[1] = 0x01;      /* Version 1 [HDMI 1.2] */        buf[2] = 0x0A;      /* Length [HDMI 1.2] */        /* Prepare MPEG packet (byte numbers offset by 3) */        buf[0+3] = 0;     /* Preset checksum to zero so calculation works! */        buf[1+3] = (UInt8)(pPkt->bitRate & 0x000000FF);        buf[2+3] = (UInt8)((pPkt->bitRate & 0x0000FF00) >> 8);        buf[3+3] = (UInt8)((pPkt->bitRate & 0x00FF0000) >> 16);        buf[4+3] = (UInt8)((pPkt->bitRate & 0xFF000000) >> 24);        buf[5+3] = pPkt->frameType;                         /* MF1-0 */        if(pPkt->bFieldRepeat == True)        {            buf[5+3] += 0x10;                               /* FR0 bit */        }        /* Calculate checksum - this is worked out on "Length" bytes of the         * packet, the checksum (which we've preset to zero), and the three         * header bytes.  We exclude bytes PB6 to PB10 (which we         * are not writing) since they are zero.         */        buf[0+3] = calculateChecksum(&buf[0], 0x0A+1+3-5);        /* Write header and packet bytes in one operation */        err = setHwRegisters(pDis,                             E_REG_P10_IF5_HB0_RW,                             &buf[0],                             9);        RETIF_REG_FAIL(err)    }    /* Write the MPEG packet insertion flag */    err = setHwRegisterField(pDis,                              E_REG_P11_DIP_IF_FLAGS_RW,                             E_MASKREG_P11_DIP_IF_FLAGS_if5,                             (UInt8)bEnable);    return err;}/*============================================================================*//* tmbslHdmiTxPktSetNullInsert                                                *//*============================================================================*/tmErrorCode_ttmbslHdmiTxPktSetNullInsert(    tmUnitSelect_t  txUnit,    Bool            bEnable){    tmHdmiTxobject_t    *pDis;  /* Pointer to Device Instance Structure */    tmErrorCode_t       err;    /* Error code */    /* Check unit parameter and point to TX unit object */    err = checkUnitSetDis(txUnit, &pDis);    RETIF(err != TM_OK, err)    /* Return TMBSL_ERR_HDMI_OPERATION_NOT_PERMITTED error if the      * sinkType is not HDMI     */     RETIF(pDis->sinkType != HDMITX_SINK_HDMI,          TMBSL_ERR_HDMI_OPERATION_NOT_PERMITTED)    /* Check remaining parameter(s) */    RETIF_BADPARAM((bEnable != True) && (bEnable != False))    /* Set or clear FORCE_NULL packet insertion flag */    err = setHwRegisterField(pDis,                              E_REG_P11_DIP_FLAGS_RW,                             E_MASKREG_P11_DIP_FLAGS_force_null,                             (UInt8)bEnable);    return err;}/*============================================================================*//* tmbslHdmiTxPktSetNullSingle                                                *//*============================================================================*/tmErrorCode_ttmbslHdmiTxPktSetNullSingle(    tmUnitSelect_t  txUnit){    tmHdmiTxobject_t    *pDis;  /* Pointer to Device Instance Structure */    tmErrorCode_t       err;    /* Error code */    /* Check unit parameter and point to TX unit object */    err = checkUnitSetDis(txUnit, &pDis);    RETIF(err != TM_OK, err)    /* Return TMBSL_ERR_HDMI_OPERATION_NOT_PERMITTED error if the      * sinkType is not HDMI     */     RETIF(pDis->sinkType != HDMITX_SINK_HDMI,          TMBSL_ERR_HDMI_OPERATION_NOT_PERMITTED)    /* Set NULL packet insertion flag */    err = setHwRegisterField(pDis,                              E_REG_P11_DIP_FLAGS_RW,                             E_MASKREG_P11_DIP_FLAGS_null,                             0x01);    return err;}/*============================================================================*//* tmbslHdmiTxPktSetSpdInfoframe                                              *//*============================================================================*/tmErrorCode_ttmbslHdmiTxPktSetSpdInfoframe(    tmUnitSelect_t      txUnit,    tmbslHdmiTxPktSpd_t *pPkt,    Bool                bEnable){    tmHdmiTxobject_t    *pDis;  /* Pointer to Device Instance Structure */    tmErrorCode_t       err;    /* Error code */    UInt8               buf[29];/* Temp buffer to hold packet */    /* Check unit parameter and point to TX unit object */    err = checkUnitSetDis(txUnit, &pDis);    RETIF(err != TM_OK, err)    /* Return TMBSL_ERR_HDMI_OPERATION_NOT_PERMITTED error if the      * sinkType is not HDMI     */     RETIF(pDis->sinkType != HDMITX_SINK_HDMI,          TMBSL_ERR_HDMI_OPERATION_NOT_PERMITTED)    /* Only supported for device N4 or later */     /* Check remaining parameter(s) */    RETIF_BADPARAM((bEnable != True) && (bEnable != False))    if(pPkt != Null)    {        /* Pointer to structure provided so check parameters */        RETIF_BADPARAM(pPkt->SourceDevInfo >= HDMITX_SPD_INFO_INVALID)        /* Data to change, start by clearing SPD packet insertion flag */        err = setHwRegisterField(pDis,                                  E_REG_P11_DIP_IF_FLAGS_RW,                                 E_MASKREG_P11_DIP_IF_FLAGS_if3,                                 0x00);        RETIF_REG_FAIL(err)        /* Prepare SPD header */        buf[0] = 0x83;      /* Source. Product Descriptor InfoFrame */        buf[1] = 0x01;      /* Version 1 [CEA 861B] */        buf[2] = 0x19;    

⌨️ 快捷键说明

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