+// ----- Functions -----
+
+uint8_t usb_configured(); // is the USB port configured
+uint8_t usb_init(); // Returns 1 on success, 0 if no cable is attached
+
+void usb_isr();
+void usb_tx( uint32_t endpoint, usb_packet_t *packet );
+void usb_tx_isr( uint32_t endpoint, usb_packet_t *packet );
+
+uint32_t usb_tx_byte_count( uint32_t endpoint );
+uint32_t usb_tx_packet_count( uint32_t endpoint );
+
+usb_packet_t *usb_rx( uint32_t endpoint );
+
+static inline uint32_t usb_rx_byte_count(uint32_t endpoint) __attribute__((always_inline));
+static inline uint32_t usb_rx_byte_count(uint32_t endpoint)
+{
+ endpoint--;
+ if ( endpoint >= NUM_ENDPOINTS )
+ return 0;
+ return usb_rx_byte_count_data[ endpoint ];
+}
+
+void usb_device_reload();