📄 ircmd.c
字号:
/*
** FILE
** ircmd.c
**
** DESCRIPTION
** splitted from ir.c, now all the IR (or global) functions
** are implemented here.
**
*/
#include "config.h"
#include "regmap.h"
#include "user_init.h" //ZHX 071203
#include "global.h"
#include "macro.h"
//#include "cfont.h"//no used
#include "mon.h"
#include "dsa.h"
#include "util.h"
#include "func.h"
#include "epp.h"
#include "sio.h"
#include "vfd.h"
#include "ir.h"
#include "ircmd.h"
//#include "ircode.h"
#include "cd.h"
#include "osd.h"
#include "cdfunc.h"
#include "osdutil.h"
#include "auctrl.h"
#include "avapi.h"
#include "fifo.h"
#include "vfd.h"
#include "memmap.h"
#include "fs9660.h" //wyf reduce warning.
#include "cpu.h"
////#include "servo.h"
#include "gpio.h"
#include "iop.h"
#include "framebuf.h"
#ifdef SUPPORT_ESP
#include "servo.h"
#endif
//in vfd_turnkey2.h
extern void UI_show_trk(BYTE mode);
extern void vfd_stop(void); //ZHX 032803
//in mp3common.c
extern int mp3_abv_bitstream_size(void);
//in sysmain.c
extern void ShowTitle(void);
#ifdef VOLUME_OSD32
UINT8 vol2x_flag;
UINT8 zhx_volume = VOL_VALUE *2;
#else
UINT8 zhx_volume = VOL_VALUE;
#endif
#ifdef VFDVOL_DISPLAY
extern void vfd_vol_display(BYTE);
#endif
#ifdef IR_BOOK_MARK
UINT32 bookmark_msf[MAX_BOOKMARK_CNT];
BYTE bookmark_trk[MAX_BOOKMARK_CNT];
BYTE bookmark_index=0,bookmark_select=0;
#endif
#ifdef COMPRESS_MODULE
extern UINT16 IsMp3DrvLoad(void);
extern void LoadPrevProgDrv(void);
extern void LoadSetupDrv(void);
#endif
//extern UINT16 Dir_entry[MAX_DIR_CNT]; //zhg 2002/09/25 17:22
#if (VFD_DRIVER==SPL10) //zhg 2002/10/16 18:53
extern BYTE key_long_press;
BYTE Select_Dir_flag = 0; //zhg 2002/09/26 13:50
BYTE Mp3DirSelNum = 0; //zhg 2002/09/26 13:50
BYTE gbSegUMask = 0; //zhg 2002/10/22
UINT16 OldEspTime = 0; //zhg 2002/10/22
#endif
//#define MONE_IRCMD
//#define MONE_IR_SELECT
//#defune MONE_CONFIG_PLAY_MODE
//#define MONE_CDDA_ESP
//#define MONE_VCD_ESP
#ifdef POWER_KEY //ZHX 032903
extern void Servo_init(void);
extern void ShowTitle(void);
extern void enable_video(void);
extern void disable_video(void);
extern int clrFrameBuffer(UINT32 bitmask);
#endif
/********************************************************************/
/* EXPORT FUNCTIONS */
/********************************************************************/
//in sysmain.c
void InitVar(void); //wyf reduce warning.
void select_sysFS(BYTE);
void DispDiscTite(BYTE );
/********************************************************************/
/* FUNCTION PROTOTYPE */
/********************************************************************/
//#ifdef SUPPORT_MP3_FORWARD
void Mp3_ChkSkipData(void);
//#endif
/********************************************************************/
/* LOCAL DEFINITIONS */
/********************************************************************/
/********************************************************************/
/* PRIVATE FUNCTIONS */
/********************************************************************/
/*
** FUNCTION
**
** DESCRIPTION
**
*/
void invalid_key(void)
{
////if(!IsKYNorm()) UISetKYNorm();//jhuang 2002/3/13 mark
#ifdef USE_PP5_KEY
pp5_flag = 0;
#endif
#ifdef DIGITAL_DIRECT_SELECT
direct_prog = 0;
prog_digital = 0;
direct_time = 0;
direct_p5_time = 0;
direct_p10_time = 0;
direct_p5_flag = 0;
direct_p10_flag = 0;
#endif
PrintOsdMsg(STR_OS_NO, REGION1, 1, 0, CH_N);
}
/*
** FUNCTION
**
** DESCRIPTION
**
*/
UINT32 ircmd_callback_check_generic(UINT32 func)
{
return func;
}
/*
** FUNCTION
** polling_ir
**
** DESCRIPTION
** polling IR interface and store received IR command
** to IR receive queue
*/
#ifndef DIGITAL_DIRECT_SELECT
static
#endif
BYTE ircmd_post_func(UINT32 func)
{
if(ircmd_callback_check == NULL)
ircmd_callback_check = ircmd_callback_check_generic;
func = ircmd_callback_check(func);
if(func == 0)
{
ir_select_number = 0;
invalid_key();
#ifdef MONE_IR_SELECT
epp_write_wait("Post Invalid Key\n");
#endif
//PrintOsdMsg(STR_OS_NO,REGION1,1,0,CH_N);
return C_FALSE;
}
else
{
if(cd_type_loaded == CDROM)
e_msf = 0;
if(GetIntrMask() & INTR_IRKEY)
{
#ifdef MONE_IR_SELECT
epp_write("INTR_IRKEY ..\n");
#endif
SetIntrFlag(GetIntrFlag() | INTR_IRKEY);
}
AVD_SetMediaTimeout(); // Joseph 20021114 roll back to previous setting
//JJDing,for IR sensitity
//JJDing 20021111 modify for pressing Return -> Macroblocking
/*if(func == (CMD_FUNC|CMD_FUNC_PBC))
AVD_SetMediaInterrupt();
else
AVD_SetMediaTimeout(); */
PostCommand(func);
#ifdef SUPPORT_MP3_BUFFER_FULL_STOP
if(cd_type_loaded==CDROM)
Gmem.gmp3.trk_inbuf=0;
#endif
return C_TRUE;
}
}
/*
** FUNCTION
**
** DESCRIPTION
**
*/
void config_play_mode(BYTE flag) //jhuang reduce 2002/4/11
{
ClrKYGoto();
#ifdef IR_INTRO_ON
intro_osd_flag=0; //ZHX 032903
#endif
if(flag == CLEAR_ALL) //clear all flag
{
UISetKYNorm();
UISetRepABMode(REPEAT_AB_IDLE); //clear repeat A&B
UISetRepMode(REPEAT_IDLE); //clear repeat 1 &all
UISetProgState(PROG_IDLE); //clear program state
ClrKYRand(); //wyf add 2-4-27 13:32.
#if VFD_DRIVER==SPL10 //zhg 2002/10/16
UISetNMNorm(); //zhyf for lcd mode shift 2-9-26 23:27
#endif
#ifdef MONE_CONFIG_PLAY_MODE
epp_write_wait("[config_play_mode]:CLEAR_ALL\n");
#endif
}
else if(flag == RESUME)
{
ClrKYRand(); //clear random key
UISetRepABMode(REPEAT_AB_IDLE); //clear repeat A&B
UISetRepMode(REPEAT_IDLE); //clear repeat 1 &all
#ifdef MONE_CONFIG_PLAY_MODE
epp_write_wait("[config_play_mode]:RESUME\n");
#endif
}
else if(flag == REPEAT_ALL) //keep repeat value
{
if(!CheckUIRep(REPEAT_IDLE))
UISetRepMode(REPEAT_IDLE); //clear repeat 1 &all
//if((rep_mode!=REPEAT_IDLE)&&(repeat==REP_NONE_SEL))
//{
// rep_mode=REPEAT_IDLE;
//}
#ifdef MONE_CONFIG_PLAY_MODE
epp_write_wait("[config_play_mode]:REPEAT_ALL\n");
#endif
}
else if(flag == REPEAT_AB)
{
ClrKYRand();
UISetRepABMode(REPEAT_AB_IDLE); //clear repeat A&B
//shuffle_flag=0;
//rep_ab_mode=REPEAT_AB_IDLE; //keep rep_mode
#ifdef MONE_CONFIG_PLAY_MODE
epp_write_wait("[config_play_mode]:REPEAT_AB\n");
#endif
}
#ifdef IR_SHUFFLE_ON
else if(flag == SHUFFLE)
{
//UISetKYRand();
UISetRepABMode(REPEAT_AB_IDLE); //clear repeat A&B
//zhyf test mark it for shift mode 2-9-26 23:20
//UISetRepMode(REPEAT_IDLE); //clear repeat 1 &all
#ifdef MONE_CONFIG_PLAY_MODE
epp_write_wait("[config_play_mode]:SHUFFLE\n");
#endif
}
#endif
#ifdef IR_GOTO_ON
else if(flag == GOTO)
{
UISetKYGoto();
digit_cnt = 0;
goto_time = 0;
goto_min = 0;
goto_sec = 0;
#ifdef MONE_CONFIG_PLAY_MODE
epp_write_wait("[config_play_mode]:GOTO\n");
#endif
}
#endif
#ifdef IR_PROG_ON
else if(flag == PROGRAM)
{
ClrKYRand();
ProgIndx = 1;
prog_state = PLAY_PROGRAM;
UISetRepABMode(REPEAT_AB_IDLE); //clear repeat A&B
UISetRepMode(REPEAT_IDLE); //clear repeat 1 &all
#ifdef MONE_CONFIG_PLAY_MODE
epp_write_wait("[config_play_mode]:PROGRAM\n");
#endif
}
#endif
else
{
ClrKYRand(); //shuffle_flag=0;
#ifdef MONE_CONFIG_PLAY_MODE
epp_write_wait("[config_play_mode]:ELSE\n");
#endif
}
}
/*
** FUNCTION
**
** DESCRIPTION
**
*/
void goto_func_input(void) //jhuang reduce 2002/4/11
{
int goto_ff;
/* Consider 10 as 0 key */
if(ir_select_number == 10)
ir_select_number = 0;
#ifdef P3_IN_P5 //ZHX 082603 FOR XHD
if(ir_select_number == 11)
ir_select_number = 3;
#else
if(ir_select_number == 11)
ir_select_number = 5;
#endif
#ifdef DIGITAL_DIRECT_SELECT
if(ir_select_number == 1 && direct_p10_flag) {
ir_select_number = 0;
direct_p10_flag = 0;
}
#endif
digit_cnt++;
if(digit_cnt == 1)
{
goto_min = ir_select_number << 4;
//show_goto(digit_cnt);//reduce 11
}
else if(digit_cnt == 2)
{
goto_min |= ir_select_number;
//show_goto(digit_cnt);//reduce 11
}
else if(digit_cnt == 3)
{
if(ir_select_number > 5)
digit_cnt--;
else
goto_sec = ir_select_number << 4;
//show_goto(digit_cnt);//reduce 11
}
else if(digit_cnt == 4)
{
goto_sec |= ir_select_number;
/* Second has to be truncated down to 59!! */
if(goto_sec > 0x59)
goto_sec = 0x59;
if(cd_type_loaded == CDSVCD)
goto_time =
(bcd2bin(goto_min) + msf_mm(gettrkmsf(cd_trk_lo_now))) * 60 +
bcd2bin(goto_sec) + msf_ss(gettrkmsf(cd_trk_lo_now) / 2);
else
goto_time =
(bcd2bin(goto_min) + msf_mm(gettrkmsf(cd_trk_lo_now))) * 60 +
bcd2bin(goto_sec) + msf_ss(gettrkmsf(cd_trk_lo_now));
goto_time = MSF((goto_time / 60), (goto_time % 60), 0);
if((goto_min == 0) && (goto_sec == 0))
goto_time = gettrkmsf(cd_trk_lo_now) & 0x00ffffff;
//JJDing 2002/05/07
//We received Q-code at 2X speed
#if CONFIG==CONFIG_COMBO_SVCD
if(cd_type_loaded == CDSVCD)
goto_ff = M2I(goto_time << 1);
else
#endif
goto_ff = M2I(goto_time);
//disc_time = M2I(gettrkmsf_leadout());
ClrKYGoto(); //reduce 11
if((goto_ff > disc_time + M2I((int)gettrkmsf(cd_trk_lo_now))) ||
(goto_ff < leadin_time))
{
invalid_key(); //zhyf goto cancel2-4-27 13:24
//ClrKYGoto();//reduce 11
return; //reduce 11
}
else
{
//jjding
//release FF/FB state when Goto New Address
Chg2PlayMd(); //jhuang 2002/4/11 mark //if(IsUIStateSearch()) Search(0);
//show_goto(digit_cnt);//reduce 11
ircmd_post_func(CMD_FUNC | CMD_FUNC_GOTO);
//To skip I,P,B frame,JJDing
GotoSkipFrm = 4;
#ifdef MONE_IRCMD
psprintf(linebuf, "GOTO %x:%x\n", goto_min, goto_sec);
epp_write_wait(linebuf);
#endif
}
//ClrKYGoto();//reduce 11
}
show_goto(digit_cnt); //reduce 11
}
/*
** FUNCTION
**
** DESCRIPTION
**
*/
static void ircmd_select_number(BYTE num)
{
#ifndef DIGITAL_DIRECT_SELECT
UINT16 tmp_num;
#endif
BYTE Res;
#ifdef MONE_IR_SELECT
psprintf(linebuf, "IR SELECT %x\n", num);
epp_write_wait(linebuf);
#endif
#if 0 //def SUPPORT_JPG
//charles 2002/9/23 invalid ircmd_select_number when jpg slide show
if((Gmem.gmp3.gifsFunc == FS_FUNC_JPEG) && Gmem.gmp3.gifsSlide &&
!Gmem.gmp3.gifsStatic)
{
invalid_key();
return;
}
#endif
//if (CheckUIProgState (PLAY_PROGRAM))//2-6-16 jhuang mark due to irdef.h
// ircmd_cancel (PROG_CNL);
#ifdef SUPPORT_ESP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -