MakingThings
  • Main Page
  • Related Pages
  • Modules
  • Data Structures
  • Files
  • File List
  • Globals

usb-internal.h

00001 /*
00002   FreeRTOS.org V4.1.0 - copyright (C) 2003-2006 Richard Barry.
00003 
00004   This file is part of the FreeRTOS.org distribution.
00005 
00006   FreeRTOS.org is free software; you can redistribute it and/or modify
00007   it under the terms of the GNU General Public License as published by
00008   the Free Software Foundation; either version 2 of the License, or
00009   (at your option) any later version.
00010 
00011   FreeRTOS.org is distributed in the hope that it will be useful,
00012   but WITHOUT ANY WARRANTY; without even the implied warranty of
00013   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014   GNU General Public License for more details.
00015 
00016   You should have received a copy of the GNU General Public License
00017   along with FreeRTOS.org; if not, write to the Free Software
00018   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00019 
00020   A special exception to the GPL can be applied should you wish to distribute
00021   a combined work that includes FreeRTOS.org, without being obliged to provide
00022   the source code for any proprietary components.  See the licensing section
00023   of http://www.FreeRTOS.org for full details of how and when the exception
00024   can be applied.
00025 
00026   ***************************************************************************
00027   See http://www.FreeRTOS.org for documentation, latest information, license
00028   and contact details.  Please ensure to read the configuration and relevant
00029   port sections of the online documentation.
00030   ***************************************************************************
00031 */
00032 
00033 /* Descriptor type definitions. */
00034 #define usbDESCRIPTOR_TYPE_DEVICE     ( 0x01 )
00035 #define usbDESCRIPTOR_TYPE_CONFIGURATION  ( 0x02 )
00036 #define usbDESCRIPTOR_TYPE_STRING     ( 0x03 )
00037 
00038 /* USB request type definitions. */
00039 #define usbGET_REPORT_REQUEST       ( 0x01 )
00040 #define usbGET_IDLE_REQUEST         ( 0x02 )
00041 #define usbGET_PROTOCOL_REQUEST       ( 0x03 )
00042 #define usbSET_REPORT_REQUEST       ( 0x09 )
00043 #define usbSET_IDLE_REQUEST         ( 0x0A )
00044 #define usbSET_PROTOCOL_REQUEST       ( 0x0B )
00045 #define usbGET_CONFIGURATION_REQUEST    ( 0x08 )
00046 #define usbGET_STATUS_REQUEST       ( 0x00 )
00047 #define usbCLEAR_FEATURE_REQUEST      ( 0x01 )
00048 #define usbSET_FEATURE_REQUEST        ( 0x03 )
00049 #define usbSET_ADDRESS_REQUEST        ( 0x05 )
00050 #define usbGET_DESCRIPTOR_REQUEST     ( 0x06 )
00051 #define usbSET_CONFIGURATION_REQUEST    ( 0x09 )
00052 #define usbGET_INTERFACE_REQUEST      ( 0x0A )
00053 #define usbSET_INTERFACE_REQUEST      ( 0x0B )
00054 
00055 /* ACM Requests */
00056 #define usbSEND_ENCAPSULATED_COMMAND    ( 0x00 )
00057 #define usbGET_ENCAPSULATED_RESPONSE    ( 0x01 )
00058 #define usbSET_LINE_CODING          ( 0x20 )
00059 #define usbGET_LINE_CODING          ( 0x21 )
00060 #define usbSET_CONTROL_LINE_STATE     ( 0x22 )
00061 
00062 /* Misc USB definitions. */
00063 #define usbDEVICE_CLASS_VENDOR_SPECIFIC   ( 0xFF )
00064 #define usbBUS_POWERED            ( 0x80 )
00065 #define usbHID_REPORT_DESCRIPTOR      ( 0x22 )
00066 #define AT91C_UDP_TRANSCEIVER_ENABLE    ( *( ( unsigned long * ) 0xfffb0074 ) )
00067 
00068 /* Index to the various string. */
00069 #define usbLANGUAGE_STRING          ( 0 )
00070 #define usbMANUFACTURER_STRING        ( 1 )
00071 #define usbPRODUCT_STRING         ( 2 )
00072 #define usbCONFIGURATION_STRING       ( 3 )
00073 #define usbINTERFACE_STRING         ( 4 )
00074 
00075 /* Defines fields of standard SETUP request.  Now in normal order. */
00076 #define usbREQUEST_TYPE_INDEX       ( 0 )
00077 #define usbREQUEST_INDEX          ( 1 )
00078 #define usbVALUE_HIGH_BYTE          ( 3 )
00079 #define usbVALUE_LOW_BYTE         ( 2 )
00080 #define usbINDEX_HIGH_BYTE          ( 5 )
00081 #define usbINDEX_LOW_BYTE         ( 4 )
00082 #define usbLENGTH_HIGH_BYTE         ( 7 )
00083 #define usbLENGTH_LOW_BYTE          ( 6 )
00084 
00085 /* Misc application definitions. */
00086 #define usbINTERRUPT_PRIORITY       ( 3 )
00087 #define usbQUEUE_LENGTH           ( 0x3 ) /* Must have all bits set! */
00088 #define usbFIFO_LENGTH            ( ( unsigned portLONG ) 8 )
00089 #define usbEND_POINT_0            ( 0 )
00090 #define usbEND_POINT_1            ( 1 )
00091 #define usbEND_POINT_2            ( 2 )
00092 #define usbEND_POINT_3            ( 3 )
00093 #define usbMAX_CONTROL_MESSAGE_SIZE     ( 128 )
00094 #define usbRX_COUNT_MASK          ( ( unsigned portLONG ) 0x7ff )
00095 #define AT91C_UDP_STALLSENT         AT91C_UDP_ISOERROR
00096 #define usbSHORTEST_DELAY         ( ( portTickType ) 1 )
00097 #define usbINIT_DELAY           ( ( portTickType ) 1000 / portTICK_RATE_MS )
00098 #define usbSHORT_DELAY            ( ( portTickType ) 50 / portTICK_RATE_MS )
00099 #define usbEND_POINT_RESET_MASK       ( ( unsigned portLONG ) 0x0f )
00100 #define usbDATA_INC             ( ( portCHAR ) 5 )
00101 #define usbEXPECTED_NUMBER_OF_BYTES     ( ( unsigned portLONG ) 8 )
00102 
00103 /* Control request types. */
00104 #define usbSTANDARD_DEVICE_REQUEST      ( 0 )
00105 #define usbSTANDARD_INTERFACE_REQUEST   ( 1 )
00106 #define usbSTANDARD_END_POINT_REQUEST   ( 2 )
00107 #define usbCLASS_INTERFACE_REQUEST      ( 5 )
00108 
00109 
00110 /* Macros to manipulate the control and status registers.  These registers 
00111 cannot be accessed using a direct read modify write operation outside of the 
00112 ISR as some bits are left unchanged by writing with a 0, and some are left 
00113 unchanged by writing with a 1. */
00114 
00115 
00116 #define usbCSR_SET_BIT( pulValueNow, ulBit )                      \
00117 {                                           \
00118   /* Set TXCOMP, RX_DATA_BK0, RXSETUP, */                       \
00119   /* STALLSENT and RX_DATA_BK1 to 1 so the */                     \
00120   /* write has no effect. */                              \
00121   ( * ( ( unsigned portLONG * ) pulValueNow ) ) |= ( unsigned portLONG ) 0x4f;    \
00122                                             \
00123   /* Clear the FORCE_STALL and TXPKTRDY bits */                   \
00124   /* so the write has no effect. */                         \
00125   ( * ( ( unsigned portLONG * ) pulValueNow ) ) &= ( unsigned portLONG ) 0xffffffcf;  \
00126                                             \
00127   /* Set whichever bit we want set. */                        \
00128   ( * ( ( unsigned portLONG * ) pulValueNow ) ) |= ( ulBit );             \
00129 }
00130 
00131 #define usbCSR_CLEAR_BIT( pulValueNow, ulBit )                      \
00132 {                                           \
00133   /* Set TXCOMP, RX_DATA_BK0, RXSETUP, */                       \
00134   /* STALLSENT and RX_DATA_BK1 to 1 so the */                     \
00135   /* write has no effect. */                              \
00136   ( * ( ( unsigned portLONG * ) pulValueNow ) ) |= ( unsigned portLONG ) 0x4f;    \
00137                                             \
00138   /* Clear the FORCE_STALL and TXPKTRDY bits */                   \
00139   /* so the write has no effect. */                         \
00140   ( * ( ( unsigned portLONG * ) pulValueNow ) ) &= ( unsigned portLONG ) 0xffffffcf;  \
00141                                             \
00142   /* Clear whichever bit we want clear. */                      \
00143   ( * ( ( unsigned portLONG * ) pulValueNow ) ) &= ( ~ulBit );            \
00144 }

The Make Controller Kit is an open source project maintained by MakingThings.
MakingThings code is released under the Apache 2.0 license.
Bug tracker, development wiki and status can be found at http://dev.makingthings.com.
This document was last updated on 18 May 2009.