/*
 * avrdude - A Downloader/Uploader for AVR device programmers
 * Copyright (C) 2006 Joerg Wunsch
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */

// Defines for the USB interface

#ifndef usbdevs_h
#define usbdevs_h

#define USB_VENDOR_ATMEL                     0x03EB
#define USB_VENDOR_MICROCHIP                 0x04D8

#define USB_DEVICE_JTAGICEMKII               0x2103
#define USB_DEVICE_AVRISPMKII                0x2104
#define USB_DEVICE_STK600                    0x2106
#define USB_DEVICE_AVRDRAGON                 0x2107
#define USB_DEVICE_JTAGICE3                  0x2110
#define USB_DEVICE_XPLAINEDPRO               0x2111
#define USB_DEVICE_JTAG3_EDBG                0x2140
#define USB_DEVICE_ATMEL_ICE                 0x2141
#define USB_DEVICE_POWERDEBUGGER             0x2144
#define USB_DEVICE_XPLAINEDMINI              0x2145
#define USB_DEVICE_PKOBN                     0x2175
#define USB_DEVICE_PICKIT4_AVR_MODE          0x2177
#define USB_DEVICE_PICKIT4_PIC_MODE          0x9012
#define USB_DEVICE_PICKIT4_PIC_MODE_BL       0x9017 // PICkit4 in bootloader mode
#define USB_DEVICE_PICKIT5                   0x9036
#define USB_DEVICE_SNAP_AVR_MODE             0x2180
#define USB_DEVICE_SNAP_PIC_MODE             0x9018
#define USB_DEVICE_SNAP_PIC_MODE_BL          0x9019 // SNAP in bootloader mode
#define USB_DEVICE_PICKIT_BASIC              0x9054 // PICkit Basic (app, vendor)
#define USB_DEVICE_PICKIT_BASIC_CDC          0x9055 // PICkit Basic (app, vendor + CDC) (usually this)
#define USB_DEVICE_PICKIT_BASIC_CDC_VENDOR   0x9056 // PICkit Basic (app, vendor + CDC + vendor)
#define USB_DEVICE_PICKIT_BASIC_BL           0x9057 // PICkit Basic (bootloader)
#define USB_DEVICE_PICKIT_BASIC_CIMSIS       0x90AB // PICkit Basic (vendor)
#define USB_DEVICE_PICKIT_BASIC_CIMSIS_CDC   0x90AC // PICkit Basic (vendor + CDC) (usually this)
#define USB_DEVICE_PICKIT_BASIC_CIMSIS_DGI   0x90AD // PICkit Basic (vendor + CDC + DGI)
#define USB_DEVICE_PICKIT_BASIC_CIMSIS_MSD   0x90AE // PICkit Basic (vendor + CDC + DGI + MSD)


#define USB_VENDOR_FTDI                      0x0403
#define USB_DEVICE_FT2232                    0x6010
#define USB_DEVICE_FT245                     0x6001

#define USBASP_SHARED_VID                    0x16C0 // VOTI
#define USBASP_SHARED_PID                    0x05DC // Obdev's free shared PID

#define USBASP_OLD_VID                       0x03EB // ATMEL
#define USBASP_OLD_PID                       0xC7B4 // (unoffical) USBasp

#define USBASP_NIBOBEE_VID                   0x16C0 // VOTI
#define USBASP_NIBOBEE_PID                   0x092F // NIBObee PID

/*
 * These are specifically assigned to USBtiny, if you need your own VID and
 * PIDs you can get them for cheap from www.mecanique.co.uk so please don't
 * reuse these. Thanks!
 */
#define USBTINY_VENDOR_DEFAULT               0x1781
#define USBTINY_PRODUCT_DEFAULT              0x0C9F

// JTAGICEmkII, AVRISPmkII
#define USBDEV_BULK_EP_WRITE_MKII 0x02
#define USBDEV_BULK_EP_READ_MKII  0x82
#define USBDEV_MAX_XFER_MKII 64

// STK600
#define USBDEV_BULK_EP_WRITE_STK600 0x02
#define USBDEV_BULK_EP_READ_STK600 0x83

// JTAGICE3
#define USBDEV_BULK_EP_WRITE_3    0x01
#define USBDEV_BULK_EP_READ_3     0x82
#define USBDEV_EVT_EP_READ_3      0x83

/*
 * The mk3 tools (type jtagice3) have a maxPayloadSize of 912. When accessing
 * paged memory the access should be limited to pageSize. When accessing memory
 * without pageSize the payload should be limited to 256.
 */
#define USBDEV_MAX_XFER_3         912
#define USBDEV_MAX_XFER_3_UNPAGED 256

/*
 * When operating on the JTAGICE3, usbdev_recv_frame() returns an indication in
 * the upper bits of the return value whether the message has been received
 * from the event endpoint rather than the normal conversation endpoint.
 */
#define USB_RECV_LENGTH_MASK   0x0fff   // Up to 4 KiB
#define USB_RECV_FLAG_EVENT    0x1000

#endif
