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

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

?? upsd3400_upsd_usb.c

?? uPSD34xx Disk driver
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*------------------------------------------------------------------------------
upsd3400_upsd_usb.c

Version:
September 13, 2005 Ver 1.1 - Updated disclaimer, renamed file.
March 22, 2005 - Version 1.0 - Initial Release.

Description:  Basic USB Functions that include enumeration.

Copyright (c) 2005 STMicroelectronics Inc.

THIS INFORMATION (or THIS SOFTWARE or THIS DOCUMENT) IS FOR GUIDANCE ONLY. ST 
MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS 
SOFTWARE nor for any infringement of patents or other rights of third parties 
which may result from its use. ST MICROELECTRONICS SHALL NOT BE HELD LIABLE FOR 
ANY DIRECT, INDIRECT INCIDENTAL OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY 
CLAIMS ARISING IN CONNECTION WITH OR ARISING FROM THE FURNISHING, PERFORMANCE, 
OR USE OF THIS SOFTWARE. Specifications mentioned in this publication are 
subject to change without notice. This publication supersedes and replaces all 
information previously supplied. STMicroelectronics products are not authorized 
for use as critical components in life support devices or systems without the 
express written approval of STMicroelectronics.

------------------------------------------------------------------------------*/

#pragma NOAREGS

#include "upsd3400.h"
#include "upsd3400_hardware.h"
#include "upsd3400_usb.h"
#include "upsd3400_upsd_usb.h"
#include "upsd3400_usb_app.h"

#define MASS_STORAGE 1

// Constant Variables for USB Descriptors
extern const device_descriptor code deviceDesc;
extern const configuration_descriptor code configDesc;
extern const uchar * const code stringDescTable[];

unsigned char data usbState, ep0state, ep1state;
static unsigned char confignum;
static unsigned char remotewakeupen;
static unsigned char DevIdleRate;

setup_buffer setupPacket;
static unsigned char* pTransmitBufferEP0;
static unsigned char  bytesToTransmitEP0;

//data unsigned char xdata * TxBufferEP0;
//data unsigned char xdata * RxBufferEP0;

#define USB_FIFO ((unsigned char volatile xdata *) USB_BASE_ADDR)


/******************************************************************************

                              PRODUCT SPECIFIC AREA

 ******************************************************************************



/******************************************************************************

                              PRODUCT INDEPENDENT AREA

 ******************************************************************************/



void OnUsbReset()
/******************************************************************************
 Function   : void OnUsbReset()
 Parameters : none
 Description: USB driver module initialization routine.
 ******************************************************************************/
 {
  UCTL &= ~USBEN;
  UCTL |= USBEN;                             //USB enable

  UIE0  = RSTIE | SUSPENDIE;                 //Enable RESET, SUSPEND, RESUME INT
  UIE1  = IN0IE;                             //Enable EP0 IN INT
  UIE2  = OUT0IE;                            //Enable EP0 OUT INT
  UIE3  = 0;

  UPAIR = 0;
          //1+2+4+8;                       

  USEL  = OUTDIR | SELEP0;                   //Select EP0 OUT
  UCON  = ENABLE_FIFO | EPFIFO_BSY;

  USEL  = INDIR | SELEP0;                    //Select EP0 IN
  UCON  = ENABLE_FIFO;

  confignum = 0;
  usbState  = US_DEFAULT;
  ep0state  = US_EPDEFAULT;
  ep1state  = US_EPDEFAULT;
 }








void STALL_EP0()
/******************************************************************************
 Function   : void STALL_EP0()
 Parameters : none
 Description: Stalls EP0.
              This endpoint is halted or a control pipe request is not supported.
              Endpoint can be unstalled by Bus Reset.
 ******************************************************************************/
 {
  USEL     = INDIR | SELEP0;
  UCON    |= STALL | ENABLE_FIFO;
  UCON    &= ~TOGGLE;                        //clear toggle
  USIZE    = 0;
  ep0state = US_EPSTALL;
 }






void STALL_EP1()
/******************************************************************************
 Function   : void STALL_EP1()
 Parameters : none
 Description: Stalls EP1.
              This endpoint is halted or a control pipe request is not supported.
              Endpoint can be unstalled by Bus Reset.
 ******************************************************************************/
 {
  USEL     = INDIR | SELEP1;
  UCON    |= STALL;
  UCON    &= ~TOGGLE;                        //clear toggle
  USIZE    = 0;
  ep1state = US_EPSTALL;
 }





/*
void RemoteWakeup()
/******************************************************************************
 Function   : void RemoteWakeup()
 Parameters : none
 Description: USB device remote wakeup
 ******************************************************************************/
/*
 {
  data int i;
  if (remotewakeupen)
   {
    UCTL |= WAKEUP;

    for (i=0;i<10000;i++)                    // delay cca 10ms();
     {
      i++;
      i--;
     }
    UCTL &= ~WAKEUP;
    usbState = US_DEFAULT;
   }
 }
*/





void OnUsbSuspend()
/******************************************************************************
 Function   : void OnUsbSuspend()
 Parameters : none
 Description: service routine for USB Suspend event
 ******************************************************************************/
 {
  usbState =  US_SUSPENDED;
 }






void OnUsbResume()
/******************************************************************************
 Function   : void OnUsbResume()
 Parameters : none
 Description: service routine for USB Host resume event
 ******************************************************************************/
 {
  usbState =  US_DEFAULT;
 }







void TransmitZeroLengthEP0()
/******************************************************************************
 Function   : void TransmitZeroLengthEP0()
 Parameters : none
 Description: Transmits zero length data of EP0.
 ******************************************************************************/
 {
  data unsigned int count;

  USEL  = INDIR | SELEP0;
  UCON ^= TOGGLE;
  count = 0;
  while (UCON & EPFIFO_BSY)                  //check busy
   {
    count++;
    if (count==0)
     {
      USIZE = 0;
      return;
     }
   }
  USIZE = 0;
 }












void TransmitEP0()
/******************************************************************************
 Function   : void TransmitEP0()
 Parameters : none
 Description: Transmits next segment of descriptor buffer (pTransmitBufferEP0).
 ******************************************************************************/
 {
  data unsigned char i;
  data unsigned char nBytes;
  data unsigned  int count;
  data unsigned ZLPacket;

  if (bytesToTransmitEP0 == 0)
   {
    USEL  = OUTDIR | SELEP0;                 //Select EP0 OUT
    UCON |= ENABLE_FIFO;
    UCON |= TOGGLE;
    USIZE = 0;
    return;
   }
  else
   {
    USEL  = INDIR | SELEP0;                  //select EP0 IN
    UCON |= ENABLE_FIFO;

    count = 0;
    while (UCON & EPFIFO_BSY)                //check busy
     {
      count++;
      if (count==0)
       {
        USIZE = 0;
        return;
       }
     }

    UCON ^= TOGGLE;

    if (pTransmitBufferEP0 == NULL)
     {
      bytesToTransmitEP0 = 0;
      ZLPacket = 0;
     }
    else
     {
      ZLPacket = (bytesToTransmitEP0 == EP0_PKT_SIZE)?1:0;
     }

    nBytes = bytesToTransmitEP0;
    if (nBytes > EP0_PKT_SIZE)
     {
      nBytes = EP0_PKT_SIZE;
     }

    for(i=0; i<nBytes; i++)
     {
      USB_FIFO[i] = *pTransmitBufferEP0++;
     }
    bytesToTransmitEP0 -= nBytes;
    USIZE = nBytes;

    if (ZLPacket)
     {
      pTransmitBufferEP0 = NULL;
      bytesToTransmitEP0 = 255;
     }
   }
 }







void OnGetStatus()
/******************************************************************************
 Function   : void OnGetStatus()
 Parameters : none
 Description: Handler for GET_STATUS requests.
 ******************************************************************************/
 {
  USEL  = INDIR | SELEP0;                    //select EP0 OUT
  UCON |= TOGGLE;                            //DATA1
  UCON |= ENABLE_FIFO;

  
  if((setupPacket.wIndex.lo == 0x00) & (setupPacket.wIndex.hi == 0x00))
   {
    USB_FIFO[0] = ((BM_ATTRIBUTES & 0x40)>>6); //|(remotewakeupen<<1);
	// Not supported - Suba 05/18/2005
	//Added macro for device powered/bus powered status instead of hard coding - Suba 05/26/2005
    USB_FIFO[1] = 0;
   }
  else if((setupPacket.wIndex.lo == 0x81) & (setupPacket.wIndex.hi == 0x00))
   {
                                             //endpoint1
    if(ep1state == US_EPSTALL)
     {
      USB_FIFO[0] = 1;
     }
    else
     {
      USB_FIFO[0] = 0;
     }
    USB_FIFO[1] = 0;
   }
   //added get status support for endpoint 0x01(EP3_ADDR)
   else if((setupPacket.wIndex.lo == 0x01) & (setupPacket.wIndex.hi == 0x00))
   {
                                             //endpoint1
    if(ep1state == US_EPSTALL)
     {
      USB_FIFO[0] = 1;
     }
    else
     {
      USB_FIFO[0] = 0;
     }
    USB_FIFO[1] = 0;
   }
  else
   {
    STALL_EP0();                // No features currently implemented, so stall EP0
    return;
   }
  USIZE = 0x02;

  bytesToTransmitEP0 = 0;
 }






void OnClearFeature()
/******************************************************************************
 Function   : void OnClearFeature()
 Parameters : none
 Description: Handler for ClearFeature()
 ******************************************************************************/
 {
  /*                                           //clear device remote wakeup enable- not supported Suba 05/18/2005
  if((setupPacket.wValue.lo == 0x01)&&(setupPacket.wIndex.lo== 0x00))
   {
    remotewakeupen = 0x00;
   }
                                             //clear EP1 STALL
  else
   */
  if((setupPacket.wValue.lo == 0x00) && (setupPacket.wIndex.lo == EP1_ADDR))
   {
    ep1state = US_EPDEFAULT;

    USEL =  INDIR | SELEP1;
    UCON &= ~STALL;
   }
   //Suba 05/18/2005 - added clear feature support for EP3_ADDR-0x01
  else
  
  if((setupPacket.wValue.lo == 0x00) && (setupPacket.wIndex.lo == EP3_ADDR))
   {
    ep1state = US_EPDEFAULT;

    USEL =  INDIR | SELEP1;
    UCON &= ~STALL;
   } 
  else
   {
    STALL_EP0();
    return;
   }
  TransmitZeroLengthEP0();
 }







void OnSetFeature()
/******************************************************************************
 Function   : void OnSetFeature()
 Parameters : none
 Description: Handler for Set_FEATURE requests.
 ******************************************************************************/
 {//set device remote wakeup enable-not supported Suba 05/18/2005
  /*if((setupPacket.wValue.lo == 0x01)&&(setupPacket.wIndex.lo== 0x00))
   {

    remotewakeupen = 0x01;                   //device remote wakeup
   }
                                             //set EP1 STALL
  else*/ if((setupPacket.wValue.lo == 0x00) && (setupPacket.wIndex.lo== EP1_ADDR))
   {
    ep1state = US_EPSTALL;                   //EP halt
    USEL     = INDIR | SELEP1;
    UCON    |= STALL;
   }
   //Suba 05/18/2005 - added set feature support for EP3_ADDR-0x01
  else if((setupPacket.wValue.lo == 0x00) && (setupPacket.wIndex.lo== EP3_ADDR))

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲va韩国va欧美va| 岛国精品在线播放| 国产精品18久久久久| 99re成人精品视频| 日韩精品专区在线| 亚洲人成在线播放网站岛国| 青青草精品视频| av一二三不卡影片| 亚洲精品在线三区| 偷拍日韩校园综合在线| 99久久伊人精品| 26uuu久久综合| 日韩一区欧美二区| 日本国产一区二区| 国产精品久久三| 国产一区福利在线| 日韩美女一区二区三区四区| 亚洲黄网站在线观看| 粉嫩久久99精品久久久久久夜| 91精品国产综合久久福利 | 91农村精品一区二区在线| 日韩精品专区在线影院观看| 三级影片在线观看欧美日韩一区二区| 成人app软件下载大全免费| 精品av综合导航| 狠狠色丁香久久婷婷综| 欧美丰满美乳xxx高潮www| 亚洲午夜av在线| 欧美在线free| 亚洲最大色网站| 在线观看三级视频欧美| 一区二区在线观看视频在线观看| 91在线码无精品| 亚洲在线视频免费观看| 91福利视频在线| 亚洲午夜一二三区视频| 欧美日韩国产高清一区二区| 亚洲观看高清完整版在线观看| 在线亚洲免费视频| 五月天精品一区二区三区| 欧美日韩三级视频| 美女国产一区二区三区| 日韩精品一区二区三区在线| 国产美女精品一区二区三区| 久久久久久久久久看片| 国产成人无遮挡在线视频| 久久久亚洲国产美女国产盗摄| 自拍视频在线观看一区二区| 国产在线精品免费| 久久久亚洲精品石原莉奈 | 久久久久久久久久久99999| 国产中文一区二区三区| 国产欧美一区二区三区网站| 色综合中文字幕国产 | 欧美成人精品二区三区99精品| 狠狠色丁香久久婷婷综| 国产精品私人自拍| 欧美性猛交xxxxxxxx| 日本一道高清亚洲日美韩| 久久精品夜夜夜夜久久| 色综合天天做天天爱| 亚洲成av人片观看| 久久久久久久av麻豆果冻| 99re免费视频精品全部| 美腿丝袜在线亚洲一区| 中文字幕日韩一区| 日韩一区二区三区四区| 成人性生交大片免费看中文| 亚洲一区二区三区国产| 久久久久久久久久久黄色| 欧美亚洲国产怡红院影院| 狠狠色丁香婷婷综合久久片| 亚洲摸摸操操av| 亚洲精品一区二区三区香蕉 | 精品视频一区二区三区免费| 精品一区二区在线观看| 亚洲精品成人少妇| 亚洲精品一区二区三区精华液 | 亚洲综合免费观看高清完整版在线| 91精品国产免费| 91视频www| 国产综合色在线视频区| 亚洲一区二区三区四区不卡| 国产色综合一区| 91.com视频| 在线一区二区三区做爰视频网站| 精品写真视频在线观看| 亚洲成人av电影| 亚洲欧美在线高清| 国产亚洲污的网站| 欧美xxxxxxxx| 欧美浪妇xxxx高跟鞋交| 91丨porny丨户外露出| 国产mv日韩mv欧美| 国产在线精品不卡| 男女视频一区二区| 偷拍日韩校园综合在线| 亚洲午夜影视影院在线观看| 亚洲欧美日韩综合aⅴ视频| 久久久久99精品国产片| 日韩欧美色综合| 欧美精品三级日韩久久| 欧美日产在线观看| 在线观看一区二区视频| 99riav一区二区三区| av福利精品导航| 成人中文字幕在线| 成人永久看片免费视频天堂| 国产精品69毛片高清亚洲| 韩国中文字幕2020精品| 美女国产一区二区| 国产一区二区看久久| 激情久久五月天| 狠狠色狠狠色综合日日91app| 久久精品av麻豆的观看方式| 蜜臀av国产精品久久久久| 免费人成在线不卡| 日本欧美久久久久免费播放网| 天堂成人国产精品一区| 首页综合国产亚洲丝袜| 日韩精品每日更新| 麻豆精品视频在线观看免费 | 亚洲乱码国产乱码精品精小说| 国产精品久久久久久一区二区三区| 国产午夜精品久久久久久免费视| 欧美经典三级视频一区二区三区| 国产亚洲成av人在线观看导航| 中文一区在线播放| 亚洲同性gay激情无套| 亚洲国产一区二区视频| 日精品一区二区| 国产一区二区三区视频在线播放| 国产电影精品久久禁18| 91在线小视频| 在线不卡的av| 国产无遮挡一区二区三区毛片日本| 中国色在线观看另类| 一区二区成人在线| 美女视频免费一区| av一区二区三区在线| 欧美日韩www| 国产欧美一区二区三区在线看蜜臀| 最新热久久免费视频| 午夜精品成人在线视频| 国产在线不卡一卡二卡三卡四卡| 成人免费视频视频在线观看免费| 日本精品视频一区二区三区| 91精品国产91久久综合桃花| 国产日韩高清在线| 亚洲在线视频免费观看| 国产高清视频一区| 欧美系列在线观看| 精品国产成人系列| 一区二区三区四区视频精品免费| 免费看欧美女人艹b| 9人人澡人人爽人人精品| 欧美日韩国产欧美日美国产精品| 精品精品国产高清a毛片牛牛| 亚洲图片另类小说| 狠狠色狠狠色综合系列| 欧洲精品在线观看| 中文字幕av一区二区三区| 日日摸夜夜添夜夜添亚洲女人| 成人黄页毛片网站| 精品乱人伦小说| 亚洲丶国产丶欧美一区二区三区| 床上的激情91.| 2023国产一二三区日本精品2022| 亚洲精品欧美专区| 国产精品 日产精品 欧美精品| 欧美精品久久天天躁| 日韩美女视频一区二区 | 国产喷白浆一区二区三区| 午夜伊人狠狠久久| 91麻豆精品一区二区三区| 久久久国产精品不卡| 美女被吸乳得到大胸91| 欧美日韩的一区二区| 亚洲精品视频在线观看网站| 国产99久久久精品| 久久久久久免费网| 狠狠色综合日日| 日韩精品自拍偷拍| 日韩在线a电影| 8x福利精品第一导航| 亚洲成av人片一区二区| 欧美中文字幕不卡| 亚洲精品中文在线影院| 91在线国产观看| 国产精品国模大尺度视频| 成人在线视频首页| 国产精品久久久久久久蜜臀| 国产精品77777| 中文字幕的久久| 成人性生交大片免费看视频在线| 久久奇米777| 国产福利电影一区二区三区| 精品久久久久久久久久久久久久久久久| 午夜一区二区三区视频| 6080午夜不卡|