/** \addtogroup group_configuration
 *  @{ */

//--------------------------------------------------------------------+
// COMMON CONFIGURATION
//--------------------------------------------------------------------+

/// \brief tell the stack which mode (host/device/otg) the usb controller0 will be operated on. Possible value is
/// from \ref group_mode. Note the hardware usb controller must support the selected mode.
#define CFG_TUSB_CONTROLLER_0_MODE

/** USB controller in MCU often has limited access to specific RAM section. The Stack will use this macro to place internal variables
  into the USB RAM section as follows. if your mcu's usb controller has no such limit, define CFG_TUSB_ATTR_USBRAM as empty macro.

  @code
  CFG_TUSB_ATTR_USBRAM uint8_t usb_xfer_buffer[10];
  @endcode
 */
#define CFG_TUSB_ATTR_USBRAM

#define CFG_TUSB_MCU          ///< Select one of the supported MCU, the value must be from \ref group_mcu
#define CFG_TUSB_OS           ///< Select one of the supported RTOS, the value must be from \ref group_supported_os.
#define CFG_TUSB_OS_TASK_PRIO ///< If \ref CFG_TUSB_OS is configured to use a real RTOS (other than OPT_OS_NONE). This determines the priority of the usb stack task.

//--------------------------------------------------------------------+
// HOST CONFIGURATION
//--------------------------------------------------------------------+
/** \defgroup CFG_TUSB_HOST Host Options
 *  @{ */

/** \brief Maximum number of device host stack can manage
 * \n If hub class is not enabled, set this equal to number of controllers in host mode
 * \n If hub class is enabled, make sure hub is also counted */
#define CFG_TUSB_HOST_DEVICE_MAX

/// \brief Buffer size used for getting device configuration descriptor. You may want to increase this from default (256)
/// to support lengthy composite device especially with Audio or Video class
#define CFG_TUSB_HOST_ENUM_BUFFER_SIZE

/** \defgroup config_host_class Class Driver
 * \brief For each Class Driver a value of 1 means enable, value of 0 mean disable
 * @{ */
#define CFG_TUSB_HOST_HUB           ///< Enable Hub Class
#define CFG_TUSB_HOST_HID_KEYBOARD  ///< Enable HID Class for Keyboard
#define CFG_TUSB_HOST_HID_MOUSE     ///< Enable HID Class for Mouse
#define CFG_TUSB_HOST_HID_GENERIC   ///< Enable HID Class for Generic (not supported yet)
#define CFG_TUSB_HOST_MSC           ///< Enable Mass Storage Class (SCSI subclass only)
#define CFG_TUSB_HOST_CDC           ///< Enable Virtual Serial (Communication Device Class)
/** @} */

/** @} */ // group Host

//--------------------------------------------------------------------+
// DEVICE CONFIGURATION
//--------------------------------------------------------------------+
/** \defgroup CFG_TUSB_DEVICE Device Options
 *  @{ */

#define CFG_TUSB_DEVICE_ENDOINT0_SIZE ///< Max packet size of Cotnrol Endpoint, default is 64

/// Application MUST define this variable and initialize its pointers's member to all required USB descriptors including
/// Device Descriptor, Configuration Descriptor, String Descriptors, HID Report Descriptors etc ...
tusbd_descriptor_pointer_t tusbd_descriptor_pointers;

/** \defgroup config_device_class Class Driver
 * \brief For each Class Driver a value of 1 means enable, value of 0 mean disable
 * @{ */
#define CFG_TUSB_DEVICE_HID_KEYBOARD ///< Enable HID Class for Keyboard
#define CFG_TUSB_DEVICE_HID_MOUSE 	 ///< Enable HID Class for Mouse
#define CFG_TUSB_DEVICE_HID_GENERIC  ///< Enable HID Class for Generic (not supported yet)
#define CFG_TUSB_DEVICE_MSC 				 ///< Enable Mass Storage Class (SCSI subclass only)
#define CFG_TUSB_DEVICE_CDC 				 ///< Enable Virtual Serial (Communication Device Class)
/** @} */

/** @} */ // group Device

/** @} */
