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
|