liuchunhui2134
驱动牛犊
驱动牛犊
  • 注册日期2007-03-11
  • 最后登录2008-12-04
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望6点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:2153回复:0

68013如何相应用户自定义的厂商命令请求?

楼主#
更多 发布于:2007-04-30 23:03
  文字
大家好,我问一个关于68013用户自定义请求的问题:
#define VX_B2 0xB2              // turn ON debug LEDs...
#define VX_B3 0xB3              // turn OFF debug LEDs...

#define VX_B7 0xB7              // re-initialize, call TD_Init( );
#define VX_B8 0xB8              // do a "soft reset", vector to org 00h
#define VX_BA 0xBA              // commit out pkt. new way
#define VX_BB 0xBB              // commit in pkt. new way
#define VX_C2 0xC2              // source out pkt.


#define VX_BC 0xBC              // turn OFF debug LEDs...
#define VX_BD 0xBD              // turn OFF debug LEDs...
#define VX_BE 0xBE              // turn OFF debug LEDs...
#define VX_BF 0xBF              // turn OFF debug LEDs...

#define VX_C3 0xC3             // turn OFF debug LEDs...


// Core uses bRequest value 0xA0 for Anchor downloads/uploads...
// Cypress Semiconductor reserves bRequest values 0xA1 through 0xAF...
// Your implementation should not use the above bRequest values...
// Also, previous fw.c versions trap all bRequest values 0x00 through 0x0F...
//
//   bRequest value: SETUPDAT[1]
//   standard, 0x00 through 0x0F
//
//   bmRequest value: SETUPDAT[0]
//   standard,  0x80 IN   Token
//   vendor,    0xC0 IN   Token
//   class,     0xA0 IN   Token
//   standard,  0x00 OUT  Token
//   vendor,    0x40 OUT  Token
//   class,     0x60 OUT  Token

BOOL DR_VendorCmnd( void )
{

  // Registers which require a synchronization delay, see section 15.14
  // FIFORESET        FIFOPINPOLAR
  // INPKTEND         OUTPKTEND
  // EPxBCH:L         REVCTL
  // GPIFTCB3         GPIFTCB2
  // GPIFTCB1         GPIFTCB0
  // EPxFIFOPFH:L     EPxAUTOINLENH:L
  // EPxFIFOCFG       EPxGPIFFLGSEL
  // PINFLAGSxx       EPxFIFOIRQ
  // EPxFIFOIE        GPIFIRQ
  // GPIFIE           GPIFADRH:L
  // UDMACRCH:L       EPxGPIFTRIG
  // GPIFTRIG
  
  // Note: The pre-REVE EPxGPIFTCH/L register are affected, as well...
  //      ...these have been replaced by GPIFTC[B3:B0] registers

    switch( SETUPDAT[ 1 ] )
    {
    case VX_B2:
    { // turn OFF debug LEDs...
    
      ledX_rdvar = LED0_ON;    // visual
      ledX_rdvar = LED1_ON;    // visual
      ledX_rdvar = LED2_ON;    // visual
      ledX_rdvar = LED3_ON;    // visual
      
      *EP0BUF = VX_B2;

  EP0BCH = 0;
  EP0BCL = 1;               // Arm endpoint with # bytes to transfer
  EP0CS |= bmHSNAK;         // Acknowledge handshake phase of device request
  
      break;
    }
    case VX_B3:
    { // turn OFF debug LEDs...
    
      ledX_rdvar = LED0_OFF;    // visual
      ledX_rdvar = LED1_OFF;    // visual
      ledX_rdvar = LED2_OFF;    // visual
      ledX_rdvar = LED3_OFF;    // visual
      
      *EP0BUF = VX_B3;
      EP0BCH = 0;
      EP0BCL = 1;               // Arm endpoint with # bytes to transfer
      EP0CS |= bmHSNAK;         // Acknowledge handshake phase of device request
  



      break;
    }

     case VX_BC:
    { // turn OFF debug LEDs...
    
        
                
    
    
      
      *EP0BUF = num;           //传输num          
                                EP0BCH = 0;
          EP0BCL = 1;               // Arm endpoint with # bytes to transfer
          EP0CS |= bmHSNAK;         // Acknowledge handshake phase of device request
 


      break;
    }

 
    
    default:
    {
      ledX_rdvar = LED3_ON;     // debug visual, stuck "ON" to warn developer...
        return( FALSE );          // no error; command handled OK
    }
    }
  

    return( FALSE );              // no error; command handled OK
}

红色部分为硬件响应用户请求的代码,注意:这里的VX_BC是自己定义的
而上层应用程序的deviceiocontrol中控制码用的是IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST
bResult = DeviceIoControl (m_hDevice,
                                             IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST,
                        &myRequest,
                        //sizeof(IOCTL_EZUSB_GET_CURRENT_FRAME_NUMBER),
                        sizeof(VENDOR_OR_CLASS_REQUEST_CONTROL),
                        buffer, //固件返回的数值
                        bufferSize,//返回数值大小
                        (unsigned long *)&lenBytes,
                        NULL);

头文件中#define IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST   CTL_CODE(FILE_DEVICE_UNKNOWN,  \
                                                   Ezusb_IOCTL_INDEX+22,\
                                                   METHOD_IN_DIRECT,  \
                                                   FILE_ANY_ACCESS)

请问固件到底怎么相应用户定义的控制码?
具体流程是什么?

谢谢!

最新喜欢:

wingmanwingma...
游客

返回顶部