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

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

?? host2131.c

?? 51+sl811讀寫U盤的源程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
#pragma NOIV					            // Do not generate interrupt vectors
////////////////////////////////////////////////////////////////////////////////
// File:		host2131.c
// Purpose:	    8051 firmware to master SL811 Embedded Host.
//              Derived from periph.c frameworks file.
//              Contains USB peripheral-related firmware.
//              Contains PC host command interface.
//              Based on SL811HST code written by cxn.
//
// $Header: /USB/ez811/firmware/Emb_Host/host2131.c 8     5/17/02 6:09p Tpm $
// Copyright (c) 2002 Cypress Semiconductor. May not be reproduced without permission.
// See the license agreement for more details.
////////////////////////////////////////////////////////////////////////////////

#include "ezusb.h"
#include "ezregs.h"
#include "host_811.h"

extern BOOL	GotSUD;			// Received setup data flag
extern BOOL	Sleep;
extern BOOL	Rwuen;
extern BOOL	Selfpwr;

extern BOOL SLAVE_ENUMERATED;
extern BOOL	BULK_OUT_DONE;
extern BOOL DESC_XFER;
extern BOOL DATA_XFER;
extern xdata BYTE DataBufLen;
extern xdata BYTE DBUF[];
extern xdata BYTE HOSTCMD[];
extern xdata BYTE REGBUFF[];
extern xdata BYTE remainder;
extern void sl811h_init(void);
extern int slave_detect(void);
extern BOOL	CONFIG_DONE;

extern BOOL DATA_XFER_OUT;
extern xdata BYTE DBUFOut[];
extern BOOL dsPoll;
extern BOOL bDataToggle;

extern xdata pDevDesc  	pDev;			// Device descriptor struct
extern xdata pCfgDesc  	pCfg;			// Config descriptor struct
extern xdata pStrDesc 	pStr;			// String descriptor struct
extern xdata pHidDesc 	pHid;			// HID class descriptor struct
extern xdata pHubDesc 	pHub;			// HUD class descriptor struct
extern xdata pIntfDesc 	pIfc;			// Interface descriptor struct
extern xdata pHUBDEV    uHub;			// Struct for downstream device on HUB
extern xdata pUSBDEV    uDev[];	// Multiple USB devices attributes, Max 5 devices

void dsOut(void);
int DataRW(BYTE usbaddr, BYTE epaddr, WORD wPayload, WORD wLen, BYTE *pData);
WORD GetDevInfo(BYTE *DevInfo);

int	desc_next;
int	data_next;
void TD_Poll(void);

BYTE	Configuration;		// Current configuration
BYTE	AlternateSetting;	// Alternate settings

//-----------------------------------------------------------------------------
// Task Dispatcher hooks
//	The following hooks are called by the task dispatcher.
//-----------------------------------------------------------------------------
// IN2 	=>  1 bytes max, Refresh data update from ezusb to host
//-----------------------------------------------------------------------------
void TD_Init(void) 				// Called once at startup
{
	Rwuen = TRUE;				// Enable remote-wakeup
	ISOCTL |= 0x01;				// free up iso endpoints for external data space (1024)

	IN07VAL |= bmEP1;			// Enable endpoint 1 IN
	IN07VAL |= bmEP2;			// Enable endpoint 2 IN
	IN07VAL |= bmEP3;			// Enable endpoint 3 IN
	OUT07VAL |= bmEP1;			// Enable endpoint 1 OUT 
   	OUT07IEN |= bmEP1;			// Enable endpoint 1 OUT interrupt
	OUT1BC = 0;					// Arm Endpoint 1 OUT to recieve data
	OUT07VAL |= bmEP3;			// Enable endpoint 3 OUT 
   	OUT07IEN |= bmEP3;			// Enable endpoint 3 OUT interrupt
	OUT3BC = 0;					// Arm Endpoint 3 OUT to recieve data
	
	BPADDR = (WORD)TD_Poll;     // Setup breakpoint to trigger on TD_Poll()
	USBBAV |= bmBPEN;			// Enable the breakpoint
	USBBAV &= ~bmBPPULSE;

	sl811h_init();				// setup SL811H chip variables
	desc_next = 0;
	data_next = 0;

}

//*****************************************************************************************
// ENDPOINT FUNCTION :
// EP2-IN  -> Return a byte of 0x01 to ezusb host to indicate a attach/detach for refresh
//*****************************************************************************************
void TD_Poll(void) 
{
	int	i,count;
    BYTE DescBufLen;		    // EZUSB's IN #1 descriptor buffer length

	slave_detect();				// Poll for any slave USB device attached to "SL811HS" Embedded Host

    if(BULK_OUT_DONE && !DESC_XFER)
    {
			BULK_OUT_DONE = FALSE;
				switch(HOSTCMD[0])							// type of commands from EZUSB host
				{
					case SL_REFRESH:
	                    DescBufLen = GetDevInfo(DBUF);
                        if(!DescBufLen)				
                        { // there is nothing to transfer - keep the host app from pending
	                      DBUF[0] = 0;		
	                      DescBufLen = 1;			// arming the IN1 is done in the slave_detect loop                        
                        }
						DESC_XFER = TRUE;					// set DESC_XFER to start transfer
						break;

					default: break;							// default break;
                }
    }

	if(DESC_XFER && !(IN1CS & bmEPBUSY))
	{													// ensure DESC_XFER & IN1 not busy
		if(DescBufLen)									// check for any data length
		{												//
			count = (int)((DescBufLen>=64) ? 64:DescBufLen);	// select data length, max allowed is 64 bytes
			for(i=0; i<count; i++)						// copy data into IN buffer
				IN1BUF[i] = DBUF[i+desc_next];			// 
			IN1BC = count;								// arm IN data transfer
			DescBufLen -= count;						// update remaining data len
			desc_next += count;
            if(!DescBufLen)
            {
			  desc_next = 0;
			  DESC_XFER = FALSE;					    // reset DESC_XFER to stop transfer
            }
		}
	}
}

//---------------------------------------
BOOL TD_Suspend(void) 			// Called before the device goes into suspend mode
{
	return(TRUE);
}

BOOL TD_Resume(void) 			// Called after the device resumes
{
	return(TRUE);
}

//-----------------------------------------------------------------------------
// Device Request hooks
//	The following hooks are called by the end point 0 device request parser.
//-----------------------------------------------------------------------------

BOOL DR_GetDescriptor(void)
{
	return(TRUE);
}

BOOL DR_SetConfiguration(void)	// Called when a Set Configuration command is received
{
	Configuration = SETUPDAT[2];
   CONFIG_DONE = TRUE;
	return(TRUE);				// Handled by user code
}

BOOL DR_GetConfiguration(void)	// Called when a Get Configuration command is received
{
	IN0BUF[0] = Configuration;
	EZUSB_SET_EP_BYTES(IN0BUF_ID,1);
	return(TRUE);				// Handled by user code
}

BOOL DR_SetInterface(void) 		// Called when a Set Interface command is received
{
	AlternateSetting = SETUPDAT[2];
	return(TRUE);				// Handled by user code
}

BOOL DR_GetInterface(void) 		// Called when a Set Interface command is received
{
	IN0BUF[0] = AlternateSetting;
	EZUSB_SET_EP_BYTES(IN0BUF_ID,1);
	return(TRUE);				// Handled by user code
}

BOOL DR_GetStatus(void)
{
	return(TRUE);
}

BOOL DR_ClearFeature(void)
{
	return(TRUE);
}

BOOL DR_SetFeature(void)
{
	return(TRUE);
}

#define EP0BUFF_SIZE	0x40

BOOL DR_VendorCmnd(void)
{
  WORD addr, len, bc;
  BYTE EpAddr, EpIdx;
  WORD i;
  BYTE RegAddr;
  xdata BYTE OUT_DATA[EP0BUFF_SIZE];	// OUT data buffer
  int retDataRW = FALSE;
  BYTE DescBufLen = 0;
  WORD ReqLen = 0;

  switch(SETUPDAT[1])
  { // NOTE" 0xA0 is reserved: 0xA0 = Anchor Download (handled by core)
    case SL_RESET:
	{
      sl811h_init();            // initialize SL811HST
      *IN0BUF = SETUPDAT[1];    // return command type
      IN0BC = 0x01;             // arm endp, # bytes to xfr
      EP0CS |= bmBIT1;          // ack handshake phase of device request
      break;
    }
    case SL_DEVICE_DESCP:                                      // GetDevDesc
    case SL_CONFIG_DESCP:                                      // GetConfDesc
    case SL_CLASS_DESCP:                                      // GetClassDesc
    case SL_STRING_DESCP:                                      // GetStringDesc
	{
		EpAddr = SETUPDAT[2];		                // Get address
		ReqLen = SETUPDAT[6];
		ReqLen |= SETUPDAT[7] << 8;                    // Get requested length

		if(SETUPDAT[1] == SL_DEVICE_DESCP)
		{
		  pDev =(pDevDesc)DBUF;
		  if(GetDesc(EpAddr,DEVICE,0,18,DBUF))	    // Device Descp - 18 bytes 
		    DescBufLen = (WORD)pDev->bLength;		// update buffer length 
		}
		if(SETUPDAT[1] == SL_CONFIG_DESCP)
		{
		  pCfg =(pCfgDesc)DBUF;				
		  if (GetDesc(EpAddr,CONFIGURATION,0,255,DBUF))
		    DescBufLen = WordSwap(pCfg->wLength); 				
		}
		if(SETUPDAT[1] == SL_CLASS_DESCP)
		{
          if (GetDesc(EpAddr,CONFIGURATION,0,255,DBUF))	// Configuration Descp
          {
	        pIfc = (pIntfDesc)(DBUF + 9);				// point to Interface Descp
            if(pIfc->iClass==HIDCLASS)			// HID_CLASS
            {
              pHid = (pHidDesc)(DBUF + 9 + 9);		// get HID's report descriptor
              DescBufLen = (pHid->wItemLength <= 255) ? pHid->wItemLength : 255; 
              if(!GetHid_Desc(EpAddr,HID_REPORT,DescBufLen,DBUF))
                DescBufLen = 0;
            }
            else if(pIfc->iClass==HUBCLASS)		// HUB_CLASS
            {
              pHub =(pHubDesc)DBUF;					// get HUB class descriptor
              DescBufLen = (pHub->bLength <= 255) ? pHub->bLength : 255; 
              if(!GetHubDesc(EpAddr,0,9,DBUF)) 
                DescBufLen = 0;
            }
			else
                DescBufLen = 0;                 // Undefined Class
          }
		}
		if(SETUPDAT[1] == SL_STRING_DESCP)
		{
          pStr = (pStrDesc)DBUF;
          pStr->bLength = 0;
          if(GetDesc(EpAddr,(WORD)(0x02<<8)|STRING,0x0904,4,DBUF)) 
          { // get iManufacturer

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆国产欧美日韩综合精品二区 | 国产日韩欧美高清| 亚洲同性同志一二三专区| 一区二区三区产品免费精品久久75| 日本不卡123| 91视频在线观看| 久久影院电视剧免费观看| 亚洲一区在线观看免费| 成人黄色在线看| 精品美女一区二区| 午夜av一区二区三区| 91色|porny| 久久精品欧美日韩| 免费在线视频一区| 色欧美片视频在线观看| 中文成人综合网| 国产综合久久久久久鬼色| 欧美日韩国产一级二级| 另类专区欧美蜜桃臀第一页| 99麻豆久久久国产精品免费| 久久―日本道色综合久久| 日韩精品亚洲一区| 欧美中文字幕亚洲一区二区va在线| 亚洲国产成人自拍| 国产成人综合在线播放| 日韩精品在线看片z| 日本中文字幕不卡| 制服丝袜成人动漫| 日韩在线a电影| 欧美久久一区二区| 亚洲第一福利一区| 欧美高清dvd| 日韩不卡手机在线v区| 欧美二区三区91| 日韩成人免费在线| 日韩一区二区三区在线视频| 奇米精品一区二区三区在线观看| 欧美剧情电影在线观看完整版免费励志电影| 亚洲美女视频在线观看| 91麻豆自制传媒国产之光| 亚洲欧洲成人自拍| 色狠狠桃花综合| 亚洲永久免费视频| 欧美日韩三级一区| 美女脱光内衣内裤视频久久网站| 欧美va在线播放| 国产精品18久久久久久久久 | 国产亚洲一区二区三区四区| 国产最新精品免费| 国产无一区二区| 99久久婷婷国产综合精品| 亚洲柠檬福利资源导航| 欧美自拍丝袜亚洲| 男女激情视频一区| 国产欧美日韩另类视频免费观看| 成人h动漫精品一区二区| 亚洲欧美电影院| 欧美丰满少妇xxxxx高潮对白| 日韩不卡在线观看日韩不卡视频| 精品成人一区二区| av电影在线观看一区| 一区二区三区丝袜| 日韩欧美国产精品一区| 成人国产亚洲欧美成人综合网| 一区二区三区在线观看欧美| 91精品午夜视频| 成人免费高清在线| 午夜精品福利视频网站| 久久久久久久久岛国免费| 91女人视频在线观看| 日韩国产成人精品| 国产精品你懂的| 日韩午夜激情av| 成人av网站大全| 日本va欧美va欧美va精品| 国产精品三级av在线播放| 欧美久久一区二区| av不卡在线播放| 奇米亚洲午夜久久精品| 最新国产成人在线观看| 日韩午夜激情电影| 日本电影亚洲天堂一区| 国产精品1区2区3区在线观看| 亚洲一区二区三区在线| 国产欧美日韩卡一| 欧美一级二级在线观看| 91麻豆蜜桃一区二区三区| 韩日av一区二区| 亚洲第一在线综合网站| 亚洲色图制服丝袜| 337p粉嫩大胆色噜噜噜噜亚洲 | 国产99一区视频免费| 亚洲第一成年网| 亚洲欧洲精品一区二区精品久久久| 欧美成人aa大片| 欧美日韩一区三区| 91麻豆文化传媒在线观看| 国产精品综合视频| 麻豆国产欧美日韩综合精品二区 | 欧美在线观看你懂的| 成人ar影院免费观看视频| 久久爱www久久做| 日韩国产一二三区| 香蕉久久一区二区不卡无毒影院 | 91视频免费播放| 国产999精品久久久久久绿帽| 美女在线视频一区| 日韩综合在线视频| 亚洲高清视频在线| 亚洲自拍偷拍综合| 亚洲精选一二三| 最近日韩中文字幕| 亚洲男女毛片无遮挡| 亚洲欧洲av色图| 亚洲视频一二三| 亚洲精品一二三区| 一区二区三区久久| 亚洲图片一区二区| 亚洲va在线va天堂| 日产国产欧美视频一区精品| 五月激情综合婷婷| 青青青伊人色综合久久| 日本不卡一区二区三区| 石原莉奈在线亚洲二区| 五月天国产精品| 久久99日本精品| 国产精品主播直播| 成人一区二区三区视频在线观看| 国产69精品久久99不卡| 成人av电影免费观看| 色综合天天做天天爱| 欧美一区二区久久久| 日韩女优毛片在线| 久久精品人人做人人爽97| 国产精品午夜在线| 亚洲图片自拍偷拍| 蜜芽一区二区三区| 国产成a人亚洲| 色婷婷亚洲综合| 91精品一区二区三区在线观看| 日韩欧美在线一区二区三区| 久久综合成人精品亚洲另类欧美| 亚洲国产激情av| 一区二区三区影院| 麻豆精品一区二区三区| 国产福利精品一区二区| 色悠悠久久综合| 日韩欧美激情一区| 中文在线资源观看网站视频免费不卡 | 亚洲亚洲精品在线观看| 免费人成网站在线观看欧美高清| 国产精品综合av一区二区国产馆| 色偷偷成人一区二区三区91| 91精品欧美久久久久久动漫| 欧美国产日本韩| 亚洲成人动漫一区| 成人性生交大片免费| 欧美日韩国产综合视频在线观看| 精品奇米国产一区二区三区| 亚洲色图.com| 国内外成人在线| 在线免费观看一区| 国产色产综合产在线视频| 亚洲一区二区偷拍精品| 国产美女精品一区二区三区| 在线免费精品视频| 久久精品视频一区| 日韩av中文字幕一区二区| 成人18视频在线播放| 日韩精品一区二区三区在线播放| 日韩伦理av电影| 国产精品18久久久久久久网站| 欧美日韩精品久久久| 中文字幕一区二区三区在线播放| 三级影片在线观看欧美日韩一区二区| 成人免费毛片a| 26uuu亚洲| 蜜桃精品视频在线| 日韩免费一区二区三区在线播放| 亚洲欧美日韩电影| 国产成人亚洲综合色影视| 日韩一区二区三区精品视频 | 国产成人精品影院| 日韩午夜精品电影| 午夜私人影院久久久久| 日本高清视频一区二区| 国产精品久久久久久久久晋中| 国产一区二区在线看| 欧美一区二区福利在线| 丝袜脚交一区二区| 在线观看欧美黄色| 亚洲乱码国产乱码精品精98午夜| 丁香六月综合激情| 中文字幕高清一区| 高清shemale亚洲人妖| 久久午夜羞羞影院免费观看| 精品一区二区在线免费观看| 日韩视频免费直播| 蜜桃视频在线观看一区| 日韩欧美一卡二卡|