📄 po4tact.c
字号:
#endif
po_select; /* Video output mode selection */
PRIVATE int usrCmd = 0; /* For download debugging */
PRIVATE unsigned int last_voice_clock; /* last time voice in */
PRIVATE int prev_audio_mode;/* previous audio mode before *
* turn on vocal assist */
PRIVATE unsigned int fast_key_num; /* number of FF/FB remote key *
* sent out between two I frames*/
PRIVATE unsigned int timerSetA = -1; /* When do we enter 'SET A'. *
* For most loader, if 'SET A' *
* and 'SET B' are too clase, *
* 'SET B' is ignored. */
PRIVATE unsigned char vocal_assist_on = 0; /* vocal assist switch */
PRIVATE unsigned char fast_key; /* FF or FB */
PRIVATE char kptAudioLevel; /* audioLevel before mute */
PRIVATE char stRep = 0; /* Repeat state *
* 0: repeat off *
* 1: repeat 1 *
* 2: repeat all */
PRIVATE char stRepAB = 0; /* Repeat A to B state *
* 0: repeat off *
* 1: set A *
* 2: repeat A to B */
PRIVATE char stRem = 0; /* Front panel timing info *
* 0: track time *
* 1: single remain *
* 2: total remain */
PRIVATE char cntTen = 0; /* How many 10+ */
PRIVATE char stOpen = 0; /* 0: close; 1: open */
/*
* 17 levels for vcx_audio_volume [16..0]. 16 is the normal case (i.e.
* maximum volume is normal, and one can only decrease the volume to
* avoid clipping of data.
*
* Please refer to tact.h in terms of how this table is interpretated.
*/
#define AUDIO_MIN 0
#define AUDIO_MAX 16
#define AUDIO_INIT 16
#define AUDIO_BUFSZ (((AUDIO_MAX-1)/2) + 5) /* "<level><space><digits>" */
PRIVATE unsigned short vcxVolume[] = {
0x0000, /* 0 */
0x0101, /* 1/16 */
0x0202, /* 2/16 */
0x0303, /* 3/16 */
0x0404, /* 4/16 */
0x0505, /* 5/16 */
0x0606, /* 6/16 */
0x0707, /* 7/16 */
0x0808, /* 8/16 */
0x0909, /* 9/16 */
0x0a0a, /* 10/16 */
0x0b0b, /* 11/16 */
0x0c0c, /* 12/16 */
0x0d0d, /* 13/16 */
0x0e0e, /* 14/16 */
0x0f0f, /* 15/16 */
0x1010, /* 16/16 */
};
IMPORT int vcx_prevent_overflow;
/************************************************************************
* Private functions. *
************************************************************************/
PRIVATE void debugOsd(unsigned short);
PRIVATE int detectPause(void);
PRIVATE int detectPlay(void);
PRIVATE int detectState(void);
PRIVATE void delayQuarterSec(void);
PRIVATE void digest2Normal(void);
PRIVATE void irSendSelect(int);
PRIVATE void processAudio(int);
PRIVATE void processEchoDn(int);
PRIVATE void processEchoUp(int);
PRIVATE void processMute(int);
PRIVATE void processScan(int);
PRIVATE void processVocal(int);
PRIVATE void processSelect(int);
PRIVATE void processShiftUp(int);
PRIVATE void processSvideo(int);
PRIVATE void processResume(int);
PRIVATE void processShiftDn(int);
PRIVATE void processZoom(int);
PRIVATE void processFastMode(void);
PRIVATE void processSlowMotion(void);
PRIVATE void resetAll(void);
PRIVATE void resetSystem(void);
PRIVATE void vocalAssist(int);
PRIVATE void osdVolumeBar(int, int);
PRIVATE void procAB(void);
PRIVATE void procPBC(void);
PRIVATE void procBrowser(void);
#ifndef BILINGUAL_OSD
PRIVATE void procFast(char *, int);
#else
PRIVATE void procFast(char *, char *, int);
#endif
PRIVATE void procIntro(void);
PRIVATE void procMute(void);
PRIVATE void procNext(void);
PRIVATE void procOpenClose(void);
PRIVATE void procPause(void);
PRIVATE void procPlay(void);
PRIVATE void procPrevious(void);
PRIVATE void procRemain(void);
PRIVATE void procRepeat(void);
PRIVATE void procSlow(void);
PRIVATE void procSpatial(void);
PRIVATE void procStop(void);
PRIVATE void procTrack10(void);
PRIVATE void procTrack10Plus(int);
PRIVATE void procTrackNumber(int);
PRIVATE void procVideoMode(void);
PRIVATE void procView(void);
PRIVATE void procVolumeDn(void);
PRIVATE void procVolumeUp(void);
PRIVATE void startXport(void);
#ifdef BILINGUAL_OSD
PRIVATE void procOsdLanguage(void);
#endif
#ifdef SVIDEO
/*
* Process the S-video tact switch
*/
PRIVATE void processSvideo(tact)
int tact;
{
if (!po_svideo.done) { /* First observe the input */
po_svideo.done = 1; /* Have taken action */
svideo ^= 1;
DSC_s_video(svideo);
}
/* For debouncing */
DEBOUNCE(SVIDEO, svideo, tact);
}
#endif
/*
* Process the resume tact switch (checked)
*/
PRIVATE void processResume(tact)
int tact;
{
if (!po_resume.done) { /* First observe the input */
po_resume.done = 1; /* Have taken action */
vcx_karaokey = 0;
OSD_pitch_bar(vcx_karaokey);
}
/* For debouncing */
DEBOUNCE(RESUME, resume, tact);
}
/*
* Process the shift up tact switch (checked)
*/
PRIVATE void processShiftUp(tact)
int tact;
{
if (!po_shiftup.done) { /* First observe the input */
po_shiftup.done = 1; /* Have taken action */
if (vcx_karaokey < 7) vcx_karaokey++;
OSD_pitch_bar(vcx_karaokey);
}
/* For debouncing */
DEBOUNCE(SHIFTUP, shiftup, tact);
}
/*
* Process the shift down tact switch (checked)
*/
PRIVATE void processShiftDn(tact)
int tact;
{
if (!po_shiftdn.done) { /* First observe the input */
po_shiftdn.done = 1; /* Have taken action */
if (vcx_karaokey > -7) vcx_karaokey--;
OSD_pitch_bar(vcx_karaokey);
}
/* For debouncing */
DEBOUNCE(SHIFTDN, shiftdn, tact);
}
/*
* Process the audio left/right tact switch (checked)
*/
PRIVATE void processAudio(tact)
int tact;
{
if (!po_audio.done) { /* First observe the input */
po_audio.done = 1; /* Have taken action */
/*
* We don't allow audio L/R switch if vocal assist is on.
*/
if (vocal_assist_on)
OUTOSD(OSD_FUNCTION_STATUS_REGION, msgError, msgError, 5);
else {
switch (vcx_audio_channel){
case LEFT_LEFT:
OUTOSD(OSD_AUDIO_REGION, MSG_left, MSG_c_left, 5);
break;
case RIGHT_RIGHT:
OUTOSD(OSD_AUDIO_REGION, MSG_right, MSG_c_right, 5);
break;
case LEFT_RIGHT:
OUTOSD(OSD_AUDIO_REGION, MSG_stereo, MSG_c_stereo, 5);
default: break;
}
}
}
/* For debouncing */
DEBOUNCE(AUDIO, audio, tact);
}
/*
* Process the mute tact switch (checked)
*/
PRIVATE void processMute(tact)
int tact;
{
if (!po_mute.done) { /* First observe the input */
po_mute.done = 1; /* Have taken action */
procMute();
}
/* For debouncing */
DEBOUNCE(MUTE, mute, tact);
}
/*
* Process the scan (digest) tact switch.
*/
PRIVATE void processScan(tact)
int tact;
{
if (!po_scan.done) {
po_scan.done = 1;
procIntro();
}
/* For debouncing */
DEBOUNCE(SCAN, scan, tact);
}
/*
* Process the vocal tact switch.
*/
PRIVATE void processVocal(tact)
int tact;
{
if (!po_vocal.done) { /* First observe the input */
po_vocal.done = 1; /* Have taken action */
if (TDM_isCDDA)
OUTOSD(OSD_FUNCTION_STATUS_REGION, msgError, msgError, 5);
else {
vocal_assist_on ^= 1;
if (vocal_assist_on) {
OUTOSD(OSD_VOCAL_REGION, MSG_vocal_on, MSG_c_vocal_on, 5);
prev_audio_mode = vcx_audio_channel;
last_voice_clock = glbTimer;
} else {
OUTOSD(OSD_VOCAL_REGION, MSG_vocal_off, MSG_c_vocal_off, 5);
vcx_audio_channel = prev_audio_mode;
}
}
}
/* For debouncing */
DEBOUNCE(VOCAL, vocal, tact);
}
/*
* Process the "auto" tact switch for TV output mode control
*/
PRIVATE void processSelect(tact)
int tact;
{
if (!po_select.done) { /* First observe the input */
po_select.done = 1; /* Have taken action */
procVideoMode();
}
/* For debouncing */
DEBOUNCE(SELECT, select, tact);
}
#ifdef ZOOM
PRIVATE void processZoom(tact)
int tact;
{
if (!po_zoom.done) {
po_zoom.done = 1;
if (zoom_level) {
if (zoom_level == 1) {
if (zoom_dir && (vcx_user_video_stream == 0xe2)) {
/* zoom in from 2x to 4x */
zoom_in();
OUTOSD(OSD_PAUSE_REGION, MSG_zoom2, MSG_c_zoom2, 0);
} else {
/* zoom out from 2x to normal */
zoom_dir = 1;
zoom_out();
OUTOSD(OSD_PAUSE_REGION, MSG_pause, MSG_c_pause, 0);
}
} else {
/* zoom out from 4x to 2x */
zoom_dir = 0;
zoom_out();
OUTOSD(OSD_PAUSE_REGION, MSG_zoom1, MSG_c_zoom1, 0);
}
} else {
if (!vcx_digest) {
if ((playMode == MODE_PAUSE) ||
(showingLogo == SHOWING_POWERUPLOGO)) {
/* zoom in from normal to 2x */
zoom_in();
OUTOSD(OSD_PAUSE_REGION, MSG_zoom1, MSG_c_zoom1, 0);
zoom_dir = 1;
} else {
#ifdef JUMPGAME
JumpGame();
#endif
OUTOSD(OSD_FUNCTION_STATUS_REGION, msgError, msgError, 5);
}
} else {
OUTOSD(OSD_FUNCTION_STATUS_REGION, msgError, msgError, 5);
}
}
}
DEBOUNCE(ZOOM, zoom, tact);
}
#endif /* ZOOM */
#ifdef ECHO
PRIVATE void processEchoUp(tact)
int tact;
{
if (!po_echoup.done) { /* First observe the input */
po_echoup.done = 1; /* Have taken action */
if (vcx_echo < vcx_echo_max_level) {
vcx_echo ++;
if (vcx_echo == 0) { /* -1 -> 0 */
MIC_init();
MIC_start_take_in();
}
}
OSD_echo();
}
/* For debouncing */
DEBOUNCE(ECHOUP, echoup, tact);
}
PRIVATE void processEchoDn(tact)
int tact;
{
if (!po_echodn.done) { /* First observe the input */
po_echodn.done = 1; /* Have taken action */
if (vcx_echo > -1) {
vcx_echo --;
if (vcx_echo == -1) { /* 0 -> -1 */
MIC_stop_take_in();
}
}
OSD_echo();
}
/* For debouncing */
DEBOUNCE(ECHODN, echodn, tact);
}
#endif /* ECHO */
/*
* Process TACT switches
*/
void processTact()
{
int Temp = 0xffff;
/*
* Please put all the end of track processing here.
*/
if (end_of_track) {
end_of_track = 0;
/* At the end of the track, "SET A" is cleared */
if (stRepAB) {
stRepAB = 0;
/* Clear "SET A" OSD */
CLEAROSD(OSD_FUNCTION_STATUS_REGION);
}
#ifdef PBCON
/*
* If customer wants to make it a 2.0 lookalike, they can
* enable the following code, which will go back to track 1
* at the end of the track if 2.0 disc is being played.
*
* pbcON is already set to 1, if pbcON is set to 0, we'll
* not stop at every menu page (we'll still show menu
* page, we just don't stop after each one.)
*/
if ((vcdVersion == 0x3230) && pbcON)
irSendSelect(1);
#endif
}
#ifndef BROWSER1
if (mvd_version == 0x3208
#ifdef AUX_AS_HOSTPORT
|| 1
#endif
) {
/* Only 3208 has host port */
READ_HOSTPORT(Temp);
}
/* Any TACT switch pressed? */
#ifdef SVIDEO
if (PO4_SVIDEO(Temp)) po_svideo.determine = 1;
#endif
#ifdef ZOOM
if (PO4_ZOOM(Temp)) po_zoom.determine = 1;
#endif
#ifdef ECHO
if (PO4_ECHOUP(Temp)) po_echoup.determine = 1;
if (PO4_ECHODN(Temp)) po_echodn.determine = 1;
#endif
if (PO4_SHIFTUP(Temp)) po_shiftup.determine = 1;
if (PO4_SHIFTDN(Temp)) po_shiftdn.determine = 1;
if (PO4_RESUME(Temp)) { /* Key resume overwrite up/down */
po_resume.determine = 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -