📄 dp_api_command_functions.c
字号:
#if defined DP_ERROR_CHECKING
if ( ui16CommandResult == DP_STANDARD_CODE_NO_ERROR )
{
#else
if (( ui16CommandResult > DP_CRITICAL_ERROR_END_MARKER ) || ( ui16CommandResult == DP_STANDARD_CODE_NO_ERROR ))
{
#endif
ui16CommandResult = DP_CommandSequence ( DP_COMMAND_SEQUENCE_OPERATIONS_ADD_COMMAND,
(DP_FieldTarget *) &DP_asGlobalFieldTargets [DP_GLOBAL_FIELD_TIMING_HORIZONTAL_FRONT_PORCH_START],
(DP_UINT_32) sInitialisationData.sTimingSettings.ui16HFPS );
}
/* Duplicate the Front porch into the horizontal display enable finish */
#if defined DP_ERROR_CHECKING
if ( ui16CommandResult == DP_STANDARD_CODE_NO_ERROR )
{
#else
if (( ui16CommandResult > DP_CRITICAL_ERROR_END_MARKER ) || ( ui16CommandResult == DP_STANDARD_CODE_NO_ERROR ))
{
#endif
ui16CommandResult = DP_CommandSequence ( DP_COMMAND_SEQUENCE_OPERATIONS_ADD_COMMAND,
(DP_FieldTarget *) &DP_asGlobalFieldTargets [DP_GLOBAL_FIELD_TIMING_HORIZONTAL_DISPLAYENABLE_FINISH],
(DP_UINT_32) sInitialisationData.sTimingSettings.ui16HFPS );
}
#if defined DP_ERROR_CHECKING
if ( ui16CommandResult == DP_STANDARD_CODE_NO_ERROR )
{
#else
if (( ui16CommandResult > DP_CRITICAL_ERROR_END_MARKER ) || ( ui16CommandResult == DP_STANDARD_CODE_NO_ERROR ))
{
#endif
ui16CommandResult = DP_CommandSequence ( DP_COMMAND_SEQUENCE_OPERATIONS_ADD_COMMAND,
(DP_FieldTarget *) &DP_asGlobalFieldTargets [DP_GLOBAL_FIELD_TIMING_HORIZONTAL_BACK_PORCH_START],
(DP_UINT_32) sInitialisationData.sTimingSettings.ui16HBPS );
}
#if defined DP_ERROR_CHECKING
if ( ui16CommandResult == DP_STANDARD_CODE_NO_ERROR )
{
#else
if (( ui16CommandResult > DP_CRITICAL_ERROR_END_MARKER ) || ( ui16CommandResult == DP_STANDARD_CODE_NO_ERROR ))
{
#endif
ui16CommandResult = DP_CommandSequence ( DP_COMMAND_SEQUENCE_OPERATIONS_ADD_COMMAND,
(DP_FieldTarget *) &DP_asGlobalFieldTargets [DP_GLOBAL_FIELD_TIMING_HORIZONTAL_ACTIVE_START],
(DP_UINT_32) sInitialisationData.sTimingSettings.ui16HAS );
}
#if defined DP_ERROR_CHECKING
if ( ui16CommandResult == DP_STANDARD_CODE_NO_ERROR )
{
#else
if (( ui16CommandResult > DP_CRITICAL_ERROR_END_MARKER ) || ( ui16CommandResult == DP_STANDARD_CODE_NO_ERROR ))
{
#endif
ui16CommandResult = DP_CommandSequence ( DP_COMMAND_SEQUENCE_OPERATIONS_ADD_COMMAND,
(DP_FieldTarget *) &DP_asGlobalFieldTargets [DP_GLOBAL_FIELD_TIMING_HORIZONTAL_LEFT_BORDER_START],
(DP_UINT_32) sInitialisationData.sTimingSettings.ui16HLBS );
}
/* Duplicate the Left border into the Horizontal display eneable start */
#if defined DP_ERROR_CHECKING
if ( ui16CommandResult == DP_STANDARD_CODE_NO_ERROR )
{
#else
if (( ui16CommandResult > DP_CRITICAL_ERROR_END_MARKER ) || ( ui16CommandResult == DP_STANDARD_CODE_NO_ERROR ))
{
#endif
ui16CommandResult = DP_CommandSequence ( DP_COMMAND_SEQUENCE_OPERATIONS_ADD_COMMAND,
(DP_FieldTarget *) &DP_asGlobalFieldTargets [DP_GLOBAL_FIELD_TIMING_HORIZONTAL_DISPLAYENABLE_START],
(DP_UINT_32) sInitialisationData.sTimingSettings.ui16HLBS );
}
#if defined DP_ERROR_CHECKING
if ( ui16CommandResult == DP_STANDARD_CODE_NO_ERROR )
{
#else
if (( ui16CommandResult > DP_CRITICAL_ERROR_END_MARKER ) || ( ui16CommandResult == DP_STANDARD_CODE_NO_ERROR ))
{
#endif
ui16CommandResult = DP_CommandSequence ( DP_COMMAND_SEQUENCE_OPERATIONS_ADD_COMMAND,
(DP_FieldTarget *) &DP_asGlobalFieldTargets [DP_GLOBAL_FIELD_TIMING_HORIZONTAL_RIGHT_BORDER_START],
(DP_UINT_32) sInitialisationData.sTimingSettings.ui16HRBS );
}
DP_CommandSequence ( DP_COMMAND_SEQUENCE_OPERATIONS_SEND_IMMEDIATE,
DP_NULL,
DP_NULL );
/* Now enable the sync. generator, but power down memory fetches */
DP_SetDisplayEnabled ( DP_DISPLAY_PARTIALLY_POWERED_DOWN );
ui8CurrentDrawOrderCount = 0;
for ( ui16i = 0; ui16i < DP_NO_OF_STREAMS; ui16i ++ )
{
/* Disable all streams */
if ( DP_asStreamCapabilities [ ui16i ].eSlaveModeSupported != DP_SLAVE_MODE_IS_SLAVE_PLANE )
{
/* Slave planes are turned on and off with their associated master plane */
/* Don't check for errors here - if there is no slave plane to turn off, then it */
/* doesn't matter - we're only trying to turn off those that do exist. */
ui16CommandResult = DP_CommandSequence ( DP_COMMAND_SEQUENCE_OPERATIONS_ADD_COMMAND,
(DP_FieldTarget *) &DP_asStreamFieldTargets [ui16i][DP_STREAM_SPECIFIC_FIELD_PLANE_VISIBLE],
(DP_UINT_32) 0x0 );
/* Ensure that all planes occupy a unique position within the draw ordering */
if ( DP_asStreamFieldTargets [ ui16i ][DP_STREAM_SPECIFIC_FIELD_DRAW_ORDER_POSITION].ui32TargetAddressOffset != DP_NO_REG )
{
if ( DP_CommandSequence ( DP_COMMAND_SEQUENCE_OPERATIONS_ADD_COMMAND,
(DP_FieldTarget *) &DP_asStreamFieldTargets [ ui16i ][DP_STREAM_SPECIFIC_FIELD_DRAW_ORDER_POSITION],
(DP_UINT_32) ui8CurrentDrawOrderCount ) != DP_ERR_EXCEEDS_CAPABILITIES )
ui8CurrentDrawOrderCount ++;
}
}
/* Hardware specific setting */
ui16CommandResult = DP_CommandSequence ( DP_COMMAND_SEQUENCE_OPERATIONS_ADD_COMMAND,
(DP_FieldTarget *) &DP_asStreamFieldTargets [ui16i][DP_STREAM_SPECIFIC_FIELD_VIDEO_SCALER_HORIZONTAL_INITIAL_POSITION],
(DP_UINT_32) (DP_SCALER_INITIAL_HORIZONTAL_POSITION * 2048) );
}
DP_CommandSequence ( DP_COMMAND_SEQUENCE_OPERATIONS_SEND_IMMEDIATE,
DP_NULL,
DP_NULL );
DP_ui16ActualDisplayHeight = sInitialisationData.sTimingSettings.ui16VBBS -
sInitialisationData.sTimingSettings.ui16VAS;
DP_ui16DisplayWidth = sInitialisationData.sTimingSettings.ui16HRBS -
sInitialisationData.sTimingSettings.ui16HAS;
if ( sInitialisationData.bInterlaceOn )
DP_ui16DisplayHeight = DP_ui16ActualDisplayHeight * 2;
else
DP_ui16DisplayHeight = DP_ui16ActualDisplayHeight;
/*
// This should not be necessary as timing handed into this function should reflect a single
// field.
if ( sInitialisationData.bInterlaceOn )
DP_ui16ActualDisplayHeight = DP_ui16DisplayHeight / 2;
else
DP_ui16ActualDisplayHeight = DP_ui16DisplayHeight;
*/
DP_bIsPipelineInitialised = DP_TRUE;
/* Set a known default state for each stream. */
/* Again - don't check for errors here, just trying to set up those fields which do exist. */
DP_SetDisplayEnabled ( DP_DISPLAY_FULLY_POWERED_DOWN );
for ( ui16i = 0; ui16i < DP_NO_OF_STREAMS; ui16i ++ )
{
/* Source and destination heights are actual to start with - we assume no interlaced */
/* fields. */
DP_pCurrentScalerModifier [ ui16i ] = (DP_pScalerModifier) &(DP_ScalerModifiersTable [ (DP_FALSE & 0x01) ]
[ DP_SOURCE_DATA_TYPE_PROGRESSIVE ]
[ (sInitialisationData.bInterlaceOn & 0x01) ]
[ (DP_FALSE & 0x01) ] );
DP_SetSourceAddress ( ui16i,
DP_YUV_Y_OR_SOLE_RGB,
(DP_PVOID) 0x00000000,
(DP_UINT_16) ( ( DP_FRAME_DEFAULT_WIDTH * DP_aui8BytesPerPixel [ DP_FRAME_DEFAULT_PIXEL_COLOUR_FORMAT ] ) / 16 ),
DP_FALSE,
DP_SOURCE_DATA_TYPE_PROGRESSIVE );
DP_SetSourceImageSize ( ui16i, DP_FRAME_DEFAULT_WIDTH, DP_FRAME_DEFAULT_HEIGHT );
DP_SetSourceFramePosition ( ui16i, 0, 0 );
DP_SetDestinationFramePosition ( ui16i, 0, 0 );
DP_SetDestinationFrameSize ( ui16i, DP_FRAME_DEFAULT_WIDTH, DP_FRAME_DEFAULT_HEIGHT );
DP_SetSourceFrameSize ( ui16i, DP_FRAME_DEFAULT_WIDTH, DP_FRAME_DEFAULT_HEIGHT );
DP_SetAlphaBlendMode ( ui16i, DP_ALPHA_BLEND_MODE_NO_ALPHA, DP_NULL );
DP_SetBlinking ( ui16i, DP_FALSE, DP_NULL );
// DP_SetColourSpaceConversion ( ui16i, DP_FALSE, DP_COLOUR_SPACE_CONVERSION_MODE_SDTV );
DP_SetColourSpaceConversion ( ui16i, DP_TRUE, DP_COLOUR_SPACE_CONVERSION_MODE_SDTV );
DP_SetGraphicsWrapping ( ui16i, DP_FALSE );
DP_SetPaletteEnable ( ui16i, DP_FALSE );
DP_SetPixelColourFormat ( ui16i, DP_FRAME_DEFAULT_PIXEL_COLOUR_FORMAT, DP_FALSE );
DP_SetSlavePlaneEnable ( ui16i, DP_FALSE, DP_NULL );
DP_SetColourKeyMode ( ui16i, DP_FALSE, DP_TRUE, 0x00000000, 0x00000000 );
DP_SourceFrameSizeSet [ ui16i ] = DP_FALSE;
DP_DestinationFrameSizeSet [ ui16i ] = DP_FALSE;
DP_ExternalInterlacedFields [ ui16i ] = DP_FALSE;
DP_IsPlaneBeingScaled [ ui16i ] = DP_FALSE;
DP_SetExternalAccess ( ui16i, DP_FALSE, DP_FALSE, DP_FALSE );
}
#if defined DP_ERROR_CHECKING
if ( ui16CommandResult != DP_STANDARD_CODE_NO_ERROR )
{
#else
if (( ui16CommandResult < DP_CRITICAL_ERROR_END_MARKER ) && ( ui16CommandResult != DP_STANDARD_CODE_NO_ERROR ))
{
#endif
ui16ReturnValue = ui16CommandResult;
}
#if defined DP_SIMULATION_MODE
sprintf ( &ai8DumpComment[0], "DP_InitialiseDisplay returns %01i\n", ui16ReturnValue );
printf ( ai8DumpComment );
PDumpComment( ai8DumpComment );
#endif
return ui16ReturnValue;
}
/***********************************************************************************************
*
* Function Name : DP_SetDisplayEnabled
* Inputs : eDisplayActive - An enumerated type specifying whether the PDP is
* fully powered off, in power save mode, or enabled.
* Outputs : None.
* Returns : DP_UINT_16 - Returns one of the defined display pipeline error
* codes, according to the success of the function and
* whether the compiler directive DP_ERROR_CHECKING
* is enabled. See API specification for more details
* on error types.
*
* Description : This function is used to turn the main (output) frame on and off. The output
* is turned off by default and should not be turned on until a meaningful
* output has been configured.
*
***********************************************************************************************/
DP_UINT_16 DP_SetDisplayEnabled ( DP_DisplayActiveSettings eDisplayActive )
{
#if defined DP_ERROR_CHECKING
DP_UINT_16 ui16ReturnValue = DP_STANDARD_CODE_NO_ERROR;
#else
DP_UINT_16 ui16ReturnValue = DP_ERR_NO_ERROR_CHECKING;
#endif
DP_UINT_16 ui16CommandResult;
#if defined DP_SIMULATION_MODE
static DP_BOOL abSuccessfullyExecuted [ DP_NO_OF_STREAMS ] = {0};
sprintf ( &ai8DumpComment[0], "DP_SetDisplayEnabled Active setting : %i \n", eDisplayActive );
printf ( ai8DumpComment );
PDumpComment( ai8DumpComment );
#endif
#if defined DP_ERROR_CHECKING
if ( ( !DP_bIsPipelineInitialised ) && ( eDisplayActive == DP_DISPLAY_ENABLED ) )
ui16ReturnValue = DP_ERR_NOT_INITIALISED;
/* else if.... (other tests here) */
if ( ui16ReturnValue == DP_STANDARD_CODE_NO_ERROR)
{
#endif
DP_CommandSequence ( DP_COMMAND_SEQUENCE_OPERATIONS_NEW_SEQUENCE,
DP_NULL,
DP_NULL );
switch ( eDisplayActive )
{
case DP_DISPLAY_FULLY_POWERED_DOWN:
ui16CommandResult = DP_CommandSequence ( DP_COMMAND_SEQUENCE_OPERATIONS_ADD_COMMAND,
(DP_FieldTarget *) &DP_asGlobalFieldTargets [DP_GLOBAL_FIELD_CONTROL_SYNC_ACTIVE],
(DP_UINT_32) ( DP_FALSE & 0x01 ) );
if ( ui16CommandResult == DP_STANDARD_CODE_NO_ERROR )
{
ui16CommandResult = DP_CommandSequence ( DP_COMMAND_SEQUENCE_OPERATIONS_ADD_COMMAND,
(DP_FieldTarget *) &DP_asGlobalFieldTargets [DP_GLOBAL_FIELD_CONTROL_POWER_DOWN_MODE],
(DP_UINT_32) ( DP_TRUE & 0x01 ) );
}
break;
case DP_DISPLAY_PARTIALLY_POWERED_DOWN:
ui16CommandResult = DP_CommandSequence ( DP_COMMAND_SEQUENCE_OPERATIONS_ADD_COMMAND,
(DP_FieldTarget *) &DP_asGlobalFieldTargets [DP_GLOBAL_FIELD_CONTROL_SYNC_ACTIVE],
(DP_UINT_32) ( DP_TRUE & 0x01 ) );
if ( ui16CommandResult == DP_STANDARD_CODE_NO_ERROR )
{
ui16CommandResult = DP_CommandSequence ( DP_COMMAND_SEQUENCE_OPERATIONS_ADD_COMMAND,
(DP_FieldTarget *) &DP_asGlobalFieldTargets [DP_GLOBAL_FIELD_CONTROL_POWER_DOWN_MODE],
(DP_UINT_32) ( DP_TRUE & 0x01 ) );
}
break;
case DP_DISPLAY_ENABLED:
ui16CommandResult = DP_CommandSequence ( DP_COMMAND_SEQUENCE_OPERATIONS_ADD_COMMAND,
(DP_FieldTarget *) &DP_asGlobalFieldTargets [DP_GLOBAL_FIELD_CONTROL_SYNC_ACTIVE],
(DP_UINT_32) ( DP_TRUE & 0x01 ) );
if ( ui16CommandResult == DP_STANDARD_CODE_NO_ERROR )
{
ui16CommandResult = DP_CommandSequence ( DP_COMMAND_SEQUENCE_OPERATIONS_ADD_COMMAND,
(DP_FieldTarget *) &DP_asGlobalFieldTargets [DP_GLOBAL_FIELD_CONTROL_POWER_DOWN_MODE],
(DP_UINT_32) ( DP_FALSE & 0x01 ) );
}
break;
default:
ui16CommandResult = DP_ERR_UNKNOWN_MODE;
break;
}
if ( ui16CommandResult == DP_STANDARD_CODE_NO_ERROR )
{
ui16CommandResult = DP_CommandSequence ( DP_COMMAND_SEQUENCE_OPERATIONS_SEND_IMMEDIATE,
DP_NULL,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -