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

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

?? host2131.c

?? sl811主機源代碼
?? 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一区二区三区免费野_久草精品视频
日韩欧美美女一区二区三区| 精品在线观看免费| 日日噜噜夜夜狠狠视频欧美人| 九九**精品视频免费播放| 色婷婷综合视频在线观看| 国产日韩欧美一区二区三区综合 | 成人av电影在线播放| 欧美男女性生活在线直播观看| 中文字幕在线一区免费| 久久精品国产久精国产爱| 在线观看日韩av先锋影音电影院| 久久男人中文字幕资源站| 日韩电影免费在线| 欧美亚洲国产一区二区三区va| 欧美国产成人精品| 国产精品主播直播| 欧美亚洲一区二区三区四区| 成人黄色777网| 国产一区免费电影| 欧美老女人在线| 亚洲一区在线免费观看| 99久久er热在这里只有精品15| 国产欧美日韩精品a在线观看| 久久99精品久久久久久| 91精品国产一区二区| 香港成人在线视频| 在线影视一区二区三区| 亚洲在线成人精品| 在线亚洲+欧美+日本专区| 亚洲激情校园春色| 欧美性视频一区二区三区| 亚洲一区二区在线观看视频| 色先锋aa成人| 亚洲成人激情综合网| 欧美挠脚心视频网站| 美女久久久精品| 精品三级在线看| 国产一区 二区| 国产精品国产三级国产专播品爱网| 丰满少妇在线播放bd日韩电影| 国产欧美日韩在线| 91女神在线视频| 香蕉成人啪国产精品视频综合网| 欧美精品粉嫩高潮一区二区| 久久成人免费网| 久久久国产综合精品女国产盗摄| 高清beeg欧美| 亚洲免费av在线| 日韩一区二区三区四区五区六区 | 精品少妇一区二区| 国产乱子伦视频一区二区三区 | 精品国产一区二区三区久久影院| 韩日欧美一区二区三区| 国产精品天美传媒| 欧美午夜一区二区三区免费大片| 日本成人在线看| 国产日韩欧美亚洲| 欧美午夜片在线看| 国产呦精品一区二区三区网站| 中文字幕一区二区三中文字幕| 在线中文字幕一区| 九色porny丨国产精品| 国产精品成人网| 欧美人体做爰大胆视频| 国产福利一区二区| 视频一区在线播放| 国产精品美女www爽爽爽| 欧美三级日韩在线| 国产成人免费视频| 天堂影院一区二区| 中文文精品字幕一区二区| 在线欧美日韩精品| 国产精品18久久久久久久久 | 欧美亚男人的天堂| 国产一区二区三区免费观看| 亚洲综合在线免费观看| 久久亚洲捆绑美女| 欧美男男青年gay1069videost| 丁香婷婷综合色啪| 蜜桃精品视频在线观看| 亚洲制服欧美中文字幕中文字幕| 欧美zozo另类异族| 欧美日韩精品一区二区天天拍小说| 国产91丝袜在线观看| 免费在线视频一区| 亚洲福利电影网| 亚洲男人电影天堂| 国产日韩欧美a| 26uuu精品一区二区在线观看| 欧美日韩一区二区在线视频| 91麻豆国产自产在线观看| 国产乱人伦偷精品视频不卡 | 亚洲一区二区三区国产| 欧美极品另类videosde| 精品久久久三级丝袜| 欧美高清www午色夜在线视频| 91丝袜呻吟高潮美腿白嫩在线观看| 国模无码大尺度一区二区三区| 日本欧美在线看| 亚洲va欧美va人人爽| 亚洲综合精品自拍| 一区二区三区蜜桃| 一区二区三区国产精华| 悠悠色在线精品| 亚洲色图欧洲色图婷婷| 国产精品国产三级国产aⅴ入口| 久久精品网站免费观看| 久久亚洲一区二区三区明星换脸 | 欧美日韩黄色影视| 在线观看一区不卡| 在线观看欧美黄色| 欧美日韩亚洲综合一区二区三区| 在线免费亚洲电影| 91久久人澡人人添人人爽欧美| 色先锋资源久久综合| 色成年激情久久综合| 欧美三级一区二区| 91精品国产91久久久久久一区二区 | 亚洲综合色网站| 一区二区三区在线视频免费| 亚洲品质自拍视频网站| 曰韩精品一区二区| 婷婷国产在线综合| 日韩国产精品大片| 国产揄拍国内精品对白| 国产夫妻精品视频| 91在线小视频| 欧美揉bbbbb揉bbbbb| 欧美一区二区女人| 久久五月婷婷丁香社区| 国产精品久久久久久久第一福利| 亚洲人亚洲人成电影网站色| 亚洲自拍欧美精品| 麻豆成人av在线| 国产成人精品一区二区三区四区| 99国产麻豆精品| 制服视频三区第一页精品| 精品福利一二区| 亚洲人成精品久久久久久| 日韩中文字幕不卡| 国产不卡一区视频| 欧美性生活一区| www国产成人免费观看视频 深夜成人网| 国产日韩欧美a| 亚洲国产综合人成综合网站| 精品一区二区免费看| a级精品国产片在线观看| 5858s免费视频成人| 国产亚洲一二三区| 亚洲一区欧美一区| 国产精品99久久不卡二区| 欧美午夜一区二区三区免费大片| 久久综合狠狠综合久久综合88| 亚洲婷婷综合久久一本伊一区| 蜜臀a∨国产成人精品| 91网站在线观看视频| 精品精品国产高清一毛片一天堂| 日韩毛片在线免费观看| 九色porny丨国产精品| 在线免费视频一区二区| 国产婷婷色一区二区三区 | 亚洲欧美日韩国产中文在线| 日韩影视精彩在线| aa级大片欧美| 久久久久久久久99精品| 日韩成人午夜精品| 91黄色免费版| 国产精品色眯眯| 国产美女娇喘av呻吟久久| 欧美日韩视频第一区| 自拍偷拍亚洲激情| 国产不卡一区视频| 五月激情丁香一区二区三区| 精品一区二区免费| 欧美日韩一区中文字幕| 国产精品短视频| 国产很黄免费观看久久| 欧美一区二区三区精品| 亚洲成人一区在线| 在线观看网站黄不卡| 国产精品传媒在线| 国产suv精品一区二区6| 久久香蕉国产线看观看99| 久久精品国产亚洲高清剧情介绍 | 国产成人激情av| 欧美成人免费网站| 日本不卡中文字幕| 欧美日韩精品欧美日韩精品| 亚洲自拍偷拍九九九| 91一区二区三区在线播放| 国产精品传媒入口麻豆| 国产福利视频一区二区三区| 久久亚洲影视婷婷| 国产精品一卡二卡在线观看| 精品国产乱码91久久久久久网站| 美女一区二区久久| 8v天堂国产在线一区二区| 日本中文字幕一区| 日韩一级二级三级精品视频| jvid福利写真一区二区三区|