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

[复制链接]
1038|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;
    }

};
 楼主| 永恒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

粉丝
快速回复 在线客服 返回列表 返回顶部