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

📄 usbdebug.c

📁 基于USB2.0芯片 ISP1581 的扫描仪固件源码,USB驱动模块
💻 C
📖 第 1 页 / 共 5 页
字号:

	
	Temp = USB_Device_Request.wLength;
	USB_Device_Request.wLength = 0;
	USB_Device_Request.wLength = (UC) Temp;
	USB_Device_Request.wLength <<= 8;
	Temp >>= 8;
	USB_Device_Request.wLength |= Temp;


   
   //check if the device request is vendor or class specific
	if(USB_Device_Request.bmRequestType == 0xC0 ||
	   USB_Device_Request.bmRequestType == 0x40 ||
	   USB_Device_Request.bmRequestType == 0xA1 ||
            USB_Device_Request.bmRequestType == 0x21)
	{
		//Vendor and Classs request routine
      Vendor_Specific_Command();
		return;
	}


   //decode device reuest
	switch(USB_Device_Request.bRequest)
	{

	case	Get_Descriptor	:
   
                           switch(USB_Device_Request.wValue)
                           {
                           
                              case  1        :  
	                                             if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
		                                             Descriptor_Ptr = &Standard_Device_Descriptor[0];	//set pointer to device descriptor

	                                             if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
		                                             Descriptor_Ptr = &HS_Device_Descriptor[0];	//set pointer to device descriptor

	                                             count = *Descriptor_Ptr;							//read in descriptor length



	                                             D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;

                                                D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = 0x12;
		                                          D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = 0;
	                                             
                                                //send descriptor
	                                             D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;	//fill up FIFO
		                                          Descriptor_Ptr++;
                                                D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;	//fill up FIFO
		                                          Descriptor_Ptr++;
                                                D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;	//fill up FIFO
		                                          Descriptor_Ptr++;
                                                D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;	//fill up FIFO
		                                          Descriptor_Ptr++;
                                                D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;	//fill up FIFO
		                                          Descriptor_Ptr++;
                                                D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;	//fill up FIFO
		                                          Descriptor_Ptr++;
                                                D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;	//fill up FIFO
		                                          Descriptor_Ptr++;
                                                D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;	//fill up FIFO
		                                          Descriptor_Ptr++;
                                                D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;	//fill up FIFO
		                                          Descriptor_Ptr++;
                                                D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;	//fill up FIFO
		                                          Descriptor_Ptr++;
                                                D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;	//fill up FIFO
		                                          Descriptor_Ptr++;
                                                D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;	//fill up FIFO
		                                          Descriptor_Ptr++;
                                                D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;	//fill up FIFO
		                                          Descriptor_Ptr++;
                                                D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;	//fill up FIFO
		                                          Descriptor_Ptr++;
                                                D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;	//fill up FIFO
		                                          Descriptor_Ptr++;
                                                D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;	//fill up FIFO
		                                          Descriptor_Ptr++;
                                                D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;	//fill up FIFO
		                                          Descriptor_Ptr++;
                                                D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;	//fill up FIFO
		                                          Descriptor_Ptr++;
                                                
                                                //check for status stage
                                                while(!USB_Int_Flag.BITS.EP0TX)
                                                {
                                                   if(USB_Int_Flag.BITS.SUSP ||
                                                      USB_Int_Flag.BITS.RESET)
                                                      return;
                                                }
                                                
                                                USB_Int_Flag.BITS.EP0TX = 0;

	                                             D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
	                                             D14_Cntrl_Reg.D14_CONTROL_FUNCTION.VALUE = 2;
                                                                        
                                                break;
                              
                              case  0x0102   :
                              case  2        :  

                                                USB_Int_Flag.BITS.EP0RX = 0;

	                                             Temp = 64;

 	                                             Descriptor_Ptr = &Standard_Config_Descriptor[0];	//set pointer to configuration descriptor

	                                             count = *Descriptor_Ptr;							//get configuration Descriptor length

	                                             D14_Cntrl_Reg.D14_ENDPT_INDEX = 1;

                                                //check if only configuration descriptor required
	                                             if(count >= USB_Device_Request.wLength)				//Send only Configuration descriptor
	                                             {
      		                                       D14_Cntrl_Reg.D14_BUFFER_LENGTH_LSB = (UC) USB_Device_Request.wLength;
		                                             D14_Cntrl_Reg.D14_BUFFER_LENGTH_MSB = (UC) (USB_Device_Request.wLength >> 8);
			
		                                             //send descriptor
                                                   for(count = 0 ; count < USB_Device_Request.wLength ; count++)
		                                             {
			                                             D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
			                                             Descriptor_Ptr++;
		                                             }


         	                                       //check for status stage
                                                   while(!USB_Int_Flag.BITS.EP0TX)
                                                   {
                                                      if(USB_Int_Flag.BITS.SUSP ||
                                                         USB_Int_Flag.BITS.RESET)
                                                         return;
                                                   }
                                                   
                                                   USB_Int_Flag.BITS.EP0TX = 0;
                  
		                                             D14_Cntrl_Reg.D14_ENDPT_INDEX = 0;
		                                             D14_Cntrl_Reg.D14_CONTROL_FUNCTION.BITS.STATUS = 1;

/*                                                   
                                                   //end of status stage
                                                   while(!USB_Int_Flag.BITS.EP0RX)
                                                   {
                                                      if(USB_Int_Flag.BITS.SUSP ||
                                                         USB_Int_Flag.BITS.RESET)
                                                         return;
                                                   }
                                                   
                                                   USB_Int_Flag.BITS.EP0RX = 0;
*/
  				                                    }
   	                                          else //send Configuration,Interface and Endpoint descriptor
	                                             {

		                                             if(USB_Device_Request.wLength >= 32)
		                                             {
   			                                          while(count != 0)
			                                             {
				                                             D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
				                                             count--;
				                                             Descriptor_Ptr++;
				                                          
                                                      }

			                                             if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
				                                             Descriptor_Ptr = &Bulk_Interface_Descriptor[0]; //set pointer to interface descriptor

			                                             if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
				                                             Descriptor_Ptr = &HS_Bulk_Interface_Descriptor[0]; //set pointer to interface descriptor
			
			                                             count = *Descriptor_Ptr;	//get the descriptor count

			                                             while(count != 0)
			                                             {
				                                             D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
				                                             count--;
				                                             Descriptor_Ptr++;
				                                          
                                                      }


			                                             if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
				                                             Descriptor_Ptr = &Int_In_Descriptor[0]; //set pointer to interface descriptor
   
	   		                                          if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
				                                             Descriptor_Ptr = &HS_Int_In_Descriptor[0]; //set pointer to interface descriptor

			                                             count = *Descriptor_Ptr;	//read in descriptor length

			                                             while(count != 0)
			                                             {
				                                             D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
				                                             count--;
				                                             Descriptor_Ptr++;
				                                          
                                                      }

  
			                                             if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
				                                             Descriptor_Ptr = &Int_Out_Descriptor[0]; //set pointer to interface descriptor

			                                             if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
				                                             Descriptor_Ptr = &HS_Int_Out_Descriptor[0]; //set pointer to interface descriptor

			                                             count = *Descriptor_Ptr;	//read in descriptor length

			                                             while(count != 0)
			                                             {
				                                             D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
				                                             count--;
				                                             Descriptor_Ptr++;
				                                          
                                                      }

			                                             if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
				                                             Descriptor_Ptr = &Bulk_In_Descriptor[0]; //set pointer to interface descriptor

			                                             if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
				                                             Descriptor_Ptr = &HS_Bulk_In_Descriptor[0]; //set pointer to interface descriptor

			                                             count = *Descriptor_Ptr;	//read in descriptor length

			                                             while(count != 0)
			                                             {
				                                             D14_Cntrl_Reg.D14_DATA_PORT_LSB = *Descriptor_Ptr;
				                                             count--;
				                                             Descriptor_Ptr++;
				                                          
                                                      }


			                                             if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
				                                             Descriptor_Ptr = &Bulk_Out_Descriptor[0]; //set pointer to interface descriptor

			                                             if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
				                                             Descriptor_Ptr = &HS_Bulk_Out_Descriptor[0]; //set pointer to interface descriptor

			                                             count = *Descriptor_Ptr;	//read in descriptor length

			                                             while(count != 0)

⌨️ 快捷键说明

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