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

📄 msfunction.c

📁 MSTAR03的数码相框的代码
💻 C
📖 第 1 页 / 共 3 页
字号:
#else
				        usbStillImageSts=STILL_STSTUS_OK|0x04000000;
#endif
                        usbEP[0].transfer_buffer_length=4;
                        usbEP[0].transfer_buffer=(__u32)&usbStillImageSts;
                        retstatus = USB_PID_IN;
            	        break;
                case    CANCEL_OP_REQUEST:
                        sp = usbMalloc(usbEP0Setup.wLength);
                        usbEP[0].transfer_buffer_length=usbEP0Setup.wLength;
                        usbEP[0].transfer_buffer=(__u32)sp;
                        //usbFree(sp);
                        retstatus = USB_PID_OUT;
                        break;

             }
            }
	     if(OtgDeviceType==Device_MassStorage)
	     {
	      switch (usbEP0Setup.bRequest)
             {
                case    MSDFN_BOT_RESET:
                            retstatus = USB_PID_ACK;
                           break;
                case    MSDFN_BOT_GET_MAXLUN:
#ifdef Enable_Device_MassStorage
			      otgInitMassBuffer();
#endif
                           usbEP[0].transfer_buffer_length=1;
                           //usbEP[0].transfer_buffer=(__u32)&otgPerMassmax_Lun|0xA0000000;
                           usbEP[0].transfer_buffer=(__u32)&DviceMassmax_Lun;
                           if ((usbEP0Setup.bmRequestType & USB_RECIP_MASK) == USB_RECIP_INTERFACE)
                            retstatus = USB_PID_IN;
                           break;
	      }
	     }
        }
        return(retstatus);
    }
#ifdef USB_DEBUG
//            printf("\r\nusbSpeed = %x ",usbSpeed);
//            printf("\r\nbRequest = %x ",usbEP0Setup.bRequest);
#endif
    switch (usbEP0Setup.bRequest)
    {
        case    USB_REQ_GET_STATUS:
                usbGetStatusResponse = 0;
                usbEP[0].transfer_buffer_length=usbEP0Setup.wLength;
                usbEP[0].transfer_buffer=(__u32)&usbGetStatusResponse;
                if  ((usbEP0Setup.bmRequestType & USB_RECIP_MASK) == USB_RECIP_DEVICE)
                {
#ifdef BIG_ENDIAN
                    if  (usbRemoteWakeup)
                        usbGetStatusResponse = 0x0200;
                    if  (usbSelfPower)
                        usbGetStatusResponse |= 0x0100;
#else
                    if  (usbRemoteWakeup)
                        usbGetStatusResponse = 0x02;
                    if  (usbSelfPower)
                        usbGetStatusResponse |= 0x01;
#endif
                    retstatus = USB_PID_IN;
                    break;
                }
                if  ((usbEP0Setup.bmRequestType & USB_RECIP_MASK) == USB_RECIP_INTERFACE)
                {
                    retstatus = USB_PID_IN;
                    break;
                }
                if  ((usbEP0Setup.bmRequestType & USB_RECIP_MASK) == USB_RECIP_ENDPOINT)
                {
                    pipe = GETLSB(usbEP0Setup.wIndex) & 0xff;
                 		endpoint = usb_pipeendpoint(pipe);
	                	direction = usb_pipein(pipe) ? 0 : 1;
		                if(endpoint == 0)
		                   break;
#ifdef BIG_ENDIAN
                    if  (usbEP[endpoint].Halted)
                       usbGetStatusResponse = 0x0100;
#else
                    if  (usbEP[endpoint].Halted)
                       usbGetStatusResponse = 0x01;
#endif
                    retstatus = USB_PID_IN;
                    break;
                }
                break;

        case    USB_REQ_CLEAR_FEATURE:
                if  (usbUSBState < USB_ADDRESS)
                    break;                          /* STALL */
                if  ((usbEP0Setup.bmRequestType & USB_RECIP_MASK) == USB_RECIP_DEVICE)
                {
                      if  (GETLSB(usbEP0Setup.wValue) == DEVICE_REMOTE_WAKEUP)
                      {
                           usbRemoteWakeup = 0;
                           retstatus = USB_PID_ACK;
                      }
                }
                else if ((usbEP0Setup.bmRequestType & USB_RECIP_MASK) == USB_RECIP_INTERFACE)
                {
                      if  (usbUSBState != USB_CONFIGURED )
                          break;                  /* STALL */
                      retstatus = USB_PID_ACK;
                }
                else if ((usbEP0Setup.bmRequestType & USB_RECIP_MASK) == USB_RECIP_ENDPOINT)
                {
                     if  ((usbUSBState == USB_ADDRESS) && (GETLSB(usbEP0Setup.wIndex) != 0))
                         break;                              /* STALL */
                     if  (GETLSB(usbEP0Setup.wValue) == ENDPOINT_HALT)
                     {
		                     pipe = GETLSB(usbEP0Setup.wIndex) & 0xff;
		                     endpoint = usb_pipeendpoint(pipe);
		                     direction = usb_pipein(pipe) ? 0 : 1;
		                     if (endpoint)
                         {
                             usbEP[endpoint].Halted = 0;
                             usbDRC_Index_Select_INT(usbEP[endpoint].BltEP);
                             if (usbEP[endpoint].DRCDir)
							 {
                                 usbREG_WRITE8(USB_REG_RXCSR1, M_RXCSR_CLRDATATOG);
                                 usbREG_WRITE8(USB_REG_RXCSR1, 0);
							 }
                             else
							 {
                                 usbREG_WRITE8(USB_REG_TXCSR1, M_TXCSR_CLRDATATOG);
                                 usbREG_WRITE8(USB_REG_TXCSR1, 0);
							 }
                             usbDRC_Index_Select_INT(0);   /* Back to EP0. */
                             usbClearedEP=1;
                         }
                         retstatus = USB_PID_ACK;
                     }
                }
                break;

        case    USB_REQ_SET_FEATURE:
                if  (usbUSBState < USB_DEFAULT)
                     break;
                if  ((usbEP0Setup.bmRequestType & USB_RECIP_MASK) == USB_RECIP_DEVICE)
                {
                     if  (GETLSB(usbEP0Setup.wValue) == DEVICE_REMOTE_WAKEUP)
                     {
                         usbRemoteWakeup = 1;
                         retstatus = USB_PID_ACK;
                     }
                     if  (GETLSB(usbEP0Setup.wValue) == USB_TEST_MODE)
                     {
                         usbTestMode = usbEP0Setup.wIndex;
                     }
                     if  (GETLSB(usbEP0Setup.wValue) == b_hnp_enable)
                     {
                         if (usbMyDeviceHNPSupport)
                             usbHNPEnabled = 1;  /* we can become host now */
                         else
                             break;
                      }
                      if  (GETLSB(usbEP0Setup.wValue) == a_hnp_support)
                      {
                           if  (usbMyDeviceHNPSupport)
                                usbHNPSupport = 1;
                           else
                                break;
                      }
                      retstatus = USB_PID_ACK;
                      break;
                }
                if  ((usbEP0Setup.bmRequestType & USB_RECIP_MASK) == USB_RECIP_INTERFACE)
                {
                    if  (usbUSBState != USB_CONFIGURED )
                        break;
                    if ((GETLSB(usbEP0Setup.wValue) == b_hnp_enable) || (GETLSB(usbEP0Setup.wValue) == a_hnp_support) ||
                            (GETLSB(usbEP0Setup.wValue) == a_alt_hnp_support))
                        retstatus = USB_PID_ACK;
                    break;
                }
                if  ((usbEP0Setup.bmRequestType & USB_RECIP_MASK) == USB_RECIP_ENDPOINT)
                {
                     if  ((usbUSBState == USB_ADDRESS) && (GETLSB(usbEP0Setup.wIndex) != 0))
                          break;
                     if  (GETLSB(usbEP0Setup.wValue) == ENDPOINT_HALT)
                     {
		                 pipe = GETLSB(usbEP0Setup.wIndex) & 0xff;
		                 endpoint = usb_pipeendpoint(pipe);
		                 direction = usb_pipein(pipe) ? 0 : 1;
		                 if (endpoint)
                         {
                             usbEP[endpoint].Halted = 1;
                             usbDRC_Index_Select_INT(usbEP[endpoint].BltEP);
                             if (usbEP[endpoint].DRCDir)
                                 usbREG_WRITE8(USB_REG_RXCSR1, M_RXCSR1_P_SENDSTALL);
                             else
                                 usbREG_WRITE8(USB_REG_TXCSR1, M_TXCSR1_P_SENDSTALL);
                             usbDRC_Index_Select_INT(0);
                         }
                         retstatus = USB_PID_ACK;
                         break;
                     }
                }
                break;

        case    USB_REQ_SET_ADDRESS:
#ifdef USB_DEBUG
//                    printf("\r\nwValue = %x ",GETLSB(usbEP0Setup.wValue));
#endif
                if(GETLSB(usbEP0Setup.wValue) <= 127)
                {
                    usbFaddr = GETLSB(usbEP0Setup.wValue);
                    if ((usbUSBState == USB_DEFAULT) && (usbFaddr != 0))
                        usbSetFaddr = 0;
                    retstatus = USB_PID_ACK;
#ifdef USB_DEBUG
//                    printf("\r\nusbSetFaddr = %x ",usbSetFaddr);
//                    printf("\r\nusbFaddr = %x ",usbFaddr);
//                    printf("\r\nretstatus = %x ",retstatus);
#endif
                }
                break;

        case    USB_REQ_GET_DESCRIPTOR:
                //usbConnectFlag=1;
		  //NotifyusbConnect=1;
                usbFunction_Initial();
                desctype = GETMSB(usbEP0Setup.wValue);
                if  (!((desctype == USB_DT_DEVICE) || (desctype == USB_DT_CONFIG)||
                    (desctype == USB_DT_STRING)||(desctype == USB_DT_DEVICE_QUALIFIER) ||
                    (desctype == USB_DT_OTHER_SPEED)))
                    return(retstatus);  /* STALL if not valid request */
                scanP = (__u8 *)usbMsdfn_Dscr;
                bytesrem = (__u32)sizeof(usbMsdfn_Dscr);
                if  ((!scanP) || (bytesrem <=0))
                    return(retstatus);
                descindex = GETLSB(usbEP0Setup.wValue);/* !=0 for string,config*/
                i = descindex;
                while   (bytesrem > 0)/*While Looping_Free:<Exit counter added>*/
                {
                     if (*(scanP+1) == desctype)
                     {
                         if  (i == 0)
                             break;
                         i--;
                     }
                     bytesrem -= *scanP;
                     scanP += *scanP;
                }
                if  (bytesrem <= 0)
                    return(retstatus);
                if  ((desctype == USB_DT_CONFIG)||(desctype == USB_DT_OTHER_SPEED))
                {
                     length = (*(scanP+3) << 8) + *(scanP+2);
                }
                else
                     length = *scanP;
                usbEP[0].transfer_buffer_length=MIN(usbEP0Setup.wLength,length);
                usbEP[0].transfer_buffer=(__u32)scanP;
#ifdef USB_DEBUG
                //printf("\r\nlength = %x ",usbUSB_EP[0].transfer_buffer_length);
                //printf("\r\nbuffer = %x ",usbUSB_EP[0].transfer_buffer);
#endif
                retstatus = USB_PID_IN;
                break;

        case    USB_REQ_SET_DESCRIPTOR:
        	      sp = usbMalloc(usbEP0Setup.wLength);
                usbEP[0].transfer_buffer_length=usbEP0Setup.wLength;
                usbEP[0].transfer_buffer=(__u32)sp;
                usbFree(sp);
                retstatus = USB_PID_OUT;
                break;

        case    USB_REQ_GET_CONFIGURATION:
                usbEP[0].transfer_buffer_length=usbEP0Setup.wLength;
                usbEP[0].transfer_buffer=(__u32)&usbConfig;
                retstatus = USB_PID_IN;
                break;

        case    USB_REQ_SET_CONFIGURATION:
                if  (usbUSBState < USB_ADDRESS)
                    break;
                if  (!GETLSB(usbEP0Setup.wValue))
                {
                     usbChange_USB_State(USB_ADDRESS);
                     retstatus = USB_PID_ACK;
                     break;
                }
                if  (GETLSB(usbEP0Setup.wValue))
                {
                     usbConfig = GETLSB(usbEP0Setup.wValue);
                     usbChange_USB_State(USB_CONFIGURED);
					 //usbConnectFlag=1;
		             //NotifyusbConnect=1;
					 //printf("\r\n UsbCntFlg=%x", usbConnectFlag);
                     retstatus = USB_PID_ACK;
                     break;
                }
                break;

        case    USB_REQ_GET_INTERFACE:
                if  (usbUSBState != USB_CONFIGURED)
                    break;
                usbEP[0].transfer_buffer_length=usbEP0Setup.wLength;
                usbEP[0].transfer_buffer=(__u32)&usbInterface;
                retstatus = USB_PID_IN;
                break;

        case    USB_REQ_SET_INTERFACE:
                if  (usbUSBState != USB_CONFIGURED)
                     break;
                retstatus = USB_PID_ACK;
                break;

        case    USB_REQ_SYNCH_FRAME:
                break;
        default:
                break;
    }
    return(retstatus);
}

#if 0
void otgFIFO_Test(void)
{
    __u8 volatile Flash_Buffer[0x40];
    __u8 tmpa;
    __u8 tmpb;
	__u32 testcnt=0;

    while(1)
    {
        usbEP[0].MaxEPSize=0x40;
		usbEP[0].BytesProcessed = 0;
		usbEP[0].BytesRequested = 0x40;
		usbEP[0].FifoRemain=0x40;
		usbEP[0].BltEP=0;
        tmpb=0;
        for (tmpa=0;tmpa<0x40;tmpa++)
        {
    	      Flash_Buffer[tmpa]=tmpb;
    	      tmpb++;
        }
//        for (tmpa=0;tmpa<0x40;tmpa++)
// 			  printf("\r\nFlash_Buffer[tmpa] = %x ",Flash_Buffer[tmpa]);
        usbDRC_Fifo_Write(Flash_Buffer, 0);
        usbREG_WRITE8(USB_REG_TXCSR1, M_CSR0_TXPKTRDY);
//        printf("\r\nTXCSR1 = %x ",usbREG_READ8(USB_REG_TXCSR1));
        usbREG_WRITE8(USB_REG_TESTMODE,M_TEST_FIFOACCESS);
//        printf("\r\nTESTMODE = %x ",usbREG_READ8(USB_REG_TESTMODE));
//        for (tmpa=0;tmpa<0x40;tmpa++)
//     	      Flash_Buffer[tmpa]=0;
        usbEP[0].MaxEPSize=0x40;
		usbEP[0].BytesProcessed = 0;
		usbEP[0].BytesRequested = 0x40;
		usbEP[0].FifoRemain=0x40;
		usbEP[0].BltEP=0;
        usbDRC_Fifo_Read(Flash_Buffer, 0);
        tmpb=0;
        usbREG_WRITE8(USB_REG_TXCSR1, M_CSR0_P_SVDRXPKTRDY);
//        printf("\r\nTXCSR1 = %x ",usbREG_READ8(USB_REG_TXCSR1));
        for (tmpa=0;tmpa<0x40;tmpa++)
        {
    	      if (Flash_Buffer[tmpa]!=tmpb)
			  {
#ifdef USB_DEBUG
                  printf("\r\ntmpa = %x ",tmpa);
                  printf("\r\nFlash_Buffer[tmpa] = %x ",Flash_Buffer[tmpa]);
#endif
    	          while(1);
			  }
    	      tmpb++;
        }
		testcnt++;
#ifdef USB_DEBUG
        printf("\r\ntestcnt = %x ",testcnt);
#endif
    }
}
#endif

⌨️ 快捷键说明

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