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

📄 dp_api_command_functions.c

📁 Lido PXA270平台开发板的最新BSP,包括源代码
💻 C
📖 第 1 页 / 共 5 页
字号:

	#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 + -