mirror of
https://github.com/MrUnknownDE/OpenIris-ESPIDF.git
synced 2026-04-18 22:13:45 +02:00
Initial CDC implementation
This commit is contained in:
@@ -28,17 +28,18 @@
|
||||
|
||||
#include "uvc_frame_config.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
//--------------------------------------------------------------------+
|
||||
// Board Specific Configuration
|
||||
//--------------------------------------------------------------------+
|
||||
//--------------------------------------------------------------------+
|
||||
// Board Specific Configuration
|
||||
//--------------------------------------------------------------------+
|
||||
|
||||
#ifdef CONFIG_TINYUSB_RHPORT_HS
|
||||
# define CFG_TUSB_RHPORT1_MODE OPT_MODE_DEVICE | OPT_MODE_HIGH_SPEED
|
||||
#define CFG_TUSB_RHPORT1_MODE OPT_MODE_DEVICE | OPT_MODE_HIGH_SPEED
|
||||
#else
|
||||
# define CFG_TUSB_RHPORT0_MODE OPT_MODE_DEVICE | OPT_MODE_FULL_SPEED
|
||||
#define CFG_TUSB_RHPORT0_MODE OPT_MODE_DEVICE | OPT_MODE_FULL_SPEED
|
||||
#endif
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
@@ -55,20 +56,20 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef CFG_TUSB_OS
|
||||
#define CFG_TUSB_OS OPT_OS_FREERTOS
|
||||
#define CFG_TUSB_OS OPT_OS_FREERTOS
|
||||
#endif
|
||||
|
||||
// Espressif IDF requires "freertos/" prefix in include path
|
||||
#if TU_CHECK_MCU(OPT_MCU_ESP32S2, OPT_MCU_ESP32S3, OPT_MCU_ESP32P4)
|
||||
#define CFG_TUSB_OS_INC_PATH freertos/
|
||||
#define CFG_TUSB_OS_INC_PATH freertos/
|
||||
#endif
|
||||
|
||||
#ifndef CFG_TUSB_DEBUG
|
||||
#define CFG_TUSB_DEBUG 0
|
||||
#define CFG_TUSB_DEBUG 0
|
||||
#endif
|
||||
|
||||
// Enable Device stack
|
||||
#define CFG_TUD_ENABLED 1
|
||||
#define CFG_TUD_ENABLED 1
|
||||
|
||||
/* USB DMA on some MCUs can only access a specific SRAM region with restriction on alignment.
|
||||
* Tinyusb use follows macros to declare transferring memory so that they can be put
|
||||
@@ -82,71 +83,54 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef CFG_TUSB_MEM_ALIGN
|
||||
#define CFG_TUSB_MEM_ALIGN __attribute__ ((aligned(4)))
|
||||
#define CFG_TUSB_MEM_ALIGN __attribute__((aligned(4)))
|
||||
#endif
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// DEVICE CONFIGURATION
|
||||
//--------------------------------------------------------------------
|
||||
//--------------------------------------------------------------------
|
||||
// DEVICE CONFIGURATION
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
#ifndef CFG_TUD_ENDPOINT0_SIZE
|
||||
#define CFG_TUD_ENDPOINT0_SIZE 64
|
||||
#define CFG_TUD_ENDPOINT0_SIZE 64
|
||||
#endif
|
||||
|
||||
//------------- CLASS -------------//
|
||||
//------------- CLASS -------------//
|
||||
|
||||
// The number of video control interfaces
|
||||
// The number of video streaming interfaces
|
||||
#if CONFIG_UVC_SUPPORT_TWO_CAM
|
||||
#define CFG_TUD_VIDEO 2
|
||||
#define CFG_TUD_VIDEO_STREAMING 2
|
||||
#else
|
||||
#define CFG_TUD_VIDEO 1
|
||||
#define CFG_TUD_VIDEO_STREAMING 1
|
||||
#endif
|
||||
#define CFG_TUD_CDC 1
|
||||
|
||||
// CDC FIFO size of TX and RX
|
||||
#define CFG_TUD_CDC_RX_BUFSIZE 256
|
||||
#define CFG_TUD_CDC_TX_BUFSIZE 256
|
||||
|
||||
// CDC Endpoint transfer buffer size, more is faster
|
||||
#define CFG_TUD_CDC_EP_BUFSIZE 64
|
||||
|
||||
// The number of video control interfaces
|
||||
// The number of video streaming interfaces
|
||||
|
||||
#define CFG_TUD_VIDEO 1
|
||||
#define CFG_TUD_VIDEO_STREAMING 1
|
||||
|
||||
// video streaming endpoint size
|
||||
#ifdef UVC_CAM1_BULK_MODE
|
||||
#if CONFIG_TINYUSB_RHPORT_HS
|
||||
#define CFG_TUD_CAM1_VIDEO_STREAMING_EP_BUFSIZE 512
|
||||
#define CFG_TUD_CAM1_VIDEO_STREAMING_EP_BUFSIZE 512
|
||||
#else
|
||||
#define CFG_TUD_CAM1_VIDEO_STREAMING_EP_BUFSIZE 64
|
||||
#define CFG_TUD_CAM1_VIDEO_STREAMING_EP_BUFSIZE 64
|
||||
#endif
|
||||
#define CFG_TUD_CAM1_VIDEO_STREAMING_BULK 1
|
||||
#else
|
||||
#define CFG_TUD_CAM1_VIDEO_STREAMING_BULK 0
|
||||
#if CONFIG_TINYUSB_RHPORT_HS
|
||||
#define CFG_TUD_CAM1_VIDEO_STREAMING_EP_BUFSIZE 1023
|
||||
#define CFG_TUD_CAM1_VIDEO_STREAMING_EP_BUFSIZE 1023
|
||||
#else
|
||||
#define CFG_TUD_CAM1_VIDEO_STREAMING_EP_BUFSIZE 512
|
||||
#define CFG_TUD_CAM1_VIDEO_STREAMING_EP_BUFSIZE 512
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define CFG_EXAMPLE_VIDEO_DISABLE_MJPEG (!FORMAT_MJPEG)
|
||||
|
||||
#if CONFIG_UVC_SUPPORT_TWO_CAM
|
||||
#ifdef UVC_CAM2_BULK_MODE
|
||||
#if CONFIG_TINYUSB_RHPORT_HS
|
||||
#define CFG_TUD_CAM2_VIDEO_STREAMING_EP_BUFSIZE 512
|
||||
#else
|
||||
#define CFG_TUD_CAM2_VIDEO_STREAMING_EP_BUFSIZE 64
|
||||
#endif
|
||||
#define CFG_TUD_CAM2_VIDEO_STREAMING_BULK 1
|
||||
#else
|
||||
#define CFG_TUD_CAM2_VIDEO_STREAMING_BULK 0
|
||||
#if CONFIG_TINYUSB_RHPORT_HS
|
||||
#define CFG_TUD_CAM2_VIDEO_STREAMING_EP_BUFSIZE 1023
|
||||
#else
|
||||
#define CFG_TUD_CAM2_VIDEO_STREAMING_EP_BUFSIZE 512
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if CONFIG_UVC_SUPPORT_TWO_CAM
|
||||
#define CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE (CFG_TUD_CAM1_VIDEO_STREAMING_EP_BUFSIZE > CFG_TUD_CAM2_VIDEO_STREAMING_EP_BUFSIZE?CFG_TUD_CAM1_VIDEO_STREAMING_EP_BUFSIZE:CFG_TUD_CAM2_VIDEO_STREAMING_EP_BUFSIZE)
|
||||
#else
|
||||
#define CFG_TUD_VIDEO_STREAMING_EP_BUFSIZE CFG_TUD_CAM1_VIDEO_STREAMING_EP_BUFSIZE
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -65,14 +65,18 @@ uint8_t const *tud_descriptor_device_cb(void)
|
||||
// Configuration Descriptor
|
||||
//--------------------------------------------------------------------+
|
||||
// String descriptor indices used in interface descriptors
|
||||
#define STRID_LANGID 0
|
||||
#define STRID_MANUFACTURER 1
|
||||
#define STRID_PRODUCT 2
|
||||
#define STRID_SERIAL 3
|
||||
#define STRID_UVC_CAM1 4
|
||||
#define STRID_LANGID 0
|
||||
#define STRID_MANUFACTURER 1
|
||||
#define STRID_PRODUCT 2
|
||||
#define STRID_SERIAL 3
|
||||
#define STRID_UVC_CAM1 4
|
||||
|
||||
// Endpoint numbers for CDC
|
||||
#define EPNUM_CDC_NOTIF 0x81
|
||||
#define EPNUM_CDC_OUT 0x02
|
||||
#define EPNUM_CDC_IN 0x82
|
||||
// Endpoint numbers for UVC video IN endpoints (device -> host)
|
||||
#define EPNUM_CAM1_VIDEO_IN 0x81
|
||||
#define EPNUM_CAM1_VIDEO_IN 0x83
|
||||
|
||||
#if CFG_TUD_CAM1_VIDEO_STREAMING_BULK
|
||||
|
||||
@@ -113,7 +117,7 @@ uint8_t const *tud_descriptor_device_cb(void)
|
||||
#endif // CFG_TUD_CAM1_VIDEO_STREAMING_BULK
|
||||
|
||||
// Total length of this configuration
|
||||
#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CAM1_VIDEO_CAPTURE_DESC_LEN)
|
||||
#define CONFIG_TOTAL_LEN (TUD_CONFIG_DESC_LEN + TUD_CDC_DESC_LEN + TUD_CAM1_VIDEO_CAPTURE_DESC_LEN)
|
||||
|
||||
// Full-speed configuration descriptor
|
||||
static uint8_t const desc_fs_configuration[] = {
|
||||
@@ -121,6 +125,7 @@ static uint8_t const desc_fs_configuration[] = {
|
||||
// total_length, attributes, power_mA)
|
||||
// attributes: 0 = bus-powered (default). Add TUSB_DESC_CONFIG_ATT_SELF_POWERED or _REMOTE_WAKEUP if needed.
|
||||
TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0, 500),
|
||||
TUD_CDC_DESCRIPTOR(ITF_NUM_CDC, 6, EPNUM_CDC_NOTIF, 8, EPNUM_CDC_OUT, EPNUM_CDC_IN, 64),
|
||||
// IAD for Video Control
|
||||
#if CFG_TUD_CAM1_VIDEO_STREAMING_BULK
|
||||
#if CONFIG_UVC_CAM1_MULTI_FRAMESIZE
|
||||
@@ -235,16 +240,16 @@ uint16_t const *tud_descriptor_string_cb(uint8_t index, uint16_t langid)
|
||||
// Note: the 0xEE index string is a Microsoft OS 1.0 Descriptors.
|
||||
// https://docs.microsoft.com/en-us/windows-hardware/drivers/usbcon/microsoft-defined-usb-descriptors
|
||||
|
||||
if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])))
|
||||
if (!(index < sizeof(string_desc_arr) / sizeof(string_desc_arr[0])))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const char *str = string_desc_arr[index];
|
||||
// Allow dynamic overrides for specific indices
|
||||
if (index == STRID_SERIAL)
|
||||
// Allow dynamic overrides for specific indices
|
||||
if (index == STRID_SERIAL)
|
||||
str = get_serial_number();
|
||||
if (index == STRID_UVC_CAM1)
|
||||
if (index == STRID_UVC_CAM1)
|
||||
str = get_uvc_device_name();
|
||||
if (str == NULL)
|
||||
str = string_desc_arr[index];
|
||||
|
||||
@@ -36,13 +36,13 @@
|
||||
#define UVC_ENTITY_CAP_OUTPUT_TERMINAL 0x02
|
||||
|
||||
enum {
|
||||
#if (CFG_TUD_CDC)
|
||||
ITF_NUM_CDC,
|
||||
ITF_NUM_CDC_DATA,
|
||||
#endif
|
||||
#if (CFG_TUD_VIDEO)
|
||||
ITF_NUM_VIDEO_CONTROL,
|
||||
ITF_NUM_VIDEO_STREAMING,
|
||||
#if CONFIG_UVC_SUPPORT_TWO_CAM
|
||||
ITF_NUM_VIDEO_CONTROL_2,
|
||||
ITF_NUM_VIDEO_STREAMING_2,
|
||||
#endif
|
||||
#endif
|
||||
ITF_NUM_TOTAL
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user