/********************************** (C) COPYRIGHT ******************************* * File Name : composite_km_desc.h * Author : WCH * Version : V1.0.0 * Date : 2022/08/18 * Description : All descriptors for the keyboard and mouse composite device. ********************************************************************************* * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. * Attention: This software (modified or not) and binary are used for * microcontroller manufactured by Nanjing Qinheng Microelectronics. *******************************************************************************/ /*******************************************************************************/ /* Header File */ #include "usbd_desc.h" /*******************************************************************************/ /* Device Descriptor */ const uint8_t MyDevDescr[ ] = { 0x12, // bLength 0x01, // bDescriptorType 0x00, 0x02, // bcdUSB 0x00, // bDeviceClass 0x00, // bDeviceSubClass 0x00, // bDeviceProtocol DEF_USBD_UEP0_SIZE, // bMaxPacketSize0 (uint8_t)DEF_USB_VID, (uint8_t)( DEF_USB_VID >> 8 ), // idVendor (uint8_t)DEF_USB_PID, (uint8_t)( DEF_USB_PID >> 8 ), // idProduct 0x00, DEF_IC_PRG_VER, // bcdDevice 0x01, // iManufacturer 0x02, // iProduct 0x03, // iSerialNumber 0x01, // bNumConfigurations }; /* Configuration Descriptor Set */ const uint8_t MyCfgDescr[ ] = { /* Configuration Descriptor */ 0x09, // bLength 0x02, // bDescriptorType 0x3B, 0x00, // wTotalLength 0x02, // bNumInterfaces 0x01, // bConfigurationValue 0x00, // iConfiguration 0xA0, // bmAttributes: Bus Powered; Remote Wakeup 0x32, // MaxPower: 100mA /* Interface Descriptor (Keyboard) */ 0x09, // bLength 0x04, // bDescriptorType 0x00, // bInterfaceNumber 0x00, // bAlternateSetting 0x01, // bNumEndpoints 0x03, // bInterfaceClass 0x01, // bInterfaceSubClass 0x01, // bInterfaceProtocol: Keyboard 0x00, // iInterface /* HID Descriptor (Keyboard) */ 0x09, // bLength 0x21, // bDescriptorType 0x11, 0x01, // bcdHID 0x00, // bCountryCode 0x01, // bNumDescriptors 0x22, // bDescriptorType 0x3E, 0x00, // wDescriptorLength /* Endpoint Descriptor (Keyboard) */ 0x07, // bLength 0x05, // bDescriptorType 0x81, // bEndpointAddress: IN Endpoint 1 0x03, // bmAttributes 0x08, 0x00, // wMaxPacketSize 0x0A, // bInterval: 10mS /* Interface Descriptor (Mouse) */ 0x09, // bLength 0x04, // bDescriptorType 0x01, // bInterfaceNumber 0x00, // bAlternateSetting 0x01, // bNumEndpoints 0x03, // bInterfaceClass 0x01, // bInterfaceSubClass 0x02, // bInterfaceProtocol: Mouse 0x00, // iInterface /* HID Descriptor (Mouse) */ 0x09, // bLength 0x21, // bDescriptorType 0x10, 0x01, // bcdHID 0x00, // bCountryCode 0x01, // bNumDescriptors 0x22, // bDescriptorType 0x34, 0x00, // wDescriptorLength /* Endpoint Descriptor (Mouse) */ 0x07, // bLength 0x05, // bDescriptorType 0x82, // bEndpointAddress: IN Endpoint 2 0x03, // bmAttributes 0x08, 0x00, // wMaxPacketSize 0x01 // bInterval: 1mS }; /* Keyboard Report Descriptor */ const uint8_t KeyRepDesc[ ] = { 0x05, 0x01, // Usage Page (Generic Desktop) 0x09, 0x06, // Usage (Keyboard) 0xA1, 0x01, // Collection (Application) 0x05, 0x07, // Usage Page (Key Codes) 0x19, 0xE0, // Usage Minimum (224) 0x29, 0xE7, // Usage Maximum (231) 0x15, 0x00, // Logical Minimum (0) 0x25, 0x01, // Logical Maximum (1) 0x75, 0x01, // Report Size (1) 0x95, 0x08, // Report Count (8) 0x81, 0x02, // Input (Data,Variable,Absolute) 0x95, 0x01, // Report Count (1) 0x75, 0x08, // Report Size (8) 0x81, 0x01, // Input (Constant) 0x95, 0x03, // Report Count (3) 0x75, 0x01, // Report Size (1) 0x05, 0x08, // Usage Page (LEDs) 0x19, 0x01, // Usage Minimum (1) 0x29, 0x03, // Usage Maximum (3) 0x91, 0x02, // Output (Data,Variable,Absolute) 0x95, 0x05, // Report Count (5) 0x75, 0x01, // Report Size (1) 0x91, 0x01, // Output (Constant,Array,Absolute) 0x95, 0x06, // Report Count (6) 0x75, 0x08, // Report Size (8) 0x26, 0xFF, 0x00, // Logical Maximum (255) 0x05, 0x07, // Usage Page (Key Codes) 0x19, 0x00, // Usage Minimum (0) 0x29, 0x91, // Usage Maximum (145) 0x81, 0x00, // Input(Data,Array,Absolute) 0xC0 // End Collection }; /* Mouse Report Descriptor */ const uint8_t MouseRepDesc[ ] = { 0x05, 0x01, // Usage Page (Generic Desktop) 0x09, 0x02, // Usage (Mouse) 0xA1, 0x01, // Collection (Application) 0x09, 0x01, // Usage (Pointer) 0xA1, 0x00, // Collection (Physical) 0x05, 0x09, // Usage Page (Button) 0x19, 0x01, // Usage Minimum (Button 1) 0x29, 0x03, // Usage Maximum (Button 3) 0x15, 0x00, // Logical Minimum (0) 0x25, 0x01, // Logical Maximum (1) 0x75, 0x01, // Report Size (1) 0x95, 0x03, // Report Count (3) 0x81, 0x02, // Input (Data,Variable,Absolute) 0x75, 0x05, // Report Size (5) 0x95, 0x01, // Report Count (1) 0x81, 0x01, // Input (Constant,Array,Absolute) 0x05, 0x01, // Usage Page (Generic Desktop) 0x09, 0x30, // Usage (X) 0x09, 0x31, // Usage (Y) 0x09, 0x38, // Usage (Wheel) 0x15, 0x81, // Logical Minimum (-127) 0x25, 0x7F, // Logical Maximum (127) 0x75, 0x08, // Report Size (8) 0x95, 0x03, // Report Count (3) 0x81, 0x06, // Input (Data,Variable,Relative) 0xC0, // End Collection 0xC0 // End Collection }; /* Qualifier Descriptor */ const uint8_t MyQuaDesc[ ] = { 0x0A, // bLength 0x06, // bDescriptorType 0x00, 0x02, // bcdUSB 0x00, // bDeviceClass 0x00, // bDeviceSubClass 0x00, // bDeviceProtocol 0x40, // bMaxPacketSize0 0x00, // bNumConfigurations 0x00 // bReserved }; /* Language Descriptor */ const uint8_t MyLangDescr[ ] = { 0x04, 0x03, 0x09, 0x04 }; /* Manufacturer Descriptor */ const uint8_t MyManuInfo[ ] = { 0x0E, 0x03, 'w', 0, 'c', 0, 'h', 0, '.', 0, 'c', 0, 'n', 0 }; /* Product Information */ const uint8_t MyProdInfo[ ] = { 0x12, 0x03, 'C', 0, 'H', 0, '3', 0, '2', 0, 'V', 0, '2', 0, '0', 0, 'x', 0 }; /* Serial Number Information */ const uint8_t MySerNumInfo[ ] = { 0x16, 0x03, '0', 0, '1', 0, '2', 0, '3', 0, '4', 0, '5', 0, '6', 0, '7', 0, '8', 0, '9', 0 };