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