📄 tmbslhdmitx_2.c
字号:
/* 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 + -