⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 03.htm

📁 硬盘MP3开发的所有源代码!整理自21ICBBS。 原作者xwj!
💻 HTM
📖 第 1 页 / 共 5 页
字号:
            get_max_LUN(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//获取磁盘最大逻辑单元号<BR>{<BR>unsigned 
            char 
            max_LUN=MAX_LUN;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//只有一个逻辑单元<BR>UEPNUM=0;<BR>UEPSTAX=(UEPSTAX 
            | 
            0x80);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//数据阶段的输入<BR>write_endpoint_buff(0,1,&amp;(max_LUN));<BR>UEPSTAX=(UEPSTAX 
            &amp; (~0x80));<BR>USB_usb_endp0_in=0;<BR>}<BR><BR>void 
            mass_storage_reset(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//USB大容量存储设备复位<BR>{<BR>write_endpoint_buff(0,0,0);<BR>USB_usb_endp0_in=0;<BR>USB_setup_packet_out=0;<BR>SCSI_Command=1;<BR>SCSI_Data=0;<BR>}<BR><BR><BR>void 
            get_descriptor(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//获取描述符<BR>{<BR>if(!USB_not_end)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;switch(MSB(Control_Data.DeviceRequest.wValue))<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
            DEVICE_DESCRIPTOR:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Control_Data.wCount=sizeof(DEVICE_DESCRIPTOR_STRUCT);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Control_Data.pData=(unsigned 
            char 
            *)(&amp;device_descriptor);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
            CONFIGURATION_DESCRIPTOR:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Control_Data.wCount=SWAP(con_int_endp_descriptor.configuration_descriptor.wTotalLength);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Control_Data.pData=(unsigned 
            char 
            *)(&amp;con_int_endp_descriptor);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Control_Data.wLength&lt;Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
            STRING_DESCRIPTOR:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(LSB(Control_Data.DeviceRequest.wValue)==0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Control_Data.wCount=LANGUAGE_ID[0];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Control_Data.pData=LANGUAGE_ID;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(LSB(Control_Data.DeviceRequest.wValue)==2)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Control_Data.wCount=device_serial_number[0];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Control_Data.pData=device_serial_number;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;if(Control_Data.wLength&lt;Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;<BR>&nbsp;&nbsp;}<BR>if(Control_Data.wCount&gt;=MAX_CONTROL_DATA_SIZE)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;UEPNUM=0;<BR>&nbsp;&nbsp;&nbsp;UEPSTAX=(UEPSTAX 
            | 
            0x80);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//数据阶段的输入<BR>&nbsp;&nbsp;&nbsp;write_endpoint_buff(0,MAX_CONTROL_DATA_SIZE,Control_Data.pData);<BR>&nbsp;&nbsp;&nbsp;UEPSTAX=(UEPSTAX 
            &amp; 
            (~0x80));<BR>&nbsp;&nbsp;&nbsp;Control_Data.pData+=MAX_CONTROL_DATA_SIZE;<BR>&nbsp;&nbsp;&nbsp;Control_Data.wCount-=MAX_CONTROL_DATA_SIZE;<BR>&nbsp;&nbsp;&nbsp;if(USB_set_addr)USB_not_end=1;<BR>&nbsp;&nbsp;&nbsp;else 
            USB_usb_endp0_in=0;<BR>&nbsp;&nbsp;&nbsp;return;<BR>&nbsp;&nbsp;}<BR>else<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;UEPNUM=0;<BR>&nbsp;&nbsp;&nbsp;UEPSTAX=(UEPSTAX 
            | 
            0x80);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//数据阶段的输入<BR>&nbsp;&nbsp;&nbsp;write_endpoint_buff(0,Control_Data.wCount,Control_Data.pData);<BR>&nbsp;&nbsp;&nbsp;UEPSTAX=(UEPSTAX 
            &amp; 
            (~0x80));<BR>&nbsp;&nbsp;&nbsp;USB_setup_packet_in=0;<BR>&nbsp;&nbsp;&nbsp;USB_usb_endp0_in=0;<BR>&nbsp;&nbsp;&nbsp;return;<BR>&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>}<BR><BR>void 
            endp0_out(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//终端点0输出中断处理<BR>{<BR>if(status_setup_packet)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;Control_Data.wLength=0;<BR>&nbsp;&nbsp;&nbsp;Control_Data.wCount=0;<BR>&nbsp;&nbsp;&nbsp;if(read_endpoint_buff(0,sizeof(Control_Data.DeviceRequest),(unsigned 
            char 
            *)(&amp;(Control_Data.DeviceRequest)))!=sizeof(REQUESTCMD))<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error(1);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;UEPNUM=0;<BR>&nbsp;&nbsp;UEPSTAX= 
            UEPSTAX &amp; 
            (~0x04);&nbsp;&nbsp;//清除SETUP标记<BR>&nbsp;&nbsp;Control_Data.DeviceRequest.wValue=SWAP(Control_Data.DeviceRequest.wValue);<BR>&nbsp;&nbsp;Control_Data.DeviceRequest.wIndex=SWAP(Control_Data.DeviceRequest.wIndex);<BR>&nbsp;&nbsp;Control_Data.DeviceRequest.wLength=SWAP(Control_Data.DeviceRequest.wLength);<BR>&nbsp;&nbsp;Control_Data.wLength=Control_Data.DeviceRequest.wLength;<BR>&nbsp;&nbsp;USB_not_end=0;<BR>&nbsp;&nbsp;USB_usb_endp0_in=1;<BR>&nbsp;&nbsp;USB_setup_packet_in=0;<BR>&nbsp;&nbsp;USB_setup_packet_out=0;<BR>&nbsp;&nbsp;if(Control_Data.DeviceRequest.bmRequestType&amp;0x80){USB_setup_packet_in=1;return;}<BR>&nbsp;&nbsp;else 
            {USB_setup_packet_out=1;return;}<BR>}<BR>else<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;read_endpoint_buff(0,0,0);<BR>&nbsp;&nbsp;}<BR>}<BR><BR>void 
            endp0_in(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//终端点0输入处理<BR>{<BR>if(USB_setup_packet_in||USB_not_end)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;if((Control_Data.DeviceRequest.bmRequestType==0xA1)&amp;&amp;(Control_Data.DeviceRequest.bRequest==0xFE))get_max_LUN();<BR>&nbsp;&nbsp;&nbsp;switch(Control_Data.DeviceRequest.bmRequestType&amp;0x7B)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
            0:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch 
            (Control_Data.DeviceRequest.bRequest)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
            0: 
            get_status(0);break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
            6: 
            get_descriptor();break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
            8: 
            get_configuration();break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
            1:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch 
            (Control_Data.DeviceRequest.bRequest)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;&nbsp;0: 
            get_status(1);break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
            10: 
            get_interface();break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default: 
            break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
            2:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(Control_Data.DeviceRequest.bRequest==0)get_status(2);&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default: 
            break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;return;<BR>&nbsp;&nbsp;}<BR>if(USB_setup_packet_out)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;if((Control_Data.DeviceRequest.bmRequestType==0x21)&amp;&amp;(Control_Data.DeviceRequest.bRequest==0xFF))<BR>&nbsp;&nbsp;&nbsp;&nbsp;mass_storage_reset();<BR><BR>&nbsp;&nbsp;&nbsp;switch(Control_Data.DeviceRequest.bmRequestType&amp;0x03)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
            0:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch 
            (Control_Data.DeviceRequest.bRequest)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLEAR_FEATURE: 
            clear_feature(0);break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SET_FEATURE: 
            set_feature(0);break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SET_ADDRESS: 
            set_usb_address();break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//set_address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;&nbsp;&nbsp;&nbsp;SET_DESCRIPTOR: 
            set_descriptor();break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//set_descriptor<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
            SET_CONFIGURATION: set_configuration(); 
            break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//set_configurat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default: 
            break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
            1:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch 
            (Control_Data.DeviceRequest.bRequest)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
            CLEAR_FEATURE:&nbsp;&nbsp;clear_feature(1);break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;&nbsp;&nbsp;SET_FEATURE:&nbsp;&nbsp;set_feature(1); 
            break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
            SET_INTERFACE: 
            set_interface();break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default: 
            break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
            2:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch 
            (Control_Data.DeviceRequest.bRequest)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 
            CLEAR_FEATURE: 
            clear_feature(2);break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;&nbsp;&nbsp;SET_FEATURE: 
            set_feature(2);break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default: 
            break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default: 
            break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>}<BR><BR><BR>void 
            Return_CSW(unsigned long int DataResidue,unsigned char 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -