亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ir.c

?? 一個兩碟控制的VCD的代碼,兩碟之間的轉動及連續播放,已大量生產的CODE.
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* Copyright 1996-1997, ESS Technology, Inc. */
/* SCCSID @(#)ir.c	1.57 10/6/98 */

/*
 * This module is used to receive and transmit IR signals. 
 *
 * Transmitting of IR in the current version is interrupt driven (it 
 * uses timer 1 to keep track of time).
 */

/*
 * The current code supports:
 * 1) New 3881/3883 style interrupt handling (when DSC_IRQ is defined.)
 * 2) Original timer2 style interrupt handling (when DSC_IRQ is not
 *    defined.)
 * 3) Andy's GAL solution (when IRQSHARE is defined.) This solution will
 *    be phased out.
 * 4) A customer's glue logic solution (when CUST6 is defined.) This
 *    solution will be phased out.
 * 5) WebDVD board's 8259 solution (when WEBDVD && SLAVE are defined.) This
 *    solution will be phased out.
 *
 * It also supports 3 styles of R/C: NEC, SANYO and PHILIPS.
 */
/* Add support for dvd slave */
#include "common.h"
#include "const.h"
#include "constvar.h"
#include "dsc.h"
#include "ioport.h"
#include "ir.h"
#include "mvd.h"
#include "timedef.h"
#include "util.h"

#ifdef IR

#ifdef TVM_MODULE
PRIVATE unsigned int IS_IRXOR_HIGH = 0;
#define SET_IRXOR       {SET_EAUX6; IS_IRXOR_HIGH = 1;}
#define CLEAR_IRXOR     {CLEAR_EAUX6; IS_IRXOR_HIGH = 0;}
#endif /* TVM_MODULE */

/************************************************************************
 * Macros relate to remote control 
 ************************************************************************/
#ifdef IR_PHILIPS
#define IR_SYSCODE              0x6
#endif /* IR_PHILIPS */

#ifdef IR_NEC
#define IR_SYSCODE              0x00ff
#endif

#ifdef IR_SANYO
#define IR_SYSCODE              0x0cc0
#endif

#define ASSIGN_SYSCODE          sysIRcode = IR_SYSCODE

#ifdef DSC_IRQ
/* For the new style of IR handling (i.e. via 3881) */
/************************************************************************
 * Local variables.							*
 ************************************************************************/
PRIVATE	unsigned short	dataIR;		/* System/customer IR code	*/
PRIVATE	char 		cntIRbits = 0;	/* Number of IR sys/cust. bits	*/
PRIVATE volatile char	stateIR = IR_IDLE; /* IR state machine state	*/
PRIVATE char trigger_edge;

#ifdef IR_SANYO
PRIVATE	unsigned short IR_sanyo_codebar;/* Sanyo IR only		*/
#endif /* IR_SAYNO */

#ifdef IRREP
PRIVATE unsigned char   previous_data;  /* Record the previous ID code  */
#endif

/************************************************************************
 * Local routines							*
 ************************************************************************/
PRIVATE	void		IR_core_NEC(unsigned int, int);
PRIVATE	void		IR_core_Philips(unsigned int);

void IR_init()
{
    ASSIGN_SYSCODE;	/* Initialize IR system code			*/
    CLEAR_IRXOR;	/* Clear IR XOR (EAUX11 is active high!!	*/

#ifdef IR_SANYO
    IR_sanyo_codebar = (~sysIRcode) & 0x1fff;
#endif /* IR_SANYO */

    DSC_INIT_IR(1, DSC_FALLING_EDGE, 1);	/* Start 3881 IR	*/
    trigger_edge = 0;
    mvd[riface_clear_dbgirq] = 0;		/* Clear debug_irq	*/
    enable_int(debug);
}

#if (IR_NEC || IR_SANYO)
PRIVATE void IR_core_NEC(width, overflow)
unsigned int width;
int overflow;
{
#define LEADER_MIN	ir_tbl[0]
#define LEADER_MAX	ir_tbl[1]
#define DATA_1_MIN	ir_tbl[2]
#define DATA_1_MAX	ir_tbl[3]
#define DATA_0_MIN	ir_tbl[4]
#define DATA_0_MAX	ir_tbl[5]
#ifdef IRREP
#define REPEAT_MIN	ir_tbl[6]
#define REPEAT_MAX	ir_tbl[7]
#endif IRREP

    unsigned int *ir_tbl;
    unsigned char data;
    char reset = 0;
 
    ir_tbl = T_IR_powerup_tbl;

    /*
     * If 3881's clock overflows, then reset. The only exception is
     * when REP is considered!!
     */
    reset = overflow;

    if (stateIR == IR_CUSTOM) {
        dataIR <<= 1;
        if ((width >= DATA_1_MIN) && (width <= DATA_1_MAX)) {
            dataIR |= 0x1;
        } else if ((width < DATA_0_MIN) || (width > DATA_1_MAX)) {
#ifdef IR_NEC
            reset = 1;
#endif /* IR_NEC */

#ifdef IR_SANYO
            reset = 1;	/* we do not care about repeat key for Sanyo yet */
#endif /* IR_SANYO */

        }
 
        cntIRbits++;
 
#ifdef IR_NEC
        /* First 16 bits are syscode */
        if ((cntIRbits == 16) && (dataIR != sysIRcode)) reset = 1;
 
        if (cntIRbits == 24) {
            data = dataIR & 0xff;
            /* reverse data bits to fit look up table */
            mvd[riface_reflect] = data;
            data = mvd[riface_reflect];

#ifdef IRREP
            previous_data = data;
#endif

            codeIR = data | 0x100;      /* Indicate a new code */
        } else if (cntIRbits == 32) reset = 1;
#endif /* IR_NEC */

#ifdef IR_SANYO
        if (cntIRbits == 13) {
            dataIR &= 0x1fff;
            if (dataIR != sysIRcode) reset = 1;
            dataIR = 0;
        } else if (cntIRbits == 26) {
            unsigned short tmp = (~sysIRcode) & 0x1fff;
            if (dataIR != tmp) reset = 1;
            dataIR = 0;
        } else if (cntIRbits == 34) {
            data = dataIR;
            mvd[riface_reflect] = data;
            data = mvd[riface_reflect];
            codeIR = data;
            dataIR = 0;
        } else if (cntIRbits == 42) {
            data = dataIR;
            mvd[riface_reflect] = data;
            data = ~(mvd[riface_reflect]);
            if (data == codeIR) {
                codeIR = data | 0x100;
            } else codeIR = 0;
            reset = 1;
        }
#endif /* IR_SANYO */

    } else {
	if ((width >= LEADER_MIN) && (width <= LEADER_MAX)) {
	    stateIR = IR_CUSTOM;
	    dataIR = cntIRbits = 0;
#ifdef IRREP
        } else if ((width >= REPEAT_MIN) && (width <= REPEAT_MAX)) {
            /* if the width is 2.25 ms, it is repeat code leader */
            if (repeat_IRkey_allowed(previous_data))
	      codeIR = previous_data | 0x100; /* Indicate a new code */
#endif
        } else reset = 1;
    }
 
    if (reset) {
        /* Reset all, start from the very beginning */
        stateIR = IR_IDLE;
    }
}
#endif /* IR_NEC || IR_SANYO */


#ifdef IR_PHILIPS
PRIVATE unsigned int    data_half = 0;  /* Mark whether or nor have half_bit
                                           data before edge of intr. coming*/
PRIVATE void IR_core_Philips(width)
unsigned int width;
{
    unsigned int *ir_tbl;
    int reset;
    int is_half_bit;
    int is_full_bit;

#define HALFBIT_MIN     ir_tbl[0]
#define HALFBIT_MAX     ir_tbl[1]
#define ONEBIT_MIN      ir_tbl[2]
#define ONEBIT_MAX      ir_tbl[3]

    ir_tbl = T_IR_powerup_tbl;

    reset = 0;
    is_half_bit = (width >= HALFBIT_MIN) && (width <= HALFBIT_MAX);
    is_full_bit = (width >= ONEBIT_MIN)  && (width <= ONEBIT_MAX);

    if (stateIR == IR_IDLE) {
        /* We shall get a rising edge, since the first bit is fixed */
        dataIR = 0;
        cntIRbits = 0;
        stateIR = IR_CUSTOM;

        if (is_half_bit) data_half = 0;
        else if (is_full_bit) data_half = 1;
        else {
            stateIR = IR_IDLE;
        }
    } else {
        if (data_half) {
            /*
             * We were in half bit position, so this edge shall either
             * conclude the previous cycle or go the the half position
             * of the next bit. Record the last bit.
             */
            dataIR <<= 1;
            if (!trigger_edge) dataIR |= 1;
            cntIRbits++;

            if (is_half_bit) data_half = 0;
            else if (!is_full_bit) reset = 1;
        } else {
            /*
             * We started at a sampling cycle, so we shall only get half bit,
             * otherwise, something is wrong!
             */
            if (is_half_bit) data_half = 1;
            else reset = 1;
        }

        if ((cntIRbits == 12) && trigger_edge && data_half) {
            /* This is the last rising edge, no more. So collect the bit */
            dataIR <<= 1;
            dataIR |= 1;
            cntIRbits = 13;
        }

        if (reset) {
            /*
             * Abnormal exist. Maybe we are out of sync. If this
             * is falling edge, maybe this is the sync of a new
             * input!
             */
            stateIR = IR_IDLE;
            if (trigger_edge) stateIR = IR_LEADER;
        } else if (cntIRbits == 13) {
            /* We only care the case when system code matches */
            if (((dataIR >> 6) & 0x1f) == sysIRcode) {
                unsigned int prevctlbit;
                prevctlbit = IR_ctlbit;

                IR_ctlbit = (dataIR >> 11) & 1;
                if ((unsigned int) IR_ctlbit != prevctlbit) {
                    int tmp = (dataIR >> 12) & 1;
                    if (tmp) tmp = 0x40;
                    codeIR = (dataIR & 0x3f) | tmp | 0x100;
                    IR_rep_cnt = 0;
                } else
                  IR_rep_cnt++;
                IR_int_time = (unsigned int) mvd[riface_timer2];
            }
            stateIR = IR_IDLE;
        }
    }
}
#endif /* IR_PHILIPS */


/* Interrupt via 3881 */
void IR_recv_interrupt_service(status)
unsigned int status;
{
    unsigned char width;
    int overflow = 0;
    int clear = 0x4;

    if (status & 0x80) {
	overflow = 1;			/* 3881's clock overflowed	*/
	clear = 0x84;			/* Clear the overflow bit	*/
    }

    width = DSC_cmd(dsc_ir_diffm, 0);	/* Get the counter		*/
    DSC_cmd(dsc_sys_status, clear);	/* Clear 3881's IR int		*/
    mvd[riface_clear_dbgirq] = 0;	/* Clear 3210's debug_irq	*/

#if (IR_NEC || IR_SANYO)
    IR_core_NEC((unsigned int) width, overflow);
#endif /* IR_NEC || IR_SAYNO */

#ifdef IR_PHILIPS
    if (!trigger_edge)
        DSC_INIT_IR(1, DSC_RISING_EDGE, 0);         /* detect rising edge   */
    else
        DSC_INIT_IR(1, DSC_FALLING_EDGE, 0);        /* detect falling edge  */

    IR_core_Philips((unsigned int) width);
    trigger_edge = 1-trigger_edge;

#endif /* IR_PHILIPS */
}

#else

/* For the original style of IR handling */
#define _8259_EOI() (*(int *)0x14000600=0x20)
#define _8259_ICW (*(int *)0x14000600)
#define _8259_OCW (*(int *)0x14000604)

#ifdef IRQSHARE
#include "fsosd.h"
#include "irqshare.h"
#endif IRQSHARE 

#ifdef CUST6
#include "config.h"
#endif


/************************************************************************
 * Local variables.							*
 ************************************************************************/

#ifdef IRQSHARE
PRIVATE unsigned int	xor1value = 1;
#endif IRQSHARE

/* For IR receiving */
PRIVATE	unsigned int	prevIRtime = 0;	/* Last time IR intr. happens	*/
PRIVATE	unsigned short	dataIR;		/* System/customer IR code	*/
PRIVATE	unsigned int	diffIR[2];	/* Array to store time gap	*/
PRIVATE	char 		cntIRchg = 0;	/* Number of unprocessed IR intr*/
PRIVATE	char 		cntIRbits = 0;	/* Number of IR sys/cust. bits	*/
PRIVATE	char		killIR = 0;	/* Whether to "kill" next IR bit*/
PRIVATE volatile char	stateIR = IR_IDLE; /* IR state machine state	*/

#ifdef IR_SANYO
PRIVATE	unsigned short IR_sanyo_codebar;/* Sanyo IR only		*/
#endif /* IR_SAYNO */

#ifdef IRREP
PRIVATE unsigned char   previous_data;  /* Record the previous id code  */
#endif

/************************************************************************
 * Local routines.							*
 ************************************************************************/
PRIVATE	void		IR_core_NEC(int);
PRIVATE	void		IR_core_Philips(int);


/*
 * Initialization. Properly set internal XOR's input value, then turn
 * on interrupt.
 */
void IR_init()
{
#ifdef IRQSHARE
    CLEAR_IRXOR;
/*    SET_XOR1;
    xor1value = 1;*/
    CLEAR_XOR1;
    xor1value = 0;
#else

#ifdef FLIP_IR
    /*
     * If incoming IR signal is flipped, then the first incoming edge
     * will be a rising edge, so we need to clear the build-in
     * XOR gate.
     */
    CLEAR_IRXOR;
#else
    SET_IRXOR; 	/* Set IR XOR to high at first */
#endif

#endif IRQSHARE

#ifdef IRXMT
    if (!connect_inout) {
	OUTIR_HIGH;	/* IR output */
    }
#endif

    ASSIGN_SYSCODE;	/* initialize sys code */
#ifdef IR_SANYO
    IR_sanyo_codebar = (~sysIRcode) & 0x1fff;
#endif /* IR_SANYO */

#if defined(WEBDVD) && defined(SLAVE)
    CLEAR_AUX0;
    _8259_ICW = 0x16;
    _8259_OCW = 0;
    SET_AUX0;
#endif

    mvd[riface_clear_dbgirq] = 0;		/* Clear debug_irq	*/
    enable_int(debug);
}


#if (IR_NEC || IR_SANYO)
PRIVATE void IR_core_NEC(falling_edge)
int falling_edge;
{
    unsigned int *ir_tbl;

#define LEADER_LOW_MIN	ir_tbl[0]
#define LEADER_LOW_MAX	ir_tbl[1]
#define LEADER_HIGH_MIN	ir_tbl[2]
#define LEADER_HIGH_MAX	ir_tbl[3]
#define DATA_1_MIN	ir_tbl[4]
#define DATA_1_MAX	ir_tbl[5]
#define DATA_0_MIN	ir_tbl[6]
#define DATA_0_MAX	ir_tbl[7]
#ifdef IRREP
#define REPEAT_HIGH_MIN ir_tbl[8]
#define REPEAT_HIGH_MAX ir_tbl[9]
#define REPEAT_DATA_MIN	ir_tbl[10]
#define REPEAT_DATA_MAX ir_tbl[11]
#endif

    ir_tbl = T_IR_powerup_tbl;
#ifdef DSC
    if (IS_POWER_DOWN) ir_tbl = T_IR_powerdn_tbl;
#endif

    /* First IR interrupt should be a falling edge */
    if (stateIR == IR_IDLE) {
	if (falling_edge) stateIR = IR_LEADER_LOW;
	else cntIRchg = prevIRtime = 0;
    }

    /*
     * We only process things when we get 2 bits (i.e. 2 time period).
     */
    if (cntIRchg == 2) {
	unsigned char data;
	char reset = 0;
	unsigned int  width;

	cntIRchg = 0;
	width = diffIR[1];

	if (stateIR == IR_CUSTOM) {/* Put most common case first */
	    /*
	     * We are collecting system code or custom code
	     */
	    width += diffIR[0];	/* Get data + gap */
	    dataIR <<= 1;
	    if ((width >= DATA_1_MIN) && (width <= DATA_1_MAX)) {
		dataIR |= 0x1;
	    } else if ((width < DATA_0_MIN) || (width > DATA_1_MAX)) {
#ifdef IR_NEC
		/*
		 * I am assert kill here because we may not recognize
		 * the singal because our checks are too tight; yet
		 * the external micro controller can still recognize it.
		 * By killing it, we guarantee that external logic won't
		 * recognize it.
		 *
		 * However, there may also be a downside: if IR input
		 * has noise, the external micro controll may still
		 * properly receive signal if we don't kill the input;
		 * if killIR is asserted, then this may be a problem.
		 */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久国产综合精品色伊| 91在线观看视频| 99久久99久久精品免费看蜜桃| 欧美日韩免费观看一区二区三区| 精品久久久久久久久久久院品网 | 亚洲精品你懂的| 久久国产精品无码网站| 欧美性猛片xxxx免费看久爱| 日本一区二区三区四区| 久久99久久99小草精品免视看| 欧美视频在线一区| 日韩毛片一二三区| www.日韩大片| 国产欧美va欧美不卡在线 | 亚洲视频在线一区观看| 国产在线播精品第三| 91精品国产综合久久香蕉麻豆 | www久久精品| 美女视频黄免费的久久| 欧美日韩国产bt| 一区二区成人在线观看| 91色|porny| 中文字幕一区二区三区不卡| 成人污视频在线观看| 国产精品全国免费观看高清| 国内精品久久久久影院薰衣草| 日韩欧美久久久| 久久99国产精品麻豆| 精品入口麻豆88视频| 欧美a级一区二区| 欧美一区在线视频| 美女视频一区二区三区| 欧美tickling挠脚心丨vk| 久久成人免费网站| 久久久久久久久久久99999| 国产在线不卡一区| 国产日韩欧美麻豆| 波多野结衣中文字幕一区| 国产精品色呦呦| 91在线视频播放| 亚洲精品日韩专区silk| 欧美日韩小视频| 亚洲国产欧美另类丝袜| 日韩免费视频一区二区| 国产精品一区二区x88av| 国产精品午夜久久| 在线免费观看日本一区| 日韩av不卡一区二区| 日韩精品专区在线影院重磅| 国产一区二区在线免费观看| 国产精品毛片久久久久久久| 一本大道综合伊人精品热热| 亚洲黄色av一区| 日韩你懂的电影在线观看| 高清不卡在线观看| 亚洲综合自拍偷拍| 精品少妇一区二区三区在线播放 | 91视频在线观看免费| 亚洲精品v日韩精品| 欧美一级片在线看| 高清国产午夜精品久久久久久| 一区二区三区四区高清精品免费观看| 欧美日韩不卡视频| 国产99久久久精品| 五月天中文字幕一区二区| 久久久无码精品亚洲日韩按摩| 色综合久久综合| 麻豆精品国产传媒mv男同| 中文字幕在线不卡一区二区三区| 3d成人动漫网站| 99国产精品一区| 精品亚洲成av人在线观看| 亚洲女爱视频在线| 欧美精品一区二区三区蜜臀| 色哟哟在线观看一区二区三区| 蜜臀av一区二区三区| ...中文天堂在线一区| 精品sm在线观看| 欧美日韩一区二区三区四区| 国产麻豆精品视频| 日本美女一区二区三区视频| 最好看的中文字幕久久| 日韩写真欧美这视频| 91欧美激情一区二区三区成人| 激情综合网av| 偷偷要91色婷婷| 亚洲黄色性网站| 国产精品久久精品日日| 精品粉嫩超白一线天av| 欧美日韩视频在线第一区| thepron国产精品| 狠狠色狠狠色综合系列| 亚洲一区二区三区四区不卡| 亚洲国产精华液网站w | 亚洲综合自拍偷拍| 国产蜜臀97一区二区三区 | 一区二区三区四区视频精品免费 | 亚洲午夜影视影院在线观看| 国产精品久久久久影院色老大| 日韩无一区二区| 555夜色666亚洲国产免| 欧美日韩在线播| 欧美中文一区二区三区| 日本二三区不卡| 色一情一伦一子一伦一区| 不卡视频免费播放| 岛国精品在线播放| 不卡电影免费在线播放一区| 高清不卡一区二区在线| 国产**成人网毛片九色| 粉嫩av一区二区三区在线播放| 国产精品一区二区三区乱码| 韩国精品久久久| 国产精品一二一区| 成人综合婷婷国产精品久久免费| 国产盗摄视频一区二区三区| 福利91精品一区二区三区| 粉嫩一区二区三区在线看| 成人h版在线观看| 91首页免费视频| 欧美日韩一区精品| 欧美一区二区日韩一区二区| 精品入口麻豆88视频| 国产视频亚洲色图| 国产精品久久久久久久久快鸭| 国产精品入口麻豆原神| 亚洲日本va在线观看| 亚洲电影一区二区三区| 日一区二区三区| 久久97超碰色| 成人午夜又粗又硬又大| 色综合天天视频在线观看| 欧美精品 日韩| 欧美电影免费观看高清完整版在线观看| 精品国产制服丝袜高跟| 国产精品色哟哟| 亚洲国产日韩一级| 国产一区二区在线影院| 99精品久久久久久| 欧美肥胖老妇做爰| 久久久综合九色合综国产精品| 中文字幕在线一区免费| 婷婷国产在线综合| 懂色av中文字幕一区二区三区| 在线免费亚洲电影| 欧美大片在线观看| 亚洲视频狠狠干| 美女视频网站黄色亚洲| 99久久er热在这里只有精品66| 欧美日韩激情一区| 亚洲国产成人自拍| 亚洲bt欧美bt精品777| 丁香婷婷综合五月| 日韩一二三区不卡| 亚洲六月丁香色婷婷综合久久 | 视频一区欧美日韩| 成人一区在线看| 在线观看91av| 亚洲天堂2016| 国内外成人在线| 欧美体内she精高潮| 久久伊99综合婷婷久久伊| 亚洲欧美另类图片小说| 国产在线视视频有精品| 欧美日韩亚洲综合在线 | 最新不卡av在线| 麻豆91在线观看| 欧美在线高清视频| 中文字幕av一区二区三区免费看 | 国产精品免费网站在线观看| 视频一区视频二区中文| 色综合色综合色综合| 国产欧美日韩视频一区二区| 蜜桃一区二区三区在线观看| 在线观看日产精品| 国产精品女主播av| 国内精品国产三级国产a久久| 制服丝袜中文字幕一区| 亚洲精品国产一区二区精华液| 福利一区二区在线| 久久久精品2019中文字幕之3| 麻豆一区二区99久久久久| 欧美日韩欧美一区二区| 亚洲精品成人在线| 色综合天天综合| 亚洲色图清纯唯美| 一本到高清视频免费精品| 国产欧美一区视频| 国产 欧美在线| www亚洲一区| 国产成人免费高清| 日韩一区二区三区视频| 亚洲国产精品久久久久秋霞影院| 在线一区二区三区四区| 亚洲视频一区在线| 成人高清av在线| 国产精品久久久久永久免费观看| 国产乱码精品一区二区三区av| 久久亚洲一区二区三区四区| 精东粉嫩av免费一区二区三区|