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

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

?? vend_ax.c

?? cypress USB 芯片做的 廠商請求原代碼。
?? C
字號:
//-----------------------------------------------------------------------------
//   File:      bulkloop.c
//   Contents:  Hooks required to implement USB peripheral function.
//
// $Archive: /USB/Examples/Fx2lp/vend_ax/Vend_Ax.c $
// $Date: 9/02/03 7:32p $
// $Revision: 1 $
//
//
//-----------------------------------------------------------------------------
// Copyright 2003, Cypress Semiconductor Corporation
//-----------------------------------------------------------------------------
#pragma NOIV					// Do not generate interrupt vectors

#include "lp.h"
#include "lpregs.h"

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

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

//-----------------------------------------------------------------------------
// Constants
//-----------------------------------------------------------------------------
#define	VR_UPLOAD		0xc0
#define VR_DOWNLOAD		0x40

#define VR_ANCHOR_DLD   0xa0 // handled by core
#define VR_EEPROM		0xa2 // loads (uploads) EEPROM
#define	VR_RAM			0xa3 // loads (uploads) external ram
#define VR_SETI2CADDR	0xa4
#define VR_GETI2C_TYPE  0xa5 // 8 or 16 byte address
#define VR_GET_CHIP_REV 0xa6 // Rev A, B = 0, Rev C = 2 // NOTE: New TNG Rev
#define VR_TEST_MEM     0xa7 // runs mem test and returns result
#define VR_RENUM	    0xa8 // renum
#define VR_DB_FX	    0xa9 // Force use of double byte address EEPROM (for FX)
#define VR_I2C_100    0xaa // put the i2c bus in 100Khz mode
#define VR_I2C_400    0xab // put the i2c bus in 400Khz mode
#define VR_NOSDPAUTO  0xac // test code. does uploads using SUDPTR with manual length override

#define SERIAL_ADDR		0x50
#define EP0BUFF_SIZE	0x40

#define GET_CHIP_REV()		((CPUCS >> 4) & 0x00FF) // EzUSB Chip Rev Field

//-----------------------------------------------------------------------------
// Global Variables
//-----------------------------------------------------------------------------
BYTE			DB_Addr;					//TPM Dual Byte Address stat
BYTE			I2C_Addr;					//TPM I2C address

//-----------------------------------------------------------------------------
// Prototypes
//-----------------------------------------------------------------------------
void EEPROMWrite(WORD addr, BYTE length, BYTE xdata *buf); //TPM EEPROM Write
void EEPROMRead(WORD addr, BYTE length, BYTE xdata *buf);  //TPM EEPROM Read

//-----------------------------------------------------------------------------
// Task Dispatcher hooks
//	The following hooks are called by the task dispatcher.
//-----------------------------------------------------------------------------

void TD_Init(void) 				// Called once at startup
{
	Rwuen = TRUE;				// Enable remote-wakeup
        EZUSB_InitI2C();			// Initialize I2C Bus
}

void TD_Poll(void) 				// Called repeatedly while the device is idle
{
}

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];
   return(TRUE);            // Handled by user code
}

BOOL DR_GetConfiguration(void)   // Called when a Get Configuration command is received
{
   EP0BUF[0] = Configuration;
   EP0BCH = 0;
   EP0BCL = 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
{
   EP0BUF[0] = AlternateSetting;
   EP0BCH = 0;
   EP0BCL = 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);
}

BOOL DR_VendorCmnd(void)
{
	WORD		addr, len, bc;
	WORD		ChipRev;
	WORD i;

	// Determine I2C boot eeprom device address; addr = 0x0 for 8 bit addr eeproms (24LC00)
	I2C_Addr = SERIAL_ADDR | ((I2CS & 0x10) >> 4); // addr=0x01 for 16 bit addr eeprom (LC65)
	// Indicate if it is a dual byte address part
	DB_Addr = (BOOL)(I2C_Addr & 0x01); //TPM: ID1 is 16 bit addr bit - set by rocker sw or jumper

	switch(SETUPDAT[1])
	{ //TPM handle new commands
		case VR_GETI2C_TYPE:
					*EP0BUF = DB_Addr;
					EP0BCH = 0;
					EP0BCL = 1; // Arm endpoint with # bytes to transfer
					EP0CS |= bmHSNAK; // Acknowledge handshake phase of device request
			break;
		case VR_GET_CHIP_REV:
					ChipRev = GET_CHIP_REV();
					*EP0BUF = ChipRev;
					EP0BCH = 0;
					EP0BCL = 1; // Arm endpoint with # bytes to transfer
					EP0CS |= bmHSNAK; // Acknowledge handshake phase of device request
			break;
		case VR_TEST_MEM:
					*EP0BUF = 0x0F; // Fail
					EP0BCH = 0;
					EP0BCL = 1; // Arm endpoint with # bytes to transfer
					EP0CS |= bmHSNAK; // Acknowledge handshake phase of device request
			break;
		case VR_SETI2CADDR:
			I2C_Addr = SETUPDAT[2];
			break;
		case VR_I2C_100:
			I2CTL &= ~bm400KHZ;
			EP0BCH = 0;
			EP0BCL = 0;
			break;
		case VR_I2C_400:
			I2CTL |= bm400KHZ;
			EP0BCH = 0;
			EP0BCL = 0;
			break;
		case VR_RENUM:
					*EP0BUF = 7;
					EP0BCH = 0;
					EP0BCL = 1; // Arm endpoint with # bytes to transfer
					EP0CS |= bmHSNAK; // Acknowledge handshake phase of device request
					EZUSB_Delay(1000);
					EZUSB_Discon(TRUE);		// renumerate until setup received
			break;
		case VR_NOSDPAUTO:
         // we want specify our own length for the transfer so
         // disable the automatic length feature of the Setup Data Autopointer
         SUDPTRCTL &= ~bmSDPAUTO;

         EP0BCH = SETUPDAT[7];
         EP0BCL = SETUPDAT[6];
         SUDPTRH = SETUPDAT[3];
         SUDPTRL = SETUPDAT[2];
         break;
			
		case VR_DB_FX:
			DB_Addr = 0x01;		//TPM: need to assert double byte
			I2C_Addr |= 0x01;	//TPM: need to assert double byte
        // NOTE: This case falls through !
		case VR_RAM:
		case VR_EEPROM:
			addr = SETUPDAT[2];		// Get address and length
			addr |= SETUPDAT[3] << 8;
			len = SETUPDAT[6];
			len |= SETUPDAT[7] << 8;
			// Is this an upload command ?
			if(SETUPDAT[0] == VR_UPLOAD)
			{
				while(len)					// Move requested data through EP0IN 
				{							// one packet at a time.

               while(EP0CS & bmEPBUSY);

					if(len < EP0BUFF_SIZE)
						bc = len;
					else
						bc = EP0BUFF_SIZE;

					// Is this a RAM upload ?
					if(SETUPDAT[1] == VR_RAM)
					{
						for(i=0; i<bc; i++)
							*(EP0BUF+i) = *((BYTE xdata *)addr+i);
					}
					else
					{
						for(i=0; i<bc; i++)
							*(EP0BUF+i) = 0xcd;
						EEPROMRead(addr,(WORD)bc,(WORD)EP0BUF);
					}

					EP0BCH = 0;
					EP0BCL = (BYTE)bc; // Arm endpoint with # bytes to transfer

					addr += bc;
					len -= bc;

				}
			}
			// Is this a download command ?
			else if(SETUPDAT[0] == VR_DOWNLOAD)
			{
				while(len)					// Move new data through EP0OUT 
				{							// one packet at a time.
					// Arm endpoint - do it here to clear (after sud avail)
					EP0BCH = 0;
					EP0BCL = 0; // Clear bytecount to allow new data in; also stops NAKing

					while(EP0CS & bmEPBUSY);

					bc = EP0BCL; // Get the new bytecount

					// Is this a RAM download ?
					if(SETUPDAT[1] == VR_RAM)
					{
						for(i=0; i<bc; i++)
							 *((BYTE xdata *)addr+i) = *(EP0BUF+i);
					}
					else
						EEPROMWrite(addr,bc,(WORD)EP0BUF);

					addr += bc;
					len -= bc;
				}
			}
			break;
	}
	return(FALSE); // no error; command handled OK
}

//-----------------------------------------------------------------------------
// USB Interrupt Handlers
//	The following functions are called by the USB interrupt jump table.
//-----------------------------------------------------------------------------

// Setup Data Available Interrupt Handler
void ISR_Sudav(void) interrupt 0
{
   // enable the automatic length feature of the Setup Data Autopointer
   // in case a previous transfer disbaled it
   SUDPTRCTL |= bmSDPAUTO;

   GotSUD = TRUE;            // Set flag
   EZUSB_IRQ_CLEAR();
   USBIRQ = bmSUDAV;         // Clear SUDAV IRQ
}

// Setup Token Interrupt Handler
void ISR_Sutok(void) interrupt 0
{
   EZUSB_IRQ_CLEAR();
   USBIRQ = bmSUTOK;         // Clear SUTOK IRQ
}

void ISR_Sof(void) interrupt 0
{
   EZUSB_IRQ_CLEAR();
   USBIRQ = bmSOF;            // Clear SOF IRQ
}

void ISR_Ures(void) interrupt 0
{
   if (EZUSB_HIGHSPEED())
   {
      pConfigDscr = pHighSpeedConfigDscr;
      pOtherConfigDscr = pFullSpeedConfigDscr;
   }
   else
   {
      pConfigDscr = pFullSpeedConfigDscr;
      pOtherConfigDscr = pHighSpeedConfigDscr;
   }
   
   EZUSB_IRQ_CLEAR();
   USBIRQ = bmURES;         // Clear URES IRQ
}

void ISR_Susp(void) interrupt 0
{
   Sleep = TRUE;
   EZUSB_IRQ_CLEAR();
   USBIRQ = bmSUSP;
}

void ISR_Highspeed(void) interrupt 0
{
   if (EZUSB_HIGHSPEED())
   {
      pConfigDscr = pHighSpeedConfigDscr;
      pOtherConfigDscr = pFullSpeedConfigDscr;
   }
   else
   {
      pConfigDscr = pFullSpeedConfigDscr;
      pOtherConfigDscr = pHighSpeedConfigDscr;
   }

   EZUSB_IRQ_CLEAR();
   USBIRQ = bmHSGRANT;
}

void ISR_Ep0ack(void) interrupt 0
{
}
void ISR_Stub(void) interrupt 0
{
}
void ISR_Ep0in(void) interrupt 0
{
}
void ISR_Ep0out(void) interrupt 0
{
}
void ISR_Ep1in(void) interrupt 0
{
}
void ISR_Ep1out(void) interrupt 0
{
}
void ISR_Ep2inout(void) interrupt 0
{
}
void ISR_Ep4inout(void) interrupt 0
{
}
void ISR_Ep6inout(void) interrupt 0
{
}
void ISR_Ep8inout(void) interrupt 0
{
}
void ISR_Ibn(void) interrupt 0
{
}
void ISR_Ep0pingnak(void) interrupt 0
{
}
void ISR_Ep1pingnak(void) interrupt 0
{
}
void ISR_Ep2pingnak(void) interrupt 0
{
}
void ISR_Ep4pingnak(void) interrupt 0
{
}
void ISR_Ep6pingnak(void) interrupt 0
{
}
void ISR_Ep8pingnak(void) interrupt 0
{
}
void ISR_Errorlimit(void) interrupt 0
{
}
void ISR_Ep2piderror(void) interrupt 0
{
}
void ISR_Ep4piderror(void) interrupt 0
{
}
void ISR_Ep6piderror(void) interrupt 0
{
}
void ISR_Ep8piderror(void) interrupt 0
{
}
void ISR_Ep2pflag(void) interrupt 0
{
}
void ISR_Ep4pflag(void) interrupt 0
{
}
void ISR_Ep6pflag(void) interrupt 0
{
}
void ISR_Ep8pflag(void) interrupt 0
{
}
void ISR_Ep2eflag(void) interrupt 0
{
}
void ISR_Ep4eflag(void) interrupt 0
{
}
void ISR_Ep6eflag(void) interrupt 0
{
}
void ISR_Ep8eflag(void) interrupt 0
{
}
void ISR_Ep2fflag(void) interrupt 0
{
}
void ISR_Ep4fflag(void) interrupt 0
{
}
void ISR_Ep6fflag(void) interrupt 0
{
}
void ISR_Ep8fflag(void) interrupt 0
{
}
void ISR_GpifComplete(void) interrupt 0
{
}
void ISR_GpifWaveform(void) interrupt 0
{
}

void EEPROMWriteByte(WORD addr, BYTE value)
{
	BYTE		i = 0;
	BYTE xdata 	ee_str[3];

	if(DB_Addr)
		ee_str[i++] = MSB(addr);

	ee_str[i++] = LSB(addr);
	ee_str[i++] = value;

	EZUSB_WriteI2C(I2C_Addr, i, ee_str);
   EZUSB_WaitForEEPROMWrite(I2C_Addr);
}


void EEPROMWrite(WORD addr, BYTE length, BYTE xdata *buf)
{
	BYTE	i;
	for(i=0;i<length;++i)
		EEPROMWriteByte(addr++,buf[i]);
}

void EEPROMRead(WORD addr, BYTE length, BYTE xdata *buf)
{
	BYTE		i = 0;
	BYTE		j = 0;
	BYTE xdata 	ee_str[2];

	if(DB_Addr)
		ee_str[i++] = MSB(addr);

	ee_str[i++] = LSB(addr);

	EZUSB_WriteI2C(I2C_Addr, i, ee_str);

//	for(j=0; j < length; j++)
//		*(buf+j) = 0xcd;

	EZUSB_ReadI2C(I2C_Addr, length, buf);
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
经典三级在线一区| 一区二区三区在线免费| 麻豆91在线播放免费| 欧美一卡2卡3卡4卡| 奇米777欧美一区二区| 日韩美一区二区三区| 欧美欧美欧美欧美首页| 亚洲伊人色欲综合网| 欧美美女激情18p| 蜜桃一区二区三区在线| 国产亚洲欧洲997久久综合| 成人爽a毛片一区二区免费| 亚洲激情六月丁香| 日韩丝袜情趣美女图片| 国产传媒一区在线| 亚洲欧美激情小说另类| 91精品国产综合久久小美女| 国产永久精品大片wwwapp| 国产精品妹子av| 欧美日韩视频专区在线播放| 久久超碰97中文字幕| 国产精品免费视频观看| 欧美性生活一区| 久久99精品久久只有精品| 国产精品久久久久影院亚瑟 | 色女孩综合影院| 日韩中文字幕一区二区三区| 精品播放一区二区| 色综合久久久久综合99| 日本最新不卡在线| 中文字幕一区不卡| 91麻豆精品91久久久久同性| 国产成人自拍在线| 五月天视频一区| 国产精品久久免费看| 在线播放日韩导航| 成人激情午夜影院| 美女视频网站久久| 国产乱色国产精品免费视频| 亚洲免费视频中文字幕| 精品成人一区二区三区四区| 欧美日韩一级视频| 福利一区二区在线| 日韩激情一区二区| 亚洲卡通欧美制服中文| 精品国产电影一区二区| 欧美丝袜自拍制服另类| 成人午夜av影视| 老司机午夜精品| 亚洲第一av色| 亚洲色图视频网| 久久久久久久久久久99999| 欧美日本韩国一区| 色综合天天综合在线视频| 国产成人av影院| 久热成人在线视频| 天天亚洲美女在线视频| 亚洲自拍偷拍九九九| 欧美韩国一区二区| 精品国产91九色蝌蚪| 欧美日产在线观看| 在线观看视频欧美| 91丝袜呻吟高潮美腿白嫩在线观看| 国模无码大尺度一区二区三区| 日韩av一二三| 午夜不卡在线视频| 亚洲成人在线观看视频| 亚洲在线一区二区三区| 亚洲色图欧美在线| 成人欧美一区二区三区白人 | 欧美tickling挠脚心丨vk| 欧美精品三级日韩久久| 在线视频欧美精品| 一本色道久久综合亚洲aⅴ蜜桃 | 午夜精品久久久久久久| 一区二区三区欧美视频| 亚洲靠逼com| 亚洲一区二区三区四区五区中文| 亚洲欧洲日韩av| 亚洲天堂福利av| 中文字幕在线播放不卡一区| 国产精品美女久久福利网站| 中文字幕精品在线不卡| 国产精品国产三级国产专播品爱网| 国产欧美一区二区在线| 欧美国产一区二区| 国产色产综合产在线视频| 中文av字幕一区| 国产精品麻豆久久久| 自拍偷拍国产亚洲| 一级特黄大欧美久久久| 婷婷综合在线观看| 日本在线播放一区二区三区| 免播放器亚洲一区| 精品一区二区三区蜜桃| 国产美女在线精品| 不卡一区二区中文字幕| 欧美在线三级电影| 一区二区成人在线| 亚洲大片在线观看| 日产欧产美韩系列久久99| 另类小说综合欧美亚洲| 国产 欧美在线| 91福利精品视频| 91精品国产手机| 国产农村妇女精品| 亚洲一区二区综合| 久久国产精品99久久人人澡| 国产91精品免费| 色欧美日韩亚洲| 精品伦理精品一区| 综合自拍亚洲综合图不卡区| 亚洲高清免费在线| 国模大尺度一区二区三区| 成人动漫视频在线| 欧美日韩免费一区二区三区| 欧美videofree性高清杂交| 国产精品久99| 日本在线不卡一区| 91在线视频网址| 欧美一级一级性生活免费录像| 国产清纯白嫩初高生在线观看91| 尤物在线观看一区| 韩国精品一区二区| 日本丰满少妇一区二区三区| 欧美成人综合网站| 亚洲欧美成aⅴ人在线观看| 麻豆免费看一区二区三区| av色综合久久天堂av综合| 欧美一区二区在线视频| 中文字幕一区二| 国产一区激情在线| 欧美无砖专区一中文字| 日本一区二区三区免费乱视频| 日韩国产一二三区| 99久久久国产精品| 2021国产精品久久精品| 午夜亚洲福利老司机| gogogo免费视频观看亚洲一| 欧美一区二区福利在线| 一区二区欧美视频| 99视频精品在线| 精品国产1区2区3区| 丝袜美腿亚洲一区| 在线免费观看一区| 国产精品久久久久久久久晋中 | 日本一区二区免费在线观看视频 | 狠狠网亚洲精品| 欧美美女直播网站| 亚洲综合免费观看高清完整版| jiyouzz国产精品久久| 久久久久久**毛片大全| 久久er99热精品一区二区| 欧美日本在线一区| 亚洲国产日韩精品| 在线视频你懂得一区二区三区| 国产精品日日摸夜夜摸av| 国产真实乱偷精品视频免| 欧美一区二区三区在线视频| 丝袜美腿高跟呻吟高潮一区| 欧美日韩激情一区二区| 亚洲va欧美va国产va天堂影院| 色噜噜偷拍精品综合在线| 亚洲欧洲日产国产综合网| 成人av中文字幕| 国产精品美女视频| 成人av资源在线观看| 中文字幕一区二区视频| 本田岬高潮一区二区三区| 中文字幕精品一区二区精品绿巨人| 精品一二线国产| 久久久久久久久久久久久久久99| 国产一区二区三区免费在线观看| 精品国产亚洲一区二区三区在线观看| 日韩高清不卡一区二区三区| 在线综合+亚洲+欧美中文字幕| 日韩电影在线免费观看| 欧美一区二区在线看| 九九久久精品视频| 久久综合中文字幕| 国产成人精品亚洲日本在线桃色 | 伊人一区二区三区| 欧美优质美女网站| 图片区小说区国产精品视频| 欧美年轻男男videosbes| 日本不卡在线视频| 久久综合99re88久久爱| 国产**成人网毛片九色 | 中文字幕av不卡| 色哟哟精品一区| 天堂在线一区二区| 精品久久久久一区| 不卡欧美aaaaa| 亚洲香蕉伊在人在线观| 欧美一区二区三区色| 国产一区二区不卡老阿姨| 中文字幕一区日韩精品欧美| 欧美日本在线看| 国产精品一区专区| 亚洲午夜羞羞片|