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

📄 panel.c

📁 9908 samsung tool soft
💻 C
📖 第 1 页 / 共 5 页
字号:
/******************************************************************************
 * File name  : Spi_api.c
 * Start date : 2003. 5. 13
 * By         : Taejin Kwon
 * Contact    : eric.kwon@samsung.com
 * Description: SPI api for external serial device
 * 
 *****************************************************************************/

//-------------GO TO END OF THIS FILE TO EDIT PANEL FUNCTIONS-------------------   
 
/******************************************************************************
 *   INCLUDES                                                                 *
 ******************************************************************************/
#include "Basic_typedefs.h"
#include "Sys_call_abstract.h"
#include "S5h_common_reg.h"
#include "Select_cap.h"
#include "..\..\api\s5h_capability.h"	
#include "Spi_api.h"
#include "Fp_data.h"

#include "Gpio_api.h"	                            
#include "All_Event.h"           
#include "vcd_def.h"

#include "mp3_include.h"
#if _SUPPORT_GAMECD
extern BOOL gIsGameCD;
#endif
//extern UCHAR 	gNumber_output[3];	//number after translated, one character or two characters
extern BOOL 	gTrkSelectEnd_flag ;
extern DspStatus_t OsdGetStatus(void);
/***************************************************************************
 *                         VFD driver
 ****************************************************************************/
 BOOL bEnRefreshVfd = TRUE;
// BOOL display_end = TRUE;
//#define test_vfd
//#define test_led
#define SetOutputMode_VFDStb()		SetOutputModeGPIO10()
#define SetOutputMode_VFDClk()		SetOutputModeGPIO13()
#define SetOutputMode_VFDData()		SetOutputModeGPIO11()

#define SetVFDStb()				SetPortGPIO10()
#define SetVFDClk()				SetPortGPIO13()
#define SetVFDData()			SetPortGPIO11()

#define ClearVFDStb()			ClrPortGPIO10()
#define ClearVFDClk()			ClrPortGPIO13()
#define ClearVFDData()			ClrPortGPIO11()

#define SetInputMode_VFDData()	SetInputModeGPIO11()
#define GetVFDData()				GetPortGPIO11()
#define SYMMERTRY_TURN  1
#define SHOW_REMAIN_TIME_IN_VFD	1

#if KEYNUM_SAME_AS_NUM_PLUS
UCHAR plus_timer ;
extern UCHAR now_is_plus;
extern BOOL    gFiveplus_flag;
#define TIMER_MAX    25
#endif
#if Test_Mode
extern BOOL flash_lcd;
extern BOOL led_flag;
extern int key_value;
extern int dot;
extern int dotoff;
#endif
	
#ifdef DISC_TYPE_SHOW_MOMENT
#include "All_Event.h"
#include "Resource.h"
extern BOOL is_show_momnet;
 UCHAR type_timer = 1;
#endif
	
#if VFD16312
#define UPD16311_CLOCK_DELAY  		1
#define UPD16311_TW_CLOCK_DELAY 	1
#define DISPLAYMODE							0x02
#define WRITE_AUTO_DISPLAY_COMMAND		0x40
#define WRITE_VFD_ADDRESS_MASK        		0xc0
#define WRITE_FIXED_DISPLAY_COMMAND		0x44
#define CONTROLDISPLAY						0x8f
#define WRITE_LED_PORT_COMMAND			0x41
#define READ_KEY_DATA_COMMAND			0x42
#define READ_SW_DATA_COMMAND			0x43
#define FP_MAX_BUF				13 //0x10
#define KB_KEYSIZE				3
#define NUM_SEGMENT			6	
unsigned char FpKeyBuf[KB_KEYSIZE];
#endif
#if LED1623
#if 0 //1:1623 
#define UPD16311_CLOCK_DELAY  		1
#define UPD16311_TW_CLOCK_DELAY 	1
#define DISPLAYMODE					    		0x03 //0x02
#define WRITE_AUTO_DISPLAY_COMMAND		0x40 //0x40
#define WRITE_VFD_ADDRESS_MASK        		0xc0 //0x80 //0xc0
#define WRITE_FIXED_DISPLAY_COMMAND		0x44 //0x44
#define CONTROLDISPLAY						0x8f//0x8b //0xcb //0x8f
#define WRITE_LED_PORT_COMMAND			0x41
#define READ_KEY_DATA_COMMAND			0x42
#define READ_SW_DATA_COMMAND			0x43
#define CONTROLDISPLAY_OFF             0xc0
#define FP_MAX_BUF				15 //0x10
#define KB_KEYSIZE				1
#define NUM_SEGMENT			10	
unsigned char FpKeyBuf[KB_KEYSIZE];
#else    //1628
#define UPD16311_CLOCK_DELAY  		1
#define UPD16311_TW_CLOCK_DELAY 	1
#define DISPLAYMODE					    0x03 //0x02
#define WRITE_AUTO_DISPLAY_COMMAND		0x40 //0x40
#define WRITE_VFD_ADDRESS_MASK        		0xc0 //0x80 //0xc0
#define WRITE_FIXED_DISPLAY_COMMAND		0x44 //0x44
#define CONTROLDISPLAY					0x8b //0xcb //0x8f
#define WRITE_LED_PORT_COMMAND			0x41
#define READ_KEY_DATA_COMMAND			0x42
#define READ_SW_DATA_COMMAND			0x43
#define CONTROLDISPLAY_OFF             0xc0
#define FP_MAX_BUF				15 //0x10
#define KB_KEYSIZE				3
#define NUM_SEGMENT			10	
unsigned char FpKeyBuf[KB_KEYSIZE];
#endif
#endif
#if HT1621
#define LCD_SYS_EN		0x01	/*turn on system oscillator*/
#define LCD_LCD_ON		0x03	/*trun on LCD bias generator*/
#define LCD_RC_256		0x18	/*on-chip RC oscillator*/
#define LCD_IRQ_DIS		0x80	/*disable IRQ output*/
#define LCD_BIAS        	0x29	/*4COM & LCD 1/3 bias option */

#define LCD_CLOCK_DELAY		5
#define FP_MAX_BUF				0x21
#endif

#define 		TIMER_VALUE_FOR_KEY_SCAN	10

unsigned char FpBuf[FP_MAX_BUF];
unsigned char FpBufBak[FP_MAX_BUF];
unsigned char FpBackupBuf[FP_MAX_BUF];

unsigned char FpDateSize;
typedef struct {
	unsigned char position;
	unsigned char	data;
}VFDDateInfor;

unsigned char VFDRefreshPtr;
VFDDateInfor VFDRefreshStack[FP_MAX_BUF];
SysTimer_t	gTimer_KEY_SCAN;
SysSema_t	gVfd_RWSema;

 unsigned char FpKeyArray[];

//extern void IR_Send_Msg(USHORT IR_Key, SINT Para);
extern S5H_FPCALLBACK AttachedKeySendCallback;
extern S5L_DisplayStdType_t  gOutput_tv_system;
extern UCHAR gAudio_state;

char VfdDiscTurnF;
void VFD_state_init(void);
void VFD_state_scan_key_0(void);
void VFD_state_scan_key_1(void);
void VFD_state_scan_key_2(void);
void VFD_state_scan_key_3(void);
void VFD_state_scan_key_4(void);
void VFD_state_refresh_0(void);
void VFD_state_refresh_1(void);
void VFD_state_refresh_2(void);
void VFD_state_refresh_3(void);
void VFD_state_refresh_4(void);
void VFD_state_refresh_5(void);
typedef 		void (*PFV)(void);	/* Pointer to func. returning void */ 
PFV		VFD_next_state = VFD_state_init;
/******************************************************************************
 *  Function Defines
 ******************************************************************************/

void FP_Delay(unsigned int i)
{
	for(;i>0;i--);
}

void FPClearFp()
{
	unsigned char i;
	
	if(SysGetSema(&gVfd_RWSema,SYS_NO_WAIT ) == SYS_RETURN_SUCCESS )
	{
		for(i=0;i<FP_MAX_BUF;i++){
			FpBuf[i] = 0;
	//		FpBufBak[i] = 0; //zmf
			
		}
		SysReleaseSema(&gVfd_RWSema );
	}
}

void FpMain(UNSIGNED id)
{


	VFD_next_state();

}
void SetVFDTime()
{
	SysSetTimer( &gTimer_KEY_SCAN, "KEY_T", FpMain, 
				0, TIMER_VALUE_FOR_KEY_SCAN, TIMER_VALUE_FOR_KEY_SCAN, TIMER_ENABLE );	
}

void FP_Init( void )
{
	UINT status;
	
	SetOutputMode_VFDStb();
	SetOutputMode_VFDClk();
	SetOutputMode_VFDData();
	SetVFDStb();
	SetVFDClk();
	SetVFDData();

	SetVFDTime();

	status = SysCreateSema(&gVfd_RWSema, "VfdSEMA", 1, SYS_FIFO );
#if SPI_DEBUG_PRINT
	if( status == SYS_RETURN_FAIL )	{
		SysPrintf( "\n Cannot Create semaphore. %s %d", __FILE__, __LINE__ );
	}
#endif	
	
	FPClearFp();
}

void DeInit_FP(void)
{
	VFD_state_init();
	SysKillTimer(&gTimer_KEY_SCAN );
	SysDeleteSema(&gVfd_RWSema );
}

void vfd_dot(unsigned char method,  int vfd_dot)
{
    if(method)
        FpBuf[(unsigned char)(vfd_dot / 8)] |=  (unsigned char)(1 << (vfd_dot % 8));
    else
        FpBuf[(unsigned char)(vfd_dot / 8)] &= (unsigned char)(~(1 << (vfd_dot % 8)));
} 

extern void EI(void);
extern BOOL gOpen_pressed;

void vfd_display_mode(void)
{
	  if ( gOutput_tv_system == DISPLAY_NTSC_M ){
			vfd_dot(VFD_DOT_ON, VFD_DOT_NTSC);   
		    vfd_dot(VFD_DOT_OFF, VFD_DOT_PAL);	
		}else{
		    vfd_dot(VFD_DOT_ON, VFD_DOT_PAL);
		    vfd_dot(VFD_DOT_OFF, VFD_DOT_NTSC);
			}

}

void vfd_audio_channel(void)
{
	#if  PANEL_FUT13 || PANEL_FUT58 || PANEL_FUT297
	    	vfd_dot(VFD_DOT_ON,VFD_DOT_SLASH);
	#endif
  switch(gAudio_state){
  	    case 1:
			vfd_dot(VFD_DOT_ON, VFD_DOT_1L);
			vfd_dot(VFD_DOT_OFF, VFD_DOT_2R);
			break;
		case 2:
			vfd_dot(VFD_DOT_ON, VFD_DOT_2R);
			vfd_dot(VFD_DOT_OFF, VFD_DOT_1L);
			break;
		default:
			vfd_dot(VFD_DOT_ON, VFD_DOT_1L);
			vfd_dot(VFD_DOT_ON, VFD_DOT_2R);
			break;
  	}
  	
}

#if VFD16312

/********************************************************************
							VFD 16312
********************************************************************/
 void ShowVFD(OsdMsg_t  * vfd_msg)
 {
#if 0
 	static unsigned char dot = 0;
 	FPClearFp();								//test front panel
	 FpBuf[dot / 8] |= (1 << (dot % 8));
	 dot ++;
	 if (dot > 0x7f)	dot = 0;	
#else
     	ULONG32	CurrentTime;
   		CurrentTime = VcdGetCurSec();
	switch(vfd_msg->mode){
		case DSP_VCD:
			if(gIsGameCD)
			{
				vfd_dot(VFD_DOT_ON, VFD_DOT_VCD);
				vfd_dot(VFD_DOT_OFF, VFD_DOT_VCD);
     }
     else
			vfd_dot(VFD_DOT_ON, VFD_DOT_VCD);
		
			vfd_dot(VFD_DOT_ON, VFD_DOT_CD);
			//vfd_readtoc();
			VfdDiscTurnF = 0;
			break;			
		case DSP_CDDA:
			//vfd_readtoc();
			vfd_dot(VFD_DOT_ON, VFD_DOT_CD);
			VfdDiscTurnF = 0;
			break;
		case DSP_PLAY:
			vfd_play();
			break;
		case DSP_PAUSE:
			 vfd_pause();
			 VfdDiscTurnF = 0;
			break;
		case DSP_STOP:
			vfd_show_time(gVcdTrackInfo.Total_track_cnt, (gVcdTrackInfo.TrackLBAList[gVcdTrackInfo.Total_track_cnt]-gVcdTrackInfo.TrackLBAList[0])/75);
			VfdDiscTurnF = 0;
			vfd_dot(VFD_DOT_OFF, VFD_DOT_REP1);
			vfd_dot(VFD_DOT_OFF, VFD_DOT_REPALL);
			vfd_dot(VFD_DOT_OFF, VFD_DOT_PLAY);
			vfd_dot(VFD_DOT_OFF, VFD_DOT_PAUSE);
			vfd_dot(VFD_DOT_ON, VFD_DOT_COLON);
			vfd_disc_fill_all();
#if PANEL_FUT58 || PANEL_FUT297 || PANEL_FUT63
			vfd_dot(VFD_DOT_OFF, VFD_DOT_PLAYA);
			vfd_dot(VFD_DOT_OFF, VFD_DOT_PLAYB);
			vfd_dot(VFD_DOT_OFF, VFD_DOT_PGM);
			vfd_dot(VFD_DOT_OFF, VFD_DOT_RAN);
			vfd_dot(VFD_DOT_OFF, VFD_DOT_INTRO);
			vfd_dot(VFD_DOT_OFF, VFD_DOT_SVCD);
			vfd_dot(VFD_DOT_OFF, VFD_DOT_REMAIN);
#endif			
			break;
		case DSP_PREV:
		case DSP_NEXT:
		case DSP_FR:
		case DSP_FF:
		case DSP_SR:
		case DSP_SF:
			vfd_show_time(gVcdTrackInfo.CurrTrack_no , CurrentTime);
			VfdDiscTurnF = 0;
			break;

/*		case DSP_OPEN:
            		FPClearFp();;
            		vfd_open();
			break;*/
		case DSP_REPEAT_TRK:
						vfd_repeatOne();
            //		vfd_dot(VFD_DOT_ON, VFD_DOT_REP1);
			break;
		case DSP_REPEAT_ALL:
            	vfd_repeatAll();
            	//	vfd_dot(VFD_DOT_ON, VFD_DOT_REP1);
            	//	vfd_dot(VFD_DOT_ON, VFD_DOT_REPALL);
			break;
#if _SUPPORT_REPEAT_AB
		case DSP_REPEAT_A:
            		vfd_dot(VFD_DOT_ON, VFD_DOT_PLAYA);
			break;
		case DSP_REPEAT_AB:
            		vfd_dot(VFD_DOT_ON, VFD_DOT_PLAYA);
            		vfd_dot(VFD_DOT_ON, VFD_DOT_PLAYB);
			break;
#endif			
   #if PANEL_FUT58 
    case DSP_INTRO_ON:
 				vfd_dot(VFD_DOT_ON, VFD_DOT_INTRO);
      break;
      case DSP_INTRO_OFF:
 		vfd_dot(VFD_DOT_OFF, VFD_DOT_INTRO);
    break;
    #endif
		case DSP_REPEAT_OFF:
            		vfd_repeatOff();
            		vfd_dot(VFD_DOT_OFF, VFD_DOT_PLAYA);
            		vfd_dot(VFD_DOT_OFF, VFD_DOT_PLAYB);
            	//	vfd_dot(VFD_DOT_OFF, VFD_DOT_REP1);
           		//  vfd_dot(VFD_DOT_OFF, VFD_DOT_REPALL);   
			break;
			   case DSP_DISPLAYMODE:
		    vfd_display_mode();
		     break;
		case DSP_AUDIO:
			 vfd_audio_channel();
			 break;
		case DSP_ON:
			if(PBC_PROGRAM == Vcd_GetPBCState())
			{
			  	vfd_dot(VFD_DOT_ON, VFD_DOT_PGM);
			  	vfd_dot(VFD_DOT_OFF, VFD_DOT_RAN);

			}else if(PBC_RANDOM == Vcd_GetPBCState())
			{
				  vfd_dot(VFD_DOT_OFF, VFD_DOT_PGM);
				  vfd_dot(VFD_DOT_ON, VFD_DOT_RAN);
		  }else
		  {
					vfd_dot(VFD_DOT_OFF, VFD_DOT_PGM);
					vfd_dot(VFD_DOT_OFF, VFD_DOT_RAN);
			}
			break;
		default:
 			if(PBC_PBCON == Vcd_GetPBCState())
	                     vfd_dot(VFD_DOT_ON, VFD_DOT_PBC);
			else if(PBC_NORMAL== Vcd_GetPBCState())
			{
				 vfd_dot(VFD_DOT_OFF, VFD_DOT_PBC);
			   vfd_dot(VFD_DOT_OFF, VFD_DOT_PGM);
					vfd_dot(VFD_DOT_OFF, VFD_DOT_RAN);
			}
		

			break;
	}
	switch(vfd_msg->control)
	{
		case CTRL_UPDATED_TIME:
			vfd_normal_state();
			VfdDiscTurnF = 1;
			break;
		default:
			break;
	}	
#endif
 }

unsigned char ReceiveByte()
{
	unsigned char i,value=0;
	SetInputMode_VFDData();
	SetVFDClk();

	for(i=0;i<8;i++)
	{
		ClearVFDClk();
		FP_Delay(UPD16311_TW_CLOCK_DELAY);
		SetVFDClk();
		FP_Delay(UPD16311_TW_CLOCK_DELAY);
		value<<=1;
		if(GetVFDData())	
			value++;
	}

	return value;
}

void SendByte(unsigned char uctemp)
{
	unsigned char i;
	SetOutputMode_VFDData();
	FP_Delay(UPD16311_TW_CLOCK_DELAY);
		
	for (i = 0; i < 8; i++)
		{
		ClearVFDClk();
		FP_Delay(UPD16311_TW_CLOCK_DELAY);
		
		if(uctemp & 0x01)
			SetVFDData();
		else 
			ClearVFDData();

		FP_Delay(UPD16311_TW_CLOCK_DELAY);
		SetVFDClk();
		uctemp >>= 1;
		FP_Delay(UPD16311_TW_CLOCK_DELAY);
	}
	FP_Delay(UPD16311_TW_CLOCK_DELAY);
}
void SendCmd(unsigned char Cmd)
{
	ClearVFDStb();
	SendByte(Cmd);
	SetVFDStb();
	FP_Delay(UPD16311_TW_CLOCK_DELAY);

⌨️ 快捷键说明

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