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

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

?? usb_kbd_enum.c

?? atmel c5122 USB C51程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*C**************************************************************************
* NAME:         usb_kbd_enum.c
*----------------------------------------------------------------------------
* Copyright (c) 2003 Atmel.
*----------------------------------------------------------------------------
* RELEASE:      c5122-scib-usb-hid-2_4_0      
* REVISION:     1.7     
*----------------------------------------------------------------------------
* PURPOSE: 
* This file contains the USB Endpoint 0 management routines corresponding
* to a USB HID keyboard implementation.
*****************************************************************************/

/*_____ I N C L U D E S ____________________________________________________*/

#include "config.h"
#include "lib_mcu\usb\usb_drv.h"
#include "usb_kbd_enum.h"

/*_____ M A C R O S ________________________________________________________*/


/*_____ D E F I N I T I O N ________________________________________________*/

code struct usb_st_device_descriptor usb_device_descriptor =
{
  sizeof(usb_device_descriptor), DEVICE, USB_SPECIFICATION, DEVICE_CLASS,
  DEVICE_SUB_CLASS, DEVICE_PROTOCOL, EP_CONTROL_LENGTH, VENDOR_ID, PRODUCT_ID,
  RELEASE_NUMBER, MAN_INDEX, PROD_INDEX, SN_INDEX, NB_CONFIGURATION
};

code struct usb_st_manufacturer usb_manufacturer =
{ sizeof(usb_manufacturer),  STRING, USB_MANUFACTURER_NAME };

code struct usb_st_product usb_product =
{ sizeof(usb_product),       STRING, USB_PRODUCT_NAME };

code struct usb_st_serial_number usb_serial_number =
{ sizeof(usb_serial_number), STRING, USB_SERIAL_NUMBER };

code struct usb_st_language_descriptor usb_language =
{ sizeof(usb_language),      STRING, LANGUAGE_ID };

code struct  
{ struct usb_st_configuration_descriptor  cfg;
  struct usb_st_interface_descriptor      ifc;
  struct usb_st_hid_descriptor            hid ;
  struct usb_st_endpoint_descriptor       ep1 ;
  Uchar                                   rep[SIZE_OF_REPORT] ;
}
  usb_configuration =
  {
    { 9, CONFIGURATION, CONF_LENGTH, NB_INTERFACE, CONF_NB,
      CONF_INDEX, CONF_ATTRIBUTES, MAX_POWER},
    { 9, INTERFACE, INTERFACE_NB, ALTERNATE, NB_ENDPOINT, INTERFACE_CLASS,
      INTERFACE_SUB_CLASS, INTERFACE_PROTOCOL, INTERFACE_INDEX },
    { 9, HID, 0x1101, 8, 1, REPORT, 0x3B00 },
    { 7, ENDPOINT, ENDPOINT_NB_1, EP_ATTRIBUTES_1, EP_SIZE_1, EP_INTERVAL_1 },
    { 0x05,0x01,          /* Usage Page (Generic Desktop)      */        
      0x09,0x06,          /* Usage (Keyboard)                  */
      0xA1,0x01,          /* Collection (Application)          */
      0x05,0x07,          /* Usage Page (Keyboard)             */
      0x19,224,           /* Usage Minimum (224)               */
      0x29,231,           /* Usage Maximum (231)               */
      0x15,0x00,          /* Logical Minimum (0)               */
      0x25,0x01,          /* Logical Maximum (1)               */
      0x75,0x01,          /* Report Size (1)                   */
      0x95,0x08,          /* Report Count (8)                  */
      0x81,0x02,          /* Input (Data, Variable, Absolute)  */
      0x81,0x01,          /* Input (Constant)                  */
      0x19,0x00,          /* Usage Minimum (0)                 */
      0x29,101,           /* Usage Maximum (101)               */
      0x15,0x00,          /* Logical Minimum (0)               */
      0x25,101,           /* Logical Maximum (101)             */
      0x75,0x08,          /* Report Size (8)                   */
      0x95,0x06,          /* Report Count (6)                  */
      0x81,0x00,          /* Input (Data, Array)               */
      0x05,0x08,          /* Usage Page (LED)                  */
      0x19,0x01,          /* Usage Minimum (1)                 */
      0x29,0x05,          /* Usage Maximum (5)                 */
      0x15,0x00,          /* Logical Minimum (0)               */
      0x25,0x01,          /* Logical Maximum (1)               */
      0x75,0x01,          /* Report Size (1)                   */
      0x95,0x05,          /* Report Count (5)                  */
      0x91,0x02,          /* Output (Data, Variable, Absolute) */
      0x95,0x03,          /* Report Count (3)                  */
      0x91,0x01,          /* Output (Constant)                 */
      0xC0                /* End Collection                    */  
      }
  };

static  bit     zlp;
static  Uchar   endpoint_status[2];
static  Uchar   hid_idle_duration;
static  Uchar   *pbuffer;
static  Uchar   bmRequestType;

        Uchar   usb_configuration_nb;
extern  bit     usb_connected;
/*_____ D E C L A R A T I O N ______________________________________________*/

static  void    usb_get_descriptor (void);
static  void    usb_read_request (void);
static  void    usb_set_address (void);
static  void    usb_set_configuration (void);
static  void    usb_clear_feature (void);
static  void    usb_set_feature (void);
static  void    usb_get_status (void);
static  void    usb_get_configuration (void);
static  void    usb_get_interface (void);
static  void    usb_hid_set_report (void);
static  void    usb_hid_set_idle (void);
static  void    usb_hid_get_idle (void);

/*F**************************************************************************
* NAME: usb_var_init
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE: 
* This function initializes the USB controller and resets the endpoints FIFOs.
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE: 
*----------------------------------------------------------------------------
* REQUIREMENTS: 
*****************************************************************************/
void usb_var_init (void)
{
  endpoint_status[EP_CONTROL] = 0x00;
  endpoint_status[EP_IN] = 0x00;
  usb_connected = TRUE;
  usb_configuration_nb = 0x00;
}


/*F**************************************************************************
* NAME: usb_ep_init
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE: 
* This function configures the endpoints.
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE: 
*----------------------------------------------------------------------------
* REQUIREMENTS: 
*****************************************************************************/
void usb_ep_init (void)
{
  usb_configure_endpoint(EP_IN , INTERRUPT_IN);
  usb_reset_endpoint(EP_IN);
}



/*F**************************************************************************
* NAME: usb_enumeration_process
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE: 
* This function manages the enumeration process
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE: 
*----------------------------------------------------------------------------
* REQUIREMENTS: 
*****************************************************************************/
void usb_enumeration_process (void)
{ 
  Usb_select_ep(EP_CONTROL);
  usb_read_request();
}


/*F**************************************************************************
* NAME: usb_read_request
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE: 
* This function reads the SETUP request sent to the default control endpoint
* and  the appropriate function. When exiting of the usb_read_request
* function, the device is ready to manage the next request.
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE: list of supported requests:
*               GET_DESCRIPTOR
*               GET_CONFIGURATION
*               SET_ADDRESS
*               SET_CONFIGURATION or SET_REPORT
*               CLEAR_FEATURE
*               SET_FEATURE
*               GET_STATUS
*               GET_MAX_LUN
*               MASS_STORAGE_RESET
*----------------------------------------------------------------------------
* REQUIREMENTS: 
*****************************************************************************/
void usb_read_request (void)
{ 
  bmRequestType = Usb_read_byte();          /* read bmRequestType */

  switch (Usb_read_byte())                  /* test the bRequest value */
  {
    case GET_DESCRIPTOR:
      usb_get_descriptor();
      break;
    case GET_CONFIGURATION:
      usb_get_configuration();
      break;
    case SET_ADDRESS:
      usb_set_address();
      break;
    case SET_CONFIGURATION:  /* or SET_REPORT */
      if (bmRequestType == 0) { usb_set_configuration(); }
      else { usb_hid_set_report(); }
      break;
    case CLEAR_FEATURE:
      usb_clear_feature();
      break;
    case SET_FEATURE:
      usb_set_feature();
      break;
    case GET_STATUS:
      usb_get_status();
      break;
    case GET_INTERFACE:      /* HID_SET_IDLE */
      if (bmRequestType == 0x81) { usb_get_interface(); } 
      else { usb_hid_set_idle(); }
      break;
    case HID_GET_IDLE:
      usb_hid_get_idle();
      break;
    case SET_DESCRIPTOR:
    case SET_INTERFACE:
    case SYNCH_FRAME:
    default:
      Usb_clear_rx_setup();
      Usb_set_stall_request();
      while (!Usb_stall_sent());
      Usb_clear_stall_request();
      Usb_clear_stalled();
      break;
    }
    Usb_clear_DIR();
}


/*F**************************************************************************
* NAME: usb_set_address
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE: 
* This function manages the SET_ADDRESS request. The new address is stored
* in the USBADDR register
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS: 
*****************************************************************************/
void usb_set_address (void)
{
Uchar add;

  add = Usb_read_byte();                    /* store the LSB of wValue = address */
  Usb_clear_rx_setup();
  Usb_set_tx_ready();                          /* send a ZLP for STATUS phase */
  Usb_set_FADDEN();
  while (!(Usb_tx_complete()));
  Usb_clear_tx_complete();
  Usb_configure_address(add);
}


/*F**************************************************************************
* NAME: usb_set_configuration
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE: 
* This function manages the SET_CONFIGURATION request.
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS: 
*****************************************************************************/
void usb_set_configuration (void)
{
 Uchar configuration_number;
  configuration_number = Usb_read_byte();   /* read the conf. num. in wValue */
  Usb_clear_DIR();
  Usb_clear_rx_setup();
/*  switch (configuration_number)
  {
    case 0:
      Usb_clear_CONFG();
      usb_configurion = 0x00;
      break;
    case CONF_NB:
      Usb_set_CONFG();
      Usb_set_usb_configured();
      break;
    default:
      Usb_set_stall_request();
      while (!Usb_stall_sent());
      Usb_clear_stall_request();
      Usb_clear_stalled();
      return;
  }*/
  if (configuration_number <= CONF_NB)
  {
    usb_configuration_nb = configuration_number;
  }
  else
  {
    Usb_set_stall_request();
    while (!Usb_stall_sent());
    Usb_clear_stall_request();
    Usb_clear_stalled();
    return;
  }

  Usb_set_tx_ready();                          /* send a ZLP for STATUS phase */
  while (!Usb_tx_complete());
  Usb_clear_tx_complete();
  usb_ep_init();                            /* endpoints configuration */
}


/*F**************************************************************************
* NAME: usb_get_descriptor
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE: 
* This function manages the GET_DESCRIPTOR request.
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS: 
*****************************************************************************/
void usb_get_descriptor (void)
{
Uchar   data_to_transfer;
Uint16  wLength;
Uchar   descriptor_type;
Uchar   string_type;

  zlp = FALSE;                              /* no zero length packet */
  string_type = Usb_read_byte();            /* read LSB of wValue */
  descriptor_type = Usb_read_byte();        /* read MSB of wValue */
  switch (descriptor_type)
  {
    case DEVICE:
    {
      data_to_transfer = sizeof (usb_device_descriptor);
      pbuffer = &(usb_device_descriptor.bLength);
      break;
    }

    case CONFIGURATION:
    {
      data_to_transfer = sizeof (usb_configuration);
      pbuffer = &(usb_configuration.cfg.bLength);
      break;
    }

    case REPORT:
    {
      data_to_transfer = SIZE_OF_REPORT;
      pbuffer = &(usb_configuration.rep[0]);
      break;
    }

    case HID:
    {
      data_to_transfer = sizeof(usb_configuration.hid);
      pbuffer = &(usb_configuration.hid.bLength);
      break;
    }
    case STRING:
    {
      switch (string_type)
      {
        case LANG_ID:
        {
          data_to_transfer = sizeof (usb_language);
          pbuffer = &(usb_language.bLength);
          break;
        }
        case MAN_INDEX:
        {
          data_to_transfer = sizeof (usb_manufacturer);
          pbuffer = &(usb_manufacturer.bLength);
          break;
        }
        case PROD_INDEX:
        {
          data_to_transfer = sizeof (usb_product);
          pbuffer = &(usb_product.bLength);
          break;
        }
        case SN_INDEX:
        {
          data_to_transfer = sizeof (usb_serial_number);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品久久理论片| 欧美国产精品中文字幕| 午夜精品久久久久影视| 欧美亚洲国产怡红院影院| 亚洲最新在线观看| 欧美日本国产一区| 免费高清在线视频一区·| 久久亚洲私人国产精品va媚药| 精彩视频一区二区三区| 久久久久久免费毛片精品| 国产精品一二一区| 成人免费一区二区三区在线观看 | 欧美一区午夜精品| 人人狠狠综合久久亚洲| 国产拍欧美日韩视频二区| 99久久伊人久久99| 午夜视频在线观看一区二区三区| 日韩一区二区视频| 国产成人av电影在线| 一区二区成人在线视频| 精品日韩欧美在线| 91丨porny丨户外露出| 日韩av成人高清| 欧美激情中文字幕一区二区| 欧美午夜电影网| 国产精品香蕉一区二区三区| 亚洲精品视频一区| 精品播放一区二区| 91成人在线观看喷潮| 激情六月婷婷久久| 亚洲综合免费观看高清在线观看| 精品国内片67194| 色哟哟欧美精品| 国产一区二区毛片| 五月天欧美精品| 国产精品久久午夜夜伦鲁鲁| 欧美日韩一区二区三区在线| 国产成人午夜99999| 午夜视频在线观看一区| 中文字幕一区二区三中文字幕| 欧美一区二区视频观看视频| 99精品视频在线观看免费| 男男成人高潮片免费网站| 亚洲欧美偷拍三级| 久久亚洲欧美国产精品乐播| 欧美区一区二区三区| 99久久精品国产观看| 国产一区二区三区视频在线播放| 亚洲一区电影777| 国产精品午夜在线| 精品久久国产97色综合| 在线观看日韩高清av| jvid福利写真一区二区三区| 国产一区二区三区综合| 九一九一国产精品| 日本va欧美va精品| 午夜影院久久久| 亚洲欧美乱综合| 中文字幕五月欧美| 国产欧美一区二区三区网站 | 亚洲综合另类小说| 综合久久给合久久狠狠狠97色| 日韩欧美成人一区| 777精品伊人久久久久大香线蕉| 91天堂素人约啪| 北岛玲一区二区三区四区| 国内精品免费**视频| 精品无人区卡一卡二卡三乱码免费卡 | 中文字幕视频一区二区三区久| 久久―日本道色综合久久| 日韩一区二区在线看| 欧美久久免费观看| 欧美一区二区久久久| 欧美丰满一区二区免费视频| 欧美色图激情小说| 欧美伦理影视网| 欧美欧美欧美欧美| 777欧美精品| 日韩欧美国产一区在线观看| 日韩精品一区二区三区老鸭窝| 日韩欧美亚洲一区二区| 精品久久久久香蕉网| 精品第一国产综合精品aⅴ| 久久精子c满五个校花| 国产亚洲婷婷免费| 国产精品视频看| 亚洲视频一二区| 一区二区三区加勒比av| 性做久久久久久| 久久国产欧美日韩精品| 国产一区三区三区| 成人av在线网| 在线观看免费亚洲| 欧美一区二区视频网站| 久久精品免视看| 国产精品免费视频网站| 一区二区三区精品久久久| 日韩在线一二三区| 国产精品亚洲一区二区三区在线| 国产成人av资源| 91网页版在线| 5566中文字幕一区二区电影 | 精品女同一区二区| 欧美精品精品一区| 精品国产一区二区三区av性色| 欧美国产综合色视频| 亚洲最大成人网4388xx| 亚洲国产精品久久艾草纯爱| 精品在线一区二区| 在线视频国内自拍亚洲视频| 欧美一级搡bbbb搡bbbb| 国产欧美日韩综合| 婷婷综合久久一区二区三区| 国内成人免费视频| 日本韩国精品一区二区在线观看| 日韩视频一区二区| 亚洲免费在线播放| 国产呦萝稀缺另类资源| 色哟哟一区二区在线观看| 精品免费日韩av| 亚洲国产日日夜夜| 高清日韩电视剧大全免费| 欧美精品自拍偷拍动漫精品| 国产欧美日韩视频在线观看| 亚洲国产日日夜夜| 不卡的av在线| 久久蜜桃香蕉精品一区二区三区| 亚洲午夜久久久久久久久久久| 九色|91porny| 在线成人小视频| 国产精品久久久久久久久图文区| 日韩电影免费一区| 色呦呦一区二区三区| 久久九九久久九九| 久久精品国产99国产| 精品视频资源站| 中文字幕亚洲在| 国产精品亚洲成人| 日韩一级视频免费观看在线| 亚洲欧美日韩久久| 国产aⅴ精品一区二区三区色成熟| 欧美三日本三级三级在线播放| 亚洲欧洲精品一区二区三区不卡| 国产一区欧美日韩| 欧美剧情片在线观看| 亚洲精品久久嫩草网站秘色| 成人做爰69片免费看网站| 欧美v国产在线一区二区三区| 一个色综合av| 91福利视频网站| 一区二区在线观看视频| 波多野洁衣一区| 国产精品亲子乱子伦xxxx裸| 国产精品综合一区二区| 久久综合一区二区| 精品影视av免费| 欧美电视剧免费全集观看| 视频一区二区三区在线| 欧美日韩一级黄| 亚洲成人激情av| 欧美日韩一区二区在线观看视频| 亚洲天堂2014| 91在线无精精品入口| 日韩一区欧美一区| 成人av影院在线| 国产精品久久久久久久久久久免费看 | 一本久久a久久免费精品不卡| 国产精品色噜噜| 成人福利视频网站| 中文字幕一区二区三区在线播放 | 亚洲女同女同女同女同女同69| 粉嫩av一区二区三区粉嫩| 国产欧美日韩视频在线观看| 成人一区二区三区中文字幕| 日本一区二区三区四区| av亚洲精华国产精华| 亚洲精品大片www| 欧美色图片你懂的| 奇米色一区二区| 久久九九全国免费| 91在线观看污| 亚洲高清不卡在线观看| 91精品国产高清一区二区三区蜜臀 | 成人综合激情网| 亚洲欧美成人一区二区三区| 日本韩国欧美三级| 日韩国产欧美一区二区三区| 精品久久久三级丝袜| 成人avav在线| 蜜桃一区二区三区四区| 久久久久久久av麻豆果冻| 99re8在线精品视频免费播放| 国产精品免费久久久久| 91福利国产精品| 精品亚洲porn| 一区二区三区免费在线观看| 欧美一区二区三区视频| 国产精品一区久久久久| 亚洲精品中文在线| 精品三级在线观看|