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

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

?? pp.c

?? U-LINK的詳細制作資料和原代碼
?? C
字號:
/**************************************************** * pp.c  * Copyright (C) 2002, Michael Hetherington * chinook@pacific.net.sg *  * this file is based on * * sunkbd_hid.c * Copyright (C) 2001, Arnim Laeuger * arnim@users.sourceforge.net * * & * * uss720.c * Copyright (C) 1999, Thomas Sailer  * sailer@ife.ee.ethz.ch *  * History: * 0.01 16.6.2002 Created * ****************************************************/ #include <8051.h>#include <string.h>#include "ezusb_reg.h"#include "delay.h"#include "usb.h"#include "parport.h"/**************************************************** * get_request() ****************************************************/static void  get_request (byte request, byte value,			   byte index) {  switch(request){  case 0:    in0buf[0] = parport_read_status();    IN0BC = 1;    EP0CS = 0x02;    break;  case 1:    parport_frob_control(index,value);    /* direction */    if(index & 0x20){      if(value & 0x20) parport_data_reverse();      else parport_data_forward();    }     in0buf[0] = parport_read_control();    IN0BC = 1;    EP0CS = 0x02;    break;  case 2:    in0buf[0] = reg_1284.done;    IN0BC = 1;    EP0CS = 0x02;    break;  case 3:    in0buf[0] = parport_read_data();    IN0BC = 1;    EP0CS = 0x02;    break;    default:    EP0CS = 0x03;    break;   }}/**************************************************** * set_request() ****************************************************/static byte set_request (byte request, byte value, 			  byte index) {  switch(request){    /* mode */   case 2:    reg_1284.mode = value;    if (value & 0x80){ /* in */      reg_1284.main_state = 1;      reg_1284.expected = index;      /* unarm endpoint */      //IN2BC = 0;      //IN2BC = 0;      IN2CS |= 0x02;    } else { /* out */      reg_1284.irq_state = 1;      reg_1284.expected = index;      /* unarm endpoint */      OUT1BC = 0;    }    EP0CS = 0x02;    break;    /* data set */  case 3:    parport_write_data(value);    EP0CS = 0x02;    break;  case 4:    value &= PARPORT_STATUS_ERROR   |             PARPORT_STATUS_SELECT  |	     PARPORT_STATUS_PAPEROUT|	     PARPORT_STATUS_ACK     |	     PARPORT_STATUS_BUSY;    reg_1284.mask_status = value;    reg_1284.old_status =       parport_read_status();    /* rearm interrupt endpoint */    if (value) {      parport_enable_irq();      in4buf[0] =	reg_1284.old_status;      IN4BC = 1;    } else { /* unarm endpoint */      parport_disable_irq();      IN4CS |=0x02;    }    EP0CS = 0x02;    break;  default:    EP0CS = 0x03;    break;  }}/**************************************************** * get_descriptor() ****************************************************/static void get_descriptor(void) using 1 {  switch (sdata -> wValueH){  case USB_DT_DEVICE:    EP0CS = 0x02; /* clear HSNAK */    SUDPTRH = (byte)((unsigned int)dev_desc >> 8);    SUDPTRL = (byte)((unsigned int)dev_desc & 0xFF);    break;  case USB_DT_CONFIG:    EP0CS = 0x02; /* clear HSNAK */       SUDPTRH = (byte)((unsigned int)conf_desc >> 8);    SUDPTRL = (byte)((unsigned int)conf_desc & 0xFF);    break;  case USB_DT_STRING:    if (sdata -> wValueL < 2) {      EP0CS = 0x02;      SUDPTRH = (byte)(string_index[sdata->wValueL] >> 8);      SUDPTRL = (byte)(string_index[sdata->wValueL] & 0xFF);    } else {      EP0CS = 0x03;    }    break;     default:    EP0CS = 0x03; /* stall */    break;  }}/**************************************************** * get_status() ****************************************************/static void get_status (void) using 1 {  switch (sdata->bmRequestType){    /* device status */  case 0x80:    /* bus powered/no wakeup */    in0buf[0] = 0;    in0buf[1] = 0;    IN0BC = 0x02;    EP0CS = 0x02;    break;    /* interface status */  case 0x81:    if(sdata->wIndexL == 0){      in0buf[0] = 0;      in0buf[1] = 0;      IN0BC = 0x02;      EP0CS = 0x02;    } else EP0CS = 0x03;    break;    /* endpoint status */  case 0x82:    switch (sdata->wIndexL){      /* endpoint 0 IN/OUT */    case 0x00:    case 0x80:      in0buf[0] = 0;      in0buf[1] = 0;      IN0BC = 0x02;      EP0CS = 0x02;      break;      /* endpoint 1 OUT */    case 0x01:      in0buf[0]=(OUT1CS & 0x01 ?  0x01:0x00);      in0buf[1] = 0;      IN0BC = 0x02;      EP0CS = 0x02;      break;      /* endpoint 2 IN */    case 0x82:      in0buf[0] = (IN2CS & 0x01 ? 0x01:0x00);      in0buf[1] = 0;      IN0BC = 0x02;      EP0CS = 0x02;      break;      /* endpoint 3 IN */    case 0x84:      in0buf[0] = (IN4CS & 0x01 ? 0x01:0x00);      in0buf[1] = 0;      IN0BC = 0x02;      EP0CS = 0x02;      break;      /* stall */    default:      EP0CS = 0x03;      break;    }    break;    /* stall */  default:    EP0CS = 0x03;    break;  }}/**************************************************** * clear_feature() ****************************************************/static void clear_feature (void) using 1 {  /* only clear endpoint feature is supported */  /* use usb_clear_halt to clear */  if(sdata->bmRequestType == 0x02 &&     sdata->wValueL == 0){    switch (sdata->wIndexL){      /* endpoint 1 OUT */    case 0x01:      OUT1CS = 0x00; /* clear stall bit */      TOGCTL = 0x01; /* select endpoint 1 OUT */      TOGCTL = 0x21; /* toggle */      EP0CS  = 0x02; /* clear HSNAK */      break;      /* endpoint 2 IN */    case 0x82:      IN2CS  = 0x00;      TOGCTL = 0x12;      TOGCTL = 0x32;      EP0CS  = 0x02;      break;      /* endpoint 4 IN */    case 0x84:      IN4CS  = 0x00;      TOGCTL = 0x14;      TOGCTL = 0x34;      EP0CS  = 0x02;      break;      /* stall */    default:      EP0CS = 0x03;      break;    }  }else EP0CS = 0x03;}/**************************************************** * set_feature() ****************************************************/static void set_feature (void) using 1 {  /* only set feature endpoint is supported */  if(sdata->bmRequestType == 0x02 &&     sdata->wValueL == 0){  switch (sdata->wIndexL){    /* endpoint 1 OUT */  case 0x01:    OUT1CS = 0x01; /* set stall bit */    TOGCTL = 0x01; /* select endpoint 1 OUT */    TOGCTL = 0x21; /* toggle */    OUT1BC = 0x00; /* write any value into endpoint's BC register */    EP0CS  = 0x02; /* clear HSNAK */    break;    /* endpoint 2 IN */  case 0x82:    IN2CS  = 0x01;    TOGCTL = 0x12;    TOGCTL = 0x32;    IN2CS |= 0x02;    EP0CS = 0x02;    break;    /* endpoint 4 IN */  case 0x84:    IN4CS = 0x01;    TOGCTL = 0x14;    TOGCTL = 0x34;    IN4CS |= 0x02;    EP0CS = 0x02;    break;  default:    EP0CS = 0x03;    break;  } } else EP0CS = 0x03;}/**************************************************** * set_interface() ****************************************************/static void set_interface(void) using 1 {  /* only one interface supported */  if(sdata->bmRequestType == 0x01 &&     sdata->wIndexL == 0x00){    switch(sdata->wValueL){    case 0x00:      TOGCTL      = 0x01; /* select endpoint 1 OUT */      TOGCTL      = 0x21; /* toggle */      OUT1BC      = 0x00; /* write any value */            TOGCTL      = 0x12; /* select endpoint 2 IN */      TOGCTL      = 0x32; /* toggle */      IN2CS      |= 0x02; /* clear busy bit */            TOGCTL      = 0x14; /* select endpoint 4 IN */      TOGCTL      = 0x34; /* toggle */      IN4CS      |= 0x02; /* clear busy bit */      EP0CS       = 0x02;		      break;    default:      EP0CS = 0x03;      break;    }  } else EP0CS = 0x03;}/**************************************************** * usb_isr() * ****************************************************/static void usb_isr (void) interrupt 8 using 1 {  /* clear INT2 interrupt */  EXIF &= 0xEF;  /* was this SUDAV interrupt */  if (USBIRQ & 0x01) {  /* clear SUDAV interrupt */    USBIRQ = 0x01;    /* vendor requests */    if((sdata->bmRequestType & 0x60) == 0x40){	/* get register */	if(sdata->bmRequestType == 0xC0) 	  get_request(sdata->bRequest,sdata->wValueL,		       sdata->wIndexL);	else {	/* set register */	  if(sdata->bmRequestType == 0x40){	    set_request(sdata->bRequest,sdata->wValueL,			 sdata->wIndexL);	  } else EP0CS = 0x03;	}    } else     /* standard requests */    if ((sdata->bmRequestType & 0x60) == 0){      switch (sdata->bRequest){	/* get status */      case 0x00:	get_status();	break;	/* clear feature */      case 0x01:	clear_feature();	break;	/* set feature */      case 0x03:	set_feature();	break;	/* get descriptor */      case 0x06:	get_descriptor();	break;	/* get configuration */      case 0x08:	/* only one configuration is supported */	if (sdata->bmRequestType == 0x80 &&	    sdata->wLengthL == 0x01){	  in0buf[0] = 0x01;	  IN0BC     = 0x01;	  EP0CS     = 0x02;	} else EP0CS = 0x03;	break;	/* set configuration */      case 0x09:	/* only one configuration is supported */ 	EP0CS = ((sdata->bmRequestType == 0 &&		  sdata->wValueL == 0x01) ? 0x02:0x03);	break;	/* get interface */      case 0x0A:	/* only one interface */	if(sdata->bmRequestType == 0x81 &&	   sdata->wIndexL == 0x00 &&	   sdata->wLengthL == 0x01){	  in0buf[0] = 0;	  IN0BC = 0x01;	  EP0CS = 0x02; 	} else EP0CS = 0x03; 	break;	/* set interface */      case 0x0B:	set_interface();	break;	/* stall */             default:	EP0CS = 0x03;	break;	      }    } else EP0CS = 0x03;       }  /* IN 0 interrupt ? */  if (IN07IRQ & 0x01) {    IN07IRQ = 0x01;  }  /* OUT 0 interrupt ? */  if (OUT07IRQ & 0x01) {    OUT07IRQ = 0x01;        }  /* OUT 1 interrupt */  if (OUT07IRQ & 0x02) {    if(reg_1284.irq_state){      reg_1284.irq_state = 0;      reg_1284.main_state = 1;    } else OUT1BC = 0;    OUT07IRQ = 0x02;  }  /* IN 2 interrupt */  if (IN07IRQ & 0x04) {     IN07IRQ = 0x04;  }    /* IN 4 interrupt */  if (IN07IRQ & 0x10) {    reg_1284.irq_status = 1;    IN07IRQ = 0x10;  }  /* reset ? */  if (USBIRQ & 0x10){    USBIRQ = 0x10;  }}/**************************************************** * _sdcc_external_startup() * ****************************************************/byte _sdcc_external_startup(){    USBCS &= ~0x04;  USBCS |= 0x08;  return (0);}/**************************************************** * setup_usb_int( * Setup the USB inetrrupts ****************************************************/static void setup_usb_int(void){  EA          = 0;    /* disable global interrupts */  USBBAV      = 0;    /* clear autovectoring and break reporting*/  USBIRQ      = 0xFF; /* enable SUDAV interrupt and all other interrupts */  USBIEN      = 0x11; /* enable SUDAV interrupt and RESET interrupt */  IN07IRQ     = 0xFF; /* clear all interrupts */  IN07IEN     = 0x15; /* enable IN0 IN2 IN4 interrupt */  OUT07IRQ    = 0xFF; /* clear all interrupts */  OUT07IEN    = 0x03; /* enable OUT0 OUT1 interrupt */     OUT1CS      = 0x00; /* unstall endpoint OUT 1 */     IN2CS       = 0x00; /* unstall endpoint IN  2 */  IN4CS       = 0x00; /* unstall endpoint IN  4 */  IN07VAL     = 0x15; /* endpoint IN 0 IN2 IN4 */  OUT07VAL    = 0x03; /* endpoint OUT 0 OUT 1 */    EUSB        = 1;    /* enable USB interrupt */  EA          = 1;    /* enable global interrupts */}/**************************************************** * setup uss () * apply default setting ****************************************************/static void setup_uss(void){  /* disable USB interrupts */  EUSB = 0;  /* data */  PORTACFG = 0;  OEA = 0xFF;  OUTA = 0;  /* status */  PORTBCFG = 0;  OEB = 0x07;  OUTB = 0x06;  reg_1284.status = 0;  /* control */  PORTCCFG = 0;  OEC = 0xF8;  OUTC = 0xF8;  reg_1284.ctr = 0xFC;  reg_1284.irq_state = 0;  reg_1284.main_state = 0;  reg_1284.irq_status = 0;   /* timer 0 */  /* mode 1 */  TMOD |= 0x01;  TMOD &=~0x02;  /* timer 0 select */  TMOD &=~0x04;  /* enable timer */  TCON |= 0x10;  TL0 = 0;  TH0 = 0;   EUSB = 1;}/**************************************************** * main () * Basic initialization, re-enumeration and the reset ****************************************************/int main (void){  unsigned int time = 10;  unsigned int loop = 5000;  while (loop--);       setup_usb_int();  setup_uss();     USBCS |= 0x02;  USBCS &= ~0x08;  USBCS |= 0x04;       while (1){    /* IEEE1284 transfers */    if(reg_1284.main_state){      EUSB = 0;      switch (reg_1284.mode){	/* compatability */      case 0x01:	reg_1284.done =	  parport_write_compat(out1buf,OUT1BC);	OUT1BC = 0;	break;	/* nibble */      case 0x81:	reg_1284.done =	  parport_read_nibble(in2buf, reg_1284.expected);	IN2BC = reg_1284.done;	break;	/* epp read data */      case 0x83:	reg_1284.done = 	  parport_epp_read_data(in2buf, reg_1284.expected);	IN2BC = reg_1284.done;	break;	/* epp write data */      case 0x03:	reg_1284.done =	  parport_epp_write_data(out1buf, OUT1BC);	OUT1BC = 0;	 	break;	/* epp read address */      case 0x84:	reg_1284.done = 	  parport_epp_read_addr(in2buf, reg_1284.expected);			IN2BC = reg_1284.done;	break;	/* epp write address */      case 0x04:	reg_1284.done =	  parport_epp_write_addr(out1buf, OUT1BC);	OUT1BC = 0;	break;	      default:	reg_1284.done = 0;	break;      }      reg_1284.main_state = 0;      EUSB = 1;    }       if (reg_1284.irq_status){      byte sts;      EUSB = 0;      sts = parport_read_status();      reg_1284.status &= reg_1284.mask_status;      reg_1284.old_status &= reg_1284.mask_status;      if(reg_1284.status ^ reg_1284.old_status){	in4buf[0] = sts;	IN4BC = 1;	reg_1284.irq_status = 0;      }      reg_1284.old_status = sts;      EUSB = 1;      }            }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人a区在线观看| 国产视频不卡一区| 久久精品亚洲精品国产欧美kt∨ | www.日韩在线| 91麻豆精品国产91久久久| 国产日韩av一区二区| 婷婷成人综合网| 91浏览器在线视频| 国产亚洲欧洲一区高清在线观看| 亚洲亚洲人成综合网络| 成人av中文字幕| 欧美精品一区在线观看| 亚洲国产一区视频| 色噜噜狠狠成人中文综合| 久久久精品人体av艺术| 久久国产日韩欧美精品| 99久久99久久综合| 欧美激情一区三区| 日韩高清不卡在线| 欧美日韩免费在线视频| 樱花草国产18久久久久| 成人99免费视频| 日本一区二区视频在线观看| 国精品**一区二区三区在线蜜桃| 911精品国产一区二区在线| 亚洲一区国产视频| eeuss鲁片一区二区三区| 中文成人综合网| 成人涩涩免费视频| 亚洲国产精品精华液ab| 国产福利精品一区| 国产欧美一区二区精品性| 色哟哟一区二区| 在线观看91av| 日韩av电影天堂| 91精品啪在线观看国产60岁| 日日嗨av一区二区三区四区| 精品久久久网站| 日韩高清不卡一区二区三区| 91精品综合久久久久久| 日韩成人av影视| 精品国产一区二区三区久久久蜜月| 久久疯狂做爰流白浆xx| 久久久久久日产精品| 国产精品99久久久久久有的能看 | 91麻豆精品91久久久久同性| 免费欧美在线视频| 26uuu成人网一区二区三区| 精品一区二区三区免费| 中文字幕精品在线不卡| 色婷婷综合久色| 婷婷六月综合网| 欧美变态口味重另类| 成人手机电影网| 亚洲国产三级在线| 日韩午夜中文字幕| 成人免费看黄yyy456| 国产精品欧美极品| 色婷婷av一区二区三区软件 | 国产综合久久久久久鬼色| 欧美激情综合在线| 91黄色在线观看| 91丨九色丨尤物| 亚洲午夜在线电影| 久久亚洲影视婷婷| 91网站最新网址| 蜜臀av一区二区| 1区2区3区欧美| 欧美一区二区国产| 成人高清视频免费观看| 婷婷激情综合网| 国产午夜亚洲精品不卡| 欧洲av一区二区嗯嗯嗯啊| 国产一区二区三区在线观看免费 | 91在线精品秘密一区二区| 日本免费新一区视频| 国产精品久线观看视频| 91精品国产福利| 99精品视频在线观看免费| 热久久国产精品| 一区二区三区在线免费视频| 久久五月婷婷丁香社区| 欧美蜜桃一区二区三区| 成人的网站免费观看| 免费看精品久久片| 亚洲一区二区精品久久av| 欧美激情资源网| 精品国产乱码久久久久久老虎| 欧美中文字幕久久| 成人性生交大片免费| 麻豆成人久久精品二区三区红 | 人禽交欧美网站| 亚洲综合999| 亚洲天堂网中文字| 国产日产精品1区| 欧美videos大乳护士334| 欧美日韩精品欧美日韩精品| 色综合久久中文综合久久牛| 成人午夜私人影院| 国产一区二区在线观看视频| 麻豆国产精品一区二区三区| 丝袜美腿亚洲一区| 亚洲成人动漫在线免费观看| 亚洲精品欧美激情| 亚洲精品成人悠悠色影视| 日韩一区欧美小说| 中文字幕一区二区视频| 久久综合九色欧美综合狠狠 | 福利91精品一区二区三区| 久久精品国产99国产| 蜜桃精品在线观看| 欧美a级理论片| 免费观看一级特黄欧美大片| 蜜桃视频在线观看一区二区| 蜜桃一区二区三区在线观看| 久久国产福利国产秒拍| 久久69国产一区二区蜜臀| 老司机精品视频一区二区三区| 日韩激情一二三区| 日本视频一区二区三区| 五月天丁香久久| 免费欧美日韩国产三级电影| 麻豆成人在线观看| 国产酒店精品激情| 国产成人啪免费观看软件 | 狠狠色丁香九九婷婷综合五月| 久久激情五月激情| 国产美女一区二区| 成人av电影在线播放| 91一区在线观看| 欧美日本韩国一区| 欧美r级电影在线观看| 2023国产精品| 亚洲欧洲国产日韩| 亚洲国产精品麻豆| 另类调教123区| 成人黄色免费短视频| 欧美性大战久久久久久久蜜臀 | 蜜臀av国产精品久久久久| 国产精品综合av一区二区国产馆| 成人午夜免费av| 欧亚一区二区三区| 欧美成人女星排行榜| 国产精品美女久久久久久久久| 一区二区三区欧美在线观看| 日本va欧美va精品| www.亚洲免费av| 欧美日韩久久一区| 国产午夜精品一区二区三区视频| 亚洲视频免费在线| 久久爱www久久做| av成人免费在线观看| 91精品国产综合久久久蜜臀粉嫩| 久久久精品天堂| 五月天激情综合网| 成人av动漫网站| 日韩免费高清电影| 亚洲综合色成人| 国产传媒日韩欧美成人| 欧美精品久久一区| 亚洲欧洲在线观看av| 精品一区二区三区av| 97精品国产露脸对白| 欧美电视剧免费全集观看| 亚洲精品视频免费看| 国产麻豆9l精品三级站| 欧美电影在哪看比较好| 亚洲欧美日韩综合aⅴ视频| 精品一区二区免费看| 欧美在线视频日韩| 国产精品久久久久久福利一牛影视 | 日韩理论电影院| 国产乱子伦视频一区二区三区 | 国内精品国产成人国产三级粉色| 91国产成人在线| 国产精品免费看片| 韩国毛片一区二区三区| 欧美日本在线看| 一级日本不卡的影视| av电影在线不卡| 欧美国产日韩在线观看| 韩国三级在线一区| 7777精品伊人久久久大香线蕉的 | 国产精品久久免费看| 激情伊人五月天久久综合| 欧美日韩高清一区二区三区| 亚洲免费观看在线视频| 成人性生交大片免费| 国产香蕉久久精品综合网| 久草中文综合在线| 精品久久久久久无| 九九热在线视频观看这里只有精品| 欧美日韩中文精品| 亚洲成人第一页| 欧美日韩在线直播| 一区二区三区不卡在线观看 | av综合在线播放| 中文字幕在线观看不卡视频| 欧美日韩精品一区二区三区四区 | 午夜精品久久久久久久蜜桃app|