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

📄 spi_api.c

📁 三星ic 9980的源代码. 718版.
💻 C
📖 第 1 页 / 共 5 页
字号:
			if(PBC_INTRO==Vcd_GetPBCState())
				vfd_dot(VFD_DOT_ON, VFD_DOT_INTRO);
		       else vfd_dot(VFD_DOT_OFF, VFD_DOT_INTRO);
		       #endif
			        break;
	    	case DSP_NO_DISC:
	    	 	 vfd_nodisc();
	    		 break;
	    	case DSP_UNKNOW_DISC:
			vfd_unknowdisc();
	    		break;
		case DSP_RETURN:
#if _SUPPORT_GAMECD
			if(gIsGameCD){
				vfd_show_time(0, 0);
				VfdDiscTurnF = 1;
			}
#endif	 
        case DSP_DISPLAYMODE:
		    vfd_display_mode();
		     break;
		case DSP_AUDIO:
			 vfd_audio_channel();
			 break;
		case DSP_3D_CLASSIC:
		           break;
		case DSP_3D_JAZZ:
			break;
		default:
#if _SUPPORT_GAMECD
			if(!gIsGameCD)
#endif
			{
 				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;
	}
#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);
}
 
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;
	//VFD_next_state = VFD_state_refresh_0;
}
void VFD_state_scan_key_0()
{
	ClearVFDStb();
	FpDateSize = KB_KEYSIZE;
	SendByte(READ_KEY_DATA_COMMAND);
	VFD_next_state = VFD_state_scan_key_1;
}
void VFD_state_scan_key_1()
{
	FpKeyBuf[KB_KEYSIZE - FpDateSize] = ReceiveByte();
	VFD_next_state = VFD_state_scan_key_2;
}
void VFD_state_scan_key_2()
{
	if(--FpDateSize)
		VFD_state_scan_key_1();
	else{
		SetVFDStb();
		VFD_state_scan_key_3();
	}

}
void VFD_state_scan_key_3()
{
	static unsigned char OldIndex = 0;
	unsigned char index ;
	unsigned char key_function_data;

	index = FPGetKeyIndex();
	if(OldIndex!=index){
		OldIndex = index;
		#if Test_Mode
		key_value=index;
		#endif
		if(index){
#if 	SPI_DEBUG_PRINT
			SysPrintf("\n FpGet Index = 0x%02X",index);
#endif
			key_function_data = FpKeyArray[index];       
#if 0 //SEPERATE_PLAY_PAUSE
			if(key_function_data == KEY_PLAY){
				if(GetDiscType() == MP3_DISC){
					if( !(Mp3_GetMain()!= MP3_PLAY) || (gMp3Status.trick != MP3_TRICK_OFF) )
						key_function_data = KEY_PAUSE;
				}else{
					if( (Vcd_GetMainState() == MAIN_PLAY) && ( Vcd_GetSub2State() <= SUB2_TRICK_STEP) )
						key_function_data = KEY_PAUSE;
				}
			}
#endif			
			if(key_function_data!= KEY_NULL)				
//				IR_Send_Msg(key_function_data, 0);
				(*AttachedKeySendCallback)( key_function_data, 0 );	
		}		
	}
	OldIndex = index;
	if(bEnRefreshVfd)
	VFD_next_state = VFD_state_refresh_0;
	else
		VFD_next_state = VFD_state_scan_key_0;
}
void VFD_state_scan_key_4()
{
	
}
void VFD_state_refresh_0()
{
	unsigned char i,j;
	VFDRefreshPtr = 0;
	for (i = 0; i <FP_MAX_BUF; i++)
	{    	
		if(FpBuf[i] != FpBufBak[i] ){
			FpBufBak[i] =  FpBuf[i];
			VFDRefreshPtr ++;
			j = VFDRefreshPtr;
			VFDRefreshStack[j].position = i;
			VFDRefreshStack[j].data = FpBuf[i];				
		}		
	}

	if(VFDRefreshPtr){
		VFD_next_state = VFD_state_refresh_1;
	}else
		VFD_next_state = VFD_state_refresh_5;	
}
void VFD_state_refresh_1()
{
	SendCmd(DISPLAYMODE);
	VFD_next_state = VFD_state_refresh_2;
}
void VFD_state_refresh_2()				//command1
{
	SendCmd(CONTROLDISPLAY);
	VFD_next_state = VFD_state_refresh_3;
}
void VFD_state_refresh_3()				//command2
{ 
	SendCmd(WRITE_FIXED_DISPLAY_COMMAND);
	//ClearVFDStb();
	VFD_next_state = VFD_state_refresh_4;
	
}
void VFD_state_refresh_4()				//address
{
	for( ;VFDRefreshPtr>0; VFDRefreshPtr--){
		ClearVFDStb();
		SendByte(WRITE_VFD_ADDRESS_MASK|VFDRefreshStack[VFDRefreshPtr].position);
		SendByte(VFDRefreshStack[VFDRefreshPtr].data);
		SetVFDStb();
	}
	VFD_next_state = VFD_state_refresh_5;
}
	
void VFD_state_refresh_5()
{
#if Test_Mode
int i;
  if(flash_lcd)
  	{
			for (i = 0; i < FP_MAX_BUF; i++)
			{
				ClearVFDStb();
				SendByte(WRITE_VFD_ADDRESS_MASK|i);
			SendByte(0xff); 
				SetVFDStb();
}
  	}
   else 
   	{
   	if(!led_flag)
   		{		
			for (i = 0; i < FP_MAX_BUF; i++)
			{	
				ClearVFDStb();
				SendByte(WRITE_VFD_ADDRESS_MASK|i);
			SendByte(0); 
				SetVFDStb();
			FpBuf[i] = 0;
			led_flag=TRUE;
			}
}
	else	
      	vfd_dot(1,dot);
			}
#else
	if(VfdDiscTurnF)
		{
		if(OsdGetStatus() == DSP_PROG)		
			vfd_normal_state();
		vfd_disc_turn(2);                                                
		}
#endif
	VFD_next_state = VFD_state_scan_key_0;
	
}

/***************************************************************************
 *                         VFD MODULE                                                                                     *
 ****************************************************************************/


BYTE vfd_adddress[7][7]=
{	
	{VFDA_P0_A,VFDA_P0_B,VFDA_P0_C,VFDA_P0_D,VFDA_P0_E,VFDA_P0_F,VFDA_P0_G},
	{VFDA_P1_A,VFDA_P1_B,VFDA_P1_C,VFDA_P1_D,VFDA_P1_E,VFDA_P1_F,VFDA_P1_G},
	{VFDA_P2_A,VFDA_P2_B,VFDA_P2_C,VFDA_P2_D,VFDA_P2_E,VFDA_P2_F,VFDA_P2_G},
	{VFDA_M0_A,VFDA_M0_B,VFDA_M0_C,VFDA_M0_D,VFDA_M0_E,VFDA_M0_F,VFDA_M0_G},
	{VFDA_M1_A,VFDA_M1_B,VFDA_M1_C,VFDA_M1_D,VFDA_M1_E,VFDA_M1_F,VFDA_M1_G},
	{VFDA_S0_A,VFDA_S0_B,VFDA_S0_C,VFDA_S0_D,VFDA_S0_E,VFDA_S0_F,VFDA_S0_G},
	{VFDA_S1_A,VFDA_S1_B,VFDA_S1_C,VFDA_S1_D,VFDA_S1_E,VFDA_S1_F,VFDA_S1_G},
};

void print_vfd_msg(unsigned char no, unsigned char data)
{
	BYTE i;
	if(SysGetSema(&gVfd_RWSema,SYS_NO_WAIT ) == SYS_RETURN_SUCCESS )
	{

	
	for(i=0;i<7;i++)
	{
		vfd_dot(VFD_DOT_OFF,vfd_adddress[no][i]);	//clear former data
		if((vfd_digit[data]>>i)&0x01)
		{
			vfd_dot(VFD_DOT_ON,vfd_adddress[no][i]);	//light coresponding dot
		}
	}

   		SysReleaseSema(&gVfd_RWSema );
   	}
}
#if LED1623_MODUL_1
#define MAX_DISC_DOT 8
const BYTE vfd_disc[MAX_DISC_DOT] = {9,25,89,105,57,41,73,106};
#endif
#if LED1623_MODUL_2
#define DD1	(1)     
#define DD2	(17)    
#define DD3	(97)    
#define DD4	(33)    
#define DD5	(81)    
#define DD6	(66)    
#define DD7	(82)    
#define DD8	(84)    
#define DD9	(65)    
#define DD10	(51)    
#define DD11	(83)    
#define DD12	(3)     
#define DD13	(99)    
#define DD14	(100)   

#define MAX_DISC_DOT 14
const BYTE vfd_disc[MAX_DISC_DOT] = {
	 DD1,DD2,DD3,DD4,DD5,DD6,DD7,DD8,DD9,DD10,DD11,DD12,DD13,DD14
};
#endif
#if LED1623_MODUL_3
#define MAX_DISC_DOT 6
const BYTE vfd_disc[MAX_DISC_DOT] = {23,39,71,58,103,87};
#endif
#if LED1623_MODUL_4
#define MAX_DISC_DOT 6
const BYTE vfd_disc[MAX_DISC_DOT] = {86,22,38,70,54,102};
#endif


void vfd_disc_turn(BYTE mode)
{
     static BYTE j=0;
     BYTE i=0;
     for(i=0;i<MAX_DISC_DOT;i++)
     {
     	if((mode==1)||(mode==2))
		    vfd_dot(VFD_DOT_ON,vfd_disc[i]);	
		else
			vfd_dot(VFD_DOT_OFF,vfd_disc[i]);
     }
     if (mode==2) 
     {    		
		vfd_dot(VFD_DOT_OFF,vfd_disc[j++]);
		if(j>=MAX_DISC_DOT)		
			j=0;

     		vfd_dot(VFD_DOT_ON,VFD_DOT_DOTS);
  #if LED1623_MODUL_2
     		vfd_dot(VFD_DOT_ON,VFD_DOT_DOTM);
  #endif
  #if LED1623_MODUL_4
       vfd_dot(VFD_DOT_ON, VFD_DOT_DOTM);
	   vfd_dot(VFD_DOT_ON, VFD_DOT_DOTS);
  #endif 
     }
}

void vfd_open(void)
{
    FPClearFp();
    print_vfd_msg(3, CHAR_O);
    print_vfd_msg(4, CHAR_P);
    print_vfd_msg(5, CHAR_E);
    print_vfd_msg(6, CHAR_N);
    VfdDiscTurnF=0;	
}

void vfd_close(void)
{
    FPClearFp();
    print_vfd_msg(2, CHAR_C);
    print_vfd_msg(3, CHAR_L);
    print_vfd_msg(4, CHAR_O);
    print_vfd_msg(5, CHAR_S);
    print_vfd_msg(6, CHAR_E);
    VfdDiscTurnF=0;
}

void vfd_show_stop(void)
{
   ULONG32 total_sec;
   Time_t   totaltime;
     total_sec=(gVcdTrackInfo.TrackLBAList[gVcdTrackInfo.Total_track_cnt]-gVcdTrackInfo.TrackLBAList[0])/75;
    
	#if LED1623_MODUL_4
	 // totaltime.hour = total_sec/3600;
    // totaltime.min = total_sec%3600/60;
    // totaltime.sec=total_sec%3600%60;
     print_vfd_msg(1, gVcdTrackInfo.Total_track_cnt/10);
     print_vfd_msg(2, gVcdTrackInfo.Total_track_cnt%10); 
     print_vfd_msg(3, (total_sec/60) / 10);
     print_vfd_msg(4, (total_sec/60) % 10);
     print_vfd_msg(5, (total_sec%60) / 10);
     print_vfd_msg(6, (total_sec%60) % 10);
	#else
     
     totaltime.hour = total_sec/3600;
     totaltime.min = total_sec%3600/60;
     totaltime.sec=total_sec%3600%60;
    // print_vfd_msg(1, total_sec/60);
     print_vfd_msg(2,  totaltime.hour); 
     print_vfd_msg(3, totaltime.min / 10);
     print_vfd_msg(4, totaltime.min % 10);
     print_vfd_msg(5, totaltime.sec / 10);
     print_vfd_msg(6, totaltime.sec % 10);
    #endif 
}

void vfd_nodisc(void)
{
#if 1  //HTS 3303
    print_vfd_msg(1, CHAR_N);
    print_vfd_msg(2, CHAR_O);
    print_vfd_msg(3, CHAR_D);
    print_vfd_msg(4, CHAR_I);
    print_vfd_msg(5, CHAR_S);
    print_vfd_msg(6, CHAR_C);
#else
     //print_vfd_msg(1, CHAR_N);
    print_vfd_msg(2, CHAR_N);
    print_vfd_msg(3, CHAR_O);
    print_vfd_msg(4, CHAR_D);
    print_vfd_msg(5, CHAR_I);
    print_vfd_msg(6, CHAR_S);
#endif
}
void vfd_unknowdisc(void)
{
    print_vfd_msg(1, CHAR_U);
    print_vfd_msg(2, CHAR_N);
    print_vfd_msg(3, CHAR_D);
    print_vfd_msg(4, CHAR_I);
    print_vfd_msg(5, CHAR_S);
    print_vfd_msg(6, CHAR_C);
}

void vfd_show_time(USHORT track , ULONG32 time)
{
    	unsigned char cd_disp_trk,cd_disp_hh,cd_disp_mm,cd_disp_ss;
    	ULONG32	CurrentTime;

    	CurrentTime = time;
		#if LED1623_MODUL_4 //HTS 3303
		 print_vfd_msg(1, track / 10);
         print_vfd_msg(2, track % 10);
		 print_vfd_msg(3, (CurrentTime/60) / 10);
         print_vfd_msg(4, (CurrentTime/60) % 10);
         print_vfd_msg(5, (CurrentTime%60) / 10);
         print_vfd_msg(6, (CurrentTime%60) % 10);
		#else
	cd_disp_hh =  (unsigned char) (CurrentTime/3600);
	cd_disp_mm =  (unsigned char) ((CurrentTime%3600)/60);
	cd_disp_ss =  (unsigned char) (CurrentTime%60);
	
    	cd_disp_trk = (unsigned char) track;
#if LED1623_MODUL_1
        print_vfd_msg(1, cd_disp_trk / 10);
        print_vfd_msg(2, cd_disp_trk % 10);
#endif
#if LED1623_MODUL_2
        print_vfd_msg(1, cd_disp_hh / 10);
        print_vfd_msg(2, cd_disp_hh % 10);
#endif
	 //print_vfd_msg(4, CHAR_SPACE);
        print_vfd_msg(3, cd_disp_mm / 10);
        print_vfd_msg(4, cd_disp_mm % 10);
        print_vfd_msg(5, cd_disp_ss / 10);
        print_vfd_msg(6, cd_disp_ss % 10);
		#endif
		
}



void vfd_normal_state(void)
{
    	ULONG32	CurrentTime;
	    	CurrentTime = VcdGetCurSec();
            	vfd_show_time(gVcdTrackInfo.CurrTrack_no,CurrentTime);
            	//vfd_dot(VFD_DOT_ON,VFD_DOT_MINUS);
             	//vfd_dot(VFD_DOT_ON,VFD_DOT_PLAY);
             	//vfd_dot(VFD_DOT_OFF,VFD_DOT_PAUSE);
}
void vfd_readtoc(void)
{
	   FPClearFp();

	  //print_vfd_msg(6, CHAR_DASH);
       print_vfd_msg(2, CHAR_C);
       print_vfd_msg(3, CHAR_L);
       print_vfd_msg(4, CHAR_O);

⌨️ 快捷键说明

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