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

📄 spi_api.c

📁 三星ic 9980的源代码. 718版.
💻 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
 * 
 *****************************************************************************/
   
 
/******************************************************************************
 *   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"
//#define display_mode1
//#define Boom_box
#ifdef Boom_box
#include "function.h"
#endif

extern BOOL 	gTrkSelectEnd_flag ;
extern DspStatus_t OsdGetStatus(void);
/***************************************************************************
 *                         VFD driver
 ****************************************************************************/
 BOOL bEnRefreshVfd = TRUE;

#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()

#if Test_Mode
extern BOOL flash_lcd;
extern BOOL led_flag;
extern UINT key_value, dot;
#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				14 //0x10
#define KB_KEYSIZE				2
#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_BIAS        	0x24
#define LCD_CLOCK_DELAY		16
#define FP_MAX_BUF				0x21
#define LCD_COMMAND         0x04  // lcd command mode
#define LCD_WRITE           0x05   // lcd write mode
#define LCD_NORMAL          0xe3    //normal
#define LCD_OFF_TONE        0x08    // turn off tone output
#define DIS_TBT             0x04    //normal
#define DIS_WDT             0x05    // turn off tone output

#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;
#if Mp3_Total
extern USHORT	gMp3TotalFile;
#endif
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);
#ifdef display_mode1
void VFD_state_refresh_01_plugin(void);
#endif
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;
		}
		SysReleaseSema(&gVfd_RWSema );
	}
}
#if Five_5plus
extern BOOL  gFiveplus_flag;
extern UCHAR Fivetimer;
extern void KeyMsgSender(UINT data, void * param);
#endif

#ifdef Boom_box
extern void KeyMsgSender(UINT data, void * param);
extern BOOL	bIs_Closed;
extern BOOL Is_close_flag;
extern BOOL First_time;
#endif
void FpMain(UNSIGNED id)
{

	 VFD_next_state();  //POWL VFD ON/FF if block , off

#if Five_5plus
     if(gFiveplus_flag)
     	{
	   	Fivetimer--;
	   if(Fivetimer==0)
	     KeyMsgSender(KEY_NUM0, 0 );
     	}
#endif

}
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();
#ifdef Boom_box
      if(Check_CLOPSW())
      	{
	  	Is_close_flag=FALSE;
	      KeyMsgSender(KEY_OPEN_CLOSE, 0 );
      	}
	  else
	  	Is_close_flag=TRUE;
	  First_time = FALSE;
#endif
	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)
{
  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;
  	}
  	
}

void vfd_pause(void)
{
        VfdDiscTurnF = 0;
    	vfd_dot(VFD_DOT_ON, VFD_DOT_PAUSE);
    	vfd_dot(VFD_DOT_OFF, VFD_DOT_PLAY);
}
void vfd_play(void)
{        
        VfdDiscTurnF = 1;
    	vfd_dot(VFD_DOT_OFF, VFD_DOT_PAUSE);
    	vfd_dot(VFD_DOT_ON, VFD_DOT_PLAY);
}


#if VFD16312
/********************************************************************
							VFD 16312
********************************************************************/
 void ShowVFD(OsdMsg_t  * vfd_msg)
 {
 
     	ULONG32	CurrentTime;
	CurrentTime = VcdGetCurSec();
	switch(vfd_msg->mode){
		case DSP_VCD:
			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_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);
			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_dot(VFD_DOT_ON, VFD_DOT_REP1);
			break;
		case DSP_REPEAT_ALL:
            		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			
		case DSP_REPEAT_OFF:
            		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_ON:
			if( PBC_PROGRAM == Vcd_GetPBCState())
				vfd_dot(VFD_DOT_ON, VFD_DOT_PGM);
			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);
			break;
	}
	switch(vfd_msg->control)
	{
		case CTRL_UPDATED_TIME:
			vfd_normal_state();
			VfdDiscTurnF = 1;
			break;
		default:
			break;
	}	

 }

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);
}

void ReadKeyData(unsigned char* scanData,unsigned char size)
{
	unsigned char i;
	ClearVFDStb();
	SendByte(READ_KEY_DATA_COMMAND);
	for (i = 0; i < size; i++)
	{
		scanData[i] = ReceiveByte();
	}
	SetVFDStb();
}
unsigned char FPGetKeyIndex( void )
{
	unsigned char i, j,mask;
	unsigned char temp;									
	ReadKeyData(FpKeyBuf,KB_KEYSIZE);
	for (i=0; i<KB_KEYSIZE; i++)
	{
		if(FpKeyBuf[i]){
			mask = 0x01;
			for (j=0; j<8; j++)
			{
				if (FpKeyBuf[i] & mask)
				{
					temp = ((i<<3)+j)+1;
					return temp;			
				}
				mask<<=1;
			}
		}
	}
	return 0;
}
void VFD_state_init()
{
	unsigned char i;
//command 1
	SendCmd(DISPLAYMODE);
//command 2
	SendCmd(WRITE_AUTO_DISPLAY_COMMAND);
	ClearVFDStb();
//command 3
	SendByte(WRITE_VFD_ADDRESS_MASK);
//data 0..size-1
	for (i = 0; i < FP_MAX_BUF; i++)
	{    	
		FpBuf[i] = FpBufBak[i] = 0;
		SendByte(0x00);
	}

	SetVFDStb();
//command 4
	SendCmd(CONTROLDISPLAY);
#if !Test_Mode
	vfd_readtoc();
#endif
	VFD_next_state = VFD_state_scan_key_0;
}

void VFD_state_scan_key_0()
{

⌨️ 快捷键说明

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