📄 tmdlhdmitx.c
字号:
/** * Copyright (C) 2006 NXP N.V., All Rights Reserved. * This source code and any compilation or derivative thereof is the proprietary * information of NXP N.V. and is confidential in nature. Under no circumstances * is this software to be exposed to or placed under an Open Source License of * any type without the expressed written permission of NXP N.V. * * \file tmdlHdmiTx.c * * \version Revision: 1 * * \date Date: 10/08/07 10:00 * * \brief devlib driver component API for the TDA998x HDMI Transmitters * * \section refs Reference Documents * HDMI Tx Driver - FRS.doc, * * \section info Change Information * * \verbatim History: tmdlHdmiTx.c * * ***************** Version 1 ***************** * User: J. Lamotte Date: 10/08/07 Time: 10:00 * Updated in $/Source/tmdlHdmiTx/inc * initial version \endverbatim **//*============================================================================*//* INCLUDE FILES *//*============================================================================*/#include "tmdlHdmiTx_IW.h"#include "tmdlHdmiTx.h"#include "tmdlHdmiTx_local.h"#include "tmbslHdmiTx.h"#include "tmdlHdmiTx_cfg.h"/*============================================================================*//* TYPES DECLARATIONS *//*============================================================================*//* Macro to avoid compilation warnings */#ifdef TMFL_OS_WINDOWS#define DUMMY_ACCESS(x) x#else#define DUMMY_ACCESS(x)#endif/*============================================================================*//* CONSTANTS DECLARATIONS *//*============================================================================*//*============================================================================*//* FUNCTION PROTOTYPES *//*============================================================================*/extern tmErrorCode_t tmbslDebugWriteFakeRegPage( tmUnitSelect_t txUnit );/* Prototypes of internal functions *//* Task functions */static void CommandTaskUnit0(void);static void CommandTaskUnit1(void);static void HdcpTaskUnit0(void);static void HdcpTaskUnit1(void);/* Interrupt callback functions */static void dlHdmiTxHandleENCRYPT(tmInstance_t instance);static void dlHdmiTxHandleHPD(tmInstance_t instance);static void dlHdmiTxHandleT0(tmInstance_t instance);static void dlHdmiTxHandleBCAPS(tmInstance_t instance);static void dlHdmiTxHandleBSTATUS(tmInstance_t instance);static void dlHdmiTxHandleSHA_1(tmInstance_t instance);static void dlHdmiTxHandlePJ(tmInstance_t instance);static void dlHdmiTxHandleR0(tmInstance_t instance);static void dlHdmiTxHandleSW_INT(tmInstance_t instance);static void dlHdmiTxHandleRX_SENSE(tmInstance_t instance);static void dlHdmiTxHandleEDID_READ(tmInstance_t instance);static void dlHdmiTxHandleVS_RPT(tmInstance_t instance);/* Devlib internal color bar management functions */ static void dlHdmiTxCheckColorBar(tmInstance_t instance);static void dlHdmiTxCheckHdcpColorBar(tmInstance_t instance);#ifndef NO_HDCPstatic void dlHdmiTxFindHdcpSeed(tmInstance_t instance);#endif /* NO_HDCP *//* Set the state machine of device library */static void dlHdmiTxSetState( tmInstance_t instance, tmdlHdmiTxDriverState_t state);/* Get the event status (enable or disable) in order to known if event should be signaled */static tmdlHdmiTxEventStatus_t dlHdmiTxGetEventStatus( tmInstance_t instance, tmdlHdmiTxEvent_t event);/* Use by tmdlHdmiTxSetInputOutput in scaler mode */static Bool dlHdmiTxGetReflineRefpix( tmdlHdmiTxVidFmt_t vinFmt, tmdlHdmiTxVinMode_t vinMode, tmdlHdmiTxVidFmt_t voutFmt, UInt8 syncIn, tmdlHdmiTxPixRate_t pixRate, UInt16 *pRefPix, UInt16 *pRefLine, UInt16 *pScRefPix, UInt16 *pScRefLine, Bool *pbVerified);/* Use by tmdlHdmiTxSetInputOutput to set AVI infoframe */static tmErrorCode_t dlHdmiTxSetVideoInfoframe( tmInstance_t instance, tmdlHdmiTxVidFmt_t voutFmt, tmdlHdmiTxVoutMode_t voutMode);/* Get DTD from BSL */static tmErrorCode_t dlHdmiTxEdidGetDTD( tmInstance_t instance, tmdlHdmiTxEdidVideoTimings_t *pDTDescriptors, UInt8 maxDTDesc, UInt8 *pWrittenDTDesc);/* Convert DTD to CEA */static tmdlHdmiTxVidFmt_t dlHdmiTxConvertDTDtoCEA( tmdlHdmiTxEdidVideoTimings_t *pDTDescriptors);static tmdlHdmiTxVidFmt_t dlHdmiTxConvertDTDtoCEA_640HAP( tmdlHdmiTxEdidVideoTimings_t *pDTDescriptors);static tmdlHdmiTxVidFmt_t dlHdmiTxConvertDTDtoCEA_720HAP( tmdlHdmiTxEdidVideoTimings_t *pDTDescriptors, tmdlHdmiTxPictAspectRatio_t pictureAspectRatio);static tmdlHdmiTxVidFmt_t dlHdmiTxConvertDTDtoCEA_1280HAP( tmdlHdmiTxEdidVideoTimings_t *pDTDescriptors);static tmdlHdmiTxVidFmt_t dlHdmiTxConvertDTDtoCEA_1920HAP( tmdlHdmiTxEdidVideoTimings_t *pDTDescriptors, Bool formatInterlaced);static tmdlHdmiTxVidFmt_t dlHdmiTxConvertDTDtoCEA_1440HAP( tmdlHdmiTxEdidVideoTimings_t *pDTDescriptors, tmdlHdmiTxPictAspectRatio_t pictureAspectRatio, Bool formatInterlaced);static tmdlHdmiTxVidFmt_t dlHdmiTxConvertDTDtoCEA_2880HAP( tmdlHdmiTxEdidVideoTimings_t *pDTDescriptors, tmdlHdmiTxPictAspectRatio_t pictureAspectRatio, Bool formatInterlaced);static tmdlHdmiTxPictAspectRatio_t dlHdmiTxCalcAspectRatio ( UInt16 HImageSize, UInt16 VImageSize);/* IMPORTANT: The 3 functions define below should not be declared in static in order to allow applicative API to call them. Those functions are not in tmdlHdmiTx_Functions.h but are in tmdlHdmiTxCore.def *//* Get the device library state */tmdlHdmiTxDriverState_t dlHdmiTxGetState(tmInstance_t instance);/* Set pattern ON (Blue screen or color bar) */tmErrorCode_t dlHdmiTxSetTestPatternOn( tmInstance_t instance, tmdlHdmiTxVidFmt_t voutFmt, tmdlHdmiTxVoutMode_t voutMode, tmdlHdmiTxTestPattern_t pattern);/* Set pattern OFF */tmErrorCode_t dlHdmiTxSetTestPatternOff( tmInstance_t instance, tmdlHdmiTxVidFmt_t voutFmt, tmdlHdmiTxVoutMode_t voutMode);static void dlHdmiTxCheckHdcpBksv( tmInstance_t instance, UInt8 * pHdcpBksvTested, Bool * pbBksvSecure, Bool bBigEndian);/*============================================================================*//* VARIABLES DECLARATIONS *//*============================================================================*/tmdlHdmiTxIWSemHandle_t dlHdmiTxItSemaphore[MAX_UNITS];/* Unit configuration structure (device library system configuration) */unitConfig_t unitTableTx[MAX_UNITS] = { {False, False, (tmdlHdmiTxHdcpOptions_t)HDCP_OPT_DEFAULT, False, False, TMDL_HDMITX_DEVICE_UNKNOWN, 0, 0, (tmdlHdmiTxIWTaskHandle_t)0, (tmdlHdmiTxIWQueueHandle_t)0, (tmdlHdmiTxIWTaskHandle_t)0, STATE_NOT_INITIALIZED, (ptmdlHdmiTxCallback_t)0, Null, 0}, {False, False, (tmdlHdmiTxHdcpOptions_t)HDCP_OPT_DEFAULT, False, False, TMDL_HDMITX_DEVICE_UNKNOWN, 0, 0, (tmdlHdmiTxIWTaskHandle_t)0, (tmdlHdmiTxIWQueueHandle_t)0, (tmdlHdmiTxIWTaskHandle_t)0, STATE_NOT_INITIALIZED, (ptmdlHdmiTxCallback_t)0, Null, 0}};tmdlHdmiTxIWFuncPtr_t commandTaskTableTx[MAX_UNITS] = { CommandTaskUnit0, CommandTaskUnit1};tmdlHdmiTxIWFuncPtr_t hdcpTaskTableTx[MAX_UNITS] = { HdcpTaskUnit0, HdcpTaskUnit1};tmbslHdmiTxCallbackList_t callbackFuncTableTx;/* Device library configuration structure completed by tmdlHdmiTxCfgGetConfig with informations contained in config file */tmdlHdmiTxDriverConfigTable_t gtmdlHdmiTxDriverConfigTable[MAX_UNITS];/* Video info (see instanceStatusInfoTx) */tmdlHdmiTxVideoInfo_t videoInfoListTx = { False, {TMDL_HDMITX_VFMT_03_720x480p_60Hz, TMDL_HDMITX_VINMODE_YUV422, TMDL_HDMITX_SYNCSRC_EXT_VS, TMDL_HDMITX_PIXRATE_SINGLE}, {TMDL_HDMITX_VFMT_03_720x480p_60Hz, TMDL_HDMITX_VOUTMODE_YUV422, TMDL_HDMITX_COLORDEPTH_24}};/* Audio info (see instanceStatusInfoTx) */tmdlHdmiTxAudioInfo_t audioInfoListTx = { False, {TMDL_HDMITX_AFMT_SPDIF, TMDL_HDMITX_AFS_48K, TMDL_HDMITX_PIXRATE_SINGLE, TMDL_HDMITX_I2SFOR_PHILIPS_L,TMDL_HDMITX_I2SQ_16BITS,TMDL_HDMITX_DSTRATE_SINGLE,0x00} };/* Event state (see instanceStatusInfoTx) */tmdlHdmiTxEventState_t eventStateListTx[EVENT_NB] = { {TMDL_HDMITX_HDCP_ACTIVE, TMDL_HDMITX_EVENT_DISABLED}, {TMDL_HDMITX_HDCP_INACTIVE, TMDL_HDMITX_EVENT_DISABLED}, {TMDL_HDMITX_HPD_ACTIVE, TMDL_HDMITX_EVENT_DISABLED}, {TMDL_HDMITX_HPD_INACTIVE, TMDL_HDMITX_EVENT_DISABLED}, {TMDL_HDMITX_RX_KEYS_RECEIVED, TMDL_HDMITX_EVENT_DISABLED}, {TMDL_HDMITX_RX_DEVICE_ACTIVE, TMDL_HDMITX_EVENT_DISABLED}, {TMDL_HDMITX_RX_DEVICE_INACTIVE, TMDL_HDMITX_EVENT_DISABLED}, {TMDL_HDMITX_EDID_RECEIVED, TMDL_HDMITX_EVENT_DISABLED}, {TMDL_HDMITX_VS_RPT_RECEIVED, TMDL_HDMITX_EVENT_DISABLED}};/* Color bars state (see instanceStatusInfoTx) */tmdlHdmiTxColBarState_t colorBarStateTx = { False, True, True, False, False, True, False};/* Instance status (save the actual configuration) */instanceStatus_t instanceStatusInfoTx[MAX_UNITS] = { &videoInfoListTx, &audioInfoListTx, eventStateListTx, &colorBarStateTx, 0};/* HDCP seed table, arranged as pairs of 16-bit integers: lookup value, seed value. * If no table is programmed and if KEY_SEED in config file is null, HDCP will be disabled */#define SEED_TABLE_LEN 10static const UInt16 kSeedTable[SEED_TABLE_LEN][2] = { {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}};#ifndef NO_HDCPtmdlHdmiTxHdcpInfo_t hdcpInfoListTx[MAX_UNITS];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -