add Custom Interface

change interface descriptor
This commit is contained in:
hathach 2018-06-16 14:08:28 +07:00
parent 1a3d963f3f
commit 8b9c0f6fd2
6 changed files with 83 additions and 29 deletions

@ -1 +1 @@
Subproject commit 2b85a8fd460dd75cc12b11c9de137bf33f910cc7
Subproject commit 5692b84ddf3326a3cde48b09f7123cd5ec0e93cc

View File

@ -125,6 +125,7 @@ C_SOURCE_FILES += $(TUSB_PATH)/common/tusb_fifo.c
C_SOURCE_FILES += $(TUSB_PATH)/device/usbd.c
C_SOURCE_FILES += $(TUSB_PATH)/class/cdc/cdc_device.c
C_SOURCE_FILES += $(TUSB_PATH)/class/msc/msc_device.c
C_SOURCE_FILES += $(TUSB_PATH)/class/custom/custom_device.c
C_SOURCE_FILES += $(TUSB_PATH)/tusb.c
#******************************************************************************
@ -271,10 +272,10 @@ all:
@echo Making Feather52840 board
@echo ----------------------
@$(MAKE) -s -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e feather52840
@$(MAKE) -s -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e clean
@echo Making Metro52 board
@echo --------------------
@$(MAKE) -s -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e metro52
#@$(MAKE) -s -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e clean
#@echo Making Metro52 board
#@echo --------------------
#@$(MAKE) -s -f $(MAKEFILE_NAME) -C $(MAKEFILE_DIR) -e metro52
#target for printing all targets
help:

View File

@ -185,6 +185,10 @@
<file file_name="../../lib/tinyusb/tinyusb/class/msc/msc_device.c" />
<file file_name="../../lib/tinyusb/tinyusb/class/msc/msc_device.h" />
</folder>
<folder Name="custom">
<file file_name="../../lib/tinyusb/tinyusb/class/custom/custom_device.c" />
<file file_name="../../lib/tinyusb/tinyusb/class/custom/custom_device.h" />
</folder>
</folder>
<folder Name="common">
<file file_name="../../lib/tinyusb/tinyusb/common/binary.h" />

View File

@ -67,6 +67,8 @@
#define CFG_TUD_MSC 1
#define CFG_TUD_CDC 1
#define CFG_TUD_CUSTOM_CLASS 1
/*------------------------------------------------------------------*/
/* CLASS DRIVER

View File

@ -82,7 +82,7 @@ app_descriptor_configuration_t const desc_configuration =
.bConfigurationValue = 1,
.iConfiguration = 0x00,
.bmAttributes = TUSB_DESC_CONFIG_ATT_BUS_POWER,
.bMaxPower = TUSB_DESC_CONFIG_POWER_MA(500)
.bMaxPower = TUSB_DESC_CONFIG_POWER_MA(100)
},
#if CFG_TUD_CDC
@ -114,7 +114,7 @@ app_descriptor_configuration_t const desc_configuration =
.bInterfaceClass = TUSB_CLASS_CDC,
.bInterfaceSubClass = CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL,
.bInterfaceProtocol = CDC_COMM_PROTOCOL_ATCOMMAND,
.iInterface = 0x00
.iInterface = 0x04
},
.header =
@ -202,7 +202,7 @@ app_descriptor_configuration_t const desc_configuration =
#if CFG_TUD_MSC
.msc =
{
.interface =
.itf =
{
.bLength = sizeof(tusb_desc_interface_t),
.bDescriptorType = TUSB_DESC_INTERFACE,
@ -212,7 +212,7 @@ app_descriptor_configuration_t const desc_configuration =
.bInterfaceClass = TUSB_CLASS_MSC,
.bInterfaceSubClass = MSC_SUBCLASS_SCSI,
.bInterfaceProtocol = MSC_PROTOCOL_BOT,
.iInterface = 0x07
.iInterface = 0x05
},
.ep_out =
@ -234,6 +234,44 @@ app_descriptor_configuration_t const desc_configuration =
.wMaxPacketSize = { .size = MSC_EDPT_SIZE},
.bInterval = 1
}
},
#endif
#if CFG_TUD_CUSTOM_CLASS
.cus =
{
.itf =
{
.bLength = sizeof(tusb_desc_interface_t),
.bDescriptorType = TUSB_DESC_INTERFACE,
.bInterfaceNumber = ITF_NUM_CUS,
.bAlternateSetting = 0x00,
.bNumEndpoints = 2,
.bInterfaceClass = TUSB_CLASS_VENDOR_SPECIFIC,
.bInterfaceSubClass = 0,
.bInterfaceProtocol = 0,
.iInterface = 0x06
},
.ep_out =
{
.bLength = sizeof(tusb_desc_endpoint_t),
.bDescriptorType = TUSB_DESC_ENDPOINT,
.bEndpointAddress = CUS_EDPT_OUT,
.bmAttributes = { .xfer = TUSB_XFER_BULK },
.wMaxPacketSize = { .size = CUS_EDPT_SIZE},
.bInterval = 1
},
.ep_in =
{
.bLength = sizeof(tusb_desc_endpoint_t),
.bDescriptorType = TUSB_DESC_ENDPOINT,
.bEndpointAddress = CUS_EDPT_IN,
.bmAttributes = { .xfer = TUSB_XFER_BULK },
.wMaxPacketSize = { .size = CUS_EDPT_SIZE},
.bInterval = 1
}
}
#endif
};
@ -253,38 +291,33 @@ uint16_t const * const string_descriptor_arr [] =
},
[1] = (uint16_t []) { // manufacturer
ENDIAN_BE16_FROM( STRING_LEN_UNICODE(11), TUSB_DESC_STRING),
't', 'i', 'n', 'y', 'u', 's', 'b', '.', 'o', 'r', 'g' // len = 11
ENDIAN_BE16_FROM( STRING_LEN_UNICODE(19), TUSB_DESC_STRING),
'A','d','a','f','r','u','i','t',' ','I','n','d','u','s','t','r','i','e','s'
},
[2] = (uint16_t []) { // product
ENDIAN_BE16_FROM( STRING_LEN_UNICODE(14), TUSB_DESC_STRING),
't', 'i', 'n', 'y', 'u', 's', 'b', ' ', 'd', 'e', 'v', 'i', 'c', 'e' // len = 14
ENDIAN_BE16_FROM( STRING_LEN_UNICODE(18), TUSB_DESC_STRING),
'B','l','u','e','f','r','u','i','t',' ','n','R','F','5','2','8','4','0'
},
[3] = (uint16_t []) { // serials
[3] = (uint16_t []) { // serials TODO use chip ID
ENDIAN_BE16_FROM( STRING_LEN_UNICODE(4), TUSB_DESC_STRING),
'1', '2', '3', '4' // len = 4
},
[4] = (uint16_t []) { // CDC Interface
ENDIAN_BE16_FROM( STRING_LEN_UNICODE(3), TUSB_DESC_STRING),
'c', 'd', 'c' // len = 3
ENDIAN_BE16_FROM( STRING_LEN_UNICODE(16), TUSB_DESC_STRING),
'B','l','u','e','f','r','u','i','t',' ','S','e','r','i','a','l'
},
[5] = (uint16_t []) { // Keyboard Interface
ENDIAN_BE16_FROM( STRING_LEN_UNICODE(5), TUSB_DESC_STRING),
'm', 'o', 'u', 's', 'e' // len = 5
[5] = (uint16_t []) { // MSC Interface
ENDIAN_BE16_FROM( STRING_LEN_UNICODE(17), TUSB_DESC_STRING),
'B','l','u','e','f','r','u','i','t',' ','S','t','o','r','a','g','e'
},
[6] = (uint16_t []) { // Keyboard Interface
ENDIAN_BE16_FROM( STRING_LEN_UNICODE(8), TUSB_DESC_STRING),
'k', 'e', 'y', 'b', 'o', 'a', 'r', 'd' // len = 8
},
[7] = (uint16_t []) { // MSC Interface
ENDIAN_BE16_FROM( STRING_LEN_UNICODE(3), TUSB_DESC_STRING),
'm', 's', 'c' // len = 3
[6] = (uint16_t []) { // Custom Interface
ENDIAN_BE16_FROM( STRING_LEN_UNICODE(16), TUSB_DESC_STRING),
'B','l','u','e','f','r','u','i','t',' ','C','u','s','t','o','m'
}
};

View File

@ -58,9 +58,10 @@
#define ITF_NUM_CDC 0
#define ITF_NUM_MSC 2
#define ITF_NUM_CUS 3
// total number of interfaces
#define ITF_TOTAL (CFG_TUD_CDC*2 + CFG_TUD_MSC)
#define ITF_TOTAL (CFG_TUD_CDC*2 + CFG_TUD_MSC + CFG_TUD_CUSTOM_CLASS)
//--------------------------------------------------------------------+
// Endpoints Address & Max Packet Size
@ -79,6 +80,10 @@
#define MSC_EDPT_IN EDPT_IN(3)
#define MSC_EDPT_SIZE 64
#define CUS_EDPT_OUT EDPT_OUT(4)
#define CUS_EDPT_IN EDPT_IN(4)
#define CUS_EDPT_SIZE 64
//--------------------------------------------------------------------+
// CONFIGURATION DESCRIPTOR
@ -110,12 +115,21 @@ typedef struct ATTR_PACKED
#if CFG_TUD_MSC
struct ATTR_PACKED
{
tusb_desc_interface_t interface;
tusb_desc_interface_t itf;
tusb_desc_endpoint_t ep_out;
tusb_desc_endpoint_t ep_in;
}msc;
#endif
#if CFG_TUD_CUSTOM_CLASS
struct ATTR_PACKED
{
tusb_desc_interface_t itf;
tusb_desc_endpoint_t ep_out;
tusb_desc_endpoint_t ep_in;
}cus;
#endif
} app_descriptor_configuration_t;