USB实现CUSTOM

阅读: 评论:0

USB实现CUSTOM

USB实现CUSTOM

USB设备实现两个功能有两种方案

1、只使用一个接口,,但是使用两个应用集合和两个报告

2、使用两个接口,一个接口实现键盘功能,一个接口实现CUSTOM-HID功能

这里先使用第一种方案。

第一步,先使用cubemx实现创建一个工程,实现CUSTOM-HID功能。

第二步,修改报告描述符。

__ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =
{
        0x06, 0x00, 0xff,              // USAGE_PAGE (Vendor Defined Page 1) 表示一个报文标签之类的用途类页
    0x09, 0x01,                    // USAGE (Vendor Usage 1) 表示一个报告ID标志
    0xa1, 0x01,                    // COLLECTION (Application) 表示应用集合,要以下面最后的0xc0结束它

        0X85, 0X01,//报告ID

    0x09, 0x01,                    //   USAGE (Vendor Usage 1)同下同名解析
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)  同下同名解析
    0x26, 0xff, 0x00,              //   LOGICAL_MAXIMUM (255) 同下同名解析
    0x95, 0x40,                    //   REPORT_COUNT (64)  同下REPORT_COUNT
    0x75, 0x08,                    //   REPORT_SIZE (8)   同下REPORT_SIZE
    0x81, 0x02,                    //   INPUT (Data,Var,Abs) 表示USB要输入数据到PC的功能


    0x09, 0x01,                    //   USAGE (Vendor Usage 1) 每个功能的一个卷标志
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)    表示每个传输数据限定为0
    0x26, 0xff, 0x00,              //   LOGICAL_MAXIMUM (255)    表示每个传输数据的最大值限定为255
    0x95, 0x40,                    //   REPORT_COUNT (64) 每次接收的数据长度,这里是64位
    0x75, 0x08,                    //   REPORT_SIZE (8)        传输字段的宽度为8bit,表示每个传输的数据范围为0~ffff ffff
    0x91, 0x02,                    //   OUTPUT (Data,Var,Abs) 表示USB设备要接收PC的数据的功能
    0xc0,                           // END_COLLECTION  结束标志

        0x05, 0x01,//USAGE_PAGE (Generic Desktop)
        0x09, 0x06,//USAGE (Keyboard)
        0xa1, 0x01,//COLLECTION (Application)

        0X85, 0X02,//报告ID2

        0x05, 0x07,//USAGE_PAGE (Keyboard)
        0x19, 0xe0,//USAGE_MINIMUM (Keyboard LeftControl)
        0x29, 0xe7,//USAGE_MAXIMUM (Keyboard Right GUI)
        0x15, 0x00,//LOGICAL_MINIMUM (0)
        0x25, 0x01,//LOGICAL_MAXIMUM (1)
        0x75, 0x01,//REPORT_SIZE (1)
        0x95, 0x08,//REPORT_COUNT (8)
        0x81, 0x02,//INPUT (Data,Var,Abs)
        0x95, 0x01,//REPORT_COUNT (1)
        0x75, 0x08,//REPORT_SIZE (8)
        0x81, 0x03,//INPUT (Cnst,Var,Abs)
        0x95, 0x05,//REPORT_COUNT (5)
        0x75, 0x01,//REPORT_SIZE (1)
        0x05, 0x08,//USAGE_PAGE (LEDs)
        0x19, 0x01,//USAGE_MINIMUM (Num Lock)
        0x29, 0x05,//USAGE_MAXIMUM (Kana)
        0x91, 0x02,//OUTPUT (Data,Var,Abs)
        0x95, 0x01,//REPORT_COUNT (1)
        0x75, 0x03,//REPORT_SIZE (3)
        0x91, 0x03,//OUTPUT (Cnst,Var,Abs)
        0x95, 0x06,//REPORT_COUNT (6)
        0x75, 0x08,//REPORT_SIZE (8)
        0x15, 0x00,//LOGICAL_MINIMUM (0)
        0x25, 0xFF,//LOGICAL_MAXIMUM (255)
        0x05, 0x07,//USAGE_PAGE (Keyboard)
        0x19, 0x00,//USAGE_MINIMUM (Reserved (no event indicated))
        0x29, 0x65,//USAGE_MAXIMUM (Keyboard Application)
        0x81, 0x00,//INPUT (Data,Ary,Abs)
        0xc0
};

第三步:修改报告描述符大小

#define USBD_CUSTOM_HID_REPORT_DESC_SIZE     101

第四步:此时已经可以枚举成功,但是需要注意发送的内容前面要加报告的ID号。

例如:

1、发送键盘按下操作。本来应该发送八个字节,但是因为有了报告ID,此处要发送九个字节。

            uint8_t buffer[9] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

            buffer[0] = 2;//报告ID
            buffer[1] = 0;
            buffer[2] = 0;
            buffer[3] = 0X16;//‘S’键值
            USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, buffer, sizeof(buffer));
            HAL_Delay(50);

2、发送HID数据。本来应该发送64个字节,但是因为有了报告ID,此处要发送65个字节。

uint8_t send_buf[65] = {//定义一个USB的发送BUFF
                         1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,
                         17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,
                         40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64}; 

send_buf[0] = 1;//报告ID
USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, send_buf, sizeof(send_buf));
//实际发送到上位机的数据有65个,一个报文ID:1 + 64个send_buf 数据,一共65个数据到上位机

第五步:修改接收数据。接收到数据后,第一个字节为报告ID,后面的才是真实数据。

 

本文发布于:2024-02-01 04:04:47,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170673149133725.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:USB   CUSTOM
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23