mirror of
https://github.com/XIVN1987/DAPLink.git
synced 2026-09-26 22:16:11 +00:00
add CH32V305 WINUSB support
This commit is contained in:
@@ -258,6 +258,11 @@ void USBHS_IRQHandler( void )
|
||||
len = USB_StringSerialNbr[0];
|
||||
break;
|
||||
|
||||
case 4:
|
||||
pUSBHS_Descr = USB_StringInterface;
|
||||
len = USB_StringInterface[0];
|
||||
break;
|
||||
|
||||
default:
|
||||
error = 0xFF;
|
||||
break;
|
||||
@@ -269,9 +274,12 @@ void USBHS_IRQHandler( void )
|
||||
len = USB_QualifierDesc[0];
|
||||
break;
|
||||
|
||||
#ifndef DAP_FW_V1
|
||||
case USB_DESCR_TYP_BOS:
|
||||
error = 0xFF;
|
||||
pUSBHS_Descr = BOS_Descriptor;
|
||||
len = BOS_Descriptor[0] + BOS_Descriptor[5];
|
||||
break;
|
||||
#endif
|
||||
|
||||
default :
|
||||
error = 0xFF;
|
||||
@@ -481,7 +489,13 @@ void USBHS_IRQHandler( void )
|
||||
}
|
||||
else if(USBHS_Setup.bRequestType & USB_REQ_TYP_VENDOR)
|
||||
{
|
||||
error = 0xFF;
|
||||
if((USBHS_Setup.bRequest == WINUSB_VENDOR_CODE) && (USBHS_Setup.wIndex == 7))
|
||||
{
|
||||
pUSBHS_Descr = MS_OS_20_DescriptorSet;
|
||||
len = MS_OS_20_DescriptorSet[8];
|
||||
}
|
||||
else
|
||||
error = 0xFF;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -564,6 +578,18 @@ void USBHS_IRQHandler( void )
|
||||
break;
|
||||
}
|
||||
}
|
||||
#ifndef DAP_FW_V1
|
||||
else if((USBHS_Setup.bRequestType & USB_REQ_TYP_MASK) == USB_REQ_TYP_VENDOR)
|
||||
{
|
||||
len = USBHS_Setup.wLength >= USB_MAX_EP0_SZ ? USB_MAX_EP0_SZ : USBHS_Setup.wLength;
|
||||
memcpy(USBHS_EP0_Buf, pUSBHS_Descr, len);
|
||||
USBHS_Setup.wLength -= len;
|
||||
pUSBHS_Descr += len;
|
||||
|
||||
USBHSD->UEP0_TX_LEN = len;
|
||||
USBHSD->UEP0_TX_CTRL ^= USBHS_UEP_T_TOG_DATA1;
|
||||
}
|
||||
#endif
|
||||
else
|
||||
{
|
||||
/* Non-standard request endpoint 0 Data upload */
|
||||
|
||||
@@ -97,7 +97,7 @@ const uint8_t USB_CfgDesc_FS[] =
|
||||
#endif
|
||||
0x00, // bInterfaceSubClass
|
||||
0x00, // bInterfaceProtocol
|
||||
0x00, // iInterface
|
||||
0x04, // iInterface
|
||||
|
||||
#ifdef DAP_FW_V1
|
||||
// HID Descriptor
|
||||
@@ -246,7 +246,7 @@ const uint8_t USB_CfgDesc_HS[] =
|
||||
#endif
|
||||
0x00, // bInterfaceSubClass
|
||||
0x00, // bInterfaceProtocol
|
||||
0x00, // iInterface
|
||||
0x04, // iInterface
|
||||
|
||||
#ifdef DAP_FW_V1
|
||||
// HID Descriptor
|
||||
@@ -410,6 +410,15 @@ uint8_t USB_StringSerialNbr[] =
|
||||
};
|
||||
|
||||
|
||||
/* Interface Descriptor */
|
||||
const uint8_t USB_StringInterface[] =
|
||||
{
|
||||
USB_SIZE_STRING_PRODUCT,
|
||||
USB_DESCR_TYP_STRING,
|
||||
'X', 0, 'V', 0, '-', 0, 'L', 0, 'i', 0, 'n', 0, 'k', 0, ' ', 0, 'C', 0, 'M', 0, 'S', 0, 'I', 0, 'S', 0, '-', 0, 'D', 0, 'A', 0, 'P', 0
|
||||
};
|
||||
|
||||
|
||||
/* Device Qualified Descriptor */
|
||||
const uint8_t USB_QualifierDesc[] =
|
||||
{
|
||||
@@ -423,3 +432,75 @@ const uint8_t USB_QualifierDesc[] =
|
||||
0x01, // bNumConfigurations
|
||||
0x00, // bReserved
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
const uint8_t BOS_Descriptor[] =
|
||||
{
|
||||
5,
|
||||
USB_DESCR_TYP_BOS,
|
||||
5+20+8, 0, // wTotalLength
|
||||
1, // bNumDeviceCaps
|
||||
|
||||
/*** MS OS 2.0 descriptor platform capability descriptor ***/
|
||||
28,
|
||||
DESC_CAPABILITY,
|
||||
5, // bDevCapabilityType: PLATFORM (05H)
|
||||
0x00,
|
||||
0xDF, 0x60, 0xDD, 0xD8, // PlatformCapabilityUUID: MS_OS_20_Platform_Capability_ID (D8DD60DF-4589-4CC7-9CD2-659D9E648A9F)
|
||||
0x89, 0x45, 0xC7, 0x4C,
|
||||
0x9C, 0xD2, 0x65, 0x9D,
|
||||
0x9E, 0x64, 0x8A, 0x9F,
|
||||
|
||||
0x00, 0x00, 0x03, 0x06, // dwWindowsVersion: 0x06030000 for Windows 8.1
|
||||
10+8+20+128, 0x00, // wTotalLength: size of MS OS 2.0 descriptor set
|
||||
WINUSB_VENDOR_CODE, // bMS_VendorCode
|
||||
0x00, // bAltEnumCmd
|
||||
};
|
||||
|
||||
|
||||
#define MS_OS_20_SET_HEADER_DESCRIPTOR 0x00
|
||||
#define MS_OS_20_SUBSET_HEADER_CONFIGURATION 0x01
|
||||
#define MS_OS_20_SUBSET_HEADER_FUNCTION 0x02
|
||||
#define MS_OS_20_FEATURE_COMPATIBLE_ID 0x03
|
||||
#define MS_OS_20_FEATURE_REG_PROPERTY 0x04
|
||||
#define MS_OS_20_FEATURE_MIN_RESUME_TIME 0x05
|
||||
#define MS_OS_20_FEATURE_MODEL_ID 0x06
|
||||
#define MS_OS_20_FEATURE_CCGP_DEVICE 0x07
|
||||
#define MS_OS_20_FEATURE_VENDOR_REVISION 0x08
|
||||
|
||||
const uint8_t MS_OS_20_DescriptorSet[] =
|
||||
{
|
||||
/*** Microsoft OS 2.0 Descriptor Set Header ***/
|
||||
10, 0,
|
||||
MS_OS_20_SET_HEADER_DESCRIPTOR, 0,
|
||||
0x00, 0x00, 0x03, 0x06, // dwWindowsVersion: 0x06030000 for Windows 8.1
|
||||
10+8+20+128, 0, // wTotalLength
|
||||
|
||||
/*** Microsoft OS 2.0 function subset header ***/
|
||||
8, 0,
|
||||
MS_OS_20_SUBSET_HEADER_FUNCTION, 0,
|
||||
0, // bFirstInterface, first interface to which this subset applies
|
||||
0,
|
||||
8+20+128, 0, // wSubsetLength
|
||||
|
||||
/*** Microsoft OS 2.0 compatible ID descriptor ***/
|
||||
20, 0,
|
||||
MS_OS_20_FEATURE_COMPATIBLE_ID, 0,
|
||||
'W', 'I', 'N', 'U', 'S', 'B', 0x00, 0x00, // CompatibleID
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // SubCompatibleID
|
||||
|
||||
/*** MS OS 2.0 registry property descriptor ***/
|
||||
128, 0,
|
||||
MS_OS_20_FEATURE_REG_PROPERTY, 0,
|
||||
1, 0, // wPropertyDataType: 1 = Unicode REG_SZ
|
||||
40, 0x00, // wPropertyNameLength
|
||||
'D', 0, 'e', 0, 'v', 0, 'i', 0, 'c', 0, 'e', 0, 'I', 0, 'n', 0, 't', 0, 'e', 0,
|
||||
'r', 0, 'f', 0, 'a', 0, 'c', 0, 'e', 0, 'G', 0, 'U', 0, 'I', 0, 'D', 0, 0, 0, // PropertyName: "DeviceInterfaceGUID"
|
||||
78, 0x00, // wPropertyDataLength
|
||||
'{', 0, 'C', 0, 'D', 0, 'B', 0, '3', 0, 'B', 0, '5', 0, 'A', 0, 'D', 0, '-', 0,
|
||||
'2', 0, '9', 0, '3', 0, 'B', 0, '-', 0, '4', 0, '6', 0, '6', 0, '3', 0, '-', 0,
|
||||
'A', 0, 'A', 0, '3', 0, '6', 0, '-', 0, '1', 0, 'A', 0, 'A', 0, 'E', 0, '4', 0,
|
||||
'6', 0, '4', 0, '6', 0, '3', 0, '7', 0, '7', 0, '6', 0, '}', 0, 0, 0, // PropertyData: "{CDB3B5AD-293B-4663-AA36-1AAE46463776}"
|
||||
};
|
||||
|
||||
@@ -63,9 +63,17 @@ extern const uint8_t USB_StringLangID[];
|
||||
extern const uint8_t USB_StringVendor[];
|
||||
extern const uint8_t USB_StringProduct[];
|
||||
extern uint8_t USB_StringSerialNbr[];
|
||||
extern const uint8_t USB_StringInterface[];
|
||||
extern const uint8_t USB_QualifierDesc[];
|
||||
extern const uint8_t HID_ReportDesc_FS[];
|
||||
extern const uint8_t HID_ReportDesc_HS[];
|
||||
extern const uint8_t BOS_Descriptor[];
|
||||
extern const uint8_t MS_OS_20_DescriptorSet[];
|
||||
|
||||
|
||||
#define DESC_CAPABILITY 0x10
|
||||
|
||||
#define WINUSB_VENDOR_CODE 0x34
|
||||
|
||||
|
||||
#endif // __USB_DESC_H__
|
||||
|
||||
@@ -7,6 +7,12 @@
|
||||
#include "hid_transfer.h"
|
||||
|
||||
|
||||
/* 在 Properties for DAPLink -> C/C++ Build -> Settings -> C Compiler -> Preprocessor 中:
|
||||
定义 DAP_FW_V1: 生成 CMSIS-DAP v1 固件,使用 HID 传输协议
|
||||
不定义 DAP_FW_V1: 生成 CMSIS-DAP v2 固件,使用 WINUSB 传输协议
|
||||
*/
|
||||
|
||||
|
||||
volatile uint32_t SysTick_ms = 0;
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user