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

📄 root.c

📁 EMU_FTAbox_ref441328_code_source ali m3327
💻 C
📖 第 1 页 / 共 2 页
字号:
/*****************************************************************************
*	Copyrights(C) 2003 Acer Laboratries Inc. All Rights Reserved.
*
*	FILE NAME:		root.c
*
*	DESCRIPTION:	 This file contains application's root function - AppInit().
*				 It inits all modules used in the application and creates all the tasks
*				used. It also send a command to play the current tv program.
*
*
*	HISTORY:
*		Date 		Author 		Version 	Notes
*		=========	=========	=========	=========
*		2003-04-19	Xianyu Nie	Ver 0.1		Create File
*		..............	......	.		....			.....
*		2004-11-11 	Xionghua		Ver 0.2		modify for m3327
*****************************************************************************/

#include <sys_config.h>
#include <basic_types.h>
#include <mediatypes.h>
#include <os/tds2/itron.h>
#include <api/libc/printf.h>
#include <osal/osal_timer.h>
#include "control.h"

#include <api/libc/printf.h>
#include <api/libc/string.h>
#include <api/libchunk/chunk.h>
#include <osal/osal.h>
#include <hal/hal_mem.h>
#include <hal/hal_gpio.h>
#include <bus/i2c/i2c.h>
#include <bus/sci/sci.h>
#include <bus/tsi/tsi.h>
#include <hld/pan/pan.h>
#include <hld/pan/pan_key.h>
#include <hld/sto/sto.h>
#include <hld/sto/sto_dev.h>

#include <hld/dmx/dmx_dev.h>
#include <hld/hld_dev.h>
#include <hld/deca/deca_dev.h>
#include <hld/deca/deca.h>
#include <hld/snd/snd_dev.h>
#include <hld/snd/snd.h>
#include <hld/dis/vpo.h>
#include <hld/decv/vdec_driver.h>
#include <hld/dmx/dmx.h>

#include <api/libpub27/lib_pub27.h>

#include <api/libpub27/lib_as.h>
#include <api/libtsi/db_3l.h>
#include <api/libnim/lib_nim.h>
#include <api/libtsi/sec_tdt2.h>
#include <hld/nim/Nim_tuner.h>
#ifdef RECORD_SUPPORT
#include <api/libfs/block_dev.h>
#endif

#ifdef _Patch
#include "cas_api.h"
#endif

#if (TTX_ON == 1)
#include <hld/vbi/vbi.h>
//#include <hld/ttx/ttx.h>
#endif

#include <sys_parameters.h>
#include "system_data.h"
unsigned short blogo_switch=0;
unsigned short blogo_tvformat=0;
unsigned short blogo_height=0;
extern SYSTEM_DATA system_config;
extern enum Output_Frame_Ret_Code VDec_Output_Frame(struct Display_Info *pDisplay_info);
	

extern BOOL VDec_Release_FrBuf(UINT8 top_index, UINT8 bottom_index);

struct deca_device * gpdeca = NULL;
struct dmx_device * gpdmx = NULL;
struct snd_device * gpsnd = NULL;
struct vpo_device *gpvpo = NULL;
struct vdec_device *gpdecv = NULL;

struct pan_hw_info pan_hw_info =
 {
      0,                      /* type_kb : 2; Key board (array) type */
      0,                      /* type_scan : 1; 0: Slot scan, 1: Shadow
scan */
      1,                      /* type_key: 1; Key exit or not */
      1,                      /* type_irp: 3; 0: not IRP, 1: NEC, 2: LAB */
      0,                      /* type_mcu: 1; MCU exit or not */
#ifdef _PAN_5COM      
      5,                      /* num_com: 4; Number of com PIN, 0 to 8 */
      4,                      /* Position of colon flag, 0 to 7 */
#else
	5,
	1,
#endif
      2,                      /* num_scan: 2; Number of scan PIN, 0 to 2 */
      0,                      /* rsvd_bits:6; Reserved bits */
       {0, HAL_GPIO_O_DIR, 63},           /* LATCH PIN */
       {1, HAL_GPIO_O_DIR, 4},            /* CLOCK PIN */
       {1, HAL_GPIO_O_DIR, 3},            /* DATA PIN */
      {{1, HAL_GPIO_I_DIR, 21},           /* SCAN1 PIN */
       {1, HAL_GPIO_I_DIR, 16}},          /* SCAN2 PIN */
#ifdef _PAN_5COM
	{{1, HAL_GPIO_O_DIR, 1},		/* COM1 PIN */
								// 1to new HW,9to old HW
       {1, HAL_GPIO_O_DIR, 17},           /* COM2 PIN */
       {1, HAL_GPIO_O_DIR, 19},           /* COM3 PIN */
       {1, HAL_GPIO_O_DIR, 20},           /* COM4 PIN */
       {1, HAL_GPIO_O_DIR, 18},           /* COM5 PIN */
#else

	{{1, HAL_GPIO_O_DIR, 1},		/* COM1 PIN */
								// 1to new HW,9to old HW
       {1, HAL_GPIO_O_DIR, 17},           /* COM2 PIN */
       {1, HAL_GPIO_O_DIR, 18},           /* COM3 PIN */
       {1, HAL_GPIO_O_DIR,19},           /* COM4 PIN */
       {1, HAL_GPIO_O_DIR, 20},           /* COM5 PIN */
#endif

       {1, HAL_GPIO_O_DIR, 63},           /* COM6 PIN */
       {1, HAL_GPIO_O_DIR, 63},           /* COM7 PIN */
       {1, HAL_GPIO_O_DIR, 63}},          /* COM8 PIN */

	  
      {{1, HAL_GPIO_O_DIR, 22},           /* POWER PIN */
       {0, HAL_GPIO_O_DIR, 63},           /* LOCK PIN */
       {0, HAL_GPIO_O_DIR, 63},           /* Extend function LBD */
       {0, HAL_GPIO_O_DIR, 63}},          /* Extend function LBD */
       300,                                     /* Intv repeat first */
       250,                                     /* Intv repeat */
       350,                                     /* Intv release */
       NULL,                                          /* hook_scan()
callback */
       NULL,                                          /* hook_show()
callback */
 };

#define bitmap_list			NULL
#define bitmap_list_num		0

struct pan_configuration pan_config = {&pan_hw_info, bitmap_list_num, bitmap_list};

#if(SUBTITLE_ON == 1)
struct sdec_device * gpsdec = NULL;
#endif
#if(TTX_ON == 1)
struct vbi_device * vbi_dev = NULL;
struct ttx_device * ttx_dev = NULL;
T_VBIRequest VBIRequest;
#endif

void system_hw_init()
{
	HANDLE hVDec;
	struct QPSK_TUNER_CONFIG_API	Tuner_API;
	UINT8 buffer[5]={1,2,3,4,5};
	sci_16550uart_attach(1);	/* Use just 1 UART for RS232 */
	sci_mode_set(SCI_FOR_RS232,115200, SCI_PARITY_EVEN);//SCI_PARITY_NONE

	i2c_scb_attach(1);
	i2c_gpio_attach(1);
	i2c_mode_set(I2C_TYPE_SCB, 40000, 1);
	i2c_mode_set(I2C_TYPE_GPIO, 40000, 1);
	/* Init front panel */
	/* Init front panel */
	HAL_GPIO_BIT_DIR_SET(7, HAL_GPIO_O_DIR);
	HAL_GPIO_BIT_SET(7, 1);
	pan_common_attach(&pan_config);

//	pan_mpnet_init();
	/* Flash */
#ifdef USE_FLASH_COMMON
	sto_flash_init();
#else
	sto_am29800_init();
#endif
	sto_chunk_init(0, 0);
	//sto_sst39016_init();
	//sto_am29080_init();
	//sto_eeprom_init();

#ifdef TUNER_OPTION_IX2410
	tsi_mode_set(TSI_SPI_0, 0x83);
	tsi_select(TSI_DMX_0, TSI_SPI_0);
	Tuner_API.nim_Tuner_Init = nim_ix2410_init;
	Tuner_API.nim_Tuner_Control = nim_ix2410_control;
	Tuner_API.nim_Tuner_Status = nim_ix2410_status;
	Tuner_API.config_data.Recv_Freq_Low = 950;
	Tuner_API.config_data.Recv_Freq_High = 2146;
	Tuner_API.config_data.Ana_Filter_BW = 30000;
	Tuner_API.config_data.Connection_config = 0x00;
	Tuner_API.config_data.AGC_Threshold_1 = 0x0F;
	Tuner_API.config_data.AGC_Threshold_2 = 0x15;
	Tuner_API.tuner_config.i2c_type_id = I2C_FOR_TUNER;
	Tuner_API.tuner_config.wTuner_Crystal = 4000;
	Tuner_API.tuner_config.cTuner_Base_Addr = 0xc0;
	Tuner_API.tuner_config.cTuner_Out_S_D_Sel = 1;
    nim_m3327_attach(&Tuner_API);
#elif (defined(TUNER_OPTION_MAX2118))
	tsi_mode_set(TSI_SPI_0, 0x83);
	tsi_select(TSI_DMX_0, TSI_SPI_0);
	Tuner_API.nim_Tuner_Init = nim_max2118_init;
	Tuner_API.nim_Tuner_Control = nim_max2118_control;
	Tuner_API.nim_Tuner_Status = nim_max2118_status;
	Tuner_API.config_data.Recv_Freq_Low = 925;
	Tuner_API.config_data.Recv_Freq_High = 2175;
	Tuner_API.config_data.Ana_Filter_BW = 30000;
	Tuner_API.config_data.Connection_config = 0x04;
	Tuner_API.config_data.AGC_Threshold_1 = 0x0F;
	Tuner_API.config_data.AGC_Threshold_2 = 0x15;
	Tuner_API.tuner_config.wTuner_Crystal = 4000;
	Tuner_API.tuner_config.i2c_type_id = I2C_FOR_TUNER;
	Tuner_API.tuner_config.cTuner_Base_Addr = 0xc0;
	Tuner_API.tuner_config.cTuner_Out_S_D_Sel = 1;
   	nim_m3327_attach(&Tuner_API);
#elif (defined(TUNER_OPTION_EARDA))
	tsi_mode_set(TSI_SPI_0, 0x83);
	tsi_select(TSI_DMX_0, TSI_SPI_0);
	 if( i2c_write(I2C_FOR_TUNER, 0xc0, buffer, 3)==SUCCESS)
	 {
	 	libc_printf("Tuner type is STB6000\n");
		Tuner_API.nim_Tuner_Init = nim_st6000_init;
		Tuner_API.nim_Tuner_Control = nim_st6000_control;
		Tuner_API.nim_Tuner_Status = nim_st6000_status;	 
		Tuner_API.config_data.Recv_Freq_Low = 950;
		Tuner_API.config_data.Recv_Freq_High = 2150;
		Tuner_API.config_data.Ana_Filter_BW = 30000;
		Tuner_API.config_data.Connection_config = 0x01;
		Tuner_API.config_data.QPSK_Config = 0x00;
		Tuner_API.config_data.AGC_Threshold_1 = 0x8F;
		Tuner_API.config_data.AGC_Threshold_2 = 0x95;
		Tuner_API.tuner_config.i2c_type_id = I2C_FOR_TUNER;
		Tuner_API.tuner_config.wTuner_Crystal = 4000;
		Tuner_API.tuner_config.cTuner_Base_Addr = 0xc0;
		Tuner_API.tuner_config.cTuner_Out_S_D_Sel = 0;
	 }	
	 else if( i2c_write(I2C_FOR_TUNER, 0xc2, buffer, 3)==SUCCESS)
	 {
	 	libc_printf("Tuner type is MAX2118\n");
		Tuner_API.nim_Tuner_Init = nim_max2118_init;
		Tuner_API.nim_Tuner_Control = nim_max2118_control;
		Tuner_API.nim_Tuner_Status = nim_max2118_status;
		Tuner_API.config_data.Recv_Freq_Low = 925;
		Tuner_API.config_data.Recv_Freq_High = 2175;
		Tuner_API.config_data.Ana_Filter_BW = 30000;
		Tuner_API.config_data.Connection_config = 0x04;
		Tuner_API.config_data.AGC_Threshold_1 = 0x0F;
		Tuner_API.config_data.AGC_Threshold_2 = 0x15;
		Tuner_API.tuner_config.wTuner_Crystal = 4000;
		Tuner_API.tuner_config.i2c_type_id = I2C_FOR_TUNER;
		Tuner_API.tuner_config.cTuner_Base_Addr = 0xc2;
		Tuner_API.tuner_config.cTuner_Out_S_D_Sel = 1;
	 }	
	 else
	 	libc_printf("Unknown Tuner type!!!!!!!!!!!!!!\n");
   	nim_m3327_attach(&Tuner_API);
#else
#if	(SYS_PROJECT_FE == PROJECT_FE_DVBS)
	nim_m3327_attach();
	tsi_mode_set(TSI_SPI_0, 0x83);
	tsi_select(TSI_DMX_0, TSI_SPI_0);
#elif	(SYS_PROJECT_FE == PROJECT_FE_DVBC)
	nim_ST0297_attach();
	tsi_mode_set(TSI_SPI_1, 0x87);
	tsi_select(TSI_DMX_0, TSI_SPI_1);
	cic_m3327_attach();

#elif   (SYS_PROJECT_FE == PROJECT_FE_DVBT)

	#if (SYS_DEM_MODULE==MT352)
		f_mt352_attach();
	#elif (SYS_DEM_MODULE==MT353)
		f_mt353_attach();
	#elif (SYS_DEM_MODULE==ST0360)
		f_stv0360_attach();
	#elif (SYS_DEM_MODULE==ST0361)
		f_stv0361_attach();
	#else //(SYS_DEM_MODULE==AF9003)
		f_af9003_attach();
#endif

	tsi_mode_set(SYS_TS_INPUT_INTERFACE, 0x87);
	tsi_select(TSI_DMX_0, SYS_TS_INPUT_INTERFACE);
#endif
#endif

	deca_m3327_attach();
	snd_m3327_attach();
	dmx_m3327_attach();
#if(TA1243 == SYS_RFM_MODULE)
	rfm_ta1243_init();
#elif(MCBS373 == SYS_RFM_MODULE)
	rfm_mcbs373_init();
#endif
#if (SYS_CHIP_MODULE == ALI_M3327)
	osd_m3327_attach("OSD_M3327_0");
#elif (SYS_CHIP_MODULE == ALI_M3327C)
	osd_m3327c_attach("OSD_M3327C_1");
#endif

	vpo_m3327_attach();
	vdec_m3327_attach();
#if (TTX_ON == 1)
	vbi_m3327_init();
#endif
#if (SUBTITLE_ON == 1)
	sdec_m3327_init();
#endif

#if (SYS_CHIP_MODULE == ALI_M3327)
	venc_m3327_init();
#endif

	VCR_Enable(!VCR_ENABLE);

#ifdef RECORD_SUPPORT
	if (bdev_attach() == 0) {
		PRINTF("IDE device not found!\n");
	};

	HAL_GPIO_BIT_DIR_SET(12, HAL_GPIO_O_DIR);
	HAL_GPIO_BIT_SET(12, 1);

	HAL_GPIO_BIT_DIR_SET(13, HAL_GPIO_O_DIR);
	HAL_GPIO_BIT_SET(13, 0);
#endif

}

/********************Tmp Example for Application Begin********************/

void InitVPPara(struct VP_InitInfo *pVPInitInfo)
{
	int i;

	//api set backgound color]
	pVPInitInfo->tInitColor.uY = 0x10;
	pVPInitInfo->tInitColor.uCb= 0x80;
	pVPInitInfo->tInitColor.uCr= 0x80;

	//set advanced control
	pVPInitInfo->bBrightnessValue = 0;
	pVPInitInfo->fBrightnessValueSign = TRUE;
	pVPInitInfo->wContrastValue = 0;
	pVPInitInfo->fContrastSign = TRUE;
	pVPInitInfo->wSaturationValue = 0;
	pVPInitInfo->fSaturationValueSign = TRUE;
	pVPInitInfo->wSharpness = 0;
	pVPInitInfo->fSharpnessSign = TRUE;
	pVPInitInfo->wHueSin = 0;
	pVPInitInfo->fHueSinSign = TRUE;
	pVPInitInfo->wHueCos = 0;
	pVPInitInfo->fHueCosSign = TRUE;
	//VPO_Zoom
	pVPInitInfo->tSrcRect.uStartX = 0;
	pVPInitInfo->tSrcRect.uWidth= PICTURE_WIDTH;
	pVPInitInfo->tSrcRect.uStartY= 0;
	pVPInitInfo->tSrcRect.uHeight= PICTURE_HEIGHT;
	pVPInitInfo->DstRect.uStartX = 0;
	pVPInitInfo->DstRect.uWidth= SCREEN_WIDTH;
	pVPInitInfo->DstRect.uStartY= 0;
	pVPInitInfo->DstRect.uHeight= SCREEN_HEIGHT;

	//VPO_SetAspect
	pVPInitInfo->eTVAspect = TV_4_3;
	pVPInitInfo->eDisplayMode = NORMAL_SCALE;//LETTERBOX;
	pVPInitInfo->uNonlinearChangePoint = 111;
	pVPInitInfo->uPanScanOffset = 90;
	//VPO_SetOutput
	for(i=0;i<VP_DAC_TYPENUM;i++)
		pVPInitInfo->pDacConfig[i].bEnable = FALSE;
////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
///////////modify by zkc,for HW_HAVESVIDEO_BUTNORGBOUT
//CVBS_1
#ifdef VDAC_USE_CVBS_TYPE
	pVPInitInfo->pDacConfig[VDAC_USE_CVBS_TYPE].bEnable = TRUE;
	pVPInitInfo->pDacConfig[VDAC_USE_CVBS_TYPE].tDacIndex.uDacFirst = CVBS_DAC;
	pVPInitInfo->pDacConfig[VDAC_USE_CVBS_TYPE].eVGAMode= VGA_NOT_USE;
	pVPInitInfo->pDacConfig[VDAC_USE_CVBS_TYPE].bProgressive= FALSE;
#endif

#ifdef VDAC_USE_CVBS_TYPE_2
	pVPInitInfo->pDacConfig[VDAC_USE_CVBS_TYPE_2].bEnable = TRUE;
	pVPInitInfo->pDacConfig[VDAC_USE_CVBS_TYPE_2].tDacIndex.uDacFirst = CVBS_DAC_2;
	pVPInitInfo->pDacConfig[VDAC_USE_CVBS_TYPE_2].eVGAMode= VGA_NOT_USE;
	pVPInitInfo->pDacConfig[VDAC_USE_CVBS_TYPE_2].bProgressive= FALSE;
#endif

//YC
#ifdef VDAC_USE_SVIDEO_TYPE
	pVPInitInfo->pDacConfig[VDAC_USE_SVIDEO_TYPE].bEnable = TRUE;
	pVPInitInfo->pDacConfig[VDAC_USE_SVIDEO_TYPE].tDacIndex.uDacFirst = SVIDEO_DAC_Y;
	pVPInitInfo->pDacConfig[VDAC_USE_SVIDEO_TYPE].tDacIndex.uDacSecond= SVIDEO_DAC_C;
	pVPInitInfo->pDacConfig[VDAC_USE_SVIDEO_TYPE].eVGAMode= VGA_NOT_USE;
	pVPInitInfo->pDacConfig[VDAC_USE_SVIDEO_TYPE].bProgressive= FALSE;
#endif
////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
//YUV
	pVPInitInfo->pDacConfig[YUV_1].bEnable = FALSE;
	pVPInitInfo->pDacConfig[YUV_1].tDacIndex.uDacFirst = DAC1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -