/* Teensyduino Core Library
 * http://www.pjrc.com/teensy/
 * Copyright (c) 2017 PJRC.COM, LLC.
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * 1. The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * 2. If the Software is incorporated into a build system that allows
 * selection among a list of target devices, then similar target
 * devices manufactured by PJRC.COM must be included in the list of
 * target devices and selectable in the same manner.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

// This header is meant to undo the effect of having included
// usb_desc.h.  Everything usb_desc.h, usb_undef.h undefines.
// This stuff is not supposed to be made visible to user level
// programs, but it's nice if we can use it within the headers
// included by user programs, to automatically define only the
// appropriate APIs for the types of USB interfaces used.

#ifdef _usb_desc_h_
#undef _usb_desc_h_
#endif
#ifdef ENDPOINT_UNUSED
#undef ENDPOINT_UNUSED
#endif
#ifdef ENDPOINT_TRANSMIT_ONLY
#undef ENDPOINT_TRANSMIT_ONLY
#endif
#ifdef ENDPOINT_RECEIVE_ONLY
#undef ENDPOINT_RECEIVE_ONLY
#endif
#ifdef ENDPOINT_TRANSMIT_AND_RECEIVE
#undef ENDPOINT_TRANSMIT_AND_RECEIVE
#endif
#ifdef VENDOR_ID
#undef VENDOR_ID
#endif
#ifdef PRODUCT_ID
#undef PRODUCT_ID
#endif
#ifdef BCD_DEVICE
#undef BCD_DEVICE
#endif
#ifdef DEVICE_CLASS
#undef DEVICE_CLASS
#endif
#ifdef MANUFACTURER_NAME
#undef MANUFACTURER_NAME
#endif
#ifdef MANUFACTURER_NAME_LEN
#undef MANUFACTURER_NAME_LEN
#endif
#ifdef PRODUCT_NAME
#undef PRODUCT_NAME
#endif
#ifdef PRODUCT_NAME_LEN
#undef PRODUCT_NAME_LEN
#endif
#ifdef EP0_SIZE
#undef EP0_SIZE
#endif
#ifdef NUM_ENDPOINTS
#undef NUM_ENDPOINTS
#endif
#ifdef NUM_USB_BUFFERS
#undef NUM_USB_BUFFERS
#endif
#ifdef NUM_INTERFACE
#undef NUM_INTERFACE
#endif
#ifdef CDC_STATUS_INTERFACE
#undef CDC_STATUS_INTERFACE
#endif
#ifdef CDC_DATA_INTERFACE
#undef CDC_DATA_INTERFACE
#endif
#ifdef CDC_ACM_ENDPOINT
#undef CDC_ACM_ENDPOINT
#endif
#ifdef CDC_RX_ENDPOINT
#undef CDC_RX_ENDPOINT
#endif
#ifdef CDC_TX_ENDPOINT
#undef CDC_TX_ENDPOINT
#endif
#ifdef CDC_ACM_SIZE
#undef CDC_ACM_SIZE
#endif
#ifdef CDC_RX_SIZE
#undef CDC_RX_SIZE
#endif
#ifdef CDC_TX_SIZE
#undef CDC_TX_SIZE
#endif
#ifdef CDC2_STATUS_INTERFACE
#undef CDC2_STATUS_INTERFACE
#endif
#ifdef CDC2_DATA_INTERFACE
#undef CDC2_DATA_INTERFACE
#endif
#ifdef CDC2_ACM_ENDPOINT
#undef CDC2_ACM_ENDPOINT
#endif
#ifdef CDC2_RX_ENDPOINT
#undef CDC2_RX_ENDPOINT
#endif
#ifdef CDC2_TX_ENDPOINT
#undef CDC2_TX_ENDPOINT
#endif
#ifdef CDC2_ACM_SIZE
#undef CDC2_ACM_SIZE
#endif
#ifdef CDC2_RX_SIZE
#undef CDC2_RX_SIZE
#endif
#ifdef CDC2_TX_SIZE
#undef CDC2_TX_SIZE
#endif
#ifdef CDC3_STATUS_INTERFACE
#undef CDC3_STATUS_INTERFACE
#endif
#ifdef CDC3_DATA_INTERFACE
#undef CDC3_DATA_INTERFACE
#endif
#ifdef CDC3_ACM_ENDPOINT
#undef CDC3_ACM_ENDPOINT
#endif
#ifdef CDC3_RX_ENDPOINT
#undef CDC3_RX_ENDPOINT
#endif
#ifdef CDC3_TX_ENDPOINT
#undef CDC3_TX_ENDPOINT
#endif
#ifdef CDC3_ACM_SIZE
#undef CDC3_ACM_SIZE
#endif
#ifdef CDC3_RX_SIZE
#undef CDC3_RX_SIZE
#endif
#ifdef CDC3_TX_SIZE
#undef CDC3_TX_SIZE
#endif
#ifdef SEREMU_INTERFACE
#undef SEREMU_INTERFACE
#endif
#ifdef SEREMU_TX_ENDPOINT
#undef SEREMU_TX_ENDPOINT
#endif
#ifdef SEREMU_TX_SIZE
#undef SEREMU_TX_SIZE
#endif
#ifdef SEREMU_TX_INTERVAL
#undef SEREMU_TX_INTERVAL
#endif
#ifdef SEREMU_RX_ENDPOINT
#undef SEREMU_RX_ENDPOINT
#endif
#ifdef SEREMU_RX_SIZE
#undef SEREMU_RX_SIZE
#endif
#ifdef SEREMU_RX_INTERVAL
#undef SEREMU_RX_INTERVAL
#endif
#ifdef KEYBOARD_INTERFACE
#undef KEYBOARD_INTERFACE
#endif
#ifdef KEYBOARD_ENDPOINT
#undef KEYBOARD_ENDPOINT
#endif
#ifdef KEYBOARD_SIZE
#undef KEYBOARD_SIZE
#endif
#ifdef KEYBOARD_INTERVAL
#undef KEYBOARD_INTERVAL
#endif
#ifdef MOUSE_INTERFACE
#undef MOUSE_INTERFACE
#endif
#ifdef MOUSE_ENDPOINT
#undef MOUSE_ENDPOINT
#endif
#ifdef MOUSE_SIZE
#undef MOUSE_SIZE
#endif
#ifdef MOUSE_INTERVAL
#undef MOUSE_INTERVAL
#endif
#ifdef JOYSTICK_INTERFACE
#undef JOYSTICK_INTERFACE
#endif
#ifdef JOYSTICK_ENDPOINT
#undef JOYSTICK_ENDPOINT
#endif
#ifdef JOYSTICK_SIZE
#undef JOYSTICK_SIZE
#endif
#ifdef JOYSTICK_INTERVAL
#undef JOYSTICK_INTERVAL
#endif
#ifdef CDC_IAD_DESCRIPTOR
#undef CDC_IAD_DESCRIPTOR
#endif
#ifdef MIDI_INTERFACE
#undef MIDI_INTERFACE
#endif
#ifdef MIDI_NUM_CABLES
#undef MIDI_NUM_CABLES
#endif
#ifdef MIDI_INTERFACE_JACK_PAIR
#undef MIDI_INTERFACE_JACK_PAIR
#endif
#ifdef MIDI_TX_ENDPOINT
#undef MIDI_TX_ENDPOINT
#endif
#ifdef MIDI_TX_SIZE
#undef MIDI_TX_SIZE
#endif
#ifdef MIDI_RX_ENDPOINT
#undef MIDI_RX_ENDPOINT
#endif
#ifdef MIDI_RX_SIZE
#undef MIDI_RX_SIZE
#endif
#ifdef RAWHID_INTERFACE
#undef RAWHID_INTERFACE
#endif
#ifdef RAWHID_TX_ENDPOINT
#undef RAWHID_TX_ENDPOINT
#endif
#ifdef RAWHID_TX_SIZE
#undef RAWHID_TX_SIZE
#endif
#ifdef RAWHID_TX_INTERVAL
#undef RAWHID_TX_INTERVAL
#endif
#ifdef RAWHID_RX_ENDPOINT
#undef RAWHID_RX_ENDPOINT
#endif
#ifdef RAWHID_RX_SIZE
#undef RAWHID_RX_SIZE
#endif
#ifdef RAWHID_RX_INTERVAL
#undef RAWHID_RX_INTERVAL
#endif
#ifdef FLIGHTSIM_INTERFACE
#undef FLIGHTSIM_TX_ENDPOINT
#endif
#ifdef FLIGHTSIM_TX_SIZE
#undef FLIGHTSIM_TX_SIZE
#endif
#ifdef FLIGHTSIM_TX_INTERVAL
#undef FLIGHTSIM_TX_INTERVAL
#endif
#ifdef FLIGHTSIM_RX_ENDPOINT
#undef FLIGHTSIM_RX_ENDPOINT
#endif
#ifdef FLIGHTSIM_RX_SIZE
#undef FLIGHTSIM_RX_SIZE
#endif
#ifdef MTP_INTERFACE
#undef MTP_INTERFACE
#endif
#ifdef MTP_TX_ENDPOINT
#undef MTP_TX_ENDPOINT
#endif
#ifdef MTP_TX_SIZE
#undef MTP_TX_SIZE
#endif
#ifdef MTP_RX_ENDPOINT
#undef MTP_RX_ENDPOINT
#endif
#ifdef MTP_RX_SIZE
#undef MTP_RX_SIZE
#endif
#ifdef MTP_EVENT_ENDPOINT
#undef MTP_EVENT_ENDPOINT
#endif
#ifdef MTP_EVENT_SIZE
#undef MTP_EVENT_SIZE
#endif
#ifdef MTP_EVENT_INTERVAL
#undef MTP_EVENT_INTERVAL
#endif
#ifdef ENDPOINT1_CONFIG
#undef ENDPOINT1_CONFIG
#endif
#ifdef ENDPOINT2_CONFIG
#undef ENDPOINT2_CONFIG
#endif
#ifdef ENDPOINT3_CONFIG
#undef ENDPOINT3_CONFIG
#endif
#ifdef ENDPOINT4_CONFIG
#undef ENDPOINT4_CONFIG
#endif
#ifdef ENDPOINT5_CONFIG
#undef ENDPOINT5_CONFIG
#endif
#ifdef ENDPOINT6_CONFIG
#undef ENDPOINT6_CONFIG
#endif
#ifdef ENDPOINT7_CONFIG
#undef ENDPOINT7_CONFIG
#endif
#ifdef ENDPOINT8_CONFIG
#undef ENDPOINT8_CONFIG
#endif
#ifdef ENDPOINT9_CONFIG
#undef ENDPOINT9_CONFIG
#endif
#ifdef ENDPOINT10_CONFIG
#undef ENDPOINT10_CONFIG
#endif
#ifdef ENDPOINT11_CONFIG
#undef ENDPOINT11_CONFIG
#endif
#ifdef ENDPOINT12_CONFIG
#undef ENDPOINT12_CONFIG
#endif
#ifdef ENDPOINT13_CONFIG
#undef ENDPOINT13_CONFIG
#endif
#ifdef ENDPOINT14_CONFIG
#undef ENDPOINT14_CONFIG
#endif
#ifdef ENDPOINT15_CONFIG
#undef ENDPOINT15_CONFIG
#endif