打印
[技术问答]

NUC 505 USB 报告描述符 设置了 Report ID 上位机WriteFile写数据只能生产一次中断

[复制链接]
819|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
永恒mx|  楼主 | 2020-8-16 22:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
NUC 505 USB 报告描述符 设置了  Report ID 上位机WriteFile写数据只能生产一次中断 ,后面的写入都堵塞WriteFile  不返回,官方例子USBD_HID_Transfer  加上   Report ID  就会那样,不加就正常。 哪位大佬知道咋解决??

使用特权

评论回复
沙发
jasontu| | 2020-8-18 08:46 | 只看该作者
把你的HID 描述符报告,及写迈去的RAW DATA传出来看看。

使用特权

评论回复
板凳
永恒mx|  楼主 | 2020-8-18 17:21 | 只看该作者
本帖最后由 永恒mx 于 2020-8-18 17:23 编辑
jasontu 发表于 2020-8-18 08:46
把你的HID 描述符报告,及写迈去的RAW DATA传出来看看。

/*!<USB HID Report Descriptor */
#ifdef __ICCARM__
#pragma data_alignment=4
uint8_t HID_ReportDescriptor[] =
#else
uint8_t HID_ReportDescriptor[] __attribute__((aligned(4))) =
#endif
{
    0x06, 0x06, 0xFF,                           /* USAGE_PAGE (Vendor Defined)*/
    0x09, 0x01,                                 /* USAGE (0x01)*/
    0xA1, 0x01,                                 /* COLLECTION (Application)*/
                0x85, 0x03,
    0x15, 0x00,                                 /* LOGICAL_MINIMUM (0)*/
    0x26, 0xFF, 0x00,                           /* LOGICAL_MAXIMUM (255)*/
    0x75, 0x08,                                 /* REPORT_SIZE (8)*/
    0x96,
    HID_MAX_PACKET_SIZE_INT_IN & 0x00FF,        /* REPORT_COUNT*/
    (HID_MAX_PACKET_SIZE_INT_IN & 0xFF00) >> 8,
    0x09, 0x01,
    0x81, 0x02,                                 /* INPUT (Data,Var,Abs)*/
    0x96,
    HID_MAX_PACKET_SIZE_INT_OUT & 0x00FF,       /* REPORT_COUNT*/
    (HID_MAX_PACKET_SIZE_INT_OUT & 0xFF00) >> 8,
    0x09, 0x01,
    0x91, 0x02,                                 /* OUTPUT (Data,Var,Abs)*/
    0x95, 0x08,                                 /* REPORT_COUNT (8) */
    0x09, 0x01,
    0xB1, 0x02,                                 /* FEATURE */
    0xC0                                        /* END_COLLECTION*/
};

Raw data :  00000000  03 F0 00 00 00 CC CC CC CC CC CC CC CC 00 00 00 00 D0 CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC  . ð . . . Ì Ì Ì Ì Ì Ì Ì Ì . . . . Ð Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì  0000002D  CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC  Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì  
0000005A  CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC  Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì  
00000087  CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC  Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì  
000000B4  CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC  Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì  
000000E1  CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC  Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì  
0000010E  CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC  Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì  
0000013B  CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC  Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì  
00000168  CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC  Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì  
00000195  CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC  Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì  
000001C2  CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC  Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì  
000001EF  CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC CC                                                                                   Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì Ì                                                        
                                                                                                                                                                                                      

使用特权

评论回复
地板
jasontu| | 2020-8-25 16:34 | 只看该作者
Report size=>改63
    0x05, 0x01, // USAGE_PAGE (Generic Desktop)
    0x09, 0x00, // USAGE (0)
    0xA1, 0x01, // COLLECTION (Application)
          0x85, 0x01,      //             Report ID (1)
    0x15, 0x00, //     LOGICAL_MINIMUM (0)
    0x25, 0xFF, //     LOGICAL_MAXIMUM (255)
    0x19, 0x01, //     USAGE_MINIMUM (1)
    0x29, 0x08, //     USAGE_MAXIMUM (8)
    0x95, 0x3f, //     REPORT_COUNT
    0x75, 0x08, //     REPORT_SIZE (8)
    0x81, 0x02, //     INPUT (Data,Var,Abs)
    0x19, 0x01, //     USAGE_MINIMUM (1)
    0x29, 0x08, //     USAGE_MAXIMUM (8)
    0x91, 0x02, //   OUTPUT (Data,Var,Abs)

    0x06, 0x00, 0xFF, // Usage Page (Vendor-Defined 162)
    0x09, 0x01, // Usage (Vendor-Defined 1)
    0xA1, 0x01, // COLLECTION (Application)
    0x85, 0x02,      //             Report ID (2)
    0x09, 0x01, //          Usage (Vendor-Defined 1)
    0x15, 0x00, //     LOGICAL_MINIMUM (0)
    0x25, 0xFF, //     LOGICAL_MAXIMUM (-1)
    0x75, 0x08, //     REPORT_SIZE (8)
    0x95, 0x0F, //     REPORT_COUNT (15)
    0xB1, 0x02, //      Feature (Data,Var,Abs,NWrp,Lin,Pref,NNul,NVol,Bit)
    0xC0,        // END_COLLECTION
        
          0xC0,        // END_COLLECTION
        //=================================================

Fw送收端點還是要64 byte

64 byte=>1 byte id+  63 byte data

    BOOL ReadFile(unsigned char *pcBuffer, size_t szMaxLen, DWORD *pdwLength, DWORD dwMilliseconds)
    {
        BOOL bRet;

        bRet = m_hidIO.ReadFile(m_acBuffer, 64, pdwLength, dwMilliseconds); =>64 byte  id+ 63 data
       // (*pdwLength)--;
        memcpy(pcBuffer, m_acBuffer, *pdwLength);

       return bRet;
    }

    BOOL WriteFile(unsigned char *pcBuffer, DWORD dwLen, DWORD *pdwLength, DWORD dwMilliseconds)
    {
       /* Set new package index value */
       DWORD dwCmdLength = dwLen;
       if(dwCmdLength > sizeof(m_acBuffer) - 1)
           dwCmdLength = sizeof(m_acBuffer) - 1;
        
        memset(m_acBuffer, 0xCC, sizeof(m_acBuffer));
       m_acBuffer[0] = 0x01; //Always 0x00
        memcpy(m_acBuffer+1  , pcBuffer, dwCmdLength);
       BOOL bRet = m_hidIO.WriteFile(m_acBuffer, 64, pdwLength, dwMilliseconds); =>64 byte  id+ 63 data
       // (*pdwLength)--;

        if(bRet)
        {
                *pdwLength = *pdwLength - 1;
        }

        return bRet;
    }

};

使用特权

评论回复
5
永恒mx|  楼主 | 2020-8-25 22:08 | 只看该作者
jasontu 发表于 2020-8-25 16:34
Report size=>改63
    0x05, 0x01, // USAGE_PAGE (Generic Desktop)
    0x09, 0x00, // USAGE (0)

谢谢 大佬 我前两天也是改成64就可以了,不知道为啥不加Report ID 512字节就没事 。拿掉Report ID写入的大小也是513  区别在于0x00 和 ID号之间。

使用特权

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

本版积分规则

2

主题

5

帖子

0

粉丝