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