📄 root.c
字号:
/*****************************************************************************
* 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 + -