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

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

?? usb_uart.c

?? 可用來自做的AVR-USB-ISP的源碼,內符電路圖,用AVR M8來模擬USB接口
?? C
字號:
/************************************************************************************************ * Project: generic * Author: Christian Ulrich
 * Contact: christian at ullihome dot de
 * * Creation Date: 2007-03-22 * Copyright: (c) 2007 by Christian Ulrich * License: GPLv2 ***********************************************************************************************/#include <avr/io.h>#include <avr/interrupt.h>#include <avr/pgmspace.h>#include <avr/wdt.h>
#include <string.h>#include "oddebug.h"#include "usb_uart.h"
#include "usbconfig.h"#include "usbdrv.h"
#include "buffer.h"
enum {    SEND_ENCAPSULATED_COMMAND = 0,    GET_ENCAPSULATED_RESPONSE,    SET_COMM_FEATURE,    GET_COMM_FEATURE,    CLEAR_COMM_FEATURE,    SET_LINE_CODING = 0x20,    GET_LINE_CODING,    SET_CONTROL_LINE_STATE,    SEND_BREAK};


/* Size of bulk transfer packets. The standard demands 8 bytes, but we may
 * be better off with less. Try smaller values if the communication hangs.
 */

#define HW_CDC_PACKET_SIZE      8

/* UART buffer */
//uint8_t rxinptr,rxoutptr;
//uint8_t rx_buf[RX_BUFSIZE];
//uint8_t tx_buf[HW_CDC_PACKET_SIZE2];
//uint8_t txptr = 0;
uint8_t rxbuf_bd[RX_BUFSIZE];
uint8_t txbuf_bd[HW_CDC_PACKET_SIZE];
BUF_t rxbuffer;
BUF_t txbuffer;

uint8_t CDC_mode[7] = {0x80, 0x25, 0, 0, 0, 0, 8};  /* default: 9600 bps, 8n1 */ 
static PROGMEM char deviceDescrCDC[] = {    /* USB device descriptor */
    18,         /* sizeof(usbDescriptorDevice): length of descriptor in bytes */
    USBDESCR_DEVICE,        /* descriptor type */
    0x01, 0x01,             /* USB version supported */
    0x02,                   /* device class: CDC */
    0,                      /* subclass */
    0,                      /* protocol */
    8,                      /* max packet size */
    USB_CFG_VENDOR_ID,      /* 2 bytes */
    USB_CFG_DEVICE_ID,      /* 2 bytes: shared PID for CDC-ACM devices */
    USB_CFG_DEVICE_VERSION, /* 2 bytes */
    1,                      /* manufacturer string index */
    2,                      /* product string index */
    0,                      /* serial number string index */
    1,                      /* number of configurations */
};
static PROGMEM char configDescrCDC[] = {   /* USB configuration descriptor */
    9,          /* sizeof(usbDescrConfig): length of descriptor in bytes */
    USBDESCR_CONFIG,    /* descriptor type */
    67,
    0,          /* total length of data returned (including inlined descriptors) */
    2,          /* number of interfaces in this configuration */
    1,          /* index of this configuration */
    0,          /* configuration name string index */
#if USB_CFG_IS_SELF_POWERED
    USBATTR_SELFPOWER,  /* attributes */
#else
    USBATTR_BUSPOWER,   /* attributes */
#endif
    USB_CFG_MAX_BUS_POWER/2,            /* max USB current in 2mA units */

    /* interface descriptor follows inline: */
    9,          /* sizeof(usbDescrInterface): length of descriptor in bytes */
    USBDESCR_INTERFACE, /* descriptor type */
    0,          /* index of this interface */
    0,          /* alternate setting for this interface */
    USB_CFG_HAVE_INTRIN_ENDPOINT,   /* endpoints excl 0: number of endpoint descriptors to follow */
    USB_CFG_INTERFACE_CLASS,
    USB_CFG_INTERFACE_SUBCLASS,
    USB_CFG_INTERFACE_PROTOCOL,
    0,          /* string index for interface */

    /* CDC Class-Specific descriptor */
    5,           /* sizeof(usbDescrCDC_HeaderFn): length of descriptor in bytes */
    0x24,        /* descriptor type */
    0,           /* header functional descriptor */
    0x10, 0x01,

    4,           /* sizeof(usbDescrCDC_AcmFn): length of descriptor in bytes */
    0x24,        /* descriptor type */
    2,           /* abstract control management functional descriptor */
    0x02,        /* SET_LINE_CODING,    GET_LINE_CODING, SET_CONTROL_LINE_STATE    */

    5,           /* sizeof(usbDescrCDC_UnionFn): length of descriptor in bytes */
    0x24,        /* descriptor type */
    6,           /* union functional descriptor */
    0,           /* CDC_COMM_INTF_ID */
    1,           /* CDC_DATA_INTF_ID */

    5,           /* sizeof(usbDescrCDC_CallMgtFn): length of descriptor in bytes */
    0x24,        /* descriptor type */
    1,           /* call management functional descriptor */
    3,           /* allow management on data interface, handles call management by itself */
    1,           /* CDC_DATA_INTF_ID */

    /* Endpoint Descriptor */
    7,           /* sizeof(usbDescrEndpoint) */
    USBDESCR_ENDPOINT,  /* descriptor type = endpoint */
    0x83,        /* IN endpoint number 3 */
    0x03,        /* attrib: Interrupt endpoint */
    8, 0,        /* maximum packet size */
    100,         /* in ms */

    /* Interface Descriptor  */
    9,           /* sizeof(usbDescrInterface): length of descriptor in bytes */
    4,           /* descriptor type */
    1,           /* index of this interface */
    0,           /* alternate setting for this interface */
    2,           /* endpoints excl 0: number of endpoint descriptors to follow */
    0x0A,        /* Data Interface Class Codes */
    0,
    0,           /* Data Interface Class Protocol Codes */
    0,           /* string index for interface */

    /* Endpoint Descriptor */
    7,           /* sizeof(usbDescrEndpoint) */
    USBDESCR_ENDPOINT,  /* descriptor type = endpoint */
    0x01,        /* OUT endpoint number 1 */
    0x02,        /* attrib: Bulk endpoint */
    HW_CDC_BULK_OUT_SIZE, 0,        /* maximum packet size */




    0,           /* in ms */

    /* Endpoint Descriptor */
    7,           /* sizeof(usbDescrEndpoint) */
    USBDESCR_ENDPOINT,  /* descriptor type = endpoint */
    0x81,        /* IN endpoint number 1 */
    0x02,        /* attrib: Bulk endpoint */
    HW_CDC_BULK_IN_SIZE, 0,        /* maximum packet size */
    0,           /* in ms */
};

static uint8_t        intr3Status;    /* used to control interrupt endpoint transmissions *//* ------------------------------------------------------------------------- *//* ----------------------------- USB interface ----------------------------- *//* ------------------------------------------------------------------------- */
uint8_t CDC_usbFunctionDescriptor(usbRequest_t *rq)
{
uint8_t *p = NULL, len = 0;

    if(rq->wValue.bytes[1] == USBDESCR_DEVICE)
	  {
        p = (uint8_t *)deviceDescrCDC;
        len = sizeof(deviceDescrCDC);
      }
	else
	  {  /* must be config descriptor */
        p = (uint8_t *)configDescrCDC;
        len = sizeof(configDescrCDC);
      }
    usbMsgPtr = p;
    return len;
}
uint8_t CDC_usbFunctionSetup(uint8_t data[8]){  usbRequest_t    *rq = (void *)data;  if ((rq->bmRequestType & USBRQ_TYPE_MASK) == USBRQ_TYPE_CLASS)
    {    /* class request type */      if ( rq->bRequest==GET_LINE_CODING || rq->bRequest==SET_LINE_CODING )
	    {          return 0xff;          /*    GET_LINE_CODING -> usbFunctionRead()    */          /*    SET_LINE_CODING -> usbFunctionWrite()    */        }      if(rq->bRequest == SET_CONTROL_LINE_STATE)
	    {          /* Report serial state (carrier detect). On several Unix platforms,           * tty devices can only be opened when carrier detect is set.          */          intr3Status = 2;        }    }  return 0;}/*---------------------------------------------------------------------------*//* usbFunctionRead                                                          *//*---------------------------------------------------------------------------*/uint8_t CDC_usbFunctionRead( uint8_t *data, uint8_t len ){
  memcpy(data, CDC_mode, 7); 
  return 7;}/*---------------------------------------------------------------------------*//* usbFunctionWrite                                                          *//*---------------------------------------------------------------------------*/uint8_t CDC_usbFunctionWrite( uint8_t *data, uint8_t len ){  /* enforce DATA0 token for next transfer */
  USB_SET_DATATOKEN1(USBPID_DATA1);

  memcpy(CDC_mode, data, 7);
  if (*CDC_uartreset != NULL)
    CDC_uartreset();
  return 1;
}void CDC_usbFunctionWriteOut( uint8_t *data, uint8_t len ){//  usbDisableAllRequests();
  for( ; len; len-- ) 
    BUF_put(*data++,&rxbuffer);
//  usbEnableAllRequests();
}
void CDC_init(void)
{
  uint8_t    i, j;
  
  BUF_init(&rxbuffer,rxbuf_bd,RX_BUFSIZE);
  BUF_init(&txbuffer,txbuf_bd,HW_CDC_PACKET_SIZE);

  /* activate pull-ups except on USB lines */  USB_CFG_IOPORT   = (uint8_t)~((1<<USB_CFG_DMINUS_BIT)|(1<<USB_CFG_DPLUS_BIT));  /* all pins input except USB (-> USB reset) */#ifdef USB_CFG_PULLUP_IOPORT    /* use usbDeviceConnect()/usbDeviceDisconnect() if available */  USBDDR    = 0;    /* we do RESET by deactivating pullup */  usbDeviceDisconnect();#else  USBDDR    = (1<<USB_CFG_DMINUS_BIT)|(1<<USB_CFG_DPLUS_BIT);#endif  j = 0;  while(--j){          /* USB Reset by device only required on Watchdog Reset */      i = 0;      while(--i);      /* delay >10ms for USB reset */  }
#ifdef USB_CFG_PULLUP_IOPORT  usbDeviceConnect();#else  USBDDR    = 0;      /*  remove USB reset condition */#endif
  usbSetInterrupt(0, 0);  /* the host eats the first packet -- don't know why... */
  usbInit();
  sei();//  wdt_enable(WDTO_1S);}
void CDC_poll(void){//  wdt_reset();  usbPoll();
  /*    usb -> rs232c:  ready to receive?    *///  if( usbAllRequestsAreDisabled() /*&& uartRxBytesFree()>=8 */) //TODo
//     usbEnableAllRequests();

  if( usbInterruptIsReady() ) 
    {
	  static uchar sendEmptyFrame = 1;
      if ( txbuffer.n || sendEmptyFrame ) 
	    {
	      usbSetInterrupt((uchar *)txbuffer.buf, txbuffer.n);		  /* send an empty block after last data block to indicate transfer end */
          sendEmptyFrame = txbuffer.n==HW_CDC_PACKET_SIZE? 1:0;
	 	}
      BUF_flush(&txbuffer);    }
  /*rs232 -> usb*/
  if (rxbuffer.n > 0)
    if (*CDC_charrecived != NULL)
	  CDC_charrecived(BUF_get(&rxbuffer));
  /* We need to report rx and tx carrier after open attempt */  if(intr3Status != 0 && usbInterruptIsReady3())
    {      static uint8_t serialStateNotification[10] = {0xa1, 0x20, 0, 0, 0, 0, 2, 0, 3, 0};      if(intr3Status == 2)
        usbSetInterrupt3(serialStateNotification, 8);      else
        usbSetInterrupt3(serialStateNotification+8, 2);      intr3Status--;
      if (*CDC_ondisconnect != NULL)
	    CDC_ondisconnect();     }}void UART_putc(uint8_t data)
{
  BUF_put(data,&txbuffer);
  while (txbuffer.n == 8)
    CDC_poll();
}
void UART_puts(const char *s )
{
  while (*s) 
    UART_putc(*s++);
}

void UART_puts_P(const char *s )
{
  char c;
  while ((c = pgm_read_byte(s++)) ) 
    {
      UART_putc(c);
    }
}

uint16_t UART_getc(void)
{    
  if (rxbuffer.n)
    return BUF_get(&rxbuffer);
  else
    return UART_NO_DATA;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久疯狂做爰流白浆xx| 久久天天做天天爱综合色| 丰满放荡岳乱妇91ww| 激情综合五月婷婷| 国内精品伊人久久久久av一坑| 亚洲成人手机在线| 一个色在线综合| 日韩精品高清不卡| 国产精品亚洲一区二区三区在线| a级高清视频欧美日韩| www.成人在线| 色综合天天综合网天天看片| 欧美色视频在线观看| 制服.丝袜.亚洲.另类.中文| 2020国产精品久久精品美国| 国产精品丝袜在线| 亚洲一区二区三区国产| 久久精品国内一区二区三区| 国产精品亚洲а∨天堂免在线| 成人精品亚洲人成在线| 欧美视频在线播放| 久久久久国产精品厨房| 亚洲色图在线看| 极品少妇xxxx精品少妇偷拍| 日本道精品一区二区三区 | 欧美日韩的一区二区| 久久久天堂av| 麻豆一区二区在线| 色综合天天做天天爱| 久久精品网站免费观看| 亚洲制服丝袜av| 丁香啪啪综合成人亚洲小说| 欧美喷水一区二区| 一区二区不卡在线播放| 欧美精品粉嫩高潮一区二区| 国产精品第一页第二页第三页| 免费成人在线观看视频| 欧美日韩专区在线| 亚洲一区二区三区四区在线免费观看| 激情久久五月天| 精品福利视频一区二区三区| 国产精品99久久久久久宅男| 亚洲日本va在线观看| 国产资源在线一区| 91精品婷婷国产综合久久| 一区二区三区国产精品| 日本韩国欧美一区| 亚洲成人一区二区在线观看| 91国偷自产一区二区三区观看| 国产精品美女一区二区在线观看| 国产一区二区三区免费播放| 亚洲精品一线二线三线| 国产呦萝稀缺另类资源| 精品国产乱码久久久久久久久| 韩日精品视频一区| 国产精品 欧美精品| 欧美精品一区二区三区蜜臀| 狠狠v欧美v日韩v亚洲ⅴ| 精品日韩在线观看| 成人精品视频一区| 亚洲精品日日夜夜| 日韩欧美国产高清| 成人99免费视频| 偷拍日韩校园综合在线| 久久青草欧美一区二区三区| 成人丝袜高跟foot| 青青草原综合久久大伊人精品优势| 精品国产乱码久久久久久夜甘婷婷| 国产精品狼人久久影院观看方式| 欧美在线一区二区| 亚洲一区视频在线观看视频| 91国产视频在线观看| 国产一区二区三区免费播放| 亚洲精品中文字幕乱码三区| 91精品国产一区二区三区香蕉 | 激情五月播播久久久精品| 中文字幕亚洲综合久久菠萝蜜| 欧美日韩精品一区二区在线播放| 成人午夜私人影院| 国产一区二区美女诱惑| 亚洲国产成人tv| 一区二区三区精品| 亚洲品质自拍视频| 国产精品久久久久婷婷二区次| 欧美男同性恋视频网站| 欧美色欧美亚洲另类二区| a在线播放不卡| 91影院在线观看| 色综合久久88色综合天天6| 国产精品18久久久久久久网站| 久久国产视频网| 久久精品72免费观看| 韩国女主播一区| 激情av综合网| 国产成人av电影在线播放| 粉嫩欧美一区二区三区高清影视| 激情另类小说区图片区视频区| 亚洲素人一区二区| 亚洲小说春色综合另类电影| 亚洲国产精品久久人人爱蜜臀 | 成av人片一区二区| 91免费版pro下载短视频| 欧美日韩性生活| 欧美一区二区三区在线| 国产欧美日韩视频在线观看| 久久精品亚洲一区二区三区浴池| 精品99一区二区| 亚洲欧美另类久久久精品2019| 一区二区三区欧美久久| 国内成人精品2018免费看| 成人av在线电影| 91精品国产一区二区三区| 欧美国产一区视频在线观看| 一区二区三区在线免费视频| 精品一区二区三区的国产在线播放 | 中文字幕在线免费不卡| 香蕉影视欧美成人| 成人av电影免费在线播放| 日韩欧美黄色影院| 亚洲欧美日韩人成在线播放| 久久99国产精品尤物| 欧美亚洲免费在线一区| 国产精品私人影院| 国产精品一区二区在线观看网站 | 最新国产成人在线观看| 六月丁香婷婷色狠狠久久| 色爱区综合激月婷婷| 中文字幕乱码日本亚洲一区二区| 日韩1区2区日韩1区2区| 色婷婷国产精品| 夜夜精品视频一区二区| 99国产精品久久久| 亚洲欧洲精品一区二区三区不卡| 国产一区二区导航在线播放| 日韩一区二区在线观看视频| 亚洲超丰满肉感bbw| 欧美日韩免费高清一区色橹橹| 亚洲女爱视频在线| 在线精品亚洲一区二区不卡| 亚洲欧洲另类国产综合| 色婷婷精品大在线视频| 亚洲一区二区四区蜜桃| 欧美伊人久久久久久午夜久久久久| 亚洲另类春色校园小说| 91福利在线播放| 精品亚洲免费视频| 亚洲国产精品国自产拍av| 91香蕉视频mp4| 奇米在线7777在线精品 | 男女性色大片免费观看一区二区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 一区二区三区在线观看网站| 欧美视频自拍偷拍| 国产成人啪免费观看软件| 亚洲精品中文在线| 欧美一区二区网站| 成人va在线观看| 久久成人综合网| 亚洲精品国产a| 亚洲精品一区二区在线观看| 成人一区二区三区在线观看| 亚洲成人动漫av| 国产精品久久网站| 精品国产伦一区二区三区免费 | www国产精品av| 在线免费观看成人短视频| 国产综合成人久久大片91| 亚洲国产日韩一级| 国产精品二区一区二区aⅴ污介绍| 91.com视频| 欧美性受xxxx黑人xyx| 99热99精品| 国产成人h网站| 国产成人综合网| 国产aⅴ综合色| 国产精品一区二区无线| 久久99精品一区二区三区三区| 午夜一区二区三区视频| 亚洲一区二区三区爽爽爽爽爽| 欧美高清在线一区二区| 国产亚洲欧美色| 国产精品系列在线| 亚洲色图欧洲色图| 亚洲猫色日本管| 亚洲一区日韩精品中文字幕| 国产精品久久久久久久裸模| 国产精品电影一区二区| 亚洲欧美中日韩| 亚洲成人综合在线| 美腿丝袜在线亚洲一区| 国产精品中文字幕欧美| 成人av资源站| 欧美日韩免费电影| 国产亚洲一区二区三区| 亚洲欧美电影一区二区| 尤物av一区二区| 国产一区二区在线观看免费| 99re6这里只有精品视频在线观看| 91亚洲男人天堂| 日韩一区二区三区av|