打印

做USBHID鼠标,用STM32库,怎样得到Setup Packet 具体数据?

[复制链接]
2786|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zly883|  楼主 | 2011-7-4 16:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zly883 于 2011-7-4 17:15 编辑

请教版主。我用STM32库,怎样得到主机传过来的Setup Packet 数据?例如0x21 0x09 0x05 0x03 0x00 0x00 0x03 0x00 。我在库的,usb_core.c里的void NoData_Setup0(void)里添加了对Type_Recipient和RequestNo的判断,但不对,没有得到0x09,0x05,的值。
if (Type_Recipient == (STANDARD_REQUEST | DEVICE_RECIPIENT))
  {
if(Type_Recipient==0x21) //新增判断
{
bmRequestType_AAA=0xff;
}
    /* Device Request*/
    /* SET_CONFIGURATION*/
    if (RequestNo == SET_CONFIGURATION)
    {
   if(RequestNo==0x09)  //新增判断
   {
    bmRequestType_BBB=0xff;
    }
   Result = Standard_SetConfiguration();
    }
请问我在库里的那个位置添加才能得到值呢?
谢谢!!!!!!
补充我现在用的芯片是STM32F103ZE,环境是MDK414版本,库是08年的。
沙发
zly883|  楼主 | 2011-7-7 11:48 | 只看该作者
哎!搞了两天,我自己终于找到位子了。
在下面的函数中添加。
/*******************************************************************************
* Function Name  : Setup0_Process
* Description    : Get the device request data and dispatch to individual process.
* Input          : None.
* Output         : None.
* Return         : Post0_Process.
*******************************************************************************/
u8 Setup0_Process(void)
{
   
  union
  {
    u8* b;
    u16* w;
  } pBuf;


  pBuf.b = PMAAddr + (u8 *)(_GetEPRxAddr(ENDP0) * 2); /* *2 for 32 bits addr */

  if (pInformation->ControlState != PAUSE)
  {
    temp_type = pInformation->USBbmRequestType = *pBuf.b++; /* bmRequestType */
    temp_bRequest = pInformation->USBbRequest = *pBuf.b++; /* bRequest */
    pBuf.w++;  /* word not accessed because of 32 bits addressing */
    pInformation->USBwValue = ByteSwap(*pBuf.w++); /* wValue */
    pBuf.w++;  /* word not accessed because of 32 bits addressing */
    pInformation->USBwIndex  = ByteSwap(*pBuf.w++); /* wIndex */
    pBuf.w++;  /* word not accessed because of 32 bits addressing */
    pInformation->USBwLength = *pBuf.w; /* wLength */
       


  }
   if((temp_type == 0xA1)&&(temp_bRequest == 0x01))  //新增判断
    {
    AAA=0xff;
         }
  pInformation->ControlState = SETTING_UP;
  if (pInformation->USBwLength == 0)
  {
    /* Setup with no data stage */
    NoData_Setup0();
  }
  else
  {
    /* Setup with data stage */
    Data_Setup0();
  }
  return Post0_Process();
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

0

粉丝