找回密码
 立即注册
查看: 512|回复: 2

对《STC8H-USB在线升级》ISP源码中HID描述符的疑问

[复制链接]
  • TA的每日心情
    无聊
    3 天前
  • 签到天数: 122 天

    [LV.7]常住居民III

    7

    主题

    77

    回帖

    1037

    积分

    金牌会员

    机长

    积分
    1037
    发表于 2023-6-6 20:43:35 | 显示全部楼层 |阅读模式
    https://www.stcai.com/Customer/FileDownloadVerifyPass?fileid=606705&type=img
    1. char code HIDREPORTDESC[27] =
    2. {
    3.     0x05,0x0c,              //USAGE_PAGE(Consumer);
    4.     0x09,0x01,              //USAGE(Consumer Control);
    5.     0xa1,0x01,              //COLLECTION(Application);
    6.     0x15,0x00,              //  LOGICAL_MINIMUM(0);
    7.     0x25,0xff,              //  LOGICAL_MAXIMUM(255);
    8.     0x75,0x08,              //  REPORT_SIZE(8);
    9.     0x95,0x40,              //  REPORT_COUNT(64);
    10.     0x09,0x01,              //  USAGE(Consumer Control);
    11.     0xb1,0x02,              //  FEATURE(Data,Variable);
    12.     0x09,0x01,              //  USAGE(Consumer Control);
    13.     0x81,0x02,              //  INPUT(Data,Variable);
    14.     0x09,0x01,              //  USAGE(Consumer Control);
    15.     0x91,0x02,              //  OUTPUT(Data,Variable);
    16.     0xc0,                   //END_COLLECTION;
    17. };
    复制代码

    对于0x81,0x02 // INPUT(Data,Variable);和0x91,0x02 // OUTPUT(Data,Variable); 的取值有点疑问,我查了资料Variable应该是固定长度的,但实际通信中USB数据的长度应该是不固定的,因此应该是Array才对啊,即这两项应该是0x81,0x00和0x91,0x00。
    请大神帮忙看看,是我对Variable/Array理解有误,还是上位机程序里面做了填充?谢谢!
    业余撸代码,专业开飞机
    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    7 天前
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    16

    主题

    711

    回帖

    2528

    积分

    超级版主

    积分
    2528
    发表于 2023-6-7 09:16:47 | 显示全部楼层
    首先,这个Demo的的每个数据包的大小是固定为64字节
    如果你认真看代码就会发现,发送数据时如果每包数据量不足64字节,也会进行数据填充
    其次、Report中用Varibable还是Array取决于上位机对数据的处理方式
    我们这个Demo是通用HID,目的仅仅只是上位机和下位机相互进行数据传输,
    无论是Varibable还是Array,只要能实现数据传输就达到目的了

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    无聊
    3 天前
  • 签到天数: 122 天

    [LV.7]常住居民III

    7

    主题

    77

    回帖

    1037

    积分

    金牌会员

    机长

    积分
    1037
     楼主| 发表于 2023-6-7 10:00:28 | 显示全部楼层
    zhp 发表于 2023-6-7 09:16
    首先,这个Demo的的每个数据包的大小是固定为64字节
    如果你认真看代码就会发现,发送数据时如果每包数据量 ...

    嗯,看到usb_IN()方法中固定写死了64了。
    之前就觉得用Variable应该有填充,只是不是太十分确定,同时为了印证我的理解,所以就提了这个问题。

    再次感谢大神的回答~~~
    业余撸代码,专业开飞机
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-6 02:23 , Processed in 0.065028 second(s), 37 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表