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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ufi.c

?? ATMEL AT89C51SND1 IDE TO USB READER
?? C
字號:
/**************************************************************************
*                         H E A D E R   F I L E S
*************************************************************************/
#include <reg51.h>
#include <intrins.h>
#include <stdio.h>
#include "include\AT89C51SND.h"
#include "include\typedef.h"
#include "include\config.h"
#include "include\constant.h"
#include "include\global.h"
#include "include\gpio.h"
#include "include\macro.h"
#include "include\external.h"
#include "include\usb.h"

/**************************************************************************
*                           C O N S T A N T S
*************************************************************************/

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

/**************************************************************************
*                          D A T A    T Y P E S
*************************************************************************/

/**************************************************************************
*                         G L O B A L    D A T A
*************************************************************************/
//answer for UFI inquery command
UINT8 code ATAInquiryData[] =
{
	0x00,0x00,0x00,0x01,0x1F,0,0,0,            //peripheral device type=0x00,RMB=0,ANSI=0,RESPONSE DATAFORMAT=1,Direct-access device
	'w','e','i','c','h','i','n','g',                        //8 bytes for Vendor Information
	'U','S','B',' ','D','E','V','I','C','E',' ',' ',' ',' ',' ',' ',   //16 bytes for Product Information
	' ',' ',' ',' ',                           //4 bytes for Product Revision

};

/**************************************************************************
*  Function Name:
*
*  Descriptions:
*
*  Arguments:
*
*  Returns: None
**************************************************************************/
void dmaCopyIn(UINT16 u16Offset, UINT8 *pu8Buf, UINT8 u8Size)
{
	UINT8 i ;
	u16Offset=0;
	for(i=0; i<u8Size; i++) UEPDATX= *(pu8Buf++) ;
}

/**************************************************************************
*  Function Name:
*
*  Descriptions:
*
*  Arguments:
*
*  Returns: None
**************************************************************************/
UINT8 ufiInquiry(void)
{
	UINT8 TransLength;

	Usb_sel_ep(1);
	if(gCBWDataLen>36)
		TransLength=36;
	else
		TransLength=gCBWDataLen;

	dmaCopyIn(0, ATAInquiryData,TransLength);
	Usb_set_TXRDY_bit();
	while (!(Usb_tx_complete_bit()));
	Usb_clear_TXCMPL_bit();
	gCBWDataLen-=TransLength;
	return (0);

}

/**************************************************************************
*  Function Name:
*
*  Descriptions:
*
*  Arguments:
*
*  Returns: None
**************************************************************************/
UINT8 ufiRead10(void)
{
	UINT8 Status ;
	gbUsbReadError=0;//for Request Sense

	Status=stReadSectors(gCmdBlock.CB1.LUN,gCmdBlock.CB1.LBA.ULONG, gCmdBlock.CB1.Length2.INTEGER) ;

	if(Status)
	{
		if(gCBWDataLen!=0)//SEND NULL DATA IN BULK-IN ENDPOINT.
		{
			Usb_set_TXRDY_bit();
			while (!(Usb_tx_complete_bit()));
			Usb_clear_TXCMPL_bit();
		}
		gCBWDataLen=gOrgCBWDataLen;
		gbUsbReadError=1;
	}

	return(Status);
}
/**************************************************************************
*  Function Name:
*
*  Descriptions:
*
*  Arguments:
*
*  Returns: None
**************************************************************************/
UINT8 ufiWrite10(void)
{
	UINT8 Status;
	gbUsbWriteError=0;

	Status=stWriteSectors(gCmdBlock.CB1.LUN, gCmdBlock.CB1.LBA.ULONG, gCmdBlock.CB1.Length2.INTEGER) ;
	if(Status)
	{
		if(gCBWDataLen!=0)//STALL ENDPOINT2
		{

			Usb_sel_ep(2);
			Usb_set_STALLRQ();
		}
		gCBWDataLen=gOrgCBWDataLen;
		gbUsbWriteError=1;
	}
	return(Status);
}

/**************************************************************************
*  Function Name:
*
*  Descriptions:
*
*  Arguments:
*
*  Returns: None
**************************************************************************/
UINT8 ufiRequestSense(void)
{
	Usb_sel_ep(1);
	UEPDATX=0x70;
	UEPDATX=0x00;
	UEPDATX=0x05;
	UEPDATX=0x00;
	UEPDATX=0x00;
	UEPDATX=0x00;
	UEPDATX=0x00;
	UEPDATX=0x0a;
	UEPDATX=0x00;
	UEPDATX=0x00;
	UEPDATX=0x00;
	UEPDATX=0x00;
	UEPDATX=0x24;
	UEPDATX=0x00;
	UEPDATX=0x00;
	UEPDATX=0x00;
	UEPDATX=0x00;
	UEPDATX=0x00;

	Usb_set_TXRDY_bit();
	while (!(Usb_tx_complete_bit()));
	Usb_clear_TXCMPL_bit();
	gCBWDataLen=0;
	return (0);
}

/**************************************************************************
*  Function Name:
*
*  Descriptions:
*
*  Arguments:
*
*  Returns: None
**************************************************************************/
UINT8 ufiReadCapacity(void)
{
	LongByte BAddr,TotalSectors;
	Usb_sel_ep(1);
	TotalSectors.ULONG =stGetCapacity(gCmdBlock.CB1.LUN) ;
	if(TotalSectors.ULONG==0)
		BAddr.ULONG = 0;
	else
		BAddr.ULONG = TotalSectors.ULONG-1;                //Last Logical Block Address

	UEPDATX= BAddr.BYTE.B3 ;                //(J)LBA range
	UEPDATX= BAddr.BYTE.B2 ;
	UEPDATX= BAddr.BYTE.B1 ;
	UEPDATX= BAddr.BYTE.B0 ;
	//Block Length In Bytes
	UEPDATX= 0x00 ;                     //(J)Block length=512 bytes
	UEPDATX= 0x00 ;
	UEPDATX= 0x02 ;
	UEPDATX= 0x00 ;
	Usb_set_TXRDY_bit();
	while (!(Usb_tx_complete_bit()));
	Usb_clear_TXCMPL_bit();
	gCBWDataLen=0;

	if(TotalSectors.ULONG==0) return(1);
	else return(0);

}


/**************************************************************************
*  Function Name:
*
*  Descriptions:
*
*  Arguments:
*
*  Returns: None
**************************************************************************/
UINT8 ufiReadFormatCapacities(void)
{

	LongByte TotalSectors;
	Usb_sel_ep(1);

	TotalSectors.ULONG =stGetCapacity(gCmdBlock.CB1.LUN) ;

	//*Capacity List
	//Reserved
	UEPDATX=0x00;
	UEPDATX=0x00;
	UEPDATX=0x00;
	//Capacity List Length
	UEPDATX= 16 ;

	//*Current/Maximum Capacity descriptor
	//Number of Blocks
	UEPDATX= TotalSectors.BYTE.B3 ;
	UEPDATX= TotalSectors.BYTE.B2 ;
	UEPDATX= TotalSectors.BYTE.B1 ;
	UEPDATX= TotalSectors.BYTE.B0 ;

	//Descriptor Code 10b Formatted Media
	UEPDATX= 0x02 ;

	//Block Length
	UEPDATX= 0x00 ;
	UEPDATX= 0x02 ;
	UEPDATX= 0x00 ;

	//*Formattable Capacity Descriptor

	//Number of Block
	UEPDATX= TotalSectors.BYTE.B3 ;
	UEPDATX= TotalSectors.BYTE.B2 ;
	UEPDATX= TotalSectors.BYTE.B1 ;
	UEPDATX= TotalSectors.BYTE.B0 ;
	//Reserved
	UEPDATX= 0x00 ;
	//Block Length
	UEPDATX= 0x00 ;
	UEPDATX= 0x02 ;
	UEPDATX= 0x00 ;
	Usb_set_TXRDY_bit();
	while (!(Usb_tx_complete_bit()));
	Usb_clear_TXCMPL_bit();
	gCBWDataLen-=20;
	if(TotalSectors.ULONG==0)return(1);
	else return(0);

}

/**************************************************************************
*  Function Name:
*
*  Descriptions:
*
*  Arguments:
*
*  Returns: None
**************************************************************************/
UINT8 ufiTestUnitReady(void)
{
	gCBWDataLen=0;
	return 0;
}

/**************************************************************************
*  Function Name:
*
*  Descriptions:
*
*  Arguments:
*
*  Returns: None
**************************************************************************/
UINT8 ufiModeSense6(void)
{

	Usb_sel_ep(1);
	Usb_set_TXRDY_bit();
	while (!(Usb_tx_complete_bit()));
	Usb_clear_TXCMPL_bit();
	return 1;
}
/**************************************************************************
*  Function Name:
*
*  Descriptions:
*
*  Arguments:
*
*  Returns: None
**************************************************************************/
UINT8 ufiModeSelect(void)
{
	Usb_sel_ep(1);
	Usb_set_TXRDY_bit();
	while (!(Usb_tx_complete_bit()));
	Usb_clear_TXCMPL_bit();
	return 1;

}

/**************************************************************************
*  Function Name:
*
*  Descriptions:
*
*  Arguments:
*
*  Returns: None
**************************************************************************/
UINT8 ufiModeSense10(void)
{

	Usb_sel_ep(1);
	Usb_set_TXRDY_bit();
	while (!(Usb_tx_complete_bit()));
	Usb_clear_TXCMPL_bit();
	return 1;
}

/**************************************************************************
*  Function Name:
*
*  Descriptions:
*
*  Arguments:
*
*  Returns: None
**************************************************************************/
UINT8 UFI_NOTSUPPORT_CMD(void)
{

	if(gCBWDataLen!=0)
	{
		if(gCBWFlags)//send NULL data on bulk in endpoint.
		{
			Usb_sel_ep(1);
			Usb_set_TXRDY_bit();
			while (!(Usb_tx_complete_bit()));
			Usb_clear_TXCMPL_bit();
			return 1;
		}
		else        //STALL bulk-out endpoint.
		{   Usb_sel_ep(2);
		Usb_set_STALLRQ();
		return 1;
		}
	}
	else return 1;

}
/**************************************************************************
*  Function Name:
*
*  Descriptions:
*
*  Arguments:
*
*  Returns: None
**************************************************************************/
UINT8 ufiCommandDecoder(void)
{

	//printf("UFICMD:%#X\n",gCmdBlock.CB1.OPcode);
	switch (gCmdBlock.CB1.OPcode) {
		case UFI_RequestSense :                               //0x03
			return ufiRequestSense();
		case UFI_Inquiry :                                        //0x12
			return ufiInquiry();
		case UFI_ModeSense :                                  //0x5a
			return ufiModeSense10();
		case UFI_ModeSense_ :                                 //0x1a
			return ufiModeSense6();
		case UFI_ModeSelect :                                  //0x55
		case UFI_ModeSelect_ :                                //0x15
			return ufiModeSelect();
		case UFI_Read10 :                                       //0X28
			return ufiRead10();
		case UFI_ReadCapacity :                              //0x25
			return ufiReadCapacity();
		case UFI_Write10 :
			return ufiWrite10();                             //0X2A
		case UFI_TestUnitReady:                              //0x00
			return ufiTestUnitReady();
		case UFI_ReadFormatCapacities :                   //0x23
			return ufiReadFormatCapacities();
		case UFI_AllowMediaRemove :                       //0x1e
		case UFI_Verify :                                        //0x2f
			return (0);
		default:
			return  UFI_NOTSUPPORT_CMD();          
	}
}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费的成人av| 亚洲国产精品一区二区久久| 色欧美片视频在线观看 | 日韩一区二区三区免费看 | 激情丁香综合五月| 一区二区三区精品在线| 精品国产99国产精品| 色噜噜狠狠成人网p站| 国产在线看一区| 午夜成人在线视频| 最新不卡av在线| 久久久99精品久久| 91精品国产aⅴ一区二区| 色综合咪咪久久| 成人免费的视频| 韩国一区二区在线观看| 免费人成网站在线观看欧美高清| 亚洲免费在线视频一区 二区| 精品国产凹凸成av人网站| 在线播放欧美女士性生活| 色综合久久66| 91年精品国产| 白白色亚洲国产精品| 国产激情91久久精品导航| 久久精品久久综合| 婷婷国产v国产偷v亚洲高清| 一区二区三区四区乱视频| 国产精品久久久久毛片软件| 久久综合色婷婷| 精品国产免费视频| 日韩免费性生活视频播放| 6080国产精品一区二区| 18成人在线观看| 国产欧美一区二区精品性| 日韩精品一区二区三区中文精品 | 国产精品黄色在线观看| 久久久777精品电影网影网| 精品国产免费视频| 亚洲精品在线电影| 2020国产精品久久精品美国| 精品国产乱码久久久久久蜜臀 | 日本一区二区三区久久久久久久久不| 欧美一区二区不卡视频| 欧美一级在线免费| 欧美大片日本大片免费观看| 日韩午夜电影在线观看| 精品第一国产综合精品aⅴ| 26uuu亚洲| 国产亚洲一区字幕| 国产精品久久三| 亚洲女厕所小便bbb| 亚洲人吸女人奶水| 亚洲成av人片一区二区梦乃 | 青青草视频一区| 青草国产精品久久久久久| 青青草国产精品亚洲专区无| 久久国产婷婷国产香蕉| 国产精品一二一区| a4yy欧美一区二区三区| 在线观看一区日韩| 制服丝袜亚洲网站| 久久午夜免费电影| 亚洲欧洲av一区二区三区久久| 亚洲精品国产视频| 日韩福利视频导航| 国模娜娜一区二区三区| 99热在这里有精品免费| 在线观看成人小视频| 欧美一区二区三区在线观看| 久久久久久久久久久黄色| 中文字幕一区二区三区精华液| 亚洲伊人伊色伊影伊综合网| 日韩av电影免费观看高清完整版| 精品一区二区三区视频| 成人免费电影视频| 欧美麻豆精品久久久久久| 久久久99久久| 亚洲无线码一区二区三区| 久久99国产精品久久| 91美女视频网站| 日韩一区二区免费视频| 国产精品美女久久久久久久久久久 | 成人免费av在线| 欧美性大战xxxxx久久久| 日韩欧美中文字幕一区| 国产精品久久精品日日| 午夜免费欧美电影| 成人激情文学综合网| 欧美日本一区二区三区四区| 国产午夜精品一区二区三区四区| 亚洲激情一二三区| 国产一区二区三区电影在线观看| 日本久久一区二区三区| 精品欧美黑人一区二区三区| 亚洲伦在线观看| 国产原创一区二区| 亚洲免费毛片网站| 久久精品国产秦先生| 色av成人天堂桃色av| 久久久亚洲高清| 亚洲午夜精品网| 99久久精品国产观看| 日韩美一区二区三区| 一区二区三区日韩在线观看| 国产美女精品一区二区三区| 欧美喷潮久久久xxxxx| 中文字幕亚洲区| 国产一二精品视频| 91精品国产高清一区二区三区 | 国产精品国产三级国产| 另类小说图片综合网| 在线视频综合导航| 国产精品成人免费| 国产福利一区在线观看| 日韩一区二区三区视频在线观看| 亚洲综合激情网| 成人app网站| 久久人人97超碰com| 麻豆91精品91久久久的内涵| 欧美日本免费一区二区三区| 亚洲色图丝袜美腿| www.久久精品| 日本一区二区三区电影| 国产盗摄精品一区二区三区在线| 日韩一区二区在线观看视频播放| 亚洲国产另类av| 欧洲一区在线电影| 亚洲美女区一区| 欧美亚洲免费在线一区| 亚洲黄色在线视频| 91精品1区2区| 亚洲一区二区av在线| 欧洲亚洲精品在线| 亚洲午夜成aⅴ人片| 欧美日韩高清在线播放| 日韩影院精彩在线| 欧美一区二区大片| 国产真实乱偷精品视频免| 精品久久久久一区| 国产精品一二三四区| 国产欧美精品日韩区二区麻豆天美| 国产乱淫av一区二区三区| 久久综合九色综合97婷婷| 国产一区二区三区在线观看免费视频| 日韩视频在线观看一区二区| 美女精品自拍一二三四| 欧美岛国在线观看| 国产成人精品在线看| 国产精品欧美久久久久一区二区| 成人午夜短视频| 亚洲欧美日韩小说| 欧美日韩一区二区三区四区| 免费美女久久99| 亚洲精品一区二区在线观看| 成人永久看片免费视频天堂| 亚洲日韩欧美一区二区在线| 日本福利一区二区| 日韩国产一二三区| 久久老女人爱爱| 99re这里只有精品首页| 亚洲一区在线视频| 日韩一区二区三区电影| 国产成人精品免费在线| 亚洲日本va午夜在线电影| 欧美日韩国产免费| 韩国成人福利片在线播放| 国产精品视频yy9299一区| 欧美手机在线视频| 久久国产麻豆精品| 中文字幕 久热精品 视频在线| 国产精品乱人伦中文| 精品视频在线免费| 国产真实乱子伦精品视频| 亚洲精品大片www| 日韩三级免费观看| 91在线视频播放地址| 三级影片在线观看欧美日韩一区二区| 精品国产一区二区三区久久影院| 99久久精品免费观看| 久久精品国产一区二区| 亚洲欧美福利一区二区| 日韩一区二区三| 99久久精品久久久久久清纯| 蜜桃视频在线观看一区| 亚洲同性gay激情无套| 日韩一二在线观看| 99免费精品在线| 黄色日韩网站视频| 亚洲精品久久久蜜桃| 久久久久久久精| 欧美日韩一区二区三区高清| 国产福利91精品一区| 日韩电影在线观看一区| 1区2区3区精品视频| 精品久久免费看| 欧美精品日韩一区| 91丝袜美女网| 国产呦萝稀缺另类资源| 午夜精品一区在线观看| 最新高清无码专区|