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

📄 appstest.c

📁 GM5621原代码
💻 C
📖 第 1 页 / 共 5 页
字号:
/*
	$Workfile:   appstest.c  $
	$Revision:   1.121  $
	$Date:   Aug 23 2006 22:55:38  $
*/

//******************************************************************
//
//		Copyright (C) 2003.  GENESIS MICROCHIP INC.
// All rights reserved.  No part of this program may be reproduced
//
//	Genesis Microchip Inc., 165 Commerce Valley Dr. West
//		Thornhill, Ontario, Canada, L3T 7V8
//
//================================================================
//
// MODULE:      appstest.c
//
//******************************************************************
#include "inc\all.h"

#define  DEBUG_APPTEST				1
#define  DEBUG_APPTEST_EXTENDED	1

// if DEBUG_MSG is not set, then ignore whole file.
#if	DEBUG_MSG

#include <stdlib.h>
#include <embedded.h>
#include ".\AppsTest\appstest.h"

#define MYBUILD_NUMBER   "$Revision:   1.121  $"

#if DEBUG_APPTEST && DEBUG_MSG
	#define	msg(a,b)	gm_Print((const char far *)a,b)
#else
	#define msg(a,b)
#endif
#if DEBUG_APPTEST_EXTENDED && DEBUG_MSG
	#define	msgx(a,b)	gm_Print((const char far *)a,b)
#else
	#define msgx(a,b)
#endif

#define AS_NONE		 0 // no appstest at all
#define AS_MINIMUM	 1 // myson ISP
#define AS_NORMAL	 2 // + NVRAM rd/wr, Switcher on/off
#define AS_ALL		 3 // all appstest.

extern gmt_RET_STAT pp_InitNVRAM(void);
extern gmt_BLOCKINFO pp_GetNVRAMBlockInfo(BYTE B_BlockType, BYTE B_BlockIndex);
extern gmt_RET_STAT pp_ReadNVRAMBlock(BYTE B_BlockType, BYTE B_Index, BYTE * Bp_Buffer, WORD W_Offset, WORD W_Length );
extern gmt_RET_STAT pp_WriteNVRAMBlock(BYTE B_BlockType, BYTE B_Index, BYTE * Bp_Buffer, WORD W_Offset, WORD W_Length);
extern gmt_RET_STAT pp_ReadNVRAMAbsolute(WORD Address, BYTE * Bp_Buffer, WORD W_Length);
extern gmt_RET_STAT pp_WriteNVRAMAbsolute(WORD Address, BYTE * Bp_Buffer, WORD W_Length);

#ifdef ENABLE_CACHE_APPSTEST
void far spiTest(WORD testSel);
#endif

#ifdef PHOENIX
extern void far gmi_SetVEDIDHandler(void);
#endif
BYTE NVRAM_Unlock = 0x00;
BYTE ROM UnlockSeq[] = {0x55, 0xAA, 0x55};


extern void prune(void);

#ifdef ZERO_K_MAIN		// gives cleaner display sometimes, but adds a phase skew
extern BYTE KM0PhaseOffset;
#endif

extern WORD	gmvb_IA_Debug;		//for IA debug

//*********** Memory Test Declarations *******************************
#define MEMORY_START         (WORD far *)0x00000000UL
#define MEMORY_END           (WORD far *)0x00003FFEUL
#define MEMORY_LENGTH         8192                      // Words

#define TEST_FAILED_MEM      0x84  // Failed memory location address is written
							// here

#define TEST_PATTERN_0       0x5555
#define TEST_PATTERN_1       0xAAAA

unsigned int far *TestMem = 0; // Assigned with address to start memory testfrom
unsigned int TestMemLength = 0;// Assigned with Memory length in Words, to test.

unsigned int far *FailedMem;


/*************************************************************/
/* USE THIS DEFINITION TO CONTROL THE SIZE OF APPSTEST       */
#define APPSTEST_SIZE	AS_NORMAL
/*************************************************************/
/*************************************************************/

bit	DebugOnly = gmd_FALSE;

gmt_MsgStruct ROM AckPkt = {3, ACK, {0}};
gmt_MsgStruct ROM NackPkt = {3, NAK, {0}};

//**************************************************************
//	         F U N C T I O N   P R O T O T Y P E S
//**************************************************************
#if !REMOVE_APPSTEST
static void RegWriteReadTest(void);
static void regReadWriteTest(BYTE skipOSD);
static void ADC_testing(void);
static void Pixel_Jitter(void);
static void Pixel_Scan(void);
static void Pixel_Noise(void);
static void Pixel_Grab(void);
static WORD doApps_MemTest(int AddrIncType);
static void printSyncStateType(void);
#ifdef PHOENIX_U
static gmt_RET_STAT gmp_FindBestPhase_Check(void);
#endif

#endif   // !REMOVE_APPSTEST

static void ExtendedCommsParser(BYTE comm_use);
static void NvramRd(RdNvramCmd_t *CmdPtr, BYTE comm_use);
static BYTE BlockNvramWr(WrNvramBlockCmd_t *CmdPtr);
//static void hifSpeedTest(void);

void ReadWordValueFromRegister(WORD addr, WORD count);
void NativeModeTest52xx( void );
void NativeModeTestPhoenix( void );
void GPIO_Toggle( void );
#ifdef I2C_MST_CTRL
static void I2cMaster_Test(void);
void I2cMasterRead(BYTE DevId, BYTE SubAddress, BYTE NumBytes );
void I2cMasterWrite(BYTE DevId, BYTE SubAddress, BYTE bdata );
#endif
void LBADC_Read( BYTE channel, BYTE ADC_Clk_Div );
void TestOsdHwFeatures( BYTE fontX, BYTE fontY );
void TestOsdHwFeatures1( BYTE row, BYTE col, BYTE bpp );
static WORD GetWordFromBuffer(void *buff);
void SpiRead( DWORD address, WORD ntimes);
void far SpiFlashReadWriteStatusRegister(BYTE mode, BYTE data);

void AdjustAspectRatio(WORD DispActiveWidth);
#if ProcessExceptions != DisableExceptions
	static void	CheckExceptions(void);
	#if ProcessExceptions == ReportExceptions
		static void DumpExceptionStack(void);
	#endif
#endif

void gmp_TrackSDDS(void);

// Video Decoder functions not needed now.
#if 0 // (USE_VPORT && USE_GSEL_DRVR_MODEL)
void  dev_vpc323FPWrite( WORD, WORD );
WORD  dev_vpc323FPRead( WORD );
void dev_vpc323_WordWrite	(BYTE addr, WORD wrdata);
void dev_vpc323_ByteWrite	(BYTE addr, BYTE wrdata);
WORD dev_vpc323_WordRead(BYTE addr);
BYTE dev_vpc323_ByteRead(BYTE addr);
#endif

#ifdef USE_PIXCR_DEMO
void PixCrLumSum32x32(WORD far *HistArray, BYTE SimThresh, BYTE XtraScore);
void PixCrLumHist32x32(DWORD far *HistArray);
void PixCrLumHist32x4x8(BYTE Threshold, BYTE far *HistArray);
void PixCrLumHist4x8x32(BYTE far *HistArray);
void PixCrFleshDetect(void);
void PixCrEdgeEnhance(void);
DWORD PixCrSumDiff(BYTE Threshold);
#endif

#ifdef USE_LINEAR_LIGHTNESS
void ChangeGamma(BYTE GammaTableSelect);
#endif

#define MaxDebugParams	4
long xdata DebugParam[MaxDebugParams];

gm_DefineRegBlock(WriteRegBlockTest)
RB_WriteDWord((SDDS_INITIAL_FREQ),	0x666666UL),
RB_WriteDWord((DDDS_INITIAL_FREQ), 0x533333UL),
RB_WriteByteEnd((HOST_CONTROL),	IPFORCE_UPDATE | DPFORCE_UPDATE)

void AppsTestHandler(void)
{

	ExtendedCommsParser(DDC2BI_USE);
	ExtendedCommsParser(SERIAL_USE);
	//
	// exception handler sets global flags if exception is encounted
	// monitor this flag and report if exception handling is enabled.
	//
	#if ProcessExceptions != DisableExceptions
		CheckExceptions();
	#endif
}

extern BYTE UserPrefWindowScheme;

void AdjustACCACM(void);
static void ExtendedCommsParser(BYTE comm_use)
{
   gmt_MsgStruct  *msg;
   BYTE AckHandler = gmd_TRUE; // At end of appstest switch send ack unless this is set to false
   while( (msg = gm_CommsGetMessage(comm_use)) != 0 )
   {
      gm_StartRcvMsg();  // Start recieving next message

      switch(((AppsFuncCmdType *)msg)->cmd)
      {
   #if USE_SMT
      // Support SMT
      case SMT_Message:
         //msg("SMT_Message", 0);
         AckHandler = gmd_FALSE;
         SMT_MessageHandler((MsgPacket_t *)msg, comm_use);
   #if 0
      #if USE_ACC_ACM
         gm_WriteRegByte(ACC_CTRL, HIST_AVG_METHOD | ACC_WIN_INSIDE);
      #endif
      #if USE_ACM_3D
         gm_WriteRegByte(ACM_CTRL, ACM_WIN_INSIDE);
      #endif

         gm_WriteRegByte(ADC_FAS1, 0x04);
         gm_WriteRegByte(ACC_SNAP_SLOPE, 0x88);
         gm_WriteRegByte(ACC_TOTAL_PIXEL, 0x0D);

         gm_ForceUpdate();
   #endif

         break;
   #endif

      case TurnOffSwitcher :  // set firmware in DEBUG mode
         // To prevent USB/Parallel ISP failed issue.
         StopADCCalibrationISR();
         StopGetKeyISR();
         DebugOnly = gmd_TRUE;
         gm_CommsSendReply( (gmt_MsgStruct *)&AckPkt, comm_use);
         gm_Delay10ms(20);
         break;

      case TurnOnSwitcher     :  // set firmware in gmd_NORMAL mode
         // To prevent USB/Parallel ISP failed issue.
         StartADCCalibrationISR();
         StartGetKeyISR();
         DebugOnly = gmd_FALSE;
         gm_CommsSendReply( (gmt_MsgStruct *)&AckPkt, comm_use);
         gm_Delay10ms(20);
         break;

      case SetParam:
         if( (((SetParamCmd_t *)msg)->Index-1) < MaxDebugParams)
         {
            BYTE *sNum, *dNum;
            dNum = (BYTE *)(&DebugParam[(((SetParamCmd_t *)msg)->Index-1)]);
            sNum = (BYTE *)(&(((SetParamCmd_t *)msg)->Value));
            dNum[0] = sNum[3];
            dNum[1] = sNum[2];
            dNum[2] = sNum[1];
            dNum[3] = sNum[0];
            gm_CommsSendReply( (gmt_MsgStruct *)&AckPkt, comm_use);
            msg("SetParam, 0x%X", (WORD)DebugParam[(((SetParamCmd_t *)msg)->Index-1)]);
         }
         break;

      case WrNvramBlock:          // write Nvram from RAM buffer
         if(BlockNvramWr((WrNvramBlockCmd_t *)msg))
         gm_CommsSendReply( (gmt_MsgStruct *)&AckPkt, comm_use);
         break;

      case RdNvram:               // read data packet from nvram
         AckHandler = gmd_FALSE;
         NvramRd((RdNvramCmd_t *)msg, comm_use);
         break;

      case AppsTest:
#if !REMOVE_APPSTEST    // remove appstest
         switch(((AppsFuncCmdType *)msg)->Index)
         {
         case Func0:
            // Return ACK first since this is a long message prints.
            AckHandler = gmd_FALSE;
            gm_CommsSendReply( (gmt_MsgStruct *)&AckPkt, comm_use);
         
            msgx("0 -This message",0);
            msgx("1 -Memory Test",0);
            msgx("2 x -Reg. Rd/Wr Test, repeat x times for each register",0);
            msgx("3 x -Reg. Rd/Wr Test, repeat x times for each register (skip OSD registers)",0);
            msgx("4 -Test OSD windows",0);   // Should check for 4 windows
            msgx("5 -Auto ADC Init",0);
            msgx("6 -Auto Color Balance",0);
            msgx("7 channel offset2_adj -channel: 0=r, 1=g, 2=b; offset2_adj?",0);
            msgx("8 gm_WriteRegTriBytes test",0);
            msgx("9 gm_WriteRegBlock (WriteTriBytes), regblock test",0);
            msgx("11 -Auto Position",0);
            //msgx("12 x -gm_ReadReg/gm_WriteReg test 0/1=byte 2/3=word 4/5=tribyte 6/7=dword",0);
            msgx("ACM-3D Test",0);
            msgx("13 <reg> <val> write val to reg, read back 256 times.",0);
            msgx("14 <speed> <Type> - I2C Master Test, speed=0(100Khz)/1(400Khz), Type=0(NonDMA)/1(DMA)",0);
            msgx("15 -Native Mode SXGA (60Hz) test", 0);
            msgx("16 <Dev> <Sub Address> <Byte Data> - I2C Slave Write",0);
            msgx("17 <Dev> <Sub Address> <Num Bytes> - I2C Slave Read",0);
            msgx("18 <Channel> <Clk Div> - LB ADC Channel read",0);
            msgx("25 - Source Free Run",0);
         
         #if USE_TEST_PATTERN
            msgx("26 - Enable/Disable Aging Mode",0);
         #endif
            msgx("27 <Start Reg> <Num> <Pattern> - Writes pattern byte to Num Registers", 0);
            msgx("28 <numerator> <denominator> - Set New RCLK Freq", 0);
            msgx("29 <SPI_ADDRESS> <ntimes> - Read SPI ROM location n times", 0);
            msgx("32 read gmvw_InputFlagsMain",0);
            msgx("33 List nvram mapping",0);
            msgx("34 Init. Preset Mode Flag and User Mode in nvram",0);
            msgx("35 force FLASH prune operation.",0);
            msgx("36 Read 32bit address <seg> <off> <len>",0);
            msgx("38 SOG ADC_CONTROL/CLAMP_EN test",0);
         
            msgx("39 Read word value <addr> <len>",0);
            msgx("40 reset NVRAM",0);
            msgx("41 Find best phase",0);
         
            msgx("42 ACM 3D enable",0);
            msgx("43 ACM 3D Disable",0);

            msgx("53 Change Port 0-VGA, 1-DVI, 2-SVid, 3-CVBS, 4-YPbPr",0);

         #ifdef PHOENIX
            msgx("54 Initilize vedid handler",0);
            msgx("55 OCM Breakpoints test",0);
            msgx("56 Print version of firmware", 0);
         #endif

         #ifdef ENABLE_CACHE_APPSTEST
            msg ("58 invoke spi cache tests",0);
         #endif

         #if NVRAM_USE_FLASH
            msgx("60 <mode: 0~4> <flag>-- spi status/config register, usage:", 0);
            msgx("\t 0-2:\tstatus register read(0)/protect(1)/unprotect(2)", 0);
            msgx("\t 3  :\tread config register", 0);
            msgx("\t 4  :\twrite to config register <flag>", 0);
         #endif

         #if (USE_VPORT && USE_GSEL_DRVR_MODEL)
            msgx("200 Display sub-menu of Video Decoder related funtions",0);
         #endif

         #ifdef USE_PIXCR_DEMO
            msgx("230  Lum Hist 32x32, Buffer(0x80 bytes)",0);
            msgx("231  Lum Hist 32x4x8, Thresh set, Buffer(0x3c0 bytes)",0);
            msgx("232  Lum Hist 4x8x32, Buffer(0xf00 bytes)",0);
            msgx("233  Lum Sum 32x32, Buffer(0xf00 bytes)",0);
            msgx("234  Edge Enhance",0);
            msgx("235 Flesh Detect",0);
            msgx("236 Sum Diff, Threshold",0);
         #endif

         #ifdef USE_LINEAR_LIGHTNESS
            msgx("240 Change Output Gamma, Select",0);
         #endif

⌨️ 快捷键说明

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