📄 gsel.h
字号:
// Genesis-Microchip comm handler functions
///////////////////////////////////////////////////////////////////////////////
typedef struct gmt_MsgStruct_s
{
BYTE len; // length of this command packet
BYTE cmd;
BYTE BUF[254];
} gmt_MsgStruct;
typedef enum
{
gmd_SERIAL_USE,
gmd_DDC2BI_USE
}gmt_HANDLER_USE;
typedef enum
{
gmd_DVI_DDC2Bi_CHANNEL,
gmd_VGA_DDC2Bi_CHANNEL
}gmt_DDC2BI_CHANNEL;
void gm_UartInit(DWORD D_CpuClock, DWORD D_BaudRate);
void gm_SerialHandler(void);
void gm_Ddc2biHandler(void);
void gm_DDC2BiInit(gmt_DDC2BI_CHANNEL DDC2Bi_channel);
void far gm_StartRcvMsg( void );
gmt_MsgStruct * gm_CommsGetMessage(BYTE B_WhichCommHandler);
gmt_RET_STAT gm_CommsSendReply( gmt_MsgStruct far * Stp_CommMsg, gmt_HANDLER_USE WhichCommHandler);
//void gm_Print (BYTE * Bp_str, WORD W_value);
BYTE* gm_DDC2Bi_GetMessage (BYTE* Bp_Dest);
BYTE gm_DDC2Bi_GetStatus(void);
gmt_RET_STAT gm_DDC2Bi_SendMessage (BYTE far * Bp_Src);
void far gm_Print (const char far *Bp_Str, WORD W_Value);
void gm_Printf (BYTE * Bp_str, WORD value1, WORD value2, ...);
///////////////////////////////////////////////////////////////////////////////
// Genesis-Microchip data type define for gamma functions
///////////////////////////////////////////////////////////////////////////////
typedef enum
{
gmd_INPUT_GAMMA_TABLE = 1,
gmd_OUTPUT_GAMMA_TABLE = 2,
gmd_VIDEO_GAMMA_TABLE = 3,
gmd_ALL_COLORS = 0,
gmd_RED = 0x10,
gmd_GREEN = 0x20,
gmd_BLUE = 0x30
}gmt_GAMMA_SELECT;
gmt_RET_STAT gm_DecompressLoadGammaTableMain(gmt_GAMMA_SELECT GammaSelect, BYTE ROM* Bp_SrcGammaTable);
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// Genesis-Microchip nvram functions
///////////////////////////////////////////////////////////////////////////////
gmt_RET_STAT gm_InitNVRAM(void);
gmt_RET_STAT far gm_InitNVRAMLong( gmt_BLOCKINFO ROM *pRomDir, BYTE ROM *pRomDirSize,
gmt_Nvram_RW_Function pNVRAM_ReadBlkFn,
gmt_Nvram_RW_Function pNVRAM_WriteBlkFn );
gmt_RET_STAT far gm_InitNVRAMDirectory(void);
gmt_BLOCKINFO far gm_GetNVRAMBlockInfo(BYTE B_BlockType, BYTE B_BlockIndex);
gmt_RET_STAT far gm_ReadNVRAMAbsolute(WORD Address, BYTE * Bp_Buffer, WORD W_Length);
gmt_RET_STAT far gm_WriteNVRAMAbsolute(WORD Address, BYTE * Bp_Buffer, WORD W_Length);
gmt_RET_STAT gm_ReadNVRAMBlock(BYTE B_BlockType, BYTE B_Index, BYTE * Bp_Buffer, WORD W_Offset, WORD W_Length );
gmt_RET_STAT gm_WriteNVRAMBlock(BYTE B_BlockType, BYTE B_Index, BYTE * Bp_Buffer, WORD W_Offset, WORD W_Length);
//**************************************************************
// G S E L C O N S T A N T S
//**************************************************************
#if defined(PHOENIX) || defined(TUCSON) || defined(PHOENIX_U)
#define gmc_NumDriverTimers 11 // 5 gsel + 5 irom = 10 timers when using IROM AB
#elif defined(OAK)
#define gmc_NumDriverTimers 12 // 7 gsel + 5 irom = 12 timers when using IROM AB
#else
#define gmc_NumDriverTimers 12 // 5 gsel + 6 irom = 11 timers when using IROM AB
#endif
//#define gmc_SerialBaudRate 115200 // should set to 57600 if we use mcuclock of 20 or 24mhz with 8051
extern DWORD ROM gmc_SerialBaudRate;
extern DWORD ROM gmc_T_CLK_KHZ;
extern BYTE ROM gmc_R_CLK_MHZ;
extern DWORD ROM gmc_CPU_CLK_KHZ;
extern DWORD ROM gmc_OCM_CLK_POWERDOWN;
extern BYTE ROM gmc_CPU_SPEED;
extern BYTE ROM gmc_CPU_WaitStates_NS;
extern WORD ROM gmc_I2cSclk_Khz;
extern WORD ROM gmc_CCF_NVRAM_SCRATHPAD;
extern WORD ROM gmc_BrightnessPWMPort;
//extern BYTE ROM gmc_SPI_Clock_Sel;
extern BYTE gmc_SPI_Clock_Sel;
extern BYTE ROM gmc_ADC_OFFSET2_YUV_MIN_VALUE;
extern BYTE ROM gmc_ADC_OFFSET2_Y_MAX_VALUE;
extern BYTE ROM gmc_ADC_OFFSET2_UV_MAX_VALUE;
extern BYTE ROM gmc_DPllDivider;
extern BYTE ROM gmc_DClkDivider;
extern BYTE ROM gmc_FreeRunPllDiv;
extern BYTE ROM gmc_FreeRunClkDiv;
extern WORD gmc_PowerUpPanelTiming;
extern WORD gmc_PowerDownPanelTiming;
extern BYTE gmc_PowerDownTimeIn10ms;
extern WORD gmc_PanelWidth;
extern WORD gmc_PanelHeight;
extern WORD gmc_PanelVActiveStart;
extern WORD gmc_PanelVActiveEnd;
extern BYTE gmc_PanelDepth; // Add for Panel array, 0401
extern BYTE gmc_PanelMinHTotal;
extern WORD gmc_PanelTypVTotal;
extern DWORD gmc_PanelMaxPClk;
extern WORD gmc_PanelMaxVTotal;
extern WORD gmc_PanelMinVTotal;
extern BYTE gmc_PanelTwoPixelPerClk;
extern BYTE gmc_Panel_Spread_Spect_En;
extern BYTE gmc_PanelSpreadSpectrumCtrl;
extern BYTE ROM gmc_BKGND_HSTART;
extern BYTE ROM gmc_BKGRN_VSTART;
extern BYTE ROM gmc_IPHS_ActiveStart;
extern BYTE ROM gmc_IPVS_ActiveStart;
extern BYTE ROM gmc_InputTimingStableCount;
//**************************************************************
// ACM-3D
//**************************************************************
//Macro, structure, variables, functions, for ACM-3D
//******************************************************************************
// T Y P E D E F I N I T I O N S
//******************************************************************************
#ifdef __PARADIGM__
#pragma pack(push)
#pragma pack(1)
#endif //__PARADIGM__
//
// Region definition struct, 3 axies with 3 params
//
typedef struct gmt_ACM3DRegionDefStruct
{
WORD W_HueCenter; // 0..359, 9u, ACM_Zx_HUE_CENTER
BYTE B_HueAperture; // 0..180, 8u, ACM_Zx_HUE_APERTURE
BYTE B_R1; // 0..255, 8u, ACM_Zx_SAT_R1
BYTE B_R2; // 0..255, 8u, ACM_Zx_SAT_R2
BYTE B_Y1; // 0..255, 8u, ACM_Zx_LUMI1
BYTE B_Y2; // 0..255, 8u, ACM_Zx_LUMI2
BYTE B_HueFade; // 0, 5..63, 6u, ACM_Zx_HUE_FADE
BYTE B_SatFade; // 5..63, 6u, ACM_Zx_SAT_FADE
BYTE B_LumiFade; // 5..63, 6u, ACM_Zx_LUMI_FADE
} gmt_ACM3DRegionDef;
//*************************************************************************
//
// A C M C O R R E C T I O N P A R A M E T E R S
//
//*************************************************************************
//
// Correction parameters definition struct, 9 params for each Region
//
typedef struct gmt_ACM3DCorrectionParamsStruct
{
SBYTE sB_HueOffs; // -127..+128, Range TBD, 8s, ACM_Zx_HUE_OFFS
SBYTE sB_HueGain; // -8..+7, Range TBD, 4s, ACM_Zx_HUE_GAIN
SBYTE sB_SatOffs; // -127..+128, Range TBD, 8s, ACM_Zx_SAT_OFFS
SBYTE sB_SatGain; // 0..+127, 7u, Range TBD, ACM_Zx_SAT_GAIN
SBYTE sB_LumiOffs; // -127..+128, Range TBD, 8s, ACM_Zx_LUMI_OFFS
SBYTE sB_LumiGain; // 0..+127, 7u, Range TBD, ACM_Zx_LUMI_GAIN
SBYTE sB_U_Vect; // 128..+127, 8s, ACM_Zx_U_VECT, for REGION_BLUE Stretch, deft=0x00
SBYTE sB_V_Vect; // 128..+127, 8s, ACM_Zx_V_VECT, for REGION_BLUE Stretch, deft=0x00
BYTE B_Alpha; // 1.4u, 0..1.9375, ACM_Zx_ALPHA, for ext. HW blocks, deft=0x10
} gmt_ACM3DCorrectionParams;
//
// Run-time Calculated Correction parameters definition struct, 5 params for each Region
//
typedef struct gmt_ACM3DCalcCorrParamsStruct
{
WORD W_1_HueFade; // 0, 1/5...1/63, 0.10u, ACM_Zx_HUE_FADEDIV
WORD W_1_RLo; // 1/5...1/63, 0.10u, ACM_Zx_SATR1_SOFT
WORD W_1_RUp; // 1/5...1/63, 0.10u, ACM_Zx_SATR2_SOFT
WORD W_1_YLo; // 1/5...1/63, 0.10u, ACM_Zx_LUMI1_SOFT
WORD W_1_YUp; // 1/5...1/63, 0.10u, ACM_Zx_LUMI2_SOFT
} gmt_ACM3DCalcCorrParams;
#ifdef __PARADIGM__
#pragma pack(pop)
#endif //__PARADIGM__
//define hue center of each axis for six-axis color control
#define HUE_CENTER_MAGENTA 0x32 //50 degree
#define HUE_CENTER_RED 0x6E //110 degree
#define HUE_CENTER_YELLOW 0xAA //170 degree
#define HUE_CENTER_GREEN 0xE6 //230 degree
#define HUE_CENTER_CYAN 0x122 //290 degree
#define HUE_CENTER_BLUE 0x15E //350 degree
//
//Six-Axis color control enum
//
typedef enum SixAxisEnum
{
RED_AXIS,
YELLOW_AXIS,
GREEN_AXIS,
CYAN_AXIS,
BLUE_AXIS,
MAGENTA_AXIS,
MAX_AXIS_NUM
}SixAxisType;
extern WORD ROM gmc_ACM_ZONE1_START;
extern gmt_ACM3DRegionDef far * gPa_ACM3DRegionDefs; // = (gmt_ACM3DRegionDef far *)&gma_ACM3DRegionDefs;
extern gmt_ACM3DCorrectionParams far * gPa_ACM3DCorrectionParamDefs; // = (gmt_ACM3DCorrectionParams far *)&gma_ACM3DCorrectionParamDefs;
// functions for ACM-3D
void gm_ACM3DInit( void );
void gm_ACM3DUpdateCtrl(BYTE B_Enable, BYTE B_WindowCtrl);
void gm_ACM3DSetRegionDefinitionTablePtr(gmt_ACM3DRegionDef far * pt_stRegionDef);
void gm_ACM3DSetCorrectionParamsTablePtr(gmt_ACM3DCorrectionParams far * pt_stCorrParams);
//void gm_ACM3DUpdateSaturation(BYTE B_Region, BYTE B_SaturationAdjuster);
//void gm_ACM3DUpdateHue(BYTE B_Region, BYTE B_HueAdjuster);
void gm_ACM3DUpdateLumaGain(BYTE B_Region, BYTE B_LumaGain);
void gm_ACM3DUpdateLumaOffset(BYTE B_Region, SBYTE B_LumaOffset);
void gm_ACM3DUpdateSaturationGain(BYTE B_Region, BYTE B_SaturationGain);
void gm_ACM3DUpdateSaturationOffset(BYTE B_Region, SBYTE B_Saturationoffset);
void gm_ACM3DUpdateHueGain(BYTE B_Region, SBYTE B_HueGain);
void gm_ACM3DUpdateHueOffset(BYTE B_Region, SBYTE B_HueOffset);
void gm_ACM3DLoadRegionSettings(gmt_ACM3DRegionDef ROM* pt_stRegionDef, gmt_ACM3DCorrectionParams ROM* pt_stCorrParams);
//six-axis color control
void gm_ACM3DAdjustSixAxisControl(SixAxisType axisId, SBYTE sB_Offset);
void gm_ACM3DReadAll( void );
//**************************************************************
// R E G B L O C K
//**************************************************************
//typedef unsigned char gmt_RegBlock;
//void gm_ProcessRegBlock(const gmt_RegBlock *DataPtr);
// return high and low bytes of a WORD
#define byte3(a) (((a) >> 24) & 0xff)
#define byte2(a) (((a) >> 16) & 0xff)
#define byte1(a) (((a) >> 8) & 0xff)
#define byte0(a) (0xff & (a))
// define regblockwrite constant and macros.
// regblock opcodes
/* bit no: 76543210
||||||\\------ 2 most significant bits of address (b7,b1,b0)
|\\\\\-------- 5 bit opcode function (b6..b2)
\------------ 1 bit end of block indicator
*/
#define OpCodeBits 0xfc // middle 5 bits used for opcode (including end of block indicator)
#define OpCodeStartBit 2
#define RBWriteByte 0
#define RBWriteWord ( 1 << OpCodeStartBit)
#define RBWriteTriBytes ( 2 << OpCodeStartBit)
#define RBWriteDWord ( 3 << OpCodeStartBit)
#define RBDelay ( 4 << OpCodeStartBit)
#define RBWriteBytePB ( 5 << OpCodeStartBit)
#define RBWriteWordPB ( 6 << OpCodeStartBit)
#define RBWriteTriBytesPB ( 7 << OpCodeStartBit)
#define RBWriteDWordPB ( 8 << OpCodeStartBit)
#define RegBlockEnd ( 1 << 7 )
// opcode has most significant bits of address as well, define mask for address bits
#define RegBlockHiAddrBitsMask 3
typedef unsigned char gm_RegBlockType;
// macros to generate regblock array of opcode, address, data tuples
// note that each tuple may consist of between 3 and 6 bytes.
#define gm_DefineRegBlock(name) \
gm_RegBlockType ROM name [] = {
// Caution, address should be <= 0x3ff as address does not get masked before being ored with command
// if register names from gmax_reg.h are used this constraint will be enforced automatically
#define RB_Delay(ms2delay) \
(BYTE) RBDelay, (BYTE) (ms2delay)
#define RB_DelayEnd(ms2delay) \
(BYTE) (RBDelay | RegBlockEnd), (BYTE) (ms2delay) };
#define RB_WriteByte(address,bdata) \
(BYTE) RBWriteByte | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), (BYTE) (bdata)
#define RB_WriteWord(address,wdata) \
(BYTE) RBWriteWord | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), \
(BYTE) byte1(wdata), (BYTE) byte0(wdata)
#define RB_WriteTriBytes(address,ddata) \
(BYTE) RBWriteTriBytes | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), \
(BYTE) byte2(ddata), (BYTE) byte1(ddata), (BYTE) byte0(ddata)
#define RB_WriteDWord(address,ddata) \
(BYTE) RBWriteDWord | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), \
(BYTE) byte3(ddata), (BYTE) byte2(ddata), (BYTE) byte1(ddata), (BYTE) byte0(ddata)
#define RB_WriteByteEnd(address,bdata) \
(BYTE) RegBlockEnd | RBWriteByte | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), (BYTE) (bdata) };
#define RB_WriteWordEnd(address,wdata) \
(BYTE) RegBlockEnd | RBWriteWord | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), \
(BYTE) byte1(wdata), (BYTE) byte0(wdata) };
#define RB_WriteTriBytesEnd(address,ddata) \
(BYTE) RegBlockEnd | RBWriteTriBytes | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), \
(BYTE) byte2(ddata), (BYTE) byte1(ddata), (BYTE) byte0(ddata) };
#define RB_WriteDWordEnd(address,ddata) \
(BYTE) RegBlockEnd | RBWriteDWord | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), \
(BYTE) byte3(ddata), (BYTE) byte2(ddata), (BYTE) byte1(ddata), (BYTE) byte0(ddata) };
#define RB_WriteByteParam(address,index) \
(BYTE) RBWriteBytePB | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), (BYTE) (index)
#define RB_WriteWordParam(address,index) \
(BYTE) RBWriteWordPB | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), (BYTE) (index)
#define RB_WriteTriBytesParam(address,index) \
(BYTE) RBWriteTriBytesPB | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), (BYTE) (index)
#define RB_WriteDWordParam(address,index) \
(BYTE) RBWriteDWordPB | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), (BYTE) (index)
#define RB_WriteByteParamEnd(address,index) \
(BYTE) RegBlockEnd | RBWriteBytePB | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), (BYTE) (index) };
#define RB_WriteWordParamEnd(address,index) \
(BYTE) RegBlockEnd | RBWriteWordPB | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), (BYTE) (index) };
#define RB_WriteTriBytesParamEnd(address,index) \
(BYTE) RegBlockEnd | RBWriteTriBytesPB | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), (BYTE) (index) };
#define RB_WriteDWordParamEnd(address,index) \
(BYTE) RegBlockEnd | RBWriteDWordPB | END_MASK((BYTE)byte1(address)), (BYTE) byte0(address), (BYTE) (index) };
// E N D R E G B L O C K M A C R O S
#endif //#ifndef __GSEL_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -