firmware/usbdefs_ep0_buff.h
author root@rika
Thu, 23 Apr 2009 20:55:41 +0200
changeset 33 7a0c4b0354ba
parent 2 2f55e5dd591d
permissions -rw-r--r--
updated documentation
slime@2
     1
/*********************************************************************
slime@2
     2
 *
slime@2
     3
 *                Microchip USB C18 Firmware Version 1.0
slime@2
     4
 *
slime@2
     5
 *********************************************************************
slime@2
     6
 * FileName:        usbdefs_ep0_buff.h
slime@2
     7
 * Dependencies:    See INCLUDES section below
slime@2
     8
 * Processor:       PIC18
slime@2
     9
 * Compiler:        C18 2.30.01+
slime@2
    10
 * Company:         Microchip Technology, Inc.
slime@2
    11
 *
slime@2
    12
 * Software License Agreement
slime@2
    13
 *
slime@2
    14
 * The software supplied herewith by Microchip Technology Incorporated
slime@2
    15
 * (the “Company”) for its PICmicro® Microcontroller is intended and
slime@2
    16
 * supplied to you, the Company’s customer, for use solely and
slime@2
    17
 * exclusively on Microchip PICmicro Microcontroller products. The
slime@2
    18
 * software is owned by the Company and/or its supplier, and is
slime@2
    19
 * protected under applicable copyright laws. All rights are reserved.
slime@2
    20
 * Any use in violation of the foregoing restrictions may subject the
slime@2
    21
 * user to criminal sanctions under applicable laws, as well as to
slime@2
    22
 * civil liability for the breach of the terms and conditions of this
slime@2
    23
 * license.
slime@2
    24
 *
slime@2
    25
 * THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES,
slime@2
    26
 * WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED
slime@2
    27
 * TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
slime@2
    28
 * PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT,
slime@2
    29
 * IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
slime@2
    30
 * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
slime@2
    31
 *
slime@2
    32
 * Author               Date        Comment
slime@2
    33
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
slime@2
    34
 * Rawin Rojvanit       11/19/04    Original.
slime@2
    35
 ********************************************************************/
slime@2
    36
slime@2
    37
/******************************************************************************
slime@2
    38
 * USB Definitions: Endpoint 0 Buffer
slime@2
    39
 *****************************************************************************/
slime@2
    40
#ifndef USBDEFS_EP0_BUFF_H
slime@2
    41
#define USBDEFS_EP0_BUFF_H
slime@2
    42
slime@2
    43
/** I N C L U D E S **********************************************************/
slime@2
    44
#include "typedefs.h"
slime@2
    45
#include "usbcfg.h"       // usbcfg.h contains required definitions
slime@2
    46
slime@2
    47
/******************************************************************************
slime@2
    48
 * CTRL_TRF_SETUP:
slime@2
    49
 *
slime@2
    50
 * Every setup packet has 8 bytes.
slime@2
    51
 * However, the buffer size has to equal the EP0_BUFF_SIZE value specified
slime@2
    52
 * in autofiles\usbcfg.h
slime@2
    53
 * The value of EP0_BUFF_SIZE can be 8, 16, 32, or 64.
slime@2
    54
 *
slime@2
    55
 * First 8 bytes are defined to be directly addressable to improve speed
slime@2
    56
 * and reduce code size.
slime@2
    57
 * Bytes beyond the 8th byte have to be accessed using indirect addressing.
slime@2
    58
 *****************************************************************************/
slime@2
    59
typedef union _CTRL_TRF_SETUP
slime@2
    60
{
slime@2
    61
    /** Array for indirect addressing ****************************************/
slime@2
    62
    struct
slime@2
    63
    {
slime@2
    64
        byte _byte[EP0_BUFF_SIZE];
slime@2
    65
    };
slime@2
    66
    
slime@2
    67
    /** Standard Device Requests *********************************************/
slime@2
    68
    struct
slime@2
    69
    {
slime@2
    70
        byte bmRequestType;
slime@2
    71
        byte bRequest;    
slime@2
    72
        word wValue;
slime@2
    73
        word wIndex;
slime@2
    74
        word wLength;
slime@2
    75
    };
slime@2
    76
    struct
slime@2
    77
    {
slime@2
    78
        unsigned :8;
slime@2
    79
        unsigned :8;
slime@2
    80
        WORD W_Value;
slime@2
    81
        WORD W_Index;
slime@2
    82
        WORD W_Length;
slime@2
    83
    };
slime@2
    84
    struct
slime@2
    85
    {
slime@2
    86
        unsigned Recipient:5;           //Device,Interface,Endpoint,Other
slime@2
    87
        unsigned RequestType:2;         //Standard,Class,Vendor,Reserved
slime@2
    88
        unsigned DataDir:1;             //Host-to-device,Device-to-host
slime@2
    89
        unsigned :8;
slime@2
    90
        byte bFeature;                  //DEVICE_REMOTE_WAKEUP,ENDPOINT_HALT
slime@2
    91
        unsigned :8;
slime@2
    92
        unsigned :8;
slime@2
    93
        unsigned :8;
slime@2
    94
        unsigned :8;
slime@2
    95
        unsigned :8;
slime@2
    96
    };
slime@2
    97
    struct
slime@2
    98
    {
slime@2
    99
        unsigned :8;
slime@2
   100
        unsigned :8;
slime@2
   101
        byte bDscIndex;                 //For Configuration and String DSC Only
slime@2
   102
        byte bDscType;                  //Device,Configuration,String
slime@2
   103
        word wLangID;                   //Language ID
slime@2
   104
        unsigned :8;
slime@2
   105
        unsigned :8;
slime@2
   106
    };
slime@2
   107
    struct
slime@2
   108
    {
slime@2
   109
        unsigned :8;
slime@2
   110
        unsigned :8;
slime@2
   111
        BYTE bDevADR;                   //Device Address 0-127
slime@2
   112
        byte bDevADRH;                  //Must equal zero
slime@2
   113
        unsigned :8;
slime@2
   114
        unsigned :8;
slime@2
   115
        unsigned :8;
slime@2
   116
        unsigned :8;
slime@2
   117
    };
slime@2
   118
    struct
slime@2
   119
    {
slime@2
   120
        unsigned :8;
slime@2
   121
        unsigned :8;
slime@2
   122
        byte bCfgValue;                 //Configuration Value 0-255
slime@2
   123
        byte bCfgRSD;                   //Must equal zero (Reserved)
slime@2
   124
        unsigned :8;
slime@2
   125
        unsigned :8;
slime@2
   126
        unsigned :8;
slime@2
   127
        unsigned :8;
slime@2
   128
    };
slime@2
   129
    struct
slime@2
   130
    {
slime@2
   131
        unsigned :8;
slime@2
   132
        unsigned :8;
slime@2
   133
        byte bAltID;                    //Alternate Setting Value 0-255
slime@2
   134
        byte bAltID_H;                  //Must equal zero
slime@2
   135
        byte bIntfID;                   //Interface Number Value 0-255
slime@2
   136
        byte bIntfID_H;                 //Must equal zero
slime@2
   137
        unsigned :8;
slime@2
   138
        unsigned :8;
slime@2
   139
    };
slime@2
   140
    struct
slime@2
   141
    {
slime@2
   142
        unsigned :8;
slime@2
   143
        unsigned :8;
slime@2
   144
        unsigned :8;
slime@2
   145
        unsigned :8;
slime@2
   146
        byte bEPID;                     //Endpoint ID (Number & Direction)
slime@2
   147
        byte bEPID_H;                   //Must equal zero
slime@2
   148
        unsigned :8;
slime@2
   149
        unsigned :8;
slime@2
   150
    };
slime@2
   151
    struct
slime@2
   152
    {
slime@2
   153
        unsigned :8;
slime@2
   154
        unsigned :8;
slime@2
   155
        unsigned :8;
slime@2
   156
        unsigned :8;
slime@2
   157
        unsigned EPNum:4;               //Endpoint Number 0-15
slime@2
   158
        unsigned :3;
slime@2
   159
        unsigned EPDir:1;               //Endpoint Direction: 0-OUT, 1-IN
slime@2
   160
        unsigned :8;
slime@2
   161
        unsigned :8;
slime@2
   162
        unsigned :8;
slime@2
   163
    };
slime@2
   164
    /** End: Standard Device Requests ****************************************/
slime@2
   165
    
slime@2
   166
} CTRL_TRF_SETUP;
slime@2
   167
slime@2
   168
/******************************************************************************
slime@2
   169
 * CTRL_TRF_DATA:
slime@2
   170
 *
slime@2
   171
 * Buffer size has to equal the EP0_BUFF_SIZE value specified
slime@2
   172
 * in autofiles\usbcfg.h
slime@2
   173
 * The value of EP0_BUFF_SIZE can be 8, 16, 32, or 64.
slime@2
   174
 *
slime@2
   175
 * First 8 bytes are defined to be directly addressable to improve speed
slime@2
   176
 * and reduce code size.
slime@2
   177
 * Bytes beyond the 8th byte have to be accessed using indirect addressing.
slime@2
   178
 *****************************************************************************/
slime@2
   179
typedef union _CTRL_TRF_DATA
slime@2
   180
{
slime@2
   181
    /** Array for indirect addressing ****************************************/
slime@2
   182
    struct
slime@2
   183
    {
slime@2
   184
        byte _byte[EP0_BUFF_SIZE];
slime@2
   185
    };
slime@2
   186
    
slime@2
   187
    /** First 8-byte direct addressing ***************************************/
slime@2
   188
    struct
slime@2
   189
    {
slime@2
   190
        byte _byte0;
slime@2
   191
        byte _byte1;
slime@2
   192
        byte _byte2;
slime@2
   193
        byte _byte3;
slime@2
   194
        byte _byte4;
slime@2
   195
        byte _byte5;
slime@2
   196
        byte _byte6;
slime@2
   197
        byte _byte7;
slime@2
   198
    };
slime@2
   199
    struct
slime@2
   200
    {
slime@2
   201
        word _word0;
slime@2
   202
        word _word1;
slime@2
   203
        word _word2;
slime@2
   204
        word _word3;
slime@2
   205
    };
slime@2
   206
slime@2
   207
} CTRL_TRF_DATA;
slime@2
   208
slime@2
   209
#endif //USBDEFS_EP0_BUFF_H