USB - triple serial with audio

Martin R

New member
I have added new definitions for USB_DUAL_SERIAL_AUDIO and USB_TRIPLE_SERIAL_AUDIO to cores/teensy4/usb_desc.h.USB_TRIPLE_SERIAL_AUDIO does not seem to be working properly.

Is there a bug in my definition?

C++:
#elif defined(USB_DUAL_SERIAL_AUDIO)
  #define VENDOR_ID             0x16C0
  #define PRODUCT_ID            0x048B
  #define MANUFACTURER_NAME     {'T','e','e','n','s','y','d','u','i','n','o'}
  #define MANUFACTURER_NAME_LEN 11
  #define PRODUCT_NAME          {'D','u','a','l',' ','S','.',' ','A','u','d','i','o'}
  #define PRODUCT_NAME_LEN      13
  #define EP0_SIZE              64
  #define NUM_ENDPOINTS         7
  #define NUM_INTERFACE         7

  #define CDC_IAD_DESCRIPTOR    1       // Serial
  #define CDC_STATUS_INTERFACE  0
  #define CDC_DATA_INTERFACE    1
  #define CDC_ACM_ENDPOINT      2
  #define CDC_RX_ENDPOINT       3
  #define CDC_TX_ENDPOINT       3
  #define CDC_ACM_SIZE          16
  #define CDC_RX_SIZE_480       512
  #define CDC_TX_SIZE_480       512
  #define CDC_RX_SIZE_12        64
  #define CDC_TX_SIZE_12        64

  #define CDC2_STATUS_INTERFACE 2       // SerialUSB1
  #define CDC2_DATA_INTERFACE   3
  #define CDC2_ACM_ENDPOINT     4
  #define CDC2_RX_ENDPOINT      5
  #define CDC2_TX_ENDPOINT      5

  #define AUDIO_INTERFACE       4       // Audio (uses 3 consecutive interfaces)
  #define AUDIO_TX_ENDPOINT     6
  #define AUDIO_TX_SIZE         180
  #define AUDIO_RX_ENDPOINT     6
  #define AUDIO_RX_SIZE         180
  #define AUDIO_SYNC_ENDPOINT   7

  #define ENDPOINT2_CONFIG    ENDPOINT_RECEIVE_UNUSED + ENDPOINT_TRANSMIT_INTERRUPT
  #define ENDPOINT3_CONFIG    ENDPOINT_RECEIVE_BULK + ENDPOINT_TRANSMIT_BULK
  #define ENDPOINT4_CONFIG    ENDPOINT_RECEIVE_UNUSED + ENDPOINT_TRANSMIT_INTERRUPT
  #define ENDPOINT5_CONFIG    ENDPOINT_RECEIVE_BULK + ENDPOINT_TRANSMIT_BULK
  // AUDIO
  #define ENDPOINT6_CONFIG    ENDPOINT_RECEIVE_ISOCHRONOUS + ENDPOINT_TRANSMIT_ISOCHRONOUS
  #define ENDPOINT7_CONFIG    ENDPOINT_RECEIVE_UNUSED + ENDPOINT_TRANSMIT_ISOCHRONOUS
#elif defined(USB_TRIPLE_SERIAL_AUDIO)
    #define VENDOR_ID             0x16C0
    #define PRODUCT_ID            0x048C
    #define MANUFACTURER_NAME     {'T','e','e','n','s','y','d','u','i','n','o'}
    #define MANUFACTURER_NAME_LEN 11
    #define PRODUCT_NAME          {'T','r','i','p','l','e','S',' ','A','u','d','i','o'}
    #define PRODUCT_NAME_LEN      13
    #define EP0_SIZE              64
    #define NUM_ENDPOINTS         9
    #define NUM_INTERFACE         9

    #define CDC_IAD_DESCRIPTOR    1       // Serial
    #define CDC_STATUS_INTERFACE  0
    #define CDC_DATA_INTERFACE    1
    #define CDC_ACM_ENDPOINT      2
    #define CDC_RX_ENDPOINT       3
    #define CDC_TX_ENDPOINT       3
    #define CDC_ACM_SIZE          16
    #define CDC_RX_SIZE_480       512
    #define CDC_TX_SIZE_480       512
    #define CDC_RX_SIZE_12        64
    #define CDC_TX_SIZE_12        64

    #define CDC2_STATUS_INTERFACE 2       // SerialUSB1
    #define CDC2_DATA_INTERFACE   3
    #define CDC2_ACM_ENDPOINT     4
    #define CDC2_RX_ENDPOINT      5
    #define CDC2_TX_ENDPOINT      5

    #define CDC3_STATUS_INTERFACE 4       // SerialUSB2
    #define CDC3_DATA_INTERFACE   5
    #define CDC3_ACM_ENDPOINT     6
    #define CDC3_RX_ENDPOINT      7
    #define CDC3_TX_ENDPOINT      7

    #define AUDIO_INTERFACE       6       // Audio (uses 3 consecutive interfaces)
    #define AUDIO_TX_ENDPOINT     8
    #define AUDIO_TX_SIZE         180
    #define AUDIO_RX_ENDPOINT     8
    #define AUDIO_RX_SIZE         180
    #define AUDIO_SYNC_ENDPOINT   9

    #define ENDPOINT2_CONFIG    ENDPOINT_RECEIVE_UNUSED + ENDPOINT_TRANSMIT_INTERRUPT
    #define ENDPOINT3_CONFIG    ENDPOINT_RECEIVE_BULK + ENDPOINT_TRANSMIT_BULK
    #define ENDPOINT4_CONFIG    ENDPOINT_RECEIVE_UNUSED + ENDPOINT_TRANSMIT_INTERRUPT
    #define ENDPOINT5_CONFIG    ENDPOINT_RECEIVE_BULK + ENDPOINT_TRANSMIT_BULK
    #define ENDPOINT6_CONFIG    ENDPOINT_RECEIVE_UNUSED + ENDPOINT_TRANSMIT_INTERRUPT
    #define ENDPOINT7_CONFIG    ENDPOINT_RECEIVE_BULK + ENDPOINT_TRANSMIT_BULK
    // AUDIO
    #define ENDPOINT8_CONFIG    ENDPOINT_RECEIVE_ISOCHRONOUS + ENDPOINT_TRANSMIT_ISOCHRONOUS
    #define ENDPOINT9_CONFIG    ENDPOINT_RECEIVE_UNUSED + ENDPOINT_TRANSMIT_ISOCHRONOUS
#endif
 
There are only 8 USB endpoints in the Teensy hardware (and endpoint 1 is reserved for some cryptic reason). So for USB_TRIPLE_SERIAL_AUDIO you’ve tried to use two more endpoints than actually exist, and hence it doesn’t work…
 
Back
Top