updating webusb with cdc
This commit is contained in:
parent
fdf39dd4ae
commit
2b7acd554a
|
@ -124,10 +124,7 @@ enum
|
||||||
ITF_NUM_TOTAL
|
ITF_NUM_TOTAL
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_CDC*TUD_CDC_DESC_LEN + CFG_TUD_MSC*TUD_MSC_DESC_LEN + CFG_TUD_HID*TUD_HID_DESC_LEN)
|
||||||
{
|
|
||||||
CONFIG_TOTAL_LEN = TUD_CONFIG_DESC_LEN + CFG_TUD_CDC*TUD_CDC_DESC_LEN + CFG_TUD_MSC*TUD_MSC_DESC_LEN + CFG_TUD_HID*TUD_HID_DESC_LEN
|
|
||||||
};
|
|
||||||
|
|
||||||
#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX
|
#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX
|
||||||
// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number
|
// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number
|
||||||
|
|
|
@ -124,10 +124,7 @@ enum
|
||||||
ITF_NUM_TOTAL
|
ITF_NUM_TOTAL
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + CFG_TUD_CDC*TUD_CDC_DESC_LEN + CFG_TUD_MSC*TUD_MSC_DESC_LEN + CFG_TUD_HID*TUD_HID_DESC_LEN)
|
||||||
{
|
|
||||||
CONFIG_TOTAL_LEN = TUD_CONFIG_DESC_LEN + CFG_TUD_CDC*TUD_CDC_DESC_LEN + CFG_TUD_MSC*TUD_MSC_DESC_LEN + CFG_TUD_HID*TUD_HID_DESC_LEN
|
|
||||||
};
|
|
||||||
|
|
||||||
#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX
|
#if CFG_TUSB_MCU == OPT_MCU_LPC175X_6X || CFG_TUSB_MCU == OPT_MCU_LPC177X_8X || CFG_TUSB_MCU == OPT_MCU_LPC40XX
|
||||||
// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number
|
// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number
|
||||||
|
|
|
@ -92,10 +92,8 @@ enum
|
||||||
ITF_NUM_TOTAL
|
ITF_NUM_TOTAL
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_HID_INOUT_DESC_LEN)
|
||||||
CONFIG_TOTAL_LEN = TUD_CONFIG_DESC_LEN + TUD_HID_INOUT_DESC_LEN
|
|
||||||
};
|
|
||||||
|
|
||||||
// Use Endpoint 2 instead of 1 due to NXP MCU
|
// Use Endpoint 2 instead of 1 due to NXP MCU
|
||||||
// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number
|
// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number
|
||||||
|
|
|
@ -77,10 +77,7 @@ enum
|
||||||
ITF_NUM_TOTAL
|
ITF_NUM_TOTAL
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_MIDI_DESC_LEN)
|
||||||
{
|
|
||||||
CONFIG_TOTAL_LEN = TUD_CONFIG_DESC_LEN + TUD_MIDI_DESC_LEN
|
|
||||||
};
|
|
||||||
|
|
||||||
// Use Endpoint 2 instead of 1 due to NXP MCU
|
// Use Endpoint 2 instead of 1 due to NXP MCU
|
||||||
// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number
|
// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number
|
||||||
|
|
|
@ -75,10 +75,7 @@ enum
|
||||||
ITF_NUM_TOTAL
|
ITF_NUM_TOTAL
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_MSC_DESC_LEN)
|
||||||
{
|
|
||||||
CONFIG_TOTAL_LEN = TUD_CONFIG_DESC_LEN + TUD_MSC_DESC_LEN
|
|
||||||
};
|
|
||||||
|
|
||||||
// Use Endpoint 2 instead of 1 due to NXP MCU
|
// Use Endpoint 2 instead of 1 due to NXP MCU
|
||||||
// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number
|
// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number
|
||||||
|
|
|
@ -54,7 +54,7 @@ enum {
|
||||||
static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED;
|
static uint32_t blink_interval_ms = BLINK_NOT_MOUNTED;
|
||||||
|
|
||||||
void led_blinking_task(void);
|
void led_blinking_task(void);
|
||||||
void midi_task(void);
|
void cdc_task(void);
|
||||||
|
|
||||||
/*------------- MAIN -------------*/
|
/*------------- MAIN -------------*/
|
||||||
int main(void)
|
int main(void)
|
||||||
|
@ -66,6 +66,7 @@ int main(void)
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
tud_task(); // tinyusb device task
|
tud_task(); // tinyusb device task
|
||||||
|
cdc_task();
|
||||||
led_blinking_task();
|
led_blinking_task();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,6 +109,51 @@ void tud_resume_cb(void)
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
// USB CDC
|
||||||
|
//--------------------------------------------------------------------+
|
||||||
|
void cdc_task(void)
|
||||||
|
{
|
||||||
|
if ( tud_cdc_connected() )
|
||||||
|
{
|
||||||
|
// connected and there are data available
|
||||||
|
if ( tud_cdc_available() )
|
||||||
|
{
|
||||||
|
uint8_t buf[64];
|
||||||
|
|
||||||
|
// read and echo back
|
||||||
|
uint32_t count = tud_cdc_read(buf, sizeof(buf));
|
||||||
|
|
||||||
|
for(uint32_t i=0; i<count; i++)
|
||||||
|
{
|
||||||
|
tud_cdc_write_char(buf[i]);
|
||||||
|
|
||||||
|
if ( buf[i] == '\r' ) tud_cdc_write_char('\n');
|
||||||
|
}
|
||||||
|
|
||||||
|
tud_cdc_write_flush();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Invoked when cdc when line state changed e.g connected/disconnected
|
||||||
|
void tud_cdc_line_state_cb(uint8_t itf, bool dtr, bool rts)
|
||||||
|
{
|
||||||
|
(void) itf;
|
||||||
|
|
||||||
|
// connected
|
||||||
|
if ( dtr && rts )
|
||||||
|
{
|
||||||
|
// print initial message when connected
|
||||||
|
tud_cdc_write_str("\r\nTinyUSB CDC MSC HID device example\r\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Invoked when CDC interface received data from host
|
||||||
|
void tud_cdc_rx_cb(uint8_t itf)
|
||||||
|
{
|
||||||
|
(void) itf;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// BLINKING TASK
|
// BLINKING TASK
|
||||||
|
|
|
@ -72,12 +72,16 @@
|
||||||
#define CFG_TUD_ENDOINT0_SIZE 64
|
#define CFG_TUD_ENDOINT0_SIZE 64
|
||||||
|
|
||||||
//------------- CLASS -------------//
|
//------------- CLASS -------------//
|
||||||
#define CFG_TUD_CDC 0
|
#define CFG_TUD_CDC 1
|
||||||
#define CFG_TUD_MSC 0
|
#define CFG_TUD_MSC 0
|
||||||
#define CFG_TUD_HID 0
|
#define CFG_TUD_HID 0
|
||||||
#define CFG_TUD_MIDI 0
|
#define CFG_TUD_MIDI 0
|
||||||
#define CFG_TUD_CUSTOM_CLASS 0
|
#define CFG_TUD_CUSTOM_CLASS 0
|
||||||
|
|
||||||
|
// CDC FIFO size of TX and RX
|
||||||
|
#define CFG_TUD_CDC_RX_BUFSIZE 64
|
||||||
|
#define CFG_TUD_CDC_TX_BUFSIZE 64
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -41,7 +41,7 @@ tusb_desc_device_t const desc_device =
|
||||||
{
|
{
|
||||||
.bLength = sizeof(tusb_desc_device_t),
|
.bLength = sizeof(tusb_desc_device_t),
|
||||||
.bDescriptorType = TUSB_DESC_DEVICE,
|
.bDescriptorType = TUSB_DESC_DEVICE,
|
||||||
.bcdUSB = 0x0210, // at least 2.1 or 3.x
|
.bcdUSB = 0x0210, // at least 2.1 or 3.x for BOS & webUSB
|
||||||
|
|
||||||
// Use Interface Association Descriptor (IAD) for CDC
|
// Use Interface Association Descriptor (IAD) for CDC
|
||||||
// As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1)
|
// As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1)
|
||||||
|
@ -72,12 +72,21 @@ uint8_t const * tud_descriptor_device_cb(void)
|
||||||
// BOS Descriptor
|
// BOS Descriptor
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
|
||||||
|
#define BOS_TOTAL_LEN (TUD_BOS_DESC_LEN + TUD_BOS_WEBUSB_DESC_LEN)
|
||||||
|
|
||||||
// BOS Descriptor is required for webUSB
|
// BOS Descriptor is required for webUSB
|
||||||
uint8_t const desc_bos[] =
|
uint8_t const desc_bos[] =
|
||||||
{
|
{
|
||||||
|
TUD_BOS_DESCRIPTOR(BOS_TOTAL_LEN, 1),
|
||||||
|
|
||||||
|
TUD_BOS_WEBUSB_DESCRIPTOR(0x01, 0)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
uint8_t const * tud_descriptor_bos_cb(void)
|
||||||
|
{
|
||||||
|
return desc_bos;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// Configuration Descriptor
|
// Configuration Descriptor
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
@ -85,13 +94,11 @@ enum
|
||||||
{
|
{
|
||||||
ITF_NUM_CDC = 0,
|
ITF_NUM_CDC = 0,
|
||||||
ITF_NUM_CDC_DATA,
|
ITF_NUM_CDC_DATA,
|
||||||
|
|
||||||
ITF_NUM_TOTAL
|
ITF_NUM_TOTAL
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN)
|
||||||
{
|
|
||||||
CONFIG_TOTAL_LEN = TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN
|
|
||||||
};
|
|
||||||
|
|
||||||
// Use Endpoint 2 instead of 1 due to NXP MCU
|
// Use Endpoint 2 instead of 1 due to NXP MCU
|
||||||
// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number
|
// LPC 17xx and 40xx endpoint type (bulk/interrupt/iso) are fixed by its number
|
||||||
|
|
|
@ -223,10 +223,31 @@ TU_ATTR_WEAK void tud_resume_cb(void);
|
||||||
|
|
||||||
//------------- WebUSB -------------//
|
//------------- WebUSB -------------//
|
||||||
|
|
||||||
#define TUD_WEBUSB_DESC_LEN
|
// Descriptor Length
|
||||||
|
#define TUD_BOS_WEBUSB_DESC_LEN 24
|
||||||
|
|
||||||
|
// Vendor Code, iLandingPage
|
||||||
|
#define TUD_BOS_WEBUSB_DESCRIPTOR(_vendor_code, _ipage) \
|
||||||
|
TUD_BOS_PLATFORM_DESCRIPTOR(TUD_BOS_WEBUSB_UUID, U16_TO_U8S_LE(0x0100), _vendor_code, _ipage)
|
||||||
|
|
||||||
|
#define TUD_BOS_WEBUSB_UUID \
|
||||||
|
0x38, 0xB6, 0x08, 0x34, 0xA9, 0x09, 0xA0, 0x47, \
|
||||||
|
0x8B, 0xFD, 0xA0, 0x76, 0x88, 0x15, 0xB6, 0x65
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
//------------- Custom -------------//
|
||||||
|
|
||||||
|
#define TUD_WEBUSB_DESC_LEN (9+7+7)
|
||||||
|
|
||||||
// Interface number, string index, EP Out & IN address, size & polling interval
|
// Interface number, string index, EP Out & IN address, size & polling interval
|
||||||
#define TUD_WEBUSB_DESCRIPTOR()
|
#define TUD_WEBUSB_DESCRIPTOR(_itfnum, _stridx) \
|
||||||
|
/* Interface */\
|
||||||
|
9, TUSB_DESC_INTERFACE, _itfnum, 0, 2, TUSB_CLASS_VENDOR_SPECIFIC, 0x00, 0x00, _stridx,\
|
||||||
|
/* Endpoint Out */\
|
||||||
|
7, TUSB_DESC_ENDPOINT, _epout, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0,\
|
||||||
|
/* Endpoint In */\
|
||||||
|
7, TUSB_DESC_ENDPOINT, _epin, TUSB_XFER_BULK, U16_TO_U8S_LE(_epsize), 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
Loading…
Reference in New Issue