📄 main.c
字号:
/*******************************************************************************
File name : main.c
Description : Main entry point
COPYRIGHT (C) STMicroelectronics 2005.
*******************************************************************************/
/* Includes ----------------------------------------------------------------- */
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#include "stddefs.h"
#include "stlite.h"
#include "stdevice.h"
#include "stcommon.h"
#include "statapi.h"
#include "stavmem.h"
#include "stboot.h"
#include "stdenc.h"
#include "stevt.h"
#include "stmerge.h"
#include "stpccrd.h"
#include "stpod.h"
#include "stsmart.h"
#include "stsys.h"
#include "sttbx.h"
#include "stttx.h"
#include "testtool.h"
#include "sections.h"
#include "debug.h"
#include "irblast.h"
#include "filter.h"
#include "lists.h"
#if defined(TESTTOOL)
#include "../../../src/dumpreg/reg_name/ckg_treg.h"
#include "../../../src/dumpreg/reg_name/audio_treg.h"
#include "../../../src/dumpreg/reg_name/gamma_treg.h"
#include "../../../src/dumpreg/reg_name/vos_treg.h"
/*#include "../../../src/dumpreg/reg_name/sdin_treg.h"*/
#include "../../../src/dumpreg/reg_name/video_treg.h"
#include "../../../src/dumpreg/reg_name/hdcp_treg.h"
#include "../../../src/dumpreg/reg_name/hdmi_treg.h"
/*#include "../../../src/dumpreg/reg_name/hddi_treg.h"*/
#include "../../../src/dumpreg/reg_name/dvp_treg.h"
/* #include "../../../src/dumpreg/reg_name/i2c_treg.h"*/
#include "../../../src/dumpreg/reg_name/ir_blaster_treg.h"
#include "../../../src/dumpreg/reg_name/lpm_treg.h"
#include "../../../src/dumpreg/reg_name/maf_treg.h"
#include "../../../src/dumpreg/reg_name/pwm_treg.h"
#include "../../../src/dumpreg/reg_name/smart_treg.h"
#include "../../../src/dumpreg/reg_name/uart_treg.h"
#include "../../../src/dumpreg/reg_name/pio_treg.h"
#endif
/* GLOBAL_DATA is set only one time here to define some global data */
#define GLOBAL_DATA
#include "app_data.h"
#include "pio.h"
#include "aud.h"
#include "blit.h"
#include "gxobj.h"
#include "evt.h"
#include "evt.h"
#include "i2c.h"
#include "tsmerge.h"
#include "fdma.h"
#include "st_pti.h"
#include "uart.h"
#include "tbx.h"
#include "gutil.h"
#include "generic.h"
#include "vid.h"
#ifdef TRACE_UART
#include "trace.h"
#endif
/* Definitions -------------------------------------------------------------- */
#define __FRONTEND "STi7710"
#define __BACKEND "STi7710"
#define __PLATFORM "MB391"
#ifdef TRACE_UART
extern STUART_Handle_t TraceUartHandle;
#endif
#if 0 // EXT_SHARE
/* ICACHE & DCACHE are configured by makefile (Enabled if DEBUG set) */
STBOOT_DCache_Area_t DCacheMap[] = {
#ifdef DCACHE_ENABLE
{ (U32 *)FLASH_BANK_0_BASE_ADDRESS, (U32*)(FLASH_BANK_0_BASE_ADDRESS+0x7FFFFF) },
#if defined(CACHEABLE_BASE_ADDRESS)
{ (U32 *)CACHEABLE_BASE_ADDRESS, (U32 *)CACHEABLE_STOP_ADDRESS },
#endif
#endif
{ NULL, NULL }
};
#endif
static U32 ClockFrequency = 0;
#if 1 // EXT_SHARE
extern ST_ClockInfo_t ST_ClockInfo;//temp
#else
ST_ClockInfo_t ST_ClockInfo;
ST_DeviceName_t FDMA_DeviceName[FDMA_INST] = {"FDMA0"};
#endif
ST_DeviceName_t EVT_DeviceName[] = {"EVT_BACK"};
/* Our Video, Gfx & Audio sources could be placed at different locations */
/* so we introduce a $REF parameter which would be replaced by the DVD_REF */
/* define value (this value is set at compile time). */
char STDM_ReferencePath[255];
/* Functions prototypes ----------------------------------------------------- */
/* Extern Functions prototypes ---------------------------------------------- */
/* Extern Revision functions, defined here to avoid a lot of include */
extern ST_Revision_t STATAPI_GetRevision(void);
extern ST_Revision_t STAUD_GetRevision(void);
extern ST_Revision_t STAVMEM_GetRevision(void);
extern ST_Revision_t STBLAST_GetRevision(void);
extern ST_Revision_t STBLIT_GetRevision(void);
extern ST_Revision_t STBOOT_GetRevision(void);
extern ST_Revision_t STCC_GetRevision(void);
extern ST_Revision_t STCLKRV_GetRevision(void);
extern ST_Revision_t STDENC_GetRevision(void);
extern ST_Revision_t STEVT_GetRevision(void);
extern ST_Revision_t STFDMA_GetRevision(void);
extern ST_Revision_t STFLASH_GetRevision(void);
extern ST_Revision_t STGXOBJ_GetRevision(void);
extern ST_Revision_t STHDMI_GetRevision(void);
extern ST_Revision_t STI2C_GetRevision(void);
extern ST_Revision_t STLAYER_GetRevision(void);
extern ST_Revision_t STMERGE_GetRevision(void);
extern ST_Revision_t STOS_GetRevision(void);
extern ST_Revision_t STPCCRD_GetRevision(void);
extern ST_Revision_t STPIO_GetRevision(void);
extern ST_Revision_t STPOD_GetRevision(void);
extern ST_Revision_t STPTI_GetRevision(void);
extern ST_Revision_t STSMART_GetRevision(void);
extern ST_Revision_t STTBX_GetRevision(void);
extern ST_Revision_t STTST_GetRevision(void);
extern ST_Revision_t STTTX_GetRevision(void);
extern ST_Revision_t STTUNER_GetRevision(void);
extern ST_Revision_t STUART_GetRevision(void);
extern ST_Revision_t STVBI_GetRevision(void);
extern ST_Revision_t STVID_GetRevision(void);
extern ST_Revision_t STVIN_GetRevision(void);
extern ST_Revision_t STVMIX_GetRevision(void);
extern ST_Revision_t STVOUT_GetRevision(void);
extern ST_Revision_t STVTG_GetRevision(void);
extern BOOL API_InitCommand(void);
extern BOOL DENC_InitCommand(void);
extern BOOL GENERIC_InitCommand(void);
extern BOOL VTG_InitCommand(void);
extern BOOL VOUT_InitCommand(void);
extern BOOL LAYER_InitCommand(void);
extern BOOL VMIX_InitCommand(void);
extern BOOL VID_InitCommand(void);
extern BOOL CLKRV_InitCommand(void);
extern BOOL DISP_InitCommand(void);
extern BOOL I2C_InitCommand(void);
extern BOOL VIN_InitCommand(void);
extern BOOL HDMI_InitCommand(void);
extern BOOL VBI_InitCommand(void);
#if defined(ST_PSIP)
extern BOOL Register_ZPSIPCommands( void );
#endif
extern ST_ErrorCode_t TestApplication(void);
/* Functions ---------------------------------------------------------------- */
/*------------------------------------------------------------------------------
* Function : AVMEM_Init
* AVMEM Init & Open functions
* Input : None
* Output :
* Return : Error Code
* -------------------------------------------------------------------------- */
#if 0// EXT_SHARE
static ST_ErrorCode_t AVMEM_Init( void )
{
ST_ErrorCode_t ErrCode;
STAVMEM_InitParams_t InitAvmem;
STAVMEM_SharedMemoryVirtualMapping_t VirtualMapping;
STAVMEM_MemoryRange_t WorkIn[1];
STAVMEM_CreatePartitionParams_t CreateParams;
/* Virtual memory configuration */
VirtualMapping.PhysicalAddressSeenFromCPU_p = (void *) AVMEM_BASE_ADDRESS;
VirtualMapping.PhysicalAddressSeenFromDevice_p = (void *) AVMEM_BASE_ADDRESS;
VirtualMapping.PhysicalAddressSeenFromDevice2_p = (void *) AVMEM_BASE_ADDRESS;
VirtualMapping.VirtualBaseAddress_p = (void *) AVMEM_BASE_ADDRESS;
VirtualMapping.VirtualSize = AVMEM_SIZE;
VirtualMapping.VirtualWindowOffset = 0;
VirtualMapping.VirtualWindowSize = AVMEM_SIZE;
/* Setup initialisation parameters */
/* Note : Max block should be optimized. Use old working values ... */
InitAvmem.DeviceType = STAVMEM_DEVICE_TYPE_VIRTUAL;
InitAvmem.CPUPartition_p = SystemPartition;
InitAvmem.NCachePartition_p = NcachePartition;
InitAvmem.MaxPartitions = 1;
InitAvmem.MaxBlocks = 58; /* video: 1 bits buffer + 4 frame buffers
tests video: 2 dest buffer
audio: 1 bits buffer
graphics : 50 */
InitAvmem.MaxNumberOfMemoryMapRanges = 1; /* because each partition has a single range here */
InitAvmem.MaxForbiddenRanges = 3;
InitAvmem.MaxForbiddenBorders = 3; /* video will use one forbidden border*/
/* Memory map range is the whole SDRAM DDR */
InitAvmem.MaxNumberOfMemoryMapRanges = 1;
CreateParams.PartitionRanges_p = &WorkIn[0];
CreateParams.NumberOfPartitionRanges = 1;
WorkIn[0].StartAddr_p = (void *)(AVMEM_BASE_ADDRESS);
WorkIn[0].StopAddr_p = (void *)(AVMEM_BASE_ADDRESS + AVMEM_SIZE - 1);
InitAvmem.OptimisedMemAccessStrategy_p = NULL; /* No optimised access */
InitAvmem.BlockMoveDmaBaseAddr_p = NULL;
InitAvmem.CacheBaseAddr_p = (void *)CACHE_BASE_ADDRESS;
InitAvmem.VideoBaseAddr_p = (void *)VIDEO_BASE_ADDRESS; /*NULL*/ /* No DMA Block Mode */;
InitAvmem.SharedMemoryVirtualMapping_p = &VirtualMapping;
/* Useless since the virtual memory use */
InitAvmem.SDRAMBaseAddr_p = (void *)AVMEM_BASE_ADDRESS;;
InitAvmem.SDRAMSize = AVMEM_SIZE;
InitAvmem.DCachedRanges_p = (STAVMEM_MemoryRange_t *) DCacheMap;
InitAvmem.NumberOfDCachedRanges = (sizeof(DCacheMap) / sizeof(STBOOT_DCache_Area_t)) - 1;
/* Now initialise AVMEM and open a handle */
ErrCode = STAVMEM_Init(AVMEMDeviceName, &InitAvmem);
if (ErrCode != ST_NO_ERROR)
{
STTBX_Report((STTBX_REPORT_LEVEL_ERROR, "STAVMEM_Init()=%s",
GetErrorText(ErrCode)));
}
else
{
STTBX_Report((STTBX_REPORT_LEVEL_INFO, "STAVMEM_Init()=%s",
GetErrorText(ErrCode)));
/* Create a partition */
ErrCode = STAVMEM_CreatePartition(AVMEMDeviceName, &CreateParams,
&AvmemPartition);
if (ErrCode != ST_NO_ERROR)
{
STTBX_Report((STTBX_REPORT_LEVEL_ERROR, "STAVMEM_CreatePartition()=%s",
GetErrorText(ErrCode)));
}
else
{
STTBX_Report((STTBX_REPORT_LEVEL_INFO, "STAVMEM_CreatePartition()=%s",
GetErrorText(ErrCode)));
}
}
return ( ErrCode );
} /* AVMEM_Init () */
ST_ErrorCode_t BOOT_Init(void)
{
ST_ErrorCode_t Error;
STBOOT_InitParams_t stboot_InitParams;
/* Initialize stboot */
#ifndef ICACHE_ENABLE
stboot_InitParams.ICacheEnabled = FALSE;
#else
stboot_InitParams.ICacheEnabled = TRUE;
#endif
#ifndef DCACHE_ENABLE
stboot_InitParams.DCacheMap = NULL;
#else
stboot_InitParams.DCacheMap = DCacheMap;
#endif
stboot_InitParams.BackendType.DeviceType = STBOOT_DEVICE_UNKNOWN;
stboot_InitParams.BackendType.MajorRevision = STBOOT_REVISION_UNKNOWN;
stboot_InitParams.BackendType.MinorRevision = STBOOT_REVISION_UNKNOWN;
stboot_InitParams.CacheBaseAddress = (U32 *)CACHE_BASE_ADDRESS;
stboot_InitParams.MemorySize = (STBOOT_DramMemorySize_t)SDRAM_SIZE;
stboot_InitParams.SDRAMFrequency = SDRAM_FREQUENCY;
/* Initialize the boot driver */
Error = STBOOT_Init( "STBOOT:0", &stboot_InitParams );
if( ST_NO_ERROR != Error)
{
/*STTBX is not initialized*/
printf("BOOT ERROR\n");
}
LOCAL_PRINT(("STBOOT_Init()=%s\n",GetErrorText(Error)));
return Error;
} /* BOOT_Setup() */
/*-------------------------------------------------------------------------
* Function : FDMA_Setup
* Input : None
* Output :
* Return : Error Code
* ----------------------------------------------------------------------*/
ST_ErrorCode_t FDMA_Init(void)
{
ST_ErrorCode_t ST_ErrorCode;
STFDMA_InitParams_t STFDMA_InitParams;
int Instance;
for ( Instance = 0; Instance < FDMA_INST; Instance++ )
{
STFDMA_InitParams.DeviceType = FDMA_DEVICE_TYPE;
STFDMA_InitParams.DriverPartition_p = SystemPartition;
STFDMA_InitParams.NCachePartition_p = NcachePartition;
STFDMA_InitParams.BaseAddress_p = (void *)FDMA_BASE_ADDRESS;
STFDMA_InitParams.InterruptNumber = FDMA_INTERRUPT;
STFDMA_InitParams.InterruptLevel = 14;
STFDMA_InitParams.NumberCallbackTasks = 0;
STFDMA_InitParams.ClockTicksPerSecond = ST_GetClocksPerSecond();
STFDMA_InitParams.FDMABlock = STFDMA_1; /* comes with STFDMA2.0.0*/
ST_ErrorCode = STFDMA_Init(FDMA_DeviceName[Instance], &STFDMA_InitParams);
LOCAL_PRINT(("STFDMA_Init()=%s\n",GetErrorText(ST_ErrorCode)));
} /* for(Instance) */
return( ST_ErrorCode );
}
#endif
/*-----------------------------------------------------------------------------
* Function : SetRefPath
* Set ReferencePath value from DVD_REF define
* DVD_REF is used to store path to test database : Audio/Video/Graphics
* Input :
* Output :
* Return : 0 if no error, 1 on error
* -------------------------------------------------------------------------- */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -