You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
193 lines
10 KiB
193 lines
10 KiB
/********************************************************************
|
|
FileName: usb_config.h
|
|
Dependencies: Always: GenericTypeDefs.h, usb_device.h
|
|
Situational: usb_function_hid.h, usb_function_cdc.h, usb_function_msd.h, etc.
|
|
Processor: PIC18 or PIC24 USB Microcontrollers
|
|
Hardware: The code is natively intended to be used on the following
|
|
hardware platforms: PICDEM� FS USB Demo Board,
|
|
PIC18F87J50 FS USB Plug-In Module, or
|
|
Explorer 16 + PIC24 USB PIM. The firmware may be
|
|
modified for use on other USB platforms by editing the
|
|
HardwareProfile.h file.
|
|
Complier: Microchip C18 (for PIC18) or C30 (for PIC24)
|
|
Company: Microchip Technology, Inc.
|
|
|
|
Software License Agreement:
|
|
|
|
The software supplied herewith by Microchip Technology Incorporated
|
|
(the "Company") for its PIC(R) Microcontroller is intended and
|
|
supplied to you, the Company's customer, for use solely and
|
|
exclusively on Microchip PIC Microcontroller products. The
|
|
software is owned by the Company and/or its supplier, and is
|
|
protected under applicable copyright laws. All rights are reserved.
|
|
Any use in violation of the foregoing restrictions may subject the
|
|
user to criminal sanctions under applicable laws, as well as to
|
|
civil liability for the breach of the terms and conditions of this
|
|
license.
|
|
|
|
THIS SOFTWARE IS PROVIDED IN AN "AS IS" CONDITION. NO WARRANTIES,
|
|
WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED
|
|
TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
|
PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT,
|
|
IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
|
|
CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
|
|
|
|
********************************************************************
|
|
File Description:
|
|
|
|
Change History:
|
|
Rev Date Description
|
|
1.0 11/19/2004 Initial release
|
|
2.1 02/26/2007 Updated for simplicity and to use common
|
|
coding style
|
|
*******************************************************************/
|
|
|
|
/*********************************************************************
|
|
* Descriptor specific type definitions are defined in: usbd.h
|
|
********************************************************************/
|
|
|
|
#ifndef USBCFG_H
|
|
#define USBCFG_H
|
|
|
|
/** DEFINITIONS ****************************************************/
|
|
#define USB_EP0_BUFF_SIZE 8 // Valid Options: 8, 16, 32, or 64 bytes.
|
|
// Using larger options take more SRAM, but
|
|
// does not provide much advantage in most types
|
|
// of applications. Exceptions to this, are applications
|
|
// that use EP0 IN or OUT for sending large amounts of
|
|
// application related data.
|
|
|
|
#define USB_MAX_NUM_INT 1 //Set this number to match the maximum interface number used in the descriptors for this firmware project
|
|
#define USB_MAX_EP_NUMBER 1 //Set this number to match the maximum endpoint number used in the descriptors for this firmware project
|
|
|
|
//Device descriptor - if these two definitions are not defined then
|
|
// a ROM USB_DEVICE_DESCRIPTOR variable by the exact name of device_dsc
|
|
// must exist.
|
|
#define USB_USER_DEVICE_DESCRIPTOR &device_dsc
|
|
#define USB_USER_DEVICE_DESCRIPTOR_INCLUDE extern ROM USB_DEVICE_DESCRIPTOR device_dsc
|
|
|
|
//Configuration descriptors - if these two definitions do not exist then
|
|
// a ROM BYTE *ROM variable named exactly USB_CD_Ptr[] must exist.
|
|
#define USB_USER_CONFIG_DESCRIPTOR USB_CD_Ptr
|
|
#define USB_USER_CONFIG_DESCRIPTOR_INCLUDE extern ROM BYTE *ROM USB_CD_Ptr[]
|
|
|
|
//------------------------------------------------------------------------------
|
|
//Select an endpoint ping-pong bufferring mode. Some microcontrollers only
|
|
//support certain modes. For most applications, it is recommended to use either
|
|
//the USB_PING_PONG__FULL_PING_PONG or USB_PING_PONG__EP0_OUT_ONLY options.
|
|
//The other settings are supported on some devices, but they are not
|
|
//recommended, as they offer inferior control transfer timing performance.
|
|
//See inline code comments in usb_device.c for additional details.
|
|
//Enabling ping pong bufferring on an endpoint generally increases firmware
|
|
//overhead somewhat, but when both buffers are used simultaneously in the
|
|
//firmware, can offer better sustained bandwidth, especially for OUT endpoints.
|
|
//------------------------------------------------------
|
|
//#define USB_PING_PONG_MODE USB_PING_PONG__NO_PING_PONG //Not recommended
|
|
#define USB_PING_PONG_MODE USB_PING_PONG__FULL_PING_PONG //A good all around setting
|
|
//#define USB_PING_PONG_MODE USB_PING_PONG__EP0_OUT_ONLY //Another good setting
|
|
//#define USB_PING_PONG_MODE USB_PING_PONG__ALL_BUT_EP0 //Not recommended
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
//Select a USB stack operating mode. In the USB_INTERRUPT mode, the USB stack
|
|
//main task handler gets called only when necessary as an interrupt handler.
|
|
//This can potentially minimize CPU utilization, but adds context saving
|
|
//and restoring overhead associated with interrupts, which can potentially
|
|
//decrease performance.
|
|
//When the USB_POLLING mode is selected, the USB stack main task handler
|
|
//(ex: USBDeviceTasks()) must be called periodically by the application firmware
|
|
//at a minimum rate as described in the inline code comments in usb_device.c.
|
|
//------------------------------------------------------
|
|
#define USB_POLLING
|
|
//#define USB_INTERRUPT
|
|
//------------------------------------------------------------------------------
|
|
|
|
/* Parameter definitions are defined in usb_device.h */
|
|
#define USB_PULLUP_OPTION USB_PULLUP_ENABLE
|
|
//#define USB_PULLUP_OPTION USB_PULLUP_DISABLE
|
|
|
|
#define USB_TRANSCEIVER_OPTION USB_INTERNAL_TRANSCEIVER
|
|
//External Transceiver support is not available on all product families. Please
|
|
// refer to the product family datasheet for more information if this feature
|
|
// is available on the target processor.
|
|
//#define USB_TRANSCEIVER_OPTION USB_EXTERNAL_TRANSCEIVER
|
|
|
|
#define USB_SPEED_OPTION USB_FULL_SPEED
|
|
//#define USB_SPEED_OPTION USB_LOW_SPEED //(this mode is only supported on some microcontrollers)
|
|
|
|
//------------------------------------------------------------------------------------------------------------------
|
|
//Option to enable auto-arming of the status stage of control transfers, if no
|
|
//"progress" has been made for the USB_STATUS_STAGE_TIMEOUT value.
|
|
//If progress is made (any successful transactions completing on EP0 IN or OUT)
|
|
//the timeout counter gets reset to the USB_STATUS_STAGE_TIMEOUT value.
|
|
//
|
|
//During normal control transfer processing, the USB stack or the application
|
|
//firmware will call USBCtrlEPAllowStatusStage() as soon as the firmware is finished
|
|
//processing the control transfer. Therefore, the status stage completes as
|
|
//quickly as is physically possible. The USB_ENABLE_STATUS_STAGE_TIMEOUTS
|
|
//feature, and the USB_STATUS_STAGE_TIMEOUT value are only relevant, when:
|
|
//1. The application uses the USBDeferStatusStage() API function, but never calls
|
|
// USBCtrlEPAllowStatusStage(). Or:
|
|
//2. The application uses host to device (OUT) control transfers with data stage,
|
|
// and some abnormal error occurs, where the host might try to abort the control
|
|
// transfer, before it has sent all of the data it claimed it was going to send.
|
|
//
|
|
//If the application firmware never uses the USBDeferStatusStage() API function,
|
|
//and it never uses host to device control transfers with data stage, then
|
|
//it is not required to enable the USB_ENABLE_STATUS_STAGE_TIMEOUTS feature.
|
|
|
|
#define USB_ENABLE_STATUS_STAGE_TIMEOUTS //Comment this out to disable this feature.
|
|
|
|
//Section 9.2.6 of the USB 2.0 specifications indicate that:
|
|
//1. Control transfers with no data stage: Status stage must complete within
|
|
// 50ms of the start of the control transfer.
|
|
//2. Control transfers with (IN) data stage: Status stage must complete within
|
|
// 50ms of sending the last IN data packet in fullfilment of the data stage.
|
|
//3. Control transfers with (OUT) data stage: No specific status stage timing
|
|
// requirement. However, the total time of the entire control transfer (ex:
|
|
// including the OUT data stage and IN status stage) must not exceed 5 seconds.
|
|
//
|
|
//Therefore, if the USB_ENABLE_STATUS_STAGE_TIMEOUTS feature is used, it is suggested
|
|
//to set the USB_STATUS_STAGE_TIMEOUT value to timeout in less than 50ms. If the
|
|
//USB_ENABLE_STATUS_STAGE_TIMEOUTS feature is not enabled, then the USB_STATUS_STAGE_TIMEOUT
|
|
//parameter is not relevant.
|
|
|
|
#define USB_STATUS_STAGE_TIMEOUT (BYTE)45 //Approximate timeout in milliseconds, except when
|
|
//USB_POLLING mode is used, and USBDeviceTasks() is called at < 1kHz
|
|
//In this special case, the timeout becomes approximately:
|
|
//Timeout(in milliseconds) = ((1000 * (USB_STATUS_STAGE_TIMEOUT - 1)) / (USBDeviceTasks() polling frequency in Hz))
|
|
//------------------------------------------------------------------------------------------------------------------
|
|
|
|
#define USB_SUPPORT_DEVICE
|
|
|
|
#define USB_NUM_STRING_DESCRIPTORS 3
|
|
|
|
//#define USB_INTERRUPT_LEGACY_CALLBACKS
|
|
#define USB_ENABLE_ALL_HANDLERS
|
|
//#define USB_ENABLE_SUSPEND_HANDLER
|
|
//#define USB_ENABLE_WAKEUP_FROM_SUSPEND_HANDLER
|
|
//#define USB_ENABLE_SOF_HANDLER
|
|
//#define USB_ENABLE_ERROR_HANDLER
|
|
//#define USB_ENABLE_OTHER_REQUEST_HANDLER
|
|
//#define USB_ENABLE_SET_DESCRIPTOR_HANDLER
|
|
//#define USB_ENABLE_INIT_EP_HANDLER
|
|
//#define USB_ENABLE_EP0_DATA_HANDLER
|
|
//#define USB_ENABLE_TRANSFER_COMPLETE_HANDLER
|
|
|
|
/** DEVICE CLASS USAGE *********************************************/
|
|
#define USB_USE_HID
|
|
|
|
/** ENDPOINTS ALLOCATION *******************************************/
|
|
|
|
/* HID */
|
|
#define HID_INTF_ID 0x00
|
|
#define HID_EP 1
|
|
#define HID_INT_OUT_EP_SIZE 3
|
|
#define HID_INT_IN_EP_SIZE 3
|
|
#define HID_NUM_OF_DSC 1
|
|
#define HID_RPT01_SIZE 28
|
|
|
|
/** DEFINITIONS ****************************************************/
|
|
|
|
#endif //USBCFG_H
|