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

📄 po4tact.c

📁 一个不错的硬盘播放器程序,包含VFD显示程序,红外线遥控程序,硬盘读写程序,及解码程序等.
💻 C
📖 第 1 页 / 共 5 页
字号:
#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 + -